Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
9a4e585
Port Telescope's end-to-end batch watcher test
binaryfire Oct 3, 2026
1beb357
Disable npm install scripts for Telescope's assets
binaryfire Oct 3, 2026
ee5fb7d
Port Telescope's duplicate reservation job test
binaryfire Oct 3, 2026
318a3f8
Update Telescope's axios and moment build dependencies
binaryfire Oct 3, 2026
f9fbcfc
Consolidate Telescope's CSP nonce tests under upstream's name
binaryfire Oct 3, 2026
524f8be
Add Telescope's list and show commands
binaryfire Oct 3, 2026
c98fd7b
Cancel Telescope's in-flight dashboard requests between screens
binaryfire Oct 3, 2026
ef61ce6
Hide set-cookie headers in Telescope's provider stub
binaryfire Oct 3, 2026
0caf0a1
Record the name of a scheduled task's timezone object in Telescope
binaryfire Oct 3, 2026
d9d8956
Preview the right lines for exceptions near the top of a file
binaryfire Oct 3, 2026
0ebfc0d
Record closure middleware by name in Telescope requests
binaryfire Oct 3, 2026
fab0afa
Document Telescope's differences from Laravel
binaryfire Oct 3, 2026
51134cd
Use a real shell in Tinker's class alias tests
binaryfire Oct 3, 2026
a46d47a
Record the Reverb, Scout, Telescope and Tinker sync checkpoints
binaryfire Oct 3, 2026
ce3d42d
Track Wayfinder's next branch and note how Laravel docs are synced
binaryfire Oct 3, 2026
bd4e628
Keep tracking Wayfinder's main branch
binaryfire Oct 3, 2026
8f37f29
Raise Wayfinder's happy-dom minimum to 20.8.9
binaryfire Oct 3, 2026
87b16e4
Sync Wayfinder main and build the HTTP kernel before providers boot
binaryfire Oct 3, 2026
7316c38
Raise the worker memory limit in Telescope's batch watcher test
binaryfire Oct 3, 2026
486051d
Bring Laravel documentation updates into the first group of pages
binaryfire Oct 3, 2026
0881b01
Bring the Permission README in line with the package README format
binaryfire Oct 3, 2026
3cf5542
Fix stale and failed entry loads in the Telescope dashboard
binaryfire Oct 3, 2026
0f9f0d3
Preserve recorded values in Telescope console output
binaryfire Oct 3, 2026
a2969eb
Correct the Telescope CSP nonce and DatabaseRefreshed docs
binaryfire Oct 3, 2026
2217eae
Keep console formatting from altering recorded data
binaryfire Oct 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 16 additions & 13 deletions docs/upstream-sync/sync.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -94,15 +94,16 @@ laravel/horizon:

laravel/reverb:
branch: main
checked_through: null
last_reviewed_pr: null
sync_date: null
checked_through: 74c8c4082c07f428d6399cc2f9bc5c6fd1cb1179
last_reviewed_pr: 410
sync_date: '2026-10-03'

laravel/scout:
branch: 11.x
checked_through: null
last_reviewed_pr: null
sync_date: null
checked_through: ce2542f5a7297d21975ddcd7115dbf798fd8ba00
last_reviewed_pr: 1012
sync_date: '2026-10-03'
notes: "The Laravel AI SDK integrations from #1007, #1008, #1009 and #1012 are not ported yet and are not covered by checked_through; port them with Hypervel's AI SDK. They are the database engine's semantic and hybrid search and generated embeddings for Meilisearch, Typesense and Turbopuffer."

laravel/slack-notification-channel:
branch: 3.x
Expand All @@ -112,28 +113,30 @@ laravel/slack-notification-channel:

laravel/telescope:
branch: 5.x
checked_through: null
last_reviewed_pr: null
sync_date: null
checked_through: bedfc50a3561c93cd89064643139a51c56bfd8a6
last_reviewed_pr: 1769
sync_date: '2026-10-03'
notes: Rebuild dist with npm 11.10 or newer after resource or frontend dependency changes.

laravel/tinker:
branch: 3.x
checked_through: null
last_reviewed_pr: null
sync_date: null
checked_through: 8f4063c64bb5a39c2ae46d400995ce7d28a2e593
last_reviewed_pr: 214
sync_date: '2026-10-03'

laravel/wayfinder:
branch: main
checked_through: null
last_reviewed_pr: null
sync_date: null
notes: Track main for applicable fixes. Wayfinder next and its Surveyor, Ranger and Structure Discoverer dependency ports are deferred until Wayfinder v1. At each sync, check whether v1 has been released; if so, notify the owner and obtain approval before changing the tracked branch or beginning those ports.

