@adhdev/daemon-core 0.9.82-rc.48 → 0.9.82-rc.481

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 (473) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +9 -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 +68 -2
  8. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  9. package/dist/cli-adapters/cli-state-engine.d.ts +220 -0
  10. package/dist/cli-adapters/provider-cli-adapter.d.ts +126 -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 +51 -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 +137 -0
  58. package/dist/commands/router-worktree-cleanup.d.ts +133 -0
  59. package/dist/commands/router.d.ts +204 -15
  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 +136 -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 +26 -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 +57 -0
  77. package/dist/git/git-types.d.ts +2 -50
  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 +73 -17
  81. package/dist/index.js +52979 -18657
  82. package/dist/index.js.map +1 -1
  83. package/dist/index.mjs +59496 -25355
  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 +230 -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 +49 -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 +246 -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 -49
  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-init.d.ts +128 -0
  112. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
  113. package/dist/mesh/mesh-ledger.d.ts +139 -1
  114. package/dist/mesh/mesh-magi-status.d.ts +63 -0
  115. package/dist/mesh/mesh-missions.d.ts +281 -0
  116. package/dist/mesh/mesh-node-identity.d.ts +310 -0
  117. package/dist/mesh/mesh-queue-assignment.d.ts +158 -0
  118. package/dist/mesh/mesh-reconcile-acked-hold.d.ts +17 -0
  119. package/dist/mesh/mesh-reconcile-config.d.ts +6 -0
  120. package/dist/mesh/mesh-reconcile-identity.d.ts +6 -0
  121. package/dist/mesh/mesh-reconcile-loop.d.ts +80 -0
  122. package/dist/mesh/mesh-reconcile-v2-backstop.d.ts +16 -0
  123. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  124. package/dist/mesh/mesh-refine-gates.d.ts +428 -0
  125. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  126. package/dist/mesh/mesh-remote-event-pull.d.ts +15 -0
  127. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  128. package/dist/mesh/mesh-routing.d.ts +70 -0
  129. package/dist/mesh/mesh-runtime-store.d.ts +508 -0
  130. package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
  131. package/dist/mesh/mesh-task-inflight.d.ts +46 -0
  132. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  133. package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +30 -0
  134. package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
  135. package/dist/mesh/mesh-work-queue.d.ts +363 -5
  136. package/dist/mesh/preview-freshness.d.ts +28 -0
  137. package/dist/mesh/refine-config.d.ts +216 -0
  138. package/dist/mesh/worktree-bootstrap-config.d.ts +219 -0
  139. package/dist/providers/acp-provider-instance.d.ts +5 -0
  140. package/dist/providers/approval-utils.d.ts +46 -0
  141. package/dist/providers/chat-message-normalization.d.ts +58 -1
  142. package/dist/providers/cli-provider-effect-format.d.ts +30 -0
  143. package/dist/providers/cli-provider-history-dedup.d.ts +17 -0
  144. package/dist/providers/cli-provider-input-prompt.d.ts +12 -0
  145. package/dist/providers/cli-provider-instance-types.d.ts +45 -0
  146. package/dist/providers/cli-provider-instance.d.ts +406 -30
  147. package/dist/providers/cli-provider-status-helpers.d.ts +46 -0
  148. package/dist/providers/cli-provider-transcript-merge.d.ts +7 -0
  149. package/dist/providers/contracts.d.ts +149 -6
  150. package/dist/providers/external-sources.d.ts +71 -0
  151. package/dist/providers/manual-attendance.d.ts +79 -0
  152. package/dist/providers/native-history/antigravity-claim-registry.d.ts +39 -0
  153. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +137 -0
  154. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  155. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  156. package/dist/providers/native-history/constants.d.ts +12 -0
  157. package/dist/providers/native-history/dispatcher.d.ts +44 -0
  158. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  159. package/dist/providers/native-history/index.d.ts +13 -0
  160. package/dist/providers/provider-instance-manager.d.ts +29 -0
  161. package/dist/providers/provider-instance.d.ts +30 -1
  162. package/dist/providers/provider-loader.d.ts +42 -5
  163. package/dist/providers/provider-trust.d.ts +31 -0
  164. package/dist/providers/read-chat-contract.d.ts +29 -0
  165. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  166. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
  167. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  168. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  169. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  170. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  171. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  172. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  173. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  174. package/dist/providers/sdk/v1/index.d.ts +30 -0
  175. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  176. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  177. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  178. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  179. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  180. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  181. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  182. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  183. package/dist/providers/spec/adapter.d.ts +98 -0
  184. package/dist/providers/spec/cli-adapter.d.ts +223 -0
  185. package/dist/providers/spec/evaluator.d.ts +45 -0
  186. package/dist/providers/spec/fsm-driver.d.ts +449 -0
  187. package/dist/providers/spec/fsm-evaluator.d.ts +93 -0
  188. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  189. package/dist/providers/spec/fsm-types.d.ts +202 -0
  190. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  191. package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
  192. package/dist/providers/spec/route.d.ts +4 -0
  193. package/dist/providers/spec/types.d.ts +244 -0
  194. package/dist/providers/status-monitor.d.ts +7 -7
  195. package/dist/providers/transcript-v2.d.ts +176 -0
  196. package/dist/providers/types/interactive-prompt.d.ts +84 -0
  197. package/dist/providers/working-dir.d.ts +17 -0
  198. package/dist/repo-mesh-types.d.ts +629 -12
  199. package/dist/runtime-defaults.d.ts +2 -0
  200. package/dist/session-host/managed-host.d.ts +64 -0
  201. package/dist/session-host/runtime-surface.d.ts +10 -16
  202. package/dist/sessions/registry.d.ts +26 -0
  203. package/dist/shared-types-extra.d.ts +2 -4
  204. package/dist/shared-types.d.ts +98 -55
  205. package/dist/status/chat-tail-hot-sessions.d.ts +40 -0
  206. package/dist/status/normalize.d.ts +1 -1
  207. package/dist/status/normalize.js +1 -0
  208. package/dist/status/normalize.js.map +1 -1
  209. package/dist/status/normalize.mjs +1 -0
  210. package/dist/status/normalize.mjs.map +1 -1
  211. package/dist/status/reporter.d.ts +2 -0
  212. package/dist/status/snapshot.d.ts +26 -0
  213. package/dist/system/hash.d.ts +8 -0
  214. package/dist/system/load-better-sqlite3.d.ts +21 -0
  215. package/dist/types.d.ts +5 -0
  216. package/package.json +11 -4
  217. package/src/agent-stream/poller.ts +2 -3
  218. package/src/agent-stream/provider-adapter.ts +1 -1
  219. package/src/boot/daemon-lifecycle.ts +80 -14
  220. package/src/boot/process-hardening.ts +89 -0
  221. package/src/build-info.ts +73 -0
  222. package/src/chat/source-machine.ts +534 -0
  223. package/src/chat/source-resolver.ts +0 -0
  224. package/src/chat/subscription-updates.ts +20 -1
  225. package/src/cli-adapter-types.d.ts +3 -1
  226. package/src/cli-adapter-types.ts +68 -2
  227. package/src/cli-adapters/cli-script-runner.ts +421 -0
  228. package/src/cli-adapters/cli-state-engine.ts +1282 -0
  229. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  230. package/src/cli-adapters/provider-cli-adapter.ts +954 -1144
  231. package/src/cli-adapters/provider-cli-parse.d.ts +2 -0
  232. package/src/cli-adapters/provider-cli-parse.ts +19 -0
  233. package/src/cli-adapters/provider-cli-runtime.ts +56 -7
  234. package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
  235. package/src/cli-adapters/provider-cli-shared.ts +121 -11
  236. package/src/cli-adapters/pty-transport.ts +2 -1
  237. package/src/cli-adapters/pty-write-chunking.ts +106 -0
  238. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  239. package/src/cli-adapters/resolve-executable.ts +204 -0
  240. package/src/cli-adapters/session-host-transport.ts +2 -1
  241. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +63 -29
  242. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  243. package/src/cli-adapters/terminal-screen.ts +16 -81
  244. package/src/commands/chat-commands-debug-bundle.ts +398 -0
  245. package/src/commands/chat-commands-read.ts +2767 -0
  246. package/src/commands/chat-commands-scope.ts +54 -0
  247. package/src/commands/chat-commands-shared.ts +114 -0
  248. package/src/commands/chat-commands-write.ts +891 -0
  249. package/src/commands/chat-commands.ts +19 -1841
  250. package/src/commands/cli-manager.d.ts +2 -0
  251. package/src/commands/cli-manager.ts +659 -27
  252. package/src/commands/handler.ts +845 -2
  253. package/src/commands/high-family/index.ts +28 -0
  254. package/src/commands/high-family/mesh-coordinator-launch.ts +680 -0
  255. package/src/commands/high-family/mesh-events.ts +102 -0
  256. package/src/commands/high-family/mesh-status.ts +849 -0
  257. package/src/commands/high-family/types.ts +80 -0
  258. package/src/commands/low-family/coordinator-prompt.ts +72 -0
  259. package/src/commands/low-family/daemon-lifecycle.ts +120 -0
  260. package/src/commands/low-family/diagnostics.ts +57 -0
  261. package/src/commands/low-family/index.ts +37 -0
  262. package/src/commands/low-family/mesh-ledger.ts +62 -0
  263. package/src/commands/low-family/mesh-node-logs.ts +87 -0
  264. package/src/commands/low-family/notification.ts +116 -0
  265. package/src/commands/low-family/refine-config.ts +106 -0
  266. package/src/commands/low-family/session-host.ts +282 -0
  267. package/src/commands/low-family/spec-providerdev.ts +217 -0
  268. package/src/commands/low-family/status-meta.ts +112 -0
  269. package/src/commands/low-family/types.ts +39 -0
  270. package/src/commands/med-family/cli-agent.ts +241 -0
  271. package/src/commands/med-family/fast-forward.ts +230 -0
  272. package/src/commands/med-family/ide.ts +163 -0
  273. package/src/commands/med-family/index.ts +37 -0
  274. package/src/commands/med-family/mesh-crud.ts +1287 -0
  275. package/src/commands/med-family/mesh-host-pairing.ts +234 -0
  276. package/src/commands/med-family/mesh-queue.ts +167 -0
  277. package/src/commands/med-family/mesh-restart.ts +92 -0
  278. package/src/commands/med-family/types.ts +153 -0
  279. package/src/commands/mesh-coordinator.ts +334 -124
  280. package/src/commands/router-aggregate-status.ts +209 -0
  281. package/src/commands/router-mesh-session-owner.ts +114 -0
  282. package/src/commands/router-refine.ts +1711 -0
  283. package/src/commands/router-worktree-cleanup.ts +870 -0
  284. package/src/commands/router.ts +795 -4143
  285. package/src/commands/stream-commands.ts +8 -0
  286. package/src/commands/upgrade-helper.ts +310 -45
  287. package/src/config/chat-history.ts +517 -24
  288. package/src/config/config.ts +30 -0
  289. package/src/config/mesh-config.ts +632 -23
  290. package/src/config/mesh-json-config.ts +376 -0
  291. package/src/config/recent-activity.ts +8 -2
  292. package/src/config/registry-resolver.ts +100 -0
  293. package/src/config/repo-settings.ts +111 -0
  294. package/src/config/state-store.ts +55 -0
  295. package/src/daemon/dev-auto-implement.ts +3 -2
  296. package/src/daemon/dev-cli-debug.ts +10 -1
  297. package/src/daemon/dev-server.ts +0 -541
  298. package/src/detection/cli-detector.ts +94 -9
  299. package/src/detection/ide-detector.ts +55 -16
  300. package/src/detection/win32-ide-version.ts +106 -0
  301. package/src/git/change-impact-config.ts +354 -0
  302. package/src/git/git-commands.ts +112 -16
  303. package/src/git/git-diff.ts +81 -11
  304. package/src/git/git-executor.ts +12 -0
  305. package/src/git/git-status.ts +767 -48
  306. package/src/git/git-types.ts +14 -62
  307. package/src/git/git-worktree.ts +261 -4
  308. package/src/git/index.ts +17 -0
  309. package/src/index.ts +213 -13
  310. package/src/installer.d.ts +1 -1
  311. package/src/installer.ts +8 -6
  312. package/src/ipc/local-ipc-server.ts +278 -0
  313. package/src/launch.d.ts +1 -1
  314. package/src/launch.ts +37 -28
  315. package/src/logging/async-batch-writer.ts +55 -0
  316. package/src/logging/command-log.ts +7 -5
  317. package/src/logging/debug-config.ts +25 -0
  318. package/src/logging/debug-trace.ts +7 -2
  319. package/src/logging/log-redactor.ts +100 -0
  320. package/src/logging/log-tail-reader.ts +341 -0
  321. package/src/logging/logger.ts +14 -7
  322. package/src/mesh/contracts.ts +469 -0
  323. package/src/mesh/coordinator-prompt.ts +572 -34
  324. package/src/mesh/coordinator-registry.ts +121 -0
  325. package/src/mesh/mesh-active-work.ts +706 -0
  326. package/src/mesh/mesh-clone-grace.ts +68 -0
  327. package/src/mesh/mesh-completion-synthesis.ts +416 -0
  328. package/src/mesh/mesh-coordinator-config.ts +97 -0
  329. package/src/mesh/mesh-delivery-policy.ts +284 -0
  330. package/src/mesh/mesh-event-classify.ts +78 -0
  331. package/src/mesh/mesh-event-forwarding.ts +2002 -0
  332. package/src/mesh/mesh-event-trace.ts +67 -0
  333. package/src/mesh/mesh-events-coordinator.ts +32 -0
  334. package/src/mesh/mesh-events-pending.ts +1494 -0
  335. package/src/mesh/mesh-events-stale.ts +452 -0
  336. package/src/mesh/mesh-events-utils.ts +443 -0
  337. package/src/mesh/mesh-events.ts +43 -1035
  338. package/src/mesh/mesh-fast-forward.ts +856 -0
  339. package/src/mesh/mesh-host-ownership.ts +111 -0
  340. package/src/mesh/mesh-init.ts +350 -0
  341. package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
  342. package/src/mesh/mesh-ledger.ts +898 -102
  343. package/src/mesh/mesh-magi-status.ts +223 -0
  344. package/src/mesh/mesh-missions.ts +695 -0
  345. package/src/mesh/mesh-node-identity.ts +2065 -0
  346. package/src/mesh/mesh-queue-assignment.ts +2263 -0
  347. package/src/mesh/mesh-reconcile-acked-hold.ts +230 -0
  348. package/src/mesh/mesh-reconcile-config.ts +66 -0
  349. package/src/mesh/mesh-reconcile-identity.ts +103 -0
  350. package/src/mesh/mesh-reconcile-loop.ts +1473 -0
  351. package/src/mesh/mesh-reconcile-v2-backstop.ts +62 -0
  352. package/src/mesh/mesh-refine-batch.ts +205 -0
  353. package/src/mesh/mesh-refine-gates.ts +1686 -0
  354. package/src/mesh/mesh-refine-status.ts +231 -0
  355. package/src/mesh/mesh-remote-event-pull.ts +279 -0
  356. package/src/mesh/mesh-review-inbox.ts +308 -0
  357. package/src/mesh/mesh-routing.ts +291 -0
  358. package/src/mesh/mesh-runtime-store.ts +2150 -0
  359. package/src/mesh/mesh-scheduling-runtime.ts +198 -0
  360. package/src/mesh/mesh-task-inflight.ts +70 -0
  361. package/src/mesh/mesh-task-stats.ts +161 -0
  362. package/src/mesh/mesh-unresolved-forward-outbox.ts +185 -0
  363. package/src/mesh/mesh-warmup-deadline.ts +152 -0
  364. package/src/mesh/mesh-work-queue.ts +1437 -147
  365. package/src/mesh/preview-freshness.ts +163 -0
  366. package/src/mesh/refine-config.ts +423 -0
  367. package/src/mesh/worktree-bootstrap-config.ts +599 -0
  368. package/src/providers/acp-provider-instance.ts +43 -10
  369. package/src/providers/approval-utils.d.ts +5 -0
  370. package/src/providers/approval-utils.ts +100 -6
  371. package/src/providers/chat-message-normalization.ts +126 -4
  372. package/src/providers/cli-provider-effect-format.ts +53 -0
  373. package/src/providers/cli-provider-history-dedup.ts +75 -0
  374. package/src/providers/cli-provider-input-prompt.ts +133 -0
  375. package/src/providers/cli-provider-instance-types.ts +131 -0
  376. package/src/providers/cli-provider-instance.ts +2709 -499
  377. package/src/providers/cli-provider-status-helpers.ts +123 -0
  378. package/src/providers/cli-provider-transcript-merge.ts +114 -0
  379. package/src/providers/contracts.d.ts +55 -0
  380. package/src/providers/contracts.ts +160 -6
  381. package/src/providers/extension-provider-instance.ts +12 -7
  382. package/src/providers/external-sources.ts +218 -0
  383. package/src/providers/ide-provider-instance.ts +35 -12
  384. package/src/providers/manual-attendance.ts +105 -0
  385. package/src/providers/native-history/antigravity-claim-registry.ts +138 -0
  386. package/src/providers/native-history/antigravity-cli-transcript.ts +1275 -0
  387. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  388. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  389. package/src/providers/native-history/constants.ts +19 -0
  390. package/src/providers/native-history/dispatcher.ts +617 -0
  391. package/src/providers/native-history/hermes-cli-transcript.ts +312 -0
  392. package/src/providers/native-history/index.ts +30 -0
  393. package/src/providers/provider-instance-manager.ts +71 -0
  394. package/src/providers/provider-instance.ts +24 -1
  395. package/src/providers/provider-loader.ts +700 -55
  396. package/src/providers/provider-schema.ts +87 -14
  397. package/src/providers/provider-trust.ts +114 -0
  398. package/src/providers/read-chat-contract.ts +76 -16
  399. package/src/providers/sdk/README.md +49 -0
  400. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  401. package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
  402. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  403. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +261 -0
  404. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  405. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  406. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  407. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  408. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  409. package/src/providers/sdk/v1/index.ts +152 -0
  410. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  411. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  412. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  413. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +509 -0
  414. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  415. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  416. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  417. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  418. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  419. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  420. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  421. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  422. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  423. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  424. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  425. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  426. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  427. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  428. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  429. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  430. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  431. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  432. package/src/providers/sdk/v1/validators/index.ts +19 -0
  433. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  434. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  435. package/src/providers/spec/adapter.ts +246 -0
  436. package/src/providers/spec/cli-adapter.ts +1064 -0
  437. package/src/providers/spec/evaluator.ts +407 -0
  438. package/src/providers/spec/fsm-driver.ts +1528 -0
  439. package/src/providers/spec/fsm-evaluator.ts +290 -0
  440. package/src/providers/spec/fsm-loader.ts +128 -0
  441. package/src/providers/spec/fsm-types.ts +301 -0
  442. package/src/providers/spec/native-history-executor.ts +1241 -0
  443. package/src/providers/spec/pre-launch-trust.ts +104 -0
  444. package/src/providers/spec/route.ts +51 -0
  445. package/src/providers/spec/types.ts +284 -0
  446. package/src/providers/status-monitor.d.ts +7 -7
  447. package/src/providers/status-monitor.ts +37 -22
  448. package/src/providers/transcript-v2.ts +567 -0
  449. package/src/providers/types/interactive-prompt.ts +536 -0
  450. package/src/providers/version-archive.ts +64 -24
  451. package/src/providers/working-dir.ts +23 -0
  452. package/src/repo-mesh-types.ts +868 -13
  453. package/src/runtime-defaults.ts +39 -0
  454. package/src/session-host/managed-host.ts +218 -0
  455. package/src/session-host/runtime-surface.ts +20 -80
  456. package/src/sessions/registry.ts +44 -0
  457. package/src/shared-types-extra.ts +2 -4
  458. package/src/shared-types.d.ts +8 -0
  459. package/src/shared-types.ts +136 -55
  460. package/src/status/builders.ts +26 -6
  461. package/src/status/chat-tail-hot-sessions.ts +117 -2
  462. package/src/status/normalize.ts +2 -0
  463. package/src/status/reporter.ts +19 -1
  464. package/src/status/snapshot.ts +95 -26
  465. package/src/system/hash.ts +23 -0
  466. package/src/system/host-memory.ts +29 -12
  467. package/src/system/load-better-sqlite3.ts +68 -0
  468. package/src/types.ts +5 -0
  469. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  470. package/dist/mesh/mesh-sync.d.ts +0 -53
  471. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  472. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  473. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,111 @@
