@adhdev/daemon-core 0.9.82-rc.5 → 0.9.82-rc.500

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.
Files changed (479) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +11 -0
  2. package/dist/boot/process-hardening.d.ts +50 -0
  3. package/dist/build-info.d.ts +37 -0
  4. package/dist/chat/source-machine.d.ts +166 -0
  5. package/dist/chat/source-resolver.d.ts +104 -0
  6. package/dist/chat/subscription-updates.d.ts +1 -0
  7. package/dist/cli-adapter-types.d.ts +85 -2
  8. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  9. package/dist/cli-adapters/cli-state-engine.d.ts +246 -0
  10. package/dist/cli-adapters/provider-cli-adapter.d.ts +139 -64
  11. package/dist/cli-adapters/provider-cli-parse.d.ts +5 -0
  12. package/dist/cli-adapters/provider-cli-runtime.d.ts +34 -0
  13. package/dist/cli-adapters/provider-cli-shared.d.ts +74 -0
  14. package/dist/cli-adapters/pty-write-chunking.d.ts +34 -0
  15. package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
  16. package/dist/cli-adapters/resolve-executable.d.ts +69 -0
  17. package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +6 -3
  18. package/dist/cli-adapters/terminal-backends/types.d.ts +10 -2
  19. package/dist/cli-adapters/terminal-screen.d.ts +4 -11
  20. package/dist/commands/chat-commands-debug-bundle.d.ts +14 -0
  21. package/dist/commands/chat-commands-read.d.ts +23 -0
  22. package/dist/commands/chat-commands-scope.d.ts +39 -0
  23. package/dist/commands/chat-commands-shared.d.ts +33 -0
  24. package/dist/commands/chat-commands-write.d.ts +14 -0
  25. package/dist/commands/chat-commands.d.ts +10 -23
  26. package/dist/commands/cli-manager.d.ts +71 -1
  27. package/dist/commands/handler.d.ts +125 -0
  28. package/dist/commands/high-family/index.d.ts +3 -0
  29. package/dist/commands/high-family/mesh-coordinator-launch.d.ts +2 -0
  30. package/dist/commands/high-family/mesh-events.d.ts +2 -0
  31. package/dist/commands/high-family/mesh-status.d.ts +2 -0
  32. package/dist/commands/high-family/types.d.ts +64 -0
  33. package/dist/commands/low-family/coordinator-prompt.d.ts +9 -0
  34. package/dist/commands/low-family/daemon-lifecycle.d.ts +2 -0
  35. package/dist/commands/low-family/diagnostics.d.ts +2 -0
  36. package/dist/commands/low-family/index.d.ts +3 -0
  37. package/dist/commands/low-family/mesh-ledger.d.ts +10 -0
  38. package/dist/commands/low-family/mesh-node-logs.d.ts +2 -0
  39. package/dist/commands/low-family/notification.d.ts +2 -0
  40. package/dist/commands/low-family/refine-config.d.ts +2 -0
  41. package/dist/commands/low-family/session-host.d.ts +2 -0
  42. package/dist/commands/low-family/spec-providerdev.d.ts +11 -0
  43. package/dist/commands/low-family/status-meta.d.ts +2 -0
  44. package/dist/commands/low-family/types.d.ts +33 -0
  45. package/dist/commands/med-family/cli-agent.d.ts +2 -0
  46. package/dist/commands/med-family/fast-forward.d.ts +2 -0
  47. package/dist/commands/med-family/ide.d.ts +10 -0
  48. package/dist/commands/med-family/index.d.ts +3 -0
  49. package/dist/commands/med-family/mesh-crud.d.ts +48 -0
  50. package/dist/commands/med-family/mesh-host-pairing.d.ts +2 -0
  51. package/dist/commands/med-family/mesh-queue.d.ts +2 -0
  52. package/dist/commands/med-family/mesh-restart.d.ts +2 -0
  53. package/dist/commands/med-family/types.d.ts +152 -0
  54. package/dist/commands/mesh-coordinator.d.ts +85 -1
  55. package/dist/commands/router-aggregate-status.d.ts +24 -0
  56. package/dist/commands/router-mesh-session-owner.d.ts +59 -0
  57. package/dist/commands/router-refine.d.ts +151 -0
  58. package/dist/commands/router-worktree-cleanup.d.ts +133 -0
  59. package/dist/commands/router.d.ts +212 -11
  60. package/dist/commands/upgrade-helper.d.ts +41 -1
  61. package/dist/config/chat-history.d.ts +11 -0
  62. package/dist/config/config.d.ts +19 -0
  63. package/dist/config/mesh-config.d.ts +132 -1
  64. package/dist/config/mesh-json-config.d.ts +199 -0
  65. package/dist/config/registry-resolver.d.ts +54 -0
  66. package/dist/config/repo-settings.d.ts +77 -0
  67. package/dist/config/state-store.d.ts +30 -0
  68. package/dist/daemon/dev-server.d.ts +0 -2
  69. package/dist/detection/cli-detector.d.ts +17 -0
  70. package/dist/detection/ide-detector.d.ts +13 -0
  71. package/dist/detection/win32-ide-version.d.ts +37 -0
  72. package/dist/git/change-impact-config.d.ts +159 -0
  73. package/dist/git/git-commands.d.ts +27 -2
  74. package/dist/git/git-diff.d.ts +6 -0
  75. package/dist/git/git-executor.d.ts +11 -0
  76. package/dist/git/git-status.d.ts +85 -0
  77. package/dist/git/git-types.d.ts +5 -43
  78. package/dist/git/git-worktree.d.ts +71 -1
  79. package/dist/git/index.d.ts +3 -1
  80. package/dist/index.d.ts +74 -17
  81. package/dist/index.js +61082 -24164
  82. package/dist/index.js.map +1 -1
  83. package/dist/index.mjs +57034 -20299
  84. package/dist/index.mjs.map +1 -1
  85. package/dist/installer.d.ts +1 -4
  86. package/dist/ipc/local-ipc-server.d.ts +91 -0
  87. package/dist/launch.d.ts +1 -1
  88. package/dist/logging/async-batch-writer.d.ts +10 -0
  89. package/dist/logging/debug-config.d.ts +16 -0
  90. package/dist/logging/log-redactor.d.ts +24 -0
  91. package/dist/logging/log-tail-reader.d.ts +81 -0
  92. package/dist/logging/logger.d.ts +1 -1
  93. package/dist/mesh/contracts.d.ts +256 -0
  94. package/dist/mesh/coordinator-prompt.d.ts +76 -0
  95. package/dist/mesh/coordinator-registry.d.ts +59 -0
  96. package/dist/mesh/mesh-active-work.d.ts +203 -0
  97. package/dist/mesh/mesh-clone-grace.d.ts +8 -0
  98. package/dist/mesh/mesh-completion-synthesis.d.ts +4 -0
  99. package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
  100. package/dist/mesh/mesh-delivery-policy.d.ts +104 -0
  101. package/dist/mesh/mesh-event-classify.d.ts +7 -0
  102. package/dist/mesh/mesh-event-forwarding.d.ts +58 -0
  103. package/dist/mesh/mesh-event-trace.d.ts +21 -0
  104. package/dist/mesh/mesh-events-coordinator.d.ts +4 -0
  105. package/dist/mesh/mesh-events-pending.d.ts +258 -0
  106. package/dist/mesh/mesh-events-stale.d.ts +61 -0
  107. package/dist/mesh/mesh-events-utils.d.ts +75 -0
  108. package/dist/mesh/mesh-events.d.ts +6 -37
  109. package/dist/mesh/mesh-fast-forward.d.ts +81 -0
  110. package/dist/mesh/mesh-host-ownership.d.ts +29 -0
  111. package/dist/mesh/mesh-idle-reminder.d.ts +68 -0
  112. package/dist/mesh/mesh-init.d.ts +128 -0
  113. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
  114. package/dist/mesh/mesh-ledger.d.ts +139 -1
  115. package/dist/mesh/mesh-magi-status.d.ts +63 -0
  116. package/dist/mesh/mesh-missions.d.ts +281 -0
  117. package/dist/mesh/mesh-node-identity.d.ts +310 -0
  118. package/dist/mesh/mesh-queue-assignment.d.ts +162 -0
  119. package/dist/mesh/mesh-reconcile-acked-hold.d.ts +17 -0
  120. package/dist/mesh/mesh-reconcile-config.d.ts +6 -0
  121. package/dist/mesh/mesh-reconcile-identity.d.ts +6 -0
  122. package/dist/mesh/mesh-reconcile-loop.d.ts +84 -0
  123. package/dist/mesh/mesh-reconcile-v2-backstop.d.ts +16 -0
  124. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  125. package/dist/mesh/mesh-refine-gates.d.ts +457 -0
  126. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  127. package/dist/mesh/mesh-remote-event-pull.d.ts +15 -0
  128. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  129. package/dist/mesh/mesh-routing.d.ts +70 -0
  130. package/dist/mesh/mesh-runtime-store.d.ts +584 -0
  131. package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
  132. package/dist/mesh/mesh-task-inflight.d.ts +46 -0
  133. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  134. package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +34 -0
  135. package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
  136. package/dist/mesh/mesh-work-queue.d.ts +403 -6
  137. package/dist/mesh/preview-freshness.d.ts +28 -0
  138. package/dist/mesh/refine-config.d.ts +216 -0
  139. package/dist/mesh/worktree-bootstrap-config.d.ts +219 -0
  140. package/dist/providers/acp-provider-instance.d.ts +5 -0
  141. package/dist/providers/approval-utils.d.ts +46 -0
  142. package/dist/providers/chat-message-normalization.d.ts +58 -0
  143. package/dist/providers/cli-provider-effect-format.d.ts +30 -0
  144. package/dist/providers/cli-provider-history-dedup.d.ts +17 -0
  145. package/dist/providers/cli-provider-input-prompt.d.ts +12 -0
  146. package/dist/providers/cli-provider-instance-types.d.ts +47 -0
  147. package/dist/providers/cli-provider-instance.d.ts +461 -30
  148. package/dist/providers/cli-provider-status-helpers.d.ts +46 -0
  149. package/dist/providers/cli-provider-transcript-merge.d.ts +7 -0
  150. package/dist/providers/contracts.d.ts +196 -6
  151. package/dist/providers/external-sources.d.ts +71 -0
  152. package/dist/providers/manual-attendance.d.ts +79 -0
  153. package/dist/providers/native-history/antigravity-claim-registry.d.ts +39 -0
  154. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +137 -0
  155. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  156. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  157. package/dist/providers/native-history/constants.d.ts +12 -0
  158. package/dist/providers/native-history/dispatcher.d.ts +44 -0
  159. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  160. package/dist/providers/native-history/index.d.ts +13 -0
  161. package/dist/providers/provider-instance-manager.d.ts +30 -0
  162. package/dist/providers/provider-instance.d.ts +31 -1
  163. package/dist/providers/provider-loader.d.ts +42 -5
  164. package/dist/providers/provider-trust.d.ts +31 -0
  165. package/dist/providers/read-chat-contract.d.ts +29 -0
  166. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  167. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
  168. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  169. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  170. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  171. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  172. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  173. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  174. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  175. package/dist/providers/sdk/v1/index.d.ts +30 -0
  176. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  177. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  178. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  179. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  180. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  181. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  182. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  183. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  184. package/dist/providers/spec/adapter.d.ts +98 -0
  185. package/dist/providers/spec/background-task-detector.d.ts +29 -0
  186. package/dist/providers/spec/cli-adapter.d.ts +224 -0
  187. package/dist/providers/spec/evaluator.d.ts +45 -0
  188. package/dist/providers/spec/fsm-driver.d.ts +449 -0
  189. package/dist/providers/spec/fsm-evaluator.d.ts +93 -0
  190. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  191. package/dist/providers/spec/fsm-types.d.ts +202 -0
  192. package/dist/providers/spec/native-history-executor.d.ts +50 -0
  193. package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
  194. package/dist/providers/spec/route.d.ts +4 -0
  195. package/dist/providers/spec/types.d.ts +244 -0
  196. package/dist/providers/status-monitor.d.ts +7 -7
  197. package/dist/providers/transcript-v2.d.ts +176 -0
  198. package/dist/providers/types/interactive-prompt.d.ts +84 -0
  199. package/dist/providers/working-dir.d.ts +17 -0
  200. package/dist/repo-mesh-types.d.ts +778 -3
  201. package/dist/runtime-defaults.d.ts +2 -0
  202. package/dist/session-host/managed-host.d.ts +64 -0
  203. package/dist/session-host/runtime-surface.d.ts +10 -16
  204. package/dist/sessions/registry.d.ts +26 -0
  205. package/dist/shared-types-extra.d.ts +2 -4
  206. package/dist/shared-types.d.ts +110 -55
  207. package/dist/status/chat-tail-hot-sessions.d.ts +40 -0
  208. package/dist/status/normalize.d.ts +1 -1
  209. package/dist/status/normalize.js +1 -0
  210. package/dist/status/normalize.js.map +1 -1
  211. package/dist/status/normalize.mjs +1 -0
  212. package/dist/status/normalize.mjs.map +1 -1
  213. package/dist/status/reporter.d.ts +2 -0
  214. package/dist/status/snapshot.d.ts +27 -0
  215. package/dist/system/hash.d.ts +8 -0
  216. package/dist/system/load-better-sqlite3.d.ts +21 -0
  217. package/dist/types.d.ts +20 -6
  218. package/package.json +11 -4
  219. package/src/agent-stream/poller.ts +2 -3
  220. package/src/agent-stream/provider-adapter.ts +1 -1
  221. package/src/boot/daemon-lifecycle.ts +83 -14
  222. package/src/boot/process-hardening.ts +89 -0
  223. package/src/build-info.ts +73 -0
  224. package/src/chat/source-machine.ts +534 -0
  225. package/src/chat/source-resolver.ts +0 -0
  226. package/src/chat/subscription-updates.ts +20 -1
  227. package/src/cli-adapter-types.d.ts +3 -1
  228. package/src/cli-adapter-types.ts +85 -2
  229. package/src/cli-adapters/cli-script-runner.ts +421 -0
  230. package/src/cli-adapters/cli-state-engine.ts +1379 -0
  231. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  232. package/src/cli-adapters/provider-cli-adapter.ts +1059 -1143
  233. package/src/cli-adapters/provider-cli-parse.d.ts +2 -0
  234. package/src/cli-adapters/provider-cli-parse.ts +19 -0
  235. package/src/cli-adapters/provider-cli-runtime.ts +56 -7
  236. package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
  237. package/src/cli-adapters/provider-cli-shared.ts +121 -11
  238. package/src/cli-adapters/pty-transport.ts +2 -1
  239. package/src/cli-adapters/pty-write-chunking.ts +106 -0
  240. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  241. package/src/cli-adapters/resolve-executable.ts +204 -0
  242. package/src/cli-adapters/session-host-transport.ts +2 -1
  243. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +63 -29
  244. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  245. package/src/cli-adapters/terminal-screen.ts +16 -81
  246. package/src/commands/chat-commands-debug-bundle.ts +398 -0
  247. package/src/commands/chat-commands-read.ts +2788 -0
  248. package/src/commands/chat-commands-scope.ts +54 -0
  249. package/src/commands/chat-commands-shared.ts +114 -0
  250. package/src/commands/chat-commands-write.ts +891 -0
  251. package/src/commands/chat-commands.ts +19 -1841
  252. package/src/commands/cli-manager.d.ts +2 -0
  253. package/src/commands/cli-manager.ts +724 -27
  254. package/src/commands/handler.ts +865 -2
  255. package/src/commands/high-family/index.ts +28 -0
  256. package/src/commands/high-family/mesh-coordinator-launch.ts +696 -0
  257. package/src/commands/high-family/mesh-events.ts +102 -0
  258. package/src/commands/high-family/mesh-status.ts +857 -0
  259. package/src/commands/high-family/types.ts +80 -0
  260. package/src/commands/low-family/coordinator-prompt.ts +125 -0
  261. package/src/commands/low-family/daemon-lifecycle.ts +120 -0
  262. package/src/commands/low-family/diagnostics.ts +57 -0
  263. package/src/commands/low-family/index.ts +37 -0
  264. package/src/commands/low-family/mesh-ledger.ts +62 -0
  265. package/src/commands/low-family/mesh-node-logs.ts +87 -0
  266. package/src/commands/low-family/notification.ts +116 -0
  267. package/src/commands/low-family/refine-config.ts +106 -0
  268. package/src/commands/low-family/session-host.ts +282 -0
  269. package/src/commands/low-family/spec-providerdev.ts +217 -0
  270. package/src/commands/low-family/status-meta.ts +112 -0
  271. package/src/commands/low-family/types.ts +39 -0
  272. package/src/commands/med-family/cli-agent.ts +270 -0
  273. package/src/commands/med-family/fast-forward.ts +230 -0
  274. package/src/commands/med-family/ide.ts +163 -0
  275. package/src/commands/med-family/index.ts +37 -0
  276. package/src/commands/med-family/mesh-crud.ts +1309 -0
  277. package/src/commands/med-family/mesh-host-pairing.ts +234 -0
  278. package/src/commands/med-family/mesh-queue.ts +167 -0
  279. package/src/commands/med-family/mesh-restart.ts +92 -0
  280. package/src/commands/med-family/types.ts +153 -0
  281. package/src/commands/mesh-coordinator.ts +334 -124
  282. package/src/commands/router-aggregate-status.ts +209 -0
  283. package/src/commands/router-mesh-session-owner.ts +114 -0
  284. package/src/commands/router-refine.ts +1794 -0
  285. package/src/commands/router-worktree-cleanup.ts +870 -0
  286. package/src/commands/router.ts +657 -2704
  287. package/src/commands/stream-commands.ts +8 -0
  288. package/src/commands/upgrade-helper.ts +310 -45
  289. package/src/config/chat-history.ts +517 -24
  290. package/src/config/config.ts +30 -0
  291. package/src/config/mesh-config.ts +542 -23
  292. package/src/config/mesh-json-config.ts +376 -0
  293. package/src/config/recent-activity.ts +8 -2
  294. package/src/config/registry-resolver.ts +100 -0
  295. package/src/config/repo-settings.ts +111 -0
  296. package/src/config/state-store.ts +55 -0
  297. package/src/daemon/dev-auto-implement.ts +3 -2
  298. package/src/daemon/dev-cli-debug.ts +10 -1
  299. package/src/daemon/dev-server.ts +0 -541
  300. package/src/detection/cli-detector.ts +94 -9
  301. package/src/detection/ide-detector.ts +55 -16
  302. package/src/detection/win32-ide-version.ts +106 -0
  303. package/src/git/change-impact-config.ts +354 -0
  304. package/src/git/git-commands.ts +113 -17
  305. package/src/git/git-diff.ts +81 -11
  306. package/src/git/git-executor.ts +12 -0
  307. package/src/git/git-status.ts +916 -51
  308. package/src/git/git-summary.ts +3 -0
  309. package/src/git/git-types.ts +17 -54
  310. package/src/git/git-worktree.ts +261 -4
  311. package/src/git/index.ts +17 -0
  312. package/src/index.ts +221 -13
  313. package/src/installer.d.ts +1 -1
  314. package/src/installer.ts +8 -6
  315. package/src/ipc/local-ipc-server.ts +278 -0
  316. package/src/launch.d.ts +1 -1
  317. package/src/launch.ts +37 -28
  318. package/src/logging/async-batch-writer.ts +55 -0
  319. package/src/logging/command-log.ts +7 -5
  320. package/src/logging/debug-config.ts +25 -0
  321. package/src/logging/debug-trace.ts +7 -2
  322. package/src/logging/log-redactor.ts +100 -0
  323. package/src/logging/log-tail-reader.ts +341 -0
  324. package/src/logging/logger.ts +14 -7
  325. package/src/mesh/contracts.ts +510 -0
  326. package/src/mesh/coordinator-prompt.ts +626 -34
  327. package/src/mesh/coordinator-registry.ts +121 -0
  328. package/src/mesh/mesh-active-work.ts +706 -0
  329. package/src/mesh/mesh-clone-grace.ts +68 -0
  330. package/src/mesh/mesh-completion-synthesis.ts +416 -0
  331. package/src/mesh/mesh-coordinator-config.ts +97 -0
  332. package/src/mesh/mesh-delivery-policy.ts +284 -0
  333. package/src/mesh/mesh-event-classify.ts +78 -0
  334. package/src/mesh/mesh-event-forwarding.ts +2042 -0
  335. package/src/mesh/mesh-event-trace.ts +67 -0
  336. package/src/mesh/mesh-events-coordinator.ts +32 -0
  337. package/src/mesh/mesh-events-pending.ts +1548 -0
  338. package/src/mesh/mesh-events-stale.ts +452 -0
  339. package/src/mesh/mesh-events-utils.ts +443 -0
  340. package/src/mesh/mesh-events.ts +43 -897
  341. package/src/mesh/mesh-fast-forward.ts +856 -0
  342. package/src/mesh/mesh-host-ownership.ts +111 -0
  343. package/src/mesh/mesh-idle-reminder.ts +153 -0
  344. package/src/mesh/mesh-init.ts +350 -0
  345. package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
  346. package/src/mesh/mesh-ledger.ts +898 -102
  347. package/src/mesh/mesh-magi-status.ts +223 -0
  348. package/src/mesh/mesh-missions.ts +695 -0
  349. package/src/mesh/mesh-node-identity.ts +2065 -0
  350. package/src/mesh/mesh-queue-assignment.ts +2498 -0
  351. package/src/mesh/mesh-reconcile-acked-hold.ts +230 -0
  352. package/src/mesh/mesh-reconcile-config.ts +66 -0
  353. package/src/mesh/mesh-reconcile-identity.ts +103 -0
  354. package/src/mesh/mesh-reconcile-loop.ts +1709 -0
  355. package/src/mesh/mesh-reconcile-v2-backstop.ts +62 -0
  356. package/src/mesh/mesh-refine-batch.ts +205 -0
  357. package/src/mesh/mesh-refine-gates.ts +1792 -0
  358. package/src/mesh/mesh-refine-status.ts +231 -0
  359. package/src/mesh/mesh-remote-event-pull.ts +286 -0
  360. package/src/mesh/mesh-review-inbox.ts +308 -0
  361. package/src/mesh/mesh-routing.ts +291 -0
  362. package/src/mesh/mesh-runtime-store.ts +2318 -0
  363. package/src/mesh/mesh-scheduling-runtime.ts +198 -0
  364. package/src/mesh/mesh-task-inflight.ts +70 -0
  365. package/src/mesh/mesh-task-stats.ts +161 -0
  366. package/src/mesh/mesh-unresolved-forward-outbox.ts +215 -0
  367. package/src/mesh/mesh-warmup-deadline.ts +152 -0
  368. package/src/mesh/mesh-work-queue.ts +1532 -161
  369. package/src/mesh/p2p-relay-failure.ts +2 -2
  370. package/src/mesh/preview-freshness.ts +163 -0
  371. package/src/mesh/refine-config.ts +423 -0
  372. package/src/mesh/worktree-bootstrap-config.ts +599 -0
  373. package/src/providers/acp-provider-instance.ts +43 -10
  374. package/src/providers/approval-utils.d.ts +5 -0
  375. package/src/providers/approval-utils.ts +100 -6
  376. package/src/providers/chat-message-normalization.ts +128 -4
  377. package/src/providers/cli-provider-effect-format.ts +53 -0
  378. package/src/providers/cli-provider-history-dedup.ts +75 -0
  379. package/src/providers/cli-provider-input-prompt.ts +133 -0
  380. package/src/providers/cli-provider-instance-types.ts +150 -0
  381. package/src/providers/cli-provider-instance.ts +2914 -498
  382. package/src/providers/cli-provider-status-helpers.ts +123 -0
  383. package/src/providers/cli-provider-transcript-merge.ts +114 -0
  384. package/src/providers/contracts.d.ts +55 -0
  385. package/src/providers/contracts.ts +207 -6
  386. package/src/providers/extension-provider-instance.ts +12 -7
  387. package/src/providers/external-sources.ts +218 -0
  388. package/src/providers/ide-provider-instance.ts +35 -12
  389. package/src/providers/manual-attendance.ts +105 -0
  390. package/src/providers/native-history/antigravity-claim-registry.ts +138 -0
  391. package/src/providers/native-history/antigravity-cli-transcript.ts +1275 -0
  392. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  393. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  394. package/src/providers/native-history/constants.ts +19 -0
  395. package/src/providers/native-history/dispatcher.ts +617 -0
  396. package/src/providers/native-history/hermes-cli-transcript.ts +312 -0
  397. package/src/providers/native-history/index.ts +30 -0
  398. package/src/providers/provider-instance-manager.ts +71 -0
  399. package/src/providers/provider-instance.ts +24 -1
  400. package/src/providers/provider-loader.ts +700 -55
  401. package/src/providers/provider-schema.ts +93 -14
  402. package/src/providers/provider-trust.ts +114 -0
  403. package/src/providers/read-chat-contract.ts +76 -16
  404. package/src/providers/sdk/README.md +49 -0
  405. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  406. package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
  407. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  408. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +261 -0
  409. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  410. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  411. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  412. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  413. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  414. package/src/providers/sdk/v1/index.ts +152 -0
  415. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  416. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  417. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  418. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +538 -0
  419. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  420. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  421. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  422. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  423. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  424. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  425. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  426. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  427. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  428. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  429. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  430. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  431. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  432. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  433. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  434. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  435. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  436. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  437. package/src/providers/sdk/v1/validators/index.ts +19 -0
  438. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  439. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  440. package/src/providers/spec/adapter.ts +246 -0
  441. package/src/providers/spec/background-task-detector.ts +178 -0
  442. package/src/providers/spec/cli-adapter.ts +1090 -0
  443. package/src/providers/spec/evaluator.ts +407 -0
  444. package/src/providers/spec/fsm-driver.ts +1528 -0
  445. package/src/providers/spec/fsm-evaluator.ts +290 -0
  446. package/src/providers/spec/fsm-loader.ts +128 -0
  447. package/src/providers/spec/fsm-types.ts +301 -0
  448. package/src/providers/spec/native-history-executor.ts +1256 -0
  449. package/src/providers/spec/pre-launch-trust.ts +104 -0
  450. package/src/providers/spec/route.ts +51 -0
  451. package/src/providers/spec/types.ts +284 -0
  452. package/src/providers/status-monitor.d.ts +7 -7
  453. package/src/providers/status-monitor.ts +37 -22
  454. package/src/providers/transcript-v2.ts +567 -0
  455. package/src/providers/types/interactive-prompt.ts +536 -0
  456. package/src/providers/version-archive.ts +64 -24
  457. package/src/providers/working-dir.ts +23 -0
  458. package/src/repo-mesh-types.ts +1040 -5
  459. package/src/runtime-defaults.ts +39 -0
  460. package/src/session-host/managed-host.ts +218 -0
  461. package/src/session-host/runtime-surface.ts +20 -80
  462. package/src/sessions/registry.ts +44 -0
  463. package/src/shared-types-extra.ts +2 -4
  464. package/src/shared-types.d.ts +8 -0
  465. package/src/shared-types.ts +148 -55
  466. package/src/status/builders.ts +69 -6
  467. package/src/status/chat-tail-hot-sessions.ts +117 -2
  468. package/src/status/normalize.ts +2 -0
  469. package/src/status/reporter.ts +19 -1
  470. package/src/status/snapshot.ts +100 -27
  471. package/src/system/hash.ts +23 -0
  472. package/src/system/host-memory.ts +29 -12
  473. package/src/system/load-better-sqlite3.ts +68 -0
  474. package/src/types.ts +26 -6
  475. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  476. package/dist/mesh/mesh-sync.d.ts +0 -53
  477. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  478. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  479. package/src/mesh/mesh-sync.ts +0 -111
