@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
|
@@ -12,6 +12,7 @@ import * as os from 'os';
|
|
|
12
12
|
import * as path from 'path';
|
|
13
13
|
import { existsSync } from 'fs';
|
|
14
14
|
import type { ProviderLoader } from '../providers/provider-loader.js';
|
|
15
|
+
import { findBinary } from '../cli-adapters/provider-cli-shared.js';
|
|
15
16
|
|
|
16
17
|
export interface CLIInfo {
|
|
17
18
|
id: string;
|
|
@@ -57,6 +58,29 @@ function resolveCommandPath(command: string): string | null {
|
|
|
57
58
|
return null;
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Resolve a CLI command to an absolute path for install detection.
|
|
63
|
+
* Order: explicit path → PATH (`where`/`which`) → well-known global-bin dirs
|
|
64
|
+
* (e.g. %APPDATA%\npm) via the shared spawn-layer findBinary.
|
|
65
|
+
*
|
|
66
|
+
* The final step keeps detection consistent with the spawn layer: findBinary
|
|
67
|
+
* already searches npm's default Windows prefix at %APPDATA%\npm (where
|
|
68
|
+
* `npm i -g @openai/codex` lands), so a CLI installed under an npm prefix that
|
|
69
|
+
* is NOT on the daemon's inherited PATH is detected as installed instead of
|
|
70
|
+
* being blocked at the launch gate. findBinary returns a bare "<name>.cmd"
|
|
71
|
+
* (non-absolute) when nothing is found, so we only accept an absolute path
|
|
72
|
+
* that actually exists.
|
|
73
|
+
*/
|
|
74
|
+
async function resolveDetectionPath(command: string, whichCmd: string): Promise<string | null> {
|
|
75
|
+
const explicitPath = resolveCommandPath(command);
|
|
76
|
+
if (explicitPath) return explicitPath;
|
|
77
|
+
const whichResult = await execAsync(`${whichCmd} ${shellQuote(command)}`);
|
|
78
|
+
if (whichResult) return whichResult.split('\n')[0];
|
|
79
|
+
const resolved = findBinary(command);
|
|
80
|
+
if (path.isAbsolute(resolved) && existsSync(resolved)) return resolved;
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
|
|
60
84
|
/** Run a shell command with timeout, returning stdout or null on failure */
|
|
61
85
|
function execAsync(cmd: string, timeoutMs = 5000): Promise<string | null> {
|
|
62
86
|
return new Promise((resolve) => {
|
|
@@ -97,11 +121,8 @@ export async function detectCLIs(
|
|
|
97
121
|
const results = await Promise.all(
|
|
98
122
|
cliList.map(async (cli): Promise<CLIInfo> => {
|
|
99
123
|
try {
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
if (!pathResult) return { ...cli, installed: false };
|
|
103
|
-
|
|
104
|
-
const firstPath = explicitPath || pathResult.split('\n')[0];
|
|
124
|
+
const firstPath = await resolveDetectionPath(cli.command, whichCmd);
|
|
125
|
+
if (!firstPath) return { ...cli, installed: false };
|
|
105
126
|
|
|
106
127
|
// Get version (parallel with other checks)
|
|
107
128
|
let version: string | undefined;
|
|
@@ -148,10 +169,8 @@ export async function detectCLI(
|
|
|
148
169
|
const platform = os.platform();
|
|
149
170
|
const whichCmd = platform === 'win32' ? 'where' : 'which';
|
|
150
171
|
try {
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
if (!pathResult) return null;
|
|
154
|
-
const firstPath = explicitPath || pathResult.split('\n')[0];
|
|
172
|
+
const firstPath = await resolveDetectionPath(target.command, whichCmd);
|
|
173
|
+
if (!firstPath) return null;
|
|
155
174
|
let version: string | undefined;
|
|
156
175
|
if (options?.includeVersion !== false) {
|
|
157
176
|
const versionCommands = [
|
|
@@ -181,3 +200,69 @@ export async function detectCLI(
|
|
|
181
200
|
const all = await detectCLIs(providerLoader, options);
|
|
182
201
|
return all.find((c) => c.id === resolvedId && c.installed) || null;
|
|
183
202
|
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Fold a detected CLIInfo[] into the `{ providerId: version }` map surfaced as a
|
|
206
|
+
* node's providerVersions (see RepoMeshNodeCapabilities.providerVersions). Only
|
|
207
|
+
* installed providers that produced a parseable version string are included, so a
|
|
208
|
+
* missing entry means "not installed or version unknown" — never a fabricated value.
|
|
209
|
+
* Pure/deterministic: the same detection input always yields the same map, which is
|
|
210
|
+
* what the git_status envelope carries and the mesh_status skew check compares.
|
|
211
|
+
*/
|
|
212
|
+
export function buildProviderVersions(detected: CLIInfo[]): Record<string, string> {
|
|
213
|
+
const out: Record<string, string> = {};
|
|
214
|
+
for (const cli of detected) {
|
|
215
|
+
if (!cli.installed) continue;
|
|
216
|
+
const version = typeof cli.version === 'string' ? cli.version.trim() : '';
|
|
217
|
+
if (!version) continue;
|
|
218
|
+
out[cli.id] = version;
|
|
219
|
+
}
|
|
220
|
+
return out;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// ─── Cached provider-versions snapshot (mesh visibility, T7) ────────────────
|
|
224
|
+
//
|
|
225
|
+
// A node's providerVersions rides the git_status envelope, which a coordinator
|
|
226
|
+
// probes on every graph refresh. Running the full `--version` exec fan-out on
|
|
227
|
+
// each probe would be far too costly (one spawn per provider per probe), so the
|
|
228
|
+
// snapshot is memoized with a TTL and refreshed lazily in the background: a probe
|
|
229
|
+
// reads the current cache immediately (empty until the first refresh completes)
|
|
230
|
+
// and kicks off a refresh only when the cache is stale, never blocking the git
|
|
231
|
+
// response on version detection. Best-effort observability — a cold/empty map
|
|
232
|
+
// simply omits providerVersions from that probe, and the next probe carries it.
|
|
233
|
+
const PROVIDER_VERSIONS_TTL_MS = 5 * 60 * 1000; // 5 min — provider installs change rarely
|
|
234
|
+
let cachedProviderVersions: Record<string, string> = {};
|
|
235
|
+
let cachedProviderVersionsAt = 0;
|
|
236
|
+
let providerVersionsRefreshInFlight: Promise<void> | null = null;
|
|
237
|
+
|
|
238
|
+
function refreshProviderVersionsSnapshot(providerLoader?: ProviderLoader): Promise<void> {
|
|
239
|
+
if (providerVersionsRefreshInFlight) return providerVersionsRefreshInFlight;
|
|
240
|
+
providerVersionsRefreshInFlight = (async () => {
|
|
241
|
+
try {
|
|
242
|
+
const detected = await detectCLIs(providerLoader, { includeVersion: true });
|
|
243
|
+
cachedProviderVersions = buildProviderVersions(detected);
|
|
244
|
+
cachedProviderVersionsAt = Date.now();
|
|
245
|
+
} catch {
|
|
246
|
+
// Best-effort: keep the last good snapshot on failure.
|
|
247
|
+
} finally {
|
|
248
|
+
providerVersionsRefreshInFlight = null;
|
|
249
|
+
}
|
|
250
|
+
})();
|
|
251
|
+
return providerVersionsRefreshInFlight;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Return the current cached provider-versions map for this daemon, triggering a
|
|
256
|
+
* lazy background refresh when the snapshot is stale/cold. Never blocks: returns
|
|
257
|
+
* whatever is currently cached (an empty object before the first refresh lands).
|
|
258
|
+
* This is the source the git_status envelope reads to self-report a node's
|
|
259
|
+
* provider versions to the mesh coordinator.
|
|
260
|
+
*/
|
|
261
|
+
export function getCachedProviderVersions(providerLoader?: ProviderLoader): Record<string, string> {
|
|
262
|
+
const stale = Date.now() - cachedProviderVersionsAt > PROVIDER_VERSIONS_TTL_MS;
|
|
263
|
+
if (stale) {
|
|
264
|
+
// Fire-and-forget; the current (possibly empty) snapshot is returned now.
|
|
265
|
+
void refreshProviderVersionsSnapshot(providerLoader);
|
|
266
|
+
}
|
|
267
|
+
return { ...cachedProviderVersions };
|
|
268
|
+
}
|
|
@@ -7,11 +7,14 @@
|
|
|
7
7
|
* Migrated from @adhdev/core — this is now the single source of truth.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { exec } from 'child_process';
|
|
11
|
+
import { promisify } from 'util';
|
|
12
|
+
const execAsync = promisify(exec);
|
|
13
|
+
import { existsSync, statSync } from 'fs';
|
|
12
14
|
import { platform, homedir } from 'os';
|
|
13
15
|
import * as path from 'path';
|
|
14
16
|
import type { ProviderLoader } from '../providers/provider-loader.js';
|
|
17
|
+
import { isKnownWin32GuiExe, readWin32IdeVersionFromDisk } from './win32-ide-version.js';
|
|
15
18
|
|
|
16
19
|
// ─── Types ──────────────────────────────────────
|
|
17
20
|
|
|
@@ -73,25 +76,54 @@ function findCliCommand(command: string): string | null {
|
|
|
73
76
|
const resolved = path.isAbsolute(candidate) ? candidate : path.resolve(candidate);
|
|
74
77
|
return existsSync(resolved) ? resolved : null;
|
|
75
78
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
const isWin = platform() === 'win32';
|
|
80
|
+
const paths = (process.env.PATH || '').split(isWin ? ';' : ':');
|
|
81
|
+
const exes = isWin ? ['.exe', '.cmd', '.bat', ''] : [''];
|
|
82
|
+
for (const p of paths) {
|
|
83
|
+
if (!p) continue;
|
|
84
|
+
for (const ext of exes) {
|
|
85
|
+
const fullPath = path.join(p, trimmed + ext);
|
|
86
|
+
try {
|
|
87
|
+
if (existsSync(fullPath)) {
|
|
88
|
+
const stat = statSync(fullPath);
|
|
89
|
+
if (stat.isFile() && (isWin || (stat.mode & 0o111))) {
|
|
90
|
+
return fullPath;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} catch { }
|
|
94
|
+
}
|
|
84
95
|
}
|
|
96
|
+
return null;
|
|
85
97
|
}
|
|
86
98
|
|
|
87
|
-
|
|
99
|
+
/**
|
|
100
|
+
* Resolve an IDE version on demand (NOT at boot).
|
|
101
|
+
*
|
|
102
|
+
* Order of preference, all spawn-free where possible:
|
|
103
|
+
* 1. win32: read the bundled product.json/package.json next to the exe.
|
|
104
|
+
* 2. Otherwise spawn `<cli> --version` — but ONLY when the binary is not a
|
|
105
|
+
* known GUI executable (the #4 guard), so we never boot an IDE window.
|
|
106
|
+
*
|
|
107
|
+
* `win32ProcessNames` is provider.json `processNames.win32` (type → exe names),
|
|
108
|
+
* used to recognise GUI executables. Callers that have a ProviderLoader can
|
|
109
|
+
* pass `providerLoader.getWinProcessNames()`.
|
|
110
|
+
*/
|
|
111
|
+
export async function getIdeVersion(
|
|
112
|
+
cliCommand: string,
|
|
113
|
+
win32ProcessNames: Record<string, string[]> = {},
|
|
114
|
+
): Promise<string | null> {
|
|
115
|
+
if (platform() === 'win32') {
|
|
116
|
+
const fromDisk = readWin32IdeVersionFromDisk(cliCommand);
|
|
117
|
+
if (fromDisk) return fromDisk;
|
|
118
|
+
// Refuse to spawn a known GUI exe — it would launch the IDE window.
|
|
119
|
+
if (isKnownWin32GuiExe(cliCommand, win32ProcessNames)) return null;
|
|
120
|
+
}
|
|
88
121
|
try {
|
|
89
|
-
const
|
|
122
|
+
const { stdout } = await execAsync(`"${cliCommand}" --version`, {
|
|
90
123
|
encoding: 'utf-8',
|
|
91
124
|
timeout: 10000,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return result.split('\n')[0] || null;
|
|
125
|
+
});
|
|
126
|
+
return stdout.trim().split('\n')[0] || null;
|
|
95
127
|
} catch {
|
|
96
128
|
return null;
|
|
97
129
|
}
|
|
@@ -152,7 +184,14 @@ export async function detectIDEs(providerLoader?: ProviderLoader): Promise<IDEIn
|
|
|
152
184
|
const installed = os === 'darwin'
|
|
153
185
|
? !!(resolvedCli || appPath)
|
|
154
186
|
: !!resolvedCli;
|
|
155
|
-
|
|
187
|
+
// Boot-time IDE detection must NOT spawn `<cli> --version`. On Windows
|
|
188
|
+
// the resolved "CLI" is frequently the GUI Electron exe (case-insensitive
|
|
189
|
+
// FS matches `...\cursor\cursor.exe` against `Cursor.exe`), and running it
|
|
190
|
+
// with `--version` boots the IDE window. `installed` is decided purely by
|
|
191
|
+
// existsSync above, and the dashboard drops `version` anyway — the only
|
|
192
|
+
// real version consumer is provider-loader.resolve() at CDP attach time,
|
|
193
|
+
// which fetches the version lazily. So leave it null here.
|
|
194
|
+
const version: string | null = null;
|
|
156
195
|
|
|
157
196
|
results.push({
|
|
158
197
|
id: def.id,
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADHDev — Windows IDE version detection (execution-free)
|
|
3
|
+
*
|
|
4
|
+
* On Windows the resolved "CLI" for a VS Code fork (Cursor, Antigravity, …)
|
|
5
|
+
* frequently resolves to the GUI Electron executable itself, because the
|
|
6
|
+
* case-insensitive filesystem matches `...\cursor\cursor.exe` against the
|
|
7
|
+
* real `Cursor.exe`. Running `<that exe> --version` boots the GUI instead of
|
|
8
|
+
* printing a version (Electron ignores the unknown flag and opens a window).
|
|
9
|
+
*
|
|
10
|
+
* To learn the version WITHOUT spawning anything, we read the bundled
|
|
11
|
+
* `product.json` / `package.json` that ship next to the executable. VS Code
|
|
12
|
+
* forks embed their version there. This is a pure filesystem read.
|
|
13
|
+
*
|
|
14
|
+
* It also exposes a guard so any remaining `--version` exec path can refuse to
|
|
15
|
+
* spawn a binary that is a known GUI executable for an IDE provider.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as fs from 'fs';
|
|
19
|
+
import * as path from 'path';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Candidate locations for the version manifest relative to the GUI exe dir.
|
|
23
|
+
* VS Code forks place `resources/app/{product,package}.json` next to the exe.
|
|
24
|
+
*/
|
|
25
|
+
function manifestCandidates(exeDir: string): string[] {
|
|
26
|
+
return [
|
|
27
|
+
path.join(exeDir, 'resources', 'app', 'product.json'),
|
|
28
|
+
path.join(exeDir, 'resources', 'app', 'package.json'),
|
|
29
|
+
// Some packagings keep product.json one level up.
|
|
30
|
+
path.join(exeDir, 'product.json'),
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function parseVersionFromManifest(raw: string): string | null {
|
|
35
|
+
try {
|
|
36
|
+
const json = JSON.parse(raw) as Record<string, unknown>;
|
|
37
|
+
// product.json forks expose the IDE's own version here; package.json
|
|
38
|
+
// exposes the upstream VS Code engine version. Prefer the former.
|
|
39
|
+
const candidate = json.version;
|
|
40
|
+
if (typeof candidate === 'string' && candidate.trim()) {
|
|
41
|
+
return candidate.trim();
|
|
42
|
+
}
|
|
43
|
+
} catch {
|
|
44
|
+
/* not valid JSON — ignore */
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Read an IDE version from disk (no process spawn).
|
|
51
|
+
*
|
|
52
|
+
* @param exePath Absolute path to the GUI executable (or any path inside the
|
|
53
|
+
* IDE install dir — we read the manifest relative to its directory).
|
|
54
|
+
* @returns The version string, or null if it could not be determined.
|
|
55
|
+
*/
|
|
56
|
+
export function readWin32IdeVersionFromDisk(exePath: string): string | null {
|
|
57
|
+
if (!exePath) return null;
|
|
58
|
+
let exeDir: string;
|
|
59
|
+
try {
|
|
60
|
+
exeDir = fs.statSync(exePath).isDirectory() ? exePath : path.dirname(exePath);
|
|
61
|
+
} catch {
|
|
62
|
+
exeDir = path.dirname(exePath);
|
|
63
|
+
}
|
|
64
|
+
for (const candidate of manifestCandidates(exeDir)) {
|
|
65
|
+
try {
|
|
66
|
+
if (!fs.existsSync(candidate)) continue;
|
|
67
|
+
const version = parseVersionFromManifest(fs.readFileSync(candidate, 'utf-8'));
|
|
68
|
+
if (version) return version;
|
|
69
|
+
} catch {
|
|
70
|
+
/* ignore unreadable manifest */
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* True when `binPath` resolves to a known GUI executable for some IDE.
|
|
78
|
+
*
|
|
79
|
+
* Used as a safety net: any code path about to run `<bin> --version` must skip
|
|
80
|
+
* the spawn when the binary is actually the GUI Electron exe, since that would
|
|
81
|
+
* launch the IDE window. Comparison is case-insensitive on the basename
|
|
82
|
+
* (Windows filesystem semantics) against every provider's `processNames.win32`.
|
|
83
|
+
*
|
|
84
|
+
* @param binPath Resolved binary path that would be exec'd.
|
|
85
|
+
* @param win32ProcessNames Map of provider type → list of GUI exe names
|
|
86
|
+
* (from provider.json `processNames.win32`, e.g. `["Cursor.exe"]`).
|
|
87
|
+
*/
|
|
88
|
+
export function isKnownWin32GuiExe(
|
|
89
|
+
binPath: string | null | undefined,
|
|
90
|
+
win32ProcessNames: Record<string, string[]>,
|
|
91
|
+
): boolean {
|
|
92
|
+
if (!binPath) return false;
|
|
93
|
+
// Use win32 basename semantics regardless of host OS: this matches Windows
|
|
94
|
+
// paths even when the daemon-core test/CI host is POSIX (where `/` is the
|
|
95
|
+
// only separator). On the real win32 target this is identical to basename().
|
|
96
|
+
const base = path.win32.basename(binPath).toLowerCase();
|
|
97
|
+
if (!base.endsWith('.exe')) return false;
|
|
98
|
+
for (const names of Object.values(win32ProcessNames)) {
|
|
99
|
+
for (const name of names) {
|
|
100
|
+
if (typeof name === 'string' && name.toLowerCase() === base) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|