@openrig/cli 0.0.1 → 0.1.0

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 (843) hide show
  1. package/daemon/assets/claude-statusline-context.cjs +73 -0
  2. package/daemon/assets/guidance/using-openrig.md +46 -0
  3. package/daemon/dist/adapters/claude-code-adapter.d.ts +67 -0
  4. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -0
  5. package/daemon/dist/adapters/claude-code-adapter.js +316 -0
  6. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -0
  7. package/daemon/dist/adapters/claude-resume.d.ts +23 -0
  8. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -0
  9. package/daemon/dist/adapters/claude-resume.js +90 -0
  10. package/daemon/dist/adapters/claude-resume.js.map +1 -0
  11. package/daemon/dist/adapters/cmux-transport.d.ts +9 -0
  12. package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -0
  13. package/daemon/dist/adapters/cmux-transport.js +64 -0
  14. package/daemon/dist/adapters/cmux-transport.js.map +1 -0
  15. package/daemon/dist/adapters/cmux.d.ts +50 -0
  16. package/daemon/dist/adapters/cmux.d.ts.map +1 -0
  17. package/daemon/dist/adapters/cmux.js +144 -0
  18. package/daemon/dist/adapters/cmux.js.map +1 -0
  19. package/daemon/dist/adapters/codex-resume.d.ts +10 -0
  20. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -0
  21. package/daemon/dist/adapters/codex-resume.js +44 -0
  22. package/daemon/dist/adapters/codex-resume.js.map +1 -0
  23. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +53 -0
  24. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -0
  25. package/daemon/dist/adapters/codex-runtime-adapter.js +255 -0
  26. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -0
  27. package/daemon/dist/adapters/shell-quote.d.ts +3 -0
  28. package/daemon/dist/adapters/shell-quote.d.ts.map +1 -0
  29. package/daemon/dist/adapters/shell-quote.js +5 -0
  30. package/daemon/dist/adapters/shell-quote.js.map +1 -0
  31. package/daemon/dist/adapters/terminal-adapter.d.ts +20 -0
  32. package/daemon/dist/adapters/terminal-adapter.d.ts.map +1 -0
  33. package/daemon/dist/adapters/terminal-adapter.js +25 -0
  34. package/daemon/dist/adapters/terminal-adapter.js.map +1 -0
  35. package/daemon/dist/adapters/tmux-exec.d.ts +7 -0
  36. package/daemon/dist/adapters/tmux-exec.d.ts.map +1 -0
  37. package/daemon/dist/adapters/tmux-exec.js +12 -0
  38. package/daemon/dist/adapters/tmux-exec.js.map +1 -0
  39. package/daemon/dist/adapters/tmux.d.ts +55 -0
  40. package/daemon/dist/adapters/tmux.d.ts.map +1 -0
  41. package/daemon/dist/adapters/tmux.js +244 -0
  42. package/daemon/dist/adapters/tmux.js.map +1 -0
  43. package/daemon/dist/db/connection.d.ts +7 -0
  44. package/daemon/dist/db/connection.d.ts.map +1 -0
  45. package/daemon/dist/db/connection.js +12 -0
  46. package/daemon/dist/db/connection.js.map +1 -0
  47. package/daemon/dist/db/migrate.d.ts +12 -0
  48. package/daemon/dist/db/migrate.d.ts.map +1 -0
  49. package/daemon/dist/db/migrate.js +27 -0
  50. package/daemon/dist/db/migrate.js.map +1 -0
  51. package/daemon/dist/db/migrations/001_core_schema.d.ts +3 -0
  52. package/daemon/dist/db/migrations/001_core_schema.d.ts.map +1 -0
  53. package/daemon/dist/db/migrations/001_core_schema.js +50 -0
  54. package/daemon/dist/db/migrations/001_core_schema.js.map +1 -0
  55. package/daemon/dist/db/migrations/002_bindings_sessions.d.ts +3 -0
  56. package/daemon/dist/db/migrations/002_bindings_sessions.d.ts.map +1 -0
  57. package/daemon/dist/db/migrations/002_bindings_sessions.js +29 -0
  58. package/daemon/dist/db/migrations/002_bindings_sessions.js.map +1 -0
  59. package/daemon/dist/db/migrations/003_events.d.ts +3 -0
  60. package/daemon/dist/db/migrations/003_events.d.ts.map +1 -0
  61. package/daemon/dist/db/migrations/003_events.js +22 -0
  62. package/daemon/dist/db/migrations/003_events.js.map +1 -0
  63. package/daemon/dist/db/migrations/004_snapshots.d.ts +3 -0
  64. package/daemon/dist/db/migrations/004_snapshots.d.ts.map +1 -0
  65. package/daemon/dist/db/migrations/004_snapshots.js +19 -0
  66. package/daemon/dist/db/migrations/004_snapshots.js.map +1 -0
  67. package/daemon/dist/db/migrations/005_checkpoints.d.ts +3 -0
  68. package/daemon/dist/db/migrations/005_checkpoints.d.ts.map +1 -0
  69. package/daemon/dist/db/migrations/005_checkpoints.js +22 -0
  70. package/daemon/dist/db/migrations/005_checkpoints.js.map +1 -0
  71. package/daemon/dist/db/migrations/006_resume_metadata.d.ts +3 -0
  72. package/daemon/dist/db/migrations/006_resume_metadata.d.ts.map +1 -0
  73. package/daemon/dist/db/migrations/006_resume_metadata.js +14 -0
  74. package/daemon/dist/db/migrations/006_resume_metadata.js.map +1 -0
  75. package/daemon/dist/db/migrations/007_node_spec_fields.d.ts +3 -0
  76. package/daemon/dist/db/migrations/007_node_spec_fields.d.ts.map +1 -0
  77. package/daemon/dist/db/migrations/007_node_spec_fields.js +11 -0
  78. package/daemon/dist/db/migrations/007_node_spec_fields.js.map +1 -0
  79. package/daemon/dist/db/migrations/008_packages.d.ts +3 -0
  80. package/daemon/dist/db/migrations/008_packages.d.ts.map +1 -0
  81. package/daemon/dist/db/migrations/008_packages.js +17 -0
  82. package/daemon/dist/db/migrations/008_packages.js.map +1 -0
  83. package/daemon/dist/db/migrations/009_install_journal.d.ts +3 -0
  84. package/daemon/dist/db/migrations/009_install_journal.d.ts.map +1 -0
  85. package/daemon/dist/db/migrations/009_install_journal.js +35 -0
  86. package/daemon/dist/db/migrations/009_install_journal.js.map +1 -0
  87. package/daemon/dist/db/migrations/010_journal_seq.d.ts +3 -0
  88. package/daemon/dist/db/migrations/010_journal_seq.d.ts.map +1 -0
  89. package/daemon/dist/db/migrations/010_journal_seq.js +36 -0
  90. package/daemon/dist/db/migrations/010_journal_seq.js.map +1 -0
  91. package/daemon/dist/db/migrations/011_bootstrap.d.ts +3 -0
  92. package/daemon/dist/db/migrations/011_bootstrap.d.ts.map +1 -0
  93. package/daemon/dist/db/migrations/011_bootstrap.js +43 -0
  94. package/daemon/dist/db/migrations/011_bootstrap.js.map +1 -0
  95. package/daemon/dist/db/migrations/012_discovery.d.ts +3 -0
  96. package/daemon/dist/db/migrations/012_discovery.d.ts.map +1 -0
  97. package/daemon/dist/db/migrations/012_discovery.js +28 -0
  98. package/daemon/dist/db/migrations/012_discovery.js.map +1 -0
  99. package/daemon/dist/db/migrations/013_discovery_fk_fix.d.ts +3 -0
  100. package/daemon/dist/db/migrations/013_discovery_fk_fix.d.ts.map +1 -0
  101. package/daemon/dist/db/migrations/013_discovery_fk_fix.js +37 -0
  102. package/daemon/dist/db/migrations/013_discovery_fk_fix.js.map +1 -0
  103. package/daemon/dist/db/migrations/014_agentspec_reboot.d.ts +3 -0
  104. package/daemon/dist/db/migrations/014_agentspec_reboot.d.ts.map +1 -0
  105. package/daemon/dist/db/migrations/014_agentspec_reboot.js +47 -0
  106. package/daemon/dist/db/migrations/014_agentspec_reboot.js.map +1 -0
  107. package/daemon/dist/db/migrations/015_startup_context.d.ts +3 -0
  108. package/daemon/dist/db/migrations/015_startup_context.d.ts.map +1 -0
  109. package/daemon/dist/db/migrations/015_startup_context.js +15 -0
  110. package/daemon/dist/db/migrations/015_startup_context.js.map +1 -0
  111. package/daemon/dist/db/migrations/016_chat_messages.d.ts +3 -0
  112. package/daemon/dist/db/migrations/016_chat_messages.d.ts.map +1 -0
  113. package/daemon/dist/db/migrations/016_chat_messages.js +17 -0
  114. package/daemon/dist/db/migrations/016_chat_messages.js.map +1 -0
  115. package/daemon/dist/db/migrations/017_pod_namespace.d.ts +3 -0
  116. package/daemon/dist/db/migrations/017_pod_namespace.d.ts.map +1 -0
  117. package/daemon/dist/db/migrations/017_pod_namespace.js +9 -0
  118. package/daemon/dist/db/migrations/017_pod_namespace.js.map +1 -0
  119. package/daemon/dist/db/migrations/018_context_usage.d.ts +3 -0
  120. package/daemon/dist/db/migrations/018_context_usage.d.ts.map +1 -0
  121. package/daemon/dist/db/migrations/018_context_usage.js +23 -0
  122. package/daemon/dist/db/migrations/018_context_usage.js.map +1 -0
  123. package/daemon/dist/db/migrations/019_external_cli_attachment.d.ts +3 -0
  124. package/daemon/dist/db/migrations/019_external_cli_attachment.d.ts.map +1 -0
  125. package/daemon/dist/db/migrations/019_external_cli_attachment.js +8 -0
  126. package/daemon/dist/db/migrations/019_external_cli_attachment.js.map +1 -0
  127. package/daemon/dist/domain/agent-manifest.d.ts +21 -0
  128. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -0
  129. package/daemon/dist/domain/agent-manifest.js +322 -0
  130. package/daemon/dist/domain/agent-manifest.js.map +1 -0
  131. package/daemon/dist/domain/agent-preflight.d.ts +12 -0
  132. package/daemon/dist/domain/agent-preflight.d.ts.map +1 -0
  133. package/daemon/dist/domain/agent-preflight.js +37 -0
  134. package/daemon/dist/domain/agent-preflight.js.map +1 -0
  135. package/daemon/dist/domain/agent-resolver.d.ts +66 -0
  136. package/daemon/dist/domain/agent-resolver.d.ts.map +1 -0
  137. package/daemon/dist/domain/agent-resolver.js +193 -0
  138. package/daemon/dist/domain/agent-resolver.js.map +1 -0
  139. package/daemon/dist/domain/ask-service.d.ts +57 -0
  140. package/daemon/dist/domain/ask-service.d.ts.map +1 -0
  141. package/daemon/dist/domain/ask-service.js +129 -0
  142. package/daemon/dist/domain/ask-service.js.map +1 -0
  143. package/daemon/dist/domain/bootstrap-orchestrator.d.ts +76 -0
  144. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -0
  145. package/daemon/dist/domain/bootstrap-orchestrator.js +510 -0
  146. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -0
  147. package/daemon/dist/domain/bootstrap-repository.d.ts +23 -0
  148. package/daemon/dist/domain/bootstrap-repository.d.ts.map +1 -0
  149. package/daemon/dist/domain/bootstrap-repository.js +78 -0
  150. package/daemon/dist/domain/bootstrap-repository.js.map +1 -0
  151. package/daemon/dist/domain/bootstrap-types.d.ts +43 -0
  152. package/daemon/dist/domain/bootstrap-types.d.ts.map +1 -0
  153. package/daemon/dist/domain/bootstrap-types.js +2 -0
  154. package/daemon/dist/domain/bootstrap-types.js.map +1 -0
  155. package/daemon/dist/domain/bundle-archive.d.ts +23 -0
  156. package/daemon/dist/domain/bundle-archive.d.ts.map +1 -0
  157. package/daemon/dist/domain/bundle-archive.js +156 -0
  158. package/daemon/dist/domain/bundle-archive.js.map +1 -0
  159. package/daemon/dist/domain/bundle-assembler.d.ts +34 -0
  160. package/daemon/dist/domain/bundle-assembler.d.ts.map +1 -0
  161. package/daemon/dist/domain/bundle-assembler.js +86 -0
  162. package/daemon/dist/domain/bundle-assembler.js.map +1 -0
  163. package/daemon/dist/domain/bundle-integrity.d.ts +30 -0
  164. package/daemon/dist/domain/bundle-integrity.d.ts.map +1 -0
  165. package/daemon/dist/domain/bundle-integrity.js +120 -0
  166. package/daemon/dist/domain/bundle-integrity.js.map +1 -0
  167. package/daemon/dist/domain/bundle-source-resolver.d.ts +44 -0
  168. package/daemon/dist/domain/bundle-source-resolver.d.ts.map +1 -0
  169. package/daemon/dist/domain/bundle-source-resolver.js +158 -0
  170. package/daemon/dist/domain/bundle-source-resolver.js.map +1 -0
  171. package/daemon/dist/domain/bundle-types.d.ts +78 -0
  172. package/daemon/dist/domain/bundle-types.d.ts.map +1 -0
  173. package/daemon/dist/domain/bundle-types.js +218 -0
  174. package/daemon/dist/domain/bundle-types.js.map +1 -0
  175. package/daemon/dist/domain/chat-repository.d.ts +26 -0
  176. package/daemon/dist/domain/chat-repository.d.ts.map +1 -0
  177. package/daemon/dist/domain/chat-repository.js +88 -0
  178. package/daemon/dist/domain/chat-repository.js.map +1 -0
  179. package/daemon/dist/domain/checkpoint-store.d.ts +24 -0
  180. package/daemon/dist/domain/checkpoint-store.d.ts.map +1 -0
  181. package/daemon/dist/domain/checkpoint-store.js +55 -0
  182. package/daemon/dist/domain/checkpoint-store.js.map +1 -0
  183. package/daemon/dist/domain/claim-service.d.ts +68 -0
  184. package/daemon/dist/domain/claim-service.d.ts.map +1 -0
  185. package/daemon/dist/domain/claim-service.js +250 -0
  186. package/daemon/dist/domain/claim-service.js.map +1 -0
  187. package/daemon/dist/domain/codex-thread-id.d.ts +4 -0
  188. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -0
  189. package/daemon/dist/domain/codex-thread-id.js +65 -0
  190. package/daemon/dist/domain/codex-thread-id.js.map +1 -0
  191. package/daemon/dist/domain/conflict-detector.d.ts +33 -0
  192. package/daemon/dist/domain/conflict-detector.d.ts.map +1 -0
  193. package/daemon/dist/domain/conflict-detector.js +138 -0
  194. package/daemon/dist/domain/conflict-detector.js.map +1 -0
  195. package/daemon/dist/domain/context-monitor.d.ts +30 -0
  196. package/daemon/dist/domain/context-monitor.d.ts.map +1 -0
  197. package/daemon/dist/domain/context-monitor.js +71 -0
  198. package/daemon/dist/domain/context-monitor.js.map +1 -0
  199. package/daemon/dist/domain/context-usage-store.d.ts +57 -0
  200. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -0
  201. package/daemon/dist/domain/context-usage-store.js +183 -0
  202. package/daemon/dist/domain/context-usage-store.js.map +1 -0
  203. package/daemon/dist/domain/demo-rig-selector.d.ts +11 -0
  204. package/daemon/dist/domain/demo-rig-selector.d.ts.map +1 -0
  205. package/daemon/dist/domain/demo-rig-selector.js +21 -0
  206. package/daemon/dist/domain/demo-rig-selector.js.map +1 -0
  207. package/daemon/dist/domain/discovery-coordinator.d.ts +28 -0
  208. package/daemon/dist/domain/discovery-coordinator.d.ts.map +1 -0
  209. package/daemon/dist/domain/discovery-coordinator.js +107 -0
  210. package/daemon/dist/domain/discovery-coordinator.js.map +1 -0
  211. package/daemon/dist/domain/discovery-repository.d.ts +31 -0
  212. package/daemon/dist/domain/discovery-repository.d.ts.map +1 -0
  213. package/daemon/dist/domain/discovery-repository.js +75 -0
  214. package/daemon/dist/domain/discovery-repository.js.map +1 -0
  215. package/daemon/dist/domain/discovery-types.d.ts +27 -0
  216. package/daemon/dist/domain/discovery-types.d.ts.map +1 -0
  217. package/daemon/dist/domain/discovery-types.js +2 -0
  218. package/daemon/dist/domain/discovery-types.js.map +1 -0
  219. package/daemon/dist/domain/draft-rig-generator.d.ts +7 -0
  220. package/daemon/dist/domain/draft-rig-generator.d.ts.map +1 -0
  221. package/daemon/dist/domain/draft-rig-generator.js +87 -0
  222. package/daemon/dist/domain/draft-rig-generator.js.map +1 -0
  223. package/daemon/dist/domain/errors.d.ts +4 -0
  224. package/daemon/dist/domain/errors.d.ts.map +1 -0
  225. package/daemon/dist/domain/errors.js +7 -0
  226. package/daemon/dist/domain/errors.js.map +1 -0
  227. package/daemon/dist/domain/event-bus.d.ts +32 -0
  228. package/daemon/dist/domain/event-bus.d.ts.map +1 -0
  229. package/daemon/dist/domain/event-bus.js +82 -0
  230. package/daemon/dist/domain/event-bus.js.map +1 -0
  231. package/daemon/dist/domain/external-install-executor.d.ts +47 -0
  232. package/daemon/dist/domain/external-install-executor.d.ts.map +1 -0
  233. package/daemon/dist/domain/external-install-executor.js +87 -0
  234. package/daemon/dist/domain/external-install-executor.js.map +1 -0
  235. package/daemon/dist/domain/external-install-planner.d.ts +41 -0
  236. package/daemon/dist/domain/external-install-planner.d.ts.map +1 -0
  237. package/daemon/dist/domain/external-install-planner.js +83 -0
  238. package/daemon/dist/domain/external-install-planner.js.map +1 -0
  239. package/daemon/dist/domain/graph-projection.d.ts +60 -0
  240. package/daemon/dist/domain/graph-projection.d.ts.map +1 -0
  241. package/daemon/dist/domain/graph-projection.js +95 -0
  242. package/daemon/dist/domain/graph-projection.js.map +1 -0
  243. package/daemon/dist/domain/history-query.d.ts +34 -0
  244. package/daemon/dist/domain/history-query.d.ts.map +1 -0
  245. package/daemon/dist/domain/history-query.js +119 -0
  246. package/daemon/dist/domain/history-query.js.map +1 -0
  247. package/daemon/dist/domain/install-engine.d.ts +33 -0
  248. package/daemon/dist/domain/install-engine.d.ts.map +1 -0
  249. package/daemon/dist/domain/install-engine.js +154 -0
  250. package/daemon/dist/domain/install-engine.js.map +1 -0
  251. package/daemon/dist/domain/install-planner.d.ts +38 -0
  252. package/daemon/dist/domain/install-planner.d.ts.map +1 -0
  253. package/daemon/dist/domain/install-planner.js +243 -0
  254. package/daemon/dist/domain/install-planner.js.map +1 -0
  255. package/daemon/dist/domain/install-policy.d.ts +20 -0
  256. package/daemon/dist/domain/install-policy.d.ts.map +1 -0
  257. package/daemon/dist/domain/install-policy.js +56 -0
  258. package/daemon/dist/domain/install-policy.js.map +1 -0
  259. package/daemon/dist/domain/install-repository.d.ts +55 -0
  260. package/daemon/dist/domain/install-repository.d.ts.map +1 -0
  261. package/daemon/dist/domain/install-repository.js +122 -0
  262. package/daemon/dist/domain/install-repository.js.map +1 -0
  263. package/daemon/dist/domain/install-verifier.d.ts +31 -0
  264. package/daemon/dist/domain/install-verifier.d.ts.map +1 -0
  265. package/daemon/dist/domain/install-verifier.js +141 -0
  266. package/daemon/dist/domain/install-verifier.js.map +1 -0
  267. package/daemon/dist/domain/native-resume-probe.d.ts +19 -0
  268. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -0
  269. package/daemon/dist/domain/native-resume-probe.js +113 -0
  270. package/daemon/dist/domain/native-resume-probe.js.map +1 -0
  271. package/daemon/dist/domain/node-inventory.d.ts +33 -0
  272. package/daemon/dist/domain/node-inventory.d.ts.map +1 -0
  273. package/daemon/dist/domain/node-inventory.js +314 -0
  274. package/daemon/dist/domain/node-inventory.js.map +1 -0
  275. package/daemon/dist/domain/node-launcher.d.ts +42 -0
  276. package/daemon/dist/domain/node-launcher.d.ts.map +1 -0
  277. package/daemon/dist/domain/node-launcher.js +122 -0
  278. package/daemon/dist/domain/node-launcher.js.map +1 -0
  279. package/daemon/dist/domain/package-install-service.d.ts +64 -0
  280. package/daemon/dist/domain/package-install-service.d.ts.map +1 -0
  281. package/daemon/dist/domain/package-install-service.js +80 -0
  282. package/daemon/dist/domain/package-install-service.js.map +1 -0
  283. package/daemon/dist/domain/package-manifest.d.ts +93 -0
  284. package/daemon/dist/domain/package-manifest.d.ts.map +1 -0
  285. package/daemon/dist/domain/package-manifest.js +407 -0
  286. package/daemon/dist/domain/package-manifest.js.map +1 -0
  287. package/daemon/dist/domain/package-repository.d.ts +33 -0
  288. package/daemon/dist/domain/package-repository.d.ts.map +1 -0
  289. package/daemon/dist/domain/package-repository.js +63 -0
  290. package/daemon/dist/domain/package-repository.js.map +1 -0
  291. package/daemon/dist/domain/package-resolve-helper.d.ts +19 -0
  292. package/daemon/dist/domain/package-resolve-helper.d.ts.map +1 -0
  293. package/daemon/dist/domain/package-resolve-helper.js +47 -0
  294. package/daemon/dist/domain/package-resolve-helper.js.map +1 -0
  295. package/daemon/dist/domain/package-resolver.d.ts +19 -0
  296. package/daemon/dist/domain/package-resolver.d.ts.map +1 -0
  297. package/daemon/dist/domain/package-resolver.js +35 -0
  298. package/daemon/dist/domain/package-resolver.js.map +1 -0
  299. package/daemon/dist/domain/path-safety.d.ts +8 -0
  300. package/daemon/dist/domain/path-safety.d.ts.map +1 -0
  301. package/daemon/dist/domain/path-safety.js +24 -0
  302. package/daemon/dist/domain/path-safety.js.map +1 -0
  303. package/daemon/dist/domain/pod-bundle-assembler.d.ts +43 -0
  304. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -0
  305. package/daemon/dist/domain/pod-bundle-assembler.js +198 -0
  306. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -0
  307. package/daemon/dist/domain/pod-repository.d.ts +47 -0
  308. package/daemon/dist/domain/pod-repository.d.ts.map +1 -0
  309. package/daemon/dist/domain/pod-repository.js +90 -0
  310. package/daemon/dist/domain/pod-repository.js.map +1 -0
  311. package/daemon/dist/domain/profile-resolver.d.ts +51 -0
  312. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -0
  313. package/daemon/dist/domain/profile-resolver.js +201 -0
  314. package/daemon/dist/domain/profile-resolver.js.map +1 -0
  315. package/daemon/dist/domain/projection-planner.d.ts +54 -0
  316. package/daemon/dist/domain/projection-planner.d.ts.map +1 -0
  317. package/daemon/dist/domain/projection-planner.js +128 -0
  318. package/daemon/dist/domain/projection-planner.js.map +1 -0
  319. package/daemon/dist/domain/ps-projection.d.ts +22 -0
  320. package/daemon/dist/domain/ps-projection.d.ts.map +1 -0
  321. package/daemon/dist/domain/ps-projection.js +65 -0
  322. package/daemon/dist/domain/ps-projection.js.map +1 -0
  323. package/daemon/dist/domain/reconciler.d.ts +28 -0
  324. package/daemon/dist/domain/reconciler.d.ts.map +1 -0
  325. package/daemon/dist/domain/reconciler.js +66 -0
  326. package/daemon/dist/domain/reconciler.js.map +1 -0
  327. package/daemon/dist/domain/requirements-probe.d.ts +63 -0
  328. package/daemon/dist/domain/requirements-probe.d.ts.map +1 -0
  329. package/daemon/dist/domain/requirements-probe.js +172 -0
  330. package/daemon/dist/domain/requirements-probe.js.map +1 -0
  331. package/daemon/dist/domain/restore-orchestrator.d.ts +59 -0
  332. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -0
  333. package/daemon/dist/domain/restore-orchestrator.js +477 -0
  334. package/daemon/dist/domain/restore-orchestrator.js.map +1 -0
  335. package/daemon/dist/domain/resume-metadata-refresher.d.ts +42 -0
  336. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -0
  337. package/daemon/dist/domain/resume-metadata-refresher.js +167 -0
  338. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -0
  339. package/daemon/dist/domain/rig-expansion-service.d.ts +27 -0
  340. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -0
  341. package/daemon/dist/domain/rig-expansion-service.js +121 -0
  342. package/daemon/dist/domain/rig-expansion-service.js.map +1 -0
  343. package/daemon/dist/domain/rig-lifecycle-service.d.ts +100 -0
  344. package/daemon/dist/domain/rig-lifecycle-service.d.ts.map +1 -0
  345. package/daemon/dist/domain/rig-lifecycle-service.js +418 -0
  346. package/daemon/dist/domain/rig-lifecycle-service.js.map +1 -0
  347. package/daemon/dist/domain/rig-repository.d.ts +44 -0
  348. package/daemon/dist/domain/rig-repository.d.ts.map +1 -0
  349. package/daemon/dist/domain/rig-repository.js +165 -0
  350. package/daemon/dist/domain/rig-repository.js.map +1 -0
  351. package/daemon/dist/domain/rig-teardown.d.ts +51 -0
  352. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -0
  353. package/daemon/dist/domain/rig-teardown.js +142 -0
  354. package/daemon/dist/domain/rig-teardown.js.map +1 -0
  355. package/daemon/dist/domain/rigspec-codec.d.ts +17 -0
  356. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -0
  357. package/daemon/dist/domain/rigspec-codec.js +141 -0
  358. package/daemon/dist/domain/rigspec-codec.js.map +1 -0
  359. package/daemon/dist/domain/rigspec-exporter.d.ts +21 -0
  360. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -0
  361. package/daemon/dist/domain/rigspec-exporter.js +186 -0
  362. package/daemon/dist/domain/rigspec-exporter.js.map +1 -0
  363. package/daemon/dist/domain/rigspec-instantiator.d.ts +133 -0
  364. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -0
  365. package/daemon/dist/domain/rigspec-instantiator.js +1104 -0
  366. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -0
  367. package/daemon/dist/domain/rigspec-preflight.d.ts +38 -0
  368. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -0
  369. package/daemon/dist/domain/rigspec-preflight.js +198 -0
  370. package/daemon/dist/domain/rigspec-preflight.js.map +1 -0
  371. package/daemon/dist/domain/rigspec-schema.d.ts +25 -0
  372. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -0
  373. package/daemon/dist/domain/rigspec-schema.js +516 -0
  374. package/daemon/dist/domain/rigspec-schema.js.map +1 -0
  375. package/daemon/dist/domain/role-resolver.d.ts +21 -0
  376. package/daemon/dist/domain/role-resolver.d.ts.map +1 -0
  377. package/daemon/dist/domain/role-resolver.js +83 -0
  378. package/daemon/dist/domain/role-resolver.js.map +1 -0
  379. package/daemon/dist/domain/runtime-adapter.d.ts +74 -0
  380. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -0
  381. package/daemon/dist/domain/runtime-adapter.js +14 -0
  382. package/daemon/dist/domain/runtime-adapter.js.map +1 -0
  383. package/daemon/dist/domain/runtime-verifier.d.ts +45 -0
  384. package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -0
  385. package/daemon/dist/domain/runtime-verifier.js +148 -0
  386. package/daemon/dist/domain/runtime-verifier.js.map +1 -0
  387. package/daemon/dist/domain/self-attach-service.d.ts +90 -0
  388. package/daemon/dist/domain/self-attach-service.d.ts.map +1 -0
  389. package/daemon/dist/domain/self-attach-service.js +202 -0
  390. package/daemon/dist/domain/self-attach-service.js.map +1 -0
  391. package/daemon/dist/domain/session-enricher.d.ts +29 -0
  392. package/daemon/dist/domain/session-enricher.d.ts.map +1 -0
  393. package/daemon/dist/domain/session-enricher.js +54 -0
  394. package/daemon/dist/domain/session-enricher.js.map +1 -0
  395. package/daemon/dist/domain/session-fingerprinter.d.ts +53 -0
  396. package/daemon/dist/domain/session-fingerprinter.d.ts.map +1 -0
  397. package/daemon/dist/domain/session-fingerprinter.js +118 -0
  398. package/daemon/dist/domain/session-fingerprinter.js.map +1 -0
  399. package/daemon/dist/domain/session-name.d.ts +28 -0
  400. package/daemon/dist/domain/session-name.d.ts.map +1 -0
  401. package/daemon/dist/domain/session-name.js +85 -0
  402. package/daemon/dist/domain/session-name.js.map +1 -0
  403. package/daemon/dist/domain/session-registry.d.ts +32 -0
  404. package/daemon/dist/domain/session-registry.d.ts.map +1 -0
  405. package/daemon/dist/domain/session-registry.js +142 -0
  406. package/daemon/dist/domain/session-registry.js.map +1 -0
  407. package/daemon/dist/domain/session-transport.d.ts +78 -0
  408. package/daemon/dist/domain/session-transport.d.ts.map +1 -0
  409. package/daemon/dist/domain/session-transport.js +428 -0
  410. package/daemon/dist/domain/session-transport.js.map +1 -0
  411. package/daemon/dist/domain/snapshot-capture.d.ts +27 -0
  412. package/daemon/dist/domain/snapshot-capture.d.ts.map +1 -0
  413. package/daemon/dist/domain/snapshot-capture.js +89 -0
  414. package/daemon/dist/domain/snapshot-capture.js.map +1 -0
  415. package/daemon/dist/domain/snapshot-repository.d.ts +19 -0
  416. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -0
  417. package/daemon/dist/domain/snapshot-repository.js +77 -0
  418. package/daemon/dist/domain/snapshot-repository.js.map +1 -0
  419. package/daemon/dist/domain/spec-library-service.d.ts +45 -0
  420. package/daemon/dist/domain/spec-library-service.d.ts.map +1 -0
  421. package/daemon/dist/domain/spec-library-service.js +197 -0
  422. package/daemon/dist/domain/spec-library-service.js.map +1 -0
  423. package/daemon/dist/domain/spec-review-service.d.ts +104 -0
  424. package/daemon/dist/domain/spec-review-service.d.ts.map +1 -0
  425. package/daemon/dist/domain/spec-review-service.js +220 -0
  426. package/daemon/dist/domain/spec-review-service.js.map +1 -0
  427. package/daemon/dist/domain/spec-validation-service.d.ts +21 -0
  428. package/daemon/dist/domain/spec-validation-service.d.ts.map +1 -0
  429. package/daemon/dist/domain/spec-validation-service.js +34 -0
  430. package/daemon/dist/domain/spec-validation-service.js.map +1 -0
  431. package/daemon/dist/domain/startup-orchestrator.d.ts +83 -0
  432. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -0
  433. package/daemon/dist/domain/startup-orchestrator.js +252 -0
  434. package/daemon/dist/domain/startup-orchestrator.js.map +1 -0
  435. package/daemon/dist/domain/startup-resolver.d.ts +28 -0
  436. package/daemon/dist/domain/startup-resolver.d.ts.map +1 -0
  437. package/daemon/dist/domain/startup-resolver.js +57 -0
  438. package/daemon/dist/domain/startup-resolver.js.map +1 -0
  439. package/daemon/dist/domain/startup-validation.d.ts +31 -0
  440. package/daemon/dist/domain/startup-validation.d.ts.map +1 -0
  441. package/daemon/dist/domain/startup-validation.js +155 -0
  442. package/daemon/dist/domain/startup-validation.js.map +1 -0
  443. package/daemon/dist/domain/tmux-discovery-scanner.d.ts +29 -0
  444. package/daemon/dist/domain/tmux-discovery-scanner.d.ts.map +1 -0
  445. package/daemon/dist/domain/tmux-discovery-scanner.js +50 -0
  446. package/daemon/dist/domain/tmux-discovery-scanner.js.map +1 -0
  447. package/daemon/dist/domain/transcript-capture.d.ts +7 -0
  448. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -0
  449. package/daemon/dist/domain/transcript-capture.js +15 -0
  450. package/daemon/dist/domain/transcript-capture.js.map +1 -0
  451. package/daemon/dist/domain/transcript-store.d.ts +19 -0
  452. package/daemon/dist/domain/transcript-store.d.ts.map +1 -0
  453. package/daemon/dist/domain/transcript-store.js +280 -0
  454. package/daemon/dist/domain/transcript-store.js.map +1 -0
  455. package/daemon/dist/domain/types.d.ts +720 -0
  456. package/daemon/dist/domain/types.d.ts.map +1 -0
  457. package/daemon/dist/domain/types.js +2 -0
  458. package/daemon/dist/domain/types.js.map +1 -0
  459. package/daemon/dist/domain/up-command-router.d.ts +25 -0
  460. package/daemon/dist/domain/up-command-router.d.ts.map +1 -0
  461. package/daemon/dist/domain/up-command-router.js +116 -0
  462. package/daemon/dist/domain/up-command-router.js.map +1 -0
  463. package/daemon/dist/domain/whoami-service.d.ts +86 -0
  464. package/daemon/dist/domain/whoami-service.d.ts.map +1 -0
  465. package/daemon/dist/domain/whoami-service.js +194 -0
  466. package/daemon/dist/domain/whoami-service.js.map +1 -0
  467. package/daemon/dist/index.d.ts +2 -0
  468. package/daemon/dist/index.d.ts.map +1 -0
  469. package/daemon/dist/index.js +21 -0
  470. package/daemon/dist/index.js.map +1 -0
  471. package/daemon/dist/openrig-compat.d.ts +9 -0
  472. package/daemon/dist/openrig-compat.d.ts.map +1 -0
  473. package/daemon/dist/openrig-compat.js +57 -0
  474. package/daemon/dist/openrig-compat.js.map +1 -0
  475. package/daemon/dist/routes/adapters.d.ts +3 -0
  476. package/daemon/dist/routes/adapters.d.ts.map +1 -0
  477. package/daemon/dist/routes/adapters.js +20 -0
  478. package/daemon/dist/routes/adapters.js.map +1 -0
  479. package/daemon/dist/routes/agents.d.ts +3 -0
  480. package/daemon/dist/routes/agents.d.ts.map +1 -0
  481. package/daemon/dist/routes/agents.js +13 -0
  482. package/daemon/dist/routes/agents.js.map +1 -0
  483. package/daemon/dist/routes/ask.d.ts +3 -0
  484. package/daemon/dist/routes/ask.d.ts.map +1 -0
  485. package/daemon/dist/routes/ask.js +15 -0
  486. package/daemon/dist/routes/ask.js.map +1 -0
  487. package/daemon/dist/routes/bootstrap.d.ts +3 -0
  488. package/daemon/dist/routes/bootstrap.d.ts.map +1 -0
  489. package/daemon/dist/routes/bootstrap.js +137 -0
  490. package/daemon/dist/routes/bootstrap.js.map +1 -0
  491. package/daemon/dist/routes/bundles.d.ts +3 -0
  492. package/daemon/dist/routes/bundles.d.ts.map +1 -0
  493. package/daemon/dist/routes/bundles.js +334 -0
  494. package/daemon/dist/routes/bundles.js.map +1 -0
  495. package/daemon/dist/routes/chat.d.ts +3 -0
  496. package/daemon/dist/routes/chat.d.ts.map +1 -0
  497. package/daemon/dist/routes/chat.js +127 -0
  498. package/daemon/dist/routes/chat.js.map +1 -0
  499. package/daemon/dist/routes/discovery.d.ts +3 -0
  500. package/daemon/dist/routes/discovery.d.ts.map +1 -0
  501. package/daemon/dist/routes/discovery.js +200 -0
  502. package/daemon/dist/routes/discovery.js.map +1 -0
  503. package/daemon/dist/routes/down.d.ts +3 -0
  504. package/daemon/dist/routes/down.d.ts.map +1 -0
  505. package/daemon/dist/routes/down.js +55 -0
  506. package/daemon/dist/routes/down.js.map +1 -0
  507. package/daemon/dist/routes/events.d.ts +3 -0
  508. package/daemon/dist/routes/events.d.ts.map +1 -0
  509. package/daemon/dist/routes/events.js +71 -0
  510. package/daemon/dist/routes/events.js.map +1 -0
  511. package/daemon/dist/routes/packages.d.ts +3 -0
  512. package/daemon/dist/routes/packages.d.ts.map +1 -0
  513. package/daemon/dist/routes/packages.js +341 -0
  514. package/daemon/dist/routes/packages.js.map +1 -0
  515. package/daemon/dist/routes/ps.d.ts +3 -0
  516. package/daemon/dist/routes/ps.d.ts.map +1 -0
  517. package/daemon/dist/routes/ps.js +7 -0
  518. package/daemon/dist/routes/ps.js.map +1 -0
  519. package/daemon/dist/routes/rigs.d.ts +3 -0
  520. package/daemon/dist/routes/rigs.d.ts.map +1 -0
  521. package/daemon/dist/routes/rigs.js +329 -0
  522. package/daemon/dist/routes/rigs.js.map +1 -0
  523. package/daemon/dist/routes/rigspec.d.ts +6 -0
  524. package/daemon/dist/routes/rigspec.d.ts.map +1 -0
  525. package/daemon/dist/routes/rigspec.js +182 -0
  526. package/daemon/dist/routes/rigspec.js.map +1 -0
  527. package/daemon/dist/routes/sessions.d.ts +5 -0
  528. package/daemon/dist/routes/sessions.d.ts.map +1 -0
  529. package/daemon/dist/routes/sessions.js +125 -0
  530. package/daemon/dist/routes/sessions.js.map +1 -0
  531. package/daemon/dist/routes/snapshots.d.ts +4 -0
  532. package/daemon/dist/routes/snapshots.d.ts.map +1 -0
  533. package/daemon/dist/routes/snapshots.js +77 -0
  534. package/daemon/dist/routes/snapshots.js.map +1 -0
  535. package/daemon/dist/routes/spec-library.d.ts +3 -0
  536. package/daemon/dist/routes/spec-library.d.ts.map +1 -0
  537. package/daemon/dist/routes/spec-library.js +95 -0
  538. package/daemon/dist/routes/spec-library.js.map +1 -0
  539. package/daemon/dist/routes/spec-review.d.ts +3 -0
  540. package/daemon/dist/routes/spec-review.d.ts.map +1 -0
  541. package/daemon/dist/routes/spec-review.js +41 -0
  542. package/daemon/dist/routes/spec-review.js.map +1 -0
  543. package/daemon/dist/routes/transcripts.d.ts +3 -0
  544. package/daemon/dist/routes/transcripts.d.ts.map +1 -0
  545. package/daemon/dist/routes/transcripts.js +130 -0
  546. package/daemon/dist/routes/transcripts.js.map +1 -0
  547. package/daemon/dist/routes/transport.d.ts +3 -0
  548. package/daemon/dist/routes/transport.d.ts.map +1 -0
  549. package/daemon/dist/routes/transport.js +89 -0
  550. package/daemon/dist/routes/transport.js.map +1 -0
  551. package/daemon/dist/routes/up.d.ts +3 -0
  552. package/daemon/dist/routes/up.d.ts.map +1 -0
  553. package/daemon/dist/routes/up.js +175 -0
  554. package/daemon/dist/routes/up.js.map +1 -0
  555. package/daemon/dist/routes/whoami.d.ts +3 -0
  556. package/daemon/dist/routes/whoami.d.ts.map +1 -0
  557. package/daemon/dist/routes/whoami.js +33 -0
  558. package/daemon/dist/routes/whoami.js.map +1 -0
  559. package/daemon/dist/seed.d.ts +2 -0
  560. package/daemon/dist/seed.d.ts.map +1 -0
  561. package/daemon/dist/seed.js +41 -0
  562. package/daemon/dist/seed.js.map +1 -0
  563. package/daemon/dist/server.d.ts +78 -0
  564. package/daemon/dist/server.d.ts.map +1 -0
  565. package/daemon/dist/server.js +206 -0
  566. package/daemon/dist/server.js.map +1 -0
  567. package/daemon/dist/startup.d.ts +21 -0
  568. package/daemon/dist/startup.d.ts.map +1 -0
  569. package/daemon/dist/startup.js +348 -0
  570. package/daemon/dist/startup.js.map +1 -0
  571. package/daemon/specs/adversarial-review.yaml +40 -0
  572. package/daemon/specs/agents/analyst/agent.yaml +21 -0
  573. package/daemon/specs/agents/analyst/guidance/role.md +27 -0
  574. package/daemon/specs/agents/impl/agent.yaml +21 -0
  575. package/daemon/specs/agents/impl/guidance/role.md +27 -0
  576. package/daemon/specs/agents/lead/agent.yaml +21 -0
  577. package/daemon/specs/agents/lead/guidance/role.md +33 -0
  578. package/daemon/specs/agents/qa/agent.yaml +21 -0
  579. package/daemon/specs/agents/qa/guidance/role.md +26 -0
  580. package/daemon/specs/agents/reviewer/agent.yaml +21 -0
  581. package/daemon/specs/agents/reviewer/guidance/role.md +26 -0
  582. package/daemon/specs/agents/synthesizer/agent.yaml +21 -0
  583. package/daemon/specs/agents/synthesizer/guidance/role.md +26 -0
  584. package/daemon/specs/implementation-pair.yaml +27 -0
  585. package/daemon/specs/research-team.yaml +40 -0
  586. package/dist/bin-wrapper.d.ts +5 -0
  587. package/dist/bin-wrapper.d.ts.map +1 -0
  588. package/dist/bin-wrapper.js +32 -0
  589. package/dist/bin-wrapper.js.map +1 -0
  590. package/dist/client.d.ts +21 -0
  591. package/dist/client.d.ts.map +1 -0
  592. package/dist/client.js +76 -0
  593. package/dist/client.js.map +1 -0
  594. package/dist/commands/adopt.d.ts +6 -0
  595. package/dist/commands/adopt.d.ts.map +1 -0
  596. package/dist/commands/adopt.js +212 -0
  597. package/dist/commands/adopt.js.map +1 -0
  598. package/dist/commands/agent.d.ts +7 -0
  599. package/dist/commands/agent.d.ts.map +1 -0
  600. package/dist/commands/agent.js +79 -0
  601. package/dist/commands/agent.js.map +1 -0
  602. package/dist/commands/ask.d.ts +4 -0
  603. package/dist/commands/ask.d.ts.map +1 -0
  604. package/dist/commands/ask.js +92 -0
  605. package/dist/commands/ask.js.map +1 -0
  606. package/dist/commands/attach.d.ts +14 -0
  607. package/dist/commands/attach.d.ts.map +1 -0
  608. package/dist/commands/attach.js +146 -0
  609. package/dist/commands/attach.js.map +1 -0
  610. package/dist/commands/bind.d.ts +4 -0
  611. package/dist/commands/bind.d.ts.map +1 -0
  612. package/dist/commands/bind.js +70 -0
  613. package/dist/commands/bind.js.map +1 -0
  614. package/dist/commands/bootstrap.d.ts +4 -0
  615. package/dist/commands/bootstrap.d.ts.map +1 -0
  616. package/dist/commands/bootstrap.js +141 -0
  617. package/dist/commands/bootstrap.js.map +1 -0
  618. package/dist/commands/broadcast.d.ts +4 -0
  619. package/dist/commands/broadcast.d.ts.map +1 -0
  620. package/dist/commands/broadcast.js +70 -0
  621. package/dist/commands/broadcast.js.map +1 -0
  622. package/dist/commands/bundle.d.ts +4 -0
  623. package/dist/commands/bundle.d.ts.map +1 -0
  624. package/dist/commands/bundle.js +129 -0
  625. package/dist/commands/bundle.js.map +1 -0
  626. package/dist/commands/capture.d.ts +4 -0
  627. package/dist/commands/capture.d.ts.map +1 -0
  628. package/dist/commands/capture.js +76 -0
  629. package/dist/commands/capture.js.map +1 -0
  630. package/dist/commands/chatroom.d.ts +4 -0
  631. package/dist/commands/chatroom.d.ts.map +1 -0
  632. package/dist/commands/chatroom.js +214 -0
  633. package/dist/commands/chatroom.js.map +1 -0
  634. package/dist/commands/claim.d.ts +4 -0
  635. package/dist/commands/claim.d.ts.map +1 -0
  636. package/dist/commands/claim.js +40 -0
  637. package/dist/commands/claim.js.map +1 -0
  638. package/dist/commands/config.d.ts +3 -0
  639. package/dist/commands/config.d.ts.map +1 -0
  640. package/dist/commands/config.js +74 -0
  641. package/dist/commands/config.js.map +1 -0
  642. package/dist/commands/daemon.d.ts +11 -0
  643. package/dist/commands/daemon.d.ts.map +1 -0
  644. package/dist/commands/daemon.js +167 -0
  645. package/dist/commands/daemon.js.map +1 -0
  646. package/dist/commands/discover.d.ts +4 -0
  647. package/dist/commands/discover.d.ts.map +1 -0
  648. package/dist/commands/discover.js +60 -0
  649. package/dist/commands/discover.js.map +1 -0
  650. package/dist/commands/doctor.d.ts +25 -0
  651. package/dist/commands/doctor.d.ts.map +1 -0
  652. package/dist/commands/doctor.js +155 -0
  653. package/dist/commands/doctor.js.map +1 -0
  654. package/dist/commands/down.d.ts +9 -0
  655. package/dist/commands/down.d.ts.map +1 -0
  656. package/dist/commands/down.js +96 -0
  657. package/dist/commands/down.js.map +1 -0
  658. package/dist/commands/expand.d.ts +4 -0
  659. package/dist/commands/expand.d.ts.map +1 -0
  660. package/dist/commands/expand.js +98 -0
  661. package/dist/commands/expand.js.map +1 -0
  662. package/dist/commands/export.d.ts +7 -0
  663. package/dist/commands/export.d.ts.map +1 -0
  664. package/dist/commands/export.js +46 -0
  665. package/dist/commands/export.js.map +1 -0
  666. package/dist/commands/import.d.ts +7 -0
  667. package/dist/commands/import.d.ts.map +1 -0
  668. package/dist/commands/import.js +157 -0
  669. package/dist/commands/import.js.map +1 -0
  670. package/dist/commands/launch.d.ts +4 -0
  671. package/dist/commands/launch.d.ts.map +1 -0
  672. package/dist/commands/launch.js +45 -0
  673. package/dist/commands/launch.js.map +1 -0
  674. package/dist/commands/mcp.d.ts +9 -0
  675. package/dist/commands/mcp.d.ts.map +1 -0
  676. package/dist/commands/mcp.js +52 -0
  677. package/dist/commands/mcp.js.map +1 -0
  678. package/dist/commands/package.d.ts +4 -0
  679. package/dist/commands/package.d.ts.map +1 -0
  680. package/dist/commands/package.js +234 -0
  681. package/dist/commands/package.js.map +1 -0
  682. package/dist/commands/preflight.d.ts +11 -0
  683. package/dist/commands/preflight.d.ts.map +1 -0
  684. package/dist/commands/preflight.js +53 -0
  685. package/dist/commands/preflight.js.map +1 -0
  686. package/dist/commands/ps.d.ts +9 -0
  687. package/dist/commands/ps.d.ts.map +1 -0
  688. package/dist/commands/ps.js +129 -0
  689. package/dist/commands/ps.js.map +1 -0
  690. package/dist/commands/release.d.ts +4 -0
  691. package/dist/commands/release.d.ts.map +1 -0
  692. package/dist/commands/release.js +65 -0
  693. package/dist/commands/release.js.map +1 -0
  694. package/dist/commands/remove.d.ts +4 -0
  695. package/dist/commands/remove.d.ts.map +1 -0
  696. package/dist/commands/remove.js +43 -0
  697. package/dist/commands/remove.js.map +1 -0
  698. package/dist/commands/requirements.d.ts +4 -0
  699. package/dist/commands/requirements.d.ts.map +1 -0
  700. package/dist/commands/requirements.js +66 -0
  701. package/dist/commands/requirements.js.map +1 -0
  702. package/dist/commands/restore.d.ts +4 -0
  703. package/dist/commands/restore.d.ts.map +1 -0
  704. package/dist/commands/restore.js +57 -0
  705. package/dist/commands/restore.js.map +1 -0
  706. package/dist/commands/rig.d.ts +7 -0
  707. package/dist/commands/rig.d.ts.map +1 -0
  708. package/dist/commands/rig.js +139 -0
  709. package/dist/commands/rig.js.map +1 -0
  710. package/dist/commands/send.d.ts +4 -0
  711. package/dist/commands/send.d.ts.map +1 -0
  712. package/dist/commands/send.js +59 -0
  713. package/dist/commands/send.js.map +1 -0
  714. package/dist/commands/shrink.d.ts +4 -0
  715. package/dist/commands/shrink.d.ts.map +1 -0
  716. package/dist/commands/shrink.js +53 -0
  717. package/dist/commands/shrink.js.map +1 -0
  718. package/dist/commands/snapshot.d.ts +4 -0
  719. package/dist/commands/snapshot.d.ts.map +1 -0
  720. package/dist/commands/snapshot.js +74 -0
  721. package/dist/commands/snapshot.js.map +1 -0
  722. package/dist/commands/specs.d.ts +22 -0
  723. package/dist/commands/specs.d.ts.map +1 -0
  724. package/dist/commands/specs.js +260 -0
  725. package/dist/commands/specs.js.map +1 -0
  726. package/dist/commands/status.d.ts +9 -0
  727. package/dist/commands/status.d.ts.map +1 -0
  728. package/dist/commands/status.js +68 -0
  729. package/dist/commands/status.js.map +1 -0
  730. package/dist/commands/transcript.d.ts +4 -0
  731. package/dist/commands/transcript.d.ts.map +1 -0
  732. package/dist/commands/transcript.js +77 -0
  733. package/dist/commands/transcript.js.map +1 -0
  734. package/dist/commands/ui.d.ts +8 -0
  735. package/dist/commands/ui.d.ts.map +1 -0
  736. package/dist/commands/ui.js +57 -0
  737. package/dist/commands/ui.js.map +1 -0
  738. package/dist/commands/unclaim.d.ts +4 -0
  739. package/dist/commands/unclaim.d.ts.map +1 -0
  740. package/dist/commands/unclaim.js +42 -0
  741. package/dist/commands/unclaim.js.map +1 -0
  742. package/dist/commands/up.d.ts +7 -0
  743. package/dist/commands/up.d.ts.map +1 -0
  744. package/dist/commands/up.js +195 -0
  745. package/dist/commands/up.js.map +1 -0
  746. package/dist/commands/whoami.d.ts +24 -0
  747. package/dist/commands/whoami.d.ts.map +1 -0
  748. package/dist/commands/whoami.js +196 -0
  749. package/dist/commands/whoami.js.map +1 -0
  750. package/dist/config-store.d.ts +23 -0
  751. package/dist/config-store.d.ts.map +1 -0
  752. package/dist/config-store.js +141 -0
  753. package/dist/config-store.js.map +1 -0
  754. package/dist/daemon-lifecycle.d.ts +60 -0
  755. package/dist/daemon-lifecycle.d.ts.map +1 -0
  756. package/dist/daemon-lifecycle.js +225 -0
  757. package/dist/daemon-lifecycle.js.map +1 -0
  758. package/dist/index.d.ts +51 -0
  759. package/dist/index.d.ts.map +1 -0
  760. package/dist/index.js +103 -0
  761. package/dist/index.js.map +1 -0
  762. package/dist/mcp-server.d.ts +9 -0
  763. package/dist/mcp-server.d.ts.map +1 -0
  764. package/dist/mcp-server.js +308 -0
  765. package/dist/mcp-server.js.map +1 -0
  766. package/dist/openrig-compat.d.ts +9 -0
  767. package/dist/openrig-compat.d.ts.map +1 -0
  768. package/dist/openrig-compat.js +57 -0
  769. package/dist/openrig-compat.js.map +1 -0
  770. package/dist/system-preflight.d.ts +36 -0
  771. package/dist/system-preflight.d.ts.map +1 -0
  772. package/dist/system-preflight.js +136 -0
  773. package/dist/system-preflight.js.map +1 -0
  774. package/package.json +46 -3
  775. package/ui/dist/assets/index-B09doO8H.js +139 -0
  776. package/ui/dist/assets/index-BNKPfdVk.css +1 -0
  777. package/ui/dist/assets/index-kPvgyhoC.js +224 -0
  778. package/ui/dist/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
  779. package/ui/dist/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
  780. package/ui/dist/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
  781. package/ui/dist/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
  782. package/ui/dist/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
  783. package/ui/dist/assets/inter-cyrillic-600-normal-CWCymEST.woff2 +0 -0
  784. package/ui/dist/assets/inter-cyrillic-700-normal-CjBOestx.woff2 +0 -0
  785. package/ui/dist/assets/inter-cyrillic-700-normal-DrXBdSj3.woff +0 -0
  786. package/ui/dist/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
  787. package/ui/dist/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
  788. package/ui/dist/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
  789. package/ui/dist/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
  790. package/ui/dist/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
  791. package/ui/dist/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2 +0 -0
  792. package/ui/dist/assets/inter-cyrillic-ext-700-normal-BjwYoWNd.woff2 +0 -0
  793. package/ui/dist/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff +0 -0
  794. package/ui/dist/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
  795. package/ui/dist/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
  796. package/ui/dist/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
  797. package/ui/dist/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
  798. package/ui/dist/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
  799. package/ui/dist/assets/inter-greek-600-normal-plRanbMR.woff2 +0 -0
  800. package/ui/dist/assets/inter-greek-700-normal-BUv2fZ6O.woff +0 -0
  801. package/ui/dist/assets/inter-greek-700-normal-C3JjAnD8.woff2 +0 -0
  802. package/ui/dist/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
  803. package/ui/dist/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
  804. package/ui/dist/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
  805. package/ui/dist/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
  806. package/ui/dist/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
  807. package/ui/dist/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2 +0 -0
  808. package/ui/dist/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff +0 -0
  809. package/ui/dist/assets/inter-greek-ext-700-normal-qfdV9bQt.woff2 +0 -0
  810. package/ui/dist/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  811. package/ui/dist/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
  812. package/ui/dist/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  813. package/ui/dist/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  814. package/ui/dist/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
  815. package/ui/dist/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
  816. package/ui/dist/assets/inter-latin-700-normal-BLAVimhd.woff +0 -0
  817. package/ui/dist/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
  818. package/ui/dist/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
  819. package/ui/dist/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
  820. package/ui/dist/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
  821. package/ui/dist/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
  822. package/ui/dist/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
  823. package/ui/dist/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2 +0 -0
  824. package/ui/dist/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2 +0 -0
  825. package/ui/dist/assets/inter-latin-ext-700-normal-TidjK2hL.woff +0 -0
  826. package/ui/dist/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
  827. package/ui/dist/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  828. package/ui/dist/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  829. package/ui/dist/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
  830. package/ui/dist/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
  831. package/ui/dist/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  832. package/ui/dist/assets/inter-vietnamese-700-normal-BZaoP0fm.woff +0 -0
  833. package/ui/dist/assets/inter-vietnamese-700-normal-DlLaEgI2.woff2 +0 -0
  834. package/ui/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  835. package/ui/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  836. package/ui/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  837. package/ui/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  838. package/ui/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  839. package/ui/dist/assets/space-grotesk-latin-ext-wght-normal-D9tNdqV9.woff2 +0 -0
  840. package/ui/dist/assets/space-grotesk-latin-wght-normal-BhU9QXUp.woff2 +0 -0
  841. package/ui/dist/assets/space-grotesk-vietnamese-wght-normal-D0rl6rjA.woff2 +0 -0
  842. package/ui/dist/index.html +14 -0
  843. package/index.js +0 -2
