@ashlr/hub 3.5.0 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +160 -0
- package/README.md +3 -0
- package/dist/build-identity.json +2 -2
- package/dist/cli/activation.d.ts +41 -0
- package/dist/cli/activation.js +485 -0
- package/dist/cli/activation.js.map +1 -0
- package/dist/core/daemon/cutoff-checkpoint-scheduler.js +7 -0
- package/dist/core/daemon/cutoff-checkpoint-scheduler.js.map +1 -1
- package/dist/core/daemon/loop.d.ts +19 -0
- package/dist/core/daemon/loop.js +235 -5
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/daemon/overnight-status.d.ts +152 -0
- package/dist/core/daemon/overnight-status.js +275 -0
- package/dist/core/daemon/overnight-status.js.map +1 -0
- package/dist/core/daemon/post-merge-halt.d.ts +212 -0
- package/dist/core/daemon/post-merge-halt.js +503 -0
- package/dist/core/daemon/post-merge-halt.js.map +1 -0
- package/dist/core/daemon/run-window.d.ts +218 -0
- package/dist/core/daemon/run-window.js +420 -0
- package/dist/core/daemon/run-window.js.map +1 -0
- package/dist/core/fleet/external-skill-audit.js +1 -1
- package/dist/core/fleet/external-skill-audit.js.map +1 -1
- package/dist/core/fleet/generated-repair-resolution.d.ts +36 -0
- package/dist/core/fleet/generated-repair-resolution.js +245 -0
- package/dist/core/fleet/generated-repair-resolution.js.map +1 -0
- package/dist/core/local-runtime/llama/config.d.ts +28 -6
- package/dist/core/local-runtime/llama/config.js +28 -6
- package/dist/core/local-runtime/llama/config.js.map +1 -1
- package/dist/core/local-runtime/llama/port.d.ts +17 -0
- package/dist/core/local-runtime/llama/port.js +47 -0
- package/dist/core/local-runtime/llama/port.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-host.d.ts +54 -0
- package/dist/core/local-runtime/llama/proxy-host.js +159 -0
- package/dist/core/local-runtime/llama/proxy-host.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-process.d.ts +148 -0
- package/dist/core/local-runtime/llama/proxy-process.js +250 -0
- package/dist/core/local-runtime/llama/proxy-process.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-record.d.ts +40 -0
- package/dist/core/local-runtime/llama/proxy-record.js +133 -0
- package/dist/core/local-runtime/llama/proxy-record.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +118 -0
- package/dist/core/local-runtime/llama/proxy-supervisor.js +511 -0
- package/dist/core/local-runtime/llama/proxy-supervisor.js.map +1 -0
- package/dist/core/web/public/next/assets/App-Cgi6j1Gk.css +1 -0
- package/dist/core/web/public/next/assets/App-vtaHB9mp.js +7 -0
- package/dist/core/web/public/next/assets/App-vtaHB9mp.js.map +1 -0
- package/dist/core/web/public/next/assets/ApprovalsSection-B-bFJ0I9.js +2 -0
- package/dist/core/web/public/next/assets/ApprovalsSection-B-bFJ0I9.js.map +1 -0
- package/dist/core/web/public/next/assets/ApprovalsSection-Su-NUTis.css +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-CHjxJt2z.css +1 -0
- package/dist/core/web/public/next/assets/AutonomySection-DoqmsCjw.js +2 -0
- package/dist/core/web/public/next/assets/AutonomySection-DoqmsCjw.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-BfnLe5dT.css +1 -0
- package/dist/core/web/public/next/assets/ChatSection-vNPIJffd.js +80 -0
- package/dist/core/web/public/next/assets/ChatSection-vNPIJffd.js.map +1 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-Dd2APQhB.js +2 -0
- package/dist/core/web/public/next/assets/ConfirmDialog-Dd2APQhB.js.map +1 -0
- package/dist/core/web/public/next/assets/{ConfirmDialog-cYuivhCX.css → ConfirmDialog-Dx15x0Ho.css} +1 -1
- package/dist/core/web/public/next/assets/Dialog-CPM9JxBc.js +2 -0
- package/dist/core/web/public/next/assets/Dialog-CPM9JxBc.js.map +1 -0
- package/dist/core/web/public/next/assets/Dialog-tQ8kFulD.css +1 -0
- package/dist/core/web/public/next/assets/DiffViewer-B84qVef9.js +7 -0
- package/dist/core/web/public/next/assets/DiffViewer-B84qVef9.js.map +1 -0
- package/dist/core/web/public/next/assets/DiffViewer-C8HHTnVE.css +1 -0
- package/dist/core/web/public/next/assets/McpSection-CEUpV_5X.js +2 -0
- package/dist/core/web/public/next/assets/McpSection-CEUpV_5X.js.map +1 -0
- package/dist/core/web/public/next/assets/McpSection-D88QlDpG.css +1 -0
- package/dist/core/web/public/next/assets/Meter--h3MmZS-.js +2 -0
- package/dist/core/web/public/next/assets/Meter--h3MmZS-.js.map +1 -0
- package/dist/core/web/public/next/assets/Meter-CLcr-4wS.css +1 -0
- package/dist/core/web/public/next/assets/{MutationTokenDialog-jWLLCxWn.css → MutationTokenDialog-CrfJ0PdD.css} +1 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-DA8t97XT.js +2 -0
- package/dist/core/web/public/next/assets/MutationTokenDialog-DA8t97XT.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-Bq7Vyud0.js +7 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-Bq7Vyud0.js.map +1 -0
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CM_8pJs6.css +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-Badio_uO.js +2 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-Badio_uO.js.map +1 -0
- package/dist/core/web/public/next/assets/RouteErrorBoundary-ekyMXAK8.css +1 -0
- package/dist/core/web/public/next/assets/SettingsSection-BII7TTSD.css +1 -0
- package/dist/core/web/public/next/assets/SettingsSection-BwrpQlpP.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-BwrpQlpP.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-Dh7A-hLD.css +1 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-_FSohAdN.js +2 -0
- package/dist/core/web/public/next/assets/UniverseConsoleApp-_FSohAdN.js.map +1 -0
- package/dist/core/web/public/next/assets/UniverseView-Bqa8DH57.css +1 -0
- package/dist/core/web/public/next/assets/UniverseView-DqcXbed4.js +9 -0
- package/dist/core/web/public/next/assets/UniverseView-DqcXbed4.js.map +1 -0
- package/dist/core/web/public/next/assets/UsageSection-Bq6Daaby.js +2 -0
- package/dist/core/web/public/next/assets/UsageSection-Bq6Daaby.js.map +1 -0
- package/dist/core/web/public/next/assets/UsageSection-DwgNOYvi.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CMkCizvL.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CsIQv9id.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-CsIQv9id.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-CTZJ-JrH.js +2 -0
- package/dist/core/web/public/next/assets/charts-CTZJ-JrH.js.map +1 -0
- package/dist/core/web/public/next/assets/charts-CsrtT4rk.css +1 -0
- package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js +2 -0
- package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js.map +1 -0
- package/dist/core/web/public/next/assets/format-BNYWGJat.js +2 -0
- package/dist/core/web/public/next/assets/format-BNYWGJat.js.map +1 -0
- package/dist/core/web/public/next/assets/global-D6bTxIRn.js +2 -0
- package/dist/core/web/public/next/assets/global-D6bTxIRn.js.map +1 -0
- package/dist/core/web/public/next/assets/global-z-JfD3ow.css +1 -0
- package/dist/core/web/public/next/assets/icons-D9vlf85u.js +2 -0
- package/dist/core/web/public/next/assets/icons-D9vlf85u.js.map +1 -0
- package/dist/core/web/public/next/assets/index-CZamKRUg.js +11 -0
- package/dist/core/web/public/next/assets/index-CZamKRUg.js.map +1 -0
- package/dist/core/web/public/next/assets/queries-B8eBnFox.js +2 -0
- package/dist/core/web/public/next/assets/queries-B8eBnFox.js.map +1 -0
- package/dist/core/web/public/next/assets/use-guarded-action-bzrVVAYq.js +2 -0
- package/dist/core/web/public/next/assets/use-guarded-action-bzrVVAYq.js.map +1 -0
- package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js +2 -0
- package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js.map +1 -0
- package/dist/core/web/public/next/assets/workspace-model-v0a1gl-C.js +2 -0
- package/dist/core/web/public/next/assets/workspace-model-v0a1gl-C.js.map +1 -0
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/node_modules/marked/README.md +8 -0
- package/node_modules/marked/bin/main.js +12 -11
- package/node_modules/marked/lib/marked.d.ts +88 -25
- package/node_modules/marked/lib/marked.esm.js +50 -44
- package/node_modules/marked/lib/marked.esm.js.map +3 -3
- package/node_modules/marked/lib/marked.umd.js +50 -44
- package/node_modules/marked/lib/marked.umd.js.map +3 -3
- package/node_modules/marked/man/marked.1 +1 -1
- package/node_modules/marked/package.json +21 -21
- package/package.json +13 -8
- package/dist/core/web/public/next/assets/App-BCKqSppK.css +0 -1
- package/dist/core/web/public/next/assets/App-CsbPYQqy.js +0 -16
- package/dist/core/web/public/next/assets/App-CsbPYQqy.js.map +0 -1
- package/dist/core/web/public/next/assets/ApprovalsSection-CBZquyLK.js +0 -2
- package/dist/core/web/public/next/assets/ApprovalsSection-CBZquyLK.js.map +0 -1
- package/dist/core/web/public/next/assets/ApprovalsSection-CRP59wSb.css +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-CQVpEdCE.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-CQVpEdCE.js.map +0 -1
- package/dist/core/web/public/next/assets/AutonomySection-DTN6m6QE.css +0 -1
- package/dist/core/web/public/next/assets/ChatSection-DiRvNX3Q.css +0 -1
- package/dist/core/web/public/next/assets/ChatSection-DmE9K0Tg.js +0 -77
- package/dist/core/web/public/next/assets/ChatSection-DmE9K0Tg.js.map +0 -1
- package/dist/core/web/public/next/assets/ConfirmDialog-deO0C0iY.js +0 -2
- package/dist/core/web/public/next/assets/ConfirmDialog-deO0C0iY.js.map +0 -1
- package/dist/core/web/public/next/assets/Dialog-CNd7q89m.js +0 -2
- package/dist/core/web/public/next/assets/Dialog-CNd7q89m.js.map +0 -1
- package/dist/core/web/public/next/assets/Dialog-DxN7RgB5.css +0 -1
- package/dist/core/web/public/next/assets/DiffViewer-DTO0KRuG.js +0 -7
- package/dist/core/web/public/next/assets/DiffViewer-DTO0KRuG.js.map +0 -1
- package/dist/core/web/public/next/assets/DiffViewer-hN7X6wGT.css +0 -1
- package/dist/core/web/public/next/assets/Epistemic-53PikaUI.js +0 -2
- package/dist/core/web/public/next/assets/Epistemic-53PikaUI.js.map +0 -1
- package/dist/core/web/public/next/assets/Epistemic-DiyMyeaN.css +0 -1
- package/dist/core/web/public/next/assets/Meter-CGBsbXUX.css +0 -1
- package/dist/core/web/public/next/assets/Meter-DRWZQgr1.js +0 -2
- package/dist/core/web/public/next/assets/Meter-DRWZQgr1.js.map +0 -1
- package/dist/core/web/public/next/assets/MutationTokenDialog-DYF8n_RD.js +0 -2
- package/dist/core/web/public/next/assets/MutationTokenDialog-DYF8n_RD.js.map +0 -1
- package/dist/core/web/public/next/assets/RefreshIndicator-DXJQXKyA.js +0 -2
- package/dist/core/web/public/next/assets/RefreshIndicator-DXJQXKyA.js.map +0 -1
- package/dist/core/web/public/next/assets/RefreshIndicator-O7jUBOmX.css +0 -1
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-DLl4DbGG.css +0 -1
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-hDSEFdLU.js +0 -7
- package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-hDSEFdLU.js.map +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-BIpdnxp-.css +0 -1
- package/dist/core/web/public/next/assets/RouteErrorBoundary-CZd7ln8v.js +0 -2
- package/dist/core/web/public/next/assets/RouteErrorBoundary-CZd7ln8v.js.map +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-C9Qs9JWW.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-C9Qs9JWW.js.map +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-DGJMdUh2.css +0 -1
- package/dist/core/web/public/next/assets/Skeleton-D2JaTXyv.css +0 -1
- package/dist/core/web/public/next/assets/Skeleton-YkcOpgFb.js +0 -2
- package/dist/core/web/public/next/assets/Skeleton-YkcOpgFb.js.map +0 -1
- package/dist/core/web/public/next/assets/StatusBadge-DJw0LSPg.js +0 -2
- package/dist/core/web/public/next/assets/StatusBadge-DJw0LSPg.js.map +0 -1
- package/dist/core/web/public/next/assets/StatusBadge-TpDqZf6K.css +0 -1
- package/dist/core/web/public/next/assets/TableView-Bj-w1O6o.js +0 -2
- package/dist/core/web/public/next/assets/TableView-Bj-w1O6o.js.map +0 -1
- package/dist/core/web/public/next/assets/TableView-R6Yeztp1.css +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-Bs2fxaen.js +0 -2
- package/dist/core/web/public/next/assets/UniverseConsoleApp-Bs2fxaen.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseConsoleApp-CiZZxRPV.css +0 -1
- package/dist/core/web/public/next/assets/UniverseView-B6b2hw-8.js +0 -9
- package/dist/core/web/public/next/assets/UniverseView-B6b2hw-8.js.map +0 -1
- package/dist/core/web/public/next/assets/UniverseView-gBxl6yum.css +0 -1
- package/dist/core/web/public/next/assets/UsageSection-C__ziNkV.js +0 -2
- package/dist/core/web/public/next/assets/UsageSection-C__ziNkV.js.map +0 -1
- package/dist/core/web/public/next/assets/UsageSection-UUYDidOg.css +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cu5aG6J6.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-Cu5aG6J6.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-mOAXvWa6.css +0 -1
- package/dist/core/web/public/next/assets/fleet-model-DXCfVtNW.js +0 -2
- package/dist/core/web/public/next/assets/fleet-model-DXCfVtNW.js.map +0 -1
- package/dist/core/web/public/next/assets/format-fggwu_Rs.js +0 -2
- package/dist/core/web/public/next/assets/format-fggwu_Rs.js.map +0 -1
- package/dist/core/web/public/next/assets/global-BHjd6fVZ.js +0 -2
- package/dist/core/web/public/next/assets/global-BHjd6fVZ.js.map +0 -1
- package/dist/core/web/public/next/assets/global-BeRYd1Bu.css +0 -1
- package/dist/core/web/public/next/assets/index-CJ-e8YA9.js +0 -2
- package/dist/core/web/public/next/assets/index-CJ-e8YA9.js.map +0 -1
- package/dist/core/web/public/next/assets/index-CpgkRaTi.js +0 -51
- package/dist/core/web/public/next/assets/index-CpgkRaTi.js.map +0 -1
- package/dist/core/web/public/next/assets/queries-856qUN3Y.js +0 -2
- package/dist/core/web/public/next/assets/queries-856qUN3Y.js.map +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-Bqa2v0a-.css +0 -1
- package/dist/core/web/public/next/assets/use-guarded-action-DwaESKVy.js +0 -2
- package/dist/core/web/public/next/assets/use-guarded-action-DwaESKVy.js.map +0 -1
- package/dist/core/web/public/next/assets/verse-model-Dllo8rRt.js +0 -2
- package/dist/core/web/public/next/assets/verse-model-Dllo8rRt.js.map +0 -1
- package/dist/core/web/public/next/assets/workspace-model-JgmWDKt4.js +0 -2
- package/dist/core/web/public/next/assets/workspace-model-JgmWDKt4.js.map +0 -1
- /package/node_modules/marked/{LICENSE.md → LICENSE} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -339,6 +339,166 @@ superseded, not a setup procedure. Use [runtime activation authority](docs/RUNTI
|
|
|
339
339
|
and the [current architecture boundary](docs/ARCHITECTURE.md#legacy-fleet-activation-boundary).
|
|
340
340
|
Neither the historical record nor a successful test activates a resident fleet.
|
|
341
341
|
|
|
342
|
+
## [3.7.0] — 2026-09-23 UTC — The console you can actually navigate, and a fleet that can be bounded
|
|
343
|
+
|
|
344
|
+
### Verse
|
|
345
|
+
|
|
346
|
+
- **The rail expands** (⌘\), with labels and ⌘-digits. Hover used to show the
|
|
347
|
+
*native browser tooltip* — unstyled, mouse-only, clipping against the sidebar.
|
|
348
|
+
There is now a real portalled Tooltip primitive, and adopting it fixed a live
|
|
349
|
+
accessibility defect: `aria-describedby` sat on a wrapper rather than the
|
|
350
|
+
focusable child, so nothing was ever announced. A **disabled** trigger emits no
|
|
351
|
+
pointer events, so its tooltip could never open — precisely the tooltip that
|
|
352
|
+
matters, since it explains why the control is disabled.
|
|
353
|
+
- **The header earns its height.** It held one toggle floating at the right edge
|
|
354
|
+
with nothing anchoring the left, because the sidebar toggle only rendered while
|
|
355
|
+
the sidebar was collapsed.
|
|
356
|
+
- **Display size** — Default / Large / Extra large, scaling type *and* spacing as
|
|
357
|
+
a multiplier rather than a second table of literals, because density and scale
|
|
358
|
+
have identical CSS specificity and two literal tables would let file order
|
|
359
|
+
decide what "Compact + Large" means. Rail width and strip height are pinned so
|
|
360
|
+
the traffic-light clearance cannot regress.
|
|
361
|
+
- **Pane resizing** that survives a real drag: widths are a desired/effective
|
|
362
|
+
pair, so a wide sidebar narrows on a small window and springs back. It also
|
|
363
|
+
turned out the resize handle was eating 4px of the macOS window drag strip.
|
|
364
|
+
- **Saved projects and a native folder picker**, and the MCP section is mounted.
|
|
365
|
+
|
|
366
|
+
### Autonomy
|
|
367
|
+
|
|
368
|
+
- **A bounded run window** — until paused, at a wall-clock time, or after N
|
|
369
|
+
iterations. The window is an absolute instant, never a countdown, so a host
|
|
370
|
+
suspended at 01:00 and opened at 09:00 finds its 07:00 window expired.
|
|
371
|
+
- **The post-merge halt.** The pre-merge gate was already strict; *nothing re-ran
|
|
372
|
+
the suite after a merge*, so a regression merged at 01:00 compounded all night.
|
|
373
|
+
A dirty working tree halts too, as **unprovable** rather than *regressed* — a
|
|
374
|
+
run that measured uncommitted edits has proven nothing. Ignored files are not
|
|
375
|
+
dirt, or it would halt every night.
|
|
376
|
+
|
|
377
|
+
### Corrections
|
|
378
|
+
|
|
379
|
+
- A test guard was red, and a red guard protects nothing. The Anthropic shim is a
|
|
380
|
+
request normaliser, not a transport — its one `/chat/completions` is in a doc
|
|
381
|
+
comment recording a measurement.
|
|
382
|
+
- `VerseApp.test.tsx` had been passing by luck of file ordering; the first test to
|
|
383
|
+
mount the shell paid ChatSection's cold transform cost inside its own 1000ms
|
|
384
|
+
assertion window.
|
|
385
|
+
|
|
386
|
+
## [3.6.0] — 2026-09-23 UTC — Open any project, from a real picker
|
|
387
|
+
|
|
388
|
+
Verse could already drive any folder on the machine — the API accepted an
|
|
389
|
+
unenrolled path and both Grok and local seats ran in it. What it could not do was
|
|
390
|
+
let you *choose* one. The only way in was typing an absolute path into a text
|
|
391
|
+
box, and a folder you typed vanished from the list until a chat existed on it.
|
|
392
|
+
This release is the door.
|
|
393
|
+
|
|
394
|
+
### Any folder, from a native chooser
|
|
395
|
+
|
|
396
|
+
- **A real macOS directory picker.** "Choose folder…" opens `NSOpenPanel`
|
|
397
|
+
through the Tauri dialog plugin. Detection is a call-time feature probe of the
|
|
398
|
+
injected shell global, not a build flag, because the same bundle is served
|
|
399
|
+
inside the desktop app and as a plain web UI — in a browser the button is
|
|
400
|
+
absent and the absolute-path input remains, which is never removed.
|
|
401
|
+
- **Saved projects the console can actually create.** `createVerseWorkspace`,
|
|
402
|
+
`updateVerseWorkspace`, `deleteVerseWorkspace`, `setVerseRootPriority` and
|
|
403
|
+
`setVerseFocusSection` all existed with **zero callers**, so
|
|
404
|
+
`~/.ashlr/verse/workspaces.json` could only be written by hand. There is now a
|
|
405
|
+
Projects section in the sidebar: save, rename, add and remove folders, reorder
|
|
406
|
+
(the first folder is the primary — its directory is the chat's working
|
|
407
|
+
directory), and forget behind a two-step confirm that states existing chats
|
|
408
|
+
are untouched.
|
|
409
|
+
- **Interactive and autonomous stay separate registries.** Saving a folder to
|
|
410
|
+
work in never enrols it for unattended work. A saved project can be *offered*
|
|
411
|
+
to the autonomous lane, but only by ticking that box.
|
|
412
|
+
- **The Grok caveat travels with a saved project.** Grok takes no extra roots,
|
|
413
|
+
so a multi-root project picked with a Grok seat now says its extra folders are
|
|
414
|
+
unreachable. That case previously had no warning at all.
|
|
415
|
+
|
|
416
|
+
### The MCP section exists again
|
|
417
|
+
|
|
418
|
+
`McpSection.tsx` was complete — query layer, tested contract, complete server
|
|
419
|
+
side — and unreachable: absent from `VERSE_SECTIONS`, no `'mcp'` member on
|
|
420
|
+
`VerseSectionId`, and outside the glob that mounts sections. It is now ⌘6.
|
|
421
|
+
⌘1–⌘5 keep their meanings.
|
|
422
|
+
|
|
423
|
+
It also discloses a footgun nothing named before: Codex and Grok inherit MCP
|
|
424
|
+
from their native profile config, so a turn on an unenrolled folder can reach an
|
|
425
|
+
`ashlr__*` write tool and be refused by the enrollment gate — the turn fails on
|
|
426
|
+
policy, not on the model. Claude and local seats are unaffected, because the
|
|
427
|
+
adapter passes an empty `--mcp-config` under `--strict-mcp-config`.
|
|
428
|
+
|
|
429
|
+
### One capability was widened, deliberately
|
|
430
|
+
|
|
431
|
+
`dialog:allow-open` is granted to the remote Verse origin in
|
|
432
|
+
`capabilities/verse-remote.json`, whose note said not to widen the list. It is
|
|
433
|
+
the narrowest dialog permission: it shows a chooser the user must confirm and
|
|
434
|
+
returns a path, reads no file contents, and no `fs:*` permission is granted
|
|
435
|
+
anywhere in the app. `allow-save`, `allow-message`, `allow-ask` and
|
|
436
|
+
`allow-confirm` stay ungranted so page code cannot forge a native prompt.
|
|
437
|
+
|
|
438
|
+
It had to go in that file rather than `main.json`: the Verse window loads a
|
|
439
|
+
remote origin, and a Tauri 2 capability without a `remote` block never reaches
|
|
440
|
+
one — the grant would have looked correct in review and failed silently at
|
|
441
|
+
runtime.
|
|
442
|
+
|
|
443
|
+
### Verified in the built app, not only in tests
|
|
444
|
+
|
|
445
|
+
The picker was driven end to end in a real build: the button renders inside the
|
|
446
|
+
shell, `NSOpenPanel` opens, the chosen path lands in the field, "Start chat"
|
|
447
|
+
enables, "Save as a project" persists and appears in the sidebar, and forget
|
|
448
|
+
removes it. Separately, `POST /api/verse/workspaces` was confirmed against a
|
|
449
|
+
live server to create a record on disk and list it back.
|
|
450
|
+
|
|
451
|
+
## [3.5.1] — 2026-09-23 UTC — The dependency backlog, landed rather than deferred
|
|
452
|
+
|
|
453
|
+
Four dependency PRs had been sitting open. None was a version bump; each needed
|
|
454
|
+
real work, and that is why they had not landed.
|
|
455
|
+
|
|
456
|
+
- **`marked` 17 → 18, and the audit policy digest moves with it.** marked 17
|
|
457
|
+
read the two tildes in a line like ``~24 bits of `Math.random` …
|
|
458
|
+
`~/.ashlr/swarms/<id>.json` `` as GFM strikethrough, which swallowed the
|
|
459
|
+
backticks between them and left `<id>` exposed as an inline HTML token. The
|
|
460
|
+
external-skill audit's raw-HTML gate then fired and the whole document lost
|
|
461
|
+
section credit. One file in 120 of this repository's own docs flips, and it is
|
|
462
|
+
a false positive being corrected — a code span outranks an emphasis run that
|
|
463
|
+
would cross it. The parser is part of the signed policy, so the digest moves
|
|
464
|
+
with it, and a test now pins the code-span behaviour directly rather than
|
|
465
|
+
leaving it implied by a version string.
|
|
466
|
+
- **Four dev dependencies upgraded, three held with reasons.** `vite` 6 → 8,
|
|
467
|
+
`@types/node` 22 → 26, `@vitejs/plugin-react` 4 → 6,
|
|
468
|
+
`@testing-library/jest-dom` 6 → 7. TypeScript 7 is blocked upstream —
|
|
469
|
+
`typescript-eslint` peers on `>=4.8.4 <6.1.0`, so npm cannot resolve the tree
|
|
470
|
+
at all. ESLint 10 adds 173 errors from three newly-recommended rules, and
|
|
471
|
+
jsdom 30 changes accessible role/name computation. Each hold is recorded in
|
|
472
|
+
`dependabot.yml` with the condition that lifts it, so the group stops
|
|
473
|
+
regenerating weekly in a state that cannot install or cannot pass.
|
|
474
|
+
- **Raycast: `@raycast/api` 2, and the flat-config migration it requires.**
|
|
475
|
+
`@raycast/eslint-config` 2.x exports a flat config array; passing that through
|
|
476
|
+
the existing `FlatCompat` wrapper throws *Converting circular structure to
|
|
477
|
+
JSON*. `ray build` compiles all seven entry points again.
|
|
478
|
+
|
|
479
|
+
### Reasoning effort, settled on multi-step work
|
|
480
|
+
|
|
481
|
+
`config.ts` had asked for this battery explicitly: the earlier numbers came from
|
|
482
|
+
single tool calls, which say nothing about multi-step debugging. 5 agentic tasks
|
|
483
|
+
× 3 efforts × 3 trials, plus a long-horizon arm:
|
|
484
|
+
|
|
485
|
+
| arm | pass | mean decode | total wall |
|
|
486
|
+
|---|---|---|---|
|
|
487
|
+
| xhigh (ships today) | 15/15 | 1582 | 4208s |
|
|
488
|
+
| **medium** | 15/15 | **766 — 2.07× fewer** | **2545s** |
|
|
489
|
+
| low | 15/15 | 1061 — 1.49× fewer | 2657s |
|
|
490
|
+
|
|
491
|
+
The ladder is not monotonic: `medium` beats `low` on decode *and* wall-clock, on
|
|
492
|
+
5 of 6 tasks, because `low` under-thinks per turn and pays it back in extra
|
|
493
|
+
tool-calling round trips. The shipped default does not move — every arm went
|
|
494
|
+
15/15, so quality is *bounded*, not measured, and a sub-20-point regression
|
|
495
|
+
would have been invisible. Operators wanting the 2× set
|
|
496
|
+
`models.llamaServer.agentDefaults.reasoningEffort` to `"medium"`.
|
|
497
|
+
|
|
498
|
+
### Repository
|
|
499
|
+
|
|
500
|
+
62 open pull requests → 0.
|
|
501
|
+
|
|
342
502
|
## [3.5.0] — 2026-09-22 UTC — Ashlr Verse: the operator console, and a local model that keeps working
|
|
343
503
|
|
|
344
504
|
Verse becomes the surface you drive the fleet from, and the local lane becomes
|
package/README.md
CHANGED
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
**[verse.ashlr.ai](https://verse.ashlr.ai)** — Ashlr Verse, the operator console: every account you own
|
|
8
8
|
behind one surface, plus a local model that keeps working after the quota runs out.
|
|
9
9
|
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
10
13
|
[](https://www.npmjs.com/package/@ashlr/hub)
|
|
11
14
|
[](https://www.npmjs.com/package/@ashlr/hub)
|
|
12
15
|
[](./LICENSE)
|
package/dist/build-identity.json
CHANGED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ashlr activation` — operator authority for the autonomous fleet (M470).
|
|
3
|
+
*
|
|
4
|
+
* The daemon, goal/simple conductors, and resident-service install are all
|
|
5
|
+
* held shut by hard-coded denials until an operator EXPLICITLY grants
|
|
6
|
+
* authority here. Doing nothing keeps today's exact behavior: everything
|
|
7
|
+
* denied. This command group is how an operator opts in, on their own
|
|
8
|
+
* terms, with a real signed/expiring/revocable authorization trail.
|
|
9
|
+
*
|
|
10
|
+
* Subcommands:
|
|
11
|
+
* activation init [--label <text>] [--force] [--yes] [--json]
|
|
12
|
+
* Generate an Ed25519 keypair on this machine (private key never
|
|
13
|
+
* leaves it) and register the public half as a trust root. Grants
|
|
14
|
+
* NOTHING by itself — run `activation grant` next.
|
|
15
|
+
* activation status [--json]
|
|
16
|
+
* Trust roots, pending one-shot permit, standing grants, and what is
|
|
17
|
+
* currently authorized, right now, and why.
|
|
18
|
+
* activation grant <scope...> [--ttl <duration>] [--yes] [--json]
|
|
19
|
+
* Mint a scoped, signed, expiring authorization. `once`/`resident`
|
|
20
|
+
* mint a single-use permit for `ashlr daemon start`, good for a fixed
|
|
21
|
+
* 2-minute window; any of `residentStanding`/`conductor`/`automerge`/
|
|
22
|
+
* `repair`/`deploy`/`install`/`proposalOnly` mint a standing grant
|
|
23
|
+
* checked on every use until it expires (30d cap) or is revoked.
|
|
24
|
+
* `residentStanding` is what lets a resident daemon started by
|
|
25
|
+
* launchd/systemd/Task Scheduler after a reboot authorize itself with
|
|
26
|
+
* no operator present — grant it once, ahead of time, alongside
|
|
27
|
+
* whichever of `automerge`/`repair`/`deploy` the resident loop should
|
|
28
|
+
* also carry for its whole run.
|
|
29
|
+
* activation revoke --root <keyId> | --grant <grantId> [--yes] [--json]
|
|
30
|
+
* Immediately invalidate a trust root or a standing grant.
|
|
31
|
+
*
|
|
32
|
+
* Every subcommand supports --help. Mutating subcommands (init/grant/revoke)
|
|
33
|
+
* refuse to run unattended in a non-TTY session without --yes — the same
|
|
34
|
+
* confirm-gate convention as `ashlr inbox approve`.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* `ashlr activation [init|status|grant|revoke] [flags]`
|
|
38
|
+
*
|
|
39
|
+
* Returns a process exit code (0 = success, non-zero = error/usage).
|
|
40
|
+
*/
|
|
41
|
+
export declare function cmdActivation(args: string[]): Promise<number>;
|