@adhdev/daemon-core 0.9.82-rc.49 → 0.9.82-rc.490
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/boot/daemon-lifecycle.d.ts +9 -0
- package/dist/boot/process-hardening.d.ts +50 -0
- package/dist/build-info.d.ts +37 -0
- package/dist/chat/source-machine.d.ts +166 -0
- package/dist/chat/source-resolver.d.ts +104 -0
- package/dist/chat/subscription-updates.d.ts +1 -0
- package/dist/cli-adapter-types.d.ts +68 -2
- package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
- package/dist/cli-adapters/cli-state-engine.d.ts +220 -0
- package/dist/cli-adapters/provider-cli-adapter.d.ts +137 -64
- package/dist/cli-adapters/provider-cli-parse.d.ts +5 -0
- package/dist/cli-adapters/provider-cli-runtime.d.ts +34 -0
- package/dist/cli-adapters/provider-cli-shared.d.ts +74 -0
- package/dist/cli-adapters/pty-write-chunking.d.ts +34 -0
- package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
- package/dist/cli-adapters/resolve-executable.d.ts +69 -0
- package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +6 -3
- package/dist/cli-adapters/terminal-backends/types.d.ts +10 -2
- package/dist/cli-adapters/terminal-screen.d.ts +4 -11
- package/dist/commands/chat-commands-debug-bundle.d.ts +14 -0
- package/dist/commands/chat-commands-read.d.ts +23 -0
- package/dist/commands/chat-commands-scope.d.ts +39 -0
- package/dist/commands/chat-commands-shared.d.ts +33 -0
- package/dist/commands/chat-commands-write.d.ts +14 -0
- package/dist/commands/chat-commands.d.ts +10 -23
- package/dist/commands/cli-manager.d.ts +71 -1
- package/dist/commands/handler.d.ts +125 -0
- package/dist/commands/high-family/index.d.ts +3 -0
- package/dist/commands/high-family/mesh-coordinator-launch.d.ts +2 -0
- package/dist/commands/high-family/mesh-events.d.ts +2 -0
- package/dist/commands/high-family/mesh-status.d.ts +2 -0
- package/dist/commands/high-family/types.d.ts +64 -0
- package/dist/commands/low-family/coordinator-prompt.d.ts +9 -0
- package/dist/commands/low-family/daemon-lifecycle.d.ts +2 -0
- package/dist/commands/low-family/diagnostics.d.ts +2 -0
- package/dist/commands/low-family/index.d.ts +3 -0
- package/dist/commands/low-family/mesh-ledger.d.ts +10 -0
- package/dist/commands/low-family/mesh-node-logs.d.ts +2 -0
- package/dist/commands/low-family/notification.d.ts +2 -0
- package/dist/commands/low-family/refine-config.d.ts +2 -0
- package/dist/commands/low-family/session-host.d.ts +2 -0
- package/dist/commands/low-family/spec-providerdev.d.ts +11 -0
- package/dist/commands/low-family/status-meta.d.ts +2 -0
- package/dist/commands/low-family/types.d.ts +33 -0
- package/dist/commands/med-family/cli-agent.d.ts +2 -0
- package/dist/commands/med-family/fast-forward.d.ts +2 -0
- package/dist/commands/med-family/ide.d.ts +10 -0
- package/dist/commands/med-family/index.d.ts +3 -0
- package/dist/commands/med-family/mesh-crud.d.ts +48 -0
- package/dist/commands/med-family/mesh-host-pairing.d.ts +2 -0
- package/dist/commands/med-family/mesh-queue.d.ts +2 -0
- package/dist/commands/med-family/mesh-restart.d.ts +2 -0
- package/dist/commands/med-family/types.d.ts +152 -0
- package/dist/commands/mesh-coordinator.d.ts +85 -1
- package/dist/commands/router-aggregate-status.d.ts +24 -0
- package/dist/commands/router-mesh-session-owner.d.ts +59 -0
- package/dist/commands/router-refine.d.ts +151 -0
- package/dist/commands/router-worktree-cleanup.d.ts +133 -0
- package/dist/commands/router.d.ts +203 -15
- package/dist/commands/upgrade-helper.d.ts +41 -1
- package/dist/config/chat-history.d.ts +11 -0
- package/dist/config/config.d.ts +19 -0
- package/dist/config/mesh-config.d.ts +65 -0
- package/dist/config/mesh-json-config.d.ts +199 -0
- package/dist/config/registry-resolver.d.ts +54 -0
- package/dist/config/repo-settings.d.ts +77 -0
- package/dist/config/state-store.d.ts +30 -0
- package/dist/daemon/dev-server.d.ts +0 -2
- package/dist/detection/cli-detector.d.ts +17 -0
- package/dist/detection/ide-detector.d.ts +13 -0
- package/dist/detection/win32-ide-version.d.ts +37 -0
- package/dist/git/change-impact-config.d.ts +159 -0
- package/dist/git/git-commands.d.ts +26 -2
- package/dist/git/git-diff.d.ts +6 -0
- package/dist/git/git-executor.d.ts +11 -0
- package/dist/git/git-status.d.ts +80 -0
- package/dist/git/git-types.d.ts +2 -50
- package/dist/git/git-worktree.d.ts +71 -1
- package/dist/git/index.d.ts +3 -1
- package/dist/index.d.ts +70 -17
- package/dist/index.js +53532 -19073
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +53283 -18989
- package/dist/index.mjs.map +1 -1
- package/dist/installer.d.ts +1 -4
- package/dist/ipc/local-ipc-server.d.ts +91 -0
- package/dist/launch.d.ts +1 -1
- package/dist/logging/async-batch-writer.d.ts +10 -0
- package/dist/logging/debug-config.d.ts +16 -0
- package/dist/logging/log-redactor.d.ts +24 -0
- package/dist/logging/log-tail-reader.d.ts +81 -0
- package/dist/logging/logger.d.ts +1 -1
- package/dist/mesh/contracts.d.ts +256 -0
- package/dist/mesh/coordinator-prompt.d.ts +76 -0
- package/dist/mesh/coordinator-registry.d.ts +59 -0
- package/dist/mesh/mesh-active-work.d.ts +203 -0
- package/dist/mesh/mesh-clone-grace.d.ts +8 -0
- package/dist/mesh/mesh-completion-synthesis.d.ts +4 -0
- package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
- package/dist/mesh/mesh-delivery-policy.d.ts +104 -0
- package/dist/mesh/mesh-event-classify.d.ts +7 -0
- package/dist/mesh/mesh-event-forwarding.d.ts +58 -0
- package/dist/mesh/mesh-event-trace.d.ts +21 -0
- package/dist/mesh/mesh-events-coordinator.d.ts +4 -0
- package/dist/mesh/mesh-events-pending.d.ts +258 -0
- package/dist/mesh/mesh-events-stale.d.ts +61 -0
- package/dist/mesh/mesh-events-utils.d.ts +75 -0
- package/dist/mesh/mesh-events.d.ts +6 -49
- package/dist/mesh/mesh-fast-forward.d.ts +81 -0
- package/dist/mesh/mesh-host-ownership.d.ts +21 -1
- package/dist/mesh/mesh-init.d.ts +128 -0
- package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
- package/dist/mesh/mesh-ledger.d.ts +139 -1
- package/dist/mesh/mesh-magi-status.d.ts +63 -0
- package/dist/mesh/mesh-missions.d.ts +281 -0
- package/dist/mesh/mesh-node-identity.d.ts +310 -0
- package/dist/mesh/mesh-queue-assignment.d.ts +162 -0
- package/dist/mesh/mesh-reconcile-acked-hold.d.ts +17 -0
- package/dist/mesh/mesh-reconcile-config.d.ts +6 -0
- package/dist/mesh/mesh-reconcile-identity.d.ts +6 -0
- package/dist/mesh/mesh-reconcile-loop.d.ts +84 -0
- package/dist/mesh/mesh-reconcile-v2-backstop.d.ts +16 -0
- package/dist/mesh/mesh-refine-batch.d.ts +68 -0
- package/dist/mesh/mesh-refine-gates.d.ts +457 -0
- package/dist/mesh/mesh-refine-status.d.ts +62 -0
- package/dist/mesh/mesh-remote-event-pull.d.ts +15 -0
- package/dist/mesh/mesh-review-inbox.d.ts +90 -0
- package/dist/mesh/mesh-routing.d.ts +70 -0
- package/dist/mesh/mesh-runtime-store.d.ts +567 -0
- package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
- package/dist/mesh/mesh-task-inflight.d.ts +46 -0
- package/dist/mesh/mesh-task-stats.d.ts +49 -0
- package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +34 -0
- package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
- package/dist/mesh/mesh-work-queue.d.ts +392 -1
- package/dist/mesh/preview-freshness.d.ts +28 -0
- package/dist/mesh/refine-config.d.ts +97 -0
- package/dist/mesh/worktree-bootstrap-config.d.ts +219 -0
- package/dist/providers/acp-provider-instance.d.ts +5 -0
- package/dist/providers/approval-utils.d.ts +46 -0
- package/dist/providers/chat-message-normalization.d.ts +58 -1
- package/dist/providers/cli-provider-effect-format.d.ts +30 -0
- package/dist/providers/cli-provider-history-dedup.d.ts +17 -0
- package/dist/providers/cli-provider-input-prompt.d.ts +12 -0
- package/dist/providers/cli-provider-instance-types.d.ts +45 -0
- package/dist/providers/cli-provider-instance.d.ts +426 -30
- package/dist/providers/cli-provider-status-helpers.d.ts +46 -0
- package/dist/providers/cli-provider-transcript-merge.d.ts +7 -0
- package/dist/providers/contracts.d.ts +196 -6
- package/dist/providers/external-sources.d.ts +71 -0
- package/dist/providers/manual-attendance.d.ts +79 -0
- package/dist/providers/native-history/antigravity-claim-registry.d.ts +39 -0
- package/dist/providers/native-history/antigravity-cli-transcript.d.ts +137 -0
- package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
- package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
- package/dist/providers/native-history/constants.d.ts +12 -0
- package/dist/providers/native-history/dispatcher.d.ts +44 -0
- package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
- package/dist/providers/native-history/index.d.ts +13 -0
- package/dist/providers/provider-instance-manager.d.ts +30 -0
- package/dist/providers/provider-instance.d.ts +31 -1
- package/dist/providers/provider-loader.d.ts +42 -5
- package/dist/providers/provider-trust.d.ts +31 -0
- package/dist/providers/read-chat-contract.d.ts +29 -0
- package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
- package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
- package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
- package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
- package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
- package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
- package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
- package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
- package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
- package/dist/providers/sdk/v1/index.d.ts +30 -0
- package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
- package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
- package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
- package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
- package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
- package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
- package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
- package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
- package/dist/providers/spec/adapter.d.ts +98 -0
- package/dist/providers/spec/cli-adapter.d.ts +223 -0
- package/dist/providers/spec/evaluator.d.ts +45 -0
- package/dist/providers/spec/fsm-driver.d.ts +449 -0
- package/dist/providers/spec/fsm-evaluator.d.ts +93 -0
- package/dist/providers/spec/fsm-loader.d.ts +14 -0
- package/dist/providers/spec/fsm-types.d.ts +202 -0
- package/dist/providers/spec/native-history-executor.d.ts +41 -0
- package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
- package/dist/providers/spec/route.d.ts +4 -0
- package/dist/providers/spec/types.d.ts +244 -0
- package/dist/providers/status-monitor.d.ts +7 -7
- package/dist/providers/transcript-v2.d.ts +176 -0
- package/dist/providers/types/interactive-prompt.d.ts +84 -0
- package/dist/providers/working-dir.d.ts +17 -0
- package/dist/repo-mesh-types.d.ts +616 -12
- package/dist/runtime-defaults.d.ts +2 -0
- package/dist/session-host/managed-host.d.ts +64 -0
- package/dist/session-host/runtime-surface.d.ts +10 -16
- package/dist/sessions/registry.d.ts +26 -0
- package/dist/shared-types-extra.d.ts +2 -4
- package/dist/shared-types.d.ts +110 -55
- package/dist/status/chat-tail-hot-sessions.d.ts +40 -0
- package/dist/status/normalize.d.ts +1 -1
- package/dist/status/normalize.js +1 -0
- package/dist/status/normalize.js.map +1 -1
- package/dist/status/normalize.mjs +1 -0
- package/dist/status/normalize.mjs.map +1 -1
- package/dist/status/reporter.d.ts +2 -0
- package/dist/status/snapshot.d.ts +27 -0
- package/dist/system/hash.d.ts +8 -0
- package/dist/system/load-better-sqlite3.d.ts +21 -0
- package/dist/types.d.ts +20 -6
- package/package.json +11 -4
- package/src/agent-stream/poller.ts +2 -3
- package/src/agent-stream/provider-adapter.ts +1 -1
- package/src/boot/daemon-lifecycle.ts +80 -14
- package/src/boot/process-hardening.ts +89 -0
- package/src/build-info.ts +73 -0
- package/src/chat/source-machine.ts +534 -0
- package/src/chat/source-resolver.ts +0 -0
- package/src/chat/subscription-updates.ts +20 -1
- package/src/cli-adapter-types.d.ts +3 -1
- package/src/cli-adapter-types.ts +68 -2
- package/src/cli-adapters/cli-script-runner.ts +421 -0
- package/src/cli-adapters/cli-state-engine.ts +1282 -0
- package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
- package/src/cli-adapters/provider-cli-adapter.ts +1048 -1143
- package/src/cli-adapters/provider-cli-parse.d.ts +2 -0
- package/src/cli-adapters/provider-cli-parse.ts +19 -0
- package/src/cli-adapters/provider-cli-runtime.ts +56 -7
- package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
- package/src/cli-adapters/provider-cli-shared.ts +121 -11
- package/src/cli-adapters/pty-transport.ts +2 -1
- package/src/cli-adapters/pty-write-chunking.ts +106 -0
- package/src/cli-adapters/raw-terminal-io.ts +252 -0
- package/src/cli-adapters/resolve-executable.ts +204 -0
- package/src/cli-adapters/session-host-transport.ts +2 -1
- package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +63 -29
- package/src/cli-adapters/terminal-backends/types.ts +10 -3
- package/src/cli-adapters/terminal-screen.ts +16 -81
- package/src/commands/chat-commands-debug-bundle.ts +398 -0
- package/src/commands/chat-commands-read.ts +2788 -0
- package/src/commands/chat-commands-scope.ts +54 -0
- package/src/commands/chat-commands-shared.ts +114 -0
- package/src/commands/chat-commands-write.ts +891 -0
- package/src/commands/chat-commands.ts +19 -1841
- package/src/commands/cli-manager.d.ts +2 -0
- package/src/commands/cli-manager.ts +724 -27
- package/src/commands/handler.ts +865 -2
- package/src/commands/high-family/index.ts +28 -0
- package/src/commands/high-family/mesh-coordinator-launch.ts +696 -0
- package/src/commands/high-family/mesh-events.ts +102 -0
- package/src/commands/high-family/mesh-status.ts +857 -0
- package/src/commands/high-family/types.ts +80 -0
- package/src/commands/low-family/coordinator-prompt.ts +125 -0
- package/src/commands/low-family/daemon-lifecycle.ts +120 -0
- package/src/commands/low-family/diagnostics.ts +57 -0
- package/src/commands/low-family/index.ts +37 -0
- package/src/commands/low-family/mesh-ledger.ts +62 -0
- package/src/commands/low-family/mesh-node-logs.ts +87 -0
- package/src/commands/low-family/notification.ts +116 -0
- package/src/commands/low-family/refine-config.ts +106 -0
- package/src/commands/low-family/session-host.ts +282 -0
- package/src/commands/low-family/spec-providerdev.ts +217 -0
- package/src/commands/low-family/status-meta.ts +112 -0
- package/src/commands/low-family/types.ts +39 -0
- package/src/commands/med-family/cli-agent.ts +270 -0
- package/src/commands/med-family/fast-forward.ts +230 -0
- package/src/commands/med-family/ide.ts +163 -0
- package/src/commands/med-family/index.ts +37 -0
- package/src/commands/med-family/mesh-crud.ts +1268 -0
- package/src/commands/med-family/mesh-host-pairing.ts +234 -0
- package/src/commands/med-family/mesh-queue.ts +167 -0
- package/src/commands/med-family/mesh-restart.ts +92 -0
- package/src/commands/med-family/types.ts +153 -0
- package/src/commands/mesh-coordinator.ts +334 -124
- package/src/commands/router-aggregate-status.ts +209 -0
- package/src/commands/router-mesh-session-owner.ts +114 -0
- package/src/commands/router-refine.ts +1794 -0
- package/src/commands/router-worktree-cleanup.ts +870 -0
- package/src/commands/router.ts +567 -4149
- package/src/commands/stream-commands.ts +8 -0
- package/src/commands/upgrade-helper.ts +310 -45
- package/src/config/chat-history.ts +517 -24
- package/src/config/config.ts +30 -0
- package/src/config/mesh-config.ts +300 -24
- package/src/config/mesh-json-config.ts +376 -0
- package/src/config/recent-activity.ts +8 -2
- package/src/config/registry-resolver.ts +100 -0
- package/src/config/repo-settings.ts +111 -0
- package/src/config/state-store.ts +55 -0
- package/src/daemon/dev-auto-implement.ts +3 -2
- package/src/daemon/dev-cli-debug.ts +10 -1
- package/src/daemon/dev-server.ts +0 -541
- package/src/detection/cli-detector.ts +94 -9
- package/src/detection/ide-detector.ts +55 -16
- package/src/detection/win32-ide-version.ts +106 -0
- package/src/git/change-impact-config.ts +354 -0
- package/src/git/git-commands.ts +112 -16
- package/src/git/git-diff.ts +81 -11
- package/src/git/git-executor.ts +12 -0
- package/src/git/git-status.ts +822 -48
- package/src/git/git-types.ts +14 -62
- package/src/git/git-worktree.ts +261 -4
- package/src/git/index.ts +17 -0
- package/src/index.ts +190 -13
- package/src/installer.d.ts +1 -1
- package/src/installer.ts +8 -6
- package/src/ipc/local-ipc-server.ts +278 -0
- package/src/launch.d.ts +1 -1
- package/src/launch.ts +37 -28
- package/src/logging/async-batch-writer.ts +55 -0
- package/src/logging/command-log.ts +7 -5
- package/src/logging/debug-config.ts +25 -0
- package/src/logging/debug-trace.ts +7 -2
- package/src/logging/log-redactor.ts +100 -0
- package/src/logging/log-tail-reader.ts +341 -0
- package/src/logging/logger.ts +14 -7
- package/src/mesh/contracts.ts +510 -0
- package/src/mesh/coordinator-prompt.ts +627 -34
- package/src/mesh/coordinator-registry.ts +121 -0
- package/src/mesh/mesh-active-work.ts +706 -0
- package/src/mesh/mesh-clone-grace.ts +68 -0
- package/src/mesh/mesh-completion-synthesis.ts +416 -0
- package/src/mesh/mesh-coordinator-config.ts +97 -0
- package/src/mesh/mesh-delivery-policy.ts +284 -0
- package/src/mesh/mesh-event-classify.ts +78 -0
- package/src/mesh/mesh-event-forwarding.ts +2030 -0
- package/src/mesh/mesh-event-trace.ts +67 -0
- package/src/mesh/mesh-events-coordinator.ts +32 -0
- package/src/mesh/mesh-events-pending.ts +1548 -0
- package/src/mesh/mesh-events-stale.ts +452 -0
- package/src/mesh/mesh-events-utils.ts +443 -0
- package/src/mesh/mesh-events.ts +43 -1035
- package/src/mesh/mesh-fast-forward.ts +856 -0
- package/src/mesh/mesh-host-ownership.ts +41 -3
- package/src/mesh/mesh-init.ts +350 -0
- package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
- package/src/mesh/mesh-ledger.ts +897 -102
- package/src/mesh/mesh-magi-status.ts +223 -0
- package/src/mesh/mesh-missions.ts +695 -0
- package/src/mesh/mesh-node-identity.ts +2065 -0
- package/src/mesh/mesh-queue-assignment.ts +2498 -0
- package/src/mesh/mesh-reconcile-acked-hold.ts +230 -0
- package/src/mesh/mesh-reconcile-config.ts +66 -0
- package/src/mesh/mesh-reconcile-identity.ts +103 -0
- package/src/mesh/mesh-reconcile-loop.ts +1696 -0
- package/src/mesh/mesh-reconcile-v2-backstop.ts +62 -0
- package/src/mesh/mesh-refine-batch.ts +205 -0
- package/src/mesh/mesh-refine-gates.ts +1792 -0
- package/src/mesh/mesh-refine-status.ts +231 -0
- package/src/mesh/mesh-remote-event-pull.ts +279 -0
- package/src/mesh/mesh-review-inbox.ts +308 -0
- package/src/mesh/mesh-routing.ts +291 -0
- package/src/mesh/mesh-runtime-store.ts +2292 -0
- package/src/mesh/mesh-scheduling-runtime.ts +198 -0
- package/src/mesh/mesh-task-inflight.ts +70 -0
- package/src/mesh/mesh-task-stats.ts +161 -0
- package/src/mesh/mesh-unresolved-forward-outbox.ts +215 -0
- package/src/mesh/mesh-warmup-deadline.ts +152 -0
- package/src/mesh/mesh-work-queue.ts +1489 -145
- package/src/mesh/preview-freshness.ts +163 -0
- package/src/mesh/refine-config.ts +129 -12
- package/src/mesh/worktree-bootstrap-config.ts +599 -0
- package/src/providers/acp-provider-instance.ts +43 -10
- package/src/providers/approval-utils.d.ts +5 -0
- package/src/providers/approval-utils.ts +100 -6
- package/src/providers/chat-message-normalization.ts +126 -4
- package/src/providers/cli-provider-effect-format.ts +53 -0
- package/src/providers/cli-provider-history-dedup.ts +75 -0
- package/src/providers/cli-provider-input-prompt.ts +133 -0
- package/src/providers/cli-provider-instance-types.ts +131 -0
- package/src/providers/cli-provider-instance.ts +2771 -499
- package/src/providers/cli-provider-status-helpers.ts +123 -0
- package/src/providers/cli-provider-transcript-merge.ts +114 -0
- package/src/providers/contracts.d.ts +55 -0
- package/src/providers/contracts.ts +207 -6
- package/src/providers/extension-provider-instance.ts +12 -7
- package/src/providers/external-sources.ts +218 -0
- package/src/providers/ide-provider-instance.ts +35 -12
- package/src/providers/manual-attendance.ts +105 -0
- package/src/providers/native-history/antigravity-claim-registry.ts +138 -0
- package/src/providers/native-history/antigravity-cli-transcript.ts +1275 -0
- package/src/providers/native-history/claude-cli-transcript.ts +396 -0
- package/src/providers/native-history/codex-cli-transcript.ts +479 -0
- package/src/providers/native-history/constants.ts +19 -0
- package/src/providers/native-history/dispatcher.ts +617 -0
- package/src/providers/native-history/hermes-cli-transcript.ts +312 -0
- package/src/providers/native-history/index.ts +30 -0
- package/src/providers/provider-instance-manager.ts +71 -0
- package/src/providers/provider-instance.ts +24 -1
- package/src/providers/provider-loader.ts +700 -55
- package/src/providers/provider-schema.ts +93 -14
- package/src/providers/provider-trust.ts +114 -0
- package/src/providers/read-chat-contract.ts +76 -16
- package/src/providers/sdk/README.md +49 -0
- package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
- package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
- package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
- package/src/providers/sdk/v1/builders/cli/parse-approval.ts +261 -0
- package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
- package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
- package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
- package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
- package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
- package/src/providers/sdk/v1/index.ts +152 -0
- package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
- package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
- package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
- package/src/providers/sdk/v1/schemas/cli/provider.schema.json +538 -0
- package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
- package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
- package/src/providers/sdk/v1/types/cli/index.ts +365 -0
- package/src/providers/sdk/v1/types/common/index.ts +229 -0
- package/src/providers/sdk/v1/validators/index.ts +19 -0
- package/src/providers/sdk/v1/validators/manifest.ts +110 -0
- package/src/providers/sdk/v1/validators/taint.ts +309 -0
- package/src/providers/spec/adapter.ts +246 -0
- package/src/providers/spec/cli-adapter.ts +1064 -0
- package/src/providers/spec/evaluator.ts +407 -0
- package/src/providers/spec/fsm-driver.ts +1528 -0
- package/src/providers/spec/fsm-evaluator.ts +290 -0
- package/src/providers/spec/fsm-loader.ts +128 -0
- package/src/providers/spec/fsm-types.ts +301 -0
- package/src/providers/spec/native-history-executor.ts +1241 -0
- package/src/providers/spec/pre-launch-trust.ts +104 -0
- package/src/providers/spec/route.ts +51 -0
- package/src/providers/spec/types.ts +284 -0
- package/src/providers/status-monitor.d.ts +7 -7
- package/src/providers/status-monitor.ts +37 -22
- package/src/providers/transcript-v2.ts +567 -0
- package/src/providers/types/interactive-prompt.ts +536 -0
- package/src/providers/version-archive.ts +64 -24
- package/src/providers/working-dir.ts +23 -0
- package/src/repo-mesh-types.ts +861 -14
- package/src/runtime-defaults.ts +39 -0
- package/src/session-host/managed-host.ts +218 -0
- package/src/session-host/runtime-surface.ts +20 -80
- package/src/sessions/registry.ts +44 -0
- package/src/shared-types-extra.ts +2 -4
- package/src/shared-types.d.ts +8 -0
- package/src/shared-types.ts +148 -55
- package/src/status/builders.ts +69 -6
- package/src/status/chat-tail-hot-sessions.ts +117 -2
- package/src/status/normalize.ts +2 -0
- package/src/status/reporter.ts +19 -1
- package/src/status/snapshot.ts +100 -27
- package/src/system/hash.ts +23 -0
- package/src/system/host-memory.ts +29 -12
- package/src/system/load-better-sqlite3.ts +68 -0
- package/src/types.ts +26 -6
- package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
- package/dist/mesh/mesh-sync.d.ts +0 -53
- package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
- package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
- package/src/mesh/mesh-sync.ts +0 -111
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregate mesh-status cache — extracted from router.ts (behavior-preserving code move).
|
|
3
|
+
*
|
|
4
|
+
* These functions were `DaemonCommandRouter` methods; they now take the router
|
|
5
|
+
* instance as `self`. The class keeps thin delegating wrappers
|
|
6
|
+
* (getCachedAggregateMeshStatus / rememberAggregateMeshStatus are bound into
|
|
7
|
+
* HighFamilyContext — intra-cluster calls therefore go through `self.` so instance
|
|
8
|
+
* dispatch is preserved). No log string, error message, refusal condition, or
|
|
9
|
+
* result shape changed — only physical location + `this.` → `self.`.
|
|
10
|
+
*
|
|
11
|
+
* The group is self-contained: it reads only `self.aggregateMeshStatusCache` and
|
|
12
|
+
* imported mesh-node-identity / mesh-work-queue helpers. It does NOT touch the
|
|
13
|
+
* inline-mesh cache cluster, so the move is a pure lift.
|
|
14
|
+
*/
|
|
15
|
+
import type { DaemonCommandRouter } from './router.js';
|
|
16
|
+
import { normalizeMeshNodeId } from '@adhdev/mesh-shared';
|
|
17
|
+
import { getMeshQueueRevision } from '../mesh/mesh-work-queue.js';
|
|
18
|
+
import {
|
|
19
|
+
applyInlineMeshBranchConvergence,
|
|
20
|
+
buildInlineMeshTransitGitStatus,
|
|
21
|
+
buildLivePeerGitConnection,
|
|
22
|
+
deriveMeshNodeHealthFromGit,
|
|
23
|
+
isDeadLocalWorktreeNode,
|
|
24
|
+
readBooleanValue,
|
|
25
|
+
readInlineMeshNodeId,
|
|
26
|
+
readObjectRecord,
|
|
27
|
+
readStringValue,
|
|
28
|
+
shouldRefreshStalePendingAggregate,
|
|
29
|
+
summarizeInlineMeshBranchConvergence,
|
|
30
|
+
} from '../mesh/mesh-node-identity.js';
|
|
31
|
+
|
|
32
|
+
export function cloneJsonValue<T>(value: T): T {
|
|
33
|
+
if (typeof structuredClone === 'function') return structuredClone(value);
|
|
34
|
+
return JSON.parse(JSON.stringify(value)) as T;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function hydrateCachedAggregateMeshStatusFromInline(
|
|
38
|
+
self: DaemonCommandRouter,
|
|
39
|
+
snapshot: any,
|
|
40
|
+
mesh: any,
|
|
41
|
+
options?: { requireDirectPeerTruth?: boolean },
|
|
42
|
+
): any {
|
|
43
|
+
if (!mesh || typeof mesh !== 'object' || !Array.isArray(mesh.nodes) || !Array.isArray(snapshot?.nodes)) return snapshot;
|
|
44
|
+
const inlineNodesById = new Map<string, any>();
|
|
45
|
+
for (const node of mesh.nodes) {
|
|
46
|
+
const nodeId = readInlineMeshNodeId(node);
|
|
47
|
+
if (nodeId) inlineNodesById.set(nodeId, node);
|
|
48
|
+
}
|
|
49
|
+
if (!inlineNodesById.size) return snapshot;
|
|
50
|
+
|
|
51
|
+
let changed = false;
|
|
52
|
+
const unavailableNodeIds = new Set<string>();
|
|
53
|
+
const sourceOfTruth = readObjectRecord(snapshot.sourceOfTruth);
|
|
54
|
+
const directPeerTruth = readObjectRecord(sourceOfTruth.directPeerTruth);
|
|
55
|
+
// Dead local worktree nodes (isLocalWorktree, workspace deleted from disk)
|
|
56
|
+
// carry no live truth and must never gate the aggregate as unavailable.
|
|
57
|
+
// A cached snapshot built before the worktree was removed can still list
|
|
58
|
+
// such a node in unavailableNodeIds, which would wedge the graph in a
|
|
59
|
+
// permanent direct_peer_truth_unavailable; drop them here so the held
|
|
60
|
+
// standing-state truth for the surviving nodes satisfies the aggregate.
|
|
61
|
+
const deadNodeIds = new Set<string>();
|
|
62
|
+
for (const node of mesh.nodes) {
|
|
63
|
+
if (!isDeadLocalWorktreeNode(node)) continue;
|
|
64
|
+
const deadId = readInlineMeshNodeId(node);
|
|
65
|
+
if (deadId) deadNodeIds.add(deadId);
|
|
66
|
+
}
|
|
67
|
+
let droppedDeadUnavailable = false;
|
|
68
|
+
for (const entry of Array.isArray(directPeerTruth.unavailableNodeIds) ? directPeerTruth.unavailableNodeIds : []) {
|
|
69
|
+
const nodeId = readStringValue(entry);
|
|
70
|
+
if (!nodeId) continue;
|
|
71
|
+
if (deadNodeIds.has(nodeId)) {
|
|
72
|
+
droppedDeadUnavailable = true;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
unavailableNodeIds.add(nodeId);
|
|
76
|
+
}
|
|
77
|
+
// Force a rewrite when a dead worktree was filtered out of a previously
|
|
78
|
+
// built unavailable set, even if no live git was re-hydrated this pass —
|
|
79
|
+
// otherwise the early-return below would hand back the stale snapshot that
|
|
80
|
+
// still says direct_peer_truth_unavailable.
|
|
81
|
+
if (droppedDeadUnavailable) changed = true;
|
|
82
|
+
|
|
83
|
+
const nodes = snapshot.nodes.map((statusNode: any) => {
|
|
84
|
+
const nodeId = normalizeMeshNodeId(statusNode);
|
|
85
|
+
const inlineNode = nodeId ? inlineNodesById.get(nodeId) : undefined;
|
|
86
|
+
if (!inlineNode) return statusNode;
|
|
87
|
+
const liveGit = buildInlineMeshTransitGitStatus(inlineNode);
|
|
88
|
+
if (!liveGit) return statusNode;
|
|
89
|
+
const nextStatus = { ...statusNode };
|
|
90
|
+
nextStatus.git = liveGit;
|
|
91
|
+
nextStatus.health = deriveMeshNodeHealthFromGit(liveGit);
|
|
92
|
+
applyInlineMeshBranchConvergence(mesh, inlineNode, nextStatus);
|
|
93
|
+
nextStatus.launchReady = readBooleanValue(nextStatus.launchReady) ?? true;
|
|
94
|
+
const connection = readObjectRecord(nextStatus.connection);
|
|
95
|
+
const connectionState = readStringValue(connection.state);
|
|
96
|
+
const connectionReported = readBooleanValue(connection.reported) ?? false;
|
|
97
|
+
if (!connectionReported || connectionState === 'unknown') {
|
|
98
|
+
nextStatus.connection = buildLivePeerGitConnection(connection);
|
|
99
|
+
}
|
|
100
|
+
delete nextStatus.gitProbePending;
|
|
101
|
+
const error = readStringValue(nextStatus.error);
|
|
102
|
+
if (error && /pending_git|git probe|live peer git snapshot|no peer git snapshot/i.test(error)) delete nextStatus.error;
|
|
103
|
+
if (!readStringValue(nextStatus.machineStatus)) nextStatus.machineStatus = 'online';
|
|
104
|
+
if (nodeId) unavailableNodeIds.delete(nodeId);
|
|
105
|
+
changed = true;
|
|
106
|
+
return nextStatus;
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
const aggregateDirectTruthSatisfied = sourceOfTruth.coordinatorOwnsLiveTruth === true
|
|
110
|
+
|| directPeerTruth.satisfied === true;
|
|
111
|
+
if (!changed && !(options?.requireDirectPeerTruth && unavailableNodeIds.size > 0 && !aggregateDirectTruthSatisfied)) return snapshot;
|
|
112
|
+
const nextSourceOfTruth = {
|
|
113
|
+
...sourceOfTruth,
|
|
114
|
+
...(Object.keys(directPeerTruth).length ? {
|
|
115
|
+
directPeerTruth: {
|
|
116
|
+
...directPeerTruth,
|
|
117
|
+
satisfied: options?.requireDirectPeerTruth === true
|
|
118
|
+
? aggregateDirectTruthSatisfied || unavailableNodeIds.size === 0
|
|
119
|
+
: directPeerTruth.satisfied,
|
|
120
|
+
unavailableNodeIds: [...unavailableNodeIds],
|
|
121
|
+
},
|
|
122
|
+
...(options?.requireDirectPeerTruth === true ? {
|
|
123
|
+
coordinatorOwnsLiveTruth: aggregateDirectTruthSatisfied || unavailableNodeIds.size === 0,
|
|
124
|
+
currentStatus: aggregateDirectTruthSatisfied || unavailableNodeIds.size === 0 ? 'live_git_and_session_probes' : 'direct_peer_truth_unavailable',
|
|
125
|
+
} : {}),
|
|
126
|
+
} : {}),
|
|
127
|
+
};
|
|
128
|
+
return {
|
|
129
|
+
...snapshot,
|
|
130
|
+
...(options?.requireDirectPeerTruth === true && unavailableNodeIds.size > 0 && !aggregateDirectTruthSatisfied ? {
|
|
131
|
+
success: false,
|
|
132
|
+
code: 'mesh_direct_peer_truth_unavailable',
|
|
133
|
+
error: 'Selected coordinator could not confirm direct mesh truth for every remote node yet.',
|
|
134
|
+
} : {}),
|
|
135
|
+
sourceOfTruth: nextSourceOfTruth,
|
|
136
|
+
branchConvergenceSummary: summarizeInlineMeshBranchConvergence(nodes),
|
|
137
|
+
nodes,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function getCachedAggregateMeshStatus(
|
|
142
|
+
self: DaemonCommandRouter,
|
|
143
|
+
meshId: string,
|
|
144
|
+
mesh?: any,
|
|
145
|
+
options?: { requireDirectPeerTruth?: boolean; allowStalePending?: boolean },
|
|
146
|
+
): any | null {
|
|
147
|
+
const cached = self.aggregateMeshStatusCache.get(meshId);
|
|
148
|
+
if (!cached?.snapshot || cached.snapshot.success !== true || !Array.isArray(cached.snapshot.nodes)) return null;
|
|
149
|
+
// Genuine invalidation still forces truth: a queue mutation bumps the
|
|
150
|
+
// revision, so a stale-revision snapshot is never served (even under the
|
|
151
|
+
// SWR allowStalePending path below).
|
|
152
|
+
if (cached.queueRevision !== getMeshQueueRevision(meshId)) return null;
|
|
153
|
+
let snapshot = cloneJsonValue(cached.snapshot);
|
|
154
|
+
snapshot = hydrateCachedAggregateMeshStatusFromInline(self, snapshot, mesh, options);
|
|
155
|
+
// SWR: allowStalePending lets the interactive detail-open serve a snapshot
|
|
156
|
+
// that still has pending peer-git nodes (would otherwise miss here) so the
|
|
157
|
+
// graph paints instantly; the caller fires a background freshen. The
|
|
158
|
+
// queueRevision guard above is NOT relaxed — only the pending-git freshness
|
|
159
|
+
// gate is, so a genuine queue/identity mutation still forces a live rebuild.
|
|
160
|
+
if (!options?.allowStalePending && shouldRefreshStalePendingAggregate(snapshot, options)) return null;
|
|
161
|
+
const ageMs = Math.max(0, Date.now() - cached.builtAt);
|
|
162
|
+
const sourceOfTruth = snapshot.sourceOfTruth && typeof snapshot.sourceOfTruth === 'object'
|
|
163
|
+
? snapshot.sourceOfTruth
|
|
164
|
+
: {};
|
|
165
|
+
snapshot.sourceOfTruth = {
|
|
166
|
+
...sourceOfTruth,
|
|
167
|
+
aggregateSnapshot: {
|
|
168
|
+
...(sourceOfTruth.aggregateSnapshot && typeof sourceOfTruth.aggregateSnapshot === 'object'
|
|
169
|
+
? sourceOfTruth.aggregateSnapshot
|
|
170
|
+
: {}),
|
|
171
|
+
owner: 'coordinator_daemon_memory',
|
|
172
|
+
cached: true,
|
|
173
|
+
source: 'memory',
|
|
174
|
+
refreshReason: 'memory_cache_hit',
|
|
175
|
+
ageMs,
|
|
176
|
+
cachedAt: new Date(cached.builtAt).toISOString(),
|
|
177
|
+
returnedAt: new Date().toISOString(),
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
return snapshot;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export function rememberAggregateMeshStatus(
|
|
184
|
+
self: DaemonCommandRouter,
|
|
185
|
+
meshId: string,
|
|
186
|
+
snapshot: any,
|
|
187
|
+
refreshReason: string,
|
|
188
|
+
): any {
|
|
189
|
+
if (!snapshot || typeof snapshot !== 'object' || snapshot.success !== true || !Array.isArray(snapshot.nodes)) return snapshot;
|
|
190
|
+
const builtAt = Date.now();
|
|
191
|
+
const next = cloneJsonValue(snapshot);
|
|
192
|
+
const sourceOfTruth = next.sourceOfTruth && typeof next.sourceOfTruth === 'object'
|
|
193
|
+
? next.sourceOfTruth
|
|
194
|
+
: {};
|
|
195
|
+
next.sourceOfTruth = {
|
|
196
|
+
...sourceOfTruth,
|
|
197
|
+
aggregateSnapshot: {
|
|
198
|
+
owner: 'coordinator_daemon_memory',
|
|
199
|
+
cached: false,
|
|
200
|
+
source: 'live_refresh',
|
|
201
|
+
refreshReason,
|
|
202
|
+
ageMs: 0,
|
|
203
|
+
cachedAt: new Date(builtAt).toISOString(),
|
|
204
|
+
returnedAt: new Date(builtAt).toISOString(),
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
self.aggregateMeshStatusCache.set(meshId, { builtAt, snapshot: cloneJsonValue(next), queueRevision: getMeshQueueRevision(meshId) });
|
|
208
|
+
return next;
|
|
209
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote mesh-session owner resolution — extracted from router.ts (behavior-preserving code move).
|
|
3
|
+
*
|
|
4
|
+
* These functions were `DaemonCommandRouter` methods; they now take the router
|
|
5
|
+
* instance as `self`. resolveRemoteMeshSessionOwnerDaemonId stays reachable as a
|
|
6
|
+
* public method (the [Z] session-scoped forward in executeDaemonCommand and the
|
|
7
|
+
* mesh-session-scoped-remote-forward test call it), so the class keeps a thin
|
|
8
|
+
* delegating wrapper. No log string, error message, refusal condition, or result
|
|
9
|
+
* shape changed — only physical location + `this.` → `self.`.
|
|
10
|
+
*
|
|
11
|
+
* The group is read-only: it reads self.deps.statusInstanceId, the cached inline-mesh
|
|
12
|
+
* nodes, and the aggregate-status snapshot nodes. It never mutates router state.
|
|
13
|
+
*/
|
|
14
|
+
import type { DaemonCommandRouter } from './router.js';
|
|
15
|
+
import { meshNodeIdMatches, daemonIdsEquivalent } from '@adhdev/mesh-shared';
|
|
16
|
+
import {
|
|
17
|
+
collectMeshNodeHostedSessionIds,
|
|
18
|
+
readMeshNodeDaemonId,
|
|
19
|
+
readObjectRecord,
|
|
20
|
+
} from '../mesh/mesh-node-identity.js';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the REMOTE worker daemonId that owns a given session, when the session
|
|
24
|
+
* belongs to a mesh node hosted on a DIFFERENT daemon than this coordinator.
|
|
25
|
+
*
|
|
26
|
+
* The coordinator does not host remote-worker session instances in its own
|
|
27
|
+
* instanceManager/sessionRegistry — only their cached mesh-node metadata. A
|
|
28
|
+
* dashboard-issued session-scoped command (invoke_provider_script / resolve_action /
|
|
29
|
+
* set_mode / …) lands on the coordinator with a targetSessionId the coordinator can't
|
|
30
|
+
* find locally, and without forwarding it dies as "Live session not found". send_chat
|
|
31
|
+
* happens to survive (its target resolves to the worker by another route), but the
|
|
32
|
+
* controlbar commands do not — so the controlbar buttons appear to do nothing.
|
|
33
|
+
*
|
|
34
|
+
* Mirror the existing node-level remote-forward pattern (fast_forward_mesh_node etc.):
|
|
35
|
+
* scan the candidate mesh nodes for the one hosting the targetSessionId, and return its
|
|
36
|
+
* daemonId when that daemonId is a remote daemon (i.e. not this coordinator's own
|
|
37
|
+
* statusInstanceId). Returns undefined for a locally-hosted session (no forward — execute
|
|
38
|
+
* locally as before) or when ownership can't be resolved.
|
|
39
|
+
*
|
|
40
|
+
* The candidate set spans BOTH the cached inline-mesh nodes and the live aggregate
|
|
41
|
+
* mesh-status snapshots. The inline cache reliably carries only each node's single primary
|
|
42
|
+
* session (cachedStatus.activeSession), so a worker hosting more than one session exposes its
|
|
43
|
+
* non-primary sessions only on the aggregate snapshot nodes (status.activeSessions /
|
|
44
|
+
* activeSessionDetails, built from live session records). collectMeshNodeHostedSessionIds does
|
|
45
|
+
* the wider plural-shape scan so a controlbar/modal command targeting a non-primary remote
|
|
46
|
+
* session still resolves its owner — the singular readCachedInlineMeshActiveSessions semantics
|
|
47
|
+
* other consumers depend on stay untouched.
|
|
48
|
+
*
|
|
49
|
+
* CANCEL-STOP-RELAY: the session-id cache scan above only matches when the coordinator's
|
|
50
|
+
* cached status snapshot already lists the worker's session id in a recognized active-sessions
|
|
51
|
+
* shape. A worktree-clone worker session whose id form/timing differs from the cached snapshot
|
|
52
|
+
* (or is simply not yet reflected) misses the scan, so a stop that carries the authoritative
|
|
53
|
+
* owning nodeId (mesh_queue_cancel knows assignedNodeId) used to silently fail to forward.
|
|
54
|
+
* `ownerNodeIdHint` adds a deterministic fallback: when the session-id scan misses, resolve the
|
|
55
|
+
* owner daemonId by matching the node by id (meshNodeIdMatches — same form-tolerant compare the
|
|
56
|
+
* rest of the router uses, no new raw compare). The same self-loopback guard applies to both
|
|
57
|
+
* paths, so a coordinator-hosted node is still never force-forwarded to a remote form of itself.
|
|
58
|
+
*/
|
|
59
|
+
export function resolveRemoteMeshSessionOwnerDaemonId(
|
|
60
|
+
self: DaemonCommandRouter,
|
|
61
|
+
sessionId: string,
|
|
62
|
+
ownerNodeIdHint?: string,
|
|
63
|
+
): string | undefined {
|
|
64
|
+
const trimmed = typeof sessionId === 'string' ? sessionId.trim() : '';
|
|
65
|
+
const nodeHint = typeof ownerNodeIdHint === 'string' ? ownerNodeIdHint.trim() : '';
|
|
66
|
+
if (!trimmed && !nodeHint) return undefined;
|
|
67
|
+
const selfDaemonId = self.deps.statusInstanceId;
|
|
68
|
+
const candidates = collectMeshSessionOwnerCandidateNodes(self);
|
|
69
|
+
if (trimmed) {
|
|
70
|
+
for (const node of candidates) {
|
|
71
|
+
if (!collectMeshNodeHostedSessionIds(node).has(trimmed)) continue;
|
|
72
|
+
const nodeDaemonId = readMeshNodeDaemonId(readObjectRecord(node));
|
|
73
|
+
// A matching node with no readable daemonId can't be attributed — keep scanning
|
|
74
|
+
// the remaining candidates (e.g. the same session on an aggregate node that does
|
|
75
|
+
// carry the daemonId) rather than bailing on the whole resolution.
|
|
76
|
+
if (!nodeDaemonId) continue;
|
|
77
|
+
// Only forward to a genuinely remote daemon. When the owning node is this
|
|
78
|
+
// coordinator itself (locally hosted worker), fall through to local handling.
|
|
79
|
+
// id-form robust: the node daemonId and selfDaemonId may be stored in different
|
|
80
|
+
// forms of the same machine — a strict `===` would miss the self-match and forward
|
|
81
|
+
// a local session to a remote form of THIS daemon (loopback).
|
|
82
|
+
if (selfDaemonId && daemonIdsEquivalent(nodeDaemonId, selfDaemonId)) return undefined;
|
|
83
|
+
return nodeDaemonId;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Deterministic fallback: the session-id scan missed (cache lag / id-form mismatch on a
|
|
87
|
+
// worktree-clone worker), but the caller knows the authoritative owning nodeId. Resolve the
|
|
88
|
+
// owner daemonId straight off that node — never the fuzzy session cache.
|
|
89
|
+
if (nodeHint) {
|
|
90
|
+
for (const node of candidates) {
|
|
91
|
+
if (!meshNodeIdMatches(node, nodeHint)) continue;
|
|
92
|
+
const nodeDaemonId = readMeshNodeDaemonId(readObjectRecord(node));
|
|
93
|
+
if (!nodeDaemonId) continue;
|
|
94
|
+
if (selfDaemonId && daemonIdsEquivalent(nodeDaemonId, selfDaemonId)) return undefined;
|
|
95
|
+
return nodeDaemonId;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Candidate nodes for remote-session owner resolution: the cached inline-mesh nodes (which
|
|
103
|
+
* carry each node's primary session) plus the nodes from every cached aggregate mesh-status
|
|
104
|
+
* snapshot (which carry each node's full live session list). getCachedInlineMeshNodes()
|
|
105
|
+
* returns a fresh array, so appending the aggregate nodes never mutates cached state.
|
|
106
|
+
*/
|
|
107
|
+
export function collectMeshSessionOwnerCandidateNodes(self: DaemonCommandRouter): any[] {
|
|
108
|
+
const nodes: any[] = self.getCachedInlineMeshNodes();
|
|
109
|
+
for (const cached of self.aggregateMeshStatusCache.values()) {
|
|
110
|
+
const snapshotNodes = cached?.snapshot?.nodes;
|
|
111
|
+
if (Array.isArray(snapshotNodes)) nodes.push(...snapshotNodes);
|
|
112
|
+
}
|
|
113
|
+
return nodes;
|
|
114
|
+
}
|