laravel/docs:
branch: 13.x
checked_through: null
last_reviewed_pr: null
sync_date: null
notes: Shared documentation for the framework and Laravel packages.
notes: Shared documentation for the framework and Laravel packages. Reconcile upstream changes with existing Hypervel documentation, including independently written coverage. Replace custom wording for equivalent content with upstream wording, adapting it for Hypervel and preserving enhancements and intentional differences absent upstream. Do not duplicate existing coverage.

inertiajs/inertia-laravel:
branch: 3.x
Expand Down
2 changes: 1 addition & 1 deletion pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use ReflectionClass;
use RuntimeException;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Output\OutputInterface;
use Throwable;

#[AsCommand(name: 'invoke-serialized-closure')]
Expand All @@ -29,12 +30,13 @@ class InvokeSerializedClosureCommand extends Command
public function handle(): int
{
try {
// The parent process decodes this envelope, so console formatting must not alter it.
$this->output->write(json_encode([
'successful' => true,
'result' => base64_encode(serialize(
$this->hypervel->call($this->resolveSerializedClosure())
)),
], JSON_THROW_ON_ERROR));
], JSON_THROW_ON_ERROR), false, OutputInterface::OUTPUT_RAW);
} catch (Throwable $exception) {
try {
report($exception);
Expand Down Expand Up @@ -88,7 +90,7 @@ public function handle(): int
], JSON_THROW_ON_ERROR);
}

$this->output->write($payload);
$this->output->write($payload, false, OutputInterface::OUTPUT_RAW);
}

return self::SUCCESS;
Expand Down
4 changes: 3 additions & 1 deletion src/console/src/Commands/ScheduleListCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
use ReflectionClass;
use ReflectionFunction;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Terminal;

#[AsCommand(name: 'schedule:list')]
Expand Down Expand Up @@ -86,6 +87,7 @@ public function handle(): void
*/
protected function displayJson(Collection $events, DateTimeZone $timezone): void
{
// Formatting would strip console style tags, and backslashes before < or >, from shell commands.
$this->output->writeln($events->map(function ($event) use ($timezone) {
$nextDueDate = $this->getNextDueDateForEvent($event, $timezone);

Expand Down Expand Up @@ -117,7 +119,7 @@ protected function displayJson(Collection $events, DateTimeZone $timezone): void
'repeat_seconds' => $event->isRepeatable() ? $event->repeatSeconds : null,
'environments' => $event->environments,
];
})->values()->toJson());
})->values()->toJson(), OutputInterface::OUTPUT_RAW);
}

/**
Expand Down
7 changes: 5 additions & 2 deletions src/database/src/Console/ShowCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
use Hypervel\Support\Collection;
use Hypervel\Support\Number;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Formatter\OutputFormatter;
use Symfony\Component\Console\Output\OutputInterface;

#[AsCommand(name: 'db:show')]
class ShowCommand extends DatabaseInspectionCommand
Expand Down Expand Up @@ -121,7 +123,8 @@ protected function display(array $data): void
*/
protected function displayJson(array $data): void
{
$this->output->writeln(json_encode($data, JSON_THROW_ON_ERROR));
// Formatting would strip console style tags, and backslashes before < or >, from table comments.
$this->output->writeln(json_encode($data, JSON_THROW_ON_ERROR), OutputInterface::OUTPUT_RAW);
}

/**
Expand Down Expand Up @@ -171,7 +174,7 @@ protected function displayForCli(array $data): void
if ($this->output->isVerbose()) {
if ($table['comment']) {
$this->components->bulletList([
$table['comment'],
OutputFormatter::escape($table['comment']),
]);
}
}
Expand Down
7 changes: 5 additions & 2 deletions src/database/src/Console/ShowModelCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use Hypervel\Database\Eloquent\ModelInspector;
use Hypervel\Support\Collection;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Formatter\OutputFormatter;
use Symfony\Component\Console\Output\OutputInterface;

use function Hypervel\Prompts\suggest;
Expand Down Expand Up @@ -69,8 +70,10 @@ protected function display(ModelInfo $modelData): void
*/
protected function displayJson(ModelInfo $modelData): void
{
// Formatting would strip console style tags, and backslashes before < or >, from attribute defaults.
$this->output->writeln(
(new Collection($modelData))->toJson()
(new Collection($modelData))->toJson(),
OutputInterface::OUTPUT_RAW
);
}

Expand Down Expand Up @@ -115,7 +118,7 @@ protected function displayCli(ModelInfo $modelData): void