@@ -0,0 +1,138 @@
1
+ import { createHash } from "node:crypto";
2
+ function hashContent(content) {
3
+ return createHash("sha256").update(content).digest("hex");
4
+ }
5
+ const MANAGED_BLOCK_START = (packageName) => `<!-- BEGIN RIGGED MANAGED BLOCK: ${packageName} -->`;
6
+ const MANAGED_BLOCK_END = (packageName) => `<!-- END RIGGED MANAGED BLOCK: ${packageName} -->`;
7
+ /**
8
+ * Refines an InstallPlan with content-aware conflict detection.
9
+ * - Skills/agents: same content = no-op, different content = conflict with hashes
10
+ * - Guidance: detects existing managed blocks for this specific package
11
+ * - Deferred entries (hooks/mcp/requirements) pass through unchanged
12
+ */
13
+ export function detectConflicts(plan, fs) {
14
+ const actionable = [];
15
+ const conflicts = [];
16
+ const deferred = [];
17
+ const noOps = [];
18
+ const allEntries = [];
19
+ for (const entry of plan.entries) {
20
+ // Deferred entries pass through
21
+ if (entry.deferred) {
22
+ deferred.push(entry);
23
+ allEntries.push(entry);
24
+ continue;
25
+ }
26
+ // No sourcePath (e.g., requirements already deferred, but just in case)
27
+ if (!entry.sourcePath) {
28
+ actionable.push(entry);
29
+ allEntries.push(entry);
30
+ continue;
31
+ }
32
+ if (entry.exportType === "skill" || entry.exportType === "agent") {
33
+ if (!entry.conflict) {
34
+ // Target doesn't exist — safe_projection
35
+ actionable.push(entry);
36
+ allEntries.push(entry);
37
+ continue;
38
+ }
39
+ // Target exists — compare content
40
+ try {
41
+ const sourceContent = fs.readFile(entry.sourcePath);
42
+ const targetContent = fs.readFile(entry.targetPath);
43
+ const sourceHash = hashContent(sourceContent);
44
+ const existingHash = hashContent(targetContent);
45
+ if (sourceHash === existingHash) {
46
+ // Same content — no-op
47
+ noOps.push({ ...entry, conflict: undefined });
48
+ allEntries.push({ ...entry, conflict: undefined });
49
+ }
50
+ else {
51
+ // Different content — enriched conflict
52
+ const enriched = {
53
+ ...entry,
54
+ conflict: {
55
+ existingPath: entry.targetPath,
56
+ existingHash,
57
+ sourceHash,
58
+ reason: `${entry.exportType} '${entry.exportName}' exists with different content`,
59
+ },
60
+ };
61
+ conflicts.push(enriched);
62
+ allEntries.push(enriched);
63
+ }
64
+ }
65
+ catch {
66
+ // Can't read files — treat as conflict
67
+ conflicts.push(entry);
68
+ allEntries.push(entry);
69
+ }
70
+ }
71
+ else if (entry.exportType === "guidance") {
72
+ // Check for existing managed block
73
+ if (entry.classification === "managed_merge" && fs.exists(entry.targetPath)) {
74
+ const targetContent = fs.readFile(entry.targetPath);
75
+ const beginMarker = MANAGED_BLOCK_START(plan.packageName);
76
+ const endMarker = MANAGED_BLOCK_END(plan.packageName);
77
+ const hasExistingBlock = targetContent.includes(beginMarker) && targetContent.includes(endMarker);
78
+ const refined = {
79
+ ...entry,
80
+ guidanceMeta: { hasExistingBlock },
81
+ };
82
+ actionable.push(refined);
83
+ allEntries.push(refined);
84
+ }
85
+ else {
86
+ actionable.push(entry);
87
+ allEntries.push(entry);
88
+ }
89
+ }
90
+ else {
91
+ actionable.push(entry);
92
+ allEntries.push(entry);
93
+ }
94
+ }
95
+ return {
96
+ ...plan,
97
+ entries: allEntries,
98
+ actionable,
99
+ deferred,
100
+ conflicts,
101
+ noOps,
102
+ };
103
+ }
104
+ /**
105
+ * Classify a resource projection using hash-based comparison.
106
+ * Returns projection-specific classification states (not legacy ActionClassification).
107
+ * @param sourcePath - absolute path to source resource
108
+ * @param targetPath - absolute path to target location
109
+ * @param category - resource category
110
+ * @param mergeStrategy - guidance merge strategy if applicable
111
+ * @param fsOps - filesystem operations
112
+ * @returns ProjectionClassification
113
+ */
114
+ export function classifyResourceProjection(sourcePath, targetPath, category, mergeStrategy, fsOps) {
115
+ // Guidance with managed_block: always managed_merge
116
+ if (category === "guidance" && mergeStrategy === "managed_block") {
117
+ return "managed_merge";
118
+ }
119
+ // Target doesn't exist: safe projection
120
+ if (!fsOps.exists(targetPath)) {
121
+ return "safe_projection";
122
+ }
123
+ // Target exists: compare hashes
124
+ try {
125
+ const sourceContent = fsOps.readFile(sourcePath);
126
+ const targetContent = fsOps.readFile(targetPath);
127
+ const sourceHash = hashContent(sourceContent);
128
+ const targetHash = hashContent(targetContent);
129
+ if (sourceHash === targetHash) {
130
+ return "no_op";
131
+ }
132
+ return "hash_conflict";
133
+ }
134
+ catch {
135
+ return "hash_conflict";
136
+ }
137
+ }
138
+ //# sourceMappingURL=conflict-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-detector.js","sourceRoot":"","sources":["../../src/domain/conflict-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { ContextUsageStore } from "./context-usage-store.js";
3
+ /** Default polling interval: 30 seconds. */
4
+ export declare const DEFAULT_POLL_INTERVAL_MS = 30000;
5
+ /**
6
+ * Polls known managed Claude sidecar files and persists the latest
7
+ * normalized context telemetry. Scheduler-only: no queries, no response
8
+ * shaping, no in-memory truth.
9
+ */
10
+ export declare class ContextMonitor {
11
+ private db;
12
+ private store;
13
+ private claudeContextProvisioner;
14
+ private timer;
15
+ constructor(db: Database.Database, store: ContextUsageStore, claudeContextProvisioner?: {
16
+ ensureContextCollector(binding: {
17
+ cwd?: string | null;
18
+ tmuxSession?: string | null;
19
+ }): void;
20
+ });
21
+ /** Discover active managed Claude sessions and poll their sidecar files. */
22
+ pollOnce(): void;
23
+ /** Start polling at the given interval. Idempotent. */
24
+ start(intervalMs?: number): void;
25
+ /** Stop polling. Safe to call before start or multiple times. */
26
+ stop(): void;
27
+ /** Query for managed Claude sessions that are currently running. */
28
+ private getEligibleSessions;
29
+ }
30
+ //# sourceMappingURL=context-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-monitor.d.ts","sourceRoot":"","sources":["../../src/domain/context-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAQ/C;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,wBAAwB,CAAyG;IACzI,OAAO,CAAC,KAAK,CAA+C;gBAG1D,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,iBAAiB,EACxB,wBAAwB,CAAC,EAAE;QAAE,sBAAsB,CAAC,OAAO,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE;IAO5H,4EAA4E;IAC5E,QAAQ,IAAI,IAAI;IAmBhB,uDAAuD;IACvD,KAAK,CAAC,UAAU,GAAE,MAAiC,GAAG,IAAI;IAS1D,iEAAiE;IACjE,IAAI,IAAI,IAAI;IAOZ,oEAAoE;IACpE,OAAO,CAAC,mBAAmB;CAa5B"}
@@ -0,0 +1,71 @@
1
+ /** Default polling interval: 30 seconds. */
2
+ export const DEFAULT_POLL_INTERVAL_MS = 30_000;
3
+ /**
4
+ * Polls known managed Claude sidecar files and persists the latest
5
+ * normalized context telemetry. Scheduler-only: no queries, no response
6
+ * shaping, no in-memory truth.
7
+ */
8
+ export class ContextMonitor {
9
+ db;
10
+ store;
11
+ claudeContextProvisioner;
12
+ timer = null;
13
+ constructor(db, store, claudeContextProvisioner) {
14
+ this.db = db;
15
+ this.store = store;
16
+ this.claudeContextProvisioner = claudeContextProvisioner ?? null;
17
+ }
18
+ /** Discover active managed Claude sessions and poll their sidecar files. */
19
+ pollOnce() {
20
+ const sessions = this.getEligibleSessions();
21
+ for (const session of sessions) {
22
+ try {
23
+ this.claudeContextProvisioner?.ensureContextCollector({
24
+ cwd: session.cwd ?? undefined,
25
+ tmuxSession: session.session_name,
26
+ });
27
+ const usage = this.store.readAndNormalize(session.session_name);
28
+ this.store.persist(session.node_id, usage);
29
+ }
30
+ catch {
31
+ // One bad session must not crash polling for others
32
+ try {
33
+ this.store.persist(session.node_id, this.store.unknownUsage("parse_error"));
34
+ }
35
+ catch { /* give up on this session */ }
36
+ }
37
+ }
38
+ }
39
+ /** Start polling at the given interval. Idempotent. */
40
+ start(intervalMs = DEFAULT_POLL_INTERVAL_MS) {
41
+ if (this.timer)
42
+ return; // Already running
43
+ this.timer = setInterval(() => this.pollOnce(), intervalMs);
44
+ // Unref so the timer doesn't keep the process alive
45
+ if (this.timer && typeof this.timer === "object" && "unref" in this.timer) {
46
+ this.timer.unref();
47
+ }
48
+ }
49
+ /** Stop polling. Safe to call before start or multiple times. */
50
+ stop() {
51
+ if (this.timer) {
52
+ clearInterval(this.timer);
53
+ this.timer = null;
54
+ }
55
+ }
56
+ /** Query for managed Claude sessions that are currently running. */
57
+ getEligibleSessions() {
58
+ return this.db.prepare(`
59
+ SELECT n.id as node_id, s.session_name, n.cwd
60
+ FROM nodes n
61
+ JOIN sessions s ON s.node_id = n.id
62
+ AND s.id = (SELECT s2.id FROM sessions s2 WHERE s2.node_id = n.id ORDER BY s2.id DESC LIMIT 1)
63
+ LEFT JOIN bindings b ON b.node_id = n.id
64
+ WHERE n.runtime = 'claude-code'
65
+ AND s.status = 'running'
66
+ AND COALESCE(b.attachment_type, 'tmux') = 'tmux'
67
+ AND COALESCE(b.tmux_session, s.session_name) IS NOT NULL
68
+ `).all();
69
+ }
70
+ }
71
+ //# sourceMappingURL=context-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-monitor.js","sourceRoot":"","sources":["../../src/domain/context-monitor.ts"],"names":[],"mappings":"AAGA,4CAA4C;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAQ/C;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACjB,EAAE,CAAoB;IACtB,KAAK,CAAoB;IACzB,wBAAwB,CAAyG;IACjI,KAAK,GAA0C,IAAI,CAAC;IAE5D,YACE,EAAqB,EACrB,KAAwB,EACxB,wBAA0H;QAE1H,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,IAAI,IAAI,CAAC;IACnE,CAAC;IAED,4EAA4E;IAC5E,QAAQ;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,IAAI,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;oBACpD,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,SAAS;oBAC7B,WAAW,EAAE,OAAO,CAAC,YAAY;iBAClC,CAAC,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;gBACpD,IAAI,CAAC;oBACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC9E,CAAC;gBAAC,MAAM,CAAC,CAAC,6BAA6B,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,aAAqB,wBAAwB;QACjD,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,kBAAkB;QAC1C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5D,oDAAoD;QACpD,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACzE,IAAI,CAAC,KAAwB,CAAC,KAAK,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,oEAAoE;IAC5D,mBAAmB;QACzB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;KAUtB,CAAC,CAAC,GAAG,EAAuB,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,57 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { ContextUsage, ContextUnknownReason } from "./types.js";
3
+ /** Freshness threshold: samples older than this are considered stale for compact displays. */
4
+ export declare const FRESHNESS_THRESHOLD_MS = 120000;
5
+ export interface ContextUsageStoreOpts {
6
+ stateDir: string;
7
+ }
8
+ interface SidecarRaw {
9
+ context_window?: {
10
+ context_window_size?: number;
11
+ used_percentage?: number;
12
+ remaining_percentage?: number;
13
+ total_input_tokens?: number;
14
+ total_output_tokens?: number;
15
+ current_usage?: string;
16
+ };
17
+ session_id?: string;
18
+ session_name?: string;
19
+ transcript_path?: string;
20
+ sampled_at?: string;
21
+ }
22
+ export declare class ContextUsageStore {
23
+ readonly db: Database.Database;
24
+ private stateDir;
25
+ constructor(db: Database.Database, opts: ContextUsageStoreOpts);
26
+ /** Get the sidecar file path for a session. */
27
+ getSidecarPath(sessionName: string): string;
28
+ /** Read and parse a sidecar JSON file. Returns discriminated result. */
29
+ readSidecar(sessionName: string): {
30
+ ok: true;
31
+ data: SidecarRaw;
32
+ } | {
33
+ ok: false;
34
+ reason: "missing_sidecar" | "parse_error";
35
+ };
36
+ /** Read sidecar and normalize into ContextUsage in one step. */
37
+ readAndNormalize(sessionName: string): ContextUsage;
38
+ /** Normalize raw sidecar data into a ContextUsage record. */
39
+ normalizeSample(raw: SidecarRaw | null): ContextUsage;
40
+ /** Persist a context usage record for a node. Upserts. */
41
+ persist(nodeId: string, usage: ContextUsage): void;
42
+ /** Get context usage for a single node. Session-aware: mismatched session returns unknown. */
43
+ getForNode(nodeId: string, currentSessionName: string | null): ContextUsage;
44
+ /** Batch get context usage for multiple nodes. Session-aware per entry. */
45
+ getForNodes(entries: Array<{
46
+ nodeId: string;
47
+ currentSessionName: string | null;
48
+ }>): Map<string, ContextUsage>;
49
+ /** Create an unknown ContextUsage with an honest reason. */
50
+ unknownUsage(reason: ContextUnknownReason): ContextUsage;
51
+ /** Check if a sample timestamp is fresh. */
52
+ private isFresh;
53
+ /** Convert a DB row to a ContextUsage, applying freshness. */
54
+ private rowToUsage;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=context-usage-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-usage-store.d.ts","sourceRoot":"","sources":["../../src/domain/context-usage-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAErE,8FAA8F;AAC9F,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,cAAc,CAAC,EAAE;QACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAoBD,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAS;gBAEb,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAqB;IAK9D,+CAA+C;IAC/C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAM3C,wEAAwE;IACxE,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAAA;KAAE;IAY3H,gEAAgE;IAChE,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY;IAMnD,6DAA6D;IAC7D,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,GAAG,YAAY;IA+BrD,0DAA0D;IAC1D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAyClD,8FAA8F;IAC9F,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY;IAc3E,2EAA2E;IAC3E,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAoC7G,4DAA4D;IAC5D,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,YAAY;IAmBxD,4CAA4C;IAC5C,OAAO,CAAC,OAAO;IASf,8DAA8D;IAC9D,OAAO,CAAC,UAAU;CAmBnB"}
@@ -0,0 +1,183 @@
1
+ import { join } from "node:path";
2
+ import { readFileSync, existsSync } from "node:fs";
3
+ /** Freshness threshold: samples older than this are considered stale for compact displays. */
4
+ export const FRESHNESS_THRESHOLD_MS = 120_000; // 2 minutes
5
+ export class ContextUsageStore {
6
+ db;
7
+ stateDir;
8
+ constructor(db, opts) {
9
+ this.db = db;
10
+ this.stateDir = opts.stateDir;
11
+ }
12
+ /** Get the sidecar file path for a session. */
13
+ getSidecarPath(sessionName) {
14
+ // Sanitize session name for filesystem safety
15
+ const safe = sessionName.replace(/[^a-zA-Z0-9@._-]/g, "_");
16
+ return join(this.stateDir, "context", `${safe}.json`);
17
+ }
18
+ /** Read and parse a sidecar JSON file. Returns discriminated result. */
19
+ readSidecar(sessionName) {
20
+ const filePath = this.getSidecarPath(sessionName);
21
+ try {
22
+ if (!existsSync(filePath))
23
+ return { ok: false, reason: "missing_sidecar" };
24
+ const content = readFileSync(filePath, "utf-8");
25
+ const parsed = JSON.parse(content);
26
+ return { ok: true, data: parsed };
27
+ }
28
+ catch {
29
+ return { ok: false, reason: "parse_error" };
30
+ }
31
+ }
32
+ /** Read sidecar and normalize into ContextUsage in one step. */
33
+ readAndNormalize(sessionName) {
34
+ const result = this.readSidecar(sessionName);
35
+ if (!result.ok)
36
+ return this.unknownUsage(result.reason);
37
+ return this.normalizeSample(result.data);
38
+ }
39
+ /** Normalize raw sidecar data into a ContextUsage record. */
40
+ normalizeSample(raw) {
41
+ if (!raw) {
42
+ return this.unknownUsage("missing_sidecar");
43
+ }
44
+ const cw = raw.context_window;
45
+ if (!cw || typeof cw.used_percentage !== "number") {
46
+ return this.unknownUsage("parse_error");
47
+ }
48
+ const sampledAt = raw.sampled_at ?? null;
49
+ const fresh = sampledAt ? this.isFresh(sampledAt) : false;
50
+ return {
51
+ availability: "known",
52
+ reason: null,
53
+ source: "claude_statusline_json",
54
+ usedPercentage: cw.used_percentage ?? null,
55
+ remainingPercentage: cw.remaining_percentage ?? null,
56
+ contextWindowSize: cw.context_window_size ?? null,
57
+ totalInputTokens: cw.total_input_tokens ?? null,
58
+ totalOutputTokens: cw.total_output_tokens ?? null,
59
+ currentUsage: cw.current_usage ?? null,
60
+ transcriptPath: raw.transcript_path ?? null,
61
+ sessionId: raw.session_id ?? null,
62
+ sessionName: raw.session_name ?? null,
63
+ sampledAt,
64
+ fresh,
65
+ };
66
+ }
67
+ /** Persist a context usage record for a node. Upserts. */
68
+ persist(nodeId, usage) {
69
+ this.db.prepare(`
70
+ INSERT INTO context_usage (
71
+ node_id, session_id, session_name, availability, reason, source,
72
+ used_percentage, remaining_percentage, context_window_size,
73
+ total_input_tokens, total_output_tokens, current_usage,
74
+ transcript_path, sampled_at, updated_at
75
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))
76
+ ON CONFLICT(node_id) DO UPDATE SET
77
+ session_id = excluded.session_id,
78
+ session_name = excluded.session_name,
79
+ availability = excluded.availability,
80
+ reason = excluded.reason,
81
+ source = excluded.source,
82
+ used_percentage = excluded.used_percentage,
83
+ remaining_percentage = excluded.remaining_percentage,
84
+ context_window_size = excluded.context_window_size,
85
+ total_input_tokens = excluded.total_input_tokens,
86
+ total_output_tokens = excluded.total_output_tokens,
87
+ current_usage = excluded.current_usage,
88
+ transcript_path = excluded.transcript_path,
89
+ sampled_at = excluded.sampled_at,
90
+ updated_at = datetime('now')
91
+ `).run(nodeId, usage.sessionId, usage.sessionName, usage.availability, usage.reason, usage.source, usage.usedPercentage, usage.remainingPercentage, usage.contextWindowSize, usage.totalInputTokens, usage.totalOutputTokens, usage.currentUsage, usage.transcriptPath, usage.sampledAt);
92
+ }
93
+ /** Get context usage for a single node. Session-aware: mismatched session returns unknown. */
94
+ getForNode(nodeId, currentSessionName) {
95
+ if (!currentSessionName)
96
+ return this.unknownUsage("not_managed");
97
+ const row = this.db.prepare("SELECT * FROM context_usage WHERE node_id = ?").get(nodeId);
98
+ if (!row)
99
+ return this.unknownUsage("no_data");
100
+ // Session mismatch guard: prevent stale cross-session inheritance
101
+ if (row.session_name && row.session_name !== currentSessionName) {
102
+ return this.unknownUsage("session_mismatch");
103
+ }
104
+ return this.rowToUsage(row);
105
+ }
106
+ /** Batch get context usage for multiple nodes. Session-aware per entry. */
107
+ getForNodes(entries) {
108
+ const result = new Map();
109
+ if (entries.length === 0)
110
+ return result;
111
+ const nodeIds = entries.map((e) => e.nodeId);
112
+ const sessionMap = new Map(entries.map((e) => [e.nodeId, e.currentSessionName]));
113
+ const rows = this.db.prepare(`SELECT * FROM context_usage WHERE node_id IN (${nodeIds.map(() => "?").join(",")})`).all(...nodeIds);
114
+ const rowMap = new Map(rows.map((r) => [r.node_id, r]));
115
+ for (const entry of entries) {
116
+ if (!entry.currentSessionName) {
117
+ result.set(entry.nodeId, this.unknownUsage("not_managed"));
118
+ continue;
119
+ }
120
+ const row = rowMap.get(entry.nodeId);
121
+ if (!row) {
122
+ result.set(entry.nodeId, this.unknownUsage("no_data"));
123
+ continue;
124
+ }
125
+ if (row.session_name && row.session_name !== entry.currentSessionName) {
126
+ result.set(entry.nodeId, this.unknownUsage("session_mismatch"));
127
+ continue;
128
+ }
129
+ result.set(entry.nodeId, this.rowToUsage(row));
130
+ }
131
+ return result;
132
+ }
133
+ /** Create an unknown ContextUsage with an honest reason. */
134
+ unknownUsage(reason) {
135
+ return {
136
+ availability: "unknown",
137
+ reason,
138
+ source: null,
139
+ usedPercentage: null,
140
+ remainingPercentage: null,
141
+ contextWindowSize: null,
142
+ totalInputTokens: null,
143
+ totalOutputTokens: null,
144
+ currentUsage: null,
145
+ transcriptPath: null,
146
+ sessionId: null,
147
+ sessionName: null,
148
+ sampledAt: null,
149
+ fresh: false,
150
+ };
151
+ }
152
+ /** Check if a sample timestamp is fresh. */
153
+ isFresh(sampledAt) {
154
+ try {
155
+ const age = Date.now() - new Date(sampledAt).getTime();
156
+ return age < FRESHNESS_THRESHOLD_MS;
157
+ }
158
+ catch {
159
+ return false;
160
+ }
161
+ }
162
+ /** Convert a DB row to a ContextUsage, applying freshness. */
163
+ rowToUsage(row) {
164
+ const fresh = row.sampled_at ? this.isFresh(row.sampled_at) : false;
165
+ return {
166
+ availability: row.availability,
167
+ reason: row.reason,
168
+ source: row.source,
169
+ usedPercentage: row.used_percentage,
170
+ remainingPercentage: row.remaining_percentage,
171
+ contextWindowSize: row.context_window_size,
172
+ totalInputTokens: row.total_input_tokens,
173
+ totalOutputTokens: row.total_output_tokens,
174
+ currentUsage: row.current_usage,
175
+ transcriptPath: row.transcript_path,
176
+ sessionId: row.session_id,
177
+ sessionName: row.session_name,
178
+ sampledAt: row.sampled_at,
179
+ fresh,
180
+ };
181
+ }
182
+ }
183
+ //# sourceMappingURL=context-usage-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-usage-store.js","sourceRoot":"","sources":["../../src/domain/context-usage-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface DemoRigSummaryLike {
2
+ rigId: string;
3
+ name: string;
4
+ status?: string;
5
+ }
6
+ export interface DemoNodeLike {
7
+ rigId: string;
8
+ }
9
+ export declare function selectCurrentRigSummary<T extends DemoRigSummaryLike>(rigs: T[], rigName: string): T | null;
10
+ export declare function filterNodesForRigId<T extends DemoNodeLike>(nodes: T[], rigId: string): T[];
11
+ //# sourceMappingURL=demo-rig-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-rig-selector.d.ts","sourceRoot":"","sources":["../../src/domain/demo-rig-selector.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,EAClE,IAAI,EAAE,CAAC,EAAE,EACT,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,CAoBV;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,YAAY,EACxD,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,GACZ,CAAC,EAAE,CAEL"}
@@ -0,0 +1,21 @@
1
+ export function selectCurrentRigSummary(rigs, rigName) {
2
+ const matches = rigs.filter((entry) => entry.name === rigName);
3
+ if (matches.length === 0) {
4
+ return null;
5
+ }
6
+ const runningMatches = matches.filter((entry) => entry.status === "running");
7
+ if (runningMatches.length === 1) {
8
+ return runningMatches[0] ?? null;
9
+ }
10
+ if (runningMatches.length > 1) {
11
+ throw new Error(`Rig '${rigName}' is ambiguous — ${runningMatches.length} running rigs share that name.`);
12
+ }
13
+ if (matches.length > 1) {
14
+ throw new Error(`Rig '${rigName}' is ambiguous — ${matches.length} stopped rigs share that name and none are running.`);
15
+ }
16
+ return matches[0] ?? null;
17
+ }
18
+ export function filterNodesForRigId(nodes, rigId) {
19
+ return nodes.filter((entry) => entry.rigId === rigId);
20
+ }
21
+ //# sourceMappingURL=demo-rig-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-rig-selector.js","sourceRoot":"","sources":["../../src/domain/demo-rig-selector.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,uBAAuB,CACrC,IAAS,EACT,OAAe;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC7E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,QAAQ,OAAO,oBAAoB,cAAc,CAAC,MAAM,gCAAgC,CACzF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,QAAQ,OAAO,oBAAoB,OAAO,CAAC,MAAM,qDAAqD,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAU,EACV,KAAa;IAEb,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { TmuxDiscoveryScanner } from "./tmux-discovery-scanner.js";
2
+ import type { SessionFingerprinter } from "./session-fingerprinter.js";
3
+ import type { SessionEnricher } from "./session-enricher.js";
4
+ import type { DiscoveryRepository } from "./discovery-repository.js";
5
+ import type { SessionRegistry } from "./session-registry.js";
6
+ import type { EventBus } from "./event-bus.js";
7
+ import type { DiscoveredSession } from "./discovery-types.js";
8
+ interface DiscoveryCoordinatorDeps {
9
+ scanner: TmuxDiscoveryScanner;
10
+ fingerprinter: SessionFingerprinter;
11
+ enricher: SessionEnricher;
12
+ discoveryRepo: DiscoveryRepository;
13
+ sessionRegistry: SessionRegistry;
14
+ eventBus: EventBus;
15
+ }
16
+ /**
17
+ * Orchestrates the full discovery pipeline:
18
+ * scan → filter managed → fingerprint → enrich → persist → vanish detection → events
19
+ */
20
+ export declare class DiscoveryCoordinator {
21
+ private deps;
22
+ constructor(deps: DiscoveryCoordinatorDeps);
23
+ /** Run a single discovery scan cycle. */
24
+ scanOnce(): Promise<DiscoveredSession[]>;
25
+ private getManagedBindings;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=discovery-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-coordinator.d.ts","sourceRoot":"","sources":["../../src/domain/discovery-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAM9D,UAAU,wBAAwB;IAChC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,aAAa,EAAE,oBAAoB,CAAC;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,aAAa,EAAE,mBAAmB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAA2B;gBAE3B,IAAI,EAAE,wBAAwB;IAI1C,yCAAyC;IACnC,QAAQ,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmG9C,OAAO,CAAC,kBAAkB;CAU3B"}