1
+ import { daemonIdsEquivalent } from '@adhdev/mesh-shared';
2
+ import type { RepoMeshDaemonRole, RepoMeshHostMetadata, RepoMeshHostStatus } from '../repo-mesh-types.js';
3
+
4
+ function readObject(value: unknown): Record<string, unknown> | null {
5
+ return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : null;
6
+ }
7
+
8
+ function readString(value: unknown): string | undefined {
9
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
10
+ }
11
+
12
+ export function normalizeMeshDaemonRole(value: unknown): RepoMeshDaemonRole | undefined {
13
+ return value === 'host' || value === 'member' ? value : undefined;
14
+ }
15
+
16
+ /**
17
+ * Options for resolveMeshHostStatus's read-side host-pin default.
18
+ *
19
+ * `localDaemonId` is the id of the daemon evaluating the mesh (typically
20
+ * `deps.statusInstanceId`). When the persisted `meshHost` declares `role:'host'`
21
+ * but carries NO `hostDaemonId` (the first-setup miss — a host mesh whose pin was
22
+ * never written to config), the host daemon IS this local daemon by definition, so
23
+ * we synthesize `hostDaemonId = localDaemonId` (and, when the mesh has a node
24
+ * representing this daemon, `hostNodeId`). This is the read-side default — the SSOT
25
+ * is computed from the role + the evaluating daemon's identity rather than requiring
26
+ * a config migration to backfill every already-created mesh.
27
+ *
28
+ * HARD guard: the synthesis fires ONLY for `role:'host'`. A `role:'member'` daemon
29
+ * must NEVER fill itself in as host — that would make a member falsely claim
30
+ * coordinator/queue ownership.
31
+ */
32
+ export interface ResolveMeshHostOptions {
33
+ /** Id of the daemon evaluating this mesh (e.g. deps.statusInstanceId). */
34
+ localDaemonId?: string;
35
+ }
36
+
37
+ export function resolveMeshHostStatus(mesh: unknown, opts?: ResolveMeshHostOptions): RepoMeshHostStatus {
38
+ const meshRecord = readObject(mesh);
39
+ const raw = readObject(meshRecord?.meshHost);
40
+ const role = normalizeMeshDaemonRole(raw?.role) ?? 'host';
41
+ const pairing = readObject(raw?.pairing);
42
+ const normalized: RepoMeshHostStatus = {
43
+ role,
44
+ canOwnCoordinator: role === 'host',
45
+ canOwnQueue: role === 'host',
46
+ defaulted: !raw,
47
+ };
48
+ let hostDaemonId = readString(raw?.hostDaemonId);
49
+ let hostNodeId = readString(raw?.hostNodeId);
50
+ const hostAddress = readString(raw?.hostAddress);
51
+ // HOST-MISSEED-FIRSTSETUP read-side default: a host mesh with no persisted
52
+ // hostDaemonId is hosted by THIS daemon (role:'host' is local-relative), so
53
+ // fill the pin from the evaluating daemon. Member daemons are never synthesized.
54
+ const localDaemonId = readString(opts?.localDaemonId);
55
+ if (role === 'host' && !hostDaemonId && localDaemonId) {
56
+ hostDaemonId = localDaemonId;
57
+ // Anchor hostNodeId to the node representing this local daemon, when present.
58
+ if (!hostNodeId && Array.isArray(meshRecord?.nodes)) {
59
+ const selfNode = (meshRecord!.nodes as unknown[]).find(n => {
60
+ const nodeDaemonId = readString(readObject(n)?.daemonId);
61
+ return nodeDaemonId ? daemonIdsEquivalent(nodeDaemonId, localDaemonId) : false;
62
+ });
63
+ const selfNodeId = readString(readObject(selfNode)?.id);
64
+ if (selfNodeId) hostNodeId = selfNodeId;
65
+ }
66
+ }
67
+ if (hostDaemonId) normalized.hostDaemonId = hostDaemonId;
68
+ if (hostNodeId) normalized.hostNodeId = hostNodeId;
69
+ if (hostAddress) normalized.hostAddress = hostAddress;
70
+ if (pairing) {
71
+ const status = pairing.status === 'pairing' || pairing.status === 'paired' || pairing.status === 'rejected' || pairing.status === 'revoked'
72
+ ? pairing.status
73
+ : 'not_configured';
74
+ normalized.pairing = {
75
+ status,
76
+ ...(readString(pairing.tokenId) ? { tokenId: readString(pairing.tokenId) } : {}),
77
+ ...(readString(pairing.joinedAt) ? { joinedAt: readString(pairing.joinedAt) } : {}),
78
+ ...(readString(pairing.lastPairedAt) ? { lastPairedAt: readString(pairing.lastPairedAt) } : {}),
79
+ ...(readString(pairing.lastRejectedAt) ? { lastRejectedAt: readString(pairing.lastRejectedAt) } : {}),
80
+ ...(readString(pairing.expiresAt) ? { expiresAt: readString(pairing.expiresAt) } : {}),
81
+ };
82
+ }
83
+ return normalized;
84
+ }
85
+
86
+ export function isMeshHostOwner(mesh: unknown): boolean {
87
+ return resolveMeshHostStatus(mesh).role === 'host';
88
+ }
89
+
90
+ export function buildMeshHostRequiredFailure(mesh: unknown, operation: string): Record<string, unknown> {
91
+ const meshHost = resolveMeshHostStatus(mesh);
92
+ return {
93
+ success: false,
94
+ code: 'mesh_host_required',
95
+ error: `Mesh Host daemon required for ${operation}; member daemons must pair with the host and cannot own coordinator/queue mutations.`,
96
+ meshHost,
97
+ };
98
+ }
99
+
100
+ export function requireMeshHostQueueOwner(opts?: { ownerRole?: RepoMeshDaemonRole }): void {
101
+ if (opts?.ownerRole === 'member') {
102
+ throw new Error('Mesh Host daemon required to mutate mesh queue; member daemons must use the host-owned queue.');
103
+ }
104
+ }
105
+
106
+ export function createDefaultMeshHostMetadata(): RepoMeshHostMetadata {
107
+ return {
108
+ role: 'host',
109
+ pairing: { status: 'not_configured' },
110
+ };
111
+ }
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Mesh init / onboarding helper.
3
+ *
4
+ * One-shot helper that onboards an existing git project into Repo Mesh:
5
+ * 1. suggest + write `.adhdev/refine.json` (Refinery validation config)
6
+ * 2. suggest + write `.adhdev/worktree_bootstrap.json` (worktree bootstrap config)
7
+ * 3. suggest + write `.adhdev/change-impact.json` (change-impact classification)
8
+ * 4. recommend a node providerPriority from the installed CLI providers
9
+ *
10
+ * mesh_init now covers all THREE repo-committed `.adhdev/*` config families that
11
+ * carry a suggest→validate→write engine (refine + worktree_bootstrap +
12
+ * change-impact). `.adhdev/mesh.json` (coordinator prompt + operating notes) has
13
+ * its own dedicated export/write path (export_mesh_json_config / write_mesh_json_config).
14
+ *
15
+ * Design contract (matches the rest of the mesh tooling):
16
+ * - Heuristics are suggestion/scaffold only. The written files are the
17
+ * execution source of truth; Refinery/bootstrap only ever read the saved
18
+ * config. The suggestion functions never become the execution path.
19
+ * - Writing is opt-in (`write: true`) and never clobbers an existing config
20
+ * unless `overwrite: true` is set, so re-running init on an already-onboarded
21
+ * repo is safe.
22
+ * - The providerPriority recommendation is returned, not auto-applied to the
23
+ * node policy — applying it mutates mesh policy, which is the coordinator's
24
+ * decision.
25
+ */
26
+
27
+ import { existsSync, mkdirSync, writeFileSync } from 'fs';
28
+ import { dirname, join } from 'path';
29
+ import {
30
+ MESH_REFINE_CONFIG_LOCATIONS,
31
+ loadMeshRefineConfig,
32
+ suggestMeshRefineConfig,
33
+ validateMeshRefineConfig,
34
+ type RepoMeshRefineConfig,
35
+ type RepoMeshRefineValidationCommandConfig,
36
+ } from './refine-config.js';
37
+ import {
38
+ MESH_WORKTREE_BOOTSTRAP_CONFIG_LOCATIONS,
39
+ loadMeshWorktreeBootstrapConfig,
40
+ validateMeshWorktreeBootstrapConfig,
41
+ type RepoMeshWorktreeBootstrapConfig,
42
+ } from './worktree-bootstrap-config.js';
43
+ import {
44
+ CHANGE_IMPACT_CONFIG_LOCATIONS,
45
+ loadChangeImpactConfig,
46
+ suggestChangeImpactConfig,
47
+ validateChangeImpactConfig,
48
+ type ChangeImpactConfig,
49
+ } from '../git/change-impact-config.js';
50
+ import { listMagiKindPanels } from '../config/mesh-config.js';
51
+ import type { MagiKindPanelMap } from '@adhdev/mesh-shared';
52
+ import type { CLIInfo } from '../detection/cli-detector.js';
53
+
54
+ /** Canonical write targets — the first/preferred location for each config family. */
55
+ export const MESH_INIT_REFINE_CONFIG_PATH = MESH_REFINE_CONFIG_LOCATIONS[0];
56
+ export const MESH_INIT_WORKTREE_BOOTSTRAP_CONFIG_PATH = MESH_WORKTREE_BOOTSTRAP_CONFIG_LOCATIONS[0];
57
+ export const MESH_INIT_CHANGE_IMPACT_CONFIG_PATH = CHANGE_IMPACT_CONFIG_LOCATIONS[0];
58
+
59
+ /**
60
+ * Default lockfiles whose change should invalidate a 'ready' bootstrap.
61
+ * Only paths that actually exist in the workspace are recorded as staleInputs.
62
+ */
63
+ const CANDIDATE_STALE_INPUTS = [
64
+ 'package-lock.json',
65
+ 'pnpm-lock.yaml',
66
+ 'yarn.lock',
67
+ 'bun.lockb',
68
+ 'Cargo.lock',
69
+ 'go.sum',
70
+ 'poetry.lock',
71
+ 'requirements.txt',
72
+ ];
73
+
74
+ export interface MeshInitConfigFileResult {
75
+ path: string;
76
+ relativePath: string;
77
+ written: boolean;
78
+ /** Why it was not written (already_exists / not_suggested / no change). */
79
+ skippedReason?: 'already_exists' | 'no_suggestion';
80
+ config?: RepoMeshRefineConfig | RepoMeshWorktreeBootstrapConfig | ChangeImpactConfig;
81
+ }
82
+
83
+ /**
84
+ * Serialize a validated config to disk as pretty JSON, creating `.adhdev/` as
85
+ * needed. Returns the absolute path written. Never invoked unless the caller
86
+ * opted into writing.
87
+ */
88
+ function writeConfigFile(workspace: string, relativePath: string, config: unknown): string {
89
+ const target = join(workspace, relativePath);
90
+ mkdirSync(dirname(target), { recursive: true });
91
+ writeFileSync(target, `${JSON.stringify(config, null, 2)}\n`, 'utf-8');
92
+ return target;
93
+ }
94
+
95
+ /**
96
+ * Build a worktree_bootstrap scaffold from package scripts. Mirrors
97
+ * suggestMeshRefineConfig's "scaffold only" posture: prefers an `install`/`ci`
98
+ * style script, else falls back to `npm install`, and records existing
99
+ * lockfiles as staleInputs so a base merge that changes them re-runs bootstrap.
100
+ *
101
+ * Returns undefined when there is nothing meaningful to scaffold.
102
+ */
103
+ export function suggestMeshWorktreeBootstrapConfig(
104
+ workspace: string,
105
+ ): { commands: RepoMeshRefineValidationCommandConfig[]; staleInputs: string[]; suggestedConfig?: RepoMeshWorktreeBootstrapConfig } {
106
+ const commands: RepoMeshRefineValidationCommandConfig[] = [];
107
+ const hasPackageJson = existsSync(join(workspace, 'package.json'));
108
+ const hasNpmLock = existsSync(join(workspace, 'package-lock.json'));
109
+
110
+ if (hasPackageJson) {
111
+ // `npm ci` requires a lockfile; otherwise fall back to `npm install`.
112
+ commands.push(
113
+ hasNpmLock
114
+ ? { command: 'npm', args: ['ci'] }
115
+ : { command: 'npm', args: ['install'] },
116
+ );
117
+ }
118
+
119
+ const staleInputs = CANDIDATE_STALE_INPUTS.filter((relative) => existsSync(join(workspace, relative)));
120
+
121
+ if (!commands.length) {
122
+ return { commands, staleInputs };
123
+ }
124
+
125
+ return {
126
+ commands,
127
+ staleInputs,
128
+ suggestedConfig: {
129
+ version: 1,
130
+ enabled: true,
131
+ runOnClone: true,
132
+ required: false,
133
+ commands,
134
+ ...(staleInputs.length ? { staleInputs } : {}),
135
+ },
136
+ };
137
+ }
138
+
139
+ /**
140
+ * Map detected CLI providers → an ordered node providerPriority list.
141
+ * Suggestion only: returned for the coordinator to apply to node policy, never
142
+ * written into mesh policy here.
143
+ *
144
+ * Ordering preference (most → least preferred) when installed:
145
+ * claude-cli → codex-cli → gemini-cli → everything else (stable input order).
146
+ */
147
+ const PROVIDER_PRIORITY_PREFERENCE = ['claude-cli', 'codex-cli', 'gemini-cli'];
148
+
149
+ export function suggestNodeProviderPriority(detected: CLIInfo[]): {
150
+ providerPriority: string[];
151
+ installedProviders: Array<{ id: string; displayName: string; version?: string }>;
152
+ } {
153
+ const installed = detected.filter((cli) => cli.installed);
154
+ const installedIds = installed.map((cli) => cli.id);
155
+
156
+ const preferred = PROVIDER_PRIORITY_PREFERENCE.filter((id) => installedIds.includes(id));
157
+ const rest = installedIds.filter((id) => !preferred.includes(id));
158
+ const providerPriority = [...preferred, ...rest];
159
+
160
+ return {
161
+ providerPriority,
162
+ installedProviders: installed.map((cli) => ({
163
+ id: cli.id,
164
+ displayName: cli.displayName,
165
+ ...(cli.version ? { version: cli.version } : {}),
166
+ })),
167
+ };
168
+ }
169
+
170
+ export interface RunMeshInitOptions {
171
+ /** When true, persist suggested configs to disk. Defaults to dry-run (false). */
172
+ write?: boolean;
173
+ /** When true, overwrite an existing config file. Defaults to false (never clobber). */
174
+ overwrite?: boolean;
175
+ }
176
+
177
+ /**
178
+ * A snapshot of the currently-saved config for each domain, so the coordinator can
179
+ * render a current-vs-suggested diff to the user before an init/reinit overwrite.
180
+ * This is READ-ONLY echo — every field is what is on disk / machine-local right now,
181
+ * never a suggestion. Absent domains are reported as `undefined` config.
182
+ */
183
+ export interface MeshInitCurrentConfigEcho {
184
+ /** Currently-saved `.adhdev/refine.json` (repo-committed) — undefined when absent/invalid. */
185
+ refine?: RepoMeshRefineConfig;
186
+ /** Currently-saved `.adhdev/worktree_bootstrap.json` (repo-committed). */
187
+ worktreeBootstrap?: RepoMeshWorktreeBootstrapConfig;
188
+ /** Currently-saved `.adhdev/change-impact.json` (repo-committed). */
189
+ changeImpact?: ChangeImpactConfig;
190
+ /** Per-domain source type so the coordinator can tell "absent" from "invalid". */
191
+ sourceTypes: {
192
+ refine: string;
193
+ worktreeBootstrap: string;
194
+ changeImpact: string;
195
+ };
196
+ /**
197
+ * Currently-configured MAGI kind→panel slot bindings (machine-local
198
+ * ~/.adhdev/meshes.json). Empty object when none configured. This is a
199
+ * machine-local echo — the coordinator labels it as such vs. the repo files.
200
+ */
201
+ magiKindPanels: MagiKindPanelMap;
202
+ }
203
+
204
+ export interface RunMeshInitResult {
205
+ success: true;
206
+ workspace: string;
207
+ dryRun: boolean;
208
+ refine: MeshInitConfigFileResult;
209
+ worktreeBootstrap: MeshInitConfigFileResult;
210
+ changeImpact: MeshInitConfigFileResult;
211
+ providers: {
212
+ providerPriority: string[];
213
+ installedProviders: Array<{ id: string; displayName: string; version?: string }>;
214
+ };
215
+ /**
216
+ * Read-only snapshot of the currently-saved config per domain (repo files +
217
+ * machine-local kind panels). Lets the coordinator present a current-vs-suggested
218
+ * diff to the user before any overwrite. Always populated (dry-run and write).
219
+ */
220
+ currentConfig: MeshInitCurrentConfigEcho;
221
+ note: string;
222
+ }
223
+
224
+ /**
225
+ * Orchestrate the full onboarding flow for one workspace:
226
+ * detect installed CLIs → suggest refine + bootstrap configs → (optionally)
227
+ * write them → recommend a node providerPriority.
228
+ *
229
+ * `detected` is injected (the caller resolves it via detectCLIs with its
230
+ * ProviderLoader) so this module stays free of provider-loader wiring and is
231
+ * trivially unit-testable.
232
+ */
233
+ export function runMeshInit(
234
+ mesh: any,
235
+ workspace: string,
236
+ detected: CLIInfo[],
237
+ options: RunMeshInitOptions = {},
238
+ ): RunMeshInitResult {
239
+ const write = options.write === true;
240
+ const overwrite = options.overwrite === true;
241
+
242
+ const refine = applyConfigSuggestion({
243
+ workspace,
244
+ relativePath: MESH_INIT_REFINE_CONFIG_PATH,
245
+ existing: loadMeshRefineConfig(mesh, workspace).config,
246
+ suggestedConfig: suggestMeshRefineConfig(mesh, workspace).suggestedConfig,
247
+ validate: (config) => validateMeshRefineConfig(config, MESH_INIT_REFINE_CONFIG_PATH).valid,
248
+ write,
249
+ overwrite,
250
+ });
251
+
252
+ const bootstrapSuggestion = suggestMeshWorktreeBootstrapConfig(workspace);
253
+ const worktreeBootstrap = applyConfigSuggestion({
254
+ workspace,
255
+ relativePath: MESH_INIT_WORKTREE_BOOTSTRAP_CONFIG_PATH,
256
+ existing: loadMeshWorktreeBootstrapConfig(mesh, workspace).config,
257
+ suggestedConfig: bootstrapSuggestion.suggestedConfig,
258
+ validate: (config) => validateMeshWorktreeBootstrapConfig(config, MESH_INIT_WORKTREE_BOOTSTRAP_CONFIG_PATH).valid,
259
+ write,
260
+ overwrite,
261
+ });
262
+
263
+ // change-impact classification (.adhdev/change-impact.json). suggest/validate/save
264
+ // mirror refine's engine exactly, so it drops into the same applyConfigSuggestion
265
+ // gate: existing-wins unless overwrite, dry-run by default, validated before write.
266
+ const changeImpactLoaded = loadChangeImpactConfig(workspace);
267
+ const changeImpact = applyConfigSuggestion({
268
+ workspace,
269
+ relativePath: MESH_INIT_CHANGE_IMPACT_CONFIG_PATH,
270
+ existing: changeImpactLoaded.sourceType === 'repo_file' ? changeImpactLoaded.config : undefined,
271
+ suggestedConfig: suggestChangeImpactConfig(workspace).suggestedConfig,
272
+ validate: (config) => validateChangeImpactConfig(config, MESH_INIT_CHANGE_IMPACT_CONFIG_PATH).valid,
273
+ write,
274
+ overwrite,
275
+ });
276
+
277
+ const providers = suggestNodeProviderPriority(detected);
278
+
279
+ // Read-only echo of the currently-saved config per domain so the coordinator can
280
+ // present a current-vs-suggested diff before any overwrite (init vs reinit). This
281
+ // never suggests — it reports what is on disk / machine-local right now.
282
+ const refineLoaded = loadMeshRefineConfig(mesh, workspace);
283
+ const bootstrapLoaded = loadMeshWorktreeBootstrapConfig(mesh, workspace);
284
+ let magiKindPanels: MagiKindPanelMap = {};
285
+ try {
286
+ magiKindPanels = listMagiKindPanels();
287
+ } catch {
288
+ // Machine-local config unreadable — echo an empty binding rather than failing init.
289
+ magiKindPanels = {};
290
+ }
291
+ const currentConfig: MeshInitCurrentConfigEcho = {
292
+ refine: refineLoaded.config,
293
+ worktreeBootstrap: bootstrapLoaded.config,
294
+ changeImpact: changeImpactLoaded.sourceType === 'repo_file' ? changeImpactLoaded.config : undefined,
295
+ sourceTypes: {
296
+ refine: refineLoaded.sourceType,
297
+ worktreeBootstrap: bootstrapLoaded.sourceType,
298
+ changeImpact: changeImpactLoaded.sourceType,
299
+ },
300
+ magiKindPanels,
301
+ };
302
+
303
+ return {
304
+ success: true,
305
+ workspace,
306
+ dryRun: !write,
307
+ refine,
308
+ worktreeBootstrap,
309
+ changeImpact,
310
+ providers,
311
+ currentConfig,
312
+ note: write
313
+ ? 'Configs written to disk are the execution source of truth; suggestions are scaffold and only take effect once saved. providerPriority is a recommendation — apply it to node policy via clone/policy update. currentConfig echoes what was on disk before this run.'
314
+ : 'Dry-run: no files written. Re-run with write=true to persist the suggested configs. Heuristic suggestions never execute until saved as repo config. Use currentConfig to diff current-vs-suggested before overwriting.',
315
+ };
316
+ }
317
+
318
+ /**
319
+ * Shared decision logic for a single config file: keep an existing config,
320
+ * skip when nothing was suggested, or (when allowed) write the validated
321
+ * suggestion to disk.
322
+ */
323
+ function applyConfigSuggestion(input: {
324
+ workspace: string;
325
+ relativePath: string;
326
+ existing?: unknown;
327
+ suggestedConfig?: RepoMeshRefineConfig | RepoMeshWorktreeBootstrapConfig | ChangeImpactConfig;
328
+ validate: (config: unknown) => boolean;
329
+ write: boolean;
330
+ overwrite: boolean;
331
+ }): MeshInitConfigFileResult {
332
+ const { workspace, relativePath, existing, suggestedConfig, validate, write, overwrite } = input;
333
+ const absolute = join(workspace, relativePath);
334
+
335
+ // An existing, valid config wins unless the caller explicitly opts into overwrite.
336
+ if (existing !== undefined && !overwrite) {
337
+ return { path: absolute, relativePath, written: false, skippedReason: 'already_exists', config: existing as any };
338
+ }
339
+
340
+ if (!suggestedConfig || !validate(suggestedConfig)) {
341
+ return { path: absolute, relativePath, written: false, skippedReason: 'no_suggestion' };
342
+ }
343
+
344
+ if (!write) {
345
+ return { path: absolute, relativePath, written: false, config: suggestedConfig };
346
+ }
347
+
348
+ const writtenPath = writeConfigFile(workspace, relativePath, suggestedConfig);
349
+ return { path: writtenPath, relativePath, written: true, config: suggestedConfig };
350
+ }
@@ -1,5 +1,12 @@
1
1
  import type { AppendRemoteLedgerResult, MeshLedgerSlice, MeshLedgerSummary } from './mesh-ledger.js';