if ($attribute['default'] !== null) {
$this->components->bulletList(
[sprintf('default: %s', $attribute['default'])],
[OutputFormatter::escape(sprintf('default: %s', $attribute['default']))],
OutputInterface::VERBOSITY_VERBOSE
);
}
Expand Down
9 changes: 6 additions & 3 deletions src/database/src/Console/TableCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
use Hypervel\Support\Collection;
use Hypervel\Support\Number;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Formatter\OutputFormatter;
use Symfony\Component\Console\Output\OutputInterface;

use function Hypervel\Prompts\search;

Expand Down Expand Up @@ -180,7 +182,8 @@ protected function display(array $data): void
*/
protected function displayJson(array $data): void
{
$this->output->writeln(json_encode($data, JSON_THROW_ON_ERROR));
// Formatting would strip console style tags, and backslashes before < or >, from column defaults and comments.
$this->output->writeln(json_encode($data, JSON_THROW_ON_ERROR), OutputInterface::OUTPUT_RAW);
}

/**
Expand All @@ -194,7 +197,7 @@ protected function displayForCli(array $data): void

$this->newLine();

$this->components->twoColumnDetail('<fg=green;options=bold>' . $table['schema_qualified_name'] . '</>', $table['comment'] ? '<fg=gray>' . $table['comment'] . '</>' : null);
$this->components->twoColumnDetail('<fg=green;options=bold>' . $table['schema_qualified_name'] . '</>', $table['comment'] ? '<fg=gray>' . OutputFormatter::escape($table['comment']) . '</>' : null);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Database metadata gains escape characters OutputFormatter::escape() prepares text for Symfony's console formatter, but twoColumnDetail renders through Termwind and already HTML-escapes its values. A table comment such as <info>Pending</info> will display with added escape characters instead of its original text. The same problem affects column defaults here and the escaped values in db:show and model:show.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Claude Code Fix in Codex

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not an issue. The escape only adds a backslash before < and >, and the console formatter removes it again when the line is written, so plain values such as Pending are unchanged. I rendered values through both twoColumnDetail and the bullet list: Pending, a < b, x > 0 && y and Tom & Jerry display exactly as stored, and <info>Pending</info> a\>b, which used to display as Pending a>b, now displays unchanged. The new DatabaseConsoleOutputTest and ModelInspectorTest cases assert the rendered text.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right — my original concern was incorrect. OutputFormatter::escape() is appropriate here: the console formatter removes the protective backslashes when rendering while preserving literal style-looking text and comparison operators. The rendered cases and added DatabaseConsoleOutputTest/ModelInspectorTest coverage confirm that twoColumnDetail and bullet-list output match the stored values, so this is not an issue.

$this->components->twoColumnDetail('Columns', $table['columns']);

if (! is_null($table['size'])) {
Expand All @@ -217,7 +220,7 @@ protected function displayForCli(array $data): void
$columns->each(function ($column) {
$this->components->twoColumnDetail(
$column['column'] . ' <fg=gray>' . $column['attributes']->implode(', ') . '</>',
(! is_null($column['default']) ? '<fg=gray>' . $column['default'] . '</> ' : '') . $column['type']
(! is_null($column['default']) ? '<fg=gray>' . OutputFormatter::escape($column['default']) . '</> ' : '') . $column['type']
);
});

Expand Down
6 changes: 3 additions & 3 deletions src/docs/artisan.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
<a name="introduction"></a>
## Introduction

Artisan is the command line interface included with Hypervel. Artisan exists at the root of your application as the `artisan` script and provides a number of helpful commands that can assist you while you build your application. To view a list of all available Artisan commands, you may use the `list` command:
Artisan is the command line interface included with Hypervel. Artisan exists at the root of your application as the `artisan` script and provides a number of helpful commands you can use while building your application. To view a list of all available Artisan commands, you may use the `list` command:

```shell
php artisan list
Expand Down Expand Up @@ -219,7 +219,7 @@ class SendEmails extends Command
You may define command aliases using the `$aliases` property. If you would like to hide a command from the command list while keeping it executable, define a `$hidden` property with a value of `true`.

> [!NOTE]
> For greater code reuse, it is good practice to keep your console commands light and let them defer to application services to accomplish their tasks. In the example above, note that we inject a service class to do the "heavy lifting" of sending the e-mails.
> For greater code reuse, it is good practice to keep your console commands light and let them defer to application services to accomplish their tasks. In the example above, note that we inject a service class to do the "heavy lifting" of sending the emails.

<a name="command-attributes"></a>
#### Command Attributes
Expand Down Expand Up @@ -1038,7 +1038,7 @@ $this->callSilently('mail:send', [
<a name="signal-handling"></a>
## Signal Handling

As you may know, operating systems allow signals to be sent to running processes. For example, the `SIGTERM` signal is how operating systems ask a program to terminate. If you wish to listen for signals in your Artisan console commands and execute code when they occur, you may use the `trap` method:
As you may know, operating systems allow signals to be sent to running processes. For example, the `SIGTERM` signal is how operating systems ask a program to terminate gracefully. If you wish to listen for signals in your Artisan console commands and execute code when they occur, you may use the `trap` method:

```php
/**
Expand Down
5 changes: 4 additions & 1 deletion src/docs/authentication.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ Hypervel provides optional packages to assist you in managing API tokens and aut

Passport is an OAuth2 authentication provider, offering a variety of OAuth2 "grant types" which allow you to issue various types of tokens. In general, this is a robust and complex package for API authentication. However, most applications do not require the complex features offered by the OAuth2 spec, which can be confusing for both users and developers. In addition, developers have been historically confused about how to authenticate SPA applications or mobile applications using OAuth2 authentication providers like Passport.

> [!NOTE]
> Hypervel's port of Passport is coming soon.

**Sanctum**

In response to the complexity of OAuth2 and developer confusion, we set out to build a simpler, more streamlined authentication package that could handle both first-party web requests from a web browser and API requests via tokens. This goal was realized with the release of [Hypervel Sanctum](/docs/{{version}}/sanctum), which should be considered the preferred and recommended authentication package for applications that will be offering a first-party web UI in addition to an API, or will be powered by a single-page application (SPA) that exists separately from the backend Hypervel application, or applications that offer a mobile client.
Expand Down Expand Up @@ -685,7 +688,7 @@ You may customize the cookie lifetime for a session guard using the `remember` o
],
```

If your application offers "remember me" functionality, you may use the `viaRemember` method to determine if the currently authenticated user was authenticated using the "remember me" cookie:
If your application offers "remember me" functionality, you may use the `viaRemember` method to determine if the currently authenticated user was authenticated using the "remember me" cookie:

```php
use Hypervel\Support\Facades\Auth;
Expand Down
10 changes: 5 additions & 5 deletions src/docs/blade.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
- [Anonymous Index Components](#anonymous-index-components)
- [Data Properties / Attributes](#data-properties-attributes)
- [Accessing Parent Data](#accessing-parent-data)
- [Anonymous Components Paths](#anonymous-component-paths)
- [Anonymous Component Paths](#anonymous-component-paths)
- [Building Layouts](#building-layouts)
- [Layouts Using Components](#layouts-using-components)
- [Layouts Using Template Inheritance](#layouts-using-template-inheritance)
Expand Down Expand Up @@ -149,7 +149,7 @@ The `@` symbol may also be used to escape Blade directives:

Sometimes you may pass an array to your view with the intention of rendering it as JSON in order to initialize a JavaScript variable. For example:

```php
```blade
<script>
var app = <?php echo json_encode($array); ?>;
</script>
Expand Down Expand Up @@ -793,7 +793,7 @@ Once your component has been registered, it may be rendered using its tag alias:
<x-package-alert/>
```

Alternatively, you may use the `componentNamespace` method to autoload component classes by convention. For example, a `Nightshade` package might have `Calendar` and `ColorPicker` components that reside within the `Package\Views\Components` namespace:
Alternatively, you may use the `componentNamespace` method to autoload component classes by convention. For example, a `Nightshade` package might have `Calendar` and `ColorPicker` components that reside within the `Nightshade\Views\Components` namespace:

```php
use Hypervel\Support\Facades\Blade;
Expand Down Expand Up @@ -1017,7 +1017,7 @@ return function (array $data) {
// $data['slot'];

return '<div {{ $attributes }}>Components content</div>';
}
};
```

> [!WARNING]
Expand Down Expand Up @@ -1462,7 +1462,7 @@ Once your component has been registered, it may be rendered using its tag alias:

#### Autoloading Package Components

Alternatively, you may use the `componentNamespace` method to autoload component classes by convention. For example, a `Nightshade` package might have `Calendar` and `ColorPicker` components that reside within the `Package\Views\Components` namespace:
Alternatively, you may use the `componentNamespace` method to autoload component classes by convention. For example, a `Nightshade` package might have `Calendar` and `ColorPicker` components that reside within the `Nightshade\Views\Components` namespace:

```php
use Hypervel\Support\Facades\Blade;
Expand Down
Loading
Loading