diff --git a/.changeset/activity-without-nested-scroll.md b/.changeset/activity-without-nested-scroll.md deleted file mode 100644 index 499de9f104e..00000000000 --- a/.changeset/activity-without-nested-scroll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Show every reasoning step and tool in the Brunch Activity fold instead of clipping them in a nested scroll area, so the visible list always matches the tool count. diff --git a/.changeset/ad-hoc-value-errors.md b/.changeset/ad-hoc-value-errors.md deleted file mode 100644 index 589e2532f8e..00000000000 --- a/.changeset/ad-hoc-value-errors.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Improve scenario and experiment forms with keyboard navigation, stacked section headers, overlay scrollbars, default starting-place filtering with a compact toggle beside the section title, and source expressions over selected computed values. Align the Time Step label and info icon, align token totals with place headers, keep select chevrons inside spreadsheet cells, and keep validation errors visible while editing ad-hoc values. diff --git a/.changeset/adaptive-bezier-label-midpoint.md b/.changeset/adaptive-bezier-label-midpoint.md deleted file mode 100644 index 75477c2b7c9..00000000000 --- a/.changeset/adaptive-bezier-label-midpoint.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Arc weight labels sit on the Adaptive Bezier curve instead of floating at the straight-line midpoint between the arc's endpoints. diff --git a/.changeset/adhoc-experiments.md b/.changeset/adhoc-experiments.md deleted file mode 100644 index c5217927e80..00000000000 --- a/.changeset/adhoc-experiments.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The create-experiment drawer accepts an ad-hoc scenario when "No scenario" is selected: Initial State + Parameters defined inline compile through a generated, never-persisted scenario at experiment start. diff --git a/.changeset/adhoc-form-editing-and-layout-fixes.md b/.changeset/adhoc-form-editing-and-layout-fixes.md deleted file mode 100644 index f0313cea99a..00000000000 --- a/.changeset/adhoc-form-editing-and-layout-fixes.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Fix three defects in the ad-hoc scenario form: the optimize bounds popover -ignored every press (Min, Max, Step and Scale were uneditable, and each press -dismissed it), a focused section painted over the sticky header of the section -hosting it, and the experiment drawer's computed initial state grew unbounded -instead of scrolling in its own region. diff --git a/.changeset/adhoc-optimizations.md b/.changeset/adhoc-optimizations.md deleted file mode 100644 index 8031e5d2fd5..00000000000 --- a/.changeset/adhoc-optimizations.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The create-optimization drawer offers "Ad-hoc (define inline)": Initial State + Parameters with Optimize selections compile to a generated, never-persisted scenario whose generated parameters the optimization manifest binds to their optimize domains. diff --git a/.changeset/adhoc-quick-simulation.md b/.changeset/adhoc-quick-simulation.md deleted file mode 100644 index d6cf68fc0c7..00000000000 --- a/.changeset/adhoc-quick-simulation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Quick simulation runs an ad-hoc scenario when none is selected: a "Define initial state" drawer in the simulation settings panel edits token counts and values that compile through a generated, never-persisted scenario. diff --git a/.changeset/adhoc-scenario-authoring.md b/.changeset/adhoc-scenario-authoring.md deleted file mode 100644 index 878f7461861..00000000000 --- a/.changeset/adhoc-scenario-authoring.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/petrinaut-core": patch ---- - -Behind the new experimental "Ad-hoc scenarios" setting, the scenario creation form authors scenarios through the ad-hoc form: exposed Variables become the saved scenario's tunable parameters, and the definition persists as `initialState.type: "adhoc"`. diff --git a/.changeset/adhoc-scenario-docs.md b/.changeset/adhoc-scenario-docs.md deleted file mode 100644 index cad928b6a52..00000000000 --- a/.changeset/adhoc-scenario-docs.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/petrinaut-core": patch ---- - -Add the ad-hoc scenarios user-guide page and register it with the in-app AI assistant's doc reader. diff --git a/.changeset/adhoc-scenario-form.md b/.changeset/adhoc-scenario-form.md deleted file mode 100644 index c5b65ffc9d0..00000000000 --- a/.changeset/adhoc-scenario-form.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The ad-hoc scenario form matches the ratified prototype: gutter-cycled row kinds (fixed → dynamic → count-optimized) with quiet count strips, shared columns with a wash and derived cells, a phantom trailing row, place totals, compact Variables blocks, and Monaco expression editors type-checked live through a new ad-hoc LSP session with diagnostics rendered on closed cells. diff --git a/.changeset/adhoc-scenario-synthesis.md b/.changeset/adhoc-scenario-synthesis.md deleted file mode 100644 index af06f3503c7..00000000000 --- a/.changeset/adhoc-scenario-synthesis.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Ad-hoc scenario synthesis: form state, deterministic `adhoc.*` parameter names, synthesis to a generated code-mode scenario plus optimized fields with typed domains, the transform to optimization-manifest bindings, row-kind cycling and shared-column transitions, place totals, and an LSP session kind that type-checks every value expression. diff --git a/.changeset/automatic-dynamic-tools.md b/.changeset/automatic-dynamic-tools.md deleted file mode 100644 index 58b0d24012f..00000000000 --- a/.changeset/automatic-dynamic-tools.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Allow hosts to register validated dynamic AI tools that execute automatically against the mounted editor. `ErrorTrackerContext.captureException` now accepts an optional `{ source, tags }` context, and the AI assistant panel reports its operational failures (stream errors, tool execution, continuation, Stop) to the host's tracker at their source. diff --git a/.changeset/await-ai-diagnostics.md b/.changeset/await-ai-diagnostics.md deleted file mode 100644 index 7412e185a95..00000000000 --- a/.changeset/await-ai-diagnostics.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Describe a clean net-code diagnostic check without claiming the whole model compiles. diff --git a/.changeset/bare-body-user-code.md b/.changeset/bare-body-user-code.md deleted file mode 100644 index 1c7f71b9087..00000000000 --- a/.changeset/bare-body-user-code.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Transition kernels, lambdas, and differential equations can now be written as a bare function body ending in `return`, like metrics and scenario code: `input` (or `tokens` for dynamics) and `parameters` are in scope ambiently, with full editor type checking and completions. The `export default TransitionKernel(...)` / `Lambda(...)` / `Dynamics(...)` module form is still accepted, and the editor picks the right checking mode per form. Default templates, built-in examples, and the AI assistant now use the bare form. Visualizers are unchanged. diff --git a/.changeset/bottom-bar-panel-clearance.md b/.changeset/bottom-bar-panel-clearance.md deleted file mode 100644 index a4004b84ea5..00000000000 --- a/.changeset/bottom-bar-panel-clearance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Keep the bottom toolbar clear of the side panels and the viewport controls: it stays centered on the canvas until a panel would cover it, then shifts aside, and collapses to its essential controls — expanding again on hover or focus — when the space between the panels is too narrow for the full set. diff --git a/.changeset/browser-experiment-host.md b/.changeset/browser-experiment-host.md deleted file mode 100644 index a773a06c308..00000000000 --- a/.changeset/browser-experiment-host.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Expose `ExperimentHostContext.runExperiment` with validation, progress callbacks, cancellation, and captured results for up to 100,000 runs. diff --git a/.changeset/browser-optimization-runtime.md b/.changeset/browser-optimization-runtime.md deleted file mode 100644 index d5a6833f7d3..00000000000 --- a/.changeset/browser-optimization-runtime.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Adds an in-browser optimization capability that runs the Optuna study in a Pyodide worker and evaluates trials through a host channel. A study that completed or was cancelled stays in the worker until it is released, so the connected capability can extend it with more trials on the same sampler history, and a run may keep up to four trials in flight at once. Pyodide and Optuna download from jsDelivr and PyPI by default; `pyodide.indexURL` overrides where the runtime loads from. The `./optimization` entry gains `parseOptimizationManifest`, `isUnknownOptimizationRunError` and `PETRINAUT_OPTIMIZATION_UNKNOWN_RUN_ERROR_CODE`, and the main entry gains `createReadableStore`. diff --git a/.changeset/brunch-a3-browser-observation.md b/.changeset/brunch-a3-browser-observation.md deleted file mode 100644 index f0dbe29c30a..00000000000 --- a/.changeset/brunch-a3-browser-observation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Hosts can also provide an additional assistant tab for content such as a saved workpiece, reusing the panel's sizing and keeping the conversation, composer and Voice controls mounted across tab switches. Add an optional synchronous `aiAssistant.executeMutation` boundary so embedding applications can inspect their live document around a canonical mutation or refuse execution, while the panel retains control of tool results and continuation. Show explicitly unapplied assistant operations with their reason instead of a successful mutation summary, and label grouped tool calls as operations rather than changes. Hosts can opt into following canonical AI conversation history once local submissions are settled, while preserving local streaming output; externally observed and reloaded tools are display-only in that mode, and locally streamed tools retain normal execution. diff --git a/.changeset/brunch-activity-labels.md b/.changeset/brunch-activity-labels.md deleted file mode 100644 index f84c1cbabed..00000000000 --- a/.changeset/brunch-activity-labels.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Show activity wording instead of naming Brunch during a turn. The waiting row and the default working status read "Working…", and the Voice brief reads "Preparing request", "Sending request", then "Request sent". diff --git a/.changeset/brunch-activity-stays-put.md b/.changeset/brunch-activity-stays-put.md deleted file mode 100644 index 0cf0f681962..00000000000 --- a/.changeset/brunch-activity-stays-put.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Keep the Brunch Activity row in place through a turn. A spoken Live reply no longer takes over the Working… row, and the row's label no longer shifts when the spinner gives way to the Activity icon. diff --git a/.changeset/brunch-conversation-turns.md b/.changeset/brunch-conversation-turns.md deleted file mode 100644 index 61e6ecd10cf..00000000000 --- a/.changeset/brunch-conversation-turns.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Unify Chat and Voice turns with collapsible work, answer cards, voice briefs, and produced-card placement. Preserve drafts, reading position, and Brunch disclosure choices during streaming; stabilize waiting feedback and improve composer, audio settings, and recovery feedback. diff --git a/.changeset/brunch-in-band-browser-tools.md b/.changeset/brunch-in-band-browser-tools.md deleted file mode 100644 index 999973f6b12..00000000000 --- a/.changeset/brunch-in-band-browser-tools.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Allow a host to run named AI tool calls and return their results itself while the assistant response is still streaming, through `aiAssistant.inBandBrowserTools: { has(toolName), run(call, execute) }`: Petrinaut calls `run` when the call's turn in same-document order starts, with a `signal` that aborts on Stop, and the host calls `execute(input)` at most once and reports the resolved output or the failure; stock hosts retain their existing tool path. `executePetrinautAiMutation` lets a host run one canonical AI edit with the assistant's own no-op detection and output. diff --git a/.changeset/brunch-petrinaut-core-contracts.md b/.changeset/brunch-petrinaut-core-contracts.md deleted file mode 100644 index f98d4e097e5..00000000000 --- a/.changeset/brunch-petrinaut-core-contracts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Expose stable document revision identities and explicit browser and headless diagnostics for captured definitions, expand the selected mutation batch with supported update and removal operations, and start document observation only when subscribed. diff --git a/.changeset/brunch-petrinaut-host-integration.md b/.changeset/brunch-petrinaut-host-integration.md deleted file mode 100644 index 55f8207d8e1..00000000000 --- a/.changeset/brunch-petrinaut-host-integration.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Expose revision identity, editor commands, current-definition diagnostics, optimizer availability, and user-guide content to host-owned assistant tools, while showing unfinished tool and experiment progress, refusing unavailable title edits, and rejecting unavailable optimization before an experiment record is created. Keep host transport and store resources current across route changes, with stable React subscriptions and capability-based read-only titles. diff --git a/.changeset/brunch-tab-fade.md b/.changeset/brunch-tab-fade.md deleted file mode 100644 index 6989d8924cf..00000000000 --- a/.changeset/brunch-tab-fade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Stop Brunch assistant tabs inheriting the stock tab fade, so the Brunch selected and hover treatment applies on its own. diff --git a/.changeset/brunch-tool-refusal-tones.md b/.changeset/brunch-tool-refusal-tones.md deleted file mode 100644 index dad45c548ea..00000000000 --- a/.changeset/brunch-tool-refusal-tones.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Hosts can now resolve tool cards with an optional pending or correctable-refusal presentation: unfinished rows may use a gold pending tone, and a completed non-applied result can carry collapsed detail items instead of an inline reason. Stock defaults stay unchanged. diff --git a/.changeset/brunch-waiting-in-activity.md b/.changeset/brunch-waiting-in-activity.md deleted file mode 100644 index 400593f6f83..00000000000 --- a/.changeset/brunch-waiting-in-activity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Show Brunch's waiting state in the transcript, where the turn's Activity will appear, and keep the spinner in the Activity header while Brunch works. The status row above the composer now appears only while the host tab is shown. diff --git a/.changeset/calm-ledgers-frame.md b/.changeset/calm-ledgers-frame.md deleted file mode 100644 index 2910df2b4de..00000000000 --- a/.changeset/calm-ledgers-frame.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Let hosts label assistant tabs, resolve tool presentation from lifecycle context, signal unseen tab activity, and frame the rendered canvas from automatic tools. Tool calls now render chronologically with preserved result details, Brunch omits internal marker and automatic framing calls, generated reasoning headings are explicitly presented as thinking, an optional working label spans active turns, and the Ledger presents its readable account without internal record metadata. Auto-layout still awaits an inset-aware post-render viewport fit across built-in entry points. diff --git a/.changeset/canvas-firing-animation-budget.md b/.changeset/canvas-firing-animation-budget.md deleted file mode 100644 index 534ed4b14f3..00000000000 --- a/.changeset/canvas-firing-animation-budget.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Firing animations run only on the transitions and arcs in view, and not at all when the canvas is zoomed out far enough that a node is a few pixels across. diff --git a/.changeset/canvas-frame-subscription.md b/.changeset/canvas-frame-subscription.md deleted file mode 100644 index 169306098a6..00000000000 --- a/.changeset/canvas-frame-subscription.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Playback re-renders only the places and transitions whose values moved, so large nets play back several times faster. diff --git a/.changeset/canvas-hover-identity.md b/.changeset/canvas-hover-identity.md deleted file mode 100644 index 2d2c97623f1..00000000000 --- a/.changeset/canvas-hover-identity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Hovering a node re-renders only the nodes and arcs its highlight touches, and a **Highlight on hover** setting turns the pointer highlight off. diff --git a/.changeset/canvas-neighbourhood-highlight.md b/.changeset/canvas-neighbourhood-highlight.md deleted file mode 100644 index 508c6d2622d..00000000000 --- a/.changeset/canvas-neighbourhood-highlight.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -A hovered or selected node's neighbourhood is highlighted in colour, blue for what feeds it and orange for what it feeds, instead of fading the rest of the net. The highlight waits for the pointer to rest. diff --git a/.changeset/canvas-single-render.md b/.changeset/canvas-single-render.md deleted file mode 100644 index 0d17561c359..00000000000 --- a/.changeset/canvas-single-render.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The canvas renders centered on the net from its first frame, instead of jumping there after a first paint at the origin. Component instances grow with their port count so their ports have room, and auto-layout on import no longer depends on the compact/classic setting. diff --git a/.changeset/canvas-viewport-persistence.md b/.changeset/canvas-viewport-persistence.md deleted file mode 100644 index 293b38c3f81..00000000000 --- a/.changeset/canvas-viewport-persistence.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Remember the canvas viewport per net, so switching between nets or reloading returns to the same position and zoom. diff --git a/.changeset/classic-transition-dimensions.md b/.changeset/classic-transition-dimensions.md deleted file mode 100644 index 12e8d97420f..00000000000 --- a/.changeset/classic-transition-dimensions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -`classicNodeDimensions` gives places a 104 × 104 footprint and transitions a 180 × 60 footprint for canvas rendering and layout. diff --git a/.changeset/clear-code-editor-guide.md b/.changeset/clear-code-editor-guide.md deleted file mode 100644 index 420edfdbafc..00000000000 --- a/.changeset/clear-code-editor-guide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Make the code editor guide available to the in-app assistant. diff --git a/.changeset/clear-voice-controls.md b/.changeset/clear-voice-controls.md deleted file mode 100644 index fc0f333b2d9..00000000000 --- a/.changeset/clear-voice-controls.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Improve Voice controls with provider-specific audio options, independent microphone and speaker state, distinct Stop and End actions, and a responsive compact dock. diff --git a/.changeset/combobox-component.md b/.changeset/combobox-component.md deleted file mode 100644 index 410bd214e8d..00000000000 --- a/.changeset/combobox-component.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -Add `Combobox` component diff --git a/.changeset/combobox-multiple.md b/.changeset/combobox-multiple.md deleted file mode 100644 index 9d7dcb052de..00000000000 --- a/.changeset/combobox-multiple.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -Add `multiple` support to `Combobox` diff --git a/.changeset/command-registry.md b/.changeset/command-registry.md deleted file mode 100644 index b25858de697..00000000000 --- a/.changeset/command-registry.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Added a command registry for host-rendered command palettes: `createCommandRegistry()` and `combineCommandRegistries()` in core, and `CommandRegistryProvider`, `useCommand(command, { when })`, `useCommands()`, and `formatShortcutKeys()` in `@hashintel/petrinaut/react`. The editor registers its undo/redo, tool, auto-layout, search, and panel commands. Petrinaut ships no palette. diff --git a/.changeset/connected-optimizer-source.md b/.changeset/connected-optimizer-source.md deleted file mode 100644 index 494340c43b7..00000000000 --- a/.changeset/connected-optimizer-source.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -A connected optimization source runs studies in this browser behind the experimental **In-browser optimization** setting. The create form gains **Runs per step**, **Parallel steps** (1 to 4) and the experiments' **Backend** switch, and seeds each study with a fresh random **Seed** that can be edited for reproducibility. A connected study's drawer lays everything out in view at once: a summary strip (status, steps, best, backend), the **Parameters** band whose controls follow each step while the study runs, the **Surface** drawn from the study's own steps beside the objective's chart, and the steps table with the best step starred; once the study is over, or **Follow steps** is off, the controls, the Surface and the chart move together to whichever point is picked. A connected study can be stopped with **Stop** and continued with more steps on the same sampler with **Continue**. diff --git a/.changeset/conversation-permissions.md b/.changeset/conversation-permissions.md deleted file mode 100644 index 02e7adb0a67..00000000000 --- a/.changeset/conversation-permissions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Allow hosts to show interactive tool controls only for matching tool calls, such as a destructive change waiting for approval. diff --git a/.changeset/copy-notification-details.md b/.changeset/copy-notification-details.md deleted file mode 100644 index 5c424976e2f..00000000000 --- a/.changeset/copy-notification-details.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Show transient copied or failed feedback when copying notification details, with a document-based fallback when the Clipboard API rejects the copy. diff --git a/.changeset/core-owns-canvas-geometry.md b/.changeset/core-owns-canvas-geometry.md deleted file mode 100644 index 98e6b8c0abf..00000000000 --- a/.changeset/core-owns-canvas-geometry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -The layout module exports the canvas geometry: render node dimensions (`compactNodeDimensions`, `classicNodeDimensions`, `getComponentInstanceHeight`), net bounds (`getBoundsOfCenteredBoxes`) and zoom limits (`getMinZoomForBounds`, `ZOOM_PADDING`). `layoutNodeDimensions` is now derived from the render dimensions instead of maintained by hand. diff --git a/.changeset/create-experiment-resolves-record.md b/.changeset/create-experiment-resolves-record.md deleted file mode 100644 index a9e1b687a15..00000000000 --- a/.changeset/create-experiment-resolves-record.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -`createExperiment` resolves with the experiment record, which now carries the scenario it compiled (`ExperimentRecord.scenario`), and no longer selects it. diff --git a/.changeset/default-nodes-compact-surface.md b/.changeset/default-nodes-compact-surface.md deleted file mode 100644 index 80dee7e481e..00000000000 --- a/.changeset/default-nodes-compact-surface.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Give default canvas nodes lighter colours, a soft shadow, a muted 1.5px outline, and matching name styling. Places are circular; transitions are rectangular with an icon on the left, a wrapped name, and the transition type. Preserve words in node names and align minimap nodes with their canvas positions and dimensions. diff --git a/.changeset/design-system-icon-packs.md b/.changeset/design-system-icon-packs.md deleted file mode 100644 index 9bffad409e2..00000000000 --- a/.changeset/design-system-icon-packs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -Add an IconProvider for overriding named icons within a component tree while retaining defaults for omitted replacements. diff --git a/.changeset/dialog-content-position.md b/.changeset/dialog-content-position.md deleted file mode 100644 index 063f66f226f..00000000000 --- a/.changeset/dialog-content-position.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -Support content refs and inline styles on Dialog for movable, resizable layouts. diff --git a/.changeset/drawer-focus-refs-nullable.md b/.changeset/drawer-focus-refs-nullable.md deleted file mode 100644 index a3239b461d9..00000000000 --- a/.changeset/drawer-focus-refs-nullable.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -`Drawer` accepts `initialFocusRef` and `returnFocusRef` refs that start `null`, as `Popover` does. diff --git a/.changeset/drawer-graphs-before-lists.md b/.changeset/drawer-graphs-before-lists.md deleted file mode 100644 index 6441dea2596..00000000000 --- a/.changeset/drawer-graphs-before-lists.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The experiment and optimization result drawers keep the summary, navigator and surface still at the top; only the step and metric lists scroll, with the step table's header pinned. diff --git a/.changeset/ds-clearable-searchable-boolean-union.md b/.changeset/ds-clearable-searchable-boolean-union.md deleted file mode 100644 index 81233a99846..00000000000 --- a/.changeset/ds-clearable-searchable-boolean-union.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": minor ---- - -`Select`, `TextInput`, and `NumberInput` now accept `clearable` as `boolean | { onClear: () => void }`, and `Select` accepts `searchable` as `boolean | { onSearch?, hideCount?, hideSelectAllToggle? }`, replacing the previous `{ clearable: boolean, onClear }` and `{ searchable: boolean, onSearch }` object shapes. `Banner`'s `dismissible` and `Chip`'s and `Filter`'s `removeable` are now `false | { onDismiss: () => void }` / `false | { onRemove: () => void }` instead of objects with an inner enabled flag. diff --git a/.changeset/ds-filter-select-inputs.md b/.changeset/ds-filter-select-inputs.md deleted file mode 100644 index b535eb8fddd..00000000000 --- a/.changeset/ds-filter-select-inputs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -`Filter` operators can now declare select inputs, overflowing content on Select + Inputs is improved, and keyboard navigation for Select updated to better match APG guidelines. diff --git a/.changeset/ds-menu-sub-item-class.md b/.changeset/ds-menu-sub-item-class.md deleted file mode 100644 index cdd919d392e..00000000000 --- a/.changeset/ds-menu-sub-item-class.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -Allow `Menu` and `SelectableList` items that carry `subItems` to accept a `menuClassName` diff --git a/.changeset/ds-slider-disabled.md b/.changeset/ds-slider-disabled.md deleted file mode 100644 index daf4d3d88f7..00000000000 --- a/.changeset/ds-slider-disabled.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -`Slider` accepts `disabled`, which dims the control and turns its input off. diff --git a/.changeset/ds-slider-plain-variant.md b/.changeset/ds-slider-plain-variant.md deleted file mode 100644 index dc47c0c780b..00000000000 --- a/.changeset/ds-slider-plain-variant.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -`Slider` gains a `plain` variant: a small round thumb of one fixed size that never swells while dragged, for dense control rows. The rail now spans the slider's root whatever aligns the root's children. diff --git a/.changeset/durable-brunch-stop.md b/.changeset/durable-brunch-stop.md deleted file mode 100644 index fc8ff7e0628..00000000000 --- a/.changeset/durable-brunch-stop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Let hosts make the assistant's Stop action durable before Petrinaut cancels its local response stream, while preserving local-only cancellation for hosts that do not provide the new stop request. diff --git a/.changeset/editable-example-scenarios.md b/.changeset/editable-example-scenarios.md deleted file mode 100644 index cdbb73e7189..00000000000 --- a/.changeset/editable-example-scenarios.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Make bundled example scenarios editable in the ad-hoc scenario form while preserving their parameters and initial states. diff --git a/.changeset/embed-playback-bar-hover-scrollbar.md b/.changeset/embed-playback-bar-hover-scrollbar.md deleted file mode 100644 index c9b61c880cd..00000000000 --- a/.changeset/embed-playback-bar-hover-scrollbar.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The embedded preview's playback bar scrolls only sideways, so resting the pointer on one of its controls no longer shows a vertical scrollbar inside the bar. diff --git a/.changeset/entities-tree-left-panel.md b/.changeset/entities-tree-left-panel.md deleted file mode 100644 index f0caa430c9d..00000000000 --- a/.changeset/entities-tree-left-panel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The left panel shows the Entities tree for everyone. The stack of separate Nodes, Token Types, Differential Equations and Parameters lists is gone, along with the "Entities tree view" setting that chose between them. Nets with subnets keep the Subnets panel below the tree, and the panel opens at 280px rather than 320px. diff --git a/.changeset/experiment-ai-tool.md b/.changeset/experiment-ai-tool.md deleted file mode 100644 index 0778715ee05..00000000000 --- a/.changeset/experiment-ai-tool.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Register the createExperiment tool with its validated request schema for AI integrations. diff --git a/.changeset/experiment-interval-feedback.md b/.changeset/experiment-interval-feedback.md deleted file mode 100644 index 29f7c63132f..00000000000 --- a/.changeset/experiment-interval-feedback.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Offer GPU compute, parameter sweeps, and in-browser optimization without feature flags, with automatic metric names, grouped constraints that accept state expressions, keyboard controls, and explicit optimizer startup. Simplify results with manual optimizer controls, compact details, single-value parameter sliders, sensitivity estimates ordered by importance, and best parameters that remain available after optimization with a View best action. diff --git a/.changeset/experiment-lifecycle.md b/.changeset/experiment-lifecycle.md deleted file mode 100644 index 8f399dfe653..00000000000 --- a/.changeset/experiment-lifecycle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Let hosts offer retries for failed experiment runs and report local experiment activity to the assistant composer, while retaining the existing execution-card appearance. Return an effect cleanup from activity reports so unmounted controls can clear their status without overriding newer reports. diff --git a/.changeset/experiment-parameter-sweeps.md b/.changeset/experiment-parameter-sweeps.md deleted file mode 100644 index 5fc43575bef..00000000000 --- a/.changeset/experiment-parameter-sweeps.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Experiments can sweep scenario parameters. A Sweep toggle per numeric parameter defines the values, and the results drawer gains a navigator: only the selected combination computes, in escalating run batches that stream into the charts, and visited combinations keep their results. diff --git a/.changeset/experiment-settings-guide.md b/.changeset/experiment-settings-guide.md deleted file mode 100644 index 0c8089f08cf..00000000000 --- a/.changeset/experiment-settings-guide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Accept state constraint expressions with optional trailing semicolons and no explicit return while preserving existing code bodies. Report a missing return when a state constraint contains separate statements. Update the assistant's guide summaries for experiment controls and settings available without simulation feature flags. diff --git a/.changeset/experiments-backend-registry.md b/.changeset/experiments-backend-registry.md deleted file mode 100644 index 35055f8ab12..00000000000 --- a/.changeset/experiments-backend-registry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Add the `@hashintel/petrinaut-core/experiments` entry point: an `ExperimentBackend` interface, a worker-pool implementation of it, and `selectExperimentBackend`, which walks backends in preference order and records every refusal. diff --git a/.changeset/explicit-brunch-presentation.md b/.changeset/explicit-brunch-presentation.md deleted file mode 100644 index 8fc5bed9d7e..00000000000 --- a/.changeset/explicit-brunch-presentation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add an explicit `aiAssistant.presentation` option so hosts can select the Brunch conversation presentation without relying on the transcript label, while preserving the stock assistant presentation by default. diff --git a/.changeset/expose-prepare-experiment.md b/.changeset/expose-prepare-experiment.md deleted file mode 100644 index 9664845e0a8..00000000000 --- a/.changeset/expose-prepare-experiment.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -`prepareExperiment` is exported from `@hashintel/petrinaut/react`, so a host can resolve an experiment request against the live model and build its optimization input without starting a run. diff --git a/.changeset/extended-voice-audio-settings.md b/.changeset/extended-voice-audio-settings.md deleted file mode 100644 index 96b80e244e7..00000000000 --- a/.changeset/extended-voice-audio-settings.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add optional host-provided voice, speaking-speed, and audio-device controls alongside output mute and volume, with collapsed Devices and Real-time sections, a compact speed control, and next-session voice information. Keep voice selection available independently of muted-and-idle cached previews, with right-aligned loading and playing indicators, switches for status text and interruptions, and collision-safe Voice dock status truncation that preserves full screen-reader announcements. diff --git a/.changeset/fe-1056-sdcpn-input.md b/.changeset/fe-1056-sdcpn-input.md deleted file mode 100644 index 9617fa2d923..00000000000 --- a/.changeset/fe-1056-sdcpn-input.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -`createJsonDocHandle` accepts `SDCPNInput`, a loose authoring variant of `SDCPN`: extension fields may be omitted and are filled with plain-net defaults by the new `normalizeSDCPN` export. `SDCPNInput` and its member types are exported from the package root. diff --git a/.changeset/file-import-place-and-arc-defaults.md b/.changeset/file-import-place-and-arc-defaults.md deleted file mode 100644 index 9446c9703d9..00000000000 --- a/.changeset/file-import-place-and-arc-defaults.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -File import defaults a place's `colorId`, `dynamicsEnabled` and `differentialEquationId`, and an arc's `weight`, instead of rejecting a file that omits them. diff --git a/.changeset/flue-voice-safety.md b/.changeset/flue-voice-safety.md deleted file mode 100644 index bf64ec164db..00000000000 --- a/.changeset/flue-voice-safety.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add half-duplex Voice handoff, exact response and marked-question replay, live transcripts, compact Voice setup and playback controls, and persistent copyable errors. Keep the conversation busy through browser-tool continuations, withhold pending work on Stop, preserve rejected durable Stop failures through late provider completion, surface automatic-tool failures to Voice, and display stopped entries and surviving client-tool Voice origins supplied by canonical history. diff --git a/.changeset/fold-optimization-into-experiments.md b/.changeset/fold-optimization-into-experiments.md deleted file mode 100644 index 23a0477c488..00000000000 --- a/.changeset/fold-optimization-into-experiments.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Removes the Optimizations tab; a study now runs from a sweep's Parameters card. diff --git a/.changeset/gpu-range-sweeps.md b/.changeset/gpu-range-sweeps.md deleted file mode 100644 index 8cffdd341a9..00000000000 --- a/.changeset/gpu-range-sweeps.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/petrinaut-core": patch ---- - -The WebGPU backend matches the CPU engine's stochastic semantics and frame numbering, streams metric frames per dispatch chunk, and runs range sweeps from a per-run parameter buffer. It sizes and calibrates metric histograms and typed-place buffers from the model and device instead of refusing or warning, and tiles experiments larger than the device's limits with bit-identical results. Sweep batch instantiation no longer blocks the main thread: scenario compilation is prepared once per experiment and per-run values travel as one typed-array plan. diff --git a/.changeset/heatmap-raster-magma.md b/.changeset/heatmap-raster-magma.md deleted file mode 100644 index d5ed667e540..00000000000 --- a/.changeset/heatmap-raster-magma.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Distribution heatmaps in experiment metric charts render as a magma-coloured density image in one draw call, so they stay fast at high run counts. diff --git a/.changeset/interval-sweeps-range-slider.md b/.changeset/interval-sweeps-range-slider.md deleted file mode 100644 index 51957c053ac..00000000000 --- a/.changeset/interval-sweeps-range-slider.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Swept parameters declare an interval instead of a value count, and the navigator becomes a range slider per parameter: the whole interval by default, resizable, collapsible to a point. A range selection samples the region and streams the merged distribution over it. The slider is a two-thumb range control local to the navigator, whose thumbs may coincide. diff --git a/.changeset/isolated-surface-components.md b/.changeset/isolated-surface-components.md deleted file mode 100644 index 8b91b4e3d56..00000000000 --- a/.changeset/isolated-surface-components.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/ds-components": patch ---- - -Extract the contour plot into a `ContourSurface` component shared by the sweep and optimization surfaces, decouple `SweepNavigator` from the experiments context, and add Storybook stories for each component's states. Sweep navigation is continuous: a point selection uses a single-thumb slider, slider moves commit during the drag, and charts keep their axes, grid and size while frames stream in. `Slider` treats 0 as a real value, and `useElementSize` follows an element that mounts after the first render. diff --git a/.changeset/lazy-weighted-arc-enumeration.md b/.changeset/lazy-weighted-arc-enumeration.md deleted file mode 100644 index 54d8354342e..00000000000 --- a/.changeset/lazy-weighted-arc-enumeration.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Weighted-arc token combinations enumerate lazily in the same lexicographic order, so a transition with a weight-2 coloured input arc no longer materialises every combination per frame. Trajectories are unchanged for every seed. diff --git a/.changeset/metric-card-chart-options.md b/.changeset/metric-card-chart-options.md deleted file mode 100644 index a81685f56d4..00000000000 --- a/.changeset/metric-card-chart-options.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Metric cards lay out their chart options as runs and time aggregates and gain an Enlarge button. diff --git a/.changeset/metric-sample-not-errored-runs.md b/.changeset/metric-sample-not-errored-runs.md deleted file mode 100644 index b49150e213b..00000000000 --- a/.changeset/metric-sample-not-errored-runs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Metric specs can sample every run that has not errored with `sampleRuns: "notErrored"`. diff --git a/.changeset/multi-select-render-selected-split.md b/.changeset/multi-select-render-selected-split.md deleted file mode 100644 index 1cbec4c3417..00000000000 --- a/.changeset/multi-select-render-selected-split.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": minor ---- - -Split the multi select's selected-value rendering: `renderSelectedItem` now renders a single selected value inside the trigger's overflow row (a plain-string result also supplies the `summary` mode's text for that value), and the new `renderSelectedAll` takes over its previous whole-selection behaviour. `Filter` multi-select inputs accept both. diff --git a/.changeset/nonzero-ontology-versions.md b/.changeset/nonzero-ontology-versions.md deleted file mode 100644 index 348767273dc..00000000000 --- a/.changeset/nonzero-ontology-versions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@blockprotocol/type-system": patch ---- - -Reject zero major versions in versioned URLs. Require ontology version constructors to receive integers between 1 and 4294967295. diff --git a/.changeset/optimization-constraint-margins.md b/.changeset/optimization-constraint-margins.md deleted file mode 100644 index aab01169f94..00000000000 --- a/.changeset/optimization-constraint-margins.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Add constraint margin and state-indicator evaluators, an optional manifest constraintPolicy, and aggregateTime support in getRunValues. diff --git a/.changeset/optimization-direction-type.md b/.changeset/optimization-direction-type.md deleted file mode 100644 index 944e33dbac4..00000000000 --- a/.changeset/optimization-direction-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Export `PetrinautOptimizationDirection`, the objective's `maximize` | `minimize` union, from the package root and the `/optimization` entry. diff --git a/.changeset/optimization-surface.md b/.changeset/optimization-surface.md deleted file mode 100644 index 63a61a31282..00000000000 --- a/.changeset/optimization-surface.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/ds-components": patch ---- - -Optimization studies with two or more optimized numeric parameters gain a Surface section: a contour of the objective over two chosen parameters, computed locally against the study's frozen model, with the study's trials as markers. Sliders and clicks move the selected point, which refines with escalating batches. `Slider` accepts `step` and `onChangeEnd`. diff --git a/.changeset/optimizations-list-status-chip.md b/.changeset/optimizations-list-status-chip.md deleted file mode 100644 index d940b2220f0..00000000000 --- a/.changeset/optimizations-list-status-chip.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -In the Optimizations list a cancelled study's status chip is grey rather than red, and a study whose event stream is being re-established reads Reconnecting. diff --git a/.changeset/panda-build-info-path-helper.md b/.changeset/panda-build-info-path-helper.md deleted file mode 100644 index 6be5aef776b..00000000000 --- a/.changeset/panda-build-info-path-helper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -Add `resolvePandaBuildInfoPath` to `@hashintel/ds-components/preset`, which resolves a shipped `panda.buildinfo.json` to a path Panda's `include` accepts on every platform diff --git a/.changeset/parallel-experiment-runs.md b/.changeset/parallel-experiment-runs.md deleted file mode 100644 index 9de2a402d8b..00000000000 --- a/.changeset/parallel-experiment-runs.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Run an experiment's runs in parallel across several Web Workers. - -An experiment used to run every one of its runs in a single worker, using one core however many the machine had. Runs are independent, so they now split across one worker per logical core (minus one, so the editor stays responsive), capped at the run count. Measured at ~4x on 8 shards on a 10-core machine. - -Sharding cannot change what an experiment reports. Per-run seeds derive from the run's **global** index rather than its position within a shard, so run _i_ gets the same seed whichever worker owns it, and each worker's per-frame statistics recombine through the metric accumulator monoids (`empty`/`merge`). Output is byte-identical at every shard count while every shard still has an active run. A frame is only finalised once every still-running shard has reported it, with finished shards dropped from that watermark rather than blocking it — so once a whole shard's runs have ended early (for example by deadlock), that shard's completed runs stop contributing samples to later frames, where a single simulator would keep sampling their frozen state. - -Scalar metric frames now carry their pre-reduction accumulator state, because `frameValue` is already reduced and a mean of means is not a mean. - -Hosts can cap or pin parallelism with `experimentShardCount` on `ExperimentsProvider`, or `shardCount` on `createMonteCarloExperiment`. diff --git a/.changeset/petrinaut-ai-model.md b/.changeset/petrinaut-ai-model.md deleted file mode 100644 index e4173c1c2d3..00000000000 --- a/.changeset/petrinaut-ai-model.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -`petrinautAiModel` names the model and reasoning effort Petrinaut assistants run by default: `gpt-5.5-2026-04-23` at `medium`. `@hashintel/petrinaut-core/ai` also exports the stock prompt's behavioural frame and capability guidance separately, as `petrinautAiStockBehavioralFrame` and `petrinautAiCapabilityGuidance`, and composes `petrinautAiPrompt` from them. diff --git a/.changeset/petrinaut-ai-sdk-6-0-286.md b/.changeset/petrinaut-ai-sdk-6-0-286.md deleted file mode 100644 index ae63f6c80d2..00000000000 --- a/.changeset/petrinaut-ai-sdk-6-0-286.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Update the `ai` dependency to 6.0.286 and `@ai-sdk/react` to 3.0.289. diff --git a/.changeset/petrinaut-controlled-navigation.md b/.changeset/petrinaut-controlled-navigation.md deleted file mode 100644 index 7ea48713a82..00000000000 --- a/.changeset/petrinaut-controlled-navigation.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add a `navigation` prop to `Petrinaut`: a router-neutral controller through -which the host can read and drive the app location (mode, Simulate section and -resource, scenario, subnet, selection, and creation drawers), making them real -browser history destinations. A creation drawer now layers over the record -already open instead of closing it, and the hamburger menu hides **Layout** on -a read-only net. diff --git a/.changeset/petrinaut-core-preview-doc.md b/.changeset/petrinaut-core-preview-doc.md deleted file mode 100644 index a0ad5ab7f1b..00000000000 --- a/.changeset/petrinaut-core-preview-doc.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Register the `preview` user-guide page, so the in-app assistant can read the -embedded Preview's documentation. diff --git a/.changeset/petrinaut-core-selection-vocabulary.md b/.changeset/petrinaut-core-selection-vocabulary.md deleted file mode 100644 index 3981cdd0c29..00000000000 --- a/.changeset/petrinaut-core-selection-vocabulary.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Expose the selection vocabulary as data: `selectionItemTypes` and -`canonicalizeSelection` are available from a dependency-free -`@hashintel/petrinaut-core/selection` entry, so hosts can validate and order -selection coming from a URL or an HTTP request without pulling the model or any -React code. diff --git a/.changeset/petrinaut-create-new-brunch.md b/.changeset/petrinaut-create-new-brunch.md deleted file mode 100644 index ce4f409cae7..00000000000 --- a/.changeset/petrinaut-create-new-brunch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -In experimental Brunch demo mode, File → New offers Build with Brunch or Start blank, then Build with Brunch asks for careful elicitation or a quick preview. diff --git a/.changeset/petrinaut-embedded-preview.md b/.changeset/petrinaut-embedded-preview.md deleted file mode 100644 index d780ab3a514..00000000000 --- a/.changeset/petrinaut-embedded-preview.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add `PetrinautPreview`, a compact read-only embed surface exported from -`@hashintel/petrinaut/preview` that reuses the editor's canvas, navigation, -and property-inspection components. diff --git a/.changeset/petrinaut-experimental-icons.md b/.changeset/petrinaut-experimental-icons.md deleted file mode 100644 index a06a29bb7a9..00000000000 --- a/.changeset/petrinaut-experimental-icons.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add Petricon, an optional animated SVG icon library across the editor with adjustable stroke weight, subtle action hints, state transitions, configurable effects, and automatic fallback for icons outside the pack. diff --git a/.changeset/petrinaut-host-labs-slot.md b/.changeset/petrinaut-host-labs-slot.md deleted file mode 100644 index 88d54b35ede..00000000000 --- a/.changeset/petrinaut-host-labs-slot.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Allow hosts to render application-specific content in the Labs settings section. diff --git a/.changeset/petrinaut-presentation-profiles.md b/.changeset/petrinaut-presentation-profiles.md deleted file mode 100644 index 3e4bfee1b94..00000000000 --- a/.changeset/petrinaut-presentation-profiles.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add a `presentationProfile` prop to `Petrinaut` (`editor` or `review`) that -gates authoring-only controls, and extract the scenario and playback controls -into shared components reusable outside the full editor. diff --git a/.changeset/petrinaut-preview-quick-simulation.md b/.changeset/petrinaut-preview-quick-simulation.md deleted file mode 100644 index 26bd2ce8539..00000000000 --- a/.changeset/petrinaut-preview-quick-simulation.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add an optional Quick Simulation mode to `PetrinautPreview`: hosts supply -precompiled HIR artifacts and bounded run settings, and the preview gains -scenario configuration, compact playback controls, and an expandable timeline -reusing the editor's simulation components. diff --git a/.changeset/petrinaut-user-settings.md b/.changeset/petrinaut-user-settings.md deleted file mode 100644 index c0a00437fd4..00000000000 --- a/.changeset/petrinaut-user-settings.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Provide movable, resizable User Settings with keyboard-accessible sections, inline experimental badges, and scroll-edge blur. diff --git a/.changeset/petrinaut-voice-interruption.md b/.changeset/petrinaut-voice-interruption.md deleted file mode 100644 index 65e2f4b7561..00000000000 --- a/.changeset/petrinaut-voice-interruption.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Allow Voice users to interrupt assistant playback by speaking, with a browser-saved preference and optional manual handoff. diff --git a/.changeset/pin-place-state-visualizer.md b/.changeset/pin-place-state-visualizer.md deleted file mode 100644 index 48901468ea2..00000000000 --- a/.changeset/pin-place-state-visualizer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -A place's state visualizer opens from a button on the hovered place, with or without a run, and can be pinned to stay in view while the timeline is scrubbed. diff --git a/.changeset/place-token-capacity.md b/.changeset/place-token-capacity.md deleted file mode 100644 index 5fd35649914..00000000000 --- a/.changeset/place-token-capacity.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Add an optional per-place token capacity. - -A place can now declare a maximum number of tokens it will hold, set from the place properties panel. Useful for supply-chain style models with finite storage. It also converts frames from growable to fixed-size, which is the precondition for a fixed-layout GPU or WASM path. - -Capacity participates in transition enablement, following the standard Petri-net capacity constraint: a transition cannot fire if doing so would take any output place above its capacity. Output tokens are applied at the end of a frame, so the check accounts for what transitions earlier in the same frame have already committed. Several transitions feeding one capped place cannot collectively overflow it. - -Deadlock detection includes the same check, so a net whose only remaining transitions are blocked by full output places is reported as deadlocked rather than stepping to `maxTime` with nothing happening. - -Nets without capacities are unaffected: the constraint tables are empty and the hot path skips them. diff --git a/.changeset/playback-time-readout.md b/.changeset/playback-time-readout.md deleted file mode 100644 index d13743dee3e..00000000000 --- a/.changeset/playback-time-readout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The playback readout shows elapsed and total simulated time instead of the frame index and frame count, in both the editor's toolbar and the embedded Preview's bar. Times print at the precision the run's time step carries, stacked over two lines. The scrubber sizes itself to the space the bar has instead of a fixed width. diff --git a/.changeset/preserve-place-capacity.md b/.changeset/preserve-place-capacity.md deleted file mode 100644 index fb5a0862e0d..00000000000 --- a/.changeset/preserve-place-capacity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Preserve place capacities when normalizing documents or reopening a JSON document handle, including zero limits and explicitly unbounded places. diff --git a/.changeset/preview-full-view-link.md b/.changeset/preview-full-view-link.md deleted file mode 100644 index 3860ec8067e..00000000000 --- a/.changeset/preview-full-view-link.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -`PetrinautPreview` takes a `fullViewUrl`, and offers it in the header as a **Full view** link that opens in a new tab. The link replaces the "View only" badge, and text in the preview is no longer selectable, apart from a field that still takes typing. diff --git a/.changeset/preview-navigation-vocabularies.md b/.changeset/preview-navigation-vocabularies.md deleted file mode 100644 index d3d1d1e9349..00000000000 --- a/.changeset/preview-navigation-vocabularies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Export the `EditorGlobalMode` and `SimulateViewMode` types, so a host encoding Petrinaut's navigation state into its own router can spell both vocabularies and fail its build when either gains a member. diff --git a/.changeset/property-checkbox-spacing.md b/.changeset/property-checkbox-spacing.md deleted file mode 100644 index 29c5330532b..00000000000 --- a/.changeset/property-checkbox-spacing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Polish properties panels with readable, clickable checkbox labels, animated capacity options, a single equation link, consistent fields, and clearer section controls and dividers. diff --git a/.changeset/quiet-arcs-follow.md b/.changeset/quiet-arcs-follow.md deleted file mode 100644 index 634d00e8e48..00000000000 --- a/.changeset/quiet-arcs-follow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add experimental automatic arc connections with a single outgoing hover handle and curves that follow place and transition outlines. diff --git a/.changeset/quiet-boats-dock.md b/.changeset/quiet-boats-dock.md deleted file mode 100644 index 92cbc08da4f..00000000000 --- a/.changeset/quiet-boats-dock.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Dock the AI assistant on the right, detach it into a movable floating panel, and toggle it with Cmd/Ctrl+Shift+K across editor views while preserving the conversation and keeping the toolbar centered. -Space out the header tabs, animate its icons, align the send button inside the composer, resize the floating panel from any edge or corner with fading border highlights, and hide Clear AI while the conversation is empty. diff --git a/.changeset/rare-mangos-create.md b/.changeset/rare-mangos-create.md deleted file mode 100644 index 396657d1801..00000000000 --- a/.changeset/rare-mangos-create.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -Add header + footer options to selectable list + other minor ui improvements diff --git a/.changeset/readonly-property-values-as-text.md b/.changeset/readonly-property-values-as-text.md deleted file mode 100644 index f57519b2b17..00000000000 --- a/.changeset/readonly-property-values-as-text.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The properties panel shows a read-only net's names, descriptions, and the single-value fields of places, arcs, differential equations and component instances as text instead of as disabled inputs. They read at full contrast, and their labels no longer grey out. Toggles, checkboxes and the list editors keep their controls. diff --git a/.changeset/refractive-browser-blur.md b/.changeset/refractive-browser-blur.md deleted file mode 100644 index c3c4572547c..00000000000 --- a/.changeset/refractive-browser-blur.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/refractive": patch ---- - -Apply native backdrop blur across browsers, adding SVG glass distortion only on Chromium and skipping filter generation in other browsers. diff --git a/.changeset/restore-sidebar-styling.md b/.changeset/restore-sidebar-styling.md deleted file mode 100644 index 6776f4cd7cb..00000000000 --- a/.changeset/restore-sidebar-styling.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Restore consistent sidebar, toolbar, and code-editor styling; stabilize toolbar resizing and panel animations; and clarify shortcuts, playback times, and experiment best-result selection. Keep place state read-only, correct scenario navigation and sticky headers, preserve browser-compatible background blur, and enable Petricon by default. diff --git a/.changeset/resumable-petrinaut-workpiece.md b/.changeset/resumable-petrinaut-workpiece.md deleted file mode 100644 index 90d39bf47f3..00000000000 --- a/.changeset/resumable-petrinaut-workpiece.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/petrinaut-core": patch ---- - -Report an AI mutation that leaves the document unchanged as not applied, without claiming the requested state was already present, so hosts can distinguish an applied document change from an unchanged one, and reliably continue consecutive browser tool calls from live or rehydrated assistant messages. diff --git a/.changeset/rounded-preview-playback-bar.md b/.changeset/rounded-preview-playback-bar.md deleted file mode 100644 index a7d3591433b..00000000000 --- a/.changeset/rounded-preview-playback-bar.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The Preview's playback bar has rounded corners, matching the zoom controls and the minimap that float over the same canvas. diff --git a/.changeset/routed-simulation-panels.md b/.changeset/routed-simulation-panels.md deleted file mode 100644 index 93741945071..00000000000 --- a/.changeset/routed-simulation-panels.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add resizable, routed Experiment and Scenario panels with keyboard selection and fullscreen views that keep the tabs and AI assistant accessible. diff --git a/.changeset/sanitize-user-controlled-keys.md b/.changeset/sanitize-user-controlled-keys.md deleted file mode 100644 index 2ad7a4951bd..00000000000 --- a/.changeset/sanitize-user-controlled-keys.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Reject net identifiers that collide with `Object.prototype` member names (`__proto__`, `constructor`, ...) at file import and before simulation, and store user-authored keys in prototype-free records. Place visualizer code now runs under the same sandbox hardening as scenario code. diff --git a/.changeset/satellite-default-starting-place.md b/.changeset/satellite-default-starting-place.md deleted file mode 100644 index dba05697618..00000000000 --- a/.changeset/satellite-default-starting-place.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Mark Space as the default starting place in the Probabilistic Satellite Launcher example. diff --git a/.changeset/scenario-form-default.md b/.changeset/scenario-form-default.md deleted file mode 100644 index 7cb494fc583..00000000000 --- a/.changeset/scenario-form-default.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/petrinaut-core": patch ---- - -Makes the scenario form the only scenario form and removes the Ad-hoc scenarios setting. diff --git a/.changeset/scenario-hir-interpreter.md b/.changeset/scenario-hir-interpreter.md deleted file mode 100644 index d5bd59bb302..00000000000 --- a/.changeset/scenario-hir-interpreter.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Scenario code (parameter overrides, per-place expressions, code-mode initial state) now compiles through the HIR and runs in an interpreter: no `new Function`, no sandbox. Out-of-subset code fails with positioned errors in the editor and at compile. Stricter than the old evaluator: `==` is strict, conditions and `&&`/`||` take booleans, unknown place names in code mode are errors, and array methods beyond `.map`/`.reduce`/`.concat` are unavailable. `Array.from({ length: n }, fn)` desugars to `range(n).map(fn)`. diff --git a/.changeset/sdcpn-description-metadata-core.md b/.changeset/sdcpn-description-metadata-core.md deleted file mode 100644 index 3ef0557778e..00000000000 --- a/.changeset/sdcpn-description-metadata-core.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -SDCPN elements carry an optional `description` (places, transitions, types, subnets, component instances, and the net root) and an optional `metadata` record of JSON values (transitions, subnets, component instances, and the net root). `metadata` is host-defined and opaque to the library. Both fields validate against the entity schemas, survive file import/export, and are preserved when an `SDCPNInput` is normalized. Files written without the fields still validate. diff --git a/.changeset/sdcpn-description-metadata-ui.md b/.changeset/sdcpn-description-metadata-ui.md deleted file mode 100644 index 023c2ef016e..00000000000 --- a/.changeset/sdcpn-description-metadata-ui.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The place, transition, component-instance, and type properties panels display and allow editing of the element's optional `description`. diff --git a/.changeset/seeded-sweep-draws.md b/.changeset/seeded-sweep-draws.md deleted file mode 100644 index 0d6366fe315..00000000000 --- a/.changeset/seeded-sweep-draws.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Range sweeps rotate each axis's low-discrepancy parameter draws by a seed-derived shift, so experiments with different seeds explore different value sequences. diff --git a/.changeset/selected-batch-scenarios-metrics.md b/.changeset/selected-batch-scenarios-metrics.md deleted file mode 100644 index f43ac98d285..00000000000 --- a/.changeset/selected-batch-scenarios-metrics.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -`selectedMutationBatchSchema` admits `addScenario`, `updateScenario`, `removeScenario`, `addMetric`, `updateMetric` and `removeMetric`, so a selected batch can save the scenario and metric an experiment names. diff --git a/.changeset/selected-mutation-batch.md b/.changeset/selected-mutation-batch.md deleted file mode 100644 index c9de6662a0d..00000000000 --- a/.changeset/selected-mutation-batch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Expose the selected add- and remove-place, transition, and arc ordered batch contract and executor. diff --git a/.changeset/shared-experiment-execution-card.md b/.changeset/shared-experiment-execution-card.md deleted file mode 100644 index 5918b6b7be7..00000000000 --- a/.changeset/shared-experiment-execution-card.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Export `ExperimentExecutionCard` from `@hashintel/petrinaut/ui` so host-owned assistants can present simulation and optimization progress, cancellation, metrics and errors with the same UI as the built-in assistant, keeping optimization text visible throughout its glow animation. Hosts supply execution state and callbacks and retain control of execution and navigation. diff --git a/.changeset/shared-results-view.md b/.changeset/shared-results-view.md deleted file mode 100644 index ca1364d31b7..00000000000 --- a/.changeset/shared-results-view.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Experiment drawer cards take the wider Figma chrome, the header drops the time step from its title and keeps its stat strip on one line, turning into chips in a narrow drawer. diff --git a/.changeset/sidebar-row-label-width.md b/.changeset/sidebar-row-label-width.md deleted file mode 100644 index ca6b3badd13..00000000000 --- a/.changeset/sidebar-row-label-width.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Sidebar list labels use the full row width and truncate with an ellipsis consistently; the row menu button only takes space while hovering the row or while its menu is open. diff --git a/.changeset/simulate-chart-cards.md b/.changeset/simulate-chart-cards.md deleted file mode 100644 index af3a5db5114..00000000000 --- a/.changeset/simulate-chart-cards.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Metric charts and a study's summary in the Simulate drawers share one card chrome, with each chart's aggregation controls in a Chart options menu in the card's header. diff --git a/.changeset/simulate-drawer-frame.md b/.changeset/simulate-drawer-frame.md deleted file mode 100644 index 621f0e976e6..00000000000 --- a/.changeset/simulate-drawer-frame.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -The Simulate drawers share one frame with a condensing header, a Parameters band across the body and fixed-height cards, and the Summary section folds into the header. diff --git a/.changeset/simulation-panel-guidance.md b/.changeset/simulation-panel-guidance.md deleted file mode 100644 index a98c8f4cb9b..00000000000 --- a/.changeset/simulation-panel-guidance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Add simulation panel guidance to the AI assistant's documentation catalog. diff --git a/.changeset/small-experiments-chat.md b/.changeset/small-experiments-chat.md deleted file mode 100644 index a01f78913ff..00000000000 --- a/.changeset/small-experiments-chat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Run experiments and optimizations from AI chat with progress, cancellation, and a link to metric distributions. Keep the conversation open while inspecting experiments. diff --git a/.changeset/snapshot-language-diagnostics.md b/.changeset/snapshot-language-diagnostics.md deleted file mode 100644 index 2674a469523..00000000000 --- a/.changeset/snapshot-language-diagnostics.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Describe snapshot validation and its TypeScript and HIR diagnostics in the AI tool. diff --git a/.changeset/sour-baboons-sit.md b/.changeset/sour-baboons-sit.md deleted file mode 100644 index ab29191cc91..00000000000 --- a/.changeset/sour-baboons-sit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/ds-components": patch ---- - -Add Breadcrumb component diff --git a/.changeset/stable-composer-controls.md b/.changeset/stable-composer-controls.md deleted file mode 100644 index 553de6f0c71..00000000000 --- a/.changeset/stable-composer-controls.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add generic host-rendered AI composer controls and a persistent inline Voice session, protected -active conversations, keyboard fallback, and one-answer buffering while the normal chat stream -settles. Add the provider-neutral `renderVoiceMode` contract and export `PetrinautAiInputMode`, with -the selected input mode and mode-change callback available to host-rendered Voice modes. Include -stable finalized-text submission, conversation identity, stop handling, schema-validated -interactive-tool text mapping, explicit separate-message targeting for corrections, and a -queue-aware voice submission path. Present text and voice through one transcript and composer whose -trailing action switches between waveform, Send, and Stop. `renderComposerControl` remains a -supported public seam for hosts that only need their own control beside the message box, -independently of Voice mode. Surface assistant request failures as error toasts instead of -transcript entries. - -Render every live Voice surface from a session snapshot the host reports through -`reportVoiceSessionState`, so hosts describe their session while Petrinaut owns its chrome. Replace -the composer with a low-profile Voice dock -- a canvas ribbon of three travelling waves, one leading -and two trailing it more faintly, fading out at both ends, opening with the microphone while -listening and moving under its own power through the same drawing path while the assistant speaks, -near flat while neither holds the turn, and naming one phase at a time -- with an announced phase and -reduced-motion behavior. Curve the raw microphone level before it drives the waves, so an ordinary -speaking level is plainly visible rather than a flicker above the line and a raised voice still has -somewhere to go. Sample the level per animation frame rather than through React, so drawing costs no -re-renders, and ease it against the frame delta so it looks the same at any refresh rate. Hold spoken -turns out of the transcript until the session ends, then reveal them together under a turn-count -divider, while typed messages and interactive tools awaiting an answer stay visible throughout. Let a -per-session Show transcription in chat action write those turns into the conversation as they land -instead. Keep every session control -- transcription, the microphone toggle, Resume, Reconnect, and -End -- in the dock, leaving the canvas toolbar untouched. Add `setMicrophoneMuted` to the Voice mode -controls and a `muted` session phase, so muting stops capture without interrupting what the assistant -is saying, unlike pausing. Keep the complete legacy Voice controls and context registration contract -required while a separate optional registration seam accepts provider-specific capabilities. Offer -an explicit playback retry when a browser blocks session audio, keeping the warning visible until -that user gesture succeeds. Surface voice recovery failures as toasts with privacy-safe diagnostic -references, and request one-time consent before the host starts the microphone. Mark persisted -spoken messages and the exact interactive-tool answer completed by Voice with an inline Voice chip -ahead of the words themselves. - -End Voice mode before submitting typed text exactly once through the shared composer, preserving the -draft if handoff fails. Pause active media before the AI panel closes and reopen the mounted session -paused. Provisional transcription and Realtime audio remain ephemeral rather than becoming -persisted chat history. diff --git a/.changeset/stock-assistant-parity.md b/.changeset/stock-assistant-parity.md deleted file mode 100644 index a34b454b34c..00000000000 --- a/.changeset/stock-assistant-parity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Keep the stock AI assistant presentation unchanged by the Brunch conversation UI: chronological messages, stock tool rows, tabs, scrolling and composer. A tool stopped mid-run now shows Cancelled instead of a spinner. diff --git a/.changeset/storybook-real-optimizer.md b/.changeset/storybook-real-optimizer.md deleted file mode 100644 index f7cde9b024a..00000000000 --- a/.changeset/storybook-real-optimizer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Storybook gains a "With real optimizer" story that runs optimization studies against a local Petrinaut Optimizer service; start it with `turbo run dev --filter @hashintel/petrinaut -- --with-optimizer-service`. diff --git a/.changeset/streaming-range-sweeps.md b/.changeset/streaming-range-sweeps.md deleted file mode 100644 index 43d63a2dc1e..00000000000 --- a/.changeset/streaming-range-sweeps.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/petrinaut-core": patch ---- - -A sweep's range selection runs as one stochastic simulation over the ranges: every run draws its own value per ranged parameter, and the metric distribution over the region streams live. `ExperimentRequest` carries optional per-run overrides (`runs`), forwarded by the worker-pool backend and refused by the WebGPU backend. diff --git a/.changeset/sweep-compute-reuse.md b/.changeset/sweep-compute-reuse.md deleted file mode 100644 index b07216aaaa8..00000000000 --- a/.changeset/sweep-compute-reuse.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Sweep compute is reused and pipelined: simulation workers persist across batches, surface cells sample in batched chunks in quad-tree order across the CPU pool, the navigator's selection streams first while the ladder pipelines its rungs, and one GPU backend (device, shader, calibration) with a small preview tile serves a session's batches. The surface reads a cell's value from the last sampled frame, so terminating nets fill it; charts mount their axes when the drawer opens and apply data once per animation frame. diff --git a/.changeset/sweep-drawer-ux.md b/.changeset/sweep-drawer-ux.md deleted file mode 100644 index aafe2724876..00000000000 --- a/.changeset/sweep-drawer-ux.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut": patch -"@hashintel/petrinaut-core": patch ---- - -The frame inspector draws a frame's distribution as a canvas histogram with value and count axes. Distribution frames carry their bins' extent and heatmaps paint each bin across the rows it covers, so mixed strides no longer stripe, and streamed updates ease in instead of snapping. The sweep surface navigates by drag as well as click and marks the navigator's position, and the summary lists every batch computing in parallel. Parameter sweeps and the optimization surface are experimental settings, off by default. diff --git a/.changeset/sweep-surface-contour.md b/.changeset/sweep-surface-contour.md deleted file mode 100644 index 9b5c24e59ec..00000000000 --- a/.changeset/sweep-surface-contour.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Sweeps with two or more swept parameters gain a Surface section: a contour of a metric's final value over two chosen parameters, filled in live on a background lane. Clicking it moves the navigator to the nearest combination. diff --git a/.changeset/tidy-code-editor-layouts.md b/.changeset/tidy-code-editor-layouts.md deleted file mode 100644 index 06638161357..00000000000 --- a/.changeset/tidy-code-editor-layouts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Expand code sections to fill the Properties Panel with smooth transitions, a parent breadcrumb, keyboard focus restoration, and browser history navigation. Make Canvas and Definitions available as Edit views with browser history navigation. Preserve the latest code when switching between Edit views. diff --git a/.changeset/tidy-voice-dock.md b/.changeset/tidy-voice-dock.md deleted file mode 100644 index 39eb66d0091..00000000000 --- a/.changeset/tidy-voice-dock.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Allow host-owned Voice sessions to report a neutral connected state and omit unsupported controls, keeping viewport controls above the collapsed dock. Contain Voice failures and explicit recovery warnings behind a warning icon with hover previews and a scrollable details popover instead of global notifications, while temporary session notices remain in the dock status. - -Keep voice permission content above the compact dock without moving the controls, and show Voice setup until a connection actually starts. Keep the error icon in the same dock position when expanding or collapsing a Voice session. diff --git a/.changeset/timeline-holds-still-off-screen.md b/.changeset/timeline-holds-still-off-screen.md deleted file mode 100644 index 612fc7badcc..00000000000 --- a/.changeset/timeline-holds-still-off-screen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -A closed simulation timeline stops reading frames and drawing until it is reopened. diff --git a/.changeset/token-independent-lambda-fast-path.md b/.changeset/token-independent-lambda-fast-path.md deleted file mode 100644 index 5c4a630e05a..00000000000 --- a/.changeset/token-independent-lambda-fast-path.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Transitions whose lambda reads no input tokens skip combination enumeration and evaluate the lambda once against the first tokens in place order. Trajectories are unchanged for every seed. diff --git a/.changeset/trial-replicates-parallel.md b/.changeset/trial-replicates-parallel.md deleted file mode 100644 index 958d0e224d6..00000000000 --- a/.changeset/trial-replicates-parallel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Optimization trials run their seeded replicates in parallel as one sharded experiment. The Monte Carlo worker protocol attaches to any thread runtime, and the CLI's `--threads ` bounds the workers, defaulting to one per core minus one. diff --git a/.changeset/typed-experiment-host.md b/.changeset/typed-experiment-host.md deleted file mode 100644 index d5f656422bd..00000000000 --- a/.changeset/typed-experiment-host.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Add validated request and result schemas and a `runExperiment` host interface for simulations and optimizations with up to 100,000 final runs. diff --git a/.changeset/user-settings-provider-for-hosts.md b/.changeset/user-settings-provider-for-hosts.md deleted file mode 100644 index 91ec88364fa..00000000000 --- a/.changeset/user-settings-provider-for-hosts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Hosts can mount `UserSettingsProvider` from `@hashintel/petrinaut/react` above `Petrinaut` to read and change the persisted user settings from their own components; the editor reuses that provider instead of creating its own. diff --git a/.changeset/vaccination-campaign-example.md b/.changeset/vaccination-campaign-example.md deleted file mode 100644 index fbcefd755d0..00000000000 --- a/.changeset/vaccination-campaign-example.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Adds the **Vaccination Campaign** example: an SIR model with pre-wave vaccination coverage and contact reduction, whose Total cost objective has its minimum inside the parameter domain, built for optimization demos. diff --git a/.changeset/validate-arc-transitions.md b/.changeset/validate-arc-transitions.md deleted file mode 100644 index 1d9875ededd..00000000000 --- a/.changeset/validate-arc-transitions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch ---- - -Reject arc creation when the referenced transition does not exist instead of treating it as an unchanged mutation. diff --git a/.changeset/voice-display-projection.md b/.changeset/voice-display-projection.md deleted file mode 100644 index 61d2117ce4f..00000000000 --- a/.changeset/voice-display-projection.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add an optional assistant message display projection so hosts can show original voice transcripts and spoken captions without changing transport input, tool execution, or canonical conversation history. Distinguish failed brief preparation from successful preparation and show missing excerpts as display-only placeholders. diff --git a/.changeset/voice-input-withdrawal-and-stop-correlation.md b/.changeset/voice-input-withdrawal-and-stop-correlation.md deleted file mode 100644 index 7d371bd6dbe..00000000000 --- a/.changeset/voice-input-withdrawal-and-stop-correlation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Let hosts withdraw a retained voice input through an `AbortSignal`, keep a late durable Stop result from cancelling a newer turn, replace all conversation-owned assistant state when the conversation identity changes, hydrate host-owned history only once it carries every locally streamed reply, keep the composer status busy across the automatic follow-up to a client-tool step, and let a Stop pressed during that step withhold the follow-up. diff --git a/.changeset/voice-provenance-rollback.md b/.changeset/voice-provenance-rollback.md deleted file mode 100644 index bd54895eba5..00000000000 --- a/.changeset/voice-provenance-rollback.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Keep rejected overlapping Voice tool answers from restoring failed sibling provenance or overwriting newer message metadata. diff --git a/.changeset/webgpu-experiment-backend.md b/.changeset/webgpu-experiment-backend.md deleted file mode 100644 index 7e08ea0545e..00000000000 --- a/.changeset/webgpu-experiment-backend.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Add an experimental WebGPU compute backend for experiments, chosen per experiment behind a user setting. It runs the net's lowered HIR on the device, declines nets it cannot run so they fall back to the CPU, and agrees with the CPU in distribution rather than seed for seed. A Compilation panel, also behind a setting, shows what the compiler made of each condition, kernel and equation. diff --git a/.changeset/windows-panda-buildinfo-paths.md b/.changeset/windows-panda-buildinfo-paths.md deleted file mode 100644 index ed2ff8c1237..00000000000 --- a/.changeset/windows-panda-buildinfo-paths.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Restore design-system component styles in Petrinaut builds on Windows. diff --git a/.changeset/worksheet-focus-primitives.md b/.changeset/worksheet-focus-primitives.md deleted file mode 100644 index 35264776e58..00000000000 --- a/.changeset/worksheet-focus-primitives.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hashintel/petrinaut": patch ---- - -Add the worksheet keyboard-flow primitives (`FocusStack`, `FocusRoot`, `useFocusGrid`, `useFocusStops`): reusable arrow-key routing, per-group focus memory, and roving tab stops for panels composed of grids and controls. diff --git a/.changeset/yaml-import-export.md b/.changeset/yaml-import-export.md deleted file mode 100644 index a384cb42ada..00000000000 --- a/.changeset/yaml-import-export.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hashintel/petrinaut-core": patch -"@hashintel/petrinaut": patch ---- - -Nets and optimization manifests can be imported and exported in YAML and JSON. diff --git a/libs/@blockprotocol/graph/CHANGELOG.md b/libs/@blockprotocol/graph/CHANGELOG.md index 5e380774fb3..7bd7de2ee9f 100644 --- a/libs/@blockprotocol/graph/CHANGELOG.md +++ b/libs/@blockprotocol/graph/CHANGELOG.md @@ -1,5 +1,12 @@ # @blockprotocol/graph +## 0.5.1 + +### Patch Changes + +- Updated dependencies: + - @blockprotocol/type-system@0.2.3 + ## 0.5.0 ### Minor Changes diff --git a/libs/@blockprotocol/graph/package.json b/libs/@blockprotocol/graph/package.json index ea0ae93fd76..9e7fb0a06f6 100644 --- a/libs/@blockprotocol/graph/package.json +++ b/libs/@blockprotocol/graph/package.json @@ -1,6 +1,6 @@ { "name": "@blockprotocol/graph", - "version": "0.5.0", + "version": "0.5.1", "description": "Implementation of the Block Protocol Graph service specification for blocks and embedding applications", "keywords": [ "blockprotocol", diff --git a/libs/@blockprotocol/type-system/typescript/CHANGELOG.md b/libs/@blockprotocol/type-system/typescript/CHANGELOG.md index 28411436c1a..1572eaf7f68 100644 --- a/libs/@blockprotocol/type-system/typescript/CHANGELOG.md +++ b/libs/@blockprotocol/type-system/typescript/CHANGELOG.md @@ -1,5 +1,11 @@ # @blockprotocol/type-system +## 0.2.3 + +### Patch Changes + +- Reject zero major versions in versioned URLs. Require ontology version constructors to receive integers between 1 and 4294967295. ([@montekki](https://github.com/montekki), [#9891](https://github.com/hashintel/hash/pull/9891)) + ## 0.2.2 ### Patch Changes diff --git a/libs/@blockprotocol/type-system/typescript/package.json b/libs/@blockprotocol/type-system/typescript/package.json index c55c953087c..e6b2d7f7e15 100644 --- a/libs/@blockprotocol/type-system/typescript/package.json +++ b/libs/@blockprotocol/type-system/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@blockprotocol/type-system", - "version": "0.2.2", + "version": "0.2.3", "description": "Definitions of types within the Block Protocol Type System", "homepage": "https://blockprotocol.org", "license": "MIT", diff --git a/libs/@hashintel/brunch-agent/packages/plugin-sdcpn/CHANGELOG.md b/libs/@hashintel/brunch-agent/packages/plugin-sdcpn/CHANGELOG.md new file mode 100644 index 00000000000..2de58e9fc41 --- /dev/null +++ b/libs/@hashintel/brunch-agent/packages/plugin-sdcpn/CHANGELOG.md @@ -0,0 +1,8 @@ +# @hashintel/brunch-agent-plugin-sdcpn + +## 0.0.0 + +### Patch Changes + +- Updated dependencies: + - @hashintel/petrinaut-core@0.0.5 diff --git a/libs/@hashintel/brunch-agent/packages/plugin-sdcpn/package.json b/libs/@hashintel/brunch-agent/packages/plugin-sdcpn/package.json index 7c344bd06ce..2ab8f4dc178 100644 --- a/libs/@hashintel/brunch-agent/packages/plugin-sdcpn/package.json +++ b/libs/@hashintel/brunch-agent/packages/plugin-sdcpn/package.json @@ -1,6 +1,6 @@ { "name": "@hashintel/brunch-agent-plugin-sdcpn", - "version": "0.0.0-private", + "version": "0.0.0", "private": true, "description": "The operational-process domain typology and SDCPN target formalism: Flue-native prompt, job skill, and Petrinaut construction tools.", "license": "AGPL-3.0", diff --git a/libs/@hashintel/ds-components/CHANGELOG.md b/libs/@hashintel/ds-components/CHANGELOG.md index 235c0c2461b..a524020da0e 100644 --- a/libs/@hashintel/ds-components/CHANGELOG.md +++ b/libs/@hashintel/ds-components/CHANGELOG.md @@ -1,5 +1,43 @@ # @hashintel/ds-components +## 0.4.0 + +### Minor Changes + +- `Select`, `TextInput`, and `NumberInput` now accept `clearable` as `boolean | { onClear: () => void }`, and `Select` accepts `searchable` as `boolean | { onSearch?, hideCount?, hideSelectAllToggle? }`, replacing the previous `{ clearable: boolean, onClear }` and `{ searchable: boolean, onSearch }` object shapes. `Banner`'s `dismissible` and `Chip`'s and `Filter`'s `removeable` are now `false | { onDismiss: () => void }` / `false | { onRemove: () => void }` instead of objects with an inner enabled flag. ([@alex-e-leon](https://github.com/alex-e-leon), [#9646](https://github.com/hashintel/hash/pull/9646)) + +- Split the multi select's selected-value rendering: `renderSelectedItem` now renders a single selected value inside the trigger's overflow row (a plain-string result also supplies the `summary` mode's text for that value), and the new `renderSelectedAll` takes over its previous whole-selection behaviour. `Filter` multi-select inputs accept both. ([@alex-e-leon](https://github.com/alex-e-leon), [#9684](https://github.com/hashintel/hash/pull/9684)) + +### Patch Changes + +- Add `Combobox` component ([@alex-e-leon](https://github.com/alex-e-leon), [#9806](https://github.com/hashintel/hash/pull/9806)) + +- Add `multiple` support to `Combobox` ([@alex-e-leon](https://github.com/alex-e-leon), [#9866](https://github.com/hashintel/hash/pull/9866)) + +- Add an IconProvider for overriding named icons within a component tree while retaining defaults for omitted replacements. ([@kube](https://github.com/kube), [#9695](https://github.com/hashintel/hash/pull/9695)) + +- Support content refs and inline styles on Dialog for movable, resizable layouts. ([@kube](https://github.com/kube)) + +- `Drawer` accepts `initialFocusRef` and `returnFocusRef` refs that start `null`, as `Popover` does. ([@kube](https://github.com/kube), [#9607](https://github.com/hashintel/hash/pull/9607)) + +- `Filter` operators can now declare select inputs, overflowing content on Select + Inputs is improved, and keyboard navigation for Select updated to better match APG guidelines. ([@alex-e-leon](https://github.com/alex-e-leon), [#9646](https://github.com/hashintel/hash/pull/9646)) + +- Allow `Menu` and `SelectableList` items that carry `subItems` to accept a `menuClassName` ([@CiaranMn](https://github.com/CiaranMn), [#9739](https://github.com/hashintel/hash/pull/9739)) + +- `Slider` accepts `disabled`, which dims the control and turns its input off. ([@kube](https://github.com/kube), [#9516](https://github.com/hashintel/hash/pull/9516)) + +- `Slider` gains a `plain` variant: a small round thumb of one fixed size that never swells while dragged, for dense control rows. The rail now spans the slider's root whatever aligns the root's children. ([@kube](https://github.com/kube), [#9607](https://github.com/hashintel/hash/pull/9607)) + +- Extract the contour plot into a `ContourSurface` component shared by the sweep and optimization surfaces, decouple `SweepNavigator` from the experiments context, and add Storybook stories for each component's states. Sweep navigation is continuous: a point selection uses a single-thumb slider, slider moves commit during the drag, and charts keep their axes, grid and size while frames stream in. `Slider` treats 0 as a real value, and `useElementSize` follows an element that mounts after the first render. ([@kube](https://github.com/kube), [#9421](https://github.com/hashintel/hash/pull/9421)) + +- Optimization studies with two or more optimized numeric parameters gain a Surface section: a contour of the objective over two chosen parameters, computed locally against the study's frozen model, with the study's trials as markers. Sliders and clicks move the selected point, which refines with escalating batches. `Slider` accepts `step` and `onChangeEnd`. ([@kube](https://github.com/kube), [#9398](https://github.com/hashintel/hash/pull/9398)) + +- Add `resolvePandaBuildInfoPath` to `@hashintel/ds-components/preset`, which resolves a shipped `panda.buildinfo.json` to a path Panda's `include` accepts on every platform ([@aacarcrash](https://github.com/aacarcrash), [#9834](https://github.com/hashintel/hash/pull/9834)) + +- Add header + footer options to selectable list + other minor ui improvements ([@alex-e-leon](https://github.com/alex-e-leon), [#9584](https://github.com/hashintel/hash/pull/9584)) + +- Add Breadcrumb component ([@alex-e-leon](https://github.com/alex-e-leon), [#9502](https://github.com/hashintel/hash/pull/9502)) + ## 0.3.1 ### Patch Changes diff --git a/libs/@hashintel/ds-components/package.json b/libs/@hashintel/ds-components/package.json index ecc7df45e93..1efae998239 100644 --- a/libs/@hashintel/ds-components/package.json +++ b/libs/@hashintel/ds-components/package.json @@ -1,6 +1,6 @@ { "name": "@hashintel/ds-components", - "version": "0.3.1", + "version": "0.4.0", "description": "HASH Component Library built with React, Ark UI, and PandaCSS", "license": "(MIT OR Apache-2.0)", "repository": { diff --git a/libs/@hashintel/petrinaut-core/CHANGELOG.md b/libs/@hashintel/petrinaut-core/CHANGELOG.md index e72fdff3823..625b6ae8339 100644 --- a/libs/@hashintel/petrinaut-core/CHANGELOG.md +++ b/libs/@hashintel/petrinaut-core/CHANGELOG.md @@ -1,5 +1,124 @@ # @hashintel/petrinaut-core +## 0.0.5 + +### Patch Changes + +- Behind the new experimental "Ad-hoc scenarios" setting, the scenario creation form authors scenarios through the ad-hoc form: exposed Variables become the saved scenario's tunable parameters, and the definition persists as `initialState.type: "adhoc"`. ([@kube](https://github.com/kube), [#9368](https://github.com/hashintel/hash/pull/9368)) + +- Add the ad-hoc scenarios user-guide page and register it with the in-app AI assistant's doc reader. ([@kube](https://github.com/kube), [#9290](https://github.com/hashintel/hash/pull/9290)) + +- Ad-hoc scenario synthesis: form state, deterministic `adhoc.*` parameter names, synthesis to a generated code-mode scenario plus optimized fields with typed domains, the transform to optimization-manifest bindings, row-kind cycling and shared-column transitions, place totals, and an LSP session kind that type-checks every value expression. ([@kube](https://github.com/kube), [#9284](https://github.com/hashintel/hash/pull/9284)) + +- Transition kernels, lambdas, and differential equations can now be written as a bare function body ending in `return`, like metrics and scenario code: `input` (or `tokens` for dynamics) and `parameters` are in scope ambiently, with full editor type checking and completions. The `export default TransitionKernel(...)` / `Lambda(...)` / `Dynamics(...)` module form is still accepted, and the editor picks the right checking mode per form. Default templates, built-in examples, and the AI assistant now use the bare form. Visualizers are unchanged. ([@kube](https://github.com/kube), [#9370](https://github.com/hashintel/hash/pull/9370)) + +- Adds an in-browser optimization capability that runs the Optuna study in a Pyodide worker and evaluates trials through a host channel. A study that completed or was cancelled stays in the worker until it is released, so the connected capability can extend it with more trials on the same sampler history, and a run may keep up to four trials in flight at once. Pyodide and Optuna download from jsDelivr and PyPI by default; `pyodide.indexURL` overrides where the runtime loads from. The `./optimization` entry gains `parseOptimizationManifest`, `isUnknownOptimizationRunError` and `PETRINAUT_OPTIMIZATION_UNKNOWN_RUN_ERROR_CODE`, and the main entry gains `createReadableStore`. ([@kube](https://github.com/kube), [#9515](https://github.com/hashintel/hash/pull/9515)) + +- Expose stable document revision identities and explicit browser and headless diagnostics for captured definitions, expand the selected mutation batch with supported update and removal operations, and start document observation only when subscribed. ([@lunelson](https://github.com/lunelson), [#9667](https://github.com/hashintel/hash/pull/9667)) + +- `classicNodeDimensions` gives places a 104 × 104 footprint and transitions a 180 × 60 footprint for canvas rendering and layout. ([@kube](https://github.com/kube), [#9595](https://github.com/hashintel/hash/pull/9595)) + +- Make the code editor guide available to the in-app assistant. ([@kube](https://github.com/kube), [#9664](https://github.com/hashintel/hash/pull/9664)) + +- Added a command registry for host-rendered command palettes: `createCommandRegistry()` and `combineCommandRegistries()` in core, and `CommandRegistryProvider`, `useCommand(command, { when })`, `useCommands()`, and `formatShortcutKeys()` in `@hashintel/petrinaut/react`. The editor registers its undo/redo, tool, auto-layout, search, and panel commands. Petrinaut ships no palette. ([@kube](https://github.com/kube), [#9457](https://github.com/hashintel/hash/pull/9457)) + +- The layout module exports the canvas geometry: render node dimensions (`compactNodeDimensions`, `classicNodeDimensions`, `getComponentInstanceHeight`), net bounds (`getBoundsOfCenteredBoxes`) and zoom limits (`getMinZoomForBounds`, `ZOOM_PADDING`). `layoutNodeDimensions` is now derived from the render dimensions instead of maintained by hand. ([@kube](https://github.com/kube), [#9352](https://github.com/hashintel/hash/pull/9352)) + +- Make bundled example scenarios editable in the ad-hoc scenario form while preserving their parameters and initial states. ([@kube](https://github.com/kube), [#9724](https://github.com/hashintel/hash/pull/9724)) + +- Register the createExperiment tool with its validated request schema for AI integrations. ([@kube](https://github.com/kube), [#9678](https://github.com/hashintel/hash/pull/9678)) + +- Accept state constraint expressions with optional trailing semicolons and no explicit return while preserving existing code bodies. Report a missing return when a state constraint contains separate statements. Update the assistant's guide summaries for experiment controls and settings available without simulation feature flags. ([@kube](https://github.com/kube), [#9725](https://github.com/hashintel/hash/pull/9725)) + +- Add the `@hashintel/petrinaut-core/experiments` entry point: an `ExperimentBackend` interface, a worker-pool implementation of it, and `selectExperimentBackend`, which walks backends in preference order and records every refusal. ([@kube](https://github.com/kube), [#9178](https://github.com/hashintel/hash/pull/9178)) + +- `createJsonDocHandle` accepts `SDCPNInput`, a loose authoring variant of `SDCPN`: extension fields may be omitted and are filled with plain-net defaults by the new `normalizeSDCPN` export. `SDCPNInput` and its member types are exported from the package root. ([@kube](https://github.com/kube), [#8926](https://github.com/hashintel/hash/pull/8926)) + +- File import defaults a place's `colorId`, `dynamicsEnabled` and `differentialEquationId`, and an arc's `weight`, instead of rejecting a file that omits them. ([@kube](https://github.com/kube), [#9715](https://github.com/hashintel/hash/pull/9715)) + +- The WebGPU backend matches the CPU engine's stochastic semantics and frame numbering, streams metric frames per dispatch chunk, and runs range sweeps from a per-run parameter buffer. It sizes and calibrates metric histograms and typed-place buffers from the model and device instead of refusing or warning, and tiles experiments larger than the device's limits with bit-identical results. Sweep batch instantiation no longer blocks the main thread: scenario compilation is prepared once per experiment and per-run values travel as one typed-array plan. ([@kube](https://github.com/kube), [#9454](https://github.com/hashintel/hash/pull/9454)) + +- Weighted-arc token combinations enumerate lazily in the same lexicographic order, so a transition with a weight-2 coloured input arc no longer materialises every combination per frame. Trajectories are unchanged for every seed. ([@kube](https://github.com/kube), [#9386](https://github.com/hashintel/hash/pull/9386)) + +- Metric specs can sample every run that has not errored with `sampleRuns: "notErrored"`. ([@kube](https://github.com/kube), [#9685](https://github.com/hashintel/hash/pull/9685)) + +- Add constraint margin and state-indicator evaluators, an optional manifest constraintPolicy, and aggregateTime support in getRunValues. ([@kube](https://github.com/kube), [#9604](https://github.com/hashintel/hash/pull/9604)) + +- Export `PetrinautOptimizationDirection`, the objective's `maximize` | `minimize` union, from the package root and the `/optimization` entry. ([@kube](https://github.com/kube), [#9653](https://github.com/hashintel/hash/pull/9653)) + +- Run an experiment's runs in parallel across several Web Workers. ([@kube](https://github.com/kube), [#9162](https://github.com/hashintel/hash/pull/9162)) + + An experiment used to run every one of its runs in a single worker, using one core however many the machine had. Runs are independent, so they now split across one worker per logical core (minus one, so the editor stays responsive), capped at the run count. Measured at ~4x on 8 shards on a 10-core machine. + + Sharding cannot change what an experiment reports. Per-run seeds derive from the run's **global** index rather than its position within a shard, so run _i_ gets the same seed whichever worker owns it, and each worker's per-frame statistics recombine through the metric accumulator monoids (`empty`/`merge`). Output is byte-identical at every shard count while every shard still has an active run. A frame is only finalised once every still-running shard has reported it, with finished shards dropped from that watermark rather than blocking it — so once a whole shard's runs have ended early (for example by deadlock), that shard's completed runs stop contributing samples to later frames, where a single simulator would keep sampling their frozen state. + + Scalar metric frames now carry their pre-reduction accumulator state, because `frameValue` is already reduced and a mean of means is not a mean. + + Hosts can cap or pin parallelism with `experimentShardCount` on `ExperimentsProvider`, or `shardCount` on `createMonteCarloExperiment`. + +- `petrinautAiModel` names the model and reasoning effort Petrinaut assistants run by default: `gpt-5.5-2026-04-23` at `medium`. `@hashintel/petrinaut-core/ai` also exports the stock prompt's behavioural frame and capability guidance separately, as `petrinautAiStockBehavioralFrame` and `petrinautAiCapabilityGuidance`, and composes `petrinautAiPrompt` from them. ([@lunelson](https://github.com/lunelson), [#9811](https://github.com/hashintel/hash/pull/9811)) + +- Register the `preview` user-guide page, so the in-app assistant can read the + embedded Preview's documentation. ([@kube](https://github.com/kube), [#9545](https://github.com/hashintel/hash/pull/9545)) + +- Expose the selection vocabulary as data: `selectionItemTypes` and + `canonicalizeSelection` are available from a dependency-free + `@hashintel/petrinaut-core/selection` entry, so hosts can validate and order + selection coming from a URL or an HTTP request without pulling the model or any + React code. ([@kube](https://github.com/kube), [#9426](https://github.com/hashintel/hash/pull/9426)) + +- Add an optional per-place token capacity. ([@kube](https://github.com/kube), [#9177](https://github.com/hashintel/hash/pull/9177)) + + A place can now declare a maximum number of tokens it will hold, set from the place properties panel. Useful for supply-chain style models with finite storage. It also converts frames from growable to fixed-size, which is the precondition for a fixed-layout GPU or WASM path. + + Capacity participates in transition enablement, following the standard Petri-net capacity constraint: a transition cannot fire if doing so would take any output place above its capacity. Output tokens are applied at the end of a frame, so the check accounts for what transitions earlier in the same frame have already committed. Several transitions feeding one capped place cannot collectively overflow it. + + Deadlock detection includes the same check, so a net whose only remaining transitions are blocked by full output places is reported as deadlocked rather than stepping to `maxTime` with nothing happening. + + Nets without capacities are unaffected: the constraint tables are empty and the hot path skips them. + +- Preserve place capacities when normalizing documents or reopening a JSON document handle, including zero limits and explicitly unbounded places. ([@lunelson](https://github.com/lunelson), [#9562](https://github.com/hashintel/hash/pull/9562)) + +- Report an AI mutation that leaves the document unchanged as not applied, without claiming the requested state was already present, so hosts can distinguish an applied document change from an unchanged one, and reliably continue consecutive browser tool calls from live or rehydrated assistant messages. ([@lunelson](https://github.com/lunelson), [#9537](https://github.com/hashintel/hash/pull/9537)) + +- Reject net identifiers that collide with `Object.prototype` member names (`__proto__`, `constructor`, ...) at file import and before simulation, and store user-authored keys in prototype-free records. Place visualizer code now runs under the same sandbox hardening as scenario code. ([@kube](https://github.com/kube), [#9222](https://github.com/hashintel/hash/pull/9222)) + +- Mark Space as the default starting place in the Probabilistic Satellite Launcher example. ([@kube](https://github.com/kube), [#9764](https://github.com/hashintel/hash/pull/9764)) + +- Makes the scenario form the only scenario form and removes the Ad-hoc scenarios setting. ([@kube](https://github.com/kube), [#9686](https://github.com/hashintel/hash/pull/9686)) + +- Scenario code (parameter overrides, per-place expressions, code-mode initial state) now compiles through the HIR and runs in an interpreter: no `new Function`, no sandbox. Out-of-subset code fails with positioned errors in the editor and at compile. Stricter than the old evaluator: `==` is strict, conditions and `&&`/`||` take booleans, unknown place names in code mode are errors, and array methods beyond `.map`/`.reduce`/`.concat` are unavailable. `Array.from({ length: n }, fn)` desugars to `range(n).map(fn)`. ([@kube](https://github.com/kube), [#9332](https://github.com/hashintel/hash/pull/9332)) + +- SDCPN elements carry an optional `description` (places, transitions, types, subnets, component instances, and the net root) and an optional `metadata` record of JSON values (transitions, subnets, component instances, and the net root). `metadata` is host-defined and opaque to the library. Both fields validate against the entity schemas, survive file import/export, and are preserved when an `SDCPNInput` is normalized. Files written without the fields still validate. ([@CiaranMn](https://github.com/CiaranMn), [#9484](https://github.com/hashintel/hash/pull/9484)) + +- `selectedMutationBatchSchema` admits `addScenario`, `updateScenario`, `removeScenario`, `addMetric`, `updateMetric` and `removeMetric`, so a selected batch can save the scenario and metric an experiment names. ([@kostandinang](https://github.com/kostandinang), [#9762](https://github.com/hashintel/hash/pull/9762)) + +- Expose the selected add- and remove-place, transition, and arc ordered batch contract and executor. ([@lunelson](https://github.com/lunelson), [#9649](https://github.com/hashintel/hash/pull/9649)) + +- Add simulation panel guidance to the AI assistant's documentation catalog. ([@kube](https://github.com/kube), [#9723](https://github.com/hashintel/hash/pull/9723)) + +- Describe snapshot validation and its TypeScript and HIR diagnostics in the AI tool. ([@kube](https://github.com/kube), [#9675](https://github.com/hashintel/hash/pull/9675)) + +- A sweep's range selection runs as one stochastic simulation over the ranges: every run draws its own value per ranged parameter, and the metric distribution over the region streams live. `ExperimentRequest` carries optional per-run overrides (`runs`), forwarded by the worker-pool backend and refused by the WebGPU backend. ([@kube](https://github.com/kube), [#9419](https://github.com/hashintel/hash/pull/9419)) + +- Sweep compute is reused and pipelined: simulation workers persist across batches, surface cells sample in batched chunks in quad-tree order across the CPU pool, the navigator's selection streams first while the ladder pipelines its rungs, and one GPU backend (device, shader, calibration) with a small preview tile serves a session's batches. The surface reads a cell's value from the last sampled frame, so terminating nets fill it; charts mount their axes when the drawer opens and apply data once per animation frame. ([@kube](https://github.com/kube), [#9474](https://github.com/hashintel/hash/pull/9474)) + +- The frame inspector draws a frame's distribution as a canvas histogram with value and count axes. Distribution frames carry their bins' extent and heatmaps paint each bin across the rows it covers, so mixed strides no longer stripe, and streamed updates ease in instead of snapping. The sweep surface navigates by drag as well as click and marks the navigator's position, and the summary lists every batch computing in parallel. Parameter sweeps and the optimization surface are experimental settings, off by default. ([@kube](https://github.com/kube), [#9478](https://github.com/hashintel/hash/pull/9478)) + +- Transitions whose lambda reads no input tokens skip combination enumeration and evaluate the lambda once against the first tokens in place order. Trajectories are unchanged for every seed. ([@kube](https://github.com/kube), [#9389](https://github.com/hashintel/hash/pull/9389)) + +- Optimization trials run their seeded replicates in parallel as one sharded experiment. The Monte Carlo worker protocol attaches to any thread runtime, and the CLI's `--threads ` bounds the workers, defaulting to one per core minus one. ([@kube](https://github.com/kube), [#9358](https://github.com/hashintel/hash/pull/9358)) + +- Add validated request and result schemas and a `runExperiment` host interface for simulations and optimizations with up to 100,000 final runs. ([@kube](https://github.com/kube), [#9676](https://github.com/hashintel/hash/pull/9676)) + +- Adds the **Vaccination Campaign** example: an SIR model with pre-wave vaccination coverage and contact reduction, whose Total cost objective has its minimum inside the parameter domain, built for optimization demos. ([@kube](https://github.com/kube), [#9516](https://github.com/hashintel/hash/pull/9516)) + +- Reject arc creation when the referenced transition does not exist instead of treating it as an unchanged mutation. ([@lunelson](https://github.com/lunelson), [#9722](https://github.com/hashintel/hash/pull/9722)) + +- Add an experimental WebGPU compute backend for experiments, chosen per experiment behind a user setting. It runs the net's lowered HIR on the device, declines nets it cannot run so they fall back to the CPU, and agrees with the CPU in distribution rather than seed for seed. A Compilation panel, also behind a setting, shows what the compiler made of each condition, kernel and equation. ([@kube](https://github.com/kube), [#9179](https://github.com/hashintel/hash/pull/9179)) + +- Nets and optimization manifests can be imported and exported in YAML and JSON. ([@kube](https://github.com/kube), [#9379](https://github.com/hashintel/hash/pull/9379)) + ## 0.0.4 ### Patch Changes diff --git a/libs/@hashintel/petrinaut-core/package.json b/libs/@hashintel/petrinaut-core/package.json index 08f6f5367c0..3b7dd86fc08 100644 --- a/libs/@hashintel/petrinaut-core/package.json +++ b/libs/@hashintel/petrinaut-core/package.json @@ -1,6 +1,6 @@ { "name": "@hashintel/petrinaut-core", - "version": "0.0.4", + "version": "0.0.5", "description": "Headless Petrinaut core APIs", "license": "(MIT OR Apache-2.0)", "repository": { diff --git a/libs/@hashintel/petrinaut/CHANGELOG.md b/libs/@hashintel/petrinaut/CHANGELOG.md index e3fe35fe7c0..88c22bda977 100644 --- a/libs/@hashintel/petrinaut/CHANGELOG.md +++ b/libs/@hashintel/petrinaut/CHANGELOG.md @@ -1,5 +1,308 @@ # @hashintel/petrinaut +## 0.0.20 + +### Patch Changes + +- Show every reasoning step and tool in the Brunch Activity fold instead of clipping them in a nested scroll area, so the visible list always matches the tool count. ([@kostandinang](https://github.com/kostandinang)) + +- Improve scenario and experiment forms with keyboard navigation, stacked section headers, overlay scrollbars, default starting-place filtering with a compact toggle beside the section title, and source expressions over selected computed values. Align the Time Step label and info icon, align token totals with place headers, keep select chevrons inside spreadsheet cells, and keep validation errors visible while editing ad-hoc values. ([@kube](https://github.com/kube), [#9724](https://github.com/hashintel/hash/pull/9724)) + +- Arc weight labels sit on the Adaptive Bezier curve instead of floating at the straight-line midpoint between the arc's endpoints. ([@kube](https://github.com/kube), [#9354](https://github.com/hashintel/hash/pull/9354)) + +- The create-experiment drawer accepts an ad-hoc scenario when "No scenario" is selected: Initial State + Parameters defined inline compile through a generated, never-persisted scenario at experiment start. ([@kube](https://github.com/kube), [#9288](https://github.com/hashintel/hash/pull/9288)) + +- Fix three defects in the ad-hoc scenario form: the optimize bounds popover + ignored every press (Min, Max, Step and Scale were uneditable, and each press + dismissed it), a focused section painted over the sticky header of the section + hosting it, and the experiment drawer's computed initial state grew unbounded + instead of scrolling in its own region. ([@kube](https://github.com/kube), [#9473](https://github.com/hashintel/hash/pull/9473)) + +- The create-optimization drawer offers "Ad-hoc (define inline)": Initial State + Parameters with Optimize selections compile to a generated, never-persisted scenario whose generated parameters the optimization manifest binds to their optimize domains. ([@kube](https://github.com/kube), [#9289](https://github.com/hashintel/hash/pull/9289)) + +- Quick simulation runs an ad-hoc scenario when none is selected: a "Define initial state" drawer in the simulation settings panel edits token counts and values that compile through a generated, never-persisted scenario. ([@kube](https://github.com/kube), [#9287](https://github.com/hashintel/hash/pull/9287)) + +- Behind the new experimental "Ad-hoc scenarios" setting, the scenario creation form authors scenarios through the ad-hoc form: exposed Variables become the saved scenario's tunable parameters, and the definition persists as `initialState.type: "adhoc"`. ([@kube](https://github.com/kube), [#9368](https://github.com/hashintel/hash/pull/9368)) + +- Add the ad-hoc scenarios user-guide page and register it with the in-app AI assistant's doc reader. ([@kube](https://github.com/kube), [#9290](https://github.com/hashintel/hash/pull/9290)) + +- The ad-hoc scenario form matches the ratified prototype: gutter-cycled row kinds (fixed → dynamic → count-optimized) with quiet count strips, shared columns with a wash and derived cells, a phantom trailing row, place totals, compact Variables blocks, and Monaco expression editors type-checked live through a new ad-hoc LSP session with diagnostics rendered on closed cells. ([@kube](https://github.com/kube)) + +- Allow hosts to register validated dynamic AI tools that execute automatically against the mounted editor. `ErrorTrackerContext.captureException` now accepts an optional `{ source, tags }` context, and the AI assistant panel reports its operational failures (stream errors, tool execution, continuation, Stop) to the host's tracker at their source. ([@lunelson](https://github.com/lunelson), [#9649](https://github.com/hashintel/hash/pull/9649)) + +- Describe a clean net-code diagnostic check without claiming the whole model compiles. ([@kube](https://github.com/kube), [#9675](https://github.com/hashintel/hash/pull/9675)) + +- Transition kernels, lambdas, and differential equations can now be written as a bare function body ending in `return`, like metrics and scenario code: `input` (or `tokens` for dynamics) and `parameters` are in scope ambiently, with full editor type checking and completions. The `export default TransitionKernel(...)` / `Lambda(...)` / `Dynamics(...)` module form is still accepted, and the editor picks the right checking mode per form. Default templates, built-in examples, and the AI assistant now use the bare form. Visualizers are unchanged. ([@kube](https://github.com/kube), [#9370](https://github.com/hashintel/hash/pull/9370)) + +- Keep the bottom toolbar clear of the side panels and the viewport controls: it stays centered on the canvas until a panel would cover it, then shifts aside, and collapses to its essential controls — expanding again on hover or focus — when the space between the panels is too narrow for the full set. ([@kube](https://github.com/kube), [#9533](https://github.com/hashintel/hash/pull/9533)) + +- Expose `ExperimentHostContext.runExperiment` with validation, progress callbacks, cancellation, and captured results for up to 100,000 runs. ([@kube](https://github.com/kube), [#9676](https://github.com/hashintel/hash/pull/9676)) + +- Hosts can also provide an additional assistant tab for content such as a saved workpiece, reusing the panel's sizing and keeping the conversation, composer and Voice controls mounted across tab switches. Add an optional synchronous `aiAssistant.executeMutation` boundary so embedding applications can inspect their live document around a canonical mutation or refuse execution, while the panel retains control of tool results and continuation. Show explicitly unapplied assistant operations with their reason instead of a successful mutation summary, and label grouped tool calls as operations rather than changes. Hosts can opt into following canonical AI conversation history once local submissions are settled, while preserving local streaming output; externally observed and reloaded tools are display-only in that mode, and locally streamed tools retain normal execution. ([@lunelson](https://github.com/lunelson), [#9562](https://github.com/hashintel/hash/pull/9562)) + +- Show activity wording instead of naming Brunch during a turn. The waiting row and the default working status read "Working…", and the Voice brief reads "Preparing request", "Sending request", then "Request sent". ([@kostandinang](https://github.com/kostandinang)) + +- Keep the Brunch Activity row in place through a turn. A spoken Live reply no longer takes over the Working… row, and the row's label no longer shifts when the spinner gives way to the Activity icon. ([@kostandinang](https://github.com/kostandinang)) + +- Unify Chat and Voice turns with collapsible work, answer cards, voice briefs, and produced-card placement. Preserve drafts, reading position, and Brunch disclosure choices during streaming; stabilize waiting feedback and improve composer, audio settings, and recovery feedback. ([@kostandinang](https://github.com/kostandinang), [#9829](https://github.com/hashintel/hash/pull/9829)) + +- Allow a host to run named AI tool calls and return their results itself while the assistant response is still streaming, through `aiAssistant.inBandBrowserTools: { has(toolName), run(call, execute) }`: Petrinaut calls `run` when the call's turn in same-document order starts, with a `signal` that aborts on Stop, and the host calls `execute(input)` at most once and reports the resolved output or the failure; stock hosts retain their existing tool path. `executePetrinautAiMutation` lets a host run one canonical AI edit with the assistant's own no-op detection and output. ([@lunelson](https://github.com/lunelson), [#9811](https://github.com/hashintel/hash/pull/9811)) + +- Expose revision identity, editor commands, current-definition diagnostics, optimizer availability, and user-guide content to host-owned assistant tools, while showing unfinished tool and experiment progress, refusing unavailable title edits, and rejecting unavailable optimization before an experiment record is created. Keep host transport and store resources current across route changes, with stable React subscriptions and capability-based read-only titles. ([@lunelson](https://github.com/lunelson), [#9667](https://github.com/hashintel/hash/pull/9667)) + +- Stop Brunch assistant tabs inheriting the stock tab fade, so the Brunch selected and hover treatment applies on its own. ([@kostandinang](https://github.com/kostandinang)) + +- Hosts can now resolve tool cards with an optional pending or correctable-refusal presentation: unfinished rows may use a gold pending tone, and a completed non-applied result can carry collapsed detail items instead of an inline reason. Stock defaults stay unchanged. ([@lunelson](https://github.com/lunelson), [#9761](https://github.com/hashintel/hash/pull/9761)) + +- Show Brunch's waiting state in the transcript, where the turn's Activity will appear, and keep the spinner in the Activity header while Brunch works. The status row above the composer now appears only while the host tab is shown. ([@kostandinang](https://github.com/kostandinang)) + +- Let hosts label assistant tabs, resolve tool presentation from lifecycle context, signal unseen tab activity, and frame the rendered canvas from automatic tools. Tool calls now render chronologically with preserved result details, Brunch omits internal marker and automatic framing calls, generated reasoning headings are explicitly presented as thinking, an optional working label spans active turns, and the Ledger presents its readable account without internal record metadata. Auto-layout still awaits an inset-aware post-render viewport fit across built-in entry points. ([@lunelson](https://github.com/lunelson), [#9722](https://github.com/hashintel/hash/pull/9722)) + +- Firing animations run only on the transitions and arcs in view, and not at all when the canvas is zoomed out far enough that a node is a few pixels across. ([@kube](https://github.com/kube), [#9655](https://github.com/hashintel/hash/pull/9655)) + +- Playback re-renders only the places and transitions whose values moved, so large nets play back several times faster. ([@kube](https://github.com/kube), [#9592](https://github.com/hashintel/hash/pull/9592)) + +- Hovering a node re-renders only the nodes and arcs its highlight touches, and a **Highlight on hover** setting turns the pointer highlight off. ([@kube](https://github.com/kube), [#9576](https://github.com/hashintel/hash/pull/9576)) + +- A hovered or selected node's neighbourhood is highlighted in colour, blue for what feeds it and orange for what it feeds, instead of fading the rest of the net. The highlight waits for the pointer to rest. ([@kube](https://github.com/kube), [#9591](https://github.com/hashintel/hash/pull/9591)) + +- The canvas renders centered on the net from its first frame, instead of jumping there after a first paint at the origin. Component instances grow with their port count so their ports have room, and auto-layout on import no longer depends on the compact/classic setting. ([@kube](https://github.com/kube), [#9352](https://github.com/hashintel/hash/pull/9352)) + +- Remember the canvas viewport per net, so switching between nets or reloading returns to the same position and zoom. ([@kube](https://github.com/kube), [#9510](https://github.com/hashintel/hash/pull/9510)) + +- Improve Voice controls with provider-specific audio options, independent microphone and speaker state, distinct Stop and End actions, and a responsive compact dock. ([@kostandinang](https://github.com/kostandinang), [#9747](https://github.com/hashintel/hash/pull/9747)) + +- Added a command registry for host-rendered command palettes: `createCommandRegistry()` and `combineCommandRegistries()` in core, and `CommandRegistryProvider`, `useCommand(command, { when })`, `useCommands()`, and `formatShortcutKeys()` in `@hashintel/petrinaut/react`. The editor registers its undo/redo, tool, auto-layout, search, and panel commands. Petrinaut ships no palette. ([@kube](https://github.com/kube), [#9457](https://github.com/hashintel/hash/pull/9457)) + +- A connected optimization source runs studies in this browser behind the experimental **In-browser optimization** setting. The create form gains **Runs per step**, **Parallel steps** (1 to 4) and the experiments' **Backend** switch, and seeds each study with a fresh random **Seed** that can be edited for reproducibility. A connected study's drawer lays everything out in view at once: a summary strip (status, steps, best, backend), the **Parameters** band whose controls follow each step while the study runs, the **Surface** drawn from the study's own steps beside the objective's chart, and the steps table with the best step starred; once the study is over, or **Follow steps** is off, the controls, the Surface and the chart move together to whichever point is picked. A connected study can be stopped with **Stop** and continued with more steps on the same sampler with **Continue**. ([@kube](https://github.com/kube), [#9516](https://github.com/hashintel/hash/pull/9516)) + +- Allow hosts to show interactive tool controls only for matching tool calls, such as a destructive change waiting for approval. ([@kostandinang](https://github.com/kostandinang), [#9856](https://github.com/hashintel/hash/pull/9856)) + +- Show transient copied or failed feedback when copying notification details, with a document-based fallback when the Clipboard API rejects the copy. ([@kostandinang](https://github.com/kostandinang), [#9792](https://github.com/hashintel/hash/pull/9792)) + +- `createExperiment` resolves with the experiment record, which now carries the scenario it compiled (`ExperimentRecord.scenario`), and no longer selects it. ([@kube](https://github.com/kube), [#9689](https://github.com/hashintel/hash/pull/9689)) + +- Give default canvas nodes lighter colours, a soft shadow, a muted 1.5px outline, and matching name styling. Places are circular; transitions are rectangular with an icon on the left, a wrapped name, and the transition type. Preserve words in node names and align minimap nodes with their canvas positions and dimensions. ([@kube](https://github.com/kube), [#9595](https://github.com/hashintel/hash/pull/9595)) + +- The experiment and optimization result drawers keep the summary, navigator and surface still at the top; only the step and metric lists scroll, with the step table's header pinned. ([@kube](https://github.com/kube), [#9422](https://github.com/hashintel/hash/pull/9422)) + +- Let hosts make the assistant's Stop action durable before Petrinaut cancels its local response stream, while preserving local-only cancellation for hosts that do not provide the new stop request. ([@lunelson](https://github.com/lunelson), [#9528](https://github.com/hashintel/hash/pull/9528)) + +- The embedded preview's playback bar scrolls only sideways, so resting the pointer on one of its controls no longer shows a vertical scrollbar inside the bar. ([@CiaranMn](https://github.com/CiaranMn), [#9718](https://github.com/hashintel/hash/pull/9718)) + +- The left panel shows the Entities tree for everyone. The stack of separate Nodes, Token Types, Differential Equations and Parameters lists is gone, along with the "Entities tree view" setting that chose between them. Nets with subnets keep the Subnets panel below the tree, and the panel opens at 280px rather than 320px. ([@kube](https://github.com/kube), [#9597](https://github.com/hashintel/hash/pull/9597)) + +- Offer GPU compute, parameter sweeps, and in-browser optimization without feature flags, with automatic metric names, grouped constraints that accept state expressions, keyboard controls, and explicit optimizer startup. Simplify results with manual optimizer controls, compact details, single-value parameter sliders, sensitivity estimates ordered by importance, and best parameters that remain available after optimization with a View best action. ([@kube](https://github.com/kube), [#9725](https://github.com/hashintel/hash/pull/9725)) + +- Let hosts offer retries for failed experiment runs and report local experiment activity to the assistant composer, while retaining the existing execution-card appearance. Return an effect cleanup from activity reports so unmounted controls can clear their status without overriding newer reports. ([@kostandinang](https://github.com/kostandinang), [#9857](https://github.com/hashintel/hash/pull/9857)) + +- Experiments can sweep scenario parameters. A Sweep toggle per numeric parameter defines the values, and the results drawer gains a navigator: only the selected combination computes, in escalating run batches that stream into the charts, and visited combinations keep their results. ([@kube](https://github.com/kube), [#9093](https://github.com/hashintel/hash/pull/9093)) + +- Add an explicit `aiAssistant.presentation` option so hosts can select the Brunch conversation presentation without relying on the transcript label, while preserving the stock assistant presentation by default. ([@kostandinang](https://github.com/kostandinang), [#9829](https://github.com/hashintel/hash/pull/9829)) + +- `prepareExperiment` is exported from `@hashintel/petrinaut/react`, so a host can resolve an experiment request against the live model and build its optimization input without starting a run. ([@kostandinang](https://github.com/kostandinang), [#9771](https://github.com/hashintel/hash/pull/9771)) + +- Add optional host-provided voice, speaking-speed, and audio-device controls alongside output mute and volume, with collapsed Devices and Real-time sections, a compact speed control, and next-session voice information. Keep voice selection available independently of muted-and-idle cached previews, with right-aligned loading and playing indicators, switches for status text and interruptions, and collision-safe Voice dock status truncation that preserves full screen-reader announcements. ([@kostandinang](https://github.com/kostandinang), [#9774](https://github.com/hashintel/hash/pull/9774)) + +- Add half-duplex Voice handoff, exact response and marked-question replay, live transcripts, compact Voice setup and playback controls, and persistent copyable errors. Keep the conversation busy through browser-tool continuations, withhold pending work on Stop, preserve rejected durable Stop failures through late provider completion, surface automatic-tool failures to Voice, and display stopped entries and surviving client-tool Voice origins supplied by canonical history. ([@lunelson](https://github.com/lunelson), [#9564](https://github.com/hashintel/hash/pull/9564)) + +- Removes the Optimizations tab; a study now runs from a sweep's Parameters card. ([@kube](https://github.com/kube), [#9685](https://github.com/hashintel/hash/pull/9685)) + +- The WebGPU backend matches the CPU engine's stochastic semantics and frame numbering, streams metric frames per dispatch chunk, and runs range sweeps from a per-run parameter buffer. It sizes and calibrates metric histograms and typed-place buffers from the model and device instead of refusing or warning, and tiles experiments larger than the device's limits with bit-identical results. Sweep batch instantiation no longer blocks the main thread: scenario compilation is prepared once per experiment and per-run values travel as one typed-array plan. ([@kube](https://github.com/kube), [#9454](https://github.com/hashintel/hash/pull/9454)) + +- Distribution heatmaps in experiment metric charts render as a magma-coloured density image in one draw call, so they stay fast at high run counts. ([@kube](https://github.com/kube), [#9450](https://github.com/hashintel/hash/pull/9450)) + +- Swept parameters declare an interval instead of a value count, and the navigator becomes a range slider per parameter: the whole interval by default, resizable, collapsible to a point. A range selection samples the region and streams the merged distribution over it. The slider is a two-thumb range control local to the navigator, whose thumbs may coincide. ([@kube](https://github.com/kube), [#9396](https://github.com/hashintel/hash/pull/9396)) + +- Extract the contour plot into a `ContourSurface` component shared by the sweep and optimization surfaces, decouple `SweepNavigator` from the experiments context, and add Storybook stories for each component's states. Sweep navigation is continuous: a point selection uses a single-thumb slider, slider moves commit during the drag, and charts keep their axes, grid and size while frames stream in. `Slider` treats 0 as a real value, and `useElementSize` follows an element that mounts after the first render. ([@kube](https://github.com/kube), [#9421](https://github.com/hashintel/hash/pull/9421)) + +- Metric cards lay out their chart options as runs and time aggregates and gain an Enlarge button. ([@kube](https://github.com/kube), [#9666](https://github.com/hashintel/hash/pull/9666)) + +- Optimization studies with two or more optimized numeric parameters gain a Surface section: a contour of the objective over two chosen parameters, computed locally against the study's frozen model, with the study's trials as markers. Sliders and clicks move the selected point, which refines with escalating batches. `Slider` accepts `step` and `onChangeEnd`. ([@kube](https://github.com/kube), [#9398](https://github.com/hashintel/hash/pull/9398)) + +- In the Optimizations list a cancelled study's status chip is grey rather than red, and a study whose event stream is being re-established reads Reconnecting. ([@kube](https://github.com/kube), [#9653](https://github.com/hashintel/hash/pull/9653)) + +- Run an experiment's runs in parallel across several Web Workers. ([@kube](https://github.com/kube), [#9162](https://github.com/hashintel/hash/pull/9162)) + + An experiment used to run every one of its runs in a single worker, using one core however many the machine had. Runs are independent, so they now split across one worker per logical core (minus one, so the editor stays responsive), capped at the run count. Measured at ~4x on 8 shards on a 10-core machine. + + Sharding cannot change what an experiment reports. Per-run seeds derive from the run's **global** index rather than its position within a shard, so run _i_ gets the same seed whichever worker owns it, and each worker's per-frame statistics recombine through the metric accumulator monoids (`empty`/`merge`). Output is byte-identical at every shard count while every shard still has an active run. A frame is only finalised once every still-running shard has reported it, with finished shards dropped from that watermark rather than blocking it — so once a whole shard's runs have ended early (for example by deadlock), that shard's completed runs stop contributing samples to later frames, where a single simulator would keep sampling their frozen state. + + Scalar metric frames now carry their pre-reduction accumulator state, because `frameValue` is already reduced and a mean of means is not a mean. + + Hosts can cap or pin parallelism with `experimentShardCount` on `ExperimentsProvider`, or `shardCount` on `createMonteCarloExperiment`. + +- Update the `ai` dependency to 6.0.286 and `@ai-sdk/react` to 3.0.289. ([@TimDiekmann](https://github.com/TimDiekmann), [#9849](https://github.com/hashintel/hash/pull/9849)) + +- Add a `navigation` prop to `Petrinaut`: a router-neutral controller through + which the host can read and drive the app location (mode, Simulate section and + resource, scenario, subnet, selection, and creation drawers), making them real + browser history destinations. A creation drawer now layers over the record + already open instead of closing it, and the hamburger menu hides **Layout** on + a read-only net. ([@kube](https://github.com/kube), [#9426](https://github.com/hashintel/hash/pull/9426)) + +- In experimental Brunch demo mode, File → New offers Build with Brunch or Start blank, then Build with Brunch asks for careful elicitation or a quick preview. ([@lunelson](https://github.com/lunelson), [#9649](https://github.com/hashintel/hash/pull/9649)) + +- Add `PetrinautPreview`, a compact read-only embed surface exported from + `@hashintel/petrinaut/preview` that reuses the editor's canvas, navigation, + and property-inspection components. ([@kube](https://github.com/kube), [#9545](https://github.com/hashintel/hash/pull/9545)) + +- Add Petricon, an optional animated SVG icon library across the editor with adjustable stroke weight, subtle action hints, state transitions, configurable effects, and automatic fallback for icons outside the pack. ([@kube](https://github.com/kube), [#9696](https://github.com/hashintel/hash/pull/9696)) + +- Allow hosts to render application-specific content in the Labs settings section. ([@kostandinang](https://github.com/kostandinang), [#9793](https://github.com/hashintel/hash/pull/9793)) + +- Add a `presentationProfile` prop to `Petrinaut` (`editor` or `review`) that + gates authoring-only controls, and extract the scenario and playback controls + into shared components reusable outside the full editor. ([@kube](https://github.com/kube), [#9425](https://github.com/hashintel/hash/pull/9425)) + +- Add an optional Quick Simulation mode to `PetrinautPreview`: hosts supply + precompiled HIR artifacts and bounded run settings, and the preview gains + scenario configuration, compact playback controls, and an expandable timeline + reusing the editor's simulation components. ([@kube](https://github.com/kube), [#9546](https://github.com/hashintel/hash/pull/9546)) + +- Provide movable, resizable User Settings with keyboard-accessible sections, inline experimental badges, and scroll-edge blur. ([@kube](https://github.com/kube)) + +- Allow Voice users to interrupt assistant playback by speaking, with a browser-saved preference and optional manual handoff. ([@kostandinang](https://github.com/kostandinang), [#9619](https://github.com/hashintel/hash/pull/9619)) + +- A place's state visualizer opens from a button on the hovered place, with or without a run, and can be pinned to stay in view while the timeline is scrubbed. ([@kube](https://github.com/kube), [#9601](https://github.com/hashintel/hash/pull/9601)) + +- Add an optional per-place token capacity. ([@kube](https://github.com/kube), [#9177](https://github.com/hashintel/hash/pull/9177)) + + A place can now declare a maximum number of tokens it will hold, set from the place properties panel. Useful for supply-chain style models with finite storage. It also converts frames from growable to fixed-size, which is the precondition for a fixed-layout GPU or WASM path. + + Capacity participates in transition enablement, following the standard Petri-net capacity constraint: a transition cannot fire if doing so would take any output place above its capacity. Output tokens are applied at the end of a frame, so the check accounts for what transitions earlier in the same frame have already committed. Several transitions feeding one capped place cannot collectively overflow it. + + Deadlock detection includes the same check, so a net whose only remaining transitions are blocked by full output places is reported as deadlocked rather than stepping to `maxTime` with nothing happening. + + Nets without capacities are unaffected: the constraint tables are empty and the hot path skips them. + +- The playback readout shows elapsed and total simulated time instead of the frame index and frame count, in both the editor's toolbar and the embedded Preview's bar. Times print at the precision the run's time step carries, stacked over two lines. The scrubber sizes itself to the space the bar has instead of a fixed width. ([@kube](https://github.com/kube), [#9598](https://github.com/hashintel/hash/pull/9598)) + +- `PetrinautPreview` takes a `fullViewUrl`, and offers it in the header as a **Full view** link that opens in a new tab. The link replaces the "View only" badge, and text in the preview is no longer selectable, apart from a field that still takes typing. ([@kube](https://github.com/kube), [#9594](https://github.com/hashintel/hash/pull/9594)) + +- Export the `EditorGlobalMode` and `SimulateViewMode` types, so a host encoding Petrinaut's navigation state into its own router can spell both vocabularies and fail its build when either gains a member. ([@kube](https://github.com/kube), [#9491](https://github.com/hashintel/hash/pull/9491)) + +- Polish properties panels with readable, clickable checkbox labels, animated capacity options, a single equation link, consistent fields, and clearer section controls and dividers. ([@kube](https://github.com/kube), [#9728](https://github.com/hashintel/hash/pull/9728)) + +- Add experimental automatic arc connections with a single outgoing hover handle and curves that follow place and transition outlines. ([@kube](https://github.com/kube), [#9677](https://github.com/hashintel/hash/pull/9677)) + +- Dock the AI assistant on the right, detach it into a movable floating panel, and toggle it with Cmd/Ctrl+Shift+K across editor views while preserving the conversation and keeping the toolbar centered. + Space out the header tabs, animate its icons, align the send button inside the composer, resize the floating panel from any edge or corner with fading border highlights, and hide Clear AI while the conversation is empty. ([@kube](https://github.com/kube), [#9659](https://github.com/hashintel/hash/pull/9659)) + +- The properties panel shows a read-only net's names, descriptions, and the single-value fields of places, arcs, differential equations and component instances as text instead of as disabled inputs. They read at full contrast, and their labels no longer grey out. Toggles, checkboxes and the list editors keep their controls. ([@kube](https://github.com/kube), [#9596](https://github.com/hashintel/hash/pull/9596)) + +- Restore consistent sidebar, toolbar, and code-editor styling; stabilize toolbar resizing and panel animations; and clarify shortcuts, playback times, and experiment best-result selection. Keep place state read-only, correct scenario navigation and sticky headers, preserve browser-compatible background blur, and enable Petricon by default. ([@kube](https://github.com/kube), [#9764](https://github.com/hashintel/hash/pull/9764)) + +- Report an AI mutation that leaves the document unchanged as not applied, without claiming the requested state was already present, so hosts can distinguish an applied document change from an unchanged one, and reliably continue consecutive browser tool calls from live or rehydrated assistant messages. ([@lunelson](https://github.com/lunelson), [#9537](https://github.com/hashintel/hash/pull/9537)) + +- The Preview's playback bar has rounded corners, matching the zoom controls and the minimap that float over the same canvas. ([@kube](https://github.com/kube), [#9593](https://github.com/hashintel/hash/pull/9593)) + +- Add resizable, routed Experiment and Scenario panels with keyboard selection and fullscreen views that keep the tabs and AI assistant accessible. ([@kube](https://github.com/kube), [#9723](https://github.com/hashintel/hash/pull/9723)) + +- Reject net identifiers that collide with `Object.prototype` member names (`__proto__`, `constructor`, ...) at file import and before simulation, and store user-authored keys in prototype-free records. Place visualizer code now runs under the same sandbox hardening as scenario code. ([@kube](https://github.com/kube), [#9222](https://github.com/hashintel/hash/pull/9222)) + +- Makes the scenario form the only scenario form and removes the Ad-hoc scenarios setting. ([@kube](https://github.com/kube), [#9686](https://github.com/hashintel/hash/pull/9686)) + +- Scenario code (parameter overrides, per-place expressions, code-mode initial state) now compiles through the HIR and runs in an interpreter: no `new Function`, no sandbox. Out-of-subset code fails with positioned errors in the editor and at compile. Stricter than the old evaluator: `==` is strict, conditions and `&&`/`||` take booleans, unknown place names in code mode are errors, and array methods beyond `.map`/`.reduce`/`.concat` are unavailable. `Array.from({ length: n }, fn)` desugars to `range(n).map(fn)`. ([@kube](https://github.com/kube), [#9332](https://github.com/hashintel/hash/pull/9332)) + +- The place, transition, component-instance, and type properties panels display and allow editing of the element's optional `description`. ([@CiaranMn](https://github.com/CiaranMn), [#9484](https://github.com/hashintel/hash/pull/9484)) + +- Range sweeps rotate each axis's low-discrepancy parameter draws by a seed-derived shift, so experiments with different seeds explore different value sequences. ([@kube](https://github.com/kube), [#9435](https://github.com/hashintel/hash/pull/9435)) + +- Export `ExperimentExecutionCard` from `@hashintel/petrinaut/ui` so host-owned assistants can present simulation and optimization progress, cancellation, metrics and errors with the same UI as the built-in assistant, keeping optimization text visible throughout its glow animation. Hosts supply execution state and callbacks and retain control of execution and navigation. ([@kostandinang](https://github.com/kostandinang), [#9800](https://github.com/hashintel/hash/pull/9800)) + +- Experiment drawer cards take the wider Figma chrome, the header drops the time step from its title and keeps its stat strip on one line, turning into chips in a narrow drawer. ([@kube](https://github.com/kube), [#9621](https://github.com/hashintel/hash/pull/9621)) + +- Sidebar list labels use the full row width and truncate with an ellipsis consistently; the row menu button only takes space while hovering the row or while its menu is open. ([@kube](https://github.com/kube), [#9377](https://github.com/hashintel/hash/pull/9377)) + +- Metric charts and a study's summary in the Simulate drawers share one card chrome, with each chart's aggregation controls in a Chart options menu in the card's header. ([@kube](https://github.com/kube), [#9602](https://github.com/hashintel/hash/pull/9602)) + +- The Simulate drawers share one frame with a condensing header, a Parameters band across the body and fixed-height cards, and the Summary section folds into the header. ([@kube](https://github.com/kube), [#9607](https://github.com/hashintel/hash/pull/9607)) + +- Run experiments and optimizations from AI chat with progress, cancellation, and a link to metric distributions. Keep the conversation open while inspecting experiments. ([@kube](https://github.com/kube), [#9678](https://github.com/hashintel/hash/pull/9678)) + +- Add generic host-rendered AI composer controls and a persistent inline Voice session, protected + active conversations, keyboard fallback, and one-answer buffering while the normal chat stream + settles. Add the provider-neutral `renderVoiceMode` contract and export `PetrinautAiInputMode`, with + the selected input mode and mode-change callback available to host-rendered Voice modes. Include + stable finalized-text submission, conversation identity, stop handling, schema-validated + interactive-tool text mapping, explicit separate-message targeting for corrections, and a + queue-aware voice submission path. Present text and voice through one transcript and composer whose + trailing action switches between waveform, Send, and Stop. `renderComposerControl` remains a + supported public seam for hosts that only need their own control beside the message box, + independently of Voice mode. Surface assistant request failures as error toasts instead of + transcript entries. ([@kostandinang](https://github.com/kostandinang), [#9355](https://github.com/hashintel/hash/pull/9355)) + + Render every live Voice surface from a session snapshot the host reports through + `reportVoiceSessionState`, so hosts describe their session while Petrinaut owns its chrome. Replace + the composer with a low-profile Voice dock -- a canvas ribbon of three travelling waves, one leading + and two trailing it more faintly, fading out at both ends, opening with the microphone while + listening and moving under its own power through the same drawing path while the assistant speaks, + near flat while neither holds the turn, and naming one phase at a time -- with an announced phase and + reduced-motion behavior. Curve the raw microphone level before it drives the waves, so an ordinary + speaking level is plainly visible rather than a flicker above the line and a raised voice still has + somewhere to go. Sample the level per animation frame rather than through React, so drawing costs no + re-renders, and ease it against the frame delta so it looks the same at any refresh rate. Hold spoken + turns out of the transcript until the session ends, then reveal them together under a turn-count + divider, while typed messages and interactive tools awaiting an answer stay visible throughout. Let a + per-session Show transcription in chat action write those turns into the conversation as they land + instead. Keep every session control -- transcription, the microphone toggle, Resume, Reconnect, and + End -- in the dock, leaving the canvas toolbar untouched. Add `setMicrophoneMuted` to the Voice mode + controls and a `muted` session phase, so muting stops capture without interrupting what the assistant + is saying, unlike pausing. Keep the complete legacy Voice controls and context registration contract + required while a separate optional registration seam accepts provider-specific capabilities. Offer + an explicit playback retry when a browser blocks session audio, keeping the warning visible until + that user gesture succeeds. Surface voice recovery failures as toasts with privacy-safe diagnostic + references, and request one-time consent before the host starts the microphone. Mark persisted + spoken messages and the exact interactive-tool answer completed by Voice with an inline Voice chip + ahead of the words themselves. + + End Voice mode before submitting typed text exactly once through the shared composer, preserving the + draft if handoff fails. Pause active media before the AI panel closes and reopen the mounted session + paused. Provisional transcription and Realtime audio remain ephemeral rather than becoming + persisted chat history. + +- Keep the stock AI assistant presentation unchanged by the Brunch conversation UI: chronological messages, stock tool rows, tabs, scrolling and composer. A tool stopped mid-run now shows Cancelled instead of a spinner. ([@kostandinang](https://github.com/kostandinang), [#9883](https://github.com/hashintel/hash/pull/9883)) + +- Storybook gains a "With real optimizer" story that runs optimization studies against a local Petrinaut Optimizer service; start it with `turbo run dev --filter @hashintel/petrinaut -- --with-optimizer-service`. ([@kube](https://github.com/kube), [#9395](https://github.com/hashintel/hash/pull/9395)) + +- A sweep's range selection runs as one stochastic simulation over the ranges: every run draws its own value per ranged parameter, and the metric distribution over the region streams live. `ExperimentRequest` carries optional per-run overrides (`runs`), forwarded by the worker-pool backend and refused by the WebGPU backend. ([@kube](https://github.com/kube), [#9419](https://github.com/hashintel/hash/pull/9419)) + +- Sweep compute is reused and pipelined: simulation workers persist across batches, surface cells sample in batched chunks in quad-tree order across the CPU pool, the navigator's selection streams first while the ladder pipelines its rungs, and one GPU backend (device, shader, calibration) with a small preview tile serves a session's batches. The surface reads a cell's value from the last sampled frame, so terminating nets fill it; charts mount their axes when the drawer opens and apply data once per animation frame. ([@kube](https://github.com/kube), [#9474](https://github.com/hashintel/hash/pull/9474)) + +- The frame inspector draws a frame's distribution as a canvas histogram with value and count axes. Distribution frames carry their bins' extent and heatmaps paint each bin across the rows it covers, so mixed strides no longer stripe, and streamed updates ease in instead of snapping. The sweep surface navigates by drag as well as click and marks the navigator's position, and the summary lists every batch computing in parallel. Parameter sweeps and the optimization surface are experimental settings, off by default. ([@kube](https://github.com/kube), [#9478](https://github.com/hashintel/hash/pull/9478)) + +- Sweeps with two or more swept parameters gain a Surface section: a contour of a metric's final value over two chosen parameters, filled in live on a background lane. Clicking it moves the navigator to the nearest combination. ([@kube](https://github.com/kube), [#9369](https://github.com/hashintel/hash/pull/9369)) + +- Expand code sections to fill the Properties Panel with smooth transitions, a parent breadcrumb, keyboard focus restoration, and browser history navigation. Make Canvas and Definitions available as Edit views with browser history navigation. Preserve the latest code when switching between Edit views. ([@kube](https://github.com/kube), [#9664](https://github.com/hashintel/hash/pull/9664)) + +- Allow host-owned Voice sessions to report a neutral connected state and omit unsupported controls, keeping viewport controls above the collapsed dock. Contain Voice failures and explicit recovery warnings behind a warning icon with hover previews and a scrollable details popover instead of global notifications, while temporary session notices remain in the dock status. ([@kostandinang](https://github.com/kostandinang), [#9671](https://github.com/hashintel/hash/pull/9671)) + + Keep voice permission content above the compact dock without moving the controls, and show Voice setup until a connection actually starts. Keep the error icon in the same dock position when expanding or collapsing a Voice session. + +- A closed simulation timeline stops reading frames and drawing until it is reopened. ([@kube](https://github.com/kube), [#9656](https://github.com/hashintel/hash/pull/9656)) + +- Hosts can mount `UserSettingsProvider` from `@hashintel/petrinaut/react` above `Petrinaut` to read and change the persisted user settings from their own components; the editor reuses that provider instead of creating its own. ([@kube](https://github.com/kube), [#9634](https://github.com/hashintel/hash/pull/9634)) + +- Add an optional assistant message display projection so hosts can show original voice transcripts and spoken captions without changing transport input, tool execution, or canonical conversation history. Distinguish failed brief preparation from successful preparation and show missing excerpts as display-only placeholders. ([@kostandinang](https://github.com/kostandinang), [#9836](https://github.com/hashintel/hash/pull/9836)) + +- Let hosts withdraw a retained voice input through an `AbortSignal`, keep a late durable Stop result from cancelling a newer turn, replace all conversation-owned assistant state when the conversation identity changes, hydrate host-owned history only once it carries every locally streamed reply, keep the composer status busy across the automatic follow-up to a client-tool step, and let a Stop pressed during that step withhold the follow-up. ([@lunelson](https://github.com/lunelson), [#9528](https://github.com/hashintel/hash/pull/9528)) + +- Keep rejected overlapping Voice tool answers from restoring failed sibling provenance or overwriting newer message metadata. ([@kostandinang](https://github.com/kostandinang), [#9615](https://github.com/hashintel/hash/pull/9615)) + +- Add an experimental WebGPU compute backend for experiments, chosen per experiment behind a user setting. It runs the net's lowered HIR on the device, declines nets it cannot run so they fall back to the CPU, and agrees with the CPU in distribution rather than seed for seed. A Compilation panel, also behind a setting, shows what the compiler made of each condition, kernel and equation. ([@kube](https://github.com/kube), [#9179](https://github.com/hashintel/hash/pull/9179)) + +- Restore design-system component styles in Petrinaut builds on Windows. ([@aacarcrash](https://github.com/aacarcrash), [#9808](https://github.com/hashintel/hash/pull/9808)) + +- Add the worksheet keyboard-flow primitives (`FocusStack`, `FocusRoot`, `useFocusGrid`, `useFocusStops`): reusable arrow-key routing, per-group focus memory, and roving tab stops for panels composed of grids and controls. ([@kube](https://github.com/kube), [#9411](https://github.com/hashintel/hash/pull/9411)) + +- Nets and optimization manifests can be imported and exported in YAML and JSON. ([@kube](https://github.com/kube), [#9379](https://github.com/hashintel/hash/pull/9379)) + +- Updated dependencies: + - @hashintel/petrinaut-core@0.0.5 + - @hashintel/ds-components@0.4.0 + - @hashintel/refractive@0.0.5 + ## Unreleased ### Patch Changes diff --git a/libs/@hashintel/petrinaut/package.json b/libs/@hashintel/petrinaut/package.json index 476c9edb8c6..d6b38be6b84 100644 --- a/libs/@hashintel/petrinaut/package.json +++ b/libs/@hashintel/petrinaut/package.json @@ -1,6 +1,6 @@ { "name": "@hashintel/petrinaut", - "version": "0.0.19", + "version": "0.0.20", "description": "A visual editor for Petri nets", "license": "(MIT OR Apache-2.0)", "repository": { diff --git a/libs/@hashintel/refractive/CHANGELOG.md b/libs/@hashintel/refractive/CHANGELOG.md index c085080ed2f..d50dadb58b0 100644 --- a/libs/@hashintel/refractive/CHANGELOG.md +++ b/libs/@hashintel/refractive/CHANGELOG.md @@ -1,5 +1,11 @@ # @hashintel/refractive +## 0.0.5 + +### Patch Changes + +- Apply native backdrop blur across browsers, adding SVG glass distortion only on Chromium and skipping filter generation in other browsers. ([@kube](https://github.com/kube), [#9764](https://github.com/hashintel/hash/pull/9764)) + ## 0.0.4 ### Patch Changes diff --git a/libs/@hashintel/refractive/package.json b/libs/@hashintel/refractive/package.json index bb53740a7c7..1d8a46bd98a 100644 --- a/libs/@hashintel/refractive/package.json +++ b/libs/@hashintel/refractive/package.json @@ -1,6 +1,6 @@ { "name": "@hashintel/refractive", - "version": "0.0.4", + "version": "0.0.5", "description": "HASH Refractive Filter Components", "license": "(MIT OR Apache-2.0)", "repository": {