2
2
 
3
+ /** Minimal ledger slice shape accepted by buildMeshLedgerReplicaEvidence. Covers both JSONL and SQLite slices. */
4
+ export interface AnyLedgerSlice {
5
+ entries: Array<{ id: string; meshId: string; timestamp: string; kind: string; nodeId?: string | null; sessionId?: string | null; providerType?: string | null; payload: unknown }>;
6
+ cursor: { afterId: string | null; nextAfterId: string | null; limit: number; hasMore: boolean };
7
+ summary?: MeshLedgerSummary;
8
+ }
9
+
3
10
  export type MeshLedgerReplicaStatus = 'local' | 'queried' | 'imported' | 'failed';
4
11
 
5
12
  export interface MeshLedgerReplicaEvidence {
@@ -25,9 +32,8 @@ export interface MeshLedgerReconciliationEvidence {
25
32
  meshId: string;
26
33
  generatedAt: string;
27
34
  sourceOfTruth: {
28
- kind: 'coordinator_local_jsonl';
35
+ kind: 'coordinator_local_sqlite';
29
36
  p2pOnly: true;
30
- cloudD1LedgerSync: false;
31
37
  notes: string;
32
38
  };
33
39
  replicas: MeshLedgerReplicaEvidence[];
@@ -47,7 +53,7 @@ export interface MeshLedgerReconciliationEvidence {
47
53
  };
48
54
  }
49
55
 
50
- function lastTimestamp(slice?: MeshLedgerSlice): string | null {
56
+ function lastTimestamp(slice?: AnyLedgerSlice): string | null {
51
57
  const entries = Array.isArray(slice?.entries) ? slice!.entries : [];
52
58
  return entries.length ? entries[entries.length - 1].timestamp : null;
53
59
  }
@@ -56,7 +62,7 @@ export function buildMeshLedgerReplicaEvidence(args: {
56
62
  nodeId: string;
57
63
  daemonId?: string;
58
64
  transport: 'local' | 'p2p_datachannel';
59
- slice?: MeshLedgerSlice;
65
+ slice?: AnyLedgerSlice;
60
66
  importResult?: AppendRemoteLedgerResult;
61
67
  status?: MeshLedgerReplicaStatus;
62
68
  error?: string;
@@ -91,10 +97,9 @@ export function buildMeshLedgerReconciliationEvidence(meshId: string, replicas:
91
97
  meshId,
92
98
  generatedAt: new Date().toISOString(),
93
99
  sourceOfTruth: {
94
- kind: 'coordinator_local_jsonl',
100
+ kind: 'coordinator_local_sqlite',
95
101
  p2pOnly: true,
96
- cloudD1LedgerSync: false,
97
- notes: 'Coordinator reconciles bounded slices from daemon-local JSONL ledgers over P2P DataChannel; Cloud/D1 is not a ledger source of truth.',
102
+ notes: 'Coordinator reconciles bounded slices from daemon-local SQLite event ledgers (mesh_event_ledger table) over P2P DataChannel; Cloud/D1 is not a ledger source of truth.',
98
103
  },
99
104
  replicas,
100
105
  totals: {