@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
package/dist/installer.d.ts
CHANGED
|
@@ -28,10 +28,7 @@ export interface InstallResult {
|
|
|
28
28
|
alreadyInstalled: boolean;
|
|
29
29
|
error?: string;
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
* Check if an extension is already installed
|
|
33
|
-
*/
|
|
34
|
-
export declare function isExtensionInstalled(ide: IDEInfo, marketplaceId: string): boolean;
|
|
31
|
+
export declare function isExtensionInstalled(ide: IDEInfo, marketplaceId: string): Promise<boolean>;
|
|
35
32
|
/**
|
|
36
33
|
* Install a single extension
|
|
37
34
|
*/
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalIpcServer — generic HTTP + WebSocket IPC endpoint for daemon processes.
|
|
3
|
+
*
|
|
4
|
+
* Both daemon-cloud and daemon-standalone need a local IPC surface so
|
|
5
|
+
* external tools — the `adhdev mcp --mode ipc` MCP server and anything
|
|
6
|
+
* else that wants to issue commands without going through the cloud
|
|
7
|
+
* Worker — can connect over `ws://127.0.0.1:<port>/ipc`.
|
|
8
|
+
*
|
|
9
|
+
* Until now the implementation lived only in daemon-cloud. Standalone
|
|
10
|
+
* sessions therefore couldn't host MCP mesh tools — codex/claude config
|
|
11
|
+
* pointing at `--mode ipc` got `Cannot reach ipc daemon`. This module
|
|
12
|
+
* moves the transport into daemon-core so both daemons can mount it.
|
|
13
|
+
*
|
|
14
|
+
* The transport itself is daemon-agnostic. Cloud-specific behaviors
|
|
15
|
+
* (mesh relay, mandatory update gates) are injected via the caller's
|
|
16
|
+
* `handleCommand` hook; the IPC layer just frames/unframes JSON and
|
|
17
|
+
* routes messages.
|
|
18
|
+
*/
|
|
19
|
+
import { WebSocket } from 'ws';
|
|
20
|
+
/** Parameters passed to `handleCommand` for each incoming ext:command frame. */
|
|
21
|
+
export interface IpcCommandContext {
|
|
22
|
+
/** The raw `command` field from the message — caller decides routing. */
|
|
23
|
+
command: string;
|
|
24
|
+
/** Args provided by the client; may have been normalized by the caller. */
|
|
25
|
+
args: Record<string, unknown>;
|
|
26
|
+
/** Stable id correlating the request and the eventual ext:command_result. */
|
|
27
|
+
requestId: string;
|
|
28
|
+
/** The connected WebSocket — only needed if the caller wants to send extra events. */
|
|
29
|
+
ws: WebSocket;
|
|
30
|
+
}
|
|
31
|
+
/** Result reported back to the client. `result` is optional context for success. */
|
|
32
|
+
export interface IpcCommandResult {
|
|
33
|
+
success: boolean;
|
|
34
|
+
result?: unknown;
|
|
35
|
+
error?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Additional fields the caller wants merged into the response payload
|
|
38
|
+
* (e.g. the cloud daemon's mandatory-update-block fields). Reserved.
|
|
39
|
+
*/
|
|
40
|
+
extra?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
/** Status payload returned from GET / on the IPC HTTP port. */
|
|
43
|
+
export interface IpcStatusPayload {
|
|
44
|
+
ok: true;
|
|
45
|
+
pid: number;
|
|
46
|
+
wsPath: string;
|
|
47
|
+
port: number;
|
|
48
|
+
/** Arbitrary daemon-specific summary. Cloud daemon includes mesh state, etc. */
|
|
49
|
+
status: Record<string, unknown> | null;
|
|
50
|
+
}
|
|
51
|
+
export interface LocalIpcServerOptions {
|
|
52
|
+
/** TCP port to listen on. 19222 is the conventional default. */
|
|
53
|
+
port: number;
|
|
54
|
+
/** Build the GET / status payload. Called on every health probe. */
|
|
55
|
+
buildStatusPayload: () => Record<string, unknown> | null;
|
|
56
|
+
/** Build the welcome message sent to a freshly-connected client. */
|
|
57
|
+
buildWelcomePayload: () => Record<string, unknown>;
|
|
58
|
+
/** Handle a single ext:command frame. Caller decides routing and returns the result. */
|
|
59
|
+
handleCommand: (ctx: IpcCommandContext) => Promise<IpcCommandResult>;
|
|
60
|
+
/** Optional notification when a new client connects (lets daemon track them for broadcasts). */
|
|
61
|
+
onClientConnected?: (ws: WebSocket) => void;
|
|
62
|
+
/** Optional notification when a client disconnects. */
|
|
63
|
+
onClientDisconnected?: (ws: WebSocket) => void;
|
|
64
|
+
/** Optional logger label (defaults to "IPC"). */
|
|
65
|
+
logCategory?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returned controller for stopping the server and broadcasting to clients.
|
|
69
|
+
* Stored by the daemon and torn down at shutdown.
|
|
70
|
+
*/
|
|
71
|
+
export interface LocalIpcServerHandle {
|
|
72
|
+
/** True once `listen()` succeeded. */
|
|
73
|
+
isListening(): boolean;
|
|
74
|
+
/** Push a message to every connected client. */
|
|
75
|
+
broadcast(type: string, payload: unknown): void;
|
|
76
|
+
/** Close all client sockets + the HTTP server. */
|
|
77
|
+
close(): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Build a JSON HTTP response describing the IPC endpoint. Exposed so caller
|
|
81
|
+
* code (and tests) can build the same shape without spinning a real server.
|
|
82
|
+
*/
|
|
83
|
+
export declare function buildIpcStatusHttpResponse(method: string | undefined, url: string | undefined, payload: IpcStatusPayload): {
|
|
84
|
+
statusCode: number;
|
|
85
|
+
body: Record<string, unknown>;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Start the local IPC server. Returns a handle the caller can use to broadcast
|
|
89
|
+
* events and tear down at shutdown.
|
|
90
|
+
*/
|
|
91
|
+
export declare function startLocalIpcServer(opts: LocalIpcServerOptions): Promise<LocalIpcServerHandle>;
|
package/dist/launch.d.ts
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
/** Kill IDE process (graceful → force) */
|
|
19
19
|
export declare function killIdeProcess(ideId: string): Promise<boolean>;
|
|
20
20
|
/** Check if IDE process is running */
|
|
21
|
-
export declare function isIdeRunning(ideId: string): boolean
|
|
21
|
+
export declare function isIdeRunning(ideId: string): Promise<boolean>;
|
|
22
22
|
export interface LaunchOptions {
|
|
23
23
|
ideId?: string;
|
|
24
24
|
workspace?: string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class AsyncBatchWriter {
|
|
2
|
+
private static buffers;
|
|
3
|
+
private static writePromises;
|
|
4
|
+
private static flushTimer;
|
|
5
|
+
/**
|
|
6
|
+
* Queues data to be written to a file asynchronously in a batch.
|
|
7
|
+
*/
|
|
8
|
+
static write(filePath: string, data: string): void;
|
|
9
|
+
private static flushAll;
|
|
10
|
+
}
|
|
@@ -14,6 +14,22 @@ export interface DebugRuntimeConfig {
|
|
|
14
14
|
traceBufferSize: number;
|
|
15
15
|
traceCategories: string[];
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* ALWAYS-ON trace categories. These bypass the `collectDebugTrace` master switch
|
|
19
|
+
* (and category selection) so they are collected in production daemons where
|
|
20
|
+
* `--trace` is unset. They exist so mesh completion diagnostics — the FSM-transition
|
|
21
|
+
* and completion-gate snapshots that explain an early / missing agent:generating_completed
|
|
22
|
+
* notification — are retrievable via mesh_read_debug (chat_debug_bundle) without asking
|
|
23
|
+
* an operator to relaunch the daemon with tracing on.
|
|
24
|
+
*
|
|
25
|
+
* SAFETY: only add a category here after confirming every record() call site for it
|
|
26
|
+
* carries a content-free payload (statuses, epochs, timestamps, deltas, lengths, roles,
|
|
27
|
+
* enum-like reasons — never transcript / prompt / bubble text). Always-on collection makes
|
|
28
|
+
* such payloads unconditional, so a content-bearing field would leak into the ring buffer
|
|
29
|
+
* in production.
|
|
30
|
+
*/
|
|
31
|
+
export declare const ALWAYS_ON_TRACE_CATEGORIES: readonly string[];
|
|
32
|
+
export declare function isAlwaysOnTraceCategory(category?: string | null): boolean;
|
|
17
33
|
export declare function resolveDebugRuntimeConfig(options?: DebugRuntimeOptions): DebugRuntimeConfig;
|
|
18
34
|
export declare function setDebugRuntimeConfig(config: DebugRuntimeConfig): void;
|
|
19
35
|
export declare function getDebugRuntimeConfig(): DebugRuntimeConfig;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log redactor — mask secrets before a raw daemon log line leaves the machine.
|
|
3
|
+
*
|
|
4
|
+
* Daemon logs can incidentally contain credentials: ADHDev API keys (adk_*),
|
|
5
|
+
* machine secrets (adm_*), provider keys (adp_*), bearer tokens, JWTs, TURN
|
|
6
|
+
* `username:credential` pairs, and `SECRET=...` style env dumps. The mesh
|
|
7
|
+
* `get_mesh_node_logs` command ships a log tail over P2P to the coordinator, so
|
|
8
|
+
* every line MUST pass through redactLogLine() first — otherwise a secret in a
|
|
9
|
+
* remote daemon's log is exfiltrated to whoever is driving the coordinator.
|
|
10
|
+
*
|
|
11
|
+
* Patterns are intentionally conservative: each masks the secret material while
|
|
12
|
+
* preserving enough surrounding shape that the line stays useful for debugging
|
|
13
|
+
* (e.g. `adk_••••1234`, `Bearer ••••redacted`). When in doubt, mask.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Mask secrets in a single log line. Idempotent-ish: re-running over an
|
|
17
|
+
* already-masked line leaves the MASK token in place (it contains no secret
|
|
18
|
+
* shape). Never throws — a redaction failure must not crash the log path.
|
|
19
|
+
*/
|
|
20
|
+
export declare function redactLogLine(line: string): string;
|
|
21
|
+
/** Redact an array of log lines in place-safe fashion (returns a new array). */
|
|
22
|
+
export declare function redactLogLines(lines: string[]): string[];
|
|
23
|
+
/** Exposed for tests/introspection: the rule names applied, in order. */
|
|
24
|
+
export declare const LOG_REDACTION_RULE_NAMES: readonly string[];
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon log tail reader — read the last N bytes of a daemon log file, newest
|
|
3
|
+
* bytes first, bounded so the result is safe to ship over a mesh P2P channel.
|
|
4
|
+
*
|
|
5
|
+
* Used by the mesh `get_mesh_node_logs` command: the coordinator asks a (possibly
|
|
6
|
+
* remote) daemon for its recent log tail instead of having to open a session and
|
|
7
|
+
* grep the file by hand. Because the mesh RPC envelope is sent as a single
|
|
8
|
+
* datachannel message (~256KB SCTP ceiling, no chunking), the returned tail is
|
|
9
|
+
* HARD-bounded by `tailBytes` (default 64KB, capped at MAX_TAIL_BYTES=128KB) and
|
|
10
|
+
* flags `truncated:true` when more content existed than fit.
|
|
11
|
+
*
|
|
12
|
+
* Two read modes:
|
|
13
|
+
* - No filter (no grep/sinceMs): byte-bounded tail of the active file — read the
|
|
14
|
+
* last `tailBytes` bytes only. Cheap, backward-compatible.
|
|
15
|
+
* - Filtered (grep and/or sinceMs given): FULL-FILE scan. The filter is applied
|
|
16
|
+
* across the ENTIRE file (plus the size-rotation `.1.log` backup) BEFORE the
|
|
17
|
+
* byte cap, then the last `tailBytes` worth of MATCHING lines are returned.
|
|
18
|
+
* This is the fix for "matches hidden behind polling spam": when the recent
|
|
19
|
+
* tail window is saturated with high-frequency lines (e.g. coordinator polling
|
|
20
|
+
* `get_pending_mesh_events`/`read_chat` every few seconds), a grep for a rarer
|
|
21
|
+
* earlier line (dispatch/inject/forward) previously matched 0 because the line
|
|
22
|
+
* had already scrolled out of the tail window before the filter ran. Filtering
|
|
23
|
+
* the whole file first surfaces those matches regardless of how much unrelated
|
|
24
|
+
* spam followed them.
|
|
25
|
+
*
|
|
26
|
+
* Boundary-safe: lines are cut on the newline byte (0x0A) only, which never
|
|
27
|
+
* appears inside a multibyte UTF-8 sequence, so decoding each complete byte
|
|
28
|
+
* segment never splits a multibyte char.
|
|
29
|
+
*/
|
|
30
|
+
export declare const DEFAULT_TAIL_BYTES: number;
|
|
31
|
+
export declare const MAX_TAIL_BYTES: number;
|
|
32
|
+
export interface ReadDaemonLogTailArgs {
|
|
33
|
+
/** Date of the log file to read (defaults to today). YYYY-MM-DD string or Date. */
|
|
34
|
+
date?: string | Date;
|
|
35
|
+
/** Max bytes of tail to return. Clamped to (0, MAX_TAIL_BYTES]. Default 64KB. */
|
|
36
|
+
tailBytes?: number;
|
|
37
|
+
/** Optional regex source string; only lines matching (case-insensitive) are kept. */
|
|
38
|
+
grep?: string;
|
|
39
|
+
/** Optional epoch-ms floor; only lines whose leading [HH:MM:SS...] / ISO ts >= this are kept. */
|
|
40
|
+
sinceMs?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface DaemonLogTailResult {
|
|
43
|
+
success: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
lines: string[];
|
|
46
|
+
/**
|
|
47
|
+
* No-filter mode: true when the file was larger than the byte window.
|
|
48
|
+
* Filter mode: true when matching lines were dropped from the FRONT to fit
|
|
49
|
+
* the byte cap (i.e. there are older matches than the ones returned).
|
|
50
|
+
*/
|
|
51
|
+
truncated: boolean;
|
|
52
|
+
logPath: string;
|
|
53
|
+
platform: NodeJS.Platform;
|
|
54
|
+
bytesReturned: number;
|
|
55
|
+
/** True when a grep/since filter dropped at least one line. */
|
|
56
|
+
filtered: boolean;
|
|
57
|
+
/** The grep source actually applied (echoed back for clarity). */
|
|
58
|
+
grep?: string;
|
|
59
|
+
/** True when the filtered full-file scan path ran (grep/sinceMs given). */
|
|
60
|
+
fullScan: boolean;
|
|
61
|
+
/** Total bytes read while scanning (filter mode scans the whole file + backup). */
|
|
62
|
+
scannedBytes: number;
|
|
63
|
+
/** Number of lines that matched the filter across the full scan (filter mode). */
|
|
64
|
+
matchedLineCount: number;
|
|
65
|
+
/** Number of scanned lines dropped by the filter ("N lines excluded by filter"). */
|
|
66
|
+
excludedByFilter: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Read the daemon log tail for `date` (default today), bounded to `tailBytes`.
|
|
70
|
+
*
|
|
71
|
+
* - No grep/sinceMs → byte-bounded tail of the active file (legacy behaviour).
|
|
72
|
+
* - grep and/or sinceMs given → FULL-FILE scan: the filter is applied across the
|
|
73
|
+
* whole file (plus the `*.1.log` size-rotation backup) BEFORE the byte cap, so
|
|
74
|
+
* matches that have scrolled out of the recent tail window (e.g. behind
|
|
75
|
+
* coordinator polling spam) are still returned. Only the last `tailBytes` worth
|
|
76
|
+
* of matching lines ship over P2P.
|
|
77
|
+
*
|
|
78
|
+
* Falls back to the size-rotation backup (`*.1.log`) when the primary file does
|
|
79
|
+
* not exist.
|
|
80
|
+
*/
|
|
81
|
+
export declare function readDaemonLogTail(args?: ReadDaemonLogTailArgs): DaemonLogTailResult;
|
package/dist/logging/logger.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 1. daemonLog(category, msg, level) — explicit per-category logging
|
|
8
8
|
* 2. installGlobalInterceptor() — Auto-intercept console.log (once on daemon start)
|
|
9
9
|
* 3. Recent log ring buffer — for remote transmission via P2P/WS
|
|
10
|
-
* 4. File logging —
|
|
10
|
+
* 4. File logging — ~/.adhdev/logs/daemon-YYYY-MM-DD.log (date-based rolling)
|
|
11
11
|
*
|
|
12
12
|
* use:
|
|
13
13
|
* import { daemonLog, LOG } from './daemon-logger';
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mesh contract v2 — first-class identity, scopes, and protocol version.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the implicit conventions that grew across mesh-events.ts,
|
|
5
|
+
* mesh-work-queue.ts, mesh-ledger.ts, and mesh-tools.ts where the same
|
|
6
|
+
* concept (a coordinator, a session, a task status) appeared in different
|
|
7
|
+
* shapes per file. The audit found:
|
|
8
|
+
*
|
|
9
|
+
* - PendingMeshCoordinatorEvent had no targetCoordinatorDaemonId. All
|
|
10
|
+
* events were broadcast to every coordinator that drained them. Two
|
|
11
|
+
* coordinators sharing a mesh would each receive every event,
|
|
12
|
+
* leading to duplicate completion handling and missed targeting.
|
|
13
|
+
* - drainPendingMeshCoordinatorEvents accepted only meshId. The caller's
|
|
14
|
+
* coordinator identity was never available, so per-coordinator
|
|
15
|
+
* routing was impossible by construction.
|
|
16
|
+
* - Session identifier keys diverged across stores: targetSessionId /
|
|
17
|
+
* assignedSessionId / instanceId / runtimeSessionId / providerSessionId.
|
|
18
|
+
* resolveEventSessionId() tried four fallbacks per call.
|
|
19
|
+
* - No protocol version on the JSONL ledger or MeshRuntimeStore. Schema
|
|
20
|
+
* evolutions had no guard rail.
|
|
21
|
+
* - mesh_reconcile_ledger existed as a routine recovery tool, not as
|
|
22
|
+
* an incident-response escape hatch. That itself signals the routing
|
|
23
|
+
* layer cannot be trusted.
|
|
24
|
+
*
|
|
25
|
+
* This module introduces the types; the actual wiring lands in B2 (data
|
|
26
|
+
* model + 3-way transactional store), B3 (MCP layer enforcement), and B4
|
|
27
|
+
* (frontend consumption). B1 is intentionally non-breaking — it adds the
|
|
28
|
+
* types and leaves runtime behaviour unchanged.
|
|
29
|
+
*/
|
|
30
|
+
/** Provider type identifier (e.g. 'claude-cli', 'codex-cli', 'roo-code').
|
|
31
|
+
* Free-form string; no shared enum exists in daemon-core yet. */
|
|
32
|
+
type ProviderType = string;
|
|
33
|
+
export declare const MESH_PROTOCOL_VERSION_V1: "1.0";
|
|
34
|
+
export declare const MESH_PROTOCOL_VERSION_V2: "2.0";
|
|
35
|
+
export type MeshProtocolVersion = typeof MESH_PROTOCOL_VERSION_V1 | typeof MESH_PROTOCOL_VERSION_V2;
|
|
36
|
+
export declare const SUPPORTED_MESH_PROTOCOL_VERSIONS: readonly MeshProtocolVersion[];
|
|
37
|
+
export declare function isSupportedMeshProtocolVersion(value: unknown): value is MeshProtocolVersion;
|
|
38
|
+
/**
|
|
39
|
+
* Identity of a mesh coordinator. Required (non-optional) on every dispatch
|
|
40
|
+
* and drain operation in v2 — opaque/missing identity is the audit's
|
|
41
|
+
* smoking gun for routing failures and is structurally banned by the v2
|
|
42
|
+
* types.
|
|
43
|
+
*
|
|
44
|
+
* - daemonId: the machineId of the daemon hosting the coordinator. Stable
|
|
45
|
+
* across coordinator restarts on the same machine.
|
|
46
|
+
* - coordinatorRunId: a UUID generated when the coordinator process starts.
|
|
47
|
+
* Stable for the coordinator's lifetime, fresh on restart. Required so
|
|
48
|
+
* two coordinators on the same daemon (one CLI, one MCP) can be told
|
|
49
|
+
* apart without conflating their drains.
|
|
50
|
+
* - sessionId: optional CLI coordinator session identifier (instanceId).
|
|
51
|
+
* Present when the coordinator is itself a CLI session, absent for
|
|
52
|
+
* pure MCP coordinators.
|
|
53
|
+
*/
|
|
54
|
+
export interface CoordinatorIdentity {
|
|
55
|
+
readonly daemonId: string;
|
|
56
|
+
readonly coordinatorRunId: string;
|
|
57
|
+
readonly sessionId?: string;
|
|
58
|
+
}
|
|
59
|
+
export declare function coordinatorIdentityEquals(a: CoordinatorIdentity, b: CoordinatorIdentity): boolean;
|
|
60
|
+
export declare function coordinatorIdentityKey(identity: CoordinatorIdentity): string;
|
|
61
|
+
/**
|
|
62
|
+
* Unified mesh session identifier. v1 referred to "the session" with five
|
|
63
|
+
* different field names depending on which store you were reading; v2
|
|
64
|
+
* collapses them into one explicit handle that carries every disambiguator
|
|
65
|
+
* a consumer might need.
|
|
66
|
+
*
|
|
67
|
+
* - nodeId: the mesh node this session belongs to (FK into mesh node table).
|
|
68
|
+
* - sessionId: provider-instance identifier (the runtime session id).
|
|
69
|
+
* - providerType: which provider category/type the session runs (e.g.
|
|
70
|
+
* 'claude-cli', 'codex-cli', 'roo-code').
|
|
71
|
+
* - coordinatorDaemonId: which coordinator dispatched the work that
|
|
72
|
+
* spawned this session. Used for completion event routing.
|
|
73
|
+
* - assignedAt: ms epoch when the session was bound to its current task.
|
|
74
|
+
*/
|
|
75
|
+
export interface MeshSessionHandle {
|
|
76
|
+
readonly nodeId: string;
|
|
77
|
+
readonly sessionId: string;
|
|
78
|
+
readonly providerType: ProviderType;
|
|
79
|
+
readonly coordinatorDaemonId: string;
|
|
80
|
+
readonly assignedAt: number;
|
|
81
|
+
}
|
|
82
|
+
export declare function meshSessionHandleKey(handle: MeshSessionHandle): string;
|
|
83
|
+
/**
|
|
84
|
+
* Single canonical task status enum. v1 had at least three overlapping
|
|
85
|
+
* sets (queue / ledger / direct-dispatch). v2 consumers import from here.
|
|
86
|
+
*/
|
|
87
|
+
export declare const MESH_TASK_STATUSES: readonly ["pending", "assigned", "in_progress", "completed", "failed", "cancelled"];
|
|
88
|
+
export type MeshTaskStatus = typeof MESH_TASK_STATUSES[number];
|
|
89
|
+
export declare function isMeshTaskStatus(value: unknown): value is MeshTaskStatus;
|
|
90
|
+
/**
|
|
91
|
+
* Explicit scope for pending coordinator events. v1 had no scope: every
|
|
92
|
+
* event was broadcast to every drainer. v2 forces producers to declare
|
|
93
|
+
* intent.
|
|
94
|
+
*
|
|
95
|
+
* - 'unicast': delivered to exactly one coordinator (intendedFor). Other
|
|
96
|
+
* coordinators' drains skip it.
|
|
97
|
+
* - 'broadcast': delivered to every coordinator on the mesh. Used for
|
|
98
|
+
* system-wide signals (e.g. mesh-wide policy changes). The v1 default
|
|
99
|
+
* becomes explicit here so audit tools can flag unintended broadcasts.
|
|
100
|
+
* - 'system': delivered to the daemon-level handler, not coordinators.
|
|
101
|
+
* Reserved for infrastructure events that no coordinator should see
|
|
102
|
+
* (e.g. ledger reconciliation outcomes).
|
|
103
|
+
*/
|
|
104
|
+
export declare const MESH_EVENT_SCOPES: readonly ["unicast", "broadcast", "system"];
|
|
105
|
+
export type MeshEventScope = typeof MESH_EVENT_SCOPES[number];
|
|
106
|
+
export declare function isMeshEventScope(value: unknown): value is MeshEventScope;
|
|
107
|
+
/**
|
|
108
|
+
* v2 shape of a pending coordinator event. Strict supersets of the v1
|
|
109
|
+
* shape — every v1 field is preserved so existing readers do not break;
|
|
110
|
+
* v2 fields (scope, dispatchedBy, intendedFor, protocolVersion) are
|
|
111
|
+
* additive and consulted by v2-aware drainers only.
|
|
112
|
+
*
|
|
113
|
+
* Mixed v1/v2 events coexist during the rollout window. B2 fully cuts
|
|
114
|
+
* over once every coordinator drain is v2-aware.
|
|
115
|
+
*/
|
|
116
|
+
export interface PendingMeshCoordinatorEventV2 {
|
|
117
|
+
readonly event: string;
|
|
118
|
+
readonly meshId: string;
|
|
119
|
+
readonly nodeLabel: string;
|
|
120
|
+
readonly nodeId?: string;
|
|
121
|
+
readonly workspace?: string;
|
|
122
|
+
readonly metadataEvent: Record<string, unknown>;
|
|
123
|
+
readonly coordinatorMessage?: string;
|
|
124
|
+
readonly queuedAt: number;
|
|
125
|
+
readonly protocolVersion: MeshProtocolVersion;
|
|
126
|
+
/**
|
|
127
|
+
* Idempotency key. A UUID generated ONCE at emit time and preserved verbatim
|
|
128
|
+
* across every store (SQLite payload + column, JSONL) and the P2P relay
|
|
129
|
+
* boundary. The receiving drain uses eventId as the authoritative dedup key
|
|
130
|
+
* (B3): an event whose eventId was already drained is skipped even if its
|
|
131
|
+
* content fingerprint differs. Distinct from the content fingerprint, which
|
|
132
|
+
* stays the v1 dedup mechanism during rollout.
|
|
133
|
+
*/
|
|
134
|
+
readonly eventId: string;
|
|
135
|
+
readonly scope: MeshEventScope;
|
|
136
|
+
readonly dispatchedBy: CoordinatorIdentity;
|
|
137
|
+
/**
|
|
138
|
+
* Required when scope === 'unicast', forbidden otherwise. Drainers MUST
|
|
139
|
+
* skip unicast events whose intendedFor does not equal their own identity.
|
|
140
|
+
*/
|
|
141
|
+
readonly intendedFor?: CoordinatorIdentity;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* v2 ledger entry additions. The originatingCoordinator field is the
|
|
145
|
+
* source of truth that lets completion events route back to the
|
|
146
|
+
* coordinator that dispatched the task. v1's "worker settings carried it
|
|
147
|
+
* if it happened to be set" approach is replaced.
|
|
148
|
+
*/
|
|
149
|
+
export interface MeshLedgerOriginatingCoordinatorV2 {
|
|
150
|
+
readonly originatingCoordinator: CoordinatorIdentity;
|
|
151
|
+
readonly protocolVersion: MeshProtocolVersion;
|
|
152
|
+
}
|
|
153
|
+
export declare class MeshContractViolationError extends Error {
|
|
154
|
+
readonly violationPath: string;
|
|
155
|
+
readonly protocolVersion: MeshProtocolVersion;
|
|
156
|
+
constructor(protocolVersion: MeshProtocolVersion, violationPath: string, detail: string);
|
|
157
|
+
}
|
|
158
|
+
export declare function assertCoordinatorIdentity(raw: unknown, path: string): CoordinatorIdentity;
|
|
159
|
+
export declare function assertPendingMeshCoordinatorEventV2(raw: unknown, path?: string): PendingMeshCoordinatorEventV2;
|
|
160
|
+
/**
|
|
161
|
+
* Decide whether a v2 pending event should be delivered to the given drainer.
|
|
162
|
+
* Centralised so every drain implementation uses the same rule.
|
|
163
|
+
*
|
|
164
|
+
* - 'broadcast': always delivered. NOTE: a terminal task event that reached the
|
|
165
|
+
* queue as broadcast is an ownership leak (it belongs to its dispatching
|
|
166
|
+
* coordinator). This pure helper does not have the drain-window
|
|
167
|
+
* daemon-form/session matching semantics, so the terminal+broadcast
|
|
168
|
+
* dispatchedBy filter is applied one layer up in the drainer (see
|
|
169
|
+
* mesh-events-pending routeV2EventsForDrainer) where those semantics live.
|
|
170
|
+
* - 'system': never delivered to coordinators (system handler only).
|
|
171
|
+
* - 'unicast': delivered iff intendedFor matches drainer identity.
|
|
172
|
+
*
|
|
173
|
+
* v1 events (no scope / no protocolVersion) are treated as broadcast for
|
|
174
|
+
* backward compatibility during rollout; B3 tightens this so v1 events
|
|
175
|
+
* are quarantined to a dedicated drain endpoint instead.
|
|
176
|
+
*/
|
|
177
|
+
export declare function shouldDeliverPendingEventToCoordinator(event: PendingMeshCoordinatorEventV2, drainer: CoordinatorIdentity): boolean;
|
|
178
|
+
/**
|
|
179
|
+
* True for a terminal task event (completion / stop / refine outcome). A terminal
|
|
180
|
+
* event belongs to exactly the coordinator that dispatched the task, so it must
|
|
181
|
+
* never fan out to sibling coordinators that did not dispatch it. Used by the
|
|
182
|
+
* emit-side stamp (to avoid downgrading an unaddressed terminal event to full
|
|
183
|
+
* broadcast) and by the drain-side filter (defense-in-depth for any terminal
|
|
184
|
+
* event that already reached the queue as broadcast).
|
|
185
|
+
*/
|
|
186
|
+
export declare function isTerminalTaskEvent(eventName: string): boolean;
|
|
187
|
+
/**
|
|
188
|
+
* Default the v2 scope for an event by its producer event name (design decision
|
|
189
|
+
* §3). Terminal task events and coordinator-addressed alerts → unicast (routed
|
|
190
|
+
* to the originating coordinator). Everything else — node lifecycle and
|
|
191
|
+
* progress signals — → broadcast, which also matches v1's implicit "deliver to
|
|
192
|
+
* any coordinator" behaviour, so an unstamped v1 event and a v2-stamped-as-
|
|
193
|
+
* broadcast event route identically during rollout. No event currently defaults
|
|
194
|
+
* to 'system'; the scope remains in MESH_EVENT_SCOPES for wire compatibility
|
|
195
|
+
* (an already-queued or version-skewed 'system' event still routes away from
|
|
196
|
+
* coordinators).
|
|
197
|
+
*/
|
|
198
|
+
export declare function defaultScopeForEvent(eventName: string): MeshEventScope;
|
|
199
|
+
/**
|
|
200
|
+
* The v2 envelope stamp applied to a pending coordinator event at emit time.
|
|
201
|
+
* Additive over the v1 shape: every field is consulted by v2-aware drainers
|
|
202
|
+
* only, so a v1 reader that ignores them is unaffected.
|
|
203
|
+
*/
|
|
204
|
+
export interface PendingEventEmitStampV2 {
|
|
205
|
+
readonly protocolVersion: typeof MESH_PROTOCOL_VERSION_V2;
|
|
206
|
+
readonly eventId: string;
|
|
207
|
+
readonly scope: MeshEventScope;
|
|
208
|
+
readonly dispatchedBy: CoordinatorIdentity;
|
|
209
|
+
readonly intendedFor?: CoordinatorIdentity;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Build a coordinator identity from the loosely-typed fields the v1 emit call
|
|
213
|
+
* sites already carry (a daemonId, and — sometimes — a coordinator session id).
|
|
214
|
+
* Returns undefined when no usable daemonId is present; the caller then leaves
|
|
215
|
+
* the event unstamped (v1, broadcast-treated) rather than fabricating identity.
|
|
216
|
+
* coordinatorRunId is not known at every emit site yet (B2 wires the registry),
|
|
217
|
+
* so it falls back to the daemonId — a stable, non-empty value that keeps the
|
|
218
|
+
* identity well-formed for assertCoordinatorIdentity without inventing a UUID
|
|
219
|
+
* that would differ per emit and defeat equality.
|
|
220
|
+
*/
|
|
221
|
+
export declare function coordinatorIdentityFromEmitFields(fields: {
|
|
222
|
+
daemonId?: string | null;
|
|
223
|
+
coordinatorRunId?: string | null;
|
|
224
|
+
sessionId?: string | null;
|
|
225
|
+
}): CoordinatorIdentity | undefined;
|
|
226
|
+
/**
|
|
227
|
+
* Compute the v2 emit stamp for an event (B2a). `eventId` MUST be supplied by
|
|
228
|
+
* the caller (generated via crypto.randomUUID at the daemon-core boundary so
|
|
229
|
+
* this module stays dependency-free and deterministically testable). Scope
|
|
230
|
+
* defaults from the event name unless explicitly overridden.
|
|
231
|
+
*
|
|
232
|
+
* When `dispatchedBy` cannot be constructed (no coordinator daemon known),
|
|
233
|
+
* returns undefined: the event stays a v1 (unstamped) event and is broadcast-
|
|
234
|
+
* treated during rollout, exactly as before — no regression, no fabricated
|
|
235
|
+
* identity. When the resolved scope is 'unicast' but no `intendedFor` is
|
|
236
|
+
* available, the fallback depends on the event class:
|
|
237
|
+
*
|
|
238
|
+
* - Terminal task events (completion / stop / refine outcome) MUST NOT be
|
|
239
|
+
* broadcast to every coordinator — a completion belongs to the coordinator
|
|
240
|
+
* that dispatched the task, and broadcasting it makes non-owner coordinators
|
|
241
|
+
* (e.g. sibling MAGI coordinators that never dispatched this replica's task)
|
|
242
|
+
* act on a completion that is not theirs (MAGI-REPLICA-COMPLETION-EVENT-LEAK).
|
|
243
|
+
* For these we address the event to `dispatchedBy` (the dispatching
|
|
244
|
+
* coordinator) and KEEP it unicast, so the stamp stays contract-valid and the
|
|
245
|
+
* event reaches only its originating coordinator.
|
|
246
|
+
* - Any other unicast event with no addressable target falls back to broadcast
|
|
247
|
+
* (contract-valid, still delivered, never dropped) — unchanged.
|
|
248
|
+
*/
|
|
249
|
+
export declare function buildPendingEventEmitStamp(opts: {
|
|
250
|
+
eventName: string;
|
|
251
|
+
eventId: string;
|
|
252
|
+
dispatchedBy?: CoordinatorIdentity;
|
|
253
|
+
intendedFor?: CoordinatorIdentity;
|
|
254
|
+
scope?: MeshEventScope;
|
|
255
|
+
}): PendingEventEmitStampV2 | undefined;
|
|
256
|
+
export {};
|
|
@@ -8,12 +8,88 @@
|
|
|
8
8
|
* 3. How to orchestrate work across nodes
|
|
9
9
|
*
|
|
10
10
|
* The prompt is generated dynamically from the current mesh state.
|
|
11
|
+
*
|
|
12
|
+
* User customization:
|
|
13
|
+
* ~/.adhdev/coordinator-prompts/<cliType>.md — full override
|
|
14
|
+
* ~/.adhdev/coordinator-prompts/<cliType>.append.md — appended to default
|
|
15
|
+
* ~/.adhdev/coordinator-prompts/default.md — full override (any CLI)
|
|
16
|
+
* ~/.adhdev/coordinator-prompts/default.append.md — appended to default (any CLI)
|
|
17
|
+
*
|
|
18
|
+
* CLI-specific files take precedence over default.* files. The override file
|
|
19
|
+
* still gets the node/policy facts substituted via the same {{placeholders}}
|
|
20
|
+
* the daemon understands; an override that doesn't reference them just gets
|
|
21
|
+
* a static prompt, which is also fine.
|
|
11
22
|
*/
|
|
12
23
|
import type { LocalMeshEntry, RepoMeshStatus } from '../repo-mesh-types.js';
|
|
24
|
+
/**
|
|
25
|
+
* Cheap, locally-derived "what just happened" snapshot for the coordinator
|
|
26
|
+
* prompt. Built at launch from the local ledger + work-queue stats — no remote
|
|
27
|
+
* peer probe. Surfaces the gap a fresh coordinator otherwise misses: it can't
|
|
28
|
+
* see recent failures / queue depth until it manually calls mesh_task_history.
|
|
29
|
+
*
|
|
30
|
+
* All fields are optional so callers that have nothing to report (or fail to
|
|
31
|
+
* read the ledger) simply omit the section — the prompt output stays identical
|
|
32
|
+
* to the pre-activity form in that case.
|
|
33
|
+
*/
|
|
34
|
+
export interface CoordinatorRecentActivity {
|
|
35
|
+
/** task_failed entries from the recent window, newest last. */
|
|
36
|
+
recentFailures?: Array<{
|
|
37
|
+
timestamp?: string;
|
|
38
|
+
nodeId?: string;
|
|
39
|
+
/** Short task title/message, already truncated by the caller. */
|
|
40
|
+
summary?: string;
|
|
41
|
+
}>;
|
|
42
|
+
/** Count of task_failed entries inside the recent window. */
|
|
43
|
+
recentFailureCount?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Size of the "recent" window in minutes. Drives the "failed in the last
|
|
46
|
+
* N min" phrasing. Omitted → defaults to 30, matching the prior hardcoded
|
|
47
|
+
* wording so existing callers render identically.
|
|
48
|
+
*/
|
|
49
|
+
windowMinutes?: number;
|
|
50
|
+
/** Pending (unclaimed) tasks in the work queue. */
|
|
51
|
+
pendingTasks?: number;
|
|
52
|
+
/** Assigned-but-not-yet-terminal tasks in the work queue. */
|
|
53
|
+
assignedTasks?: number;
|
|
54
|
+
/** Stalled tasks recorded in the ledger. */
|
|
55
|
+
stalledTasks?: number;
|
|
56
|
+
/** ISO timestamp of the most recent ledger activity, if any. */
|
|
57
|
+
lastActivityAt?: string | null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* One coordinator operating note — a runtime-accumulated lesson (provider
|
|
61
|
+
* quirk, pattern to avoid, recovery lesson) persisted in the ledger so it
|
|
62
|
+
* survives coordinator restarts and is provider-neutral (visible to codex /
|
|
63
|
+
* hermes / antigravity coordinators, not just Claude's memory).
|
|
64
|
+
*/
|
|
65
|
+
export interface CoordinatorOperatingNote {
|
|
66
|
+
text: string;
|
|
67
|
+
category?: 'provider_quirk' | 'pattern_to_avoid' | 'recovery_lesson';
|
|
68
|
+
createdAt?: string;
|
|
69
|
+
sourceCoordinator?: string;
|
|
70
|
+
}
|
|
13
71
|
export interface CoordinatorPromptContext {
|
|
14
72
|
mesh: LocalMeshEntry;
|
|
15
73
|
status?: RepoMeshStatus;
|
|
16
74
|
userInstruction?: string;
|
|
17
75
|
coordinatorCliType?: string;
|
|
76
|
+
/**
|
|
77
|
+
* M3: pre-rendered active mission section (from buildMissionPromptSection).
|
|
78
|
+
* Empty/undefined when the mesh has no active mission — the prompt output
|
|
79
|
+
* stays identical to the pre-M3 form in that case.
|
|
80
|
+
*/
|
|
81
|
+
missionSection?: string;
|
|
82
|
+
/**
|
|
83
|
+
* Gap1: recent ledger/queue activity surfaced so a freshly-launched
|
|
84
|
+
* coordinator sees recent failures + queue depth without first calling
|
|
85
|
+
* mesh_task_history. Omitted → no "## Recent Activity" section.
|
|
86
|
+
*/
|
|
87
|
+
recentActivity?: CoordinatorRecentActivity;
|
|
88
|
+
/**
|
|
89
|
+
* Gap2-A: runtime-accumulated operating notes (provider-neutral lessons)
|
|
90
|
+
* read from the ledger at launch. Omitted/empty → no "## Operating Notes"
|
|
91
|
+
* section.
|
|
92
|
+
*/
|
|
93
|
+
operatingNotes?: CoordinatorOperatingNote[];
|
|
18
94
|
}
|
|
19
95
|
export declare function buildCoordinatorSystemPrompt(ctx: CoordinatorPromptContext): string;
|