@adhdev/daemon-core 0.9.82-rc.49 → 0.9.82-rc.490
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/boot/daemon-lifecycle.d.ts +9 -0
- package/dist/boot/process-hardening.d.ts +50 -0
- package/dist/build-info.d.ts +37 -0
- package/dist/chat/source-machine.d.ts +166 -0
- package/dist/chat/source-resolver.d.ts +104 -0
- package/dist/chat/subscription-updates.d.ts +1 -0
- package/dist/cli-adapter-types.d.ts +68 -2
- package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
- package/dist/cli-adapters/cli-state-engine.d.ts +220 -0
- package/dist/cli-adapters/provider-cli-adapter.d.ts +137 -64
- package/dist/cli-adapters/provider-cli-parse.d.ts +5 -0
- package/dist/cli-adapters/provider-cli-runtime.d.ts +34 -0
- package/dist/cli-adapters/provider-cli-shared.d.ts +74 -0
- package/dist/cli-adapters/pty-write-chunking.d.ts +34 -0
- package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
- package/dist/cli-adapters/resolve-executable.d.ts +69 -0
- package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +6 -3
- package/dist/cli-adapters/terminal-backends/types.d.ts +10 -2
- package/dist/cli-adapters/terminal-screen.d.ts +4 -11
- package/dist/commands/chat-commands-debug-bundle.d.ts +14 -0
- package/dist/commands/chat-commands-read.d.ts +23 -0
- package/dist/commands/chat-commands-scope.d.ts +39 -0
- package/dist/commands/chat-commands-shared.d.ts +33 -0
- package/dist/commands/chat-commands-write.d.ts +14 -0
- package/dist/commands/chat-commands.d.ts +10 -23
- package/dist/commands/cli-manager.d.ts +71 -1
- package/dist/commands/handler.d.ts +125 -0
- package/dist/commands/high-family/index.d.ts +3 -0
- package/dist/commands/high-family/mesh-coordinator-launch.d.ts +2 -0
- package/dist/commands/high-family/mesh-events.d.ts +2 -0
- package/dist/commands/high-family/mesh-status.d.ts +2 -0
- package/dist/commands/high-family/types.d.ts +64 -0
- package/dist/commands/low-family/coordinator-prompt.d.ts +9 -0
- package/dist/commands/low-family/daemon-lifecycle.d.ts +2 -0
- package/dist/commands/low-family/diagnostics.d.ts +2 -0
- package/dist/commands/low-family/index.d.ts +3 -0
- package/dist/commands/low-family/mesh-ledger.d.ts +10 -0
- package/dist/commands/low-family/mesh-node-logs.d.ts +2 -0
- package/dist/commands/low-family/notification.d.ts +2 -0
- package/dist/commands/low-family/refine-config.d.ts +2 -0
- package/dist/commands/low-family/session-host.d.ts +2 -0
- package/dist/commands/low-family/spec-providerdev.d.ts +11 -0
- package/dist/commands/low-family/status-meta.d.ts +2 -0
- package/dist/commands/low-family/types.d.ts +33 -0
- package/dist/commands/med-family/cli-agent.d.ts +2 -0
- package/dist/commands/med-family/fast-forward.d.ts +2 -0
- package/dist/commands/med-family/ide.d.ts +10 -0
- package/dist/commands/med-family/index.d.ts +3 -0
- package/dist/commands/med-family/mesh-crud.d.ts +48 -0
- package/dist/commands/med-family/mesh-host-pairing.d.ts +2 -0
- package/dist/commands/med-family/mesh-queue.d.ts +2 -0
- package/dist/commands/med-family/mesh-restart.d.ts +2 -0
- package/dist/commands/med-family/types.d.ts +152 -0
- package/dist/commands/mesh-coordinator.d.ts +85 -1
- package/dist/commands/router-aggregate-status.d.ts +24 -0
- package/dist/commands/router-mesh-session-owner.d.ts +59 -0
- package/dist/commands/router-refine.d.ts +151 -0
- package/dist/commands/router-worktree-cleanup.d.ts +133 -0
- package/dist/commands/router.d.ts +203 -15
- package/dist/commands/upgrade-helper.d.ts +41 -1
- package/dist/config/chat-history.d.ts +11 -0
- package/dist/config/config.d.ts +19 -0
- package/dist/config/mesh-config.d.ts +65 -0
- package/dist/config/mesh-json-config.d.ts +199 -0
- package/dist/config/registry-resolver.d.ts +54 -0
- package/dist/config/repo-settings.d.ts +77 -0
- package/dist/config/state-store.d.ts +30 -0
- package/dist/daemon/dev-server.d.ts +0 -2
- package/dist/detection/cli-detector.d.ts +17 -0
- package/dist/detection/ide-detector.d.ts +13 -0
- package/dist/detection/win32-ide-version.d.ts +37 -0
- package/dist/git/change-impact-config.d.ts +159 -0
- package/dist/git/git-commands.d.ts +26 -2
- package/dist/git/git-diff.d.ts +6 -0
- package/dist/git/git-executor.d.ts +11 -0
- package/dist/git/git-status.d.ts +80 -0
- package/dist/git/git-types.d.ts +2 -50
- package/dist/git/git-worktree.d.ts +71 -1
- package/dist/git/index.d.ts +3 -1
- package/dist/index.d.ts +70 -17
- package/dist/index.js +53532 -19073
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +53283 -18989
- package/dist/index.mjs.map +1 -1
- package/dist/installer.d.ts +1 -4
- package/dist/ipc/local-ipc-server.d.ts +91 -0
- package/dist/launch.d.ts +1 -1
- package/dist/logging/async-batch-writer.d.ts +10 -0
- package/dist/logging/debug-config.d.ts +16 -0
- package/dist/logging/log-redactor.d.ts +24 -0
- package/dist/logging/log-tail-reader.d.ts +81 -0
- package/dist/logging/logger.d.ts +1 -1
- package/dist/mesh/contracts.d.ts +256 -0
- package/dist/mesh/coordinator-prompt.d.ts +76 -0
- package/dist/mesh/coordinator-registry.d.ts +59 -0
- package/dist/mesh/mesh-active-work.d.ts +203 -0
- package/dist/mesh/mesh-clone-grace.d.ts +8 -0
- package/dist/mesh/mesh-completion-synthesis.d.ts +4 -0
- package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
- package/dist/mesh/mesh-delivery-policy.d.ts +104 -0
- package/dist/mesh/mesh-event-classify.d.ts +7 -0
- package/dist/mesh/mesh-event-forwarding.d.ts +58 -0
- package/dist/mesh/mesh-event-trace.d.ts +21 -0
- package/dist/mesh/mesh-events-coordinator.d.ts +4 -0
- package/dist/mesh/mesh-events-pending.d.ts +258 -0
- package/dist/mesh/mesh-events-stale.d.ts +61 -0
- package/dist/mesh/mesh-events-utils.d.ts +75 -0
- package/dist/mesh/mesh-events.d.ts +6 -49
- package/dist/mesh/mesh-fast-forward.d.ts +81 -0
- package/dist/mesh/mesh-host-ownership.d.ts +21 -1
- package/dist/mesh/mesh-init.d.ts +128 -0
- package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
- package/dist/mesh/mesh-ledger.d.ts +139 -1
- package/dist/mesh/mesh-magi-status.d.ts +63 -0
- package/dist/mesh/mesh-missions.d.ts +281 -0
- package/dist/mesh/mesh-node-identity.d.ts +310 -0
- package/dist/mesh/mesh-queue-assignment.d.ts +162 -0
- package/dist/mesh/mesh-reconcile-acked-hold.d.ts +17 -0
- package/dist/mesh/mesh-reconcile-config.d.ts +6 -0
- package/dist/mesh/mesh-reconcile-identity.d.ts +6 -0
- package/dist/mesh/mesh-reconcile-loop.d.ts +84 -0
- package/dist/mesh/mesh-reconcile-v2-backstop.d.ts +16 -0
- package/dist/mesh/mesh-refine-batch.d.ts +68 -0
- package/dist/mesh/mesh-refine-gates.d.ts +457 -0
- package/dist/mesh/mesh-refine-status.d.ts +62 -0
- package/dist/mesh/mesh-remote-event-pull.d.ts +15 -0
- package/dist/mesh/mesh-review-inbox.d.ts +90 -0
- package/dist/mesh/mesh-routing.d.ts +70 -0
- package/dist/mesh/mesh-runtime-store.d.ts +567 -0
- package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
- package/dist/mesh/mesh-task-inflight.d.ts +46 -0
- package/dist/mesh/mesh-task-stats.d.ts +49 -0
- package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +34 -0
- package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
- package/dist/mesh/mesh-work-queue.d.ts +392 -1
- package/dist/mesh/preview-freshness.d.ts +28 -0
- package/dist/mesh/refine-config.d.ts +97 -0
- package/dist/mesh/worktree-bootstrap-config.d.ts +219 -0
- package/dist/providers/acp-provider-instance.d.ts +5 -0
- package/dist/providers/approval-utils.d.ts +46 -0
- package/dist/providers/chat-message-normalization.d.ts +58 -1
- package/dist/providers/cli-provider-effect-format.d.ts +30 -0
- package/dist/providers/cli-provider-history-dedup.d.ts +17 -0
- package/dist/providers/cli-provider-input-prompt.d.ts +12 -0
- package/dist/providers/cli-provider-instance-types.d.ts +45 -0
- package/dist/providers/cli-provider-instance.d.ts +426 -30
- package/dist/providers/cli-provider-status-helpers.d.ts +46 -0
- package/dist/providers/cli-provider-transcript-merge.d.ts +7 -0
- package/dist/providers/contracts.d.ts +196 -6
- package/dist/providers/external-sources.d.ts +71 -0
- package/dist/providers/manual-attendance.d.ts +79 -0
- package/dist/providers/native-history/antigravity-claim-registry.d.ts +39 -0
- package/dist/providers/native-history/antigravity-cli-transcript.d.ts +137 -0
- package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
- package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
- package/dist/providers/native-history/constants.d.ts +12 -0
- package/dist/providers/native-history/dispatcher.d.ts +44 -0
- package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
- package/dist/providers/native-history/index.d.ts +13 -0
- package/dist/providers/provider-instance-manager.d.ts +30 -0
- package/dist/providers/provider-instance.d.ts +31 -1
- package/dist/providers/provider-loader.d.ts +42 -5
- package/dist/providers/provider-trust.d.ts +31 -0
- package/dist/providers/read-chat-contract.d.ts +29 -0
- package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
- package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
- package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
- package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
- package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
- package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
- package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
- package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
- package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
- package/dist/providers/sdk/v1/index.d.ts +30 -0
- package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
- package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
- package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
- package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
- package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
- package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
- package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
- package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
- package/dist/providers/spec/adapter.d.ts +98 -0
- package/dist/providers/spec/cli-adapter.d.ts +223 -0
- package/dist/providers/spec/evaluator.d.ts +45 -0
- package/dist/providers/spec/fsm-driver.d.ts +449 -0
- package/dist/providers/spec/fsm-evaluator.d.ts +93 -0
- package/dist/providers/spec/fsm-loader.d.ts +14 -0
- package/dist/providers/spec/fsm-types.d.ts +202 -0
- package/dist/providers/spec/native-history-executor.d.ts +41 -0
- package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
- package/dist/providers/spec/route.d.ts +4 -0
- package/dist/providers/spec/types.d.ts +244 -0
- package/dist/providers/status-monitor.d.ts +7 -7
- package/dist/providers/transcript-v2.d.ts +176 -0
- package/dist/providers/types/interactive-prompt.d.ts +84 -0
- package/dist/providers/working-dir.d.ts +17 -0
- package/dist/repo-mesh-types.d.ts +616 -12
- package/dist/runtime-defaults.d.ts +2 -0
- package/dist/session-host/managed-host.d.ts +64 -0
- package/dist/session-host/runtime-surface.d.ts +10 -16
- package/dist/sessions/registry.d.ts +26 -0
- package/dist/shared-types-extra.d.ts +2 -4
- package/dist/shared-types.d.ts +110 -55
- package/dist/status/chat-tail-hot-sessions.d.ts +40 -0
- package/dist/status/normalize.d.ts +1 -1
- package/dist/status/normalize.js +1 -0
- package/dist/status/normalize.js.map +1 -1
- package/dist/status/normalize.mjs +1 -0
- package/dist/status/normalize.mjs.map +1 -1
- package/dist/status/reporter.d.ts +2 -0
- package/dist/status/snapshot.d.ts +27 -0
- package/dist/system/hash.d.ts +8 -0
- package/dist/system/load-better-sqlite3.d.ts +21 -0
- package/dist/types.d.ts +20 -6
- package/package.json +11 -4
- package/src/agent-stream/poller.ts +2 -3
- package/src/agent-stream/provider-adapter.ts +1 -1
- package/src/boot/daemon-lifecycle.ts +80 -14
- package/src/boot/process-hardening.ts +89 -0
- package/src/build-info.ts +73 -0
- package/src/chat/source-machine.ts +534 -0
- package/src/chat/source-resolver.ts +0 -0
- package/src/chat/subscription-updates.ts +20 -1
- package/src/cli-adapter-types.d.ts +3 -1
- package/src/cli-adapter-types.ts +68 -2
- package/src/cli-adapters/cli-script-runner.ts +421 -0
- package/src/cli-adapters/cli-state-engine.ts +1282 -0
- package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
- package/src/cli-adapters/provider-cli-adapter.ts +1048 -1143
- package/src/cli-adapters/provider-cli-parse.d.ts +2 -0
- package/src/cli-adapters/provider-cli-parse.ts +19 -0
- package/src/cli-adapters/provider-cli-runtime.ts +56 -7
- package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
- package/src/cli-adapters/provider-cli-shared.ts +121 -11
- package/src/cli-adapters/pty-transport.ts +2 -1
- package/src/cli-adapters/pty-write-chunking.ts +106 -0
- package/src/cli-adapters/raw-terminal-io.ts +252 -0
- package/src/cli-adapters/resolve-executable.ts +204 -0
- package/src/cli-adapters/session-host-transport.ts +2 -1
- package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +63 -29
- package/src/cli-adapters/terminal-backends/types.ts +10 -3
- package/src/cli-adapters/terminal-screen.ts +16 -81
- package/src/commands/chat-commands-debug-bundle.ts +398 -0
- package/src/commands/chat-commands-read.ts +2788 -0
- package/src/commands/chat-commands-scope.ts +54 -0
- package/src/commands/chat-commands-shared.ts +114 -0
- package/src/commands/chat-commands-write.ts +891 -0
- package/src/commands/chat-commands.ts +19 -1841
- package/src/commands/cli-manager.d.ts +2 -0
- package/src/commands/cli-manager.ts +724 -27
- package/src/commands/handler.ts +865 -2
- package/src/commands/high-family/index.ts +28 -0
- package/src/commands/high-family/mesh-coordinator-launch.ts +696 -0
- package/src/commands/high-family/mesh-events.ts +102 -0
- package/src/commands/high-family/mesh-status.ts +857 -0
- package/src/commands/high-family/types.ts +80 -0
- package/src/commands/low-family/coordinator-prompt.ts +125 -0
- package/src/commands/low-family/daemon-lifecycle.ts +120 -0
- package/src/commands/low-family/diagnostics.ts +57 -0
- package/src/commands/low-family/index.ts +37 -0
- package/src/commands/low-family/mesh-ledger.ts +62 -0
- package/src/commands/low-family/mesh-node-logs.ts +87 -0
- package/src/commands/low-family/notification.ts +116 -0
- package/src/commands/low-family/refine-config.ts +106 -0
- package/src/commands/low-family/session-host.ts +282 -0
- package/src/commands/low-family/spec-providerdev.ts +217 -0
- package/src/commands/low-family/status-meta.ts +112 -0
- package/src/commands/low-family/types.ts +39 -0
- package/src/commands/med-family/cli-agent.ts +270 -0
- package/src/commands/med-family/fast-forward.ts +230 -0
- package/src/commands/med-family/ide.ts +163 -0
- package/src/commands/med-family/index.ts +37 -0
- package/src/commands/med-family/mesh-crud.ts +1268 -0
- package/src/commands/med-family/mesh-host-pairing.ts +234 -0
- package/src/commands/med-family/mesh-queue.ts +167 -0
- package/src/commands/med-family/mesh-restart.ts +92 -0
- package/src/commands/med-family/types.ts +153 -0
- package/src/commands/mesh-coordinator.ts +334 -124
- package/src/commands/router-aggregate-status.ts +209 -0
- package/src/commands/router-mesh-session-owner.ts +114 -0
- package/src/commands/router-refine.ts +1794 -0
- package/src/commands/router-worktree-cleanup.ts +870 -0
- package/src/commands/router.ts +567 -4149
- package/src/commands/stream-commands.ts +8 -0
- package/src/commands/upgrade-helper.ts +310 -45
- package/src/config/chat-history.ts +517 -24
- package/src/config/config.ts +30 -0
- package/src/config/mesh-config.ts +300 -24
- package/src/config/mesh-json-config.ts +376 -0
- package/src/config/recent-activity.ts +8 -2
- package/src/config/registry-resolver.ts +100 -0
- package/src/config/repo-settings.ts +111 -0
- package/src/config/state-store.ts +55 -0
- package/src/daemon/dev-auto-implement.ts +3 -2
- package/src/daemon/dev-cli-debug.ts +10 -1
- package/src/daemon/dev-server.ts +0 -541
- package/src/detection/cli-detector.ts +94 -9
- package/src/detection/ide-detector.ts +55 -16
- package/src/detection/win32-ide-version.ts +106 -0
- package/src/git/change-impact-config.ts +354 -0
- package/src/git/git-commands.ts +112 -16
- package/src/git/git-diff.ts +81 -11
- package/src/git/git-executor.ts +12 -0
- package/src/git/git-status.ts +822 -48
- package/src/git/git-types.ts +14 -62
- package/src/git/git-worktree.ts +261 -4
- package/src/git/index.ts +17 -0
- package/src/index.ts +190 -13
- package/src/installer.d.ts +1 -1
- package/src/installer.ts +8 -6
- package/src/ipc/local-ipc-server.ts +278 -0
- package/src/launch.d.ts +1 -1
- package/src/launch.ts +37 -28
- package/src/logging/async-batch-writer.ts +55 -0
- package/src/logging/command-log.ts +7 -5
- package/src/logging/debug-config.ts +25 -0
- package/src/logging/debug-trace.ts +7 -2
- package/src/logging/log-redactor.ts +100 -0
- package/src/logging/log-tail-reader.ts +341 -0
- package/src/logging/logger.ts +14 -7
- package/src/mesh/contracts.ts +510 -0
- package/src/mesh/coordinator-prompt.ts +627 -34
- package/src/mesh/coordinator-registry.ts +121 -0
- package/src/mesh/mesh-active-work.ts +706 -0
- package/src/mesh/mesh-clone-grace.ts +68 -0
- package/src/mesh/mesh-completion-synthesis.ts +416 -0
- package/src/mesh/mesh-coordinator-config.ts +97 -0
- package/src/mesh/mesh-delivery-policy.ts +284 -0
- package/src/mesh/mesh-event-classify.ts +78 -0
- package/src/mesh/mesh-event-forwarding.ts +2030 -0
- package/src/mesh/mesh-event-trace.ts +67 -0
- package/src/mesh/mesh-events-coordinator.ts +32 -0
- package/src/mesh/mesh-events-pending.ts +1548 -0
- package/src/mesh/mesh-events-stale.ts +452 -0
- package/src/mesh/mesh-events-utils.ts +443 -0
- package/src/mesh/mesh-events.ts +43 -1035
- package/src/mesh/mesh-fast-forward.ts +856 -0
- package/src/mesh/mesh-host-ownership.ts +41 -3
- package/src/mesh/mesh-init.ts +350 -0
- package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
- package/src/mesh/mesh-ledger.ts +897 -102
- package/src/mesh/mesh-magi-status.ts +223 -0
- package/src/mesh/mesh-missions.ts +695 -0
- package/src/mesh/mesh-node-identity.ts +2065 -0
- package/src/mesh/mesh-queue-assignment.ts +2498 -0
- package/src/mesh/mesh-reconcile-acked-hold.ts +230 -0
- package/src/mesh/mesh-reconcile-config.ts +66 -0
- package/src/mesh/mesh-reconcile-identity.ts +103 -0
- package/src/mesh/mesh-reconcile-loop.ts +1696 -0
- package/src/mesh/mesh-reconcile-v2-backstop.ts +62 -0
- package/src/mesh/mesh-refine-batch.ts +205 -0
- package/src/mesh/mesh-refine-gates.ts +1792 -0
- package/src/mesh/mesh-refine-status.ts +231 -0
- package/src/mesh/mesh-remote-event-pull.ts +279 -0
- package/src/mesh/mesh-review-inbox.ts +308 -0
- package/src/mesh/mesh-routing.ts +291 -0
- package/src/mesh/mesh-runtime-store.ts +2292 -0
- package/src/mesh/mesh-scheduling-runtime.ts +198 -0
- package/src/mesh/mesh-task-inflight.ts +70 -0
- package/src/mesh/mesh-task-stats.ts +161 -0
- package/src/mesh/mesh-unresolved-forward-outbox.ts +215 -0
- package/src/mesh/mesh-warmup-deadline.ts +152 -0
- package/src/mesh/mesh-work-queue.ts +1489 -145
- package/src/mesh/preview-freshness.ts +163 -0
- package/src/mesh/refine-config.ts +129 -12
- package/src/mesh/worktree-bootstrap-config.ts +599 -0
- package/src/providers/acp-provider-instance.ts +43 -10
- package/src/providers/approval-utils.d.ts +5 -0
- package/src/providers/approval-utils.ts +100 -6
- package/src/providers/chat-message-normalization.ts +126 -4
- package/src/providers/cli-provider-effect-format.ts +53 -0
- package/src/providers/cli-provider-history-dedup.ts +75 -0
- package/src/providers/cli-provider-input-prompt.ts +133 -0
- package/src/providers/cli-provider-instance-types.ts +131 -0
- package/src/providers/cli-provider-instance.ts +2771 -499
- package/src/providers/cli-provider-status-helpers.ts +123 -0
- package/src/providers/cli-provider-transcript-merge.ts +114 -0
- package/src/providers/contracts.d.ts +55 -0
- package/src/providers/contracts.ts +207 -6
- package/src/providers/extension-provider-instance.ts +12 -7
- package/src/providers/external-sources.ts +218 -0
- package/src/providers/ide-provider-instance.ts +35 -12
- package/src/providers/manual-attendance.ts +105 -0
- package/src/providers/native-history/antigravity-claim-registry.ts +138 -0
- package/src/providers/native-history/antigravity-cli-transcript.ts +1275 -0
- package/src/providers/native-history/claude-cli-transcript.ts +396 -0
- package/src/providers/native-history/codex-cli-transcript.ts +479 -0
- package/src/providers/native-history/constants.ts +19 -0
- package/src/providers/native-history/dispatcher.ts +617 -0
- package/src/providers/native-history/hermes-cli-transcript.ts +312 -0
- package/src/providers/native-history/index.ts +30 -0
- package/src/providers/provider-instance-manager.ts +71 -0
- package/src/providers/provider-instance.ts +24 -1
- package/src/providers/provider-loader.ts +700 -55
- package/src/providers/provider-schema.ts +93 -14
- package/src/providers/provider-trust.ts +114 -0
- package/src/providers/read-chat-contract.ts +76 -16
- package/src/providers/sdk/README.md +49 -0
- package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
- package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
- package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
- package/src/providers/sdk/v1/builders/cli/parse-approval.ts +261 -0
- package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
- package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
- package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
- package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
- package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
- package/src/providers/sdk/v1/index.ts +152 -0
- package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
- package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
- package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
- package/src/providers/sdk/v1/schemas/cli/provider.schema.json +538 -0
- package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
- package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
- package/src/providers/sdk/v1/types/cli/index.ts +365 -0
- package/src/providers/sdk/v1/types/common/index.ts +229 -0
- package/src/providers/sdk/v1/validators/index.ts +19 -0
- package/src/providers/sdk/v1/validators/manifest.ts +110 -0
- package/src/providers/sdk/v1/validators/taint.ts +309 -0
- package/src/providers/spec/adapter.ts +246 -0
- package/src/providers/spec/cli-adapter.ts +1064 -0
- package/src/providers/spec/evaluator.ts +407 -0
- package/src/providers/spec/fsm-driver.ts +1528 -0
- package/src/providers/spec/fsm-evaluator.ts +290 -0
- package/src/providers/spec/fsm-loader.ts +128 -0
- package/src/providers/spec/fsm-types.ts +301 -0
- package/src/providers/spec/native-history-executor.ts +1241 -0
- package/src/providers/spec/pre-launch-trust.ts +104 -0
- package/src/providers/spec/route.ts +51 -0
- package/src/providers/spec/types.ts +284 -0
- package/src/providers/status-monitor.d.ts +7 -7
- package/src/providers/status-monitor.ts +37 -22
- package/src/providers/transcript-v2.ts +567 -0
- package/src/providers/types/interactive-prompt.ts +536 -0
- package/src/providers/version-archive.ts +64 -24
- package/src/providers/working-dir.ts +23 -0
- package/src/repo-mesh-types.ts +861 -14
- package/src/runtime-defaults.ts +39 -0
- package/src/session-host/managed-host.ts +218 -0
- package/src/session-host/runtime-surface.ts +20 -80
- package/src/sessions/registry.ts +44 -0
- package/src/shared-types-extra.ts +2 -4
- package/src/shared-types.d.ts +8 -0
- package/src/shared-types.ts +148 -55
- package/src/status/builders.ts +69 -6
- package/src/status/chat-tail-hot-sessions.ts +117 -2
- package/src/status/normalize.ts +2 -0
- package/src/status/reporter.ts +19 -1
- package/src/status/snapshot.ts +100 -27
- package/src/system/hash.ts +23 -0
- package/src/system/host-memory.ts +29 -12
- package/src/system/load-better-sqlite3.ts +68 -0
- package/src/types.ts +26 -6
- package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
- package/dist/mesh/mesh-sync.d.ts +0 -53
- package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
- package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
- package/src/mesh/mesh-sync.ts +0 -111
|
@@ -64,7 +64,33 @@ export interface RecentReadDebugSnapshot {
|
|
|
64
64
|
messageUpdatedAt: number;
|
|
65
65
|
}
|
|
66
66
|
export declare function shouldEmitRecentReadDebugLog(cache: Map<string, string>, snapshot: RecentReadDebugSnapshot): boolean;
|
|
67
|
+
export declare function buildAvailableProviders(providerLoader: StatusSnapshotOptions['providerLoader']): AvailableProviderInfo[];
|
|
67
68
|
export declare function buildMachineInfo(profile?: 'full' | 'live' | 'metadata'): MachineInfo;
|
|
69
|
+
/**
|
|
70
|
+
* Resolve the last user-visible (non-system) message for a session as a preview.
|
|
71
|
+
*
|
|
72
|
+
* Exported so the cloud coordinator can derive a preview for a LOCAL mesh-owned
|
|
73
|
+
* worktree session directly from the real provider instance it hosts. A REMOTE
|
|
74
|
+
* worker session has no local instance (its preview rides the completion event's
|
|
75
|
+
* finalSummary — see resolveMeshSurfacedSessionPreview), but a LOCAL coordinator
|
|
76
|
+
* IS the worker, so its hosted instance's transcript holds the assistant reply and
|
|
77
|
+
* this is the source of truth for that case.
|
|
78
|
+
*/
|
|
79
|
+
export declare function getLastDisplayMessage(session: {
|
|
80
|
+
activeChat?: {
|
|
81
|
+
messages?: Array<{
|
|
82
|
+
role?: string;
|
|
83
|
+
content?: unknown;
|
|
84
|
+
receivedAt?: number | string;
|
|
85
|
+
timestamp?: number | string;
|
|
86
|
+
}> | null;
|
|
87
|
+
} | null;
|
|
88
|
+
}): {
|
|
89
|
+
role: string;
|
|
90
|
+
preview: string;
|
|
91
|
+
receivedAt: number;
|
|
92
|
+
hash: string;
|
|
93
|
+
} | null;
|
|
68
94
|
export { getSessionCurrentNotificationId, applySessionNotificationOverlay } from '../config/recent-activity.js';
|
|
69
95
|
export declare function getSessionCompletionMarker(session: {
|
|
70
96
|
activeChat?: {
|
|
@@ -75,6 +101,7 @@ export declare function getSessionCompletionMarker(session: {
|
|
|
75
101
|
receivedAt?: number | string;
|
|
76
102
|
timestamp?: number | string;
|
|
77
103
|
_turnKey?: string;
|
|
104
|
+
kind?: string;
|
|
78
105
|
}> | null;
|
|
79
106
|
} | null;
|
|
80
107
|
}): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Full lowercase hex SHA-256 digest of `input`. */
|
|
2
|
+
export declare function sha256Hex(input: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Truncated SHA-256 hex digest — the first `length` hex chars (default 16).
|
|
5
|
+
* Used for stable short identifiers (workspace hashes, token ids, coordinator
|
|
6
|
+
* home dirs) where collision risk at 16 hex chars (64 bits) is negligible.
|
|
7
|
+
*/
|
|
8
|
+
export declare function shortHash(input: string, length?: number): string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type BetterSqlite3 from 'better-sqlite3';
|
|
2
|
+
/**
|
|
3
|
+
* Load the `better-sqlite3` constructor in a way that survives every runtime the
|
|
4
|
+
* daemon ships in.
|
|
5
|
+
*
|
|
6
|
+
* The naive `typeof require === 'function' ? require : createRequire(import.meta.url)`
|
|
7
|
+
* is unsafe inside the daemon-cloud bundle: esbuild emits CJS output but, for any
|
|
8
|
+
* chunk that touches `import.meta.url`, it shims the local `require` with a stub
|
|
9
|
+
* that THROWS `Dynamic require of "..." is not supported`. That stub is still
|
|
10
|
+
* `typeof === 'function'`, so the ternary picks it and the call throws — it never
|
|
11
|
+
* reaches the `createRequire` fallback. The failure surfaced as `mesh_send_task`
|
|
12
|
+
* crashing the whole tool call instead of gracefully degrading.
|
|
13
|
+
*
|
|
14
|
+
* The robust approach is to ATTEMPT the real `require` and CATCH the esbuild stub's
|
|
15
|
+
* throw, then fall back to `createRequire`. We try multiple resolution bases so the
|
|
16
|
+
* load works whether the code runs as:
|
|
17
|
+
* - a genuine CJS module (bare `require` works),
|
|
18
|
+
* - an esbuild CJS bundle with the throwing `require` shim (createRequire(import.meta.url)),
|
|
19
|
+
* - a pure ESM module where `require` is undefined (createRequire(import.meta.url)).
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadBetterSqlite3(): typeof BetterSqlite3;
|
package/dist/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* When modifying this file, also update interface contracts in AGENT_PROTOCOL.md.
|
|
6
6
|
*/
|
|
7
7
|
import type { StatusReportPayload, AvailableProviderInfo } from './shared-types.js';
|
|
8
|
-
import type { ChatMessageKind } from './providers/chat-message-normalization.js';
|
|
8
|
+
import type { ChatMessageKind, ChatMessageVisibility, ChatMessageTranscriptVisibility, ChatMessageAudience, ChatMessageSource } from './providers/chat-message-normalization.js';
|
|
9
9
|
/** Full status response from /api/v1/status and WS events */
|
|
10
10
|
export interface StatusResponse extends StatusReportPayload {
|
|
11
11
|
/** For standalone API compat */
|
|
@@ -36,17 +36,31 @@ export interface ChatMessage {
|
|
|
36
36
|
index?: number;
|
|
37
37
|
timestamp?: number;
|
|
38
38
|
receivedAt?: number;
|
|
39
|
+
/** (A2.3) Monotonic sequence number per (session, source). Producer-asserted
|
|
40
|
+
* when emitted by v2-aware providers (transcript v2 schema); otherwise
|
|
41
|
+
* derived by the daemon from receivedAt/timestamp/index. ChatSourceMachine
|
|
42
|
+
* uses this as the native peak watermark for regression detection. */
|
|
43
|
+
sequence?: number;
|
|
39
44
|
_turnKey?: string;
|
|
40
45
|
/** Tool calls associated with this message */
|
|
41
46
|
toolCalls?: ToolCallInfo[];
|
|
42
47
|
/** Optional: fiber metadata */
|
|
43
48
|
_type?: string;
|
|
44
49
|
_sub?: string;
|
|
45
|
-
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Transcript visibility/audience contract for separating chat-visible content
|
|
52
|
+
* from internal/debug runtime rows. These reference the canonical named unions
|
|
53
|
+
* declared alongside the classifier (chat-message-normalization.ts) so the known
|
|
54
|
+
* values have one source of truth instead of a hand-inlined copy that drifts.
|
|
55
|
+
* Each alias keeps the `| (string & {})` escape hatch: the read-chat contract
|
|
56
|
+
* (read-chat-contract.ts) preserves ANY producer-supplied string verbatim, so
|
|
57
|
+
* the type must stay open — it documents the known values without forbidding
|
|
58
|
+
* provider-specific extensions.
|
|
59
|
+
*/
|
|
60
|
+
visibility?: ChatMessageVisibility;
|
|
61
|
+
transcriptVisibility?: ChatMessageTranscriptVisibility;
|
|
62
|
+
audience?: ChatMessageAudience;
|
|
63
|
+
source?: ChatMessageSource;
|
|
50
64
|
userFacing?: boolean;
|
|
51
65
|
internal?: boolean;
|
|
52
66
|
isInternal?: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adhdev/daemon-core",
|
|
3
|
-
"version": "0.9.82-rc.
|
|
3
|
+
"version": "0.9.82-rc.490",
|
|
4
4
|
"description": "ADHDev daemon core — CDP, IDE detection, providers, command execution",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"scripts": {
|
|
28
28
|
"build": "tsup && npm run build:types",
|
|
29
29
|
"build:types": "tsc -p tsconfig.json --emitDeclarationOnly --declaration --declarationMap false",
|
|
30
|
-
"dev": "tsup --watch",
|
|
30
|
+
"dev": "tsup --watch --no-clean",
|
|
31
|
+
"lint": "eslint \"src/mesh/**/*.ts\"",
|
|
31
32
|
"test": "vitest run",
|
|
32
33
|
"test:watch": "vitest",
|
|
33
34
|
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
@@ -46,9 +47,12 @@
|
|
|
46
47
|
"author": "vilmire",
|
|
47
48
|
"license": "AGPL-3.0-or-later",
|
|
48
49
|
"dependencies": {
|
|
49
|
-
"@adhdev/
|
|
50
|
+
"@adhdev/mesh-shared": "0.9.82-rc.490",
|
|
51
|
+
"@adhdev/session-host-core": "0.9.82-rc.490",
|
|
50
52
|
"@agentclientprotocol/sdk": "^0.16.1",
|
|
51
|
-
"
|
|
53
|
+
"ajv": "^8.20.0",
|
|
54
|
+
"ajv-formats": "^3.0.1",
|
|
55
|
+
"better-sqlite3": "^12.10.0",
|
|
52
56
|
"chalk": "^5.3.0",
|
|
53
57
|
"chokidar": "^4.0.3",
|
|
54
58
|
"conf": "^13.0.0",
|
|
@@ -60,11 +64,14 @@
|
|
|
60
64
|
"@adhdev/ghostty-vt-node": "*"
|
|
61
65
|
},
|
|
62
66
|
"devDependencies": {
|
|
67
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
63
68
|
"@types/js-yaml": "^4.0.9",
|
|
64
69
|
"@types/node": "^22.0.0",
|
|
65
70
|
"@types/ws": "^8.18.1",
|
|
71
|
+
"eslint": "^9.39.4",
|
|
66
72
|
"tsup": "^8.2.0",
|
|
67
73
|
"typescript": "^5.5.0",
|
|
74
|
+
"typescript-eslint": "^8.62.0",
|
|
68
75
|
"vitest": "^4.1.3"
|
|
69
76
|
},
|
|
70
77
|
"repository": {
|
|
@@ -19,7 +19,7 @@ import type { SessionRegistry } from '../sessions/registry.js';
|
|
|
19
19
|
import { reconcileIdeRuntimeSessions } from '../sessions/reconcile.js';
|
|
20
20
|
import { LOG } from '../logging/logger.js';
|
|
21
21
|
import type { AgentStreamState } from './types.js';
|
|
22
|
-
import { formatAutoApprovalMessage,
|
|
22
|
+
import { formatAutoApprovalMessage, pickAutoApprovalButton } from '../providers/approval-utils.js';
|
|
23
23
|
import type { ProviderModule } from '../providers/contracts.js';
|
|
24
24
|
import { buildRuntimeSystemChatMessage } from '../providers/chat-message-normalization.js';
|
|
25
25
|
|
|
@@ -210,8 +210,7 @@ export class AgentStreamPoller {
|
|
|
210
210
|
if (stream?.status === 'waiting_approval') {
|
|
211
211
|
const autoApprove = providerLoader.getSettings(stream.agentType).autoApprove !== false;
|
|
212
212
|
if (autoApprove && resolvedActiveSessionId) {
|
|
213
|
-
const
|
|
214
|
-
const { label: buttonLabel } = pickApprovalButton(stream.activeModal?.buttons, provider);
|
|
213
|
+
const { label: buttonLabel } = pickAutoApprovalButton(stream.activeModal?.buttons);
|
|
215
214
|
const approved = await agentStreamManager.resolveSessionAction(cdp, resolvedActiveSessionId, 'approve', buttonLabel);
|
|
216
215
|
if (approved) {
|
|
217
216
|
const effectId = [
|
|
@@ -256,7 +256,7 @@ export class ProviderStreamAdapter implements IAgentStreamAdapter {
|
|
|
256
256
|
}
|
|
257
257
|
const validated = validateReadChatResultPayload(data, `${this.agentType} readChat`);
|
|
258
258
|
const validatedStatus = (validated as any).status as string;
|
|
259
|
-
const streamStatus = validatedStatus === 'generating' || validatedStatus === 'long_generating'
|
|
259
|
+
const streamStatus = validatedStatus === 'generating' || validatedStatus === 'no_progress' || validatedStatus === 'long_generating'
|
|
260
260
|
? 'streaming'
|
|
261
261
|
: validatedStatus;
|
|
262
262
|
const state: AgentStreamState = {
|
|
@@ -25,7 +25,8 @@ import { VersionArchive, detectAllVersions } from '../providers/version-archive.
|
|
|
25
25
|
import { ProviderInstanceManager } from '../providers/provider-instance-manager.js';
|
|
26
26
|
import { DevServer } from '../daemon/dev-server.js';
|
|
27
27
|
import { detectIDEs, type IDEInfo } from '../detection/ide-detector.js';
|
|
28
|
-
import { detectCLI, detectCLIs } from '../detection/cli-detector.js';
|
|
28
|
+
import { detectCLI, detectCLIs, getCachedProviderVersions } from '../detection/cli-detector.js';
|
|
29
|
+
import { getDaemonBuildInfo } from '../build-info.js';
|
|
29
30
|
import { SessionRegistry } from '../sessions/registry.js';
|
|
30
31
|
import { LOG, installGlobalInterceptor } from '../logging/logger.js';
|
|
31
32
|
import {
|
|
@@ -37,6 +38,10 @@ import type { PtyTransportFactory } from '../cli-adapters/pty-transport.js';
|
|
|
37
38
|
import type { IdeProviderInstance } from '../providers/ide-provider-instance.js';
|
|
38
39
|
import { createDefaultGitCommandServices } from '../git/git-commands.js';
|
|
39
40
|
import { setupMeshEventForwarding } from '../mesh/mesh-events.js';
|
|
41
|
+
import { setupMeshReconcileLoop } from '../mesh/mesh-reconcile-loop.js';
|
|
42
|
+
import { loadMeshCoordinatorRegistry } from '../mesh/coordinator-registry.js';
|
|
43
|
+
import { applyProcessHardening } from './process-hardening.js';
|
|
44
|
+
import { installProviderProcessShim } from '../providers/sdk/v1/sandbox/require-whitelist.js';
|
|
40
45
|
|
|
41
46
|
// ─── Init Config ───
|
|
42
47
|
|
|
@@ -60,6 +65,7 @@ export interface DaemonInitConfig {
|
|
|
60
65
|
|
|
61
66
|
/** Router transport-specific callbacks */
|
|
62
67
|
onStatusChange?: () => void;
|
|
68
|
+
onMeshStateChange?: (meshId: string) => void;
|
|
63
69
|
onPostChatCommand?: () => void;
|
|
64
70
|
sessionHostControl?: SessionHostControlPlane | null;
|
|
65
71
|
getCdpLogFn?: (ideType: string) => (msg: string) => void;
|
|
@@ -88,6 +94,8 @@ export interface DaemonInitConfig {
|
|
|
88
94
|
dispatchMeshCommand?: (daemonId: string, command: string, args: Record<string, unknown>) => Promise<any>;
|
|
89
95
|
/** Returns selected-coordinator mesh peer telemetry for a target daemon when available. */
|
|
90
96
|
getMeshPeerConnectionStatus?: (daemonId: string) => Record<string, unknown> | null;
|
|
97
|
+
/** Cloud-only: P2P dashboard metadata sync after the core forwarder handles a mesh event. */
|
|
98
|
+
onMeshCoordinatorEventForwarded?: (payload: Record<string, unknown>) => void;
|
|
91
99
|
}
|
|
92
100
|
|
|
93
101
|
// ─── Result ───
|
|
@@ -106,6 +114,31 @@ export interface DaemonComponents {
|
|
|
106
114
|
detectedIdes: { value: IDEInfo[] };
|
|
107
115
|
refreshProviderAvailability: (providerType?: string) => Promise<void>;
|
|
108
116
|
dispatchMeshCommand?: (daemonId: string, command: string, args: Record<string, unknown>) => Promise<any>;
|
|
117
|
+
// Cloud-only: live selected-coordinator mesh peer telemetry for a target daemon.
|
|
118
|
+
// Lets the remote task-dispatch path (mesh-events-coordinator deliverTaskToSession)
|
|
119
|
+
// tell a still-opening DataChannel ("cold") apart from an open one ("warm") so a
|
|
120
|
+
// cold-open handshake is charged to the connect budget, not the response budget.
|
|
121
|
+
// Injected by daemon-cloud; absent on standalone (no P2P mesh), where the remote
|
|
122
|
+
// dispatch path is unused.
|
|
123
|
+
getMeshPeerConnectionStatus?: (daemonId: string) => Record<string, unknown> | null;
|
|
124
|
+
// Cloud-only hook: after the single core forwarder handles a mesh coordinator event, cloud
|
|
125
|
+
// uses this to keep its P2P dashboard view in sync (mesh-owned session metadata + flush
|
|
126
|
+
// subscriptions). Injected by daemon-cloud; absent/no-op on standalone. Replaces cloud's
|
|
127
|
+
// former separate instanceManager.onEvent listener so the event path stays single-listener.
|
|
128
|
+
onMeshCoordinatorEventForwarded?: (payload: Record<string, unknown>) => void;
|
|
129
|
+
// Periodic queue → live-coordinator reconcile loop handle. Set during
|
|
130
|
+
// initDaemonComponents, stopped during shutdownDaemonComponents. Drives the
|
|
131
|
+
// single-model (queue + polling) delivery: drains the pending-events queue
|
|
132
|
+
// on a fixed interval and injects into live CLI coordinators when idle.
|
|
133
|
+
meshReconcileLoop?: { stop(): void };
|
|
134
|
+
// Canonical status/daemon identity (e.g. `standalone_<machineId>` /
|
|
135
|
+
// `daemon_<machineId>`). This is the SAME id the MCP layer stamps as a
|
|
136
|
+
// worker's meshCoordinatorDaemonId (ctx.localDaemonId, sourced from
|
|
137
|
+
// getStatus().status.instanceId), so the reconcile loop MUST drain with it —
|
|
138
|
+
// draining with bare loadConfig().machineId never matches a unicast event
|
|
139
|
+
// stamped with the prefixed status id. Absent → reconcile falls back to
|
|
140
|
+
// machineId only.
|
|
141
|
+
statusInstanceId?: string;
|
|
109
142
|
}
|
|
110
143
|
|
|
111
144
|
export interface DaemonDevSupportOptions {
|
|
@@ -129,8 +162,16 @@ export interface DaemonDevSupportOptions {
|
|
|
129
162
|
* 8. Start instance ticking
|
|
130
163
|
*/
|
|
131
164
|
export async function initDaemonComponents(config: DaemonInitConfig): Promise<DaemonComponents> {
|
|
165
|
+
// 0. Process-level hardening (must run before any provider script is loaded).
|
|
166
|
+
// Freezes built-in prototypes (Object/Array/Function/String/Number/Boolean/Promise)
|
|
167
|
+
// and shadows process.exit/kill/abort/binding/dlopen so provider-script callers
|
|
168
|
+
// throw instead of killing the daemon. See ./process-hardening.ts for details.
|
|
169
|
+
applyProcessHardening();
|
|
170
|
+
installProviderProcessShim();
|
|
171
|
+
|
|
132
172
|
// 1. Global log interceptor
|
|
133
173
|
installGlobalInterceptor();
|
|
174
|
+
loadMeshCoordinatorRegistry();
|
|
134
175
|
|
|
135
176
|
// 2. ProviderLoader (provider source mode from config.json)
|
|
136
177
|
const appConfig = loadConfig();
|
|
@@ -140,18 +181,15 @@ export async function initDaemonComponents(config: DaemonInitConfig): Promise<Da
|
|
|
140
181
|
logFn: config.providerLogFn,
|
|
141
182
|
sourceMode: providerSourceMode,
|
|
142
183
|
userDir: appConfig.providerDir,
|
|
184
|
+
registryUrl: appConfig.registryUrl,
|
|
185
|
+
providerTarballUrl: appConfig.providerTarballUrl,
|
|
143
186
|
});
|
|
144
187
|
|
|
145
|
-
//
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
} catch (e: any) {
|
|
151
|
-
LOG.warn('Provider', `⚠ Failed to fetch providers: ${e?.message}`);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
188
|
+
// Boot-time auto-sync is intentionally disabled. The user picks which
|
|
189
|
+
// providers to install via the dashboard onboarding / Providers tab; the
|
|
190
|
+
// daemon ships empty and only contains what the user explicitly installs.
|
|
191
|
+
// Manual sync is still available via the install / check_provider_updates
|
|
192
|
+
// commands (and the REST endpoint at /api/v1/providers/updates).
|
|
155
193
|
providerLoader.loadAll();
|
|
156
194
|
providerLoader.registerToDetector();
|
|
157
195
|
|
|
@@ -267,7 +305,19 @@ export async function initDaemonComponents(config: DaemonInitConfig): Promise<Da
|
|
|
267
305
|
providerLoader,
|
|
268
306
|
instanceManager,
|
|
269
307
|
sessionRegistry,
|
|
270
|
-
gitCommandServices: createDefaultGitCommandServices(
|
|
308
|
+
gitCommandServices: createDefaultGitCommandServices({
|
|
309
|
+
// T7: fold this daemon's cached provider versions + build version onto the
|
|
310
|
+
// git_status envelope so the mesh coordinator self-heals each node's
|
|
311
|
+
// providerVersions. Non-blocking: reads a TTL cache, lazily refreshed.
|
|
312
|
+
getReporterProviderVersions: () => {
|
|
313
|
+
const providerVersions = getCachedProviderVersions(providerLoader);
|
|
314
|
+
const daemonBuildVersion = getDaemonBuildInfo().version;
|
|
315
|
+
return {
|
|
316
|
+
...(Object.keys(providerVersions).length > 0 ? { providerVersions } : {}),
|
|
317
|
+
...(daemonBuildVersion && daemonBuildVersion !== 'unknown' ? { daemonBuildVersion } : {}),
|
|
318
|
+
};
|
|
319
|
+
},
|
|
320
|
+
}),
|
|
271
321
|
onProviderSettingChanged: async (providerType) => {
|
|
272
322
|
await refreshProviderAvailability(providerType);
|
|
273
323
|
config.onStatusChange?.();
|
|
@@ -304,11 +354,13 @@ export async function initDaemonComponents(config: DaemonInitConfig): Promise<Da
|
|
|
304
354
|
},
|
|
305
355
|
onIdeConnected: () => poller?.start(),
|
|
306
356
|
onStatusChange: config.onStatusChange,
|
|
357
|
+
onMeshStateChange: config.onMeshStateChange,
|
|
307
358
|
onPostChatCommand: config.onPostChatCommand,
|
|
308
359
|
sessionHostControl: config.sessionHostControl,
|
|
309
360
|
statusInstanceId: config.statusInstanceId,
|
|
310
361
|
statusVersion: config.statusVersion,
|
|
311
362
|
getMeshPeerConnectionStatus: config.getMeshPeerConnectionStatus,
|
|
363
|
+
dispatchMeshCommand: config.dispatchMeshCommand,
|
|
312
364
|
getCdpLogFn: config.getCdpLogFn || ((ideType: string) => LOG.forComponent(`CDP:${ideType}`).asLogFn()),
|
|
313
365
|
});
|
|
314
366
|
|
|
@@ -325,7 +377,7 @@ export async function initDaemonComponents(config: DaemonInitConfig): Promise<Da
|
|
|
325
377
|
// 10. Start instance ticking
|
|
326
378
|
instanceManager.startTicking(config.tickIntervalMs ?? 5_000);
|
|
327
379
|
|
|
328
|
-
const components = {
|
|
380
|
+
const components: DaemonComponents = {
|
|
329
381
|
providerLoader,
|
|
330
382
|
instanceManager,
|
|
331
383
|
cliManager,
|
|
@@ -339,10 +391,22 @@ export async function initDaemonComponents(config: DaemonInitConfig): Promise<Da
|
|
|
339
391
|
detectedIdes: detectedIdesRef,
|
|
340
392
|
refreshProviderAvailability,
|
|
341
393
|
dispatchMeshCommand: config.dispatchMeshCommand,
|
|
394
|
+
getMeshPeerConnectionStatus: config.getMeshPeerConnectionStatus,
|
|
395
|
+
onMeshCoordinatorEventForwarded: config.onMeshCoordinatorEventForwarded,
|
|
396
|
+
statusInstanceId: config.statusInstanceId,
|
|
342
397
|
};
|
|
343
398
|
|
|
344
|
-
// 11. Setup Mesh Event Forwarding
|
|
399
|
+
// 11. Setup Mesh Event Forwarding (queue persistence) + periodic reconcile loop.
|
|
400
|
+
// injectMeshSystemMessage now ONLY persists events to the pending-events queue;
|
|
401
|
+
// the reconcile loop drains that queue on a fixed interval and injects into live
|
|
402
|
+
// CLI coordinators when idle (and, in cloud mode, pulls remote worker daemons'
|
|
403
|
+
// queues over P2P). This is the single-model (queue + polling) replacement for the
|
|
404
|
+
// old spontaneous-forward push paths.
|
|
345
405
|
setupMeshEventForwarding(components);
|
|
406
|
+
components.meshReconcileLoop = setupMeshReconcileLoop(components);
|
|
407
|
+
|
|
408
|
+
// 12. Resume any refine jobs that were interrupted by a previous daemon restart.
|
|
409
|
+
setImmediate(() => void router.resumePendingRefineJobsOnStartup());
|
|
346
410
|
|
|
347
411
|
return components;
|
|
348
412
|
}
|
|
@@ -384,11 +448,13 @@ export async function shutdownDaemonComponents(components: DaemonComponents): Pr
|
|
|
384
448
|
const {
|
|
385
449
|
poller, cdpInitializer, agentStreamManager,
|
|
386
450
|
cliManager, instanceManager, cdpManagers,
|
|
451
|
+
meshReconcileLoop,
|
|
387
452
|
} = components;
|
|
388
453
|
|
|
389
454
|
// 1. Stop timers
|
|
390
455
|
poller.stop();
|
|
391
456
|
cdpInitializer.stop();
|
|
457
|
+
try { meshReconcileLoop?.stop(); } catch { /* noop */ }
|
|
392
458
|
|
|
393
459
|
// 2. Dispose agent stream
|
|
394
460
|
try {
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-level hardening — boot-time mitigations against provider scripts.
|
|
3
|
+
*
|
|
4
|
+
* Provider scripts run in-process (see providers/sdk/v1/sandbox/README-design.ts).
|
|
5
|
+
* The require() whitelist (sandbox/require-whitelist.ts) blocks the obvious
|
|
6
|
+
* attack surfaces (no `child_process.exec`, no `fs.writeFile`, no `net`, etc.)
|
|
7
|
+
* but a malicious or buggy script can still:
|
|
8
|
+
*
|
|
9
|
+
* 1. Pollute Object.prototype to influence the daemon's downstream consumers
|
|
10
|
+
* (e.g. `Object.prototype.toString = () => '...'` makes every untagged
|
|
11
|
+
* object stringify to that value across the whole process).
|
|
12
|
+
* 2. Mutate Array/Function/String prototypes for similar effect.
|
|
13
|
+
* 3. Call `process.exit()` / `process.kill()` to kill the daemon.
|
|
14
|
+
*
|
|
15
|
+
* Sandbox isolation (isolated-vm) is the proper fix but has a real perf cost
|
|
16
|
+
* and a real marshalling-complexity cost. As a cheaper layer we just freeze
|
|
17
|
+
* the built-in prototypes at boot, which is irreversible and catches every
|
|
18
|
+
* prototype-pollution variant for the lifetime of the process.
|
|
19
|
+
*
|
|
20
|
+
* `applyProcessHardening()` is idempotent — calling it twice is a no-op the
|
|
21
|
+
* second time. The function intentionally swallows any "cannot redefine
|
|
22
|
+
* property" errors that would arise if some upstream code already froze
|
|
23
|
+
* the same prototype: the post-condition (prototype is frozen) is satisfied
|
|
24
|
+
* either way.
|
|
25
|
+
*
|
|
26
|
+
* Trade-offs:
|
|
27
|
+
* - Read-only access to prototype methods (`Object.prototype.hasOwnProperty.call`,
|
|
28
|
+
* `Array.prototype.slice.call`, etc.) is unaffected — only writes throw.
|
|
29
|
+
* - Some older npm libraries patch Array.prototype or Function.prototype at
|
|
30
|
+
* import time. If a daemon-core dep does this, the import will throw. The
|
|
31
|
+
* daemon-core vitest suite is the canonical regression check for this.
|
|
32
|
+
* - We deliberately do NOT freeze RegExp.prototype, Error.prototype, Map/Set
|
|
33
|
+
* prototypes, or Date.prototype because at least one of those tends to be
|
|
34
|
+
* mutated by mainstream test/runtime libs and the value of freezing them
|
|
35
|
+
* is low (no useful prototype-pollution attack surface).
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
let _hardened = false;
|
|
39
|
+
|
|
40
|
+
/** Prototypes that get frozen at boot. */
|
|
41
|
+
const HARDENED_PROTOS: Array<{ name: string; proto: object }> = [
|
|
42
|
+
{ name: 'Object', proto: Object.prototype },
|
|
43
|
+
{ name: 'Array', proto: Array.prototype },
|
|
44
|
+
{ name: 'Function', proto: Function.prototype },
|
|
45
|
+
{ name: 'String', proto: String.prototype },
|
|
46
|
+
{ name: 'Number', proto: Number.prototype },
|
|
47
|
+
{ name: 'Boolean', proto: Boolean.prototype },
|
|
48
|
+
{ name: 'Promise', proto: Promise.prototype },
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Freeze the canonical built-in prototypes so provider scripts (and anything
|
|
53
|
+
* else running in this process) cannot mutate them. Idempotent.
|
|
54
|
+
*
|
|
55
|
+
* Returns the list of prototype names that were newly frozen — primarily for
|
|
56
|
+
* tests / observability. Already-frozen prototypes are not re-reported.
|
|
57
|
+
*/
|
|
58
|
+
export function applyProcessHardening(): string[] {
|
|
59
|
+
if (_hardened) return [];
|
|
60
|
+
_hardened = true;
|
|
61
|
+
|
|
62
|
+
const newlyFrozen: string[] = [];
|
|
63
|
+
for (const entry of HARDENED_PROTOS) {
|
|
64
|
+
if (Object.isFrozen(entry.proto)) continue;
|
|
65
|
+
try {
|
|
66
|
+
Object.freeze(entry.proto);
|
|
67
|
+
newlyFrozen.push(entry.name);
|
|
68
|
+
} catch {
|
|
69
|
+
// Some host/runtime combinations refuse to freeze a built-in
|
|
70
|
+
// prototype (e.g. it has a non-configurable accessor). We treat
|
|
71
|
+
// this as best-effort — log nothing here (logger not guaranteed
|
|
72
|
+
// to be initialized this early) and move on. Subsequent reads
|
|
73
|
+
// of `Object.isFrozen(proto)` will reveal the gap.
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return newlyFrozen;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** For tests only — clears the internal "already hardened" flag. The
|
|
80
|
+
* prototypes themselves cannot be un-frozen, so this is mostly useful for
|
|
81
|
+
* testing the idempotency guard. */
|
|
82
|
+
export function _resetProcessHardeningForTest(): void {
|
|
83
|
+
_hardened = false;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** For tests only — peek at the hardened state. */
|
|
87
|
+
export function _isProcessHardened(): boolean {
|
|
88
|
+
return _hardened;
|
|
89
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon build stamp — single runtime source for "which commit is this running
|
|
3
|
+
* daemon built from?".
|
|
4
|
+
*
|
|
5
|
+
* The values are injected at BUILD time via tsup `define` (esbuild global
|
|
6
|
+
* replacement). Every build config that bundles daemon-core into a shippable
|
|
7
|
+
* daemon (daemon-core's own dist, daemon-standalone, daemon-cloud) replaces
|
|
8
|
+
* these `__DAEMON_BUILD_*` identifiers with the literal git commit/version that
|
|
9
|
+
* was current when the bundle was produced. See:
|
|
10
|
+
* - oss/packages/daemon-core/tsup.config.ts (standalone consumes this dist)
|
|
11
|
+
* - packages/daemon-cloud/tsup.config.ts (re-bundles daemon-core from source)
|
|
12
|
+
*
|
|
13
|
+
* If a bundle is produced WITHOUT the define (e.g. running src directly through
|
|
14
|
+
* tsx in dev, or a build env without git), the identifiers stay undefined and
|
|
15
|
+
* we fall back to `"unknown"` — never a ReferenceError, never a build failure.
|
|
16
|
+
*
|
|
17
|
+
* IMPORTANT (live-reflection caveat): a fresh local `daemon-core dist` rebuild +
|
|
18
|
+
* daemon restart is NOT enough to make a *cloud* daemon report a new commit —
|
|
19
|
+
* daemon-cloud ships its own re-bundle of daemon-core, so the build stamp only
|
|
20
|
+
* advances after the cloud daemon is rebuilt/redeployed and restarted. This is
|
|
21
|
+
* precisely the gap `mesh_status`'s `staleDaemonBuild` warning exists to surface.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
// These are replaced at build time by tsup `define`. `typeof` guards keep this
|
|
25
|
+
// safe when the define is absent (the identifiers are simply not declared).
|
|
26
|
+
declare const __DAEMON_BUILD_COMMIT__: string | undefined;
|
|
27
|
+
declare const __DAEMON_BUILD_COMMIT_SHORT__: string | undefined;
|
|
28
|
+
declare const __DAEMON_BUILD_VERSION__: string | undefined;
|
|
29
|
+
declare const __DAEMON_BUILD_AT__: string | undefined;
|
|
30
|
+
|
|
31
|
+
export interface DaemonBuildInfo {
|
|
32
|
+
/** Full 40-char git commit the daemon bundle was built from, or 'unknown'. */
|
|
33
|
+
commit: string;
|
|
34
|
+
/** Short (7-char) form of the same commit, or 'unknown'. */
|
|
35
|
+
commitShort: string;
|
|
36
|
+
/** package.json version baked in at build time, or 'unknown'. */
|
|
37
|
+
version: string;
|
|
38
|
+
/** ISO build timestamp if the build config injected one. */
|
|
39
|
+
builtAt?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function readInjected(value: string | undefined): string | undefined {
|
|
43
|
+
if (typeof value !== 'string') return undefined;
|
|
44
|
+
const trimmed = value.trim();
|
|
45
|
+
if (!trimmed || trimmed === 'unknown') return undefined;
|
|
46
|
+
return trimmed;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
let cached: DaemonBuildInfo | undefined;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Resolve the build stamp baked into the running daemon bundle. Pure read of
|
|
53
|
+
* build-time constants — no I/O, safe to call from any runtime path. Cached.
|
|
54
|
+
*/
|
|
55
|
+
export function getDaemonBuildInfo(): DaemonBuildInfo {
|
|
56
|
+
if (cached) return cached;
|
|
57
|
+
|
|
58
|
+
const commit =
|
|
59
|
+
readInjected(typeof __DAEMON_BUILD_COMMIT__ !== 'undefined' ? __DAEMON_BUILD_COMMIT__ : undefined)
|
|
60
|
+
?? 'unknown';
|
|
61
|
+
const commitShort =
|
|
62
|
+
readInjected(typeof __DAEMON_BUILD_COMMIT_SHORT__ !== 'undefined' ? __DAEMON_BUILD_COMMIT_SHORT__ : undefined)
|
|
63
|
+
?? (commit !== 'unknown' ? commit.slice(0, 7) : 'unknown');
|
|
64
|
+
const version =
|
|
65
|
+
readInjected(typeof __DAEMON_BUILD_VERSION__ !== 'undefined' ? __DAEMON_BUILD_VERSION__ : undefined)
|
|
66
|
+
// Fall back to the runtime-injected package version env used elsewhere.
|
|
67
|
+
?? readInjected(typeof process !== 'undefined' ? process.env?.ADHDEV_PKG_VERSION : undefined)
|
|
68
|
+
?? 'unknown';
|
|
69
|
+
const builtAt = readInjected(typeof __DAEMON_BUILD_AT__ !== 'undefined' ? __DAEMON_BUILD_AT__ : undefined);
|
|
70
|
+
|
|
71
|
+
cached = builtAt ? { commit, commitShort, version, builtAt } : { commit, commitShort, version };
|
|
72
|
+
return cached;
|
|
73
|
+
}
|