@adhdev/daemon-core 0.9.82-rc.43 → 0.9.82-rc.430
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 +200 -0
- package/dist/cli-adapters/provider-cli-adapter.d.ts +126 -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 +7 -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 +15 -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 +60 -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 +29 -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 +142 -0
- package/dist/commands/mesh-coordinator.d.ts +85 -1
- package/dist/commands/router.d.ts +276 -2
- package/dist/commands/upgrade-helper.d.ts +41 -1
- package/dist/config/chat-history.d.ts +9 -0
- package/dist/config/config.d.ts +5 -0
- package/dist/config/mesh-config.d.ts +100 -1
- package/dist/config/mesh-json-config.d.ts +199 -0
- package/dist/config/repo-settings.d.ts +77 -0
- package/dist/daemon/dev-server.d.ts +0 -2
- 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 +11 -1
- 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 +57 -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 +64 -14
- package/dist/index.js +49391 -19228
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48574 -18570
- 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/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 +164 -0
- package/dist/mesh/coordinator-prompt.d.ts +89 -0
- package/dist/mesh/coordinator-registry.d.ts +59 -0
- package/dist/mesh/mesh-active-work.d.ts +174 -0
- package/dist/mesh/mesh-clone-grace.d.ts +8 -0
- package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
- package/dist/mesh/mesh-delivery-policy.d.ts +131 -0
- package/dist/mesh/mesh-event-classify.d.ts +5 -0
- package/dist/mesh/mesh-event-forwarding.d.ts +41 -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 +69 -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 +9 -0
- package/dist/mesh/mesh-init.d.ts +86 -0
- package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
- package/dist/mesh/mesh-ledger.d.ts +77 -1
- package/dist/mesh/mesh-magi-status.d.ts +63 -0
- package/dist/mesh/mesh-missions.d.ts +189 -0
- package/dist/mesh/mesh-node-identity.d.ts +289 -0
- package/dist/mesh/mesh-queue-assignment.d.ts +113 -0
- package/dist/mesh/mesh-reconcile-loop.d.ts +65 -0
- package/dist/mesh/mesh-refine-batch.d.ts +68 -0
- package/dist/mesh/mesh-refine-gates.d.ts +428 -0
- package/dist/mesh/mesh-refine-status.d.ts +62 -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 +450 -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 +30 -0
- package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
- package/dist/mesh/mesh-work-queue.d.ts +290 -5
- package/dist/mesh/preview-freshness.d.ts +18 -0
- package/dist/mesh/refine-config.d.ts +216 -0
- package/dist/mesh/worktree-bootstrap-config.d.ts +145 -0
- package/dist/providers/acp-provider-instance.d.ts +5 -0
- package/dist/providers/approval-utils.d.ts +20 -0
- package/dist/providers/chat-message-normalization.d.ts +31 -1
- package/dist/providers/cli-provider-instance.d.ts +221 -3
- package/dist/providers/contracts.d.ts +139 -6
- package/dist/providers/external-sources.d.ts +71 -0
- package/dist/providers/manual-attendance.d.ts +63 -0
- package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -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 +27 -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 +29 -0
- package/dist/providers/provider-instance.d.ts +23 -1
- package/dist/providers/provider-loader.d.ts +26 -4
- 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 +91 -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 +422 -0
- package/dist/providers/spec/fsm-evaluator.d.ts +76 -0
- package/dist/providers/spec/fsm-loader.d.ts +14 -0
- package/dist/providers/spec/fsm-types.d.ts +174 -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 +222 -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 +501 -13
- package/dist/runtime-defaults.d.ts +2 -0
- package/dist/sessions/registry.d.ts +6 -0
- package/dist/shared-types-extra.d.ts +2 -4
- package/dist/shared-types.d.ts +59 -2
- 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 +26 -0
- package/dist/system/hash.d.ts +8 -0
- package/dist/system/load-better-sqlite3.d.ts +21 -0
- package/dist/types.d.ts +5 -0
- package/package.json +7 -3
- package/src/agent-stream/poller.ts +2 -3
- package/src/agent-stream/provider-adapter.ts +1 -1
- package/src/boot/daemon-lifecycle.ts +63 -12
- 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 +1246 -0
- package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
- package/src/cli-adapters/provider-cli-adapter.ts +914 -1144
- 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/WINDOWS-UPGRADE-LOCK-FAILURE.md +198 -0
- package/src/commands/chat-commands-debug-bundle.ts +398 -0
- package/src/commands/chat-commands-read.ts +2327 -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.ts +544 -26
- package/src/commands/handler.ts +841 -2
- package/src/commands/high-family/index.ts +28 -0
- package/src/commands/high-family/mesh-coordinator-launch.ts +678 -0
- package/src/commands/high-family/mesh-events.ts +80 -0
- package/src/commands/high-family/mesh-status.ts +710 -0
- package/src/commands/high-family/types.ts +76 -0
- package/src/commands/low-family/coordinator-prompt.ts +72 -0
- package/src/commands/low-family/daemon-lifecycle.ts +107 -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 +274 -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 +238 -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 +1066 -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 +143 -0
- package/src/commands/mesh-coordinator.ts +334 -124
- package/src/commands/router.ts +2711 -3254
- package/src/commands/stream-commands.ts +8 -0
- package/src/commands/upgrade-helper.ts +310 -45
- package/src/config/chat-history.ts +483 -24
- package/src/config/config.ts +12 -0
- package/src/config/mesh-config.ts +495 -22
- package/src/config/mesh-json-config.ts +376 -0
- package/src/config/recent-activity.ts +8 -2
- package/src/config/repo-settings.ts +111 -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 +28 -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 +59 -15
- package/src/git/git-diff.ts +81 -11
- package/src/git/git-executor.ts +12 -0
- package/src/git/git-status.ts +767 -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 +194 -12
- 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/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 +338 -0
- package/src/mesh/coordinator-prompt.ts +381 -33
- package/src/mesh/coordinator-registry.ts +121 -0
- package/src/mesh/mesh-active-work.ts +645 -0
- package/src/mesh/mesh-clone-grace.ts +68 -0
- package/src/mesh/mesh-coordinator-config.ts +97 -0
- package/src/mesh/mesh-delivery-policy.ts +315 -0
- package/src/mesh/mesh-event-classify.ts +51 -0
- package/src/mesh/mesh-event-forwarding.ts +1888 -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 +656 -0
- package/src/mesh/mesh-events-stale.ts +389 -0
- package/src/mesh/mesh-events-utils.ts +443 -0
- package/src/mesh/mesh-events.ts +33 -1035
- package/src/mesh/mesh-fast-forward.ts +843 -0
- package/src/mesh/mesh-host-ownership.ts +73 -0
- package/src/mesh/mesh-init.ts +260 -0
- package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
- package/src/mesh/mesh-ledger.ts +656 -102
- package/src/mesh/mesh-magi-status.ts +223 -0
- package/src/mesh/mesh-missions.ts +449 -0
- package/src/mesh/mesh-node-identity.ts +1887 -0
- package/src/mesh/mesh-queue-assignment.ts +1918 -0
- package/src/mesh/mesh-reconcile-loop.ts +1780 -0
- package/src/mesh/mesh-refine-batch.ts +205 -0
- package/src/mesh/mesh-refine-gates.ts +1673 -0
- package/src/mesh/mesh-refine-status.ts +231 -0
- package/src/mesh/mesh-review-inbox.ts +307 -0
- package/src/mesh/mesh-routing.ts +291 -0
- package/src/mesh/mesh-runtime-store.ts +1853 -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 +185 -0
- package/src/mesh/mesh-warmup-deadline.ts +152 -0
- package/src/mesh/mesh-work-queue.ts +1243 -141
- package/src/mesh/preview-freshness.ts +118 -0
- package/src/mesh/refine-config.ts +423 -0
- package/src/mesh/worktree-bootstrap-config.ts +450 -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 +57 -5
- package/src/providers/chat-message-normalization.ts +92 -4
- package/src/providers/cli-provider-instance.ts +1933 -104
- package/src/providers/contracts.d.ts +55 -0
- package/src/providers/contracts.ts +150 -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 +85 -0
- package/src/providers/native-history/antigravity-cli-transcript.ts +643 -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 +339 -0
- package/src/providers/native-history/hermes-cli-transcript.ts +230 -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 +19 -1
- package/src/providers/provider-loader.ts +668 -50
- package/src/providers/provider-schema.ts +87 -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 +250 -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 +504 -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 +235 -0
- package/src/providers/spec/cli-adapter.ts +1056 -0
- package/src/providers/spec/evaluator.ts +407 -0
- package/src/providers/spec/fsm-driver.ts +1410 -0
- package/src/providers/spec/fsm-evaluator.ts +272 -0
- package/src/providers/spec/fsm-loader.ts +120 -0
- package/src/providers/spec/fsm-types.ts +273 -0
- package/src/providers/spec/native-history-executor.ts +1128 -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 +262 -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 +740 -14
- package/src/runtime-defaults.ts +39 -0
- package/src/sessions/registry.ts +6 -0
- package/src/shared-types-extra.ts +2 -4
- package/src/shared-types.d.ts +8 -0
- package/src/shared-types.ts +64 -1
- package/src/status/builders.ts +26 -6
- package/src/status/normalize.ts +2 -0
- package/src/status/reporter.ts +19 -1
- package/src/status/snapshot.ts +95 -26
- 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 +5 -0
- package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
- package/dist/mesh/mesh-sync.d.ts +0 -53
- package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
- package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
- package/src/mesh/mesh-sync.ts +0 -111
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mesh node-identity & git-freshness helpers
|
|
3
|
+
*
|
|
4
|
+
* Extracted from commands/router.ts (behavior-preserving move). Contains:
|
|
5
|
+
* - daemon-id / machine-id / hostname normalization + canonicalization
|
|
6
|
+
* - inline-mesh node identity reconciliation and transient-state handling
|
|
7
|
+
* - git-status normalization, branch-convergence, and freshness/staleness derivation
|
|
8
|
+
* - the direct git-probe cache and remote git-status probe machinery
|
|
9
|
+
*
|
|
10
|
+
* router.ts re-exports every public symbol from here so existing import paths
|
|
11
|
+
* (e.g. `from '.../commands/router.js'`) keep working.
|
|
12
|
+
*/
|
|
13
|
+
import type { ProviderLoader } from '../providers/provider-loader.js';
|
|
14
|
+
import { awaitWithWarmupDeadline } from '../mesh/mesh-warmup-deadline.js';
|
|
15
|
+
export declare function readProviderPriorityFromPolicy(policy: unknown): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Normalize a providerRoles array (RepoMeshNodePolicy.providerRoles) from raw
|
|
18
|
+
* tool args. Each entry binds a providerType to an optional `maxParallel` cap.
|
|
19
|
+
* Entries without a usable providerType are dropped; the last entry wins on
|
|
20
|
+
* duplicate providerType. Returns [] when no valid entries — callers then omit
|
|
21
|
+
* the field entirely (full backward compat). Routing is governed by required_tags;
|
|
22
|
+
* any legacy `role` field on the input is ignored.
|
|
23
|
+
*/
|
|
24
|
+
export declare function normalizeProviderRoles(value: unknown): Array<{
|
|
25
|
+
providerType: string;
|
|
26
|
+
maxParallel?: number;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function readObjectRecord(value: unknown): Record<string, any>;
|
|
29
|
+
export declare function readStringValue(...values: unknown[]): string | undefined;
|
|
30
|
+
export declare function readBooleanValue(...values: unknown[]): boolean | undefined;
|
|
31
|
+
export declare function summarizeRepoMeshStatusDebug(status: any): Record<string, unknown>;
|
|
32
|
+
export declare function logRepoMeshStatusDebug(event: string, fields: Record<string, unknown>): void;
|
|
33
|
+
export declare function buildMeshNodeDisplayLabel(node: Record<string, unknown>, nodeId: string, providerPriority: string[]): string;
|
|
34
|
+
export declare function readMeshNodeMachineId(node: Record<string, unknown>): string | undefined;
|
|
35
|
+
export declare function readMeshNodeDaemonId(node: Record<string, unknown>): string | undefined;
|
|
36
|
+
export declare function readMeshNodeHostname(node: Record<string, unknown>): string | undefined;
|
|
37
|
+
export declare function buildMeshNodeMachineIdentity(node: Record<string, unknown>, opts: {
|
|
38
|
+
localMachineId?: string;
|
|
39
|
+
localDaemonId?: string;
|
|
40
|
+
coordinatorHostname?: string;
|
|
41
|
+
isSelfNode?: boolean;
|
|
42
|
+
}): Record<string, unknown>;
|
|
43
|
+
export declare function buildInlineMeshTransitGitStatus(node: any): Record<string, unknown> | undefined;
|
|
44
|
+
export declare function shouldRefreshStalePendingAggregate(snapshot: any, options?: {
|
|
45
|
+
requireDirectPeerTruth?: boolean;
|
|
46
|
+
}): boolean;
|
|
47
|
+
export declare function buildLivePeerGitConnection(connection: Record<string, unknown>, timestamp?: string): Record<string, unknown>;
|
|
48
|
+
export declare function recordInlineMeshDirectGitTruth(node: any, git: Record<string, unknown>, source: 'selected_coordinator_local_git' | 'selected_coordinator_mesh_p2p_git'): {
|
|
49
|
+
reporterPlatform: string | null;
|
|
50
|
+
reporterArch: string | null;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Persist the live self-reported platform/arch onto the local meshes.json node
|
|
54
|
+
* record so capability-tag os=/arch= self-heals across coordinator restarts.
|
|
55
|
+
*
|
|
56
|
+
* The in-memory stamp done by recordInlineMeshDirectGitTruth lives on the
|
|
57
|
+
* mesh_status assembly object and is discarded after the response; only a
|
|
58
|
+
* `local_config` mesh has a backing meshes.json node to write through to. Inline
|
|
59
|
+
* cache/bootstrap meshes have no local node to update, so we no-op for them.
|
|
60
|
+
* Fire-and-forget (same pattern as the worktreeBootstrap writer) — a persistence
|
|
61
|
+
* failure must never block the status response.
|
|
62
|
+
*/
|
|
63
|
+
export declare function persistNodeReporterPlatform(meshSource: 'inline_cache' | 'inline_bootstrap' | 'local_config', mesh: any, nodeId: string | undefined, reporter: {
|
|
64
|
+
reporterPlatform: string | null;
|
|
65
|
+
reporterArch: string | null;
|
|
66
|
+
}): void;
|
|
67
|
+
export declare function inlineMeshCarriesTransientNodeTruth(inlineMesh: any): boolean;
|
|
68
|
+
export declare function readInlineMeshNodeId(node: any): string;
|
|
69
|
+
export declare function isDeadLocalWorktreeNode(node: any): boolean;
|
|
70
|
+
export declare function foldMeshNodeIdentityToCanonical(node: any): any;
|
|
71
|
+
export declare function normalizeInlineMeshNodeIdentity(inlineMesh: any): any;
|
|
72
|
+
export declare function sanitizeInlineMesh(inlineMesh: any): any;
|
|
73
|
+
export declare function reconcileInlineMeshCache(cached: any, incoming: any): any;
|
|
74
|
+
export declare function deriveMeshNodeHealthFromGit(git: Record<string, unknown> | null | undefined): 'online' | 'dirty' | 'degraded';
|
|
75
|
+
export declare function applyInlineMeshBranchConvergence(mesh: any, node: any, status: Record<string, unknown>): void;
|
|
76
|
+
export declare function summarizeInlineMeshBranchConvergence(nodes: Array<Record<string, unknown>>): Record<string, unknown>;
|
|
77
|
+
export declare function readCachedInlineMeshActiveSessions(node: any): string[];
|
|
78
|
+
/**
|
|
79
|
+
* Wider session-ownership scan used ONLY by resolveRemoteMeshSessionOwnerDaemonId: collect
|
|
80
|
+
* EVERY session id a mesh node currently hosts. readCachedInlineMeshActiveSessions above only
|
|
81
|
+
* surfaces the node's single primary session (cachedStatus.activeSession) — other consumers
|
|
82
|
+
* depend on that one-session semantics, so it is left untouched. A worker hosting more than one
|
|
83
|
+
* session exposes its non-primary sessions only through the plural live-session arrays the
|
|
84
|
+
* coordinator carries: status.activeSessions / activeSessionDetails (built from live records on
|
|
85
|
+
* the aggregate snapshot, see get_mesh_status), or a worker's merged session report. A
|
|
86
|
+
* controlbar/modal command (invoke_provider_script / resolve_action / set_mode / …) targeting a
|
|
87
|
+
* non-primary remote session resolves its owner daemon only when those plural shapes are scanned
|
|
88
|
+
* too. Mirrors sessionStatusFromNodes' shape tolerance (mesh-active-work.ts): plural arrays of
|
|
89
|
+
* string ids OR objects keyed by id/sessionId/session_id/runtimeSessionId/instanceId, on both
|
|
90
|
+
* camelCase and snake_case, at the node root and under cachedStatus / lastProbe.
|
|
91
|
+
*/
|
|
92
|
+
export declare function collectMeshNodeHostedSessionIds(node: any): Set<string>;
|
|
93
|
+
/**
|
|
94
|
+
* Resolve the owning-node attribution for a mesh node record so a coordinator can
|
|
95
|
+
* stamp the TRUE owner onto a synthetic session entry instead of letting the
|
|
96
|
+
* dashboard fall back to the coordinator's own daemonId. Returns whichever of the
|
|
97
|
+
* owning node's `daemonId` / display machine name could be read from the node's
|
|
98
|
+
* (possibly multi-serialization-path) shape; both may be undefined for a node that
|
|
99
|
+
* never carried machine identity.
|
|
100
|
+
*/
|
|
101
|
+
export declare function resolveMeshNodeAttribution(node: unknown): {
|
|
102
|
+
daemonId?: string;
|
|
103
|
+
machineName?: string;
|
|
104
|
+
};
|
|
105
|
+
export declare function readCachedInlineMeshActiveSessionDetails(node: any): Array<Record<string, unknown>>;
|
|
106
|
+
/**
|
|
107
|
+
* Transient per-node marker the mesh_status render loop stamps onto a node
|
|
108
|
+
* `status` at the two sites that obtain git truth from a FRESH probe this call
|
|
109
|
+
* (a successful local `getGitRepoStatus`, or a successful P2P `git_status`
|
|
110
|
+
* round-trip). finalizeMeshNodeStatus consumes and deletes it. Held/standing
|
|
111
|
+
* truth (node.lastGit / cachedStatus / inline transit) is deliberately NOT
|
|
112
|
+
* stamped — its absence is exactly how the freshness marker tells "live" apart
|
|
113
|
+
* from "cached". Internal only; never serialized in the response.
|
|
114
|
+
*/
|
|
115
|
+
export declare const MESH_NODE_LIVE_TRUTH_MARKER = "__liveTruthProbed";
|
|
116
|
+
/**
|
|
117
|
+
* Build the additive per-node `dataFreshness` marker. This NEVER mutates any
|
|
118
|
+
* existing field — it only adds an explicit, machine-readable answer to the
|
|
119
|
+
* question the legacy fields blurred: is this node's data live (just probed),
|
|
120
|
+
* cached (held truth, maybe old), or absent because the peer was unreachable?
|
|
121
|
+
*
|
|
122
|
+
* The crucial separation: an UNREACHABLE peer (P2P probe failed / not connected)
|
|
123
|
+
* is no longer indistinguishable from an idle/EMPTY node. Both used to render as
|
|
124
|
+
* `health:'unknown'` with no sessions; now `dataFreshness.dataSource` and
|
|
125
|
+
* `reachable` tell them apart so a coordinator never reads a dead peer as "online
|
|
126
|
+
* but doing nothing".
|
|
127
|
+
*/
|
|
128
|
+
export declare function buildMeshNodeDataFreshness(args: {
|
|
129
|
+
status: Record<string, unknown>;
|
|
130
|
+
node?: any;
|
|
131
|
+
isSelfNode: boolean;
|
|
132
|
+
daemonId?: string;
|
|
133
|
+
/** True when this node was stamped with a fresh live git probe this call. */
|
|
134
|
+
liveTruthProbed: boolean;
|
|
135
|
+
/** True when direct-peer-truth accounting classified this node unavailable. */
|
|
136
|
+
directTruthUnavailable?: boolean;
|
|
137
|
+
now?: () => number;
|
|
138
|
+
}): Record<string, unknown>;
|
|
139
|
+
/**
|
|
140
|
+
* Canonical live-probe → freshness adapter. The coordinator-facing mesh_status
|
|
141
|
+
* (mcp-server `meshStatus`) builds each node entry from a SINGLE fresh git_status
|
|
142
|
+
* probe that either returns (live truth) or throws (peer unreachable). It used to
|
|
143
|
+
* hand-reconstruct the freshness INPUT inline — a synthetic `{ git, connection }`
|
|
144
|
+
* status plus the directTruthUnavailable/liveTruthProbed wiring — which is exactly
|
|
145
|
+
* how a field added to `buildMeshNodeDataFreshness`'s input contract ends up "wired
|
|
146
|
+
* on the daemon surface, null on the coordinator surface" (the rc.371
|
|
147
|
+
* null-everywhere regression). Routing every live-probe surface through this one
|
|
148
|
+
* adapter keeps the marker derivation canonical: there is a SINGLE place that turns
|
|
149
|
+
* a probe outcome into freshness args, so the two mesh_status surfaces cannot drift.
|
|
150
|
+
*
|
|
151
|
+
* `liveTruthProbed` true → the probe returned (live/self truth); false → it threw,
|
|
152
|
+
* so a configured peer is unreachable while an unconfigured node (no daemonId) falls
|
|
153
|
+
* through to the classifier's `unconfigured` branch.
|
|
154
|
+
*/
|
|
155
|
+
export declare function buildMeshNodeProbeFreshness(args: {
|
|
156
|
+
/** The git snapshot this probe stamped on the node entry (entry.git). */
|
|
157
|
+
git: unknown;
|
|
158
|
+
/** True when the fresh git_status probe RETURNED (live truth); false when it threw. */
|
|
159
|
+
liveTruthProbed: boolean;
|
|
160
|
+
isSelfNode: boolean;
|
|
161
|
+
/** The node's resolved daemonId; absent → unconfigured node. */
|
|
162
|
+
daemonId?: string;
|
|
163
|
+
/** The mesh node record, for held-git fallback when the probe did not return live. */
|
|
164
|
+
node?: any;
|
|
165
|
+
now?: () => number;
|
|
166
|
+
}): Record<string, unknown>;
|
|
167
|
+
export declare function finalizeMeshNodeStatus(args: {
|
|
168
|
+
status: Record<string, unknown>;
|
|
169
|
+
node: any;
|
|
170
|
+
daemonId?: string;
|
|
171
|
+
isSelfNode: boolean;
|
|
172
|
+
/** True when direct-peer-truth accounting classified this node unavailable. */
|
|
173
|
+
directTruthUnavailable?: boolean;
|
|
174
|
+
}): void;
|
|
175
|
+
export declare const MESH_DIRECT_PROBE_TIMEOUT_MS: number;
|
|
176
|
+
export declare const MESH_DIRECT_PROBE_RETRY_TIMEOUT_MS: number;
|
|
177
|
+
export declare const MESH_DIRECT_PROBE_CONNECT_TIMEOUT_MS: number;
|
|
178
|
+
export declare const MESH_DIRECT_PROBE_REUSE_MS: number;
|
|
179
|
+
/**
|
|
180
|
+
* De-duplicates and rate-limits per-peer git_status probes so a single mesh
|
|
181
|
+
* refresh — or a burst of refreshes from the dashboard auto-retry loop — cannot
|
|
182
|
+
* launch a storm of concurrent/back-to-back `refreshUpstream:true` commands to
|
|
183
|
+
* the same slow peer.
|
|
184
|
+
*
|
|
185
|
+
* Two gates, both keyed by `daemonId::workspace`:
|
|
186
|
+
* - In-flight dedup: a second probe for a key with a probe already running
|
|
187
|
+
* shares (awaits) the in-flight promise instead of issuing a second command.
|
|
188
|
+
* - Recently-probed reuse: a successful probe younger than `reuseMs` is reused
|
|
189
|
+
* verbatim instead of issuing a fresh probe. Failures are NOT cached (so a
|
|
190
|
+
* transient timeout doesn't pin a peer to "no truth" for the whole window).
|
|
191
|
+
*
|
|
192
|
+
* Lives on the router instance so the gate spans separate mesh_status calls,
|
|
193
|
+
* which is exactly where the refresh storm happens.
|
|
194
|
+
*/
|
|
195
|
+
export declare class MeshGitProbeCache {
|
|
196
|
+
private readonly reuseMs;
|
|
197
|
+
private readonly now;
|
|
198
|
+
private inflight;
|
|
199
|
+
private recent;
|
|
200
|
+
constructor(reuseMs: number, now?: () => number);
|
|
201
|
+
private key;
|
|
202
|
+
/**
|
|
203
|
+
* Run `probe` for this peer, but reuse a fresh recent result or an in-flight
|
|
204
|
+
* probe for the same key when one is available. `probe` is only invoked when
|
|
205
|
+
* neither gate is satisfied.
|
|
206
|
+
*/
|
|
207
|
+
probe(daemonId: string, workspace: string, probe: () => Promise<Record<string, unknown> | null>): Promise<Record<string, unknown> | null>;
|
|
208
|
+
}
|
|
209
|
+
export { awaitWithWarmupDeadline };
|
|
210
|
+
/**
|
|
211
|
+
* Probe a remote peer's git_status with a bounded retry budget, but only while
|
|
212
|
+
* the peer is reported `connected`. A single slow (often TURN-relayed) peer can
|
|
213
|
+
* exceed one probe window; retrying — with the connection re-checked before each
|
|
214
|
+
* attempt so we abandon a peer that dropped — recovers it without blocking the
|
|
215
|
+
* mesh forever. Shared by the bootstrap hydrate path and the per-node render
|
|
216
|
+
* path so both treat a connected-but-slow peer identically.
|
|
217
|
+
*
|
|
218
|
+
* Returns the git status on success, or null if every attempt failed/timed out
|
|
219
|
+
* (caller decides how to classify). `getConnection` is consulted before each
|
|
220
|
+
* attempt; a non-`connected` state short-circuits the retry loop (the very first
|
|
221
|
+
* attempt always runs so a missing connection getter still gets one try).
|
|
222
|
+
*/
|
|
223
|
+
export declare function probeRemoteMeshGitStatusWithRetry(args: {
|
|
224
|
+
dispatchMeshCommand?: (daemonId: string, cmd: string, args: Record<string, unknown>) => Promise<unknown>;
|
|
225
|
+
daemonId: string;
|
|
226
|
+
workspace: string;
|
|
227
|
+
timeoutMs: number;
|
|
228
|
+
/** Per-attempt timeout for retries (attempts > 0); defaults to timeoutMs. */
|
|
229
|
+
retryTimeoutMs?: number;
|
|
230
|
+
/** Cold-open warmup budget per attempt; defaults to MESH_DIRECT_PROBE_CONNECT_TIMEOUT_MS. */
|
|
231
|
+
connectTimeoutMs?: number;
|
|
232
|
+
getConnection?: (daemonId: string) => Record<string, unknown> | null;
|
|
233
|
+
onConnection?: (connection: Record<string, unknown>) => void;
|
|
234
|
+
}): Promise<Record<string, unknown> | null>;
|
|
235
|
+
export declare function hydrateInlineMeshDirectTruth(args: {
|
|
236
|
+
mesh: any;
|
|
237
|
+
meshSource: 'inline_cache' | 'inline_bootstrap' | 'local_config';
|
|
238
|
+
dispatchMeshCommand?: (daemonId: string, cmd: string, args: Record<string, unknown>) => Promise<unknown>;
|
|
239
|
+
getMeshPeerConnectionStatus?: (daemonId: string) => Record<string, unknown> | null;
|
|
240
|
+
statusInstanceId?: string;
|
|
241
|
+
localMachineId?: string;
|
|
242
|
+
probeRemotePeers: boolean;
|
|
243
|
+
probeCache?: MeshGitProbeCache;
|
|
244
|
+
}): Promise<{
|
|
245
|
+
directEvidenceCount: number;
|
|
246
|
+
localConfirmedCount: number;
|
|
247
|
+
peerAttemptedCount: number;
|
|
248
|
+
peerConfirmedCount: number;
|
|
249
|
+
standingEvidenceCount: number;
|
|
250
|
+
unavailableNodeIds: string[];
|
|
251
|
+
deadNodeIds: string[];
|
|
252
|
+
}>;
|
|
253
|
+
export declare function summarizeMeshSessionRecord(record: any): Record<string, unknown>;
|
|
254
|
+
export declare function readLiveMeshNodeWorkspace(args: {
|
|
255
|
+
meshId: string;
|
|
256
|
+
nodeId: string;
|
|
257
|
+
liveSessionRecords: any[];
|
|
258
|
+
allowCoordinatorSession?: boolean;
|
|
259
|
+
}): string;
|
|
260
|
+
export declare function collectLiveMeshSessionRecords(args: {
|
|
261
|
+
meshId: string;
|
|
262
|
+
node: any;
|
|
263
|
+
nodeId: string;
|
|
264
|
+
liveSessionRecords: any[];
|
|
265
|
+
allowCoordinatorSession?: boolean;
|
|
266
|
+
}): any[];
|
|
267
|
+
export declare function buildHistoricalMeshSessions(args: {
|
|
268
|
+
meshId: string;
|
|
269
|
+
nodes: any[];
|
|
270
|
+
liveSessionRecords: any[];
|
|
271
|
+
}): {
|
|
272
|
+
count: number;
|
|
273
|
+
sessions: Record<string, unknown>[];
|
|
274
|
+
instruction: string;
|
|
275
|
+
} | undefined;
|
|
276
|
+
export declare function applyCachedInlineMeshNodeStatus(status: Record<string, unknown>, node: any, options?: {
|
|
277
|
+
skipGit?: boolean;
|
|
278
|
+
skipError?: boolean;
|
|
279
|
+
skipHealth?: boolean;
|
|
280
|
+
}): boolean;
|
|
281
|
+
export declare function resolveProviderTypeFromPriority(args: {
|
|
282
|
+
nodeId: string;
|
|
283
|
+
providerPriority: string[];
|
|
284
|
+
providerLoader: ProviderLoader;
|
|
285
|
+
onStatusChange?: () => void;
|
|
286
|
+
}): Promise<{
|
|
287
|
+
providerType?: string;
|
|
288
|
+
error?: string;
|
|
289
|
+
}>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { DaemonComponents } from '../boot/daemon-lifecycle.js';
|
|
2
|
+
import type { RepoMeshSchedulingStrategy } from '../repo-mesh-types.js';
|
|
3
|
+
export declare function __resetIdleAutoFastForwardForTests(): void;
|
|
4
|
+
export declare function getMeshWithCache(components: DaemonComponents, meshId: string): any | undefined;
|
|
5
|
+
export declare function tryAssignQueueTask(components: DaemonComponents, meshId: string, nodeId: string, sessionId: string, providerType: string): boolean;
|
|
6
|
+
/** Active assignments that hold the one-active-per-node / global-parallel invariant
|
|
7
|
+
* (everything except read-only diagnoses, which run unbounded by the write cap). */
|
|
8
|
+
export declare function activeWriteAssignedCount(meshId: string): number;
|
|
9
|
+
/** Active read-only assignments, for the read-only safety cap. */
|
|
10
|
+
export declare function activeReadonlyAssignedCount(meshId: string): number;
|
|
11
|
+
/**
|
|
12
|
+
* Order eligible nodes for assignment per the mesh scheduling pipeline:
|
|
13
|
+
* PRIORITY (schedulingPriority desc) → TIE-BREAK (strategy).
|
|
14
|
+
*
|
|
15
|
+
* The caller has already applied the TAG hard-filter and is responsible for the
|
|
16
|
+
* MAX-ALLOC capacity gate (the per-node launch/claim checks). This function only
|
|
17
|
+
* decides the *preference order* among nodes that are otherwise eligible.
|
|
18
|
+
*
|
|
19
|
+
* - 'first_eligible' (default): returns the input order verbatim and does NOT touch
|
|
20
|
+
* the round-robin cursor — byte-for-byte the pre-feature behavior.
|
|
21
|
+
* - 'priority_only': schedulingPriority desc, then input order (load ignored).
|
|
22
|
+
* - 'least_loaded' (the user-facing 'spread' mode): schedulingPriority desc, then
|
|
23
|
+
* active load asc, then — among nodes still tied at (priority, load) — the input
|
|
24
|
+
* order is rotated by a per-mesh cursor that advances once per pass. The rotation
|
|
25
|
+
* tie-break is ALWAYS on for least_loaded so a single 'spread' mode subsumes the
|
|
26
|
+
* former separate 'round_robin' strategy (two equal-load nodes still alternate
|
|
27
|
+
* fairly across passes instead of the lower index always winning).
|
|
28
|
+
* - 'round_robin': retained as an escape-hatch alias; behaves identically to
|
|
29
|
+
* 'least_loaded' now that least_loaded carries the rotation.
|
|
30
|
+
*
|
|
31
|
+
* `nodes` carries the original config/array index so the tie-break can fall back to
|
|
32
|
+
* deterministic input order. `bumpCursor` advances the round-robin cursor exactly
|
|
33
|
+
* once per scheduling pass (consulted for both 'least_loaded' and 'round_robin').
|
|
34
|
+
*/
|
|
35
|
+
interface RankableNode {
|
|
36
|
+
nodeId: string;
|
|
37
|
+
node: any;
|
|
38
|
+
index: number;
|
|
39
|
+
}
|
|
40
|
+
/** Test-only: resolve a mesh's effective scheduling strategy through the full
|
|
41
|
+
* LOCAL-WINS path (`.adhdev/mesh.json` distribution → strategy, else stored policy).
|
|
42
|
+
* Exposed so the repo-file overlay wiring can be exercised by a direct call. */
|
|
43
|
+
export declare function __resolveSchedulingStrategyForTests(mesh: any): RepoMeshSchedulingStrategy;
|
|
44
|
+
/** Test-only: the pure node-ordering stage (PRIORITY → TIE-BREAK). Exposed so the
|
|
45
|
+
* scheduling pipeline can be unit-tested without standing up live CLI sessions. */
|
|
46
|
+
export declare function __orderEligibleNodesForTests(meshId: string, strategy: RepoMeshSchedulingStrategy, nodes: RankableNode[], opts?: {
|
|
47
|
+
bumpCursor?: boolean;
|
|
48
|
+
}): RankableNode[];
|
|
49
|
+
export declare function sessionHasActiveAssignment(meshId: string, sessionId: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* CANON-IDENTITY single-flight hardening (restart-safe, observation-based).
|
|
52
|
+
*
|
|
53
|
+
* The in-memory single-flight Set (mesh-task-inflight) is process-local and is LOST on a
|
|
54
|
+
* daemon restart — after a restart, a task still being generated by a live local worker is
|
|
55
|
+
* no longer marked in-flight, so requeueTask's Set check passes and would re-open the task
|
|
56
|
+
* for a duplicate second dispatch. This recovers the "still generating" signal from
|
|
57
|
+
* observable runtime state instead of the in-memory mark: a session is actively generating
|
|
58
|
+
* when its live local CLI instance reports an active (generating/streaming/…) status — the
|
|
59
|
+
* same predicate the dispatch active-work gate uses (sessionStateLooksActive).
|
|
60
|
+
*
|
|
61
|
+
* Local-only by design: it inspects THIS daemon's instanceManager. The primary cross-process
|
|
62
|
+
* fix (IpcTransport requeue delegating to the mesh-host daemon) keeps begin (dispatch) and
|
|
63
|
+
* check (requeue guard) co-located so the in-memory mark stays authoritative in the common
|
|
64
|
+
* path; this is the restart-safety net for sessions hosted on this daemon. A genuinely
|
|
65
|
+
* dead/stale session is not generating → returns false → the requeue proceeds as before.
|
|
66
|
+
*/
|
|
67
|
+
export declare function isSessionActivelyGenerating(components: DaemonComponents, sessionId: string): boolean;
|
|
68
|
+
export interface MeshQueueTriggerResult {
|
|
69
|
+
success: true;
|
|
70
|
+
meshId: string;
|
|
71
|
+
pendingBefore: number;
|
|
72
|
+
assignedBefore: number;
|
|
73
|
+
pendingAfter: number;
|
|
74
|
+
assignedAfter: number;
|
|
75
|
+
claimed: boolean;
|
|
76
|
+
newlyAssignedTasks: Array<{
|
|
77
|
+
id: string;
|
|
78
|
+
nodeId?: string;
|
|
79
|
+
sessionId?: string;
|
|
80
|
+
}>;
|
|
81
|
+
localIdleSessionsChecked: number;
|
|
82
|
+
remoteIdleSessionsChecked: number;
|
|
83
|
+
skippedSessions: Array<{
|
|
84
|
+
nodeId?: string;
|
|
85
|
+
sessionId?: string;
|
|
86
|
+
reason: string;
|
|
87
|
+
status?: string;
|
|
88
|
+
}>;
|
|
89
|
+
autoLaunchStarted: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* True when a worker session is already on its way to claim a still-pending task —
|
|
92
|
+
* either launched this tick (autoLaunchStarted) or launched on a prior tick and still
|
|
93
|
+
* booting/awaiting-claim. Callers MUST treat this as "wait, do not launch another
|
|
94
|
+
* session": a second launch double-edits the worktree. Mutually informative with
|
|
95
|
+
* `noIdleMeshSessionAvailable`, which is suppressed whenever this is true.
|
|
96
|
+
*/
|
|
97
|
+
autoLaunchPending?: boolean;
|
|
98
|
+
noIdleMeshSessionAvailable?: boolean;
|
|
99
|
+
}
|
|
100
|
+
export declare function triggerMeshQueue(components: DaemonComponents, meshId: string): Promise<MeshQueueTriggerResult>;
|
|
101
|
+
export declare function maybeAutoFastForwardIdleNode(components: DaemonComponents, args: {
|
|
102
|
+
meshId: string;
|
|
103
|
+
nodeId: string;
|
|
104
|
+
sessionId?: string;
|
|
105
|
+
providerType?: string;
|
|
106
|
+
}): Promise<void>;
|
|
107
|
+
export declare function runIdleMaintenanceThenAssignQueue(components: DaemonComponents, args: {
|
|
108
|
+
meshId: string;
|
|
109
|
+
nodeId: string;
|
|
110
|
+
sessionId: string;
|
|
111
|
+
providerType: string;
|
|
112
|
+
}): void;
|
|
113
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { DaemonComponents } from '../boot/daemon-lifecycle.js';
|
|
2
|
+
export declare function __resetReconcileInFlightSynthDebounceForTests(): void;
|
|
3
|
+
/**
|
|
4
|
+
* DRAIN-WITHOUT-INJECT guard. Classify, for a mesh on THIS daemon, whether a
|
|
5
|
+
* queue-drain caller (the MCP `get_pending_mesh_events` poll) may safely consume
|
|
6
|
+
* pending coordinator events — i.e. whether there is a surface that will actually
|
|
7
|
+
* deliver them.
|
|
8
|
+
*
|
|
9
|
+
* Root cause being guarded: `get_pending_mesh_events` marks rows drained=1
|
|
10
|
+
* atomically and unconditionally. When the live CLI coordinator for the mesh is
|
|
11
|
+
* GENERATING (or modal-parked), the reconcile loop correctly HOLDS its terminal
|
|
12
|
+
* events (drained=0) for the coordinator's next idle tick — but a concurrent MCP
|
|
13
|
+
* poll draining the SAME queue consumes those held rows into a tool result that
|
|
14
|
+
* the busy coordinator never surfaces as a turn, so the completion is lost
|
|
15
|
+
* forever (drained=1, never re-queued). The reconcile loop is the authoritative
|
|
16
|
+
* delivery path for a live CLI coordinator; the MCP poll must defer to it.
|
|
17
|
+
*
|
|
18
|
+
* Returns:
|
|
19
|
+
* - hasLiveCliCoordinator: a CLI session with meshCoordinatorFor === meshId
|
|
20
|
+
* exists on this daemon (the reconcile loop owns its delivery).
|
|
21
|
+
* - deliverableNow: there is an IDLE live CLI coordinator (reconcile would
|
|
22
|
+
* full-drain into it) — draining now is safe and equivalent.
|
|
23
|
+
* - holdForReconcile: a live CLI coordinator exists but is non-idle
|
|
24
|
+
* (generating / modal-parked). The MCP poll MUST NOT drain; the reconcile
|
|
25
|
+
* loop holds the events undrained and injects them on the next idle tick.
|
|
26
|
+
*
|
|
27
|
+
* A mesh with NO live CLI coordinator on this daemon is a pure stdio MCP / LLM
|
|
28
|
+
* coordinator: the MCP tool result IS the only surface, so the poll legitimately
|
|
29
|
+
* drains (holdForReconcile=false). No regression to that path.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveCoordinatorDrainDeliverability(components: Pick<DaemonComponents, 'instanceManager'>, meshId: string): {
|
|
32
|
+
hasLiveCliCoordinator: boolean;
|
|
33
|
+
deliverableNow: boolean;
|
|
34
|
+
holdForReconcile: boolean;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* DRAIN-WITHOUT-INJECT guard for the `get_pending_mesh_events` daemon handler.
|
|
38
|
+
*
|
|
39
|
+
* Decides whether an incoming pending-events DRAIN must be held (return nothing,
|
|
40
|
+
* leave rows drained=0) because the only surface for those events is a LOCAL live
|
|
41
|
+
* CLI coordinator that is currently busy (generating / modal-parked) — in which
|
|
42
|
+
* case the reconcile loop owns delivery on the coordinator's next idle tick, and
|
|
43
|
+
* the poll draining them now would lose them.
|
|
44
|
+
*
|
|
45
|
+
* The hold applies ONLY when BOTH:
|
|
46
|
+
* 1) a live CLI coordinator for this mesh on THIS daemon is non-idle, AND
|
|
47
|
+
* 2) the drain is targeted at THIS daemon (the requested coordinatorDaemonId is
|
|
48
|
+
* empty/broadcast, or matches one of this daemon's id forms).
|
|
49
|
+
*
|
|
50
|
+
* A REMOTE coordinator pulling our worker's events passes its own (remote)
|
|
51
|
+
* coordinatorDaemonId — condition (2) is false — so the drain proceeds and the
|
|
52
|
+
* remote pull is never blocked by our local coordinator's busy state. A pure
|
|
53
|
+
* stdio MCP coordinator (no live CLI session) never satisfies (1), so its tool
|
|
54
|
+
* result remains the surface and the drain proceeds. No regression to either.
|
|
55
|
+
*/
|
|
56
|
+
export declare function shouldHoldPendingDrainForBusyLocalCoordinator(components: Pick<DaemonComponents, 'instanceManager'> & {
|
|
57
|
+
statusInstanceId?: string;
|
|
58
|
+
}, meshId: string, requestedCoordinatorDaemonId?: string | null): boolean;
|
|
59
|
+
export declare function runMeshReconcileTick(components: DaemonComponents): Promise<void>;
|
|
60
|
+
export declare function __resetUnresolvedForwardRejectionCountsForTests(): void;
|
|
61
|
+
interface ReconcileLoopHandle {
|
|
62
|
+
stop(): void;
|
|
63
|
+
}
|
|
64
|
+
export declare function setupMeshReconcileLoop(components: DaemonComponents): ReconcileLoopHandle;
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Change-area analysis for one worktree node, used to order sibling nodes for
|
|
3
|
+
* batch refinement so that nodes least likely to conflict merge first.
|
|
4
|
+
*
|
|
5
|
+
* The heuristic is deliberately git-only and side-effect-free: it inspects the
|
|
6
|
+
* commits the node's branch adds on top of the base (`base..branch`) and records
|
|
7
|
+
* - whether any submodule gitlink path is touched (high-conflict signal: the
|
|
8
|
+
* batch must rebase later siblings onto the advanced submodule main), and
|
|
9
|
+
* - the set of changed top-level paths (so siblings touching disjoint trees can
|
|
10
|
+
* be ordered ahead of ones that overlap).
|
|
11
|
+
*/
|
|
12
|
+
export interface MeshRefineBatchNodeChangeArea {
|
|
13
|
+
nodeId: string;
|
|
14
|
+
workspace: string;
|
|
15
|
+
branch: string;
|
|
16
|
+
/** Top-level path segments changed by the branch vs. base (e.g. 'oss', 'packages'). */
|
|
17
|
+
changedTopLevelPaths: string[];
|
|
18
|
+
/** Full changed file list (bounded) for overlap detection. */
|
|
19
|
+
changedFiles: string[];
|
|
20
|
+
/** Submodule gitlink paths touched by the branch (subset of changedTopLevelPaths). */
|
|
21
|
+
touchedSubmodulePaths: string[];
|
|
22
|
+
/** True when the branch touches at least one submodule gitlink. */
|
|
23
|
+
touchesSubmodule: boolean;
|
|
24
|
+
/** Number of commits the branch is ahead of base; 0 means nothing to merge. */
|
|
25
|
+
aheadCount: number;
|
|
26
|
+
/** Non-fatal analysis error (e.g. base/branch unresolved); ordering falls back to neutral. */
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface MeshRefineBatchOrderingResult {
|
|
30
|
+
/** Node IDs in the order they should be refined. */
|
|
31
|
+
order: string[];
|
|
32
|
+
/** Per-node change areas, keyed by node id, for plan transparency. */
|
|
33
|
+
changeAreas: Record<string, MeshRefineBatchNodeChangeArea>;
|
|
34
|
+
/** Human-readable explanation of why the order was chosen. */
|
|
35
|
+
rationale: string[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Analyze one worktree node's change area against its merge base.
|
|
39
|
+
*
|
|
40
|
+
* @param baseRef ref that the node will merge into (e.g. 'origin/main' or a SHA)
|
|
41
|
+
* @param branchRef the node's branch tip
|
|
42
|
+
* @param diffCwd repo to run the diff in (the worktree itself is authoritative for
|
|
43
|
+
* `branch` resolution, but the diff `base..branch` is symmetric, so
|
|
44
|
+
* the worktree cwd works for both refs once base is a reachable SHA).
|
|
45
|
+
*/
|
|
46
|
+
export declare function analyzeMeshRefineNodeChangeArea(args: {
|
|
47
|
+
nodeId: string;
|
|
48
|
+
workspace: string;
|
|
49
|
+
branch: string;
|
|
50
|
+
baseRef: string;
|
|
51
|
+
branchRef: string;
|
|
52
|
+
diffCwd: string;
|
|
53
|
+
submodulePaths: Set<string>;
|
|
54
|
+
}): Promise<MeshRefineBatchNodeChangeArea>;
|
|
55
|
+
/**
|
|
56
|
+
* Order nodes for batch refinement to minimize cross-sibling conflicts.
|
|
57
|
+
*
|
|
58
|
+
* Heuristic (deterministic, stable):
|
|
59
|
+
* 1. Nodes that do NOT touch any submodule come first — they cannot advance the
|
|
60
|
+
* submodule main, so they never force a later submodule rebase.
|
|
61
|
+
* 2. Within each group, fewer touched top-level paths first (smaller blast radius).
|
|
62
|
+
* 3. Tie-break by node id for determinism.
|
|
63
|
+
*
|
|
64
|
+
* Submodule-touching siblings are intrinsically serial: each one that merges
|
|
65
|
+
* advances oss main, so the next must rebase. Ordering them last keeps the
|
|
66
|
+
* non-submodule merges (which never need a submodule rebase) clean and up front.
|
|
67
|
+
*/
|
|
68
|
+
export declare function orderMeshRefineBatchNodes(changeAreas: MeshRefineBatchNodeChangeArea[]): MeshRefineBatchOrderingResult;
|