@adhdev/daemon-core 0.9.82-rc.49 → 0.9.82-rc.491
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 +66 -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 +53556 -19074
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +53380 -19063
- 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 +1309 -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,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI provider status/launch pure helpers.
|
|
3
|
+
*
|
|
4
|
+
* Pure move out of cli-provider-instance.ts (no behavior change): the
|
|
5
|
+
* side-effect-free status predicates, the turn-anchored duration computation,
|
|
6
|
+
* the forced-new-session script resolver, the adapter-ready poll, and the lazy
|
|
7
|
+
* node:sqlite DatabaseSync loader. cli-provider-instance re-exports the
|
|
8
|
+
* public symbols (computeTurnAnchoredDurationMs, getForcedNewSessionScriptName,
|
|
9
|
+
* waitForCliAdapterReady) so existing importers/tests keep their path.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import { createRequire } from 'node:module';
|
|
14
|
+
import type { ProviderModule } from './contracts.js';
|
|
15
|
+
|
|
16
|
+
export function isIdleStatus(value: unknown): boolean {
|
|
17
|
+
const status = typeof value === 'string' ? value.trim().toLowerCase() : '';
|
|
18
|
+
return !status || status === 'idle' || status === 'ready';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function getMessageTime(message: unknown): number {
|
|
22
|
+
if (!message || typeof message !== 'object') return 0;
|
|
23
|
+
const record = message as { receivedAt?: unknown; timestamp?: unknown };
|
|
24
|
+
const value = Number(record.receivedAt ?? record.timestamp ?? 0);
|
|
25
|
+
return Number.isFinite(value) ? value : 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function hasNonEmptyCliModalButtons(activeModal: unknown): boolean {
|
|
29
|
+
const buttons = (activeModal as any)?.buttons;
|
|
30
|
+
return Array.isArray(buttons) && buttons.some((button) => String(button || '').trim().length > 0);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function isCliGeneratingLikeStatus(status: unknown): boolean {
|
|
34
|
+
return status === 'generating' || status === 'streaming' || status === 'no_progress' || status === 'long_generating' || status === 'starting';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* NOTIF Defect-2a: the REPORTED short-generating duration, anchored on the IMMUTABLE turn
|
|
39
|
+
* start. generatingStartedAt is reset to 0 on every mid-turn waiting_approval/idle blip and
|
|
40
|
+
* re-armed on the next →generating, so a long turn that blips would otherwise measure only the
|
|
41
|
+
* final 1.5-2.5s sliver. engine.currentTurnStartedAt (set once at onTurnStarted, surviving
|
|
42
|
+
* mid-turn blips until the next turn starts) is preferred; generatingStartedAt is the fallback
|
|
43
|
+
* for turns that never recorded an engine turn start. Returns 0 when neither anchor is set.
|
|
44
|
+
* Pure / unit-testable.
|
|
45
|
+
*/
|
|
46
|
+
export function computeTurnAnchoredDurationMs(
|
|
47
|
+
engineTurnStartedAt: number | undefined,
|
|
48
|
+
generatingStartedAt: number,
|
|
49
|
+
now: number,
|
|
50
|
+
): { durationMs: number; anchor: 'turn-start' | 'generatingStartedAt' | 'none' } {
|
|
51
|
+
const engineStart = typeof engineTurnStartedAt === 'number' && Number.isFinite(engineTurnStartedAt)
|
|
52
|
+
? engineTurnStartedAt
|
|
53
|
+
: 0;
|
|
54
|
+
if (engineStart > 0) return { durationMs: now - engineStart, anchor: 'turn-start' };
|
|
55
|
+
if (generatingStartedAt > 0) return { durationMs: now - generatingStartedAt, anchor: 'generatingStartedAt' };
|
|
56
|
+
return { durationMs: 0, anchor: 'none' };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let CachedDatabaseSync: (new (path: string, options?: { readOnly?: boolean }) => {
|
|
60
|
+
prepare(sql: string): { get(...params: Array<string | number>): unknown };
|
|
61
|
+
close(): void;
|
|
62
|
+
}) | null = null;
|
|
63
|
+
|
|
64
|
+
export function getDatabaseSync() {
|
|
65
|
+
if (CachedDatabaseSync) return CachedDatabaseSync;
|
|
66
|
+
const requireFn = typeof require === 'function'
|
|
67
|
+
? require
|
|
68
|
+
: createRequire(path.join(process.cwd(), '__adhdev_sqlite_loader__.js'));
|
|
69
|
+
const sqliteModule = requireFn(`node:${'sqlite'}`) as {
|
|
70
|
+
DatabaseSync: typeof CachedDatabaseSync;
|
|
71
|
+
};
|
|
72
|
+
CachedDatabaseSync = sqliteModule.DatabaseSync;
|
|
73
|
+
if (!CachedDatabaseSync) {
|
|
74
|
+
throw new Error('node:sqlite DatabaseSync unavailable');
|
|
75
|
+
}
|
|
76
|
+
return CachedDatabaseSync;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function getForcedNewSessionScriptName(
|
|
80
|
+
provider: ProviderModule | undefined,
|
|
81
|
+
launchMode: 'new' | 'resume' | 'manual',
|
|
82
|
+
): string | null {
|
|
83
|
+
if (!provider || launchMode !== 'new') return null;
|
|
84
|
+
const resume = provider.resume;
|
|
85
|
+
if (!resume?.supported) return null;
|
|
86
|
+
if (Array.isArray(resume.newSessionArgs) && resume.newSessionArgs.length > 0) return null;
|
|
87
|
+
|
|
88
|
+
const controls = Array.isArray((provider as any).controls) ? (provider as any).controls : [];
|
|
89
|
+
for (const control of controls) {
|
|
90
|
+
if (control?.type !== 'action') continue;
|
|
91
|
+
if (typeof control?.confirmTitle === 'string' && control.confirmTitle.trim()) continue;
|
|
92
|
+
if (typeof control?.confirmMessage === 'string' && control.confirmMessage.trim()) continue;
|
|
93
|
+
if (typeof control?.confirmLabel === 'string' && control.confirmLabel.trim()) continue;
|
|
94
|
+
const invokeScript = typeof control?.invokeScript === 'string' ? control.invokeScript.trim() : '';
|
|
95
|
+
if (!invokeScript) continue;
|
|
96
|
+
const controlId = typeof control?.id === 'string' ? control.id.trim() : '';
|
|
97
|
+
if (controlId === 'new_session' || /^new.?session$/i.test(invokeScript)) {
|
|
98
|
+
return invokeScript;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export async function waitForCliAdapterReady(
|
|
106
|
+
adapter: { isReady?: () => boolean; getStatus?: () => { status?: string } },
|
|
107
|
+
options?: { timeoutMs?: number; pollMs?: number },
|
|
108
|
+
): Promise<void> {
|
|
109
|
+
const timeoutMs = Math.max(100, options?.timeoutMs ?? 15_000);
|
|
110
|
+
const pollMs = Math.max(10, options?.pollMs ?? 50);
|
|
111
|
+
const deadline = Date.now() + timeoutMs;
|
|
112
|
+
|
|
113
|
+
while (Date.now() < deadline) {
|
|
114
|
+
if (adapter?.isReady?.()) return;
|
|
115
|
+
const status = adapter?.getStatus?.()?.status;
|
|
116
|
+
if (status === 'stopped') {
|
|
117
|
+
throw new Error('CLI runtime stopped before it became ready');
|
|
118
|
+
}
|
|
119
|
+
await new Promise((resolve) => setTimeout(resolve, pollMs));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
throw new Error(`CLI runtime did not become ready within ${timeoutMs}ms`);
|
|
123
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// Transcript assembly helpers extracted from cli-provider-instance.ts.
|
|
2
|
+
// Pure move — no behavior change. `mergeConversationMessages` was a private
|
|
3
|
+
// method reading only `this.runtimeMessages`; it now takes that array as a
|
|
4
|
+
// parameter. `buildExternalTranscriptProbe` used no instance state.
|
|
5
|
+
|
|
6
|
+
import { flattenContent } from './contracts.js';
|
|
7
|
+
import { normalizeChatMessages, resolveChatMessageKind, isUserFacingChatMessage } from './chat-message-normalization.js';
|
|
8
|
+
import type { ChatMessage } from '../types.js';
|
|
9
|
+
import type { ExternalTranscriptProbe } from './cli-provider-instance-types.js';
|
|
10
|
+
|
|
11
|
+
export function mergeConversationMessages(
|
|
12
|
+
runtimeMessages: Array<{ key: string; message: ChatMessage }>,
|
|
13
|
+
parsedMessages: any[],
|
|
14
|
+
): ChatMessage[] {
|
|
15
|
+
if (runtimeMessages.length === 0) return normalizeChatMessages(parsedMessages);
|
|
16
|
+
|
|
17
|
+
type MergeEntry = { message: ChatMessage; index: number; source: 'parsed' | 'runtime'; runtimeKey?: string };
|
|
18
|
+
const parsedEntries: MergeEntry[] = parsedMessages.map((message, index) => ({
|
|
19
|
+
message,
|
|
20
|
+
index,
|
|
21
|
+
source: 'parsed',
|
|
22
|
+
}));
|
|
23
|
+
const getRole = (message: ChatMessage): string => typeof message.role === 'string'
|
|
24
|
+
? message.role.trim().toLowerCase()
|
|
25
|
+
: '';
|
|
26
|
+
const runtimeEntries: MergeEntry[] = runtimeMessages.map((entry, index) => ({
|
|
27
|
+
message: entry.message,
|
|
28
|
+
index: parsedMessages.length + index,
|
|
29
|
+
source: 'runtime' as const,
|
|
30
|
+
runtimeKey: entry.key,
|
|
31
|
+
})).filter((entry) => {
|
|
32
|
+
const meta = entry.message.meta && typeof entry.message.meta === 'object' && !Array.isArray(entry.message.meta)
|
|
33
|
+
? entry.message.meta as Record<string, unknown>
|
|
34
|
+
: {};
|
|
35
|
+
if (meta.runtimeInputAck !== true) return true;
|
|
36
|
+
const runtimeText = flattenContent(entry.message.content).replace(/\s+/g, ' ').trim();
|
|
37
|
+
if (!runtimeText) return false;
|
|
38
|
+
return !parsedEntries.some((parsedEntry) => {
|
|
39
|
+
const parsedRole = getRole(parsedEntry.message);
|
|
40
|
+
if (parsedRole !== 'user' && parsedRole !== 'human') return false;
|
|
41
|
+
const parsedText = flattenContent(parsedEntry.message.content).replace(/\s+/g, ' ').trim();
|
|
42
|
+
return parsedText === runtimeText;
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
const getTime = (message: ChatMessage): number => {
|
|
46
|
+
const value = typeof message.receivedAt === 'number'
|
|
47
|
+
? message.receivedAt
|
|
48
|
+
: typeof message.timestamp === 'number'
|
|
49
|
+
? message.timestamp
|
|
50
|
+
: 0;
|
|
51
|
+
return Number.isFinite(value) && value > 0 ? value : 0;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const isRuntimeOverlay = (entry: MergeEntry): boolean => {
|
|
55
|
+
if (entry.source !== 'runtime') return false;
|
|
56
|
+
const key = typeof entry.runtimeKey === 'string' ? entry.runtimeKey.trim().toLowerCase() : '';
|
|
57
|
+
if (key.startsWith('auto_approval:')) return true;
|
|
58
|
+
return !isUserFacingChatMessage(entry.message);
|
|
59
|
+
};
|
|
60
|
+
const shouldKeepParsedBeforeUntimedRuntime = (message: ChatMessage): boolean => {
|
|
61
|
+
const role = getRole(message);
|
|
62
|
+
return role === 'user' || role === 'human';
|
|
63
|
+
};
|
|
64
|
+
const shouldKeepParsedAfterUntimedRuntime = (message: ChatMessage): boolean => {
|
|
65
|
+
const role = getRole(message);
|
|
66
|
+
if (role !== 'assistant') return false;
|
|
67
|
+
const kind = resolveChatMessageKind(message);
|
|
68
|
+
return kind === 'standard' || kind === 'terminal';
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
return normalizeChatMessages([...parsedEntries, ...runtimeEntries]
|
|
72
|
+
.sort((a, b) => {
|
|
73
|
+
const aTime = getTime(a.message);
|
|
74
|
+
const bTime = getTime(b.message);
|
|
75
|
+
if (aTime && bTime && aTime !== bTime) return aTime - bTime;
|
|
76
|
+
if (a.source !== b.source && aTime !== bTime) {
|
|
77
|
+
const parsedEntry = a.source === 'parsed' ? a : b.source === 'parsed' ? b : null;
|
|
78
|
+
const runtimeEntry = a.source === 'runtime' ? a : b.source === 'runtime' ? b : null;
|
|
79
|
+
if (parsedEntry && runtimeEntry && isRuntimeOverlay(runtimeEntry) && getTime(parsedEntry.message) === 0 && getTime(runtimeEntry.message) > 0) {
|
|
80
|
+
if (shouldKeepParsedBeforeUntimedRuntime(parsedEntry.message)) {
|
|
81
|
+
return a.source === 'parsed' ? -1 : 1;
|
|
82
|
+
}
|
|
83
|
+
if (shouldKeepParsedAfterUntimedRuntime(parsedEntry.message)) {
|
|
84
|
+
return a.source === 'parsed' ? 1 : -1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Many provider-owned CLI transcripts (including Hermes CLI in debug bundles)
|
|
89
|
+
// do not carry timestamps on parsed messages. In that case there is no safe
|
|
90
|
+
// clock basis for interleaving timestamped runtime/system messages into the
|
|
91
|
+
// provider transcript. Keep user prompts before runtime overlays, but do not
|
|
92
|
+
// let timed runtime/system/tool/internal overlays become the final chat turns
|
|
93
|
+
// after an untimed parsed assistant transcript.
|
|
94
|
+
return a.index - b.index;
|
|
95
|
+
})
|
|
96
|
+
.map((entry) => entry.message));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function buildExternalTranscriptProbe(messages: unknown[], sourcePath?: string, sourceMtimeMs?: number): ExternalTranscriptProbe {
|
|
100
|
+
const visibleMessages = messages.filter((message: any) => isUserFacingChatMessage(message as ChatMessage));
|
|
101
|
+
const lastVisible = visibleMessages[visibleMessages.length - 1] as ChatMessage | undefined;
|
|
102
|
+
const readAt = Date.now();
|
|
103
|
+
const mtimeMs = Number(sourceMtimeMs) || 0;
|
|
104
|
+
return {
|
|
105
|
+
readAt,
|
|
106
|
+
msgCount: messages.length,
|
|
107
|
+
lastRole: typeof lastVisible?.role === 'string' ? lastVisible.role.trim().toLowerCase() : null,
|
|
108
|
+
lastKind: typeof (lastVisible as any)?.kind === 'string' ? (lastVisible as any).kind : null,
|
|
109
|
+
contentLen: lastVisible ? flattenContent(lastVisible.content).trim().length : 0,
|
|
110
|
+
sourcePath: typeof sourcePath === 'string' && sourcePath ? sourcePath : null,
|
|
111
|
+
sourceMtimeMs: mtimeMs || null,
|
|
112
|
+
mtimeAgeMs: mtimeMs ? Math.max(0, readAt - mtimeMs) : null,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
@@ -401,7 +401,62 @@ export interface ProviderModule {
|
|
|
401
401
|
spawnArgBuilder?: (config: Record<string, string>) => string[];
|
|
402
402
|
/** ACP agent auth methods (multiple supported — in priority order) */
|
|
403
403
|
auth?: AcpAuthMethod[];
|
|
404
|
+
/**
|
|
405
|
+
* Repo Mesh coordinator capability and MCP ingestion behavior.
|
|
406
|
+
* Providers must declare this rather than relying on daemon hardcoded CLI quirks.
|
|
407
|
+
*/
|
|
408
|
+
meshCoordinator?: ProviderMeshCoordinatorConfig;
|
|
409
|
+
}
|
|
410
|
+
export type MeshCoordinatorMcpConfigMode = 'auto_import' | 'manual' | 'none';
|
|
411
|
+
export type MeshCoordinatorMcpConfigFormat = 'claude_mcp_json' | 'hermes_config_yaml';
|
|
412
|
+
export interface ProviderMeshCoordinatorConfig {
|
|
413
|
+
supported: boolean;
|
|
414
|
+
reason?: string;
|
|
415
|
+
mcpConfig?: {
|
|
416
|
+
mode: MeshCoordinatorMcpConfigMode;
|
|
417
|
+
format?: MeshCoordinatorMcpConfigFormat;
|
|
418
|
+
path?: string;
|
|
419
|
+
serverName?: string;
|
|
420
|
+
configPathCommand?: string;
|
|
421
|
+
requiresRestart?: boolean;
|
|
422
|
+
instructions?: string;
|
|
423
|
+
template?: string;
|
|
424
|
+
};
|
|
425
|
+
systemPromptInjection?: MeshCoordinatorSystemPromptInjection;
|
|
426
|
+
delegatedWorkerIsolation?: MeshCoordinatorDelegatedWorkerIsolation;
|
|
404
427
|
}
|
|
428
|
+
export type MeshCoordinatorSystemPromptInjection = {
|
|
429
|
+
mode: 'cli_arg';
|
|
430
|
+
flag: string;
|
|
431
|
+
} | {
|
|
432
|
+
mode: 'config_override';
|
|
433
|
+
flag: string;
|
|
434
|
+
template: string;
|
|
435
|
+
} | {
|
|
436
|
+
mode: 'context_file';
|
|
437
|
+
path: string;
|
|
438
|
+
wrapper?: string;
|
|
439
|
+
} | {
|
|
440
|
+
mode: 'env_var';
|
|
441
|
+
name: string;
|
|
442
|
+
};
|
|
443
|
+
export interface MeshCoordinatorDelegatedWorkerIsolation {
|
|
444
|
+
env?: {
|
|
445
|
+
unset?: string[];
|
|
446
|
+
};
|
|
447
|
+
args?: MeshCoordinatorDelegatedWorkerArgRule[];
|
|
448
|
+
}
|
|
449
|
+
export type MeshCoordinatorDelegatedWorkerArgRule = {
|
|
450
|
+
mode: 'empty_mcp_config';
|
|
451
|
+
flag: string;
|
|
452
|
+
strictFlag?: string;
|
|
453
|
+
} | {
|
|
454
|
+
mode: 'config_override';
|
|
455
|
+
flag: string;
|
|
456
|
+
key: string;
|
|
457
|
+
value: string;
|
|
458
|
+
dedupeKey?: string;
|
|
459
|
+
};
|
|
405
460
|
export interface ProviderResumeCapability {
|
|
406
461
|
supported: boolean;
|
|
407
462
|
stopStrategy?: 'command' | 'ctrl_c';
|
|
@@ -15,6 +15,14 @@ import type { ChatMessageKind } from './chat-message-normalization.js';
|
|
|
15
15
|
export type ReadChatTurnStatus = 'open' | 'waiting_approval' | 'complete' | 'error';
|
|
16
16
|
|
|
17
17
|
export interface ReadChatResult {
|
|
18
|
+
/**
|
|
19
|
+
* Declared chat contract version. Absent or `'1.0'` → legacy v1 payload
|
|
20
|
+
* (current shape). `'2.0'` → v2 payload conforming to transcript-v2.ts
|
|
21
|
+
* (ReadChatResultV2). Validators in read-chat-contract.ts route on this
|
|
22
|
+
* field. A1 only adds the field; A2 will make v2 the daemon-internal
|
|
23
|
+
* canonical form and reject unrecognised versions at provider load time.
|
|
24
|
+
*/
|
|
25
|
+
contractVersion?: import('./transcript-v2.js').ChatContractVersion;
|
|
18
26
|
messages: ChatMessage[];
|
|
19
27
|
status: AgentStatus;
|
|
20
28
|
activeModal?: ModalInfo | null;
|
|
@@ -382,11 +390,99 @@ export interface ProviderMeshCoordinatorConfig {
|
|
|
382
390
|
requiresRestart?: boolean;
|
|
383
391
|
/** User-facing setup explanation for manual modes. */
|
|
384
392
|
instructions?: string;
|
|
385
|
-
/** Copyable setup template. Supports {{meshId}}, {{adhdevMcpCommand}}, {{workspace}}, {{serverName}}. */
|
|
393
|
+
/** Copyable setup template. Supports {{meshId}}, {{adhdevMcpCommand}}, {{adhdevMcpArgs}}, {{workspace}}, {{serverName}}. */
|
|
386
394
|
template?: string;
|
|
387
395
|
};
|
|
396
|
+
/**
|
|
397
|
+
* How the coordinator system prompt reaches the launched CLI. Replaces the
|
|
398
|
+
* old hard-coded `if (cliType === 'claude-cli') push --append-system-prompt`
|
|
399
|
+
* branches in router.ts: a new CLI now ships its injection rule in its
|
|
400
|
+
* provider.v1.json, no daemon code change needed. Users can override the
|
|
401
|
+
* rendered prompt or the injection mechanism per-provider; if omitted, no
|
|
402
|
+
* system prompt is injected (safe default — won't crash spawn with a flag
|
|
403
|
+
* the CLI doesn't recognize).
|
|
404
|
+
*/
|
|
405
|
+
systemPromptInjection?: MeshCoordinatorSystemPromptInjection;
|
|
406
|
+
/**
|
|
407
|
+
* How coordinator-launched worker sessions are isolated from coordinator-only
|
|
408
|
+
* MCP/tools/config. Provider-specific CLI quirks belong here, not in daemon
|
|
409
|
+
* launch code.
|
|
410
|
+
*/
|
|
411
|
+
delegatedWorkerIsolation?: MeshCoordinatorDelegatedWorkerIsolation;
|
|
388
412
|
}
|
|
389
413
|
|
|
414
|
+
export interface MeshCoordinatorDelegatedWorkerIsolation {
|
|
415
|
+
/** Environment variables to unset for delegated worker sessions. */
|
|
416
|
+
env?: {
|
|
417
|
+
unset?: string[];
|
|
418
|
+
};
|
|
419
|
+
/** Spawn-argument rules applied before launching a delegated worker. */
|
|
420
|
+
args?: MeshCoordinatorDelegatedWorkerArgRule[];
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
export type MeshCoordinatorDelegatedWorkerArgRule =
|
|
424
|
+
| {
|
|
425
|
+
mode: 'empty_mcp_config';
|
|
426
|
+
/** CLI flag that points at an MCP config file, e.g. '--mcp-config'. */
|
|
427
|
+
flag: string;
|
|
428
|
+
/** Optional CLI flag that forces only the provided MCP config to be used. */
|
|
429
|
+
strictFlag?: string;
|
|
430
|
+
}
|
|
431
|
+
| {
|
|
432
|
+
mode: 'config_override';
|
|
433
|
+
/** CLI config flag, e.g. '-c' or '--config'. */
|
|
434
|
+
flag: string;
|
|
435
|
+
/** Config key to set for worker isolation. */
|
|
436
|
+
key: string;
|
|
437
|
+
/** Config value to set. */
|
|
438
|
+
value: string;
|
|
439
|
+
/** Optional broader key prefix used for duplicate detection. */
|
|
440
|
+
dedupeKey?: string;
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Declarative description of how a CLI accepts a session-scoped system prompt.
|
|
445
|
+
*
|
|
446
|
+
* Modes:
|
|
447
|
+
* - cli_arg → push `flag` + prompt onto spawn args (Claude)
|
|
448
|
+
* - config_override → push `flag` + a templated key=value config override (Codex)
|
|
449
|
+
* - context_file → write prompt into a workspace markdown the CLI
|
|
450
|
+
* auto-loads as project context (Gemini, Antigravity)
|
|
451
|
+
* - env_var → expose prompt to the spawned process as $name (Hermes)
|
|
452
|
+
*
|
|
453
|
+
* The prompt text is templated with `{prompt}` (raw) or `{prompt_json}`
|
|
454
|
+
* (JSON-encoded for embedding inside config-override strings).
|
|
455
|
+
*/
|
|
456
|
+
export type MeshCoordinatorSystemPromptInjection =
|
|
457
|
+
| {
|
|
458
|
+
mode: 'cli_arg';
|
|
459
|
+
/** Spawn-args flag, e.g. '--append-system-prompt'. The prompt becomes the next argv. */
|
|
460
|
+
flag: string;
|
|
461
|
+
}
|
|
462
|
+
| {
|
|
463
|
+
mode: 'config_override';
|
|
464
|
+
/** Spawn-args flag, e.g. '-c'. Followed by `template` with placeholders rendered. */
|
|
465
|
+
flag: string;
|
|
466
|
+
/** Template using {prompt} or {prompt_json}, e.g. 'developer_instructions={prompt_json}'. */
|
|
467
|
+
template: string;
|
|
468
|
+
}
|
|
469
|
+
| {
|
|
470
|
+
mode: 'context_file';
|
|
471
|
+
/** Workspace-relative file path the CLI auto-loads, e.g. 'AGENTS.md' or 'GEMINI.md'. */
|
|
472
|
+
path: string;
|
|
473
|
+
/**
|
|
474
|
+
* Optional wrapper around the prompt. Use `{prompt}` placeholder. Existing
|
|
475
|
+
* wrapper-delimited blocks are replaced rather than duplicated, so re-launching
|
|
476
|
+
* a coordinator doesn't pile up copies. If omitted, the prompt is appended raw.
|
|
477
|
+
*/
|
|
478
|
+
wrapper?: string;
|
|
479
|
+
}
|
|
480
|
+
| {
|
|
481
|
+
mode: 'env_var';
|
|
482
|
+
/** Env-var name, e.g. 'HERMES_EPHEMERAL_SYSTEM_PROMPT'. */
|
|
483
|
+
name: string;
|
|
484
|
+
};
|
|
485
|
+
|
|
390
486
|
export interface ProviderCompatibilityEntry {
|
|
391
487
|
ideVersion: string;
|
|
392
488
|
scriptDir: string;
|
|
@@ -472,6 +568,14 @@ export interface ProviderModule {
|
|
|
472
568
|
extensionIdPattern_flags?: string;
|
|
473
569
|
compatibility?: ProviderCompatibilityEntry[];
|
|
474
570
|
defaultScriptDir?: string;
|
|
571
|
+
/**
|
|
572
|
+
* v1 declarative tui block (spinner/settledPrompt/modal/dispatchOrder/etc).
|
|
573
|
+
* When present, the daemon's CliScriptRunner builds canonical
|
|
574
|
+
* (input → verdict) functions from this and injects them into provider
|
|
575
|
+
* scripts as `sdk.declarativeDetectStatus` and `sdk.declarativeParseApproval`.
|
|
576
|
+
* v0 / verified-tier providers can omit this entirely.
|
|
577
|
+
*/
|
|
578
|
+
tui?: Record<string, unknown>;
|
|
475
579
|
/**
|
|
476
580
|
* Scripts that can run at the IDE main-page level (not just inside the extension webview session frame).
|
|
477
581
|
* Default: ['listModes', 'setMode', 'listModels', 'setModel'].
|
|
@@ -490,6 +594,63 @@ export interface ProviderModule {
|
|
|
490
594
|
/** Auto-implement spawn config — controls how this provider is invoked for autonomous script generation */
|
|
491
595
|
autoImpl?: ProviderAutoImplSpawnConfig;
|
|
492
596
|
};
|
|
597
|
+
/**
|
|
598
|
+
* MAGI-KIND-PANEL (model axis): template for expanding an `initialModel` selection
|
|
599
|
+
* into launch args for a CLI provider. `{{model}}` is substituted with the model
|
|
600
|
+
* string; e.g. `['--model', '{{model}}']` for claude-cli → `--model opus`. Applied
|
|
601
|
+
* at session launch when `initialModel` is passed AND this provider is a plain CLI
|
|
602
|
+
* (ACP providers instead route the model through setConfigOption). A CLI provider
|
|
603
|
+
* with no template silently ignores `initialModel` at launch (best-effort; a model
|
|
604
|
+
* request never fails a launch). Absent → no launch-time model selection for CLI.
|
|
605
|
+
*/
|
|
606
|
+
modelLaunchArgs?: string[];
|
|
607
|
+
/**
|
|
608
|
+
* BRAIN-ROUTING (model axis): suggested model values for this provider, surfaced
|
|
609
|
+
* as dropdown options in the new-session dialog (e.g. claude ['opus','sonnet',
|
|
610
|
+
* 'haiku']; codex ['gpt-5.5','gpt-5-codex']). Advisory only — the UI allows free
|
|
611
|
+
* text too, so the list going stale never blocks a model the provider accepts.
|
|
612
|
+
*/
|
|
613
|
+
modelOptions?: string[];
|
|
614
|
+
/**
|
|
615
|
+
* BRAIN-ROUTING (thinking axis): template for expanding an `initialThinkingLevel`
|
|
616
|
+
* selection into launch args for a CLI provider, parallel to modelLaunchArgs.
|
|
617
|
+
* `{{level}}` is substituted with the provider-appropriate reasoning-effort value
|
|
618
|
+
* (already mapped from the standard low|medium|high level, see thinkingLevelMap).
|
|
619
|
+
* Examples: claude-cli `['--effort', '{{level}}']` → `--effort high`; codex-cli
|
|
620
|
+
* `['-c', 'model_reasoning_effort={{level}}']`. Applied at session launch when
|
|
621
|
+
* `initialThinkingLevel` is passed AND this provider is a plain CLI. A CLI provider
|
|
622
|
+
* with no template silently ignores the thinking level (best-effort; never fails a
|
|
623
|
+
* launch). ACP providers instead route thinking through setConfigOption('thought_level').
|
|
624
|
+
*/
|
|
625
|
+
thinkingLaunchArgs?: string[];
|
|
626
|
+
/**
|
|
627
|
+
* BRAIN-ROUTING (thinking axis): optional per-provider mapping from the standard
|
|
628
|
+
* thinking levels (`low`|`medium`|`high`) to this provider's own reasoning-effort
|
|
629
|
+
* vocabulary, used to fill `{{level}}` in thinkingLaunchArgs. e.g. claude-cli might
|
|
630
|
+
* map `{ high: 'max' }`; codex-cli `{ high: 'xhigh' }`. A level absent from the map
|
|
631
|
+
* passes through unchanged (so `medium` → `medium` by default).
|
|
632
|
+
*/
|
|
633
|
+
thinkingLevelMap?: Partial<Record<'low' | 'medium' | 'high', string>>;
|
|
634
|
+
/**
|
|
635
|
+
* BRAIN-ROUTING (thinking axis): the reasoning-effort values this provider actually
|
|
636
|
+
* accepts, surfaced as the thinking-level dropdown options in the new-session
|
|
637
|
+
* dialog (e.g. claude ['low','medium','high','max']; codex ['minimal','low',
|
|
638
|
+
* 'medium','high','xhigh']). Absent → the UI falls back to the standard
|
|
639
|
+
* low/medium/high. These are the provider's OWN vocabulary and are passed through
|
|
640
|
+
* verbatim as initialThinkingLevel (not remapped by thinkingLevelMap, which only
|
|
641
|
+
* translates the mesh's standard low/medium/high presets).
|
|
642
|
+
*/
|
|
643
|
+
thinkingLevelOptions?: string[];
|
|
644
|
+
/**
|
|
645
|
+
* BRAIN-ROUTING (thinking axis, runtime-control providers): the `controls[].id`
|
|
646
|
+
* of a runtime reasoning-effort control to drive for the thinking level when the
|
|
647
|
+
* provider has no `thinkingLaunchArgs` (e.g. hermes-cli's `reasoning` select,
|
|
648
|
+
* which types `/reasoning <level>` into the PTY via its setScript). At launch,
|
|
649
|
+
* initialThinkingLevel (after thinkingLevelMap) is applied by invoking that
|
|
650
|
+
* control's setScript with `{ value: <level> }`. Ignored if the id doesn't match a
|
|
651
|
+
* control. Providers that use thinkingLaunchArgs don't need this.
|
|
652
|
+
*/
|
|
653
|
+
thinkingControlId?: string;
|
|
493
654
|
/** Delay before submitting typed CLI input (provider-specific TUI tuning) */
|
|
494
655
|
sendDelayMs?: number;
|
|
495
656
|
/** Submit key used after typing into CLI PTY (default: carriage return) */
|
|
@@ -525,8 +686,16 @@ export interface ProviderModule {
|
|
|
525
686
|
/** History behavior config — controls message filtering and collapse during replay */
|
|
526
687
|
historyBehavior?: ProviderHistoryBehavior;
|
|
527
688
|
/**
|
|
528
|
-
*
|
|
529
|
-
* When set, daemon
|
|
689
|
+
* Native history config — for providers that maintain native history files.
|
|
690
|
+
* When set, daemon reads/lists provider-native transcripts directly. This is
|
|
691
|
+
* the canonical v1 field name; the legacy `canonicalHistory` field name is
|
|
692
|
+
* still accepted by the loader and aliased onto this field at load time.
|
|
693
|
+
*/
|
|
694
|
+
nativeHistory?: NativeHistoryConfig;
|
|
695
|
+
/**
|
|
696
|
+
* @deprecated Legacy v0 alias for {@link ProviderModule.nativeHistory}.
|
|
697
|
+
* Loader populates this from `nativeHistory` so existing internal readers
|
|
698
|
+
* keep working during the transition. Remove after one release.
|
|
530
699
|
*/
|
|
531
700
|
canonicalHistory?: ProviderCanonicalHistoryConfig;
|
|
532
701
|
/**
|
|
@@ -672,7 +841,7 @@ export interface ProviderHistoryBehavior {
|
|
|
672
841
|
* daemon-core. They let each provider own native transcript file discovery and
|
|
673
842
|
* parsing while daemon-core only validates/pages the normalized result.
|
|
674
843
|
*/
|
|
675
|
-
export interface
|
|
844
|
+
export interface NativeHistoryScriptsConfig {
|
|
676
845
|
/** Reads one native session. Default: 'readNativeHistory'. */
|
|
677
846
|
readSession?: string;
|
|
678
847
|
/** Lists native sessions with summary metadata. Default: 'listNativeHistory'. */
|
|
@@ -680,13 +849,19 @@ export interface ProviderCanonicalHistoryScriptsConfig {
|
|
|
680
849
|
}
|
|
681
850
|
|
|
682
851
|
/**
|
|
683
|
-
*
|
|
852
|
+
* @deprecated Use {@link NativeHistoryScriptsConfig}. Retained as an alias for
|
|
853
|
+
* one release so external consumers that referenced the old name keep compiling.
|
|
854
|
+
*/
|
|
855
|
+
export type ProviderCanonicalHistoryScriptsConfig = NativeHistoryScriptsConfig;
|
|
856
|
+
|
|
857
|
+
/**
|
|
858
|
+
* Native history config — for providers that maintain their own native history files.
|
|
684
859
|
*
|
|
685
860
|
* Preferred mode is provider-owned scripts via `scripts`. `format` is now an
|
|
686
861
|
* opaque provider label retained for diagnostics/backward compatibility; daemon
|
|
687
862
|
* live paths must not branch on provider-specific format values.
|
|
688
863
|
*/
|
|
689
|
-
export interface
|
|
864
|
+
export interface NativeHistoryConfig {
|
|
690
865
|
/** Opaque provider-owned history format label. */
|
|
691
866
|
format?: string;
|
|
692
867
|
/** Optional native history glob/template for diagnostics only. */
|
|
@@ -702,8 +877,25 @@ export interface ProviderCanonicalHistoryConfig {
|
|
|
702
877
|
* Omitted mode defaults to 'native-source'.
|
|
703
878
|
*/
|
|
704
879
|
mode?: 'native-source' | 'materialized-mirror' | 'disabled';
|
|
880
|
+
/**
|
|
881
|
+
* Chat transcript contract version this provider's read_chat output
|
|
882
|
+
* conforms to. See transcript-v2.ts for the v2 invariants. Absent or `'1.0'`
|
|
883
|
+
* → legacy v1 payload (current behaviour). `'2.0'` → strict v2 payload
|
|
884
|
+
* (stable providerUnitKey/bubbleId/sequence, strict enums, honest coverage).
|
|
885
|
+
*
|
|
886
|
+
* A1 only surfaces this field; validators in read-chat-contract.ts route
|
|
887
|
+
* on it. A2 makes v2 the daemon-internal canonical form and rejects
|
|
888
|
+
* unrecognised values at provider load time.
|
|
889
|
+
*/
|
|
890
|
+
contractVersion?: import('./transcript-v2.js').ChatContractVersion;
|
|
705
891
|
}
|
|
706
892
|
|
|
893
|
+
/**
|
|
894
|
+
* @deprecated Use {@link NativeHistoryConfig}. Retained as an alias for one
|
|
895
|
+
* release so external consumers that referenced the old name keep compiling.
|
|
896
|
+
*/
|
|
897
|
+
export type ProviderCanonicalHistoryConfig = NativeHistoryConfig;
|
|
898
|
+
|
|
707
899
|
/**
|
|
708
900
|
* Auto-implement spawn config — controls how the provider is spawned for autonomous AI-driven
|
|
709
901
|
* provider script implementation (dev-auto-implement.ts).
|
|
@@ -1021,4 +1213,13 @@ export interface ProviderControlDef {
|
|
|
1021
1213
|
order?: number;
|
|
1022
1214
|
/** Hide this control when condition not met */
|
|
1023
1215
|
hidden?: boolean;
|
|
1216
|
+
/**
|
|
1217
|
+
* FSM state ids in which this control should be visible (mirrors the spec's
|
|
1218
|
+
* `control_bar[].visible_when_state`). When omitted the control is always
|
|
1219
|
+
* visible. The daemon enforces this on click (FsmDriver.handleClickControl),
|
|
1220
|
+
* so the web bar must mirror the same gating to avoid showing a button that
|
|
1221
|
+
* the daemon would silently drop. Uses raw FSM state ids (e.g. 'idle',
|
|
1222
|
+
* 'busy'), not the derived dashboard status.
|
|
1223
|
+
*/
|
|
1224
|
+
visibleWhenState?: string[];
|
|
1024
1225
|
}
|
|
@@ -63,8 +63,8 @@ export class ExtensionProviderInstance implements ProviderInstance {
|
|
|
63
63
|
this.settings = context.settings || {};
|
|
64
64
|
this.monitor.updateConfig({
|
|
65
65
|
approvalAlert: this.settings.approvalAlert !== false,
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
noProgressAlert: (this.settings.noProgressAlert ?? this.settings.longGeneratingAlert) !== false,
|
|
67
|
+
noProgressThresholdSec: this.settings.noProgressThresholdSec ?? this.settings.longGeneratingThresholdSec ?? 180,
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -171,11 +171,15 @@ export class ExtensionProviderInstance implements ProviderInstance {
|
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
updateSettings(newSettings: Record<string, any>): void {
|
|
174
|
-
|
|
174
|
+
// Merge (not replace): a key omitted from newSettings preserves its existing
|
|
175
|
+
// value, a key present (even false) overrides. Mirrors cli/ide-provider-instance
|
|
176
|
+
// so partial updates do not wipe launch-time settings (e.g. autoApprove) while a
|
|
177
|
+
// full settings object still applies explicit values.
|
|
178
|
+
this.settings = { ...this.settings, ...newSettings };
|
|
175
179
|
this.monitor.updateConfig({
|
|
176
180
|
approvalAlert: this.settings.approvalAlert !== false,
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
noProgressAlert: (this.settings.noProgressAlert ?? this.settings.longGeneratingAlert) !== false,
|
|
182
|
+
noProgressThresholdSec: this.settings.noProgressThresholdSec ?? this.settings.longGeneratingThresholdSec ?? 180,
|
|
179
183
|
});
|
|
180
184
|
}
|
|
181
185
|
|
|
@@ -247,9 +251,10 @@ export class ExtensionProviderInstance implements ProviderInstance {
|
|
|
247
251
|
: 'immediate',
|
|
248
252
|
});
|
|
249
253
|
|
|
250
|
-
// Monitor check (cooldown based notification) — keep monitor events (
|
|
254
|
+
// Monitor check (cooldown based notification) — keep monitor events (no_progress etc)
|
|
251
255
|
const agentKey = `${this.type}:ext`;
|
|
252
|
-
const
|
|
256
|
+
const approvalPending = agentStatus === 'waiting_approval';
|
|
257
|
+
const monitorEvents = this.monitor.check(agentKey, agentStatus, now, progressFingerprint, approvalPending);
|
|
253
258
|
for (const me of monitorEvents) {
|
|
254
259
|
this.pushEvent({ event: me.type, agentKey: me.agentKey, message: me.message, elapsedSec: me.elapsedSec, timestamp: me.timestamp });
|
|
255
260
|
}
|