@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,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider fixture format — v1.
|
|
3
|
+
*
|
|
4
|
+
* A fixture is two files committed alongside a provider:
|
|
5
|
+
*
|
|
6
|
+
* fixtures/<scenario>.pty — raw PTY byte capture (binary or text)
|
|
7
|
+
* fixtures/<scenario>.expected.json — expected handler outputs at one
|
|
8
|
+
* or more anchor frames
|
|
9
|
+
*
|
|
10
|
+
* Scenarios cover one concrete agent behaviour: cold start, prompt sent,
|
|
11
|
+
* generating with tool call, approval modal, idle after assistant complete,
|
|
12
|
+
* etc.
|
|
13
|
+
*
|
|
14
|
+
* The replay runner feeds the .pty bytes through the daemon's terminal
|
|
15
|
+
* emulator (TerminalTranscriptAccumulator) building up snapshots at each
|
|
16
|
+
* declared anchor, invokes the provider handlers, and compares results
|
|
17
|
+
* to the .expected.json shape.
|
|
18
|
+
*
|
|
19
|
+
* This file is the source of truth for the format. Schema mirror at
|
|
20
|
+
* sdk/v1/schemas/fixture-expected.schema.json.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import type {
|
|
24
|
+
CliApprovalModal,
|
|
25
|
+
CliChatMessage,
|
|
26
|
+
CliStatus,
|
|
27
|
+
} from '../types/cli/index.js';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The top-level shape of <scenario>.expected.json.
|
|
31
|
+
*
|
|
32
|
+
* `anchors` is an ordered list; each anchor declares a point in the
|
|
33
|
+
* PTY stream (by byte offset or by sentinel string) and the expected
|
|
34
|
+
* handler outputs at that point.
|
|
35
|
+
*/
|
|
36
|
+
export interface FixtureExpected {
|
|
37
|
+
/** Schema version. Currently always 1. */
|
|
38
|
+
version: 1;
|
|
39
|
+
/** Free-form human description of the scenario. */
|
|
40
|
+
description?: string;
|
|
41
|
+
/** Provider type this fixture is for. */
|
|
42
|
+
providerType: string;
|
|
43
|
+
/** Path (relative to the .expected.json file) of the corresponding .pty file. */
|
|
44
|
+
ptyFile: string;
|
|
45
|
+
/** Optional cols/rows the recording was captured under. Defaults to 80x24. */
|
|
46
|
+
terminal?: { cols: number; rows: number };
|
|
47
|
+
/** Anchor points. Order matters; bytes are replayed up to each anchor. */
|
|
48
|
+
anchors: FixtureAnchor[];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface FixtureAnchor {
|
|
52
|
+
/** Human-readable identifier. Used in test reporter output. */
|
|
53
|
+
name: string;
|
|
54
|
+
/** Optional description. */
|
|
55
|
+
description?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Where to stop replaying bytes. Exactly one of:
|
|
58
|
+
* - `untilByte` — stop after the Nth raw byte
|
|
59
|
+
* - `untilSentinel` — stop the first time `sentinel` appears in the
|
|
60
|
+
* accumulated rendered screen text
|
|
61
|
+
*/
|
|
62
|
+
untilByte?: number;
|
|
63
|
+
untilSentinel?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Expected handler outputs. All keys optional; the replay runner only
|
|
66
|
+
* checks the keys you provide.
|
|
67
|
+
*/
|
|
68
|
+
expect: {
|
|
69
|
+
detectStatus?: CliStatus | null;
|
|
70
|
+
parseApproval?: CliApprovalModal | null;
|
|
71
|
+
parseSession?: {
|
|
72
|
+
status?: CliStatus;
|
|
73
|
+
modal?: CliApprovalModal | null;
|
|
74
|
+
providerSessionId?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Either an exact array (deep-equal) or a shape declaration that lets
|
|
77
|
+
* you match only the role/kind/content shape without pinning specific
|
|
78
|
+
* fields. Pin specific message-by-message when you care about content.
|
|
79
|
+
*/
|
|
80
|
+
messages?: CliChatMessage[] | MessageShape[];
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Optional notes about why this anchor exists. Encouraged for
|
|
85
|
+
* regression-style fixtures so future maintainers know what bug the
|
|
86
|
+
* fixture catches.
|
|
87
|
+
*/
|
|
88
|
+
notes?: string;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* A shape declaration that matches a message by role/kind plus optional
|
|
93
|
+
* content substring or regex. Use this instead of an exact CliChatMessage
|
|
94
|
+
* when you do not want to pin exact text.
|
|
95
|
+
*/
|
|
96
|
+
export interface MessageShape {
|
|
97
|
+
role: CliChatMessage['role'];
|
|
98
|
+
kind?: CliChatMessage['kind'];
|
|
99
|
+
/** Substring the content must contain. Plain string only. */
|
|
100
|
+
contentIncludes?: string;
|
|
101
|
+
/** Regex the content must match. */
|
|
102
|
+
contentMatches?: { source: string; flags?: string };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Result of replaying one anchor — what the handlers actually emitted.
|
|
107
|
+
* Used by the test runner to produce diff output.
|
|
108
|
+
*/
|
|
109
|
+
export interface AnchorReplayResult {
|
|
110
|
+
anchor: FixtureAnchor;
|
|
111
|
+
passes: boolean;
|
|
112
|
+
diffs: string[];
|
|
113
|
+
actual: {
|
|
114
|
+
detectStatus?: CliStatus | null;
|
|
115
|
+
parseApproval?: CliApprovalModal | null;
|
|
116
|
+
parseSession?: {
|
|
117
|
+
status: CliStatus;
|
|
118
|
+
modal: CliApprovalModal | null;
|
|
119
|
+
providerSessionId?: string;
|
|
120
|
+
messages: CliChatMessage[];
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface FixtureReplayResult {
|
|
126
|
+
fixturePath: string;
|
|
127
|
+
expected: FixtureExpected;
|
|
128
|
+
perAnchor: AnchorReplayResult[];
|
|
129
|
+
overallPasses: boolean;
|
|
130
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixture tooling — public surface.
|
|
3
|
+
*
|
|
4
|
+
* Imported by `adhdev provider test` and by daemon-core's CI regression
|
|
5
|
+
* suite. Format types and the replay runner are stable v1.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export type {
|
|
9
|
+
FixtureExpected,
|
|
10
|
+
FixtureAnchor,
|
|
11
|
+
MessageShape,
|
|
12
|
+
AnchorReplayResult,
|
|
13
|
+
FixtureReplayResult,
|
|
14
|
+
} from './format.js';
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
loadFixtureExpected,
|
|
18
|
+
replayFixture,
|
|
19
|
+
formatReplayReport,
|
|
20
|
+
type CliProviderHandlers,
|
|
21
|
+
type ReplayOptions,
|
|
22
|
+
} from './replay.js';
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixture replay runner.
|
|
3
|
+
*
|
|
4
|
+
* Given a `.pty` byte capture and `.expected.json` declaration, replay the
|
|
5
|
+
* bytes through the daemon's TerminalTranscriptAccumulator, invoke the
|
|
6
|
+
* provider handlers at each anchor, and diff against expectations.
|
|
7
|
+
*
|
|
8
|
+
* Used by:
|
|
9
|
+
* - `adhdev provider test` (daemon-cloud CLI)
|
|
10
|
+
* - daemon-core CI suite for production-provider regression tests
|
|
11
|
+
* - external authors as `adhdev provider test ./`
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { readFileSync } from 'node:fs';
|
|
15
|
+
import { dirname, resolve } from 'node:path';
|
|
16
|
+
import {
|
|
17
|
+
TerminalTranscriptAccumulator,
|
|
18
|
+
buildCliScreenSnapshot,
|
|
19
|
+
type CliScriptInput as InternalCliScriptInput,
|
|
20
|
+
type CliStatusInput as InternalCliStatusInput,
|
|
21
|
+
type CliApprovalInput as InternalCliApprovalInput,
|
|
22
|
+
type ParsedSession as InternalParsedSession,
|
|
23
|
+
} from '../../../../cli-adapters/provider-cli-shared.js';
|
|
24
|
+
import type {
|
|
25
|
+
CliApprovalModal,
|
|
26
|
+
CliChatMessage,
|
|
27
|
+
CliStatus,
|
|
28
|
+
} from '../types/cli/index.js';
|
|
29
|
+
import type {
|
|
30
|
+
FixtureExpected,
|
|
31
|
+
FixtureAnchor,
|
|
32
|
+
AnchorReplayResult,
|
|
33
|
+
FixtureReplayResult,
|
|
34
|
+
MessageShape,
|
|
35
|
+
} from './format.js';
|
|
36
|
+
|
|
37
|
+
// ─── Provider handler shape (matches the contract) ─────────────────────
|
|
38
|
+
|
|
39
|
+
export interface CliProviderHandlers {
|
|
40
|
+
createState?: () => Record<string, unknown>;
|
|
41
|
+
parseSession: (state: unknown, input: InternalCliScriptInput) => InternalParsedSession;
|
|
42
|
+
detectStatus: (input: InternalCliStatusInput) => string | null;
|
|
43
|
+
parseApproval: (input: InternalCliApprovalInput) => { message: string; buttons: string[] } | null;
|
|
44
|
+
parseOutput?: (state: unknown, input: InternalCliScriptInput) => unknown;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface ReplayOptions {
|
|
48
|
+
/** Override accumulator dimensions. Defaults to the fixture's terminal block or 80x24. */
|
|
49
|
+
cols?: number;
|
|
50
|
+
rows?: number;
|
|
51
|
+
/** Provided manually (e.g. by tests). Defaults to wall-clock at replay start. */
|
|
52
|
+
spawnAt?: number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ─── Helpers — build the inputs the handlers expect ────────────────────
|
|
56
|
+
|
|
57
|
+
function makeStatusInput(buffer: string, rawBuffer: string): InternalCliStatusInput {
|
|
58
|
+
const tail = buffer.slice(-1000);
|
|
59
|
+
const screenText = buffer;
|
|
60
|
+
return {
|
|
61
|
+
tail,
|
|
62
|
+
screenText,
|
|
63
|
+
rawBuffer,
|
|
64
|
+
isWaitingForResponse: false,
|
|
65
|
+
screen: buildCliScreenSnapshot(screenText),
|
|
66
|
+
tailScreen: buildCliScreenSnapshot(tail),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function makeApprovalInput(buffer: string, rawBuffer: string): InternalCliApprovalInput {
|
|
71
|
+
const tail = buffer.slice(-1000);
|
|
72
|
+
const screenText = buffer;
|
|
73
|
+
return {
|
|
74
|
+
buffer,
|
|
75
|
+
screenText,
|
|
76
|
+
rawBuffer,
|
|
77
|
+
tail,
|
|
78
|
+
screen: buildCliScreenSnapshot(screenText),
|
|
79
|
+
bufferScreen: buildCliScreenSnapshot(buffer),
|
|
80
|
+
tailScreen: buildCliScreenSnapshot(tail),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function makeScriptInput(
|
|
85
|
+
buffer: string,
|
|
86
|
+
rawBuffer: string,
|
|
87
|
+
spawnAt: number,
|
|
88
|
+
): InternalCliScriptInput {
|
|
89
|
+
const recentBuffer = buffer.slice(-1000);
|
|
90
|
+
const screenText = buffer;
|
|
91
|
+
return {
|
|
92
|
+
buffer,
|
|
93
|
+
rawBuffer,
|
|
94
|
+
recentBuffer,
|
|
95
|
+
screenText,
|
|
96
|
+
screen: buildCliScreenSnapshot(screenText),
|
|
97
|
+
bufferScreen: buildCliScreenSnapshot(buffer),
|
|
98
|
+
recentScreen: buildCliScreenSnapshot(recentBuffer),
|
|
99
|
+
messages: [],
|
|
100
|
+
partialResponse: '',
|
|
101
|
+
isWaitingForResponse: false,
|
|
102
|
+
spawnAt,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// ─── Anchor stop condition ─────────────────────────────────────────────
|
|
107
|
+
|
|
108
|
+
function nextStopIndex(anchor: FixtureAnchor, startIdx: number, raw: string): number {
|
|
109
|
+
if (typeof anchor.untilByte === 'number') {
|
|
110
|
+
return Math.min(anchor.untilByte, raw.length);
|
|
111
|
+
}
|
|
112
|
+
if (anchor.untilSentinel) {
|
|
113
|
+
const idx = raw.indexOf(anchor.untilSentinel, startIdx);
|
|
114
|
+
return idx < 0 ? raw.length : idx + anchor.untilSentinel.length;
|
|
115
|
+
}
|
|
116
|
+
// Default: replay everything.
|
|
117
|
+
return raw.length;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ─── Shape matching for messages ───────────────────────────────────────
|
|
121
|
+
|
|
122
|
+
function isShapeArray(input: unknown): input is MessageShape[] {
|
|
123
|
+
if (!Array.isArray(input) || input.length === 0) return false;
|
|
124
|
+
return input.every((m) => {
|
|
125
|
+
if (!m || typeof m !== 'object') return false;
|
|
126
|
+
const keys = Object.keys(m as object);
|
|
127
|
+
// Detect by absence of CliChatMessage-only required fields like `content` typed string.
|
|
128
|
+
return (
|
|
129
|
+
keys.some((k) => k === 'contentIncludes' || k === 'contentMatches') ||
|
|
130
|
+
(keys.includes('role') && !keys.includes('content'))
|
|
131
|
+
);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function messageMatchesShape(actual: CliChatMessage, shape: MessageShape): string | null {
|
|
136
|
+
if (actual.role !== shape.role) {
|
|
137
|
+
return `role mismatch: expected "${shape.role}", got "${actual.role}"`;
|
|
138
|
+
}
|
|
139
|
+
if (shape.kind && actual.kind && actual.kind !== shape.kind) {
|
|
140
|
+
return `kind mismatch: expected "${shape.kind}", got "${actual.kind}"`;
|
|
141
|
+
}
|
|
142
|
+
const content = typeof actual.content === 'string'
|
|
143
|
+
? actual.content
|
|
144
|
+
: JSON.stringify(actual.content);
|
|
145
|
+
if (shape.contentIncludes && !content.includes(shape.contentIncludes)) {
|
|
146
|
+
return `content missing substring "${shape.contentIncludes.slice(0, 40)}"`;
|
|
147
|
+
}
|
|
148
|
+
if (shape.contentMatches) {
|
|
149
|
+
const re = new RegExp(shape.contentMatches.source, shape.contentMatches.flags ?? '');
|
|
150
|
+
if (!re.test(content)) {
|
|
151
|
+
return `content does not match /${shape.contentMatches.source}/${shape.contentMatches.flags ?? ''}`;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ─── Diffing ───────────────────────────────────────────────────────────
|
|
158
|
+
|
|
159
|
+
function diffStatus(
|
|
160
|
+
label: string,
|
|
161
|
+
expected: unknown,
|
|
162
|
+
actual: unknown,
|
|
163
|
+
diffs: string[],
|
|
164
|
+
): void {
|
|
165
|
+
if (expected === undefined) return;
|
|
166
|
+
if (expected !== actual) {
|
|
167
|
+
diffs.push(`${label}: expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function diffModal(
|
|
172
|
+
label: string,
|
|
173
|
+
expected: CliApprovalModal | null | undefined,
|
|
174
|
+
actual: CliApprovalModal | null,
|
|
175
|
+
diffs: string[],
|
|
176
|
+
): void {
|
|
177
|
+
if (expected === undefined) return;
|
|
178
|
+
if (expected === null) {
|
|
179
|
+
if (actual !== null) {
|
|
180
|
+
diffs.push(`${label}: expected null modal, got ${JSON.stringify(actual)}`);
|
|
181
|
+
}
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (actual === null) {
|
|
185
|
+
diffs.push(`${label}: expected modal, got null`);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (expected.message !== actual.message) {
|
|
189
|
+
diffs.push(`${label}.message: expected "${expected.message}", got "${actual.message}"`);
|
|
190
|
+
}
|
|
191
|
+
if (expected.buttons.length !== actual.buttons.length) {
|
|
192
|
+
diffs.push(`${label}.buttons.length: expected ${expected.buttons.length}, got ${actual.buttons.length}`);
|
|
193
|
+
} else {
|
|
194
|
+
for (let i = 0; i < expected.buttons.length; i += 1) {
|
|
195
|
+
if (expected.buttons[i] !== actual.buttons[i]) {
|
|
196
|
+
diffs.push(`${label}.buttons[${i}]: expected "${expected.buttons[i]}", got "${actual.buttons[i]}"`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function diffMessages(
|
|
203
|
+
label: string,
|
|
204
|
+
expected: CliChatMessage[] | MessageShape[] | undefined,
|
|
205
|
+
actual: CliChatMessage[],
|
|
206
|
+
diffs: string[],
|
|
207
|
+
): void {
|
|
208
|
+
if (expected === undefined) return;
|
|
209
|
+
if (expected.length !== actual.length) {
|
|
210
|
+
diffs.push(`${label}.length: expected ${expected.length}, got ${actual.length}`);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (isShapeArray(expected)) {
|
|
214
|
+
for (let i = 0; i < expected.length; i += 1) {
|
|
215
|
+
const reason = messageMatchesShape(actual[i], expected[i] as MessageShape);
|
|
216
|
+
if (reason) diffs.push(`${label}[${i}]: ${reason}`);
|
|
217
|
+
}
|
|
218
|
+
} else {
|
|
219
|
+
for (let i = 0; i < expected.length; i += 1) {
|
|
220
|
+
const e = expected[i] as CliChatMessage;
|
|
221
|
+
const a = actual[i];
|
|
222
|
+
if (e.role !== a.role) diffs.push(`${label}[${i}].role: ${e.role} vs ${a.role}`);
|
|
223
|
+
const ec = typeof e.content === 'string' ? e.content : JSON.stringify(e.content);
|
|
224
|
+
const ac = typeof a.content === 'string' ? a.content : JSON.stringify(a.content);
|
|
225
|
+
if (ec !== ac) diffs.push(`${label}[${i}].content: differs`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// ─── Replay one anchor ─────────────────────────────────────────────────
|
|
231
|
+
|
|
232
|
+
function replayAnchor(
|
|
233
|
+
raw: string,
|
|
234
|
+
startIdx: number,
|
|
235
|
+
acc: TerminalTranscriptAccumulator,
|
|
236
|
+
anchor: FixtureAnchor,
|
|
237
|
+
handlers: CliProviderHandlers,
|
|
238
|
+
spawnAt: number,
|
|
239
|
+
): { result: AnchorReplayResult; nextIdx: number } {
|
|
240
|
+
const stop = nextStopIndex(anchor, startIdx, raw);
|
|
241
|
+
const chunk = raw.slice(startIdx, stop);
|
|
242
|
+
const buffer = acc.append(chunk);
|
|
243
|
+
const rawBufferSnapshot = raw.slice(0, stop);
|
|
244
|
+
|
|
245
|
+
const detect = handlers.detectStatus(makeStatusInput(buffer, rawBufferSnapshot));
|
|
246
|
+
const modal = handlers.parseApproval(makeApprovalInput(buffer, rawBufferSnapshot));
|
|
247
|
+
const state = handlers.createState ? handlers.createState() : undefined;
|
|
248
|
+
const session = handlers.parseSession(state, makeScriptInput(buffer, rawBufferSnapshot, spawnAt));
|
|
249
|
+
|
|
250
|
+
const diffs: string[] = [];
|
|
251
|
+
diffStatus('detectStatus', anchor.expect.detectStatus, detect as CliStatus | null, diffs);
|
|
252
|
+
diffModal('parseApproval', anchor.expect.parseApproval, modal, diffs);
|
|
253
|
+
if (anchor.expect.parseSession) {
|
|
254
|
+
diffStatus('parseSession.status', anchor.expect.parseSession.status, session.status as CliStatus, diffs);
|
|
255
|
+
diffModal('parseSession.modal', anchor.expect.parseSession.modal, session.modal as CliApprovalModal | null, diffs);
|
|
256
|
+
if (anchor.expect.parseSession.providerSessionId !== undefined) {
|
|
257
|
+
diffStatus(
|
|
258
|
+
'parseSession.providerSessionId',
|
|
259
|
+
anchor.expect.parseSession.providerSessionId,
|
|
260
|
+
session.providerSessionId,
|
|
261
|
+
diffs,
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
diffMessages(
|
|
265
|
+
'parseSession.messages',
|
|
266
|
+
anchor.expect.parseSession.messages,
|
|
267
|
+
session.messages as CliChatMessage[],
|
|
268
|
+
diffs,
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return {
|
|
273
|
+
result: {
|
|
274
|
+
anchor,
|
|
275
|
+
passes: diffs.length === 0,
|
|
276
|
+
diffs,
|
|
277
|
+
actual: {
|
|
278
|
+
detectStatus: detect as CliStatus | null,
|
|
279
|
+
parseApproval: modal,
|
|
280
|
+
parseSession: {
|
|
281
|
+
status: session.status as CliStatus,
|
|
282
|
+
modal: session.modal as CliApprovalModal | null,
|
|
283
|
+
providerSessionId: session.providerSessionId,
|
|
284
|
+
messages: session.messages as CliChatMessage[],
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
nextIdx: stop,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// ─── Public API ────────────────────────────────────────────────────────
|
|
293
|
+
|
|
294
|
+
export function loadFixtureExpected(expectedPath: string): FixtureExpected {
|
|
295
|
+
const raw = readFileSync(expectedPath, 'utf-8');
|
|
296
|
+
const parsed = JSON.parse(raw) as FixtureExpected;
|
|
297
|
+
if (parsed.version !== 1) {
|
|
298
|
+
throw new Error(`Fixture format version ${parsed.version} not supported (this runner is v1).`);
|
|
299
|
+
}
|
|
300
|
+
if (!parsed.providerType) throw new Error('Fixture missing providerType');
|
|
301
|
+
if (!parsed.ptyFile) throw new Error('Fixture missing ptyFile');
|
|
302
|
+
if (!Array.isArray(parsed.anchors) || parsed.anchors.length === 0) {
|
|
303
|
+
throw new Error('Fixture must declare at least one anchor');
|
|
304
|
+
}
|
|
305
|
+
return parsed;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export function replayFixture(
|
|
309
|
+
expectedPath: string,
|
|
310
|
+
handlers: CliProviderHandlers,
|
|
311
|
+
options: ReplayOptions = {},
|
|
312
|
+
): FixtureReplayResult {
|
|
313
|
+
const expected = loadFixtureExpected(expectedPath);
|
|
314
|
+
const ptyFullPath = resolve(dirname(expectedPath), expected.ptyFile);
|
|
315
|
+
const rawBytes = readFileSync(ptyFullPath, 'utf-8');
|
|
316
|
+
const acc = new TerminalTranscriptAccumulator();
|
|
317
|
+
const spawnAt = options.spawnAt ?? Date.now();
|
|
318
|
+
let idx = 0;
|
|
319
|
+
const perAnchor: AnchorReplayResult[] = [];
|
|
320
|
+
for (const anchor of expected.anchors) {
|
|
321
|
+
const { result, nextIdx } = replayAnchor(rawBytes, idx, acc, anchor, handlers, spawnAt);
|
|
322
|
+
perAnchor.push(result);
|
|
323
|
+
idx = nextIdx;
|
|
324
|
+
}
|
|
325
|
+
return {
|
|
326
|
+
fixturePath: expectedPath,
|
|
327
|
+
expected,
|
|
328
|
+
perAnchor,
|
|
329
|
+
overallPasses: perAnchor.every((a) => a.passes),
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Format a result as a human-readable report. Returns the multi-line string;
|
|
335
|
+
* caller decides whether to print or assert.
|
|
336
|
+
*/
|
|
337
|
+
export function formatReplayReport(result: FixtureReplayResult): string {
|
|
338
|
+
const lines: string[] = [];
|
|
339
|
+
lines.push(`Fixture: ${result.fixturePath}`);
|
|
340
|
+
lines.push(`Provider: ${result.expected.providerType}`);
|
|
341
|
+
lines.push(`Anchors: ${result.perAnchor.length}`);
|
|
342
|
+
for (const a of result.perAnchor) {
|
|
343
|
+
if (a.passes) {
|
|
344
|
+
lines.push(` ✓ ${a.anchor.name}`);
|
|
345
|
+
} else {
|
|
346
|
+
lines.push(` ✗ ${a.anchor.name}`);
|
|
347
|
+
for (const d of a.diffs) lines.push(` ${d}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
lines.push(result.overallPasses ? 'OVERALL: PASS' : 'OVERALL: FAIL');
|
|
351
|
+
return lines.join('\n');
|
|
352
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider SDK — v1 surface.
|
|
3
|
+
*
|
|
4
|
+
* Internal consumers (daemon-core) import directly from here.
|
|
5
|
+
* External consumers (provider authors) import from the npm package
|
|
6
|
+
* `@adhdev/provider-types` (Apache 2.0), which is extracted from this
|
|
7
|
+
* source at build time.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export * from './types/cli/index.js';
|
|
11
|
+
export * from './types/common/index.js';
|
|
12
|
+
|
|
13
|
+
// Builders — turn declarative manifest blocks into runtime functions.
|
|
14
|
+
export {
|
|
15
|
+
buildDetectStatusFromTui,
|
|
16
|
+
type DetectStatusTuiSpec,
|
|
17
|
+
} from './builders/cli/detect-status.js';
|
|
18
|
+
export {
|
|
19
|
+
buildParseApprovalFromTui,
|
|
20
|
+
type ModalTuiSpec,
|
|
21
|
+
} from './builders/cli/parse-approval.js';
|
|
22
|
+
export {
|
|
23
|
+
applyVisibleRegion,
|
|
24
|
+
type VisibleRegionSpec,
|
|
25
|
+
} from './builders/cli/visible-region.js';
|
|
26
|
+
export {
|
|
27
|
+
buildParseApprovalFromSquash,
|
|
28
|
+
compactText,
|
|
29
|
+
type ApprovalSquashSpec,
|
|
30
|
+
} from './builders/cli/parse-approval-squash.js';
|
|
31
|
+
export {
|
|
32
|
+
buildParseSessionFromTui,
|
|
33
|
+
normalizeMessageIdentity,
|
|
34
|
+
type ParseSessionTuiSpec,
|
|
35
|
+
type TranscriptPtySpec,
|
|
36
|
+
type SessionIdExtractionSpec,
|
|
37
|
+
type SynthesizedMessage,
|
|
38
|
+
type SynthesizedSession,
|
|
39
|
+
} from './builders/cli/parse-session.js';
|
|
40
|
+
|
|
41
|
+
// ACP builders — declarative stdio session-status detection.
|
|
42
|
+
export {
|
|
43
|
+
buildDetectStatusFromAcp,
|
|
44
|
+
type AcpSessionSpec,
|
|
45
|
+
type AcpStatusInput,
|
|
46
|
+
type AcpDetectedStatus,
|
|
47
|
+
} from './builders/acp/detect-status.js';
|
|
48
|
+
|
|
49
|
+
// Fixture tooling — record/replay for provider regression suites.
|
|
50
|
+
export {
|
|
51
|
+
loadFixtureExpected,
|
|
52
|
+
replayFixture,
|
|
53
|
+
formatReplayReport,
|
|
54
|
+
type FixtureExpected,
|
|
55
|
+
type FixtureAnchor,
|
|
56
|
+
type MessageShape,
|
|
57
|
+
type AnchorReplayResult,
|
|
58
|
+
type FixtureReplayResult,
|
|
59
|
+
type CliProviderHandlers,
|
|
60
|
+
type ReplayOptions,
|
|
61
|
+
} from './fixture-tooling/index.js';
|
|
62
|
+
|
|
63
|
+
// Static validators — used by `adhdev provider validate` + registry publish.
|
|
64
|
+
export {
|
|
65
|
+
analyzeOverrideTaint,
|
|
66
|
+
formatTaintResult,
|
|
67
|
+
type TaintLevel,
|
|
68
|
+
type TaintCategory,
|
|
69
|
+
type TaintFinding,
|
|
70
|
+
type TaintResult,
|
|
71
|
+
validateCliProviderManifest,
|
|
72
|
+
formatManifestValidationIssues,
|
|
73
|
+
type ManifestValidationIssue,
|
|
74
|
+
type ManifestValidationResult,
|
|
75
|
+
} from './validators/index.js';
|
|
76
|
+
|
|
77
|
+
// Primitive identifiers — the canonical list.
|
|
78
|
+
// Implementations live under ./primitives/ and are wired in by builders.
|
|
79
|
+
export const V1_PRIMITIVE_CATALOG = Object.freeze({
|
|
80
|
+
acp: [
|
|
81
|
+
'adhdev:acp/session-protocol@1',
|
|
82
|
+
],
|
|
83
|
+
tui: [
|
|
84
|
+
'adhdev:tui/prompt-marker@1',
|
|
85
|
+
'adhdev:tui/spinner@1',
|
|
86
|
+
'adhdev:tui/settled-prompt@1',
|
|
87
|
+
'adhdev:tui/assistant-block@1',
|
|
88
|
+
'adhdev:tui/tool-block@1',
|
|
89
|
+
'adhdev:tui/thinking-block@1',
|
|
90
|
+
'adhdev:tui/user-echo@1',
|
|
91
|
+
'adhdev:tui/modal@1',
|
|
92
|
+
'adhdev:tui/modal-as-message@1',
|
|
93
|
+
'adhdev:tui/footer-chrome@1',
|
|
94
|
+
'adhdev:tui/welcome-screen@1',
|
|
95
|
+
'adhdev:tui/visible-region@1',
|
|
96
|
+
'adhdev:tui/cue-ordering@1',
|
|
97
|
+
'adhdev:tui/dispatch-order@1',
|
|
98
|
+
'adhdev:tui/index-finder@1',
|
|
99
|
+
'adhdev:tui/status-downgrade@1',
|
|
100
|
+
'adhdev:tui/approval-stitching@1',
|
|
101
|
+
'adhdev:tui/approval-squash@1',
|
|
102
|
+
'adhdev:tui/media-input@1',
|
|
103
|
+
'adhdev:tui/session-id-extraction@1',
|
|
104
|
+
'adhdev:tui/error-detection@1',
|
|
105
|
+
],
|
|
106
|
+
nativeHistory: [
|
|
107
|
+
'adhdev:native-history/codex-rollout@1',
|
|
108
|
+
'adhdev:native-history/claude-jsonl@1',
|
|
109
|
+
'adhdev:native-history/anthropic-cli-transcript@1',
|
|
110
|
+
'adhdev:native-history/hermes-session@1',
|
|
111
|
+
],
|
|
112
|
+
cliCapability: [
|
|
113
|
+
'adhdev:cli/capability-list@1',
|
|
114
|
+
'adhdev:cli/control-state@1',
|
|
115
|
+
'adhdev:cli/capability-action@1',
|
|
116
|
+
'adhdev:cli/control-toggle@1',
|
|
117
|
+
'adhdev:cli/picker-open@1',
|
|
118
|
+
'adhdev:cli/picker-set@1',
|
|
119
|
+
],
|
|
120
|
+
common: [
|
|
121
|
+
'adhdev:common/setting-boolean@1',
|
|
122
|
+
'adhdev:common/setting-number@1',
|
|
123
|
+
'adhdev:common/setting-string@1',
|
|
124
|
+
'adhdev:common/setting-select@1',
|
|
125
|
+
'adhdev:common/capability-input@1',
|
|
126
|
+
'adhdev:common/capability-output@1',
|
|
127
|
+
'adhdev:common/capability-controls@1',
|
|
128
|
+
'adhdev:common/auth-env-var@1',
|
|
129
|
+
'adhdev:common/auth-cli-command@1',
|
|
130
|
+
'adhdev:common/spawn@1',
|
|
131
|
+
'adhdev:common/timeouts@1',
|
|
132
|
+
'adhdev:common/resume@1',
|
|
133
|
+
'adhdev:common/mesh-coordinator@1',
|
|
134
|
+
],
|
|
135
|
+
override: [
|
|
136
|
+
'adhdev:override/cli-parse-session@1',
|
|
137
|
+
'adhdev:override/cli-detect-status@1',
|
|
138
|
+
'adhdev:override/cli-parse-approval@1',
|
|
139
|
+
'adhdev:override/cli-parse-output@1',
|
|
140
|
+
'adhdev:override/cli-read-native-history@1',
|
|
141
|
+
'adhdev:override/cli-list-native-history@1',
|
|
142
|
+
'adhdev:override/cli-capability-handler@1',
|
|
143
|
+
],
|
|
144
|
+
} as const);
|
|
145
|
+
|
|
146
|
+
/** Aggregate flat list — for provider catalog endpoints. */
|
|
147
|
+
export const V1_ALL_PRIMITIVES: ReadonlyArray<string> = Object.freeze(
|
|
148
|
+
Object.values(V1_PRIMITIVE_CATALOG).flat(),
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
/** Catalog version label exposed at `registry.adhf.dev/primitives`. */
|
|
152
|
+
export const V1_CONTRACT_VERSION = '1.0.0' as const;
|