@north-light/crouter 0.3.312 → 0.3.313
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/dist/api/client.d.ts +27 -30
- package/dist/api/client.js +80 -67
- package/dist/api/dto/broker-ops.d.ts +10 -20
- package/dist/api/dto/canvas.d.ts +1 -10
- package/dist/api/dto/health.d.ts +113 -0
- package/dist/api/dto/human-requests.d.ts +14 -3
- package/dist/api/dto/human.d.ts +2 -48
- package/dist/api/dto/human.js +3 -2
- package/dist/api/dto/inbox.d.ts +14 -0
- package/dist/api/dto/mail.d.ts +43 -0
- package/dist/api/dto/nodes.d.ts +11 -8
- package/dist/api/dto/recovery.d.ts +96 -0
- package/dist/api/dto/reviews.d.ts +2 -2
- package/dist/api/routes.d.ts +9 -6
- package/dist/api/routes.js +11 -11
- package/dist/build-root.d.ts +4 -0
- package/dist/build-root.js +11 -1
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +35 -47
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +1 -1
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +12 -5
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +12 -5
- package/dist/cli.js +10 -1
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +11 -0
- package/dist/clients/__tests__/helpers/human-daemon.js +60 -0
- package/dist/clients/attach/chrome/canvas-panels.js +1 -1
- package/dist/clients/attach/chrome/inbox-strip.d.ts +3 -3
- package/dist/clients/attach/chrome/inbox-strip.js +17 -9
- package/dist/clients/attach/chrome/ticket-panel.d.ts +2 -2
- package/dist/clients/attach/chrome/ticket-panel.js +77 -46
- package/dist/clients/attach/overlays/graph.js +6 -9
- package/dist/clients/attach/render/chat-view.d.ts +5 -4
- package/dist/clients/attach/render/chat-view.js +22 -13
- package/dist/clients/attach/render/page-block.d.ts +11 -7
- package/dist/clients/attach/render/page-block.js +64 -55
- package/dist/clients/attach/viewer.js +746 -735
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +56 -56
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +45 -32
- package/dist/clients/inbox/controller.d.ts +42 -14
- package/dist/clients/inbox/controller.js +240 -124
- package/dist/clients/inbox/dto-adapt.d.ts +28 -0
- package/dist/clients/inbox/dto-adapt.js +93 -0
- package/dist/clients/inbox/page-adapter.d.ts +5 -4
- package/dist/clients/inbox/page-adapter.js +12 -12
- package/dist/clients/inbox/resolve.d.ts +10 -5
- package/dist/clients/inbox/resolve.js +13 -12
- package/dist/clients/inbox/review/review-client.d.ts +0 -1
- package/dist/clients/inbox/review/review-client.js +0 -4
- package/dist/clients/inbox/review-adapter.d.ts +2 -1
- package/dist/clients/inbox/review-adapter.js +3 -5
- package/dist/clients/inbox/surface.d.ts +2 -2
- package/dist/clients/inbox/surface.js +19 -8
- package/dist/clients/inbox/tui.d.ts +3 -3
- package/dist/commands/__tests__/human.test.js +31 -15
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +36 -11
- package/dist/commands/{sys/__tests__ → __tests__/integration}/migrate.test.js +142 -36
- package/dist/commands/__tests__/revive-now-gate.test.js +2 -0
- package/dist/commands/api-client.d.ts +5 -4
- package/dist/commands/api-client.js +13 -7
- package/dist/commands/canvas-history/shared.js +1 -1
- package/dist/commands/canvas-history.js +1 -1
- package/dist/commands/canvas-roster.js +1 -1
- package/dist/commands/canvas.js +1 -2
- package/dist/commands/human/feedback.js +20 -17
- package/dist/commands/human/prompts.js +45 -36
- package/dist/commands/human/queue.js +73 -123
- package/dist/commands/human/review.js +6 -16
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +2 -0
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +2 -0
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +2 -0
- package/dist/commands/node-inspect-artifacts.js +1 -1
- package/dist/commands/node-lifecycle-revive.d.ts +2 -2
- package/dist/commands/node-lifecycle-revive.js +9 -19
- package/dist/commands/pkg/plugin-manage.js +0 -1
- package/dist/commands/profile/show.js +4 -12
- package/dist/commands/surface-tmux-spread.js +1 -5
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +23 -30
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +37 -11
- package/dist/commands/sys/branch.d.ts +2 -0
- package/dist/commands/sys/branch.js +19 -0
- package/dist/commands/sys/config.js +106 -33
- package/dist/commands/sys/daemon.d.ts +2 -0
- package/dist/commands/sys/daemon.js +130 -7
- package/dist/commands/sys/doctor.js +5 -15
- package/dist/commands/sys/migrate.js +21 -92
- package/dist/commands/sys/setup-settings-runner.js +4 -2
- package/dist/commands/sys.js +2 -15
- package/dist/core/__tests__/boot-fault-attempt.test.js +23 -1
- package/dist/core/__tests__/boot.test.js +32 -25
- package/dist/core/__tests__/broker-launch-candidates.test.js +49 -0
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +149 -176
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +59 -10
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +76 -20
- package/dist/core/__tests__/canvas.test.js +18 -47
- package/dist/core/__tests__/child-death-wake.test.js +29 -7
- package/dist/core/__tests__/cli-help-contract.test.js +2 -0
- package/dist/core/__tests__/close.test.js +29 -10
- package/dist/core/__tests__/collectible.test.js +2 -1
- package/dist/core/__tests__/config-change-delta.test.js +2 -0
- package/dist/core/__tests__/context-intro.test.js +13 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +17 -12
- package/dist/core/__tests__/cron-held-settlement.test.js +21 -3
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +29 -10
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +14 -2
- package/dist/core/__tests__/cron-timeout-descendants.test.js +13 -1
- package/dist/core/__tests__/daemon-boot.test.js +51 -14
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +1 -1
- package/dist/core/__tests__/fixtures/fake-engine.js +8 -3
- package/dist/core/__tests__/focuses.test.js +10 -5
- package/dist/core/__tests__/helpers/harness.js +50 -18
- package/dist/core/__tests__/history-inbox.test.js +12 -16
- package/dist/core/__tests__/human-action-delivery.test.js +48 -28
- package/dist/core/__tests__/human-actions.test.js +7 -3
- package/dist/core/__tests__/inline-memory-refs.test.js +7 -2
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +37 -10
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +42 -0
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +42 -29
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +36 -35
- package/dist/core/__tests__/integration/command-plugins.test.js +15 -6
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +113 -92
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +9 -5
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +16 -3
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +4 -0
- package/dist/core/__tests__/integration/profile-pause.test.js +4 -4
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +9 -12
- package/dist/core/__tests__/integration/revive.test.js +67 -21
- package/dist/core/__tests__/integration/spawn-root.test.js +51 -8
- package/dist/core/__tests__/integration/subscription-delivery.test.js +33 -21
- package/dist/core/__tests__/integration/worktree-land.test.js +5 -2
- package/dist/core/__tests__/integration/worktree-reap.test.js +15 -1
- package/dist/core/__tests__/kickoff.test.js +36 -39
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +2 -1
- package/dist/core/__tests__/lifecycle.test.js +2 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +13 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +2 -0
- package/dist/core/__tests__/migration.test.js +145 -31
- package/dist/core/__tests__/model-pin-durability.test.js +4 -1
- package/dist/core/__tests__/model-routes-config.test.js +13 -5
- package/dist/core/__tests__/node-outcome.test.js +93 -26
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +2 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +2 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +2 -1
- package/dist/core/__tests__/passive-subscription.test.js +50 -157
- package/dist/core/__tests__/plugin-kinds.test.js +6 -4
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +6 -1
- package/dist/core/__tests__/plugin-page-components.test.js +6 -4
- package/dist/core/__tests__/preview-registry-sync.test.js +2 -0
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +4 -1
- package/dist/core/__tests__/prune.test.js +11 -5
- package/dist/core/__tests__/push-final-guard.test.js +14 -7
- package/dist/core/__tests__/relaunch-root.test.js +30 -2
- package/dist/core/__tests__/remote-canvas-target.test.js +7 -1
- package/dist/core/__tests__/repository-root-identity.test.js +4 -0
- package/dist/core/__tests__/review-model-floor.test.js +6 -3
- package/dist/core/__tests__/revive-all.test.js +13 -3
- package/dist/core/__tests__/revive-capacity.test.js +26 -4
- package/dist/core/__tests__/revive-parked-fresh.test.js +31 -8
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +1 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +4 -3
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +11 -14
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +85 -71
- package/dist/core/__tests__/seam/dormancy-release.test.js +33 -19
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +7 -5
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +20 -6
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +27 -3
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +2 -1
- package/dist/core/__tests__/stop-guard.test.js +2 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +4 -3
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +18 -4
- package/dist/core/__tests__/yield-ensures-daemon.test.js +2 -1
- package/dist/core/bootstrap.js +2 -0
- package/dist/core/broker-client/__tests__/transport-socket.test.js +51 -6
- package/dist/core/broker-client/transport-socket.d.ts +1 -0
- package/dist/core/broker-client/transport-socket.js +13 -5
- package/dist/core/canvas/__tests__/attention.test.js +29 -35
- package/dist/core/canvas/__tests__/history-transcript.test.js +6 -6
- package/dist/core/canvas/__tests__/render-remote.test.js +25 -9
- package/dist/core/canvas/attention.d.ts +2 -5
- package/dist/core/canvas/attention.js +15 -64
- package/dist/core/canvas/boot.d.ts +6 -7
- package/dist/core/canvas/boot.js +5 -9
- package/dist/core/canvas/canvas.d.ts +13 -109
- package/dist/core/canvas/canvas.js +140 -401
- package/dist/core/canvas/crons.d.ts +2 -0
- package/dist/core/canvas/crons.js +16 -15
- package/dist/core/canvas/daemon-owner.js +10 -0
- package/dist/core/canvas/db.d.ts +2 -2
- package/dist/core/canvas/db.js +2 -18
- package/dist/core/canvas/deliveries.d.ts +104 -0
- package/dist/core/canvas/deliveries.js +354 -0
- package/dist/core/canvas/executions.d.ts +29 -0
- package/dist/core/canvas/executions.js +68 -0
- package/dist/core/canvas/history.js +35 -35
- package/dist/core/canvas/index.d.ts +3 -1
- package/dist/core/canvas/index.js +3 -1
- package/dist/core/canvas/migrations.js +20 -12
- package/dist/core/canvas/nav-model.js +1 -3
- package/dist/core/canvas/nav-render.d.ts +4 -4
- package/dist/core/canvas/nav-render.js +11 -21
- package/dist/core/canvas/node-sql-migration.d.ts +3 -0
- package/dist/core/canvas/node-sql-migration.js +261 -0
- package/dist/core/canvas/paths.d.ts +2 -16
- package/dist/core/canvas/paths.js +2 -31
- package/dist/core/canvas/recovery.d.ts +76 -0
- package/dist/core/canvas/recovery.js +588 -0
- package/dist/core/canvas/remote-canvas-source.js +4 -0
- package/dist/core/canvas/render-source.d.ts +16 -27
- package/dist/core/canvas/render-source.js +16 -45
- package/dist/core/canvas/sessions.d.ts +33 -0
- package/dist/core/canvas/sessions.js +78 -0
- package/dist/core/canvas/types.d.ts +33 -33
- package/dist/core/canvas/types.js +2 -5
- package/dist/core/canvas/waits.d.ts +18 -0
- package/dist/core/canvas/waits.js +70 -0
- package/dist/core/canvas/worktrees.d.ts +40 -0
- package/dist/core/canvas/worktrees.js +93 -0
- package/dist/core/config.d.ts +17 -12
- package/dist/core/config.js +106 -155
- package/dist/core/feed/__tests__/inbox-migrate.test.js +27 -31
- package/dist/core/feed/feed.d.ts +0 -6
- package/dist/core/feed/feed.js +68 -56
- package/dist/core/feed/inbox.d.ts +7 -81
- package/dist/core/feed/inbox.js +46 -378
- package/dist/core/feed/messages.d.ts +58 -0
- package/dist/core/feed/messages.js +217 -0
- package/dist/core/fs-utils.d.ts +4 -0
- package/dist/core/fs-utils.js +21 -1
- package/dist/core/human/answer.d.ts +1 -1
- package/dist/core/human/answer.js +1 -1
- package/dist/core/human/claim.d.ts +1 -1
- package/dist/core/human/claim.js +2 -4
- package/dist/core/human/component-docs.js +1 -1
- package/dist/core/human/feedback-companion.js +3 -2
- package/dist/core/human/feedback.d.ts +5 -8
- package/dist/core/human/feedback.js +57 -85
- package/dist/core/human/page-authoring.d.ts +30 -0
- package/dist/core/human/page-authoring.js +19 -0
- package/dist/core/human/requests.d.ts +136 -0
- package/dist/core/human/requests.js +515 -0
- package/dist/core/human/root.d.ts +0 -7
- package/dist/core/human/root.js +0 -17
- package/dist/core/human/scan.d.ts +2 -7
- package/dist/core/human/scan.js +48 -132
- package/dist/core/human/summary.d.ts +1 -1
- package/dist/core/human/summary.js +1 -1
- package/dist/core/human/tickets.d.ts +23 -83
- package/dist/core/human/tickets.js +92 -243
- package/dist/core/human/types.d.ts +5 -1
- package/dist/core/installed-plugins.js +8 -3
- package/dist/core/keybindings/__tests__/resolve.test.js +19 -17
- package/dist/core/locked-file.d.ts +6 -3
- package/dist/core/locked-file.js +36 -9
- package/dist/core/memory/extensions.js +2 -0
- package/dist/core/preview-registry.js +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +2 -0
- package/dist/core/profiles/default-binding.d.ts +0 -4
- package/dist/core/profiles/default-binding.js +12 -58
- package/dist/core/profiles/env-store.js +8 -3
- package/dist/core/profiles/manifest.d.ts +2 -37
- package/dist/core/profiles/manifest.js +35 -161
- package/dist/core/profiles/select.js +3 -0
- package/dist/core/review/__tests__/capture-origin.test.js +13 -2
- package/dist/core/review/__tests__/comments.test.js +28 -10
- package/dist/core/review/__tests__/remap.test.js +28 -10
- package/dist/core/review/__tests__/stage-identity.test.js +17 -7
- package/dist/core/review/birth.d.ts +1 -1
- package/dist/core/review/birth.js +34 -5
- package/dist/core/review/comments.js +1 -1
- package/dist/core/review/document.js +1 -1
- package/dist/core/review/project.d.ts +5 -1
- package/dist/core/review/project.js +14 -36
- package/dist/core/review/realize.d.ts +3 -6
- package/dist/core/review/realize.js +51 -168
- package/dist/core/review/remap.js +1 -1
- package/dist/core/review/stage.d.ts +3 -2
- package/dist/core/review/stage.js +2 -3
- package/dist/core/review/store.d.ts +3 -21
- package/dist/core/review/store.js +140 -186
- package/dist/core/review/types.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +9 -5
- package/dist/core/runtime/__tests__/spawn-env.test.js +8 -9
- package/dist/core/runtime/broker/auth-reload.js +9 -10
- package/dist/core/runtime/broker/daemon-ops.d.ts +25 -8
- package/dist/core/runtime/broker/daemon-ops.js +42 -9
- package/dist/core/runtime/broker/extension-abort.d.ts +3 -0
- package/dist/core/runtime/broker/extension-abort.js +11 -0
- package/dist/core/runtime/broker/fault-retry.d.ts +15 -6
- package/dist/core/runtime/broker/fault-retry.js +142 -95
- package/dist/core/runtime/broker/inbox.d.ts +4 -32
- package/dist/core/runtime/broker/inbox.js +4 -92
- package/dist/core/runtime/broker/rebind.d.ts +1 -0
- package/dist/core/runtime/broker/rebind.js +21 -12
- package/dist/core/runtime/broker-persona-guidance.d.ts +1 -1
- package/dist/core/runtime/broker-persona-guidance.js +2 -13
- package/dist/core/runtime/broker.js +28 -22
- package/dist/core/runtime/close.d.ts +3 -9
- package/dist/core/runtime/close.js +16 -27
- package/dist/core/runtime/fault.d.ts +3 -93
- package/dist/core/runtime/fault.js +9 -419
- package/dist/core/runtime/kickoff.d.ts +3 -6
- package/dist/core/runtime/kickoff.js +12 -18
- package/dist/core/runtime/launch.js +1 -1
- package/dist/core/runtime/lifecycle.js +40 -7
- package/dist/core/runtime/placement.js +2 -2
- package/dist/core/runtime/recycle.js +8 -2
- package/dist/core/runtime/reset.js +22 -6
- package/dist/core/runtime/revive.js +226 -218
- package/dist/core/runtime/spawn.js +14 -3
- package/dist/core/scoped-state/db.d.ts +7 -0
- package/dist/core/scoped-state/db.js +92 -0
- package/dist/core/scoped-state/migrate.d.ts +11 -0
- package/dist/core/scoped-state/migrate.js +198 -0
- package/dist/core/scoped-state/paths.d.ts +9 -0
- package/dist/core/scoped-state/paths.js +27 -0
- package/dist/core/scoped-state/profiles.d.ts +12 -0
- package/dist/core/scoped-state/profiles.js +62 -0
- package/dist/core/scoped-state/providers.d.ts +16 -0
- package/dist/core/scoped-state/providers.js +8 -0
- package/dist/core/scoped-state/schema.d.ts +3 -0
- package/dist/core/scoped-state/schema.js +26 -0
- package/dist/core/scoped-state/settings.d.ts +28 -0
- package/dist/core/scoped-state/settings.js +82 -0
- package/dist/core/subscription-state.d.ts +29 -48
- package/dist/core/subscription-state.js +176 -712
- package/dist/core/worktree-close.js +4 -4
- package/dist/core/worktree-mutation-async.js +2 -2
- package/dist/core/worktree-sweep.js +11 -16
- package/dist/core/worktree.js +6 -12
- package/dist/daemon/__tests__/autostart-storm.test.js +1 -39
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +2 -2
- package/dist/daemon/__tests__/helpers/source-daemon.js +7 -6
- package/dist/daemon/__tests__/integration/migration-startup.test.js +59 -26
- package/dist/daemon/__tests__/node-deadline-lane.test.js +2 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +39 -15
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +39 -10
- package/dist/daemon/__tests__/reconciler-signature.test.js +2 -2
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +2 -2
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +17 -12
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +27 -5
- package/dist/daemon/api/__tests__/model-config.test.js +8 -8
- package/dist/daemon/api/__tests__/node-create-description.test.js +22 -5
- package/dist/daemon/api/__tests__/node-model-validation.test.js +21 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +10 -12
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +4 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +4 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +26 -8
- package/dist/daemon/api/__tests__/seam/api-server.test.js +24 -32
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +4 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +5 -4
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +27 -41
- package/dist/daemon/api/__tests__/submit-result.test.js +3 -2
- package/dist/daemon/api/bridge.js +1 -1
- package/dist/daemon/api/handlers/bash-jobs.js +6 -7
- package/dist/daemon/api/handlers/broker-ops.js +47 -84
- package/dist/daemon/api/handlers/broker-recovery.d.ts +4 -0
- package/dist/daemon/api/handlers/broker-recovery.js +251 -0
- package/dist/daemon/api/handlers/canvas.js +2 -44
- package/dist/daemon/api/handlers/daemon.js +41 -0
- package/dist/daemon/api/handlers/feedback-comments.js +2 -2
- package/dist/daemon/api/handlers/health.js +10 -5
- package/dist/daemon/api/handlers/human-requests.js +168 -188
- package/dist/daemon/api/handlers/human.js +3 -151
- package/dist/daemon/api/handlers/inbox-page.d.ts +4 -0
- package/dist/daemon/api/handlers/inbox-page.js +89 -0
- package/dist/daemon/api/handlers/inbox.js +21 -120
- package/dist/daemon/api/handlers/messages.d.ts +1 -0
- package/dist/daemon/api/handlers/messages.js +73 -15
- package/dist/daemon/api/handlers/node-outcomes.js +58 -13
- package/dist/daemon/api/handlers/nodes.js +7 -13
- package/dist/daemon/api/handlers/reviews.js +4 -29
- package/dist/daemon/api/map.d.ts +25 -3
- package/dist/daemon/api/map.js +84 -14
- package/dist/daemon/api/server.js +68 -9
- package/dist/daemon/control.d.ts +18 -0
- package/dist/daemon/cron/disposition.d.ts +2 -0
- package/dist/daemon/cron/disposition.js +8 -5
- package/dist/daemon/cron/settle.js +37 -13
- package/dist/daemon/cron/sinks.d.ts +18 -1
- package/dist/daemon/cron/sinks.js +47 -93
- package/dist/daemon/crtrd-cli.js +4 -19
- package/dist/daemon/crtrd.d.ts +2 -0
- package/dist/daemon/crtrd.js +206 -81
- package/dist/daemon/fleet.js +5 -6
- package/dist/daemon/human/finish.d.ts +12 -24
- package/dist/daemon/human/finish.js +88 -285
- package/dist/daemon/human/settle.d.ts +40 -0
- package/dist/daemon/human/settle.js +89 -0
- package/dist/daemon/human/sweep.d.ts +20 -5
- package/dist/daemon/human/sweep.js +56 -60
- package/dist/daemon/manage.d.ts +21 -16
- package/dist/daemon/manage.js +85 -51
- package/dist/daemon/messaging/node-message.d.ts +1 -1
- package/dist/daemon/messaging/node-message.js +9 -12
- package/dist/daemon/park-activity.js +3 -3
- package/dist/daemon/reconcilers/bash-deadline.js +6 -7
- package/dist/daemon/reconcilers/broker-supervision.d.ts +1 -1
- package/dist/daemon/reconcilers/broker-supervision.js +41 -19
- package/dist/daemon/reconcilers/controller-death.js +6 -18
- package/dist/daemon/reconcilers/delivery-lane.d.ts +9 -0
- package/dist/daemon/reconcilers/delivery-lane.js +130 -0
- package/dist/daemon/reconcilers/live-obligation.js +3 -3
- package/dist/daemon/reconcilers/node-deadline.js +1 -1
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.d.ts +1 -1
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +10 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +5 -5
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -1
- package/dist/daemon/reconcilers/pending-review-submit.js +3 -3
- package/dist/daemon/reconcilers/storage-maintenance.d.ts +2 -8
- package/dist/daemon/reconcilers/storage-maintenance.js +13 -43
- package/dist/daemon/review/companion.js +5 -11
- package/dist/daemon/review/deliver.d.ts +1 -5
- package/dist/daemon/review/deliver.js +3 -52
- package/dist/daemon/review/finish.d.ts +2 -27
- package/dist/daemon/review/finish.js +79 -263
- package/dist/daemon/review/sweep.d.ts +3 -10
- package/dist/daemon/review/sweep.js +13 -131
- package/dist/daemon/startup-policy.d.ts +0 -5
- package/dist/daemon/startup-policy.js +0 -5
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +3 -2
- package/dist/migrations/__tests__/activation.test.js +9 -6
- package/dist/migrations/activation.d.ts +3 -2
- package/dist/migrations/activation.js +2 -4
- package/dist/migrations/corpus.d.ts +2 -5
- package/dist/migrations/corpus.js +9 -20
- package/dist/migrations/runner.d.ts +3 -1
- package/dist/migrations/runner.js +6 -2
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +21 -89
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +4 -2
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +51 -33
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +16 -2
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +13 -1
- package/dist/pi-extensions/canvas-inbox-watcher.js +98 -244
- package/dist/pi-extensions/canvas-passive-context.d.ts +4 -8
- package/dist/pi-extensions/canvas-passive-context.js +85 -37
- package/dist/pi-extensions/canvas-stophook.js +47 -31
- package/dist/shared/env.d.ts +1 -0
- package/dist/shared/env.js +3 -0
- package/package.json +1 -1
- package/runtime.lock.json +5 -5
- package/dist/clients/attach/__tests__/page-block.test.js +0 -54
- package/dist/clients/inbox/review-visibility.d.ts +0 -5
- package/dist/clients/inbox/review-visibility.js +0 -19
- package/dist/commands/canvas-rebuild-index.d.ts +0 -2
- package/dist/commands/canvas-rebuild-index.js +0 -46
- package/dist/core/__tests__/human-cancel-guard.test.js +0 -110
- package/dist/core/__tests__/human-deliver.test.d.ts +0 -1
- package/dist/core/__tests__/human-deliver.test.js +0 -256
- package/dist/core/__tests__/human-node-not-supervised.test.d.ts +0 -1
- package/dist/core/__tests__/human-node-not-supervised.test.js +0 -89
- package/dist/core/__tests__/integration/human-deliver-e2e.test.d.ts +0 -1
- package/dist/core/__tests__/integration/human-deliver-e2e.test.js +0 -131
- package/dist/core/__tests__/phase4-review-store.test.d.ts +0 -1
- package/dist/core/__tests__/phase4-review-store.test.js +0 -144
- package/dist/core/__tests__/watchdog-abort-arms-retry.test.d.ts +0 -1
- package/dist/core/__tests__/watchdog-abort-arms-retry.test.js +0 -110
- package/dist/core/canvas/human-deliveries.d.ts +0 -39
- package/dist/core/canvas/human-deliveries.js +0 -75
- package/dist/core/canvas/node-outcome-deliveries.d.ts +0 -64
- package/dist/core/canvas/node-outcome-deliveries.js +0 -159
- package/dist/core/feed/passive.d.ts +0 -3
- package/dist/core/feed/passive.js +0 -53
- package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +0 -1
- package/dist/core/human/__tests__/inbox-cancel-worker.js +0 -7
- package/dist/core/human/__tests__/inbox-claim-worker.d.ts +0 -1
- package/dist/core/human/__tests__/inbox-claim-worker.js +0 -17
- package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +0 -1
- package/dist/core/human/__tests__/inbox-stale-claim-worker.js +0 -8
- package/dist/core/human/__tests__/integration/inbox-core.test.d.ts +0 -1
- package/dist/core/human/__tests__/integration/inbox-core.test.js +0 -145
- package/dist/core/human/__tests__/page-tickets.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-tickets.test.js +0 -161
- package/dist/core/review/ticket-filter.d.ts +0 -17
- package/dist/core/review/ticket-filter.js +0 -21
- package/dist/core/runtime/broker/passive.d.ts +0 -17
- package/dist/core/runtime/broker/passive.js +0 -44
- package/dist/core/runtime/busy.d.ts +0 -46
- package/dist/core/runtime/busy.js +0 -150
- package/dist/daemon/__tests__/startup-block-marker.test.d.ts +0 -1
- package/dist/daemon/__tests__/startup-block-marker.test.js +0 -86
- package/dist/daemon/api/__tests__/review-terminal-conflict.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/review-terminal-conflict.test.js +0 -98
- package/dist/daemon/human/deliver-action.d.ts +0 -3
- package/dist/daemon/human/deliver-action.js +0 -9
- package/dist/daemon/node-outcome/deliver-outcome.d.ts +0 -3
- package/dist/daemon/node-outcome/deliver-outcome.js +0 -9
- package/dist/daemon/reconcilers/human-delivery-lane.d.ts +0 -10
- package/dist/daemon/reconcilers/human-delivery-lane.js +0 -41
- package/dist/daemon/reconcilers/node-outcome-delivery-lane.d.ts +0 -10
- package/dist/daemon/reconcilers/node-outcome-delivery-lane.js +0 -41
- package/dist/daemon/startup-block-marker.d.ts +0 -25
- package/dist/daemon/startup-block-marker.js +0 -99
- /package/dist/{clients/attach/__tests__/page-block.test.d.ts → api/dto/mail.js} +0 -0
- /package/dist/{commands/sys/__tests__/migrate.test.d.ts → api/dto/recovery.js} +0 -0
- /package/dist/{core/__tests__/human-cancel-guard.test.d.ts → commands/__tests__/integration/migrate.test.d.ts} +0 -0
|
@@ -3,13 +3,10 @@ export interface TicketEntry {
|
|
|
3
3
|
name: string;
|
|
4
4
|
cwd: string;
|
|
5
5
|
count: number;
|
|
6
|
-
/** Open ticket titles for this node, newest first
|
|
6
|
+
/** Open ticket titles for this node, newest first. */
|
|
7
7
|
subjects: string[];
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
10
|
-
* process (tests, and any in-process home switch) must call this: the cache is
|
|
11
|
-
* keyed only by time, so a stale window would otherwise serve the old home's
|
|
12
|
-
* counts. */
|
|
9
|
+
/** Kept for callers that reset a canvas home in process. SQL has no directory-scan cache to invalidate. */
|
|
13
10
|
export declare function invalidateTicketCounts(): void;
|
|
14
11
|
/** Count pending tickets asked by one node. */
|
|
15
12
|
export declare function countTickets(nodeId: string): number;
|
|
@@ -1,66 +1,22 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
// Reply-bearing tickets carry an explicit bridge route. The bridge's parent is
|
|
4
|
-
// the asking node; standalone pages have no bridge and do not contribute to a
|
|
5
|
-
// node's pending-reply count.
|
|
6
|
-
import { scanInbox } from '../human/scan.js';
|
|
7
|
-
import { filterTerminalReviewTickets } from '../review/ticket-filter.js';
|
|
8
|
-
import { readTicketReplyRoute } from '../human/convention.js';
|
|
1
|
+
// Pending human-request counters across the canvas. The indexed request query is the authority; request directories are retained artifacts, never an inbox index.
|
|
2
|
+
import { listOpenReplyBearingRequests } from '../human/requests.js';
|
|
9
3
|
import { getNode, listNodes, view } from './canvas.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (replyRoute === null)
|
|
13
|
-
return null;
|
|
14
|
-
const bridge = getNode(replyRoute.bridge_node_id);
|
|
15
|
-
if (bridge === null)
|
|
16
|
-
return null;
|
|
17
|
-
return bridge.parent ?? bridge.node_id;
|
|
18
|
-
}
|
|
19
|
-
/** `scanInbox` walks EVERY node dir under `<canvas>/nodes` (thousands on a large
|
|
20
|
-
* canvas, ~50ms) and returns the same map for every caller in a moment, yet the
|
|
21
|
-
* per-node/per-view count reads fan out — the canvas browser alone asks once per
|
|
22
|
-
* forest root (hundreds of calls per snapshot). Uncached, that serialized
|
|
23
|
-
* crtrd's single-threaded event loop behind minutes of identical disk walks and
|
|
24
|
-
* stalled the browse open. One walk per window serves the whole burst; a ticket
|
|
25
|
-
* raised or answered inside the window badges on the next one (the viewers that
|
|
26
|
-
* read this poll on a multi-second cadence). */
|
|
27
|
-
const TICKET_COUNT_TTL_MS = 1000;
|
|
28
|
-
let ticketCountCache = null;
|
|
29
|
-
/** Drop the cached walk. Callers that swap the canvas home out from under a live
|
|
30
|
-
* process (tests, and any in-process home switch) must call this: the cache is
|
|
31
|
-
* keyed only by time, so a stale window would otherwise serve the old home's
|
|
32
|
-
* counts. */
|
|
33
|
-
export function invalidateTicketCounts() {
|
|
34
|
-
ticketCountCache = null;
|
|
35
|
-
}
|
|
4
|
+
/** Kept for callers that reset a canvas home in process. SQL has no directory-scan cache to invalidate. */
|
|
5
|
+
export function invalidateTicketCounts() { }
|
|
36
6
|
function ticketSubjects() {
|
|
37
|
-
const now = Date.now();
|
|
38
|
-
if (ticketCountCache !== null && now - ticketCountCache.at < TICKET_COUNT_TTL_MS) {
|
|
39
|
-
return ticketCountCache.subjects;
|
|
40
|
-
}
|
|
41
7
|
const subjects = new Map();
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
subjects.set(nodeId, [ticket.title]);
|
|
50
|
-
else
|
|
51
|
-
list.push(ticket.title);
|
|
52
|
-
}
|
|
8
|
+
for (const request of listOpenReplyBearingRequests()) {
|
|
9
|
+
const nodeId = request.requester_node_id;
|
|
10
|
+
const list = subjects.get(nodeId);
|
|
11
|
+
if (list === undefined)
|
|
12
|
+
subjects.set(nodeId, [request.title]);
|
|
13
|
+
else
|
|
14
|
+
list.push(request.title);
|
|
53
15
|
}
|
|
54
|
-
catch {
|
|
55
|
-
// An unavailable ticket store or absent root has no display consequence.
|
|
56
|
-
}
|
|
57
|
-
ticketCountCache = { at: Date.now(), subjects };
|
|
58
16
|
return subjects;
|
|
59
17
|
}
|
|
60
18
|
/** Count pending tickets asked by one node. */
|
|
61
|
-
export function countTickets(nodeId) {
|
|
62
|
-
return ticketSubjects().get(nodeId)?.length ?? 0;
|
|
63
|
-
}
|
|
19
|
+
export function countTickets(nodeId) { return ticketSubjects().get(nodeId)?.length ?? 0; }
|
|
64
20
|
/** Pending tickets for every reachable asking node, including the root. */
|
|
65
21
|
export function pendingTicketsForView(rootId) {
|
|
66
22
|
const found = ticketSubjects();
|
|
@@ -68,19 +24,15 @@ export function pendingTicketsForView(rootId) {
|
|
|
68
24
|
for (const id of [rootId, ...view(rootId)]) {
|
|
69
25
|
const node = getNode(id);
|
|
70
26
|
const subjects = found.get(id) ?? [];
|
|
71
|
-
if (node !== null && subjects.length > 0)
|
|
27
|
+
if (node !== null && subjects.length > 0)
|
|
72
28
|
entries.push({ node_id: id, name: node.name, cwd: node.cwd, count: subjects.length, subjects });
|
|
73
|
-
}
|
|
74
29
|
}
|
|
75
30
|
return entries;
|
|
76
31
|
}
|
|
77
32
|
/** Per-node pending ticket counts for an explicit node set. */
|
|
78
33
|
export function ticketCountsForNodes(ids) {
|
|
79
34
|
const found = ticketSubjects();
|
|
80
|
-
|
|
81
|
-
for (const id of ids)
|
|
82
|
-
counts[id] = found.get(id)?.length ?? 0;
|
|
83
|
-
return counts;
|
|
35
|
+
return Object.fromEntries(ids.map((id) => [id, found.get(id)?.length ?? 0]));
|
|
84
36
|
}
|
|
85
37
|
/** Pending tickets across the entire canvas, attributed to asking nodes. */
|
|
86
38
|
export function ticketsAcrossCanvas() {
|
|
@@ -88,9 +40,8 @@ export function ticketsAcrossCanvas() {
|
|
|
88
40
|
const entries = [];
|
|
89
41
|
for (const node of listNodes()) {
|
|
90
42
|
const subjects = found.get(node.node_id) ?? [];
|
|
91
|
-
if (subjects.length > 0)
|
|
43
|
+
if (subjects.length > 0)
|
|
92
44
|
entries.push({ node_id: node.node_id, name: node.name, cwd: node.cwd, count: subjects.length, subjects });
|
|
93
|
-
}
|
|
94
45
|
}
|
|
95
46
|
return entries;
|
|
96
47
|
}
|
|
@@ -65,12 +65,11 @@ export interface BootReconcileResult {
|
|
|
65
65
|
* `current` defaults to the real identity; tests inject a synthetic one against
|
|
66
66
|
* an isolated CRTR_HOME to simulate a boot change without a real reboot. */
|
|
67
67
|
export declare function reconcileBootLiveness(current?: BootIdentity): BootReconcileResult;
|
|
68
|
-
/** The one-time
|
|
69
|
-
* composition. In production this is `
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
|
|
73
|
-
export type MigrateLegacyPidIdentities = (captureIdentity?: (pid: number) => string | undefined) => {
|
|
68
|
+
/** The one-time execution-identity migration, injected into the startup
|
|
69
|
+
* composition. In production this is `migrateLegacyExecutionIdentities` from
|
|
70
|
+
* executions.ts. It remains injected so tests can exercise this composition
|
|
71
|
+
* without reaching process inspection. */
|
|
72
|
+
export type MigrateLegacyExecutionIdentities = (captureIdentity?: (pid: number) => string | undefined) => {
|
|
74
73
|
migrated: string[];
|
|
75
74
|
};
|
|
76
75
|
export interface BootStartupResult {
|
|
@@ -90,4 +89,4 @@ export interface BootStartupResult {
|
|
|
90
89
|
*
|
|
91
90
|
* `migrate` is injected (see `MigrateLegacyPidIdentities`); `current` and
|
|
92
91
|
* `captureIdentity` pass through to the two steps for test injection. */
|
|
93
|
-
export declare function reconcileAndMigrateBoot(migrate:
|
|
92
|
+
export declare function reconcileAndMigrateBoot(migrate: MigrateLegacyExecutionIdentities, current?: BootIdentity, captureIdentity?: (pid: number) => string | undefined): BootStartupResult;
|
package/dist/core/canvas/boot.js
CHANGED
|
@@ -146,18 +146,14 @@ export function reconcileBootLiveness(current = currentBootIdentity()) {
|
|
|
146
146
|
return { changed: false, cleared: [], sameBootProven };
|
|
147
147
|
}
|
|
148
148
|
const rows = db
|
|
149
|
-
.prepare(
|
|
149
|
+
.prepare("SELECT execution_id, node_id FROM executions WHERE state != 'exited'")
|
|
150
150
|
.all();
|
|
151
|
-
|
|
152
|
-
// alongside `pi_pid` — a boot resets the OS process table, so any recorded
|
|
153
|
-
// identity is as meaningless as the pid it was captured for; leaving it
|
|
154
|
-
// behind would let a coincidentally-reused pid on the NEW boot compare
|
|
155
|
-
// against a stale baseline from the OLD one.
|
|
156
|
-
const upd = db.prepare('UPDATE nodes SET pi_pid = NULL, pi_pid_identity = NULL WHERE node_id = ?');
|
|
151
|
+
const ended = db.prepare("UPDATE executions SET state = 'exited', ended_at = ?, exit_reason = 'boot-change' WHERE execution_id = ? AND state != 'exited'");
|
|
157
152
|
const cleared = [];
|
|
153
|
+
const at = new Date().toISOString();
|
|
158
154
|
for (const row of rows) {
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
if (ended.run(at, row.execution_id).changes > 0)
|
|
156
|
+
cleared.push(row.node_id);
|
|
161
157
|
}
|
|
162
158
|
writeBootMarker(db, current);
|
|
163
159
|
db.exec('COMMIT');
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
/** Seed a node's row at BIRTH: identity columns + runtime columns taken from the
|
|
3
|
-
* incoming meta (defaults: status='active', the rest null). The only writer
|
|
4
|
-
* that sets runtime columns alongside identity in one statement — afterwards
|
|
5
|
-
* the atomic setters are the sole runtime writers. */
|
|
1
|
+
import type { ExitIntent, Lifecycle, Mode, NodeIdentity, NodeMemoryTarget, NodeMeta, NodeOutcomeKind, NodeRow, NodeStatus, SubscriptionRef, TerminalReason } from './types.js';
|
|
6
2
|
export interface OutcomeDeliveryBinding {
|
|
7
3
|
actionName: string;
|
|
8
4
|
argv: string[];
|
|
@@ -10,13 +6,11 @@ export interface OutcomeDeliveryBinding {
|
|
|
10
6
|
configOrigin: string;
|
|
11
7
|
payload?: unknown;
|
|
12
8
|
}
|
|
13
|
-
/** Create a node
|
|
14
|
-
* row (identity + runtime from the incoming meta). Returns the hydrated view. */
|
|
9
|
+
/** Create a SQL-authoritative node, then ensure its artifact directories exist. */
|
|
15
10
|
export declare function createNode(meta: NodeMeta, opts?: {
|
|
16
11
|
outcomeDelivery?: OutcomeDeliveryBinding;
|
|
17
12
|
}): NodeMeta;
|
|
18
|
-
/** The canonical node record
|
|
19
|
-
* runtime (the row). Null if unknown. */
|
|
13
|
+
/** The canonical node record, hydrated from SQL. Null if unknown. */
|
|
20
14
|
export declare function getNode(nodeId: string): NodeMeta | null;
|
|
21
15
|
export declare function canonicalSessionFile(sessionFile: string): string;
|
|
22
16
|
/** Resolve the crouter node that owns one exact Pi session file. */
|
|
@@ -34,11 +28,9 @@ export declare function dueNodeDeadlines(nowIso: string): NodeRow[];
|
|
|
34
28
|
export declare function setNodeDeadline(nodeId: string, deadlineAt: string | null): boolean;
|
|
35
29
|
/** Shift active/idle profile deadlines by a completed profile pause duration. */
|
|
36
30
|
export declare function shiftProfileNodeDeadlines(profileId: string, pauseDurationMs: number): number;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
* below). Returns the hydrated view (runtime included). */
|
|
41
|
-
export declare function updateNode(nodeId: string, patch: Partial<NodeIdentity>): NodeMeta;
|
|
31
|
+
type NodeUpdate = Partial<Omit<NodeIdentity, 'node_id' | 'pi_session_id' | 'pi_session_file' | 'managed_worktree'>>;
|
|
32
|
+
/** Update node identity/configuration columns. Sessions and worktrees have named stores. */
|
|
33
|
+
export declare function updateNode(nodeId: string, patch: NodeUpdate): NodeMeta;
|
|
42
34
|
/** Set a node's status. Atomic single-column write. */
|
|
43
35
|
export declare function setStatus(nodeId: string, status: NodeStatus): void;
|
|
44
36
|
/** Set a node's exit intent. Atomic single-column write. */
|
|
@@ -88,25 +80,6 @@ export declare function setPresence(nodeId: string, presence: {
|
|
|
88
80
|
window?: string | null;
|
|
89
81
|
pane?: string | null;
|
|
90
82
|
}): void;
|
|
91
|
-
/** Record the live pi pid (daemon liveness signal) PLUS its launch-time
|
|
92
|
-
* identity fingerprint, in one atomic write:
|
|
93
|
-
* `capturePidIdentities([pid])` is a signal-0-adjacent `ps -p <pid>` probe
|
|
94
|
-
* taken RIGHT NOW, while `pid` is the process we just spawned/bound and
|
|
95
|
-
* therefore definitely still exists — this is the LAUNCH-time baseline
|
|
96
|
-
* `headlessBrokerHost.teardown()` later compares against before signaling
|
|
97
|
-
* anything. A failed probe (rare — `ps` itself misbehaving) or a probe that
|
|
98
|
-
* finds no row for `pid` (raced away in the instant between spawn and this
|
|
99
|
-
* call) both write `NULL`: no baseline recorded, so the teardown guard fails
|
|
100
|
-
* open exactly like a node booted before this column existed — never a false
|
|
101
|
-
* identity that could itself cause a false mismatch later. */
|
|
102
|
-
export declare function recordPid(nodeId: string, pid: number): void;
|
|
103
|
-
/** Clear the pi pid (window-backed relaunch, before the fresh pi re-records it)
|
|
104
|
-
* AND its recorded launch-time identity — the two are written together by
|
|
105
|
-
* `recordPid` and must be cleared together, or a subsequent relaunch that
|
|
106
|
-
* reuses the pid namespace could compare its own fresh pid against a STALE
|
|
107
|
-
* identity left over from the pid this row held before. */
|
|
108
|
-
export declare function clearRecordedPid(nodeId: string): void;
|
|
109
|
-
export declare const clearPid: typeof clearRecordedPid;
|
|
110
83
|
export declare function recordLaunch(nodeId: string, at: string): void;
|
|
111
84
|
export declare function recordSettledTurn(nodeId: string, at: string): void;
|
|
112
85
|
export declare function setFrozen(nodeId: string, at: string): void;
|
|
@@ -115,51 +88,13 @@ export declare function recordRespawnAttempt(nodeId: string, attempt: {
|
|
|
115
88
|
failures: number;
|
|
116
89
|
notBefore: string | null;
|
|
117
90
|
}): void;
|
|
118
|
-
/** ONE-TIME completion of the boot-scoped-identity format migration, run once
|
|
119
|
-
* at daemon startup (the natural boot-reconciliation chokepoint, right after
|
|
120
|
-
* `reconcileBootLiveness`). It closes the gap the `identitiesMatch` legacy
|
|
121
|
-
* lane only TOLERATES: a broker that survives an in-place crouter upgrade
|
|
122
|
-
* keeps its old `lstart#ticks` row indefinitely (`recordPid` only fires on
|
|
123
|
-
* launch/revive/session_start), so the cross-boot ticks-collision exposure the
|
|
124
|
-
* boot-scoped base was added to close never provably shuts for those rows.
|
|
125
|
-
*
|
|
126
|
-
* For every row whose RECORDED identity is legacy-format while this platform
|
|
127
|
-
* now composes new-format (a readable kernel boot_id):
|
|
128
|
-
* - if the recorded pid's CURRENT live identity matches the recorded one via
|
|
129
|
-
* the migration lane (same live process, `identitiesMatch` true) AND that
|
|
130
|
-
* current identity is itself boot-scoped — re-record it with the new
|
|
131
|
-
* composer, completing the migration in place;
|
|
132
|
-
* - otherwise (pid gone, probe failed, reused — no match, or no readable
|
|
133
|
-
* boot_id for it) — leave the row untouched for the normal liveness
|
|
134
|
-
* handling that already runs each tick.
|
|
135
|
-
*
|
|
136
|
-
* After this runs once, the legacy compare lane only ever engages for
|
|
137
|
-
* genuinely no-boot_id platforms. NOT a per-caller reconciliation layer — a
|
|
138
|
-
* single startup sweep. `captureIdentity` is injectable for unit tests.
|
|
139
|
-
*
|
|
140
|
-
* GATED on proven same-boot provenance by its caller (daemon startup runs it
|
|
141
|
-
* only when `reconcileBootLiveness` returned `sameBootProven` — see
|
|
142
|
-
* `bootProvenSame`). This is what makes a bare ticks match safe to bless as a
|
|
143
|
-
* current-boot identity: without that proof an equal-ticks collision with an
|
|
144
|
-
* unrelated process from a DIFFERENT boot could be rewritten as
|
|
145
|
-
* `<currentBootId>#<ticks>`, permanently baptizing a stranger.
|
|
146
|
-
*
|
|
147
|
-
* Not transactional by design: it never HOLDS the write lock across the (slow,
|
|
148
|
-
* per-row) `ps` probe. Each re-record is a compare-and-swap single-row UPDATE
|
|
149
|
-
* constrained by ALL three snapshotted values (`node_id`, `pi_pid`,
|
|
150
|
-
* `pi_pid_identity`), counted only when a row actually changed. So if the old
|
|
151
|
-
* broker exits and a concurrent revive atomically records a fresh
|
|
152
|
-
* `(pi_pid, pi_pid_identity)` between this sweep's probe and its update, the
|
|
153
|
-
* CAS matches zero rows and the migration is skipped rather than clobbering
|
|
154
|
-
* the newer identity with the stale one. */
|
|
155
|
-
export declare function migrateLegacyPidIdentities(captureIdentity?: (pid: number) => string | undefined): {
|
|
156
|
-
migrated: string[];
|
|
157
|
-
};
|
|
158
91
|
/** Every hydrated node whose durable profile identity equals `profileId`.
|
|
159
92
|
* Unlike `listNodes`, this includes unclaimed warm-pool spares: profile
|
|
160
93
|
* deletion owns every matching row, whether or not it is user-visible. */
|
|
161
94
|
export declare function listNodesByProfile(profileId: string): NodeMeta[];
|
|
162
95
|
/** All rows, optionally filtered by status and terminal execution traces. Unclaimed warm spares are excluded. */
|
|
96
|
+
/** Every node's durable memory-resolution coordinates, including unclaimed warm-pool spares. */
|
|
97
|
+
export declare function listNodeMemoryTargets(): NodeMemoryTarget[];
|
|
163
98
|
export declare function listNodes(filter?: {
|
|
164
99
|
status?: NodeStatus | NodeStatus[];
|
|
165
100
|
withRecordedPid?: boolean;
|
|
@@ -211,8 +146,7 @@ export declare function isWarmSpare(nodeId: string): boolean;
|
|
|
211
146
|
* The claim also restamps the row's `created` to `created` — birth time is a
|
|
212
147
|
* spare's MINT time, and consumers sort conversations on it, so an hour-old
|
|
213
148
|
* spare must not sort as an hour-old conversation. This is the one sanctioned
|
|
214
|
-
* write of `created` after birth
|
|
215
|
-
* the caller mirrors the same stamp into meta.json. */
|
|
149
|
+
* write of `created` after birth. */
|
|
216
150
|
export declare function claimWarmSpare(recipeKey: string, created: string, opts?: {
|
|
217
151
|
deadlineAt?: string;
|
|
218
152
|
outcomeDelivery?: OutcomeDeliveryBinding;
|
|
@@ -225,8 +159,8 @@ export declare function warmSpareCount(recipeKey: string): number;
|
|
|
225
159
|
/** Direct children of `id`, oldest first — an indexed point query
|
|
226
160
|
* (`idx_nodes_parent`) instead of a full-table `listNodes()` scan. */
|
|
227
161
|
export declare function childrenOf(id: string): string[];
|
|
228
|
-
/** One lean roster row: only the `nodes` columns
|
|
229
|
-
*
|
|
162
|
+
/** One lean roster row: only the `nodes` columns needed by the roster. Backs
|
|
163
|
+
* `GET /v1/canvas/roster` — the recurring attach /
|
|
230
164
|
* browser topology poll, distinct from the enriched per-row
|
|
231
165
|
* `dashboardRowsAll`+`enrichRows` snapshot (`GET /v1/canvas/snapshot`). */
|
|
232
166
|
export interface RosterRow {
|
|
@@ -242,7 +176,7 @@ export interface RosterRow {
|
|
|
242
176
|
created: string;
|
|
243
177
|
}
|
|
244
178
|
/** Every node's lean roster row, oldest first — a single scan indexed by
|
|
245
|
-
* `idx_nodes_created
|
|
179
|
+
* `idx_nodes_created`, with no per-row hydration or N+1 query. */
|
|
246
180
|
export declare function rosterNodes(): RosterRow[];
|
|
247
181
|
/** One `subscribes_to` edge, both endpoints — the roster's topology half. */
|
|
248
182
|
export interface RosterEdge {
|
|
@@ -351,16 +285,6 @@ export declare function withFreshTerminalGuard<T>(nodeId: string, isTerminal: (r
|
|
|
351
285
|
final_report: string | null;
|
|
352
286
|
frozen_at: string | null;
|
|
353
287
|
}) => boolean, body: () => T): TerminalGuardResult<T>;
|
|
354
|
-
/** Rebuild node rows from on-disk metas (the db node table is a derived index).
|
|
355
|
-
* Only the IDENTITY columns are rebuilt — they are a projection of meta. The
|
|
356
|
-
* runtime columns (status/intent/pi_pid/window/tmux_session/pane) are NOT in meta
|
|
357
|
-
* and NOT re-derivable from it: they describe live process/presence state, so
|
|
358
|
-
* an existing row keeps them and a freshly re-created row takes the schema's
|
|
359
|
-
* quiescent defaults (status='active', the rest null). The daemon reconciles
|
|
360
|
-
* liveness from tmux reality, not from a stale file.
|
|
361
|
-
* Edges are left intact — subscribes_to is db-authoritative; spawned_by is
|
|
362
|
-
* re-derived from each meta's `spawned_by` (fallback: `parent` for legacy metas). */
|
|
363
|
-
export declare function rebuildIndex(): void;
|
|
364
288
|
/** A node selected for pruning (or that would be, under --dry-run). */
|
|
365
289
|
export interface PrunedNode {
|
|
366
290
|
node_id: string;
|
|
@@ -416,27 +340,6 @@ export declare function pruneNodes(opts: {
|
|
|
416
340
|
dryRun?: boolean;
|
|
417
341
|
includeStale?: boolean;
|
|
418
342
|
}): PruneResult;
|
|
419
|
-
/** Drop rows whose on-disk `nodes/<id>/` dir is gone — a node that no longer
|
|
420
|
-
* exists in the only place it is durably stored.
|
|
421
|
-
*
|
|
422
|
-
* `createNode` scaffolds the dir and writes meta.json BEFORE seeding the row, and
|
|
423
|
-
* both delete paths ({@link deleteNode}, `deletePrunedNodes`) commit the row
|
|
424
|
-
* removal BEFORE removing the dir, so a row with no dir is never a transient of
|
|
425
|
-
* either — it is a node whose durable state was lost. Nothing about it is
|
|
426
|
-
* recoverable: `getNode` reads meta.json and returns null, so every surface that
|
|
427
|
-
* resolves a node (revive, focus, close, rename, message) rejects it as unknown
|
|
428
|
-
* while the roster keeps listing it. The row IS the residue, so deleting it is
|
|
429
|
-
* the whole repair; there is no dir left to remove.
|
|
430
|
-
*
|
|
431
|
-
* Because `active`/`idle` ghosts are the ones that jam surfaces, status is not a
|
|
432
|
-
* filter here — count-based pruning protects those rows precisely so daemon
|
|
433
|
-
* crash-recovery can resume them, and that reason does not survive the dir being
|
|
434
|
-
* gone.
|
|
435
|
-
*
|
|
436
|
-
* Refuses to act on "can't tell": an unreadable nodes root, or a readable one
|
|
437
|
-
* holding no node dirs at all while rows exist, reads as a detached or wiped
|
|
438
|
-
* store rather than per-node loss, and reaps nothing. Returns the reaped ids. */
|
|
439
|
-
export declare function reapGhostRows(): string[];
|
|
440
343
|
/** Count-based retention sweep: retain the `maxNodes` MOST-RECENTLY-ACTIVE
|
|
441
344
|
* nodes plus every row the collection authority retains, so the real retained
|
|
442
345
|
* floor is `max(maxNodes, retainedCount)`. Bounds the otherwise-unbounded growth
|
|
@@ -454,3 +357,4 @@ export declare function pruneToLimit(opts: {
|
|
|
454
357
|
maxNodes: number;
|
|
455
358
|
dryRun?: boolean;
|
|
456
359
|
}): PruneResult;
|
|
360
|
+
export {};
|