@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
|
@@ -37,6 +37,7 @@ export interface DaemonInitConfig {
|
|
|
37
37
|
enabledIdes?: string[];
|
|
38
38
|
/** Router transport-specific callbacks */
|
|
39
39
|
onStatusChange?: () => void;
|
|
40
|
+
onMeshStateChange?: (meshId: string) => void;
|
|
40
41
|
onPostChatCommand?: () => void;
|
|
41
42
|
sessionHostControl?: SessionHostControlPlane | null;
|
|
42
43
|
getCdpLogFn?: (ideType: string) => (msg: string) => void;
|
|
@@ -61,6 +62,8 @@ export interface DaemonInitConfig {
|
|
|
61
62
|
dispatchMeshCommand?: (daemonId: string, command: string, args: Record<string, unknown>) => Promise<any>;
|
|
62
63
|
/** Returns selected-coordinator mesh peer telemetry for a target daemon when available. */
|
|
63
64
|
getMeshPeerConnectionStatus?: (daemonId: string) => Record<string, unknown> | null;
|
|
65
|
+
/** Cloud-only: P2P dashboard metadata sync after the core forwarder handles a mesh event. */
|
|
66
|
+
onMeshCoordinatorEventForwarded?: (payload: Record<string, unknown>) => void;
|
|
64
67
|
}
|
|
65
68
|
export interface DaemonComponents {
|
|
66
69
|
providerLoader: ProviderLoader;
|
|
@@ -78,6 +81,12 @@ export interface DaemonComponents {
|
|
|
78
81
|
};
|
|
79
82
|
refreshProviderAvailability: (providerType?: string) => Promise<void>;
|
|
80
83
|
dispatchMeshCommand?: (daemonId: string, command: string, args: Record<string, unknown>) => Promise<any>;
|
|
84
|
+
getMeshPeerConnectionStatus?: (daemonId: string) => Record<string, unknown> | null;
|
|
85
|
+
onMeshCoordinatorEventForwarded?: (payload: Record<string, unknown>) => void;
|
|
86
|
+
meshReconcileLoop?: {
|
|
87
|
+
stop(): void;
|
|
88
|
+
};
|
|
89
|
+
statusInstanceId?: string;
|
|
81
90
|
}
|
|
82
91
|
export interface DaemonDevSupportOptions {
|
|
83
92
|
components: DaemonComponents;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-level hardening — boot-time mitigations against provider scripts.
|
|
3
|
+
*
|
|
4
|
+
* Provider scripts run in-process (see providers/sdk/v1/sandbox/README-design.ts).
|
|
5
|
+
* The require() whitelist (sandbox/require-whitelist.ts) blocks the obvious
|
|
6
|
+
* attack surfaces (no `child_process.exec`, no `fs.writeFile`, no `net`, etc.)
|
|
7
|
+
* but a malicious or buggy script can still:
|
|
8
|
+
*
|
|
9
|
+
* 1. Pollute Object.prototype to influence the daemon's downstream consumers
|
|
10
|
+
* (e.g. `Object.prototype.toString = () => '...'` makes every untagged
|
|
11
|
+
* object stringify to that value across the whole process).
|
|
12
|
+
* 2. Mutate Array/Function/String prototypes for similar effect.
|
|
13
|
+
* 3. Call `process.exit()` / `process.kill()` to kill the daemon.
|
|
14
|
+
*
|
|
15
|
+
* Sandbox isolation (isolated-vm) is the proper fix but has a real perf cost
|
|
16
|
+
* and a real marshalling-complexity cost. As a cheaper layer we just freeze
|
|
17
|
+
* the built-in prototypes at boot, which is irreversible and catches every
|
|
18
|
+
* prototype-pollution variant for the lifetime of the process.
|
|
19
|
+
*
|
|
20
|
+
* `applyProcessHardening()` is idempotent — calling it twice is a no-op the
|
|
21
|
+
* second time. The function intentionally swallows any "cannot redefine
|
|
22
|
+
* property" errors that would arise if some upstream code already froze
|
|
23
|
+
* the same prototype: the post-condition (prototype is frozen) is satisfied
|
|
24
|
+
* either way.
|
|
25
|
+
*
|
|
26
|
+
* Trade-offs:
|
|
27
|
+
* - Read-only access to prototype methods (`Object.prototype.hasOwnProperty.call`,
|
|
28
|
+
* `Array.prototype.slice.call`, etc.) is unaffected — only writes throw.
|
|
29
|
+
* - Some older npm libraries patch Array.prototype or Function.prototype at
|
|
30
|
+
* import time. If a daemon-core dep does this, the import will throw. The
|
|
31
|
+
* daemon-core vitest suite is the canonical regression check for this.
|
|
32
|
+
* - We deliberately do NOT freeze RegExp.prototype, Error.prototype, Map/Set
|
|
33
|
+
* prototypes, or Date.prototype because at least one of those tends to be
|
|
34
|
+
* mutated by mainstream test/runtime libs and the value of freezing them
|
|
35
|
+
* is low (no useful prototype-pollution attack surface).
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* Freeze the canonical built-in prototypes so provider scripts (and anything
|
|
39
|
+
* else running in this process) cannot mutate them. Idempotent.
|
|
40
|
+
*
|
|
41
|
+
* Returns the list of prototype names that were newly frozen — primarily for
|
|
42
|
+
* tests / observability. Already-frozen prototypes are not re-reported.
|
|
43
|
+
*/
|
|
44
|
+
export declare function applyProcessHardening(): string[];
|
|
45
|
+
/** For tests only — clears the internal "already hardened" flag. The
|
|
46
|
+
* prototypes themselves cannot be un-frozen, so this is mostly useful for
|
|
47
|
+
* testing the idempotency guard. */
|
|
48
|
+
export declare function _resetProcessHardeningForTest(): void;
|
|
49
|
+
/** For tests only — peek at the hardened state. */
|
|
50
|
+
export declare function _isProcessHardened(): boolean;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon build stamp — single runtime source for "which commit is this running
|
|
3
|
+
* daemon built from?".
|
|
4
|
+
*
|
|
5
|
+
* The values are injected at BUILD time via tsup `define` (esbuild global
|
|
6
|
+
* replacement). Every build config that bundles daemon-core into a shippable
|
|
7
|
+
* daemon (daemon-core's own dist, daemon-standalone, daemon-cloud) replaces
|
|
8
|
+
* these `__DAEMON_BUILD_*` identifiers with the literal git commit/version that
|
|
9
|
+
* was current when the bundle was produced. See:
|
|
10
|
+
* - oss/packages/daemon-core/tsup.config.ts (standalone consumes this dist)
|
|
11
|
+
* - packages/daemon-cloud/tsup.config.ts (re-bundles daemon-core from source)
|
|
12
|
+
*
|
|
13
|
+
* If a bundle is produced WITHOUT the define (e.g. running src directly through
|
|
14
|
+
* tsx in dev, or a build env without git), the identifiers stay undefined and
|
|
15
|
+
* we fall back to `"unknown"` — never a ReferenceError, never a build failure.
|
|
16
|
+
*
|
|
17
|
+
* IMPORTANT (live-reflection caveat): a fresh local `daemon-core dist` rebuild +
|
|
18
|
+
* daemon restart is NOT enough to make a *cloud* daemon report a new commit —
|
|
19
|
+
* daemon-cloud ships its own re-bundle of daemon-core, so the build stamp only
|
|
20
|
+
* advances after the cloud daemon is rebuilt/redeployed and restarted. This is
|
|
21
|
+
* precisely the gap `mesh_status`'s `staleDaemonBuild` warning exists to surface.
|
|
22
|
+
*/
|
|
23
|
+
export interface DaemonBuildInfo {
|
|
24
|
+
/** Full 40-char git commit the daemon bundle was built from, or 'unknown'. */
|
|
25
|
+
commit: string;
|
|
26
|
+
/** Short (7-char) form of the same commit, or 'unknown'. */
|
|
27
|
+
commitShort: string;
|
|
28
|
+
/** package.json version baked in at build time, or 'unknown'. */
|
|
29
|
+
version: string;
|
|
30
|
+
/** ISO build timestamp if the build config injected one. */
|
|
31
|
+
builtAt?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the build stamp baked into the running daemon bundle. Pure read of
|
|
35
|
+
* build-time constants — no I/O, safe to call from any runtime path. Cached.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getDaemonBuildInfo(): DaemonBuildInfo;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat source state machine.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the ad-hoc anchor + freshness + 6-trigger ladder that
|
|
5
|
+
* chat-commands.ts:1500-1800 grew over time. The machine has four states and
|
|
6
|
+
* three events; every other signal collapses to one of those three.
|
|
7
|
+
*
|
|
8
|
+
* States Meaning
|
|
9
|
+
* ─────────────────────────────────────────────────────────────────
|
|
10
|
+
* Booting No native attempt evaluated yet. PTY is the source
|
|
11
|
+
* because we have nothing else; this is not a
|
|
12
|
+
* "fallback", just the starting condition.
|
|
13
|
+
* NativeLocked Native transcript is the source. The lock holds even
|
|
14
|
+
* when PTY receives newer bytes — only NativeRegressed
|
|
15
|
+
* or NativeUnavailable can break it.
|
|
16
|
+
* PtyOnly Native is genuinely not usable (unavailable /
|
|
17
|
+
* regressed / never observed). PTY is the source.
|
|
18
|
+
* Recovering We were NativeLocked, native disappeared, but we
|
|
19
|
+
* have not yet seen enough PTY-only turns to commit
|
|
20
|
+
* to PtyOnly. Behaves like PtyOnly for the current
|
|
21
|
+
* read but a single NativeProgressed re-locks.
|
|
22
|
+
*
|
|
23
|
+
* Events Meaning
|
|
24
|
+
* ─────────────────────────────────────────────────────────────────
|
|
25
|
+
* NativeProgressed Native transcript has fresh, safely-mapped messages
|
|
26
|
+
* whose newest sequence is >= the last observed peak.
|
|
27
|
+
* NativeRegressed Native messages dropped, mapping became unsafe, or
|
|
28
|
+
* the transcript shrank. Strong unlock signal.
|
|
29
|
+
* NativeUnavailable Native transcript could not be fetched at all
|
|
30
|
+
* (read error, provider not supported, schema invalid).
|
|
31
|
+
* Soft unlock — Recovering tolerates a transient miss.
|
|
32
|
+
*
|
|
33
|
+
* Why this replaces the v1 design:
|
|
34
|
+
* - The v1 freshness check (`isNativeHistoryFreshEnough`) compared native's
|
|
35
|
+
* newest receivedAt to the PTY buffer's. PTY arrived every turn, so
|
|
36
|
+
* native looked stale by default and only the 30-minute anchor TTL kept
|
|
37
|
+
* things stable. When the anchor expired the source flipped, which is
|
|
38
|
+
* the "plipping" the user reported. The new machine does not compare
|
|
39
|
+
* PTY freshness against native at all; the only thing that unlocks a
|
|
40
|
+
* NativeLocked state is evidence that native itself moved backwards or
|
|
41
|
+
* vanished.
|
|
42
|
+
* - The 6 trigger strings (`native_history_partial`, `native_history_stale`,
|
|
43
|
+
* `native_history_not_safely_mapped`, `native_history_empty`,
|
|
44
|
+
* `native_history_error:*`, `native_history_unavailable:*`) collapse to
|
|
45
|
+
* three events. Each transition records the original trigger as `cause`
|
|
46
|
+
* for observability, so we lose nothing diagnostic.
|
|
47
|
+
* - There is no anchor store. The "lock" is a state, not a piece of
|
|
48
|
+
* mutable data living on the adapter. Callers pass the previous state in
|
|
49
|
+
* and get the next state out.
|
|
50
|
+
*/
|
|
51
|
+
import type { ChatContractVersion } from '../providers/transcript-v2.js';
|
|
52
|
+
import { CHAT_CONTRACT_VERSION_V1, CHAT_CONTRACT_VERSION_V2 } from '../providers/transcript-v2.js';
|
|
53
|
+
export type ChatSourceStateName = 'Booting' | 'NativeLocked' | 'PtyOnly' | 'Recovering';
|
|
54
|
+
export type ChatSourceSelected = 'native-history' | 'pty-parser';
|
|
55
|
+
export type ChatSourceEventKind = 'NativeProgressed' | 'NativeRegressed' | 'NativeUnavailable';
|
|
56
|
+
/**
|
|
57
|
+
* Cause codes mirror the legacy 6-trigger vocabulary so existing log
|
|
58
|
+
* pipelines and dashboards can group transitions the same way they do
|
|
59
|
+
* today. They are diagnostic, not control-flow.
|
|
60
|
+
*/
|
|
61
|
+
export type ChatSourceTransitionCause = 'initial' | 'native_progressed' | 'native_regressed_shrunk' | 'native_regressed_unsafe_mapping' | 'native_regressed_coverage_partial' | 'native_regressed_coverage_unavailable' | 'native_unavailable_read_error' | 'native_unavailable_provider_unsupported' | 'native_unavailable_empty' | 'native_unavailable_not_native_source';
|
|
62
|
+
export interface ChatSourceState {
|
|
63
|
+
readonly name: ChatSourceStateName;
|
|
64
|
+
/**
|
|
65
|
+
* Highest sequence number ever observed from native. Used as the watermark
|
|
66
|
+
* NativeProgressed has to reach (or exceed) before re-locking from
|
|
67
|
+
* Recovering. Undefined while we have never seen native.
|
|
68
|
+
*/
|
|
69
|
+
readonly nativeSequencePeak: number | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Highest providerUnitKey set we have committed to. Future progressed events
|
|
72
|
+
* must be a superset (no removals) for the lock to hold; if any prior
|
|
73
|
+
* unit key vanishes we issue NativeRegressed instead. Empty when we have
|
|
74
|
+
* never locked.
|
|
75
|
+
*/
|
|
76
|
+
readonly committedUnitKeys: ReadonlySet<string>;
|
|
77
|
+
/**
|
|
78
|
+
* Number of consecutive non-progressed observations while in Recovering.
|
|
79
|
+
* Threshold-based promotion to PtyOnly so transient misses do not commit
|
|
80
|
+
* us to PtyOnly prematurely. Always 0 outside Recovering.
|
|
81
|
+
*/
|
|
82
|
+
readonly recoveringMisses: number;
|
|
83
|
+
}
|
|
84
|
+
export declare const INITIAL_CHAT_SOURCE_STATE: ChatSourceState;
|
|
85
|
+
/**
|
|
86
|
+
* Promote from Recovering to PtyOnly after this many consecutive misses.
|
|
87
|
+
* One transient miss should not flip the source for a user who was just
|
|
88
|
+
* reading from native; three in a row signals native is genuinely gone.
|
|
89
|
+
*/
|
|
90
|
+
export declare const RECOVERING_MISS_PROMOTION_THRESHOLD = 3;
|
|
91
|
+
/**
|
|
92
|
+
* Per-message identity slice the machine needs. Producers normalise their
|
|
93
|
+
* native transcript output into this shape (v2 producers already do so via
|
|
94
|
+
* transcript-v2.ts; v1 producers go through a thin adapter — see
|
|
95
|
+
* source-resolver.ts).
|
|
96
|
+
*/
|
|
97
|
+
export interface ResolverNativeMessageIdentity {
|
|
98
|
+
providerUnitKey: string;
|
|
99
|
+
sequence: number;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Observation the resolver hands to the machine for a single readChat call.
|
|
103
|
+
* Three mutually exclusive shapes — represented as a discriminated union so
|
|
104
|
+
* the type system enforces honesty about what happened.
|
|
105
|
+
*/
|
|
106
|
+
export type ChatSourceObservation = {
|
|
107
|
+
kind: 'native_present';
|
|
108
|
+
contractVersion: ChatContractVersion;
|
|
109
|
+
messages: ReadonlyArray<ResolverNativeMessageIdentity>;
|
|
110
|
+
/** Producer-declared coverage. Drives Progressed vs Regressed when the
|
|
111
|
+
* transcript is non-empty but only partial. */
|
|
112
|
+
coverage: 'full' | 'tail' | 'current-turn' | 'partial';
|
|
113
|
+
/** True when the daemon can prove these native messages belong to the
|
|
114
|
+
* intended workspace+session. False is treated as regression. */
|
|
115
|
+
safeMapping: boolean;
|
|
116
|
+
} | {
|
|
117
|
+
kind: 'native_unavailable';
|
|
118
|
+
reason: 'provider_not_supported' | 'read_error' | 'empty' | 'not_native_source' | 'coverage_unavailable';
|
|
119
|
+
};
|
|
120
|
+
export interface ChatSourceTransition {
|
|
121
|
+
readonly fromState: ChatSourceStateName;
|
|
122
|
+
readonly toState: ChatSourceStateName;
|
|
123
|
+
readonly event: ChatSourceEventKind | 'NoOp';
|
|
124
|
+
readonly cause: ChatSourceTransitionCause;
|
|
125
|
+
/** Wall-clock ms at the moment of resolution. Producer time, not ordering. */
|
|
126
|
+
readonly at: number;
|
|
127
|
+
}
|
|
128
|
+
export interface ChatSourceLockState {
|
|
129
|
+
readonly locked: boolean;
|
|
130
|
+
/**
|
|
131
|
+
* ms since epoch when the current lock began. Undefined when not locked or
|
|
132
|
+
* not yet observed. Producers may use this for "anchored Xs ago" UI but
|
|
133
|
+
* the machine itself never expires a lock based on it — only events do.
|
|
134
|
+
*/
|
|
135
|
+
readonly lockedSince?: number;
|
|
136
|
+
}
|
|
137
|
+
export interface ChatSourceDecision {
|
|
138
|
+
readonly selected: ChatSourceSelected;
|
|
139
|
+
readonly nextState: ChatSourceState;
|
|
140
|
+
readonly transition: ChatSourceTransition;
|
|
141
|
+
readonly lockState: ChatSourceLockState;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Pure transition function. Given a previous state and a single observation,
|
|
145
|
+
* returns the next state, the resulting transition record, and the selected
|
|
146
|
+
* source. No side effects. No mutation of `prev`.
|
|
147
|
+
*
|
|
148
|
+
* Lock semantics:
|
|
149
|
+
* - Booting + native_present(safeMapping, not partial-only) → NativeLocked
|
|
150
|
+
* - NativeLocked + native_present(superset of committed keys, safe) → stays NativeLocked
|
|
151
|
+
* - NativeLocked + native_present(missing committed keys OR unsafe OR partial-shrunk) → PtyOnly
|
|
152
|
+
* - NativeLocked + native_unavailable → Recovering (lock holds for the source decision but watermark survives)
|
|
153
|
+
* - Recovering + native_present(progressed past peak) → NativeLocked
|
|
154
|
+
* - Recovering + native_unavailable (RECOVERING_MISS_PROMOTION_THRESHOLD times) → PtyOnly
|
|
155
|
+
* - PtyOnly is sticky: only an explicit progressed observation that meets
|
|
156
|
+
* the original superset rule moves us back to NativeLocked. This is the
|
|
157
|
+
* intended behaviour — once we have concluded native is dead, we do not
|
|
158
|
+
* re-lock on a single transient revival.
|
|
159
|
+
*/
|
|
160
|
+
export declare function transitionChatSourceState(prev: ChatSourceState, observation: ChatSourceObservation, at: number, lockedSince: number | undefined): {
|
|
161
|
+
next: ChatSourceState;
|
|
162
|
+
transition: ChatSourceTransition;
|
|
163
|
+
selected: ChatSourceSelected;
|
|
164
|
+
lockState: ChatSourceLockState;
|
|
165
|
+
};
|
|
166
|
+
export { CHAT_CONTRACT_VERSION_V1, CHAT_CONTRACT_VERSION_V2 };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat source resolver.
|
|
3
|
+
*
|
|
4
|
+
* Facade over ChatSourceMachine. Responsibilities:
|
|
5
|
+
* - Normalise heterogeneous provider output (v1 ad-hoc identities, v2
|
|
6
|
+
* ChatMessageV2) into ResolverNativeMessageIdentity slices the machine
|
|
7
|
+
* can compare.
|
|
8
|
+
* - Hold per-session machine state in an in-memory map (no anchor disk
|
|
9
|
+
* persistence — the machine is fully recoverable from a fresh
|
|
10
|
+
* observation).
|
|
11
|
+
* - Maintain a small ring buffer of recent transitions per session so
|
|
12
|
+
* debug surfaces (web-devconsole SourceTimeline, mesh_read_debug
|
|
13
|
+
* bundles) can show *why* the source flipped, not just what it is now.
|
|
14
|
+
*
|
|
15
|
+
* What this module deliberately does NOT do:
|
|
16
|
+
* - Decide which messages to display. The machine decides only between
|
|
17
|
+
* `native-history` and `pty-parser`; selecting/merging the actual
|
|
18
|
+
* message arrays stays in chat-commands.ts (A2.2).
|
|
19
|
+
* - Mutate provider modules or CLI adapters. nativeHistoryAnchoredAt on
|
|
20
|
+
* ProviderCliAdapter is gone in A2.2; the resolver is the new owner.
|
|
21
|
+
* - Persist anything to disk. A daemon restart starts every session in
|
|
22
|
+
* `Booting`, which lock-promotes on the first valid native observation
|
|
23
|
+
* of the new process.
|
|
24
|
+
*/
|
|
25
|
+
import { INITIAL_CHAT_SOURCE_STATE, transitionChatSourceState, type ChatSourceDecision, type ChatSourceObservation, type ChatSourceState, type ChatSourceTransition } from './source-machine.js';
|
|
26
|
+
import type { ChatContractVersion } from '../providers/transcript-v2.js';
|
|
27
|
+
/** Maximum transitions retained per session for debug surfaces. */
|
|
28
|
+
export declare const TRANSITION_HISTORY_LIMIT = 25;
|
|
29
|
+
/** Composite key uniquely identifying a chat surface for state purposes.
|
|
30
|
+
* We key by (providerType, sessionId) because the same provider may run
|
|
31
|
+
* multiple sessions and each has its own native/PTY interplay. */
|
|
32
|
+
export type ChatSourceSessionKey = string;
|
|
33
|
+
export declare function chatSourceSessionKey(providerType: string, sessionId: string): ChatSourceSessionKey;
|
|
34
|
+
/**
|
|
35
|
+
* Per-session machine store. Keyed by ChatSourceSessionKey. Daemon-lifetime
|
|
36
|
+
* memory; not persisted. Tests should create their own instance to keep
|
|
37
|
+
* isolation; production has a module-level singleton (CHAT_SOURCE_REGISTRY)
|
|
38
|
+
* exposed at the bottom of this file.
|
|
39
|
+
*/
|
|
40
|
+
export declare class ChatSourceRegistry {
|
|
41
|
+
private readonly records;
|
|
42
|
+
/** Snapshot of current state for diagnostics. Does not mutate. */
|
|
43
|
+
getState(key: ChatSourceSessionKey): ChatSourceState;
|
|
44
|
+
/** Recent transitions, newest last. Empty array when nothing has happened. */
|
|
45
|
+
getTransitions(key: ChatSourceSessionKey): ReadonlyArray<ChatSourceTransition>;
|
|
46
|
+
/** Drop a session. Caller should invoke this when the session is destroyed
|
|
47
|
+
* to avoid unbounded growth across long-lived daemons. */
|
|
48
|
+
clear(key: ChatSourceSessionKey): void;
|
|
49
|
+
/** Drop all sessions. Test helper. */
|
|
50
|
+
clearAll(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Apply one observation, returning the decision and side-effecting the
|
|
53
|
+
* stored state. The returned `nextState` is the same object now stored
|
|
54
|
+
* under `key`; callers may treat the decision as authoritative without
|
|
55
|
+
* re-reading.
|
|
56
|
+
*/
|
|
57
|
+
observe(key: ChatSourceSessionKey, observation: ChatSourceObservation, at?: number): ChatSourceDecision;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build a native_present observation from a v2 read_chat payload's message
|
|
61
|
+
* array. v2 producers already provide stable identity (transcript-v2.ts
|
|
62
|
+
* invariants), so this is a thin projection.
|
|
63
|
+
*/
|
|
64
|
+
export declare function buildV2NativePresentObservation(args: {
|
|
65
|
+
messages: ReadonlyArray<{
|
|
66
|
+
providerUnitKey: string;
|
|
67
|
+
sequence: number;
|
|
68
|
+
}>;
|
|
69
|
+
coverage: 'full' | 'tail' | 'current-turn' | 'partial';
|
|
70
|
+
safeMapping: boolean;
|
|
71
|
+
}): ChatSourceObservation;
|
|
72
|
+
/**
|
|
73
|
+
* Build a native_present observation from v1 producer output. v1 messages
|
|
74
|
+
* may have no providerUnitKey or a producer-derived one that shifts across
|
|
75
|
+
* reads (index/content-hash based). We synthesise a deterministic identity
|
|
76
|
+
* from the most stable fields available so the machine has *something* to
|
|
77
|
+
* compare across reads. This is intentionally lossy — A2.3 retires v1
|
|
78
|
+
* producers and this branch goes away.
|
|
79
|
+
*
|
|
80
|
+
* The synthesised key is NOT the same as the v2 contract key; never compare
|
|
81
|
+
* v1-synthesised keys against v2 keys for the same logical message. The
|
|
82
|
+
* registry naturally separates them by ChatSourceSessionKey so cross-version
|
|
83
|
+
* leakage cannot happen in practice.
|
|
84
|
+
*/
|
|
85
|
+
export declare function buildV1NativePresentObservation(args: {
|
|
86
|
+
providerType: string;
|
|
87
|
+
sessionId: string;
|
|
88
|
+
messages: ReadonlyArray<{
|
|
89
|
+
providerUnitKey?: unknown;
|
|
90
|
+
bubbleId?: unknown;
|
|
91
|
+
id?: unknown;
|
|
92
|
+
index?: unknown;
|
|
93
|
+
role?: unknown;
|
|
94
|
+
receivedAt?: unknown;
|
|
95
|
+
timestamp?: unknown;
|
|
96
|
+
content?: unknown;
|
|
97
|
+
}>;
|
|
98
|
+
coverage: 'full' | 'tail' | 'current-turn' | 'partial';
|
|
99
|
+
safeMapping: boolean;
|
|
100
|
+
}): ChatSourceObservation;
|
|
101
|
+
export declare const CHAT_SOURCE_REGISTRY: ChatSourceRegistry;
|
|
102
|
+
export type { ChatSourceDecision, ChatSourceLockState, ChatSourceObservation, ChatSourceState, ChatSourceTransition, ChatSourceTransitionCause, ResolverNativeMessageIdentity, } from './source-machine.js';
|
|
103
|
+
export { transitionChatSourceState, INITIAL_CHAT_SOURCE_STATE };
|
|
104
|
+
export type { ChatContractVersion };
|
|
@@ -5,6 +5,7 @@ export interface ChatTailSubscriptionCursor {
|
|
|
5
5
|
export type SessionChatTailCommandResult = Partial<Omit<ReadChatSyncResult, 'activeModal'>> & {
|
|
6
6
|
success?: boolean;
|
|
7
7
|
activeModal?: unknown;
|
|
8
|
+
messagesTail?: unknown;
|
|
8
9
|
};
|
|
9
10
|
export interface PrepareSessionChatTailUpdateInput {
|
|
10
11
|
key: string;
|
|
@@ -4,13 +4,40 @@
|
|
|
4
4
|
* Contract implemented by all CLI adapters (ProviderCliAdapter etc).
|
|
5
5
|
*/
|
|
6
6
|
import type { ChatMessage } from './types.js';
|
|
7
|
+
import type { InteractivePrompt, InteractivePromptResponse } from './providers/types/interactive-prompt.js';
|
|
7
8
|
export interface CliAdapterStatus {
|
|
8
9
|
status?: string;
|
|
10
|
+
parsedStatus?: string;
|
|
9
11
|
messages?: ChatMessage[];
|
|
10
12
|
activeModal?: {
|
|
11
13
|
message: string;
|
|
12
14
|
buttons: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Semantic modal class, when the adapter knows it (spec/FSM path):
|
|
17
|
+
* 'approval' = tool/command/trust consent (auto-approve may fire);
|
|
18
|
+
* 'picker' = a selection menu the user opened (/model, /mode — must NOT
|
|
19
|
+
* be auto-answered); 'confirm' = a yes/no left to the user. Absent/null
|
|
20
|
+
* for adapters that don't classify modals — the auto-approve gate then
|
|
21
|
+
* falls back to its structural heuristic.
|
|
22
|
+
*/
|
|
23
|
+
kind?: 'approval' | 'picker' | 'confirm' | null;
|
|
13
24
|
} | null;
|
|
25
|
+
activeInteractivePrompt?: InteractivePrompt | null;
|
|
26
|
+
providerSessionId?: string;
|
|
27
|
+
errorMessage?: string;
|
|
28
|
+
errorReason?: string;
|
|
29
|
+
/**
|
|
30
|
+
* FSM-spec adapters only: true once the driver has observed its first
|
|
31
|
+
* non-initial idle state (the prompt is genuinely drawn — see
|
|
32
|
+
* FsmDriver.maybeMarkReady / readySeenOnce). Used by CliProviderInstance to
|
|
33
|
+
* re-arm the queue-claim `agent:ready` event on the first genuine ready,
|
|
34
|
+
* independent of the boot-time starting→idle one-shot. That one-shot is
|
|
35
|
+
* consumed too early for providers whose INITIAL FSM state already reports
|
|
36
|
+
* status 'idle' (e.g. antigravity-cli), so without this re-arm the worker
|
|
37
|
+
* never claims its queued task and the coordinator relaunch-loops. Absent
|
|
38
|
+
* (undefined) for non-FSM adapters — they keep the boot one-shot behavior.
|
|
39
|
+
*/
|
|
40
|
+
fsmReadySeen?: boolean;
|
|
14
41
|
}
|
|
15
42
|
export interface AcpAdapterHandle {
|
|
16
43
|
onEvent(event: string, data?: unknown): void;
|
|
@@ -28,14 +55,42 @@ export interface AcpAdapterHandle {
|
|
|
28
55
|
setConfigOption?(configId: string, value: string): Promise<void>;
|
|
29
56
|
resolvePermission?(approved: boolean): Promise<void>;
|
|
30
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Launch metadata for a CLI session, surfaced by the dashboard Session info panel.
|
|
60
|
+
* Derived from the live adapter's spawn plan — the resolved binary, the full
|
|
61
|
+
* argument vector (provider base args + per-launch extra args), the cwd, and the
|
|
62
|
+
* set of per-launch extra-env KEYS (values are intentionally omitted so secrets in
|
|
63
|
+
* extraEnv are never sent to the dashboard). providerSessionId is the upstream
|
|
64
|
+
* agent's own session id once the CLI reports it.
|
|
65
|
+
*/
|
|
66
|
+
export interface CliLaunchInfo {
|
|
67
|
+
/** Resolved executable path the PTY actually spawns. */
|
|
68
|
+
command?: string;
|
|
69
|
+
/** Full argument vector (provider spawn.args + extraArgs, {{workingDir}} expanded). */
|
|
70
|
+
args: string[];
|
|
71
|
+
/** Per-launch extra args only (subset of args), for attribution. */
|
|
72
|
+
extraArgs: string[];
|
|
73
|
+
/** Working directory the session was spawned in. */
|
|
74
|
+
cwd: string;
|
|
75
|
+
/** KEYS of per-launch extra env (values omitted — may contain secrets). */
|
|
76
|
+
extraEnvKeys: string[];
|
|
77
|
+
/** Upstream agent session id, once the CLI reports one. */
|
|
78
|
+
providerSessionId?: string;
|
|
79
|
+
}
|
|
31
80
|
export interface CliAdapter {
|
|
32
81
|
cliType: string;
|
|
33
82
|
cliName: string;
|
|
34
83
|
workingDir: string;
|
|
35
84
|
_acpInstance?: AcpAdapterHandle;
|
|
36
85
|
spawn(): Promise<void>;
|
|
37
|
-
sendMessage(text: string
|
|
38
|
-
|
|
86
|
+
sendMessage(text: string, options?: {
|
|
87
|
+
force?: boolean;
|
|
88
|
+
meshTaskId?: string;
|
|
89
|
+
}): Promise<void>;
|
|
90
|
+
forceSendMessage?(text: string, meshTaskId?: string): Promise<void>;
|
|
91
|
+
getStatus(options?: {
|
|
92
|
+
allowParse?: boolean;
|
|
93
|
+
}): CliAdapterStatus;
|
|
39
94
|
getScriptParsedStatus?(): unknown;
|
|
40
95
|
getDebugSnapshot?(): unknown;
|
|
41
96
|
invokeScript?(scriptName: string, args?: Record<string, unknown>): Promise<unknown>;
|
|
@@ -52,8 +107,19 @@ export interface CliAdapter {
|
|
|
52
107
|
setServerConn?(serverConn: unknown): void;
|
|
53
108
|
clearHistory?(): void;
|
|
54
109
|
resolveAction?(data: unknown): Promise<void>;
|
|
110
|
+
setInteractivePromptResponse?(response: InteractivePromptResponse): Promise<void>;
|
|
55
111
|
resolveModal?(buttonIndex: number): void;
|
|
112
|
+
isApprovalRecentlyResolved?(): boolean;
|
|
56
113
|
setOnPtyData?(callback: (data: string) => void): void;
|
|
57
114
|
writeRaw?(data: string): void;
|
|
58
115
|
resize?(cols: number, rows: number): void;
|
|
116
|
+
getLaunchInfo?(): CliLaunchInfo;
|
|
117
|
+
getRuntimeMetadata?(): unknown;
|
|
118
|
+
updateRuntimeMeta?(meta: Record<string, unknown>): void;
|
|
119
|
+
refreshProviderDefinition?(provider: unknown): void;
|
|
120
|
+
}
|
|
121
|
+
export interface CliAdapterStatusOptional {
|
|
122
|
+
providerSessionId?: string;
|
|
123
|
+
errorMessage?: string;
|
|
124
|
+
errorReason?: string;
|
|
59
125
|
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CliScriptRunner — isolated execution of provider CLI scripts
|
|
3
|
+
*
|
|
4
|
+
* Responsible solely for invoking provider-supplied JavaScript functions
|
|
5
|
+
* (detectStatus, parseApproval, parseSession, etc.) and managing the
|
|
6
|
+
* per-session script state created by createState().
|
|
7
|
+
*
|
|
8
|
+
* The runner is stateless with respect to PTY / buffer content — all
|
|
9
|
+
* input data is passed explicitly by the caller so that the adapter can
|
|
10
|
+
* remain a pure transport layer without embedding parsing logic.
|
|
11
|
+
*/
|
|
12
|
+
import { type CliApprovalInput, type CliScripts, type CliScriptInput, type CliScreenSnapshot, type CliStatusInput, type ParsedSession } from './provider-cli-shared.js';
|
|
13
|
+
/**
|
|
14
|
+
* One entry per script invocation, kept in a ring buffer so debug
|
|
15
|
+
* tooling can answer "what did the script see, and what did it return?"
|
|
16
|
+
* without having to re-run the daemon with custom logs. This is the
|
|
17
|
+
* trace that would have answered the codex-cli #102 regression in one
|
|
18
|
+
* pass instead of a dozen guesses.
|
|
19
|
+
*
|
|
20
|
+
* Body fields are bounded: input is reduced to a small summary (sizes
|
|
21
|
+
* + a salted hash + the first few normalized chars of screenText), and
|
|
22
|
+
* result is JSON-serialized then capped. Full PTY frames are NOT
|
|
23
|
+
* captured here — they live in CliBufferSnapshot and are exposed by
|
|
24
|
+
* the chat debug bundle separately.
|
|
25
|
+
*/
|
|
26
|
+
export interface CliScriptInvocationTrace {
|
|
27
|
+
at: number;
|
|
28
|
+
scriptName: string;
|
|
29
|
+
arity: number;
|
|
30
|
+
inputSummary: {
|
|
31
|
+
screenTextLen: number;
|
|
32
|
+
rawBufferLen: number;
|
|
33
|
+
tailLen: number;
|
|
34
|
+
isWaitingForResponse?: boolean;
|
|
35
|
+
screenTextHead?: string;
|
|
36
|
+
};
|
|
37
|
+
ok: boolean;
|
|
38
|
+
elapsedUs: number;
|
|
39
|
+
resultSummary?: string;
|
|
40
|
+
error?: string;
|
|
41
|
+
/**
|
|
42
|
+
* True when the invocation's elapsed time exceeded the runner's
|
|
43
|
+
* `scriptCallBudgetMs`. The script is NOT aborted (Node CJS can't
|
|
44
|
+
* interrupt sync code without a worker thread) — this flag plus the
|
|
45
|
+
* trace ring lets an operator identify which provider is hanging the
|
|
46
|
+
* settle loop. A throttled WARN is emitted alongside.
|
|
47
|
+
*/
|
|
48
|
+
timedOut?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare class CliScriptRunner {
|
|
51
|
+
private scripts;
|
|
52
|
+
private scriptState;
|
|
53
|
+
private _parseErrorMessage;
|
|
54
|
+
private readonly cliType;
|
|
55
|
+
private sdk;
|
|
56
|
+
private invocationTrace;
|
|
57
|
+
/** Per-invocation wall-clock budget (ms). Configurable via setScriptCallBudget. */
|
|
58
|
+
private scriptCallBudgetMs;
|
|
59
|
+
/** Last WARN emit time per scriptName, used to throttle repeated budget violations. */
|
|
60
|
+
private lastBudgetWarnAt;
|
|
61
|
+
constructor(cliType: string);
|
|
62
|
+
/** Returns the most-recent script invocation traces (oldest → newest). */
|
|
63
|
+
getInvocationTrace(): CliScriptInvocationTrace[];
|
|
64
|
+
/** Clear the trace ring — used by tests and after PTY reset. */
|
|
65
|
+
clearInvocationTrace(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Configure the wall-clock budget (ms) applied to every script invocation.
|
|
68
|
+
*
|
|
69
|
+
* Out-of-range or non-finite values are clamped to [1, 5000] and the
|
|
70
|
+
* default (50ms) is used as a fallback. The budget is enforced per-call,
|
|
71
|
+
* not aggregated — it does not abort a runaway script (Node CJS cannot
|
|
72
|
+
* interrupt synchronous code without a worker thread). Instead, an
|
|
73
|
+
* exceeded budget flags the trace entry with `timedOut: true` and emits
|
|
74
|
+
* a throttled WARN naming the script and elapsed time so an operator
|
|
75
|
+
* can identify which provider is hanging the settle loop.
|
|
76
|
+
*/
|
|
77
|
+
setScriptCallBudget(ms: number): void;
|
|
78
|
+
/** Test/debug accessor — current effective budget in ms. */
|
|
79
|
+
getScriptCallBudgetMs(): number;
|
|
80
|
+
private recordTrace;
|
|
81
|
+
setScripts(scripts: CliScripts, providerTui?: Record<string, unknown> | undefined): void;
|
|
82
|
+
private buildSdk;
|
|
83
|
+
/** Reset per-session state — called when the PTY process exits. */
|
|
84
|
+
resetSessionState(): void;
|
|
85
|
+
/** Returns the live scripts object. Direct property assignment on this object
|
|
86
|
+
* patches individual scripts without replacing others (used in tests). */
|
|
87
|
+
get cliScripts(): CliScripts;
|
|
88
|
+
hasDetectStatus(): boolean;
|
|
89
|
+
hasParseSession(): boolean;
|
|
90
|
+
getScriptNames(): string[];
|
|
91
|
+
get parseErrorMessage(): string | null;
|
|
92
|
+
clearParseError(): void;
|
|
93
|
+
detectStatus(input: CliStatusInput): string | null;
|
|
94
|
+
parseApproval(input: CliApprovalInput): {
|
|
95
|
+
message: string;
|
|
96
|
+
buttons: string[];
|
|
97
|
+
} | null;
|
|
98
|
+
parseSession(input: CliScriptInput & {
|
|
99
|
+
tail?: string;
|
|
100
|
+
tailScreen?: CliScreenSnapshot;
|
|
101
|
+
}): ParsedSession | null;
|
|
102
|
+
/**
|
|
103
|
+
* Invoke an arbitrary named script (e.g. setModel, openModelPicker).
|
|
104
|
+
* Throws if the script is not available.
|
|
105
|
+
*/
|
|
106
|
+
invokeByName(name: string, input: any): any;
|
|
107
|
+
private invoke;
|
|
108
|
+
/**
|
|
109
|
+
* Returns true when `elapsedUs` exceeded the configured budget. On the
|
|
110
|
+
* first violation per script (or after the throttle window expires) we
|
|
111
|
+
* emit a single WARN so the operator learns which provider is slow.
|
|
112
|
+
*
|
|
113
|
+
* We deliberately throttle per-scriptName so a chronically-slow
|
|
114
|
+
* detectStatus doesn't spam the log on every PTY frame settle.
|
|
115
|
+
*/
|
|
116
|
+
private checkBudget;
|
|
117
|
+
}
|