package/src/index.ts CHANGED
@@ -85,12 +85,32 @@ export type {
85
85
  InputMediaType,
86
86
  } from './shared-types.js';
87
87
 
88
+ export type {
89
+ InteractivePrompt,
90
+ InteractiveQuestion,
91
+ InteractiveOption,
92
+ InteractivePromptResponse,
93
+ InteractiveAnswer,
94
+ } from './providers/types/interactive-prompt.js';
95
+ export {
96
+ normalizeInteractivePrompt,
97
+ normalizeInteractivePromptResponse,
98
+ buildClaudeInteractiveToolResult,
99
+ interactivePromptFromClaudeAskUserQuestion,
100
+ detectClaudeAskUserQuestionPromptFromJson,
101
+ } from './providers/types/interactive-prompt.js';
102
+
88
103
  // ── Repo Mesh Types (cross-package) ──
89
104
  export type {
90
105
  RepoMesh,
106
+ RepoMeshDaemonRole,
107
+ RepoMeshHostMetadata,
108
+ RepoMeshHostPairingMetadata,
109
+ RepoMeshHostStatus,
91
110
  RepoMeshNode,
92
111
  RepoMeshNodeHealth,
93
112
  RepoMeshPolicy,
113
+ RepoMeshMagiSessionCleanupMode,
94
114
  RepoMeshNodePolicy,
95
115
  RepoMeshRelatedRepo,
96
116
  RepoMeshNodeCapabilities,
@@ -103,8 +123,42 @@ export type {
103
123
  LocalMeshNodeEntry,
104
124
  RepoMeshStatus,
105
125
  RepoMeshNodeStatus,
126
+ RepoMeshPeerConnectionStatus,
127
+ RepoMeshPeerConnectionState,
128
+ RepoMeshPeerConnectionTransport,
129
+ RepoMeshSessionStatus,
130
+ RepoMeshQueueTask,
131
+ RepoMeshQueueTaskStatus,
132
+ RepoMeshQueueSummary,
133
+ RepoMeshQueueStatus,
134
+ RepoMeshLedgerEntryStatus,
135
+ RepoMeshLedgerSummaryStatus,
136
+ RepoMeshLedgerStatus,
137
+ MeshAsyncJobLifecycle,
138
+ RepoMeshSchedulingStrategy,
139
+ RepoMeshSchedulingStatus,
140
+ RepoMeshNodeSchedulingStatus,
141
+ RepoMeshNodeProviderSchedulingStatus,
142
+ } from './repo-mesh-types.js';
143
+ export {
144
+ DEFAULT_MESH_POLICY,
145
+ resolveDelegatedWorkerAutoApprove,
146
+ resolveMagiSessionCleanupMode,
147
+ magiAutoLaunchedSessionCleanupDecision,
148
+ MESH_SCHEDULING_STRATEGIES,
149
+ DEFAULT_MESH_SCHEDULING_STRATEGY,
150
+ normalizeMeshSchedulingStrategy,
151
+ resolveNodeSchedulingPriority,
152
+ resolveProviderMaxParallel,
153
+ mergeAndNormalizePolicy,
154
+ normalizeAutoFastForwardPolicy,
155
+ resolveMaxParallelTasks,
156
+ MESH_MAX_PARALLEL_TASKS_MIN,
157
+ MESH_MAX_PARALLEL_TASKS_MAX,
158
+ MESH_CONVERGE_REFINE_TAG,
159
+ MESH_CONVERGE_FAST_FORWARD_TAG,
160
+ resolveAutoConvergeCodeChange,
106
161
  } from './repo-mesh-types.js';
107
- export { DEFAULT_MESH_POLICY } from './repo-mesh-types.js';
108
162
 
109
163
  // ── Git Surface ──
110
164
  export * from './git/index.js';
@@ -130,7 +184,7 @@ export type RecentSessionBucket = 'needs_attention' | 'working' | 'task_complete
130
184
  export type { IDaemonCore, DaemonCoreOptions } from './daemon-core.js';
131
185
 
132
186
  // ── Config ──
133
- export { loadConfig, saveConfig, resetConfig, isSetupComplete, markSetupComplete, updateConfig } from './config/config.js';
187
+ export { loadConfig, saveConfig, resetConfig, isSetupComplete, markSetupComplete, updateConfig, getDaemonDataDir } from './config/config.js';
134
188
  export { getWorkspaceState } from './config/workspaces.js';
135
189
  export { appendRecentActivity, getRecentActivity } from './config/recent-activity.js';
136
190
  export type { RecentActivityEntry } from './config/recent-activity.js';
@@ -141,24 +195,103 @@ export type { SavedProviderSessionEntry } from './config/saved-sessions.js';
141
195
  export {
142
196
  listMeshes, getMesh, getMeshByRepo, createMesh, updateMesh, deleteMesh,
143
197
  addNode, removeNode, updateNode, normalizeRepoIdentity,
198
+ listMagiKindPanels, getMagiKindPanel, setMagiKindPanel, removeMagiKindPanel, normalizeMagiSlots,
144
199
  } from './config/mesh-config.js';
145
200
  export type { CreateMeshOptions, UpdateMeshOptions, AddNodeOptions } from './config/mesh-config.js';
201
+ // MAGI panel / common-output / synthesis types (re-exported from the mesh-shared
202
+ // leaf so the mcp-server — which depends only on @adhdev/daemon-core — can consume
203
+ // them without taking a direct @adhdev/mesh-shared dependency).
204
+ export type {
205
+ MagiMode, MagiTaskKind,
206
+ MagiSlot, MagiKindPanelMap,
207
+ MagiClaim, MagiClaimStance, MagiAgentResponse,
208
+ MagiResponseSource, MagiReplicaGitRef, MagiGitSkew, MagiSynthesizedResponse,
209
+ MagiClusterCategory, MagiClusterMember, MagiClaimCluster, MagiSynthesis,
210
+ } from '@adhdev/mesh-shared';
211
+ // Value re-export: per-replica raw-answer truncation cap (used by the mcp-server
212
+ // collection path, which depends only on @adhdev/daemon-core).
213
+ export { MAGI_RAW_ANSWER_CAP } from '@adhdev/mesh-shared';
214
+
215
+ // ── Mesh shared daemon-id / node-id helpers (re-export so external tooling —
216
+ // e.g. the mcp-server, which depends only on @adhdev/daemon-core — can
217
+ // canonicalize daemon-id and node-id forms without taking a direct
218
+ // @adhdev/mesh-shared dependency). ──
219
+ export { expandDaemonIdForms, daemonIdsEquivalent, machineCoreFromDaemonId, canonicalDaemonId } from '@adhdev/mesh-shared';
220
+ export { normalizeMeshNodeId, meshNodeIdMatches } from '@adhdev/mesh-shared';
221
+ // Canonical mesh tool-name registry (SSOT for the schema ↔ prompt ↔ barrel-comment
222
+ // consistency the 6-6 test enforces). Re-exported so mcp-server (which depends on
223
+ // daemon-core, not on mesh-shared directly) and the daemon-core prompt test both
224
+ // reference one list.
225
+ export { CANONICAL_MESH_TOOL_NAMES, CANONICAL_MESH_TOOL_COUNT } from '@adhdev/mesh-shared';
226
+ export type { CanonicalMeshToolName } from '@adhdev/mesh-shared';
146
227
 
147
228
  // ── Mesh Coordinator ──
148
229
  export { buildCoordinatorSystemPrompt } from './mesh/coordinator-prompt.js';
230
+ export { upsertMeshMission, getMeshMissions, getMeshMission, summarizeMissionTasks, summarizeMeshMission, getActiveMeshMissionSummaries, getMeshStatusMissionSummaries, getMeshStatusMissionsCompact, listMeshMissionSummaries, listMeshMissionsForTool, buildMissionPromptSection, GOAL_PREVIEW_MAX, COMPACT_STATUS_GOAL_PREVIEW_MAX, MESH_MISSION_LIST_HISTORY_ID_LIMIT, MESH_MISSION_LIST_STATUS_LIMIT, MESH_MISSION_STATUSES } from './mesh/mesh-missions.js';
231
+ export type { MeshMissionRecord, MeshMissionStatus, MeshMissionSummary, MeshMissionSlimSummary, MeshMissionTaskAggregate, MeshStatusMissionsCompact, MeshStatusMissionsHistoryFold, MeshMissionListResult } from './mesh/mesh-missions.js';
232
+ export { computeMeshTaskStats, computeMeshMissionStats } from './mesh/mesh-task-stats.js';
233
+ export type { MeshTaskStats, MeshMissionStats } from './mesh/mesh-task-stats.js';
234
+ export { deriveMeshReviewInboxItems } from './mesh/mesh-review-inbox.js';
235
+ export type { MeshReviewInboxItem, MeshReviewInboxDerivation, MeshReviewInboxEvidence, MeshReviewInboxDiffSummary, MeshReviewInboxDiffFile, MeshReviewInboxReason, MeshReviewInboxConvergence } from './mesh/mesh-review-inbox.js';
149
236
  export type { CoordinatorPromptContext } from './mesh/coordinator-prompt.js';
150
- export { syncMeshes } from './mesh/mesh-sync.js';
151
- export type { MeshSyncTransport, MeshSyncResult, RemoteMeshRecord } from './mesh/mesh-sync.js';
237
+ export { loadMeshCoordinatorRegistry, registerMeshCoordinator, unregisterMeshCoordinator, getCoordinatorForSession, listCoordinatorsForWorkspace } from './mesh/coordinator-registry.js';
238
+ export type { CoordinatorRegistryEntry } from './mesh/coordinator-registry.js';
239
+ export {
240
+ MESH_REFINE_CONFIG_LOCATIONS,
241
+ MESH_REFINE_CONFIG_SCHEMA,
242
+ loadMeshRefineConfig,
243
+ resolveMeshRefineValidationPlan,
244
+ suggestMeshRefineConfig,
245
+ validateMeshRefineConfig,
246
+ } from './mesh/refine-config.js';
247
+ export {
248
+ MESH_WORKTREE_BOOTSTRAP_CONFIG_LOCATIONS,
249
+ MESH_WORKTREE_BOOTSTRAP_CONFIG_SCHEMA,
250
+ loadMeshWorktreeBootstrapConfig,
251
+ runMeshWorktreeBootstrap,
252
+ validateMeshWorktreeBootstrapConfig,
253
+ type RepoMeshWorktreeBootstrapConfig,
254
+ type WorktreeBootstrapState,
255
+ } from './mesh/worktree-bootstrap-config.js';
256
+ export type {
257
+ MeshRefineValidationCategory,
258
+ MeshRefineValidationCommandPlan,
259
+ MeshRefineValidationPlan,
260
+ RepoMeshRefineConfig,
261
+ RepoMeshRefineValidationCommandConfig,
262
+ } from './mesh/refine-config.js';
263
+ // Unified repo-settings loader: assembles the separate `.adhdev/*` config files
264
+ // (mesh.json coordinator/operatingNotes, refine, worktree-bootstrap, change-impact)
265
+ // into one object. Policy is machine-local and not part of repo settings.
266
+ export { loadRepoSettings } from './config/repo-settings.js';
267
+ export type { RepoSettings, LoadRepoSettingsOptions } from './config/repo-settings.js';
152
268
 
153
269
  // ── Mesh Task Ledger ──
154
- export { appendLedgerEntry, appendRemoteLedgerEntries, readLedgerEntries, readLedgerSlice, getLedgerSummary, getLedgerDir, getSessionRecoveryContext, MAX_LEDGER_SLICE_LIMIT } from './mesh/mesh-ledger.js';
155
- export type { AppendRemoteLedgerResult, MeshLedgerEntry, MeshLedgerKind, MeshLedgerSlice, MeshLedgerSummary, ReadLedgerOptions, ReadLedgerSliceOptions, SessionRecoveryContext } from './mesh/mesh-ledger.js';
270
+ export { appendLedgerEntry, appendRemoteLedgerEntries, buildTaskCompletionEvidence, normalizeMeshWorkerResult, readLedgerEntries, readLedgerSlice, readLedgerSliceFromStore, getLedgerSummary, getLedgerDir, getSessionRecoveryContext, MAX_LEDGER_SLICE_LIMIT, tombstoneOperatingNote, readOperatingNotes, pruneOperatingNotes, isOperatingNoteTombstoned, OPERATING_NOTE_KIND, OPERATING_NOTE_TOMBSTONE_KIND, OPERATING_NOTE_DEDUPE_WINDOW, OPERATING_NOTE_KEEP_LATEST } from './mesh/mesh-ledger.js';
271
+ export type { AppendRemoteLedgerResult, MeshLedgerEntry, MeshLedgerKind, MeshLedgerSlice, MeshLedgerSummary, ReadLedgerOptions, ReadLedgerSliceOptions, SessionRecoveryContext, MeshTaskCompletionEvidence, MeshWorkerResultArtifact, MeshProcessArtifact, MeshValidationResultArtifact } from './mesh/mesh-ledger.js';
272
+ export { fastForwardMeshNode } from './mesh/mesh-fast-forward.js';
273
+ export type { MeshFastForwardNodeArgs, MeshFastForwardPlannedStep, MeshFastForwardResult } from './mesh/mesh-fast-forward.js';
156
274
  export { buildMeshLedgerReconciliationEvidence, buildMeshLedgerReplicaEvidence } from './mesh/mesh-ledger-reconciliation.js';
157
- export type { MeshLedgerReconciliationEvidence, MeshLedgerReplicaEvidence, MeshLedgerReplicaStatus } from './mesh/mesh-ledger-reconciliation.js';
275
+ export type { AnyLedgerSlice, MeshLedgerReconciliationEvidence, MeshLedgerReplicaEvidence, MeshLedgerReplicaStatus } from './mesh/mesh-ledger-reconciliation.js';
158
276
 
159
277
  // ── Mesh Work Queue (GUPP) ──
160
- export { enqueueTask, getQueue, claimNextTask, updateTaskStatus, updateSessionTaskStatus, cancelTask, requeueTask, getMeshQueueStats } from './mesh/mesh-work-queue.js';
161
- export type { MeshWorkQueueEntry, MeshTaskStatus, MeshWorkQueueStats } from './mesh/mesh-work-queue.js';
278
+ export { enqueueTask, recordDirectDispatchTask, getQueue, claimNextTask, updateTaskStatus, updateSessionTaskStatus, cancelTask, requeueTask, getMeshQueueStats, getMeshQueueRevision, normalizeMeshTaskMode, validateMeshTaskModeRequest, isTaskReadonly, buildMeshNodeCapabilityTags, nodeSatisfiesRequiredTags, normalizeMeshCapabilityTags, resolveConvergeRequiredTags, insertDirectDispatch, getActiveDirectDispatches, updateDirectDispatchStatus, cleanupTerminalDirectDispatches, markStaleDirectDispatches, deleteDirectDispatchesByTaskId, recordMeshToolCall, assertNoDependencyCycle, hasPendingDependents, describeTaskDependencyState, taskDependenciesSatisfied, normalizeMeshTaskPriority, meshTaskPriorityRank, resolveNotBefore, meshTaskNotBeforeReady, MESH_TASK_PRIORITIES, NOT_BEFORE_RELATIVE_THRESHOLD_MS } from './mesh/mesh-work-queue.js';
279
+ export type { MeshWorkQueueEntry, MeshTaskStatus, MeshTaskMode, MeshTaskPriority, MeshWorkQueueStats, MeshQueueMutationOptions, MeshTaskModeValidationResult, DirectDispatchRecord, MeshToolCallRateResult } from './mesh/mesh-work-queue.js';
280
+ export { buildCompactStaleDirectWorkSummary, buildMeshActiveWork, buildMeshActiveWorkSummary, collectPendingApprovals, classifyStaleDirectForPrune, pruneStaleDirectDispatches, PRUNABLE_ORPHAN_STALE_REASONS } from './mesh/mesh-active-work.js';
281
+ export type { StaleDirectPruneClassification, StaleDirectPruneResult, PruneStaleDirectDispatchesOptions } from './mesh/mesh-active-work.js';
282
+ export type { MeshActiveWorkRecord, MeshActiveWorkStatus, MeshActiveWorkSummary, MeshActiveWorkSource, MeshStaleDirectWorkSummary, MeshPendingApproval } from './mesh/mesh-active-work.js';
283
+ export { maybeInjectIdleActiveMissionReminder, shouldFireIdleReminder, buildIdleReminderMessage, missionSetHash, IDLE_REMINDER_DEBOUNCE_MS } from './mesh/mesh-idle-reminder.js';
284
+ export { buildMeshAsyncRefineJobs, summarizeMeshAsyncRefineJobs, STALE_TERMINAL_REFINE_WINDOW_MS, RECENT_TERMINAL_REFINE_CAP } from './mesh/mesh-refine-status.js';
285
+ export type { MeshAsyncRefineJobStatus, MeshAsyncRefineJobSummary, MeshAsyncRefineJobsSummary } from './mesh/mesh-refine-status.js';
286
+ export { buildMeshMagiActivity, summarizeMeshMagiActivity, getMeshMagiActivityByGroup, STALE_MAGI_WINDOW_MS, RECENT_MAGI_CAP, MAGI_NEEDS_VERIFICATION_PREVIEW_CAP } from './mesh/mesh-magi-status.js';
287
+ export type { MeshMagiActivityStatus, MeshMagiActivitySummary, MeshMagiActivitySummaryFold, MeshMagiNeedsVerificationItem } from './mesh/mesh-magi-status.js';
288
+
289
+ // ── Mesh Scheduling Runtime (observability projection) ──
290
+ export { buildMeshSchedulingRuntime } from './mesh/mesh-scheduling-runtime.js';
291
+ export type { MeshSchedulingRuntime, MeshNodeSchedulingRuntime, MeshNodeProviderSchedulingRuntime } from './mesh/mesh-scheduling-runtime.js';
292
+
293
+ // ── Mesh Host Ownership ──
294
+ export { buildMeshHostRequiredFailure, createDefaultMeshHostMetadata, isMeshHostOwner, normalizeMeshDaemonRole, requireMeshHostQueueOwner, resolveMeshHostStatus } from './mesh/mesh-host-ownership.js';
162
295
 
163
296
  // ── Mesh Visualization ──
164
297
  // buildMeshGraph and MeshGraph types moved to @adhdev/web-core to avoid
@@ -168,8 +301,22 @@ export type { MeshWorkQueueEntry, MeshTaskStatus, MeshWorkQueueStats } from './m
168
301
  // export type { MeshGraph, MeshGraphNode, MeshGraphEdge, MeshGraphNodeType, MeshGraphEdgeType } from './mesh/mesh-visualization.js';
169
302
 
170
303
  // ── Mesh Events ──
171
- export { triggerMeshQueue, drainPendingMeshCoordinatorEvents, getPendingMeshCoordinatorEvents, clearPendingMeshCoordinatorEvents } from './mesh/mesh-events.js';
172
- export type { PendingMeshCoordinatorEvent } from './mesh/mesh-events.js';
304
+ export { triggerMeshQueue, drainPendingMeshCoordinatorEvents, getPendingMeshCoordinatorEvents, clearPendingMeshCoordinatorEvents, queuePendingMeshCoordinatorEvent, requeueHeldMeshCoordinatorEvents, serializeV2EnvelopeToWire, readV2EnvelopeFromWire, reconcileDirectDispatchCompletionFromTranscript } from './mesh/mesh-events.js';
305
+ export type { PendingMeshCoordinatorEvent, MeshHeldEventRequeueFilter, MeshHeldEventRequeueResult } from './mesh/mesh-events.js';
306
+ // COORD-EVENT-MISROUTE: coordinator-identity helper so the mcp-server drain path can build a
307
+ // session-scoped drainer identity (identityDeliversTo sibling-session filter) with the same
308
+ // canonical builder daemon-core uses internally, instead of hand-rolling the identity shape.
309
+ export { coordinatorIdentityFromEmitFields } from './mesh/contracts.js';
310
+ export type { CoordinatorIdentity } from './mesh/contracts.js';
311
+ // The coordinator-side preview surfaced from a worker's completion/status event
312
+ // (finalSummary / workerResult.summary / lastMessagePreview). Same data the mobile
313
+ // inbox is fed; reused by mesh_read_chat's cache fallback when the live P2P read path
314
+ // is unavailable (saturated/unreachable peer).
315
+ export { resolveMeshSurfacedSessionPreview, readMeshCompletionSummary, isWeakCompletionEvidence } from './mesh/mesh-events-utils.js';
316
+
317
+ // ── Mesh Delivery Policy ──
318
+ export { resolveDeliveryDecision, createSessionDelivery, updateSessionDeliveryStatus, getActiveSessionDeliveries, markSessionDeliveriesTerminal } from './mesh/mesh-delivery-policy.js';
319
+ export type { MeshSessionDeliveryStatus, MeshSessionDeliveryKind, MeshDeliveryDecision, MeshDeliveryPolicyResult, SessionDeliveryRecord } from './mesh/mesh-delivery-policy.js';
173
320
 
174
321
  // ── Mesh P2P Relay Failure Classification ──
175
322
  export {
@@ -197,6 +344,7 @@ export { getHostMemorySnapshot } from './system/host-memory.js';
197
344
  export type { HostMemorySnapshot } from './system/host-memory.js';
198
345
  export {
199
346
  classifyHotChatSessionsForSubscriptionFlush,
347
+ detectNewlySettledCompletedSessions,
200
348
  DEFAULT_ACTIVE_CHAT_POLL_STATUSES,
201
349
  DEFAULT_CHAT_TAIL_RECENT_MESSAGE_GRACE_MS,
202
350
  } from './status/chat-tail-hot-sessions.js';
@@ -214,7 +362,7 @@ export type { CdpInitializerConfig } from './cdp/initializer.js';
214
362
  // ── Commands ──
215
363
  export { DaemonCommandHandler } from './commands/handler.js';
216
364
  export type { CommandResult, CommandContext } from './commands/handler.js';
217
- export { DaemonCommandRouter } from './commands/router.js';
365
+ export { DaemonCommandRouter, readCachedInlineMeshActiveSessionDetails, resolveMeshNodeAttribution, buildMeshNodeDataFreshness, buildMeshNodeProbeFreshness, MESH_NODE_LIVE_TRUTH_MARKER } from './commands/router.js';
218
366
  export type { CommandRouterDeps, CommandRouterResult } from './commands/router.js';
219
367
  export {
220
368
  maybeRunDaemonUpgradeHelperFromEnv,
@@ -234,7 +382,9 @@ export type {
234
382
  // ── Status ──
235
383
  export { DaemonStatusReporter } from './status/reporter.js';
236
384
  export { buildSessionEntries, findCdpManager, hasCdpManager, isCdpConnected } from './status/builders.js';
237
- export { buildStatusSnapshot, buildMachineInfo } from './status/snapshot.js';
385
+ export { buildStatusSnapshot, buildMachineInfo, buildAvailableProviders, getLastDisplayMessage } from './status/snapshot.js';
386
+ export { getDaemonBuildInfo } from './build-info.js';
387
+ export type { DaemonBuildInfo } from './build-info.js';
238
388
  export { normalizeManagedStatus, isManagedStatusWorking, isManagedStatusWaiting, normalizeActiveChatData } from './status/normalize.js';
239
389
  export type { ManagedStatus } from './status/normalize.js';
240
390
  export type { StatusSnapshotOptions, StatusSnapshot } from './status/snapshot.js';
@@ -256,6 +406,8 @@ export {
256
406
  getDebugRuntimeConfig,
257
407
  resetDebugRuntimeConfig,
258
408
  shouldCollectTraceCategory,
409
+ isAlwaysOnTraceCategory,
410
+ ALWAYS_ON_TRACE_CATEGORIES,
259
411
  } from './logging/debug-config.js';
260
412
  export type { DebugRuntimeOptions, DebugRuntimeConfig } from './logging/debug-config.js';
261
413
  export {
@@ -380,6 +532,13 @@ export type { CliAdapter } from './cli-adapter-types.js';
380
532
  export { NodePtyTransportFactory } from './cli-adapters/pty-transport.js';
381
533
  export type { PtyRuntimeTransport, PtyTransportFactory, PtySpawnOptions } from './cli-adapters/pty-transport.js';
382
534
  export { SessionHostPtyTransportFactory } from './cli-adapters/session-host-transport.js';
535
+ export {
536
+ RawTerminalAttachment,
537
+ namedKeyToAnsi,
538
+ namedKeysToAnsi,
539
+ withRawTerminalAttachment,
540
+ } from './cli-adapters/raw-terminal-io.js';
541
+ export type { NamedKey, RawTerminalAttachmentOptions, RawTerminalSessionHostClient } from './cli-adapters/raw-terminal-io.js';
383
542
  export type { HostedCliRuntimeDescriptor, CliTransportFactoryParams } from './commands/cli-manager.js';
384
543
  export {
385
544
  DEFAULT_SESSION_HOST_APP_NAME,
@@ -389,6 +548,8 @@ export {
389
548
  } from './session-host/app-name.js';
390
549
  export type { SessionHostAppNameResolution } from './session-host/app-name.js';
391
550
  export { ensureSessionHostReady, listHostedCliRuntimes } from './session-host/runtime-support.js';
551
+ export { createManagedSessionHost } from './session-host/managed-host.js';
552
+ export type { ManagedSessionHost, ManagedSessionHostOptions } from './session-host/managed-host.js';
392
553
  export {
393
554
  getSessionHostRecoveryLabel,
394
555
  getSessionHostSurfaceKind,
@@ -407,3 +568,50 @@ export type { ExtensionInfo as InstallerExtensionInfo } from './installer.js';
407
568
  // ── Boot / Lifecycle ──
408
569
  export { initDaemonComponents, startDaemonDevSupport, shutdownDaemonComponents } from './boot/daemon-lifecycle.js';
409
570
  export type { DaemonInitConfig, DaemonComponents, DaemonDevSupportOptions } from './boot/daemon-lifecycle.js';
571
+
572
+ // ── Local IPC server (shared between cloud + standalone daemons) ──
573
+ export {
574
+ startLocalIpcServer,
575
+ buildIpcStatusHttpResponse,
576
+ type LocalIpcServerOptions,
577
+ type LocalIpcServerHandle,
578
+ type IpcCommandContext,
579
+ type IpcCommandResult,
580
+ type IpcStatusPayload,
581
+ } from './ipc/local-ipc-server.js';
582
+
583
+ // ── CLI Spec (adhdev:cli/spec@4) ──
584
+ export { createNativeHistoryDispatcher } from './providers/native-history/index.js';
585
+ export type { ReaderId } from './providers/native-history/index.js';
586
+ export {
587
+ readClaudeCliSession, readCodexCliSession,
588
+ readAntigravityCliSession, readHermesCliSession,
589
+ } from './providers/native-history/index.js';
590
+ export type {
591
+ ControlAction, Control,
592
+ NotificationRule, DelegateTrigger,
593
+ } from './providers/spec/types.js';
594
+ export type { TraceEntry } from './providers/spec/evaluator.js';
595
+ export { evaluateFsm } from './providers/spec/fsm-evaluator.js';
596
+ export type { FsmClock } from './providers/spec/fsm-evaluator.js';
597
+ export { validateFsmSpec } from './providers/spec/fsm-loader.js';
598
+ export { FsmDriver } from './providers/spec/fsm-driver.js';
599
+ export type { DashboardEvent, DashboardCommand, SpecDriverOpts, ISpecDriver } from './providers/spec/fsm-driver.js';
600
+ export { TerminalAdapter } from './providers/spec/adapter.js';
601
+ export type { TerminalAdapterOpts, TerminalAdapterHandlers } from './providers/spec/adapter.js';
602
+
603
+ // ── Provider SDK (v1) — selective re-exports for external tooling ──
604
+ // Tooling (registry publish, dashboard validators, the e2e harness) needs
605
+ // the manifest validator, the builder catalog, and the contract version.
606
+ // We don't re-export *everything* from the SDK to keep the public surface
607
+ // stable; consumers that need internal SDK types still import from the
608
+ // sdk/v1 subpath.
609
+ export {
610
+ validateCliProviderManifest,
611
+ formatManifestValidationIssues,
612
+ type ManifestValidationIssue,
613
+ type ManifestValidationResult,
614
+ V1_CONTRACT_VERSION,
615
+ V1_PRIMITIVE_CATALOG,
616
+ V1_ALL_PRIMITIVES,
617
+ } from './providers/sdk/v1/index.js';
@@ -31,7 +31,7 @@ export interface InstallResult {
31
31
  /**
32
32
  * Check if an extension is already installed
33
33
  */
34
- export declare function isExtensionInstalled(ide: IDEInfo, marketplaceId: string): boolean;
34
+ export declare function isExtensionInstalled(ide: IDEInfo, marketplaceId: string): Promise<boolean>;
35
35
  /**
36
36
  * Install a single extension
37
37
  */
package/src/installer.ts CHANGED
@@ -122,20 +122,22 @@ export interface InstallResult {
122
122
  /**
123
123
  * Check if an extension is already installed
124
124
  */
125
- export function isExtensionInstalled(
125
+ import { promisify } from 'util';
126
+ const execAsync = promisify(exec);
127
+
128
+ export async function isExtensionInstalled(
126
129
  ide: IDEInfo,
127
130
  marketplaceId: string
128
- ): boolean {
131
+ ): Promise<boolean> {
129
132
  if (!ide.cliCommand) return false;
130
133
 
131
134
  try {
132
- const result = execSync(`"${ide.cliCommand}" --list-extensions`, {
135
+ const { stdout } = await execAsync(`"${ide.cliCommand}" --list-extensions`, {
133
136
  encoding: 'utf-8',
134
137
  timeout: 15000,
135
- stdio: ['pipe', 'pipe', 'pipe'],
136
138
  });
137
139
 
138
- const installed = result
140
+ const installed = stdout
139
141
  .trim()
140
142
  .split('\n')
141
143
  .map((e) => e.trim().toLowerCase());
@@ -163,7 +165,7 @@ export async function installExtension(
163
165
  }
164
166
 
165
167
  // Check if already installed
166
- const alreadyInstalled = isExtensionInstalled(ide, extension.marketplaceId);
168
+ const alreadyInstalled = await isExtensionInstalled(ide, extension.marketplaceId);
167
169
  if (alreadyInstalled) {
168
170
  return {
169
171
  extensionId: extension.id,
@@ -0,0 +1,278 @@
1
+ /**
2
+ * LocalIpcServer — generic HTTP + WebSocket IPC endpoint for daemon processes.
3
+ *
4
+ * Both daemon-cloud and daemon-standalone need a local IPC surface so
5
+ * external tools — the `adhdev mcp --mode ipc` MCP server and anything
6
+ * else that wants to issue commands without going through the cloud
7
+ * Worker — can connect over `ws://127.0.0.1:<port>/ipc`.
8
+ *
9
+ * Until now the implementation lived only in daemon-cloud. Standalone
10
+ * sessions therefore couldn't host MCP mesh tools — codex/claude config
11
+ * pointing at `--mode ipc` got `Cannot reach ipc daemon`. This module
12
+ * moves the transport into daemon-core so both daemons can mount it.
13
+ *
14
+ * The transport itself is daemon-agnostic. Cloud-specific behaviors
15
+ * (mesh relay, mandatory update gates) are injected via the caller's
16
+ * `handleCommand` hook; the IPC layer just frames/unframes JSON and
17
+ * routes messages.
18
+ */
19
+
20
+ import { createServer, type IncomingMessage, type Server as HttpServer } from 'http';
21
+ import { WebSocketServer, WebSocket } from 'ws';
22
+ import { LOG } from '../logging/logger.js';
23
+ import { DAEMON_WS_PATH } from '../ipc-protocol.js';
24
+
25
+ /** Parameters passed to `handleCommand` for each incoming ext:command frame. */
26
+ export interface IpcCommandContext {
27
+ /** The raw `command` field from the message — caller decides routing. */
28
+ command: string;
29
+ /** Args provided by the client; may have been normalized by the caller. */
30
+ args: Record<string, unknown>;
31
+ /** Stable id correlating the request and the eventual ext:command_result. */
32
+ requestId: string;
33
+ /** The connected WebSocket — only needed if the caller wants to send extra events. */
34
+ ws: WebSocket;
35
+ }
36
+
37
+ /** Result reported back to the client. `result` is optional context for success. */
38
+ export interface IpcCommandResult {
39
+ success: boolean;
40
+ result?: unknown;
41
+ error?: string;
42
+ /**
43
+ * Additional fields the caller wants merged into the response payload
44
+ * (e.g. the cloud daemon's mandatory-update-block fields). Reserved.
45
+ */
46
+ extra?: Record<string, unknown>;
47
+ }
48
+
49
+ /** Status payload returned from GET / on the IPC HTTP port. */
50
+ export interface IpcStatusPayload {
51
+ ok: true;
52
+ pid: number;
53
+ wsPath: string;
54
+ port: number;
55
+ /** Arbitrary daemon-specific summary. Cloud daemon includes mesh state, etc. */
56
+ status: Record<string, unknown> | null;
57
+ }
58
+
59
+ export interface LocalIpcServerOptions {
60
+ /** TCP port to listen on. 19222 is the conventional default. */
61
+ port: number;
62
+ /** Build the GET / status payload. Called on every health probe. */
63
+ buildStatusPayload: () => Record<string, unknown> | null;
64
+ /** Build the welcome message sent to a freshly-connected client. */
65
+ buildWelcomePayload: () => Record<string, unknown>;
66
+ /** Handle a single ext:command frame. Caller decides routing and returns the result. */
67
+ handleCommand: (ctx: IpcCommandContext) => Promise<IpcCommandResult>;
68
+ /** Optional notification when a new client connects (lets daemon track them for broadcasts). */
69
+ onClientConnected?: (ws: WebSocket) => void;
70
+ /** Optional notification when a client disconnects. */
71
+ onClientDisconnected?: (ws: WebSocket) => void;
72
+ /** Optional logger label (defaults to "IPC"). */
73
+ logCategory?: string;
74
+ }
75
+
76
+ /**
77
+ * Returned controller for stopping the server and broadcasting to clients.
78
+ * Stored by the daemon and torn down at shutdown.
79
+ */
80
+ export interface LocalIpcServerHandle {
81
+ /** True once `listen()` succeeded. */
82
+ isListening(): boolean;
83
+ /** Push a message to every connected client. */
84
+ broadcast(type: string, payload: unknown): void;
85
+ /** Close all client sockets + the HTTP server. */
86
+ close(): Promise<void>;
87
+ }
88
+
89
+ /**
90
+ * Build a JSON HTTP response describing the IPC endpoint. Exposed so caller
91
+ * code (and tests) can build the same shape without spinning a real server.
92
+ */
93
+ export function buildIpcStatusHttpResponse(
94
+ method: string | undefined,
95
+ url: string | undefined,
96
+ payload: IpcStatusPayload,
97
+ ): { statusCode: number; body: Record<string, unknown> } {
98
+ if (method && method.toUpperCase() !== 'GET') {
99
+ return { statusCode: 405, body: { ok: false, error: 'method not allowed' } };
100
+ }
101
+ // `/health` is the probe path used by the MCP IpcTransport ping —
102
+ // mirror cloud daemon behavior so `adhdev mcp --mode ipc` recognizes
103
+ // us as a live IPC host. `/` and `/status` return the same shape.
104
+ if (url && url !== '/' && url !== '/status' && url !== '/health') {
105
+ return { statusCode: 404, body: { ok: false, error: 'not found' } };
106
+ }
107
+ return { statusCode: 200, body: payload as unknown as Record<string, unknown> };
108
+ }
109
+
110
+ /**
111
+ * Start the local IPC server. Returns a handle the caller can use to broadcast
112
+ * events and tear down at shutdown.
113
+ */
114
+ export async function startLocalIpcServer(opts: LocalIpcServerOptions): Promise<LocalIpcServerHandle> {
115
+ const logCategory = opts.logCategory || 'IPC';
116
+ const clients = new Set<WebSocket>();
117
+ let httpServer: HttpServer | null = null;
118
+ let wss: WebSocketServer | null = null;
119
+ let listening = false;
120
+
121
+ httpServer = createServer((req, res) => {
122
+ const payload: IpcStatusPayload = {
123
+ ok: true,
124
+ pid: process.pid,
125
+ wsPath: DAEMON_WS_PATH,
126
+ port: opts.port,
127
+ status: opts.buildStatusPayload(),
128
+ };
129
+ const response = buildIpcStatusHttpResponse(req.method, req.url, payload);
130
+ const body = JSON.stringify(response.body);
131
+ res.writeHead(response.statusCode, {
132
+ 'Content-Type': 'application/json',
133
+ 'Content-Length': Buffer.byteLength(body),
134
+ 'Connection': 'close',
135
+ });
136
+ res.end(body);
137
+ });
138
+
139
+ wss = new WebSocketServer({ noServer: true });
140
+ wss.on('connection', (ws) => handleConnection(ws));
141
+
142
+ httpServer.on('upgrade', (req: IncomingMessage, socket, head) => {
143
+ const wsUrl = new URL(req.url || '/', `http://${req.headers.host || '127.0.0.1'}`);
144
+ if (wsUrl.pathname !== DAEMON_WS_PATH) {
145
+ socket.write('HTTP/1.1 404 Not Found\r\n\r\n');
146
+ socket.destroy();
147
+ return;
148
+ }
149
+ wss!.handleUpgrade(req, socket, head, (ws) => {
150
+ wss!.emit('connection', ws, req);
151
+ });
152
+ });
153
+
154
+ function handleConnection(ws: WebSocket): void {
155
+ clients.add(ws);
156
+ sendWelcome(ws);
157
+ opts.onClientConnected?.(ws);
158
+
159
+ ws.on('message', (raw) => {
160
+ void handleMessage(ws, raw.toString());
161
+ });
162
+ ws.on('close', () => {
163
+ clients.delete(ws);
164
+ opts.onClientDisconnected?.(ws);
165
+ });
166
+ ws.on('error', () => {
167
+ clients.delete(ws);
168
+ opts.onClientDisconnected?.(ws);
169
+ });
170
+ }
171
+
172
+ function sendWelcome(ws: WebSocket): void {
173
+ try {
174
+ ws.send(JSON.stringify({
175
+ type: 'daemon:welcome',
176
+ payload: opts.buildWelcomePayload(),
177
+ }));
178
+ } catch (error: any) {
179
+ LOG.warn(logCategory, `Failed to send welcome: ${error?.message || error}`);
180
+ }
181
+ }
182
+
183
+ async function handleMessage(ws: WebSocket, raw: string): Promise<void> {
184
+ let msg: any;
185
+ try { msg = JSON.parse(raw); } catch { return; }
186
+ if (!msg || typeof msg !== 'object') return;
187
+
188
+ // Re-issue welcome on client request (used by reconnecting MCP servers).
189
+ if (msg.type === 'ext:register') {
190
+ sendWelcome(ws);
191
+ return;
192
+ }
193
+ if (msg.type !== 'ext:command') return;
194
+
195
+ const payload = msg.payload && typeof msg.payload === 'object' ? msg.payload : {};
196
+ const command = typeof payload.command === 'string' ? payload.command : '';
197
+ const args = payload.args && typeof payload.args === 'object'
198
+ ? payload.args as Record<string, unknown>
199
+ : {};
200
+ const requestId = typeof payload.requestId === 'string'
201
+ ? payload.requestId
202
+ : typeof payload.messageId === 'string'
203
+ ? payload.messageId
204
+ : `ipc-${Date.now()}`;
205
+
206
+ if (!command) {
207
+ ws.send(JSON.stringify({
208
+ type: 'ext:command_result',
209
+ payload: { requestId, success: false, error: 'command required' },
210
+ }));
211
+ return;
212
+ }
213
+
214
+ try {
215
+ const result = await opts.handleCommand({ command, args, requestId, ws });
216
+ ws.send(JSON.stringify({
217
+ type: 'ext:command_result',
218
+ payload: {
219
+ requestId,
220
+ success: result.success,
221
+ result: result.result,
222
+ error: result.error,
223
+ ...(result.extra || {}),
224
+ },
225
+ }));
226
+ } catch (error: any) {
227
+ ws.send(JSON.stringify({
228
+ type: 'ext:command_result',
229
+ payload: {
230
+ requestId,
231
+ success: false,
232
+ error: error?.message || String(error),
233
+ },
234
+ }));
235
+ }
236
+ }
237
+
238
+ await new Promise<void>((resolve, reject) => {
239
+ const onError = (error: Error) => {
240
+ httpServer?.off('listening', onListening);
241
+ reject(error);
242
+ };
243
+ const onListening = () => {
244
+ httpServer?.off('error', onError);
245
+ listening = true;
246
+ resolve();
247
+ };
248
+ httpServer!.once('error', onError);
249
+ httpServer!.once('listening', onListening);
250
+ httpServer!.listen(opts.port, '127.0.0.1');
251
+ });
252
+
253
+ LOG.info(logCategory, `Local IPC listening on ws://127.0.0.1:${opts.port}${DAEMON_WS_PATH}`);
254
+
255
+ return {
256
+ isListening: () => listening,
257
+ broadcast(type, payload) {
258
+ const message = JSON.stringify({ type, payload });
259
+ for (const client of clients) {
260
+ if (client.readyState !== WebSocket.OPEN) continue;
261
+ try { client.send(message); } catch { /* drop silently */ }
262
+ }
263
+ },
264
+ async close() {
265
+ for (const client of clients) {
266
+ try { client.close(); } catch { /* ignore */ }
267
+ }
268
+ clients.clear();
269
+ await new Promise<void>((resolve) => {
270
+ if (!httpServer) { resolve(); return; }
271
+ httpServer.close(() => resolve());
272
+ });
273
+ httpServer = null;
274
+ wss = null;
275
+ listening = false;
276
+ },
277
+ };
278
+ }
package/src/launch.d.ts CHANGED
@@ -18,7 +18,7 @@
18
18
  /** Kill IDE process (graceful → force) */
19
19
  export declare function killIdeProcess(ideId: string): Promise<boolean>;
20
20
  /** Check if IDE process is running */
21
- export declare function isIdeRunning(ideId: string): boolean;
21
+ export declare function isIdeRunning(ideId: string): Promise<boolean>;
22
22
  export interface LaunchOptions {
23
23
  ideId?: string;
24
24
  workspace?: string;