@compilr-dev/cli 0.5.0 → 0.5.1

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 (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,471 @@
1
+ /**
2
+ * TeamCheckpointer - Persistence for multi-agent teams
3
+ *
4
+ * Stores team state alongside project sessions:
5
+ * ~/.compilr-dev/sessions/{project-id}/
6
+ * ├── current.json # Single-agent session (existing)
7
+ * ├── team.json # Team metadata
8
+ * ├── agent-default.json # Per-agent state
9
+ * ├── agent-pm.json
10
+ * ├── agent-arch.json
11
+ * ├── shared-context.json # Shared context (Phase 2)
12
+ * └── artifacts/ # Team artifacts (Phase 2)
13
+ * ├── index.json
14
+ * └── {id}.json
15
+ */
16
+ import * as fs from 'node:fs';
17
+ import * as path from 'node:path';
18
+ import { AgentTeam } from './team.js';
19
+ import { SharedContextManager } from './shared-context.js';
20
+ import { ArtifactStore } from './artifacts.js';
21
+ import { getActiveTerminalSessionId } from './session-registry.js';
22
+ const ARTIFACTS_DIR = 'artifacts';
23
+ /**
24
+ * Get terminal-scoped team filename, or shared 'team.json' if no session active.
25
+ */
26
+ function getTeamFilename() {
27
+ const sessionId = getActiveTerminalSessionId();
28
+ if (sessionId)
29
+ return `team-${sessionId.slice(0, 8)}.json`;
30
+ return 'team.json';
31
+ }
32
+ /**
33
+ * Get terminal-scoped agent file prefix, or shared 'agent-' if no session active.
34
+ */
35
+ function getAgentFilePrefix() {
36
+ const sessionId = getActiveTerminalSessionId();
37
+ if (sessionId)
38
+ return `agent-${sessionId.slice(0, 8)}-`;
39
+ return 'agent-';
40
+ }
41
+ /**
42
+ * Get terminal-scoped shared context filename, or shared 'shared-context.json' if no session active.
43
+ */
44
+ function getSharedContextFilename() {
45
+ const sessionId = getActiveTerminalSessionId();
46
+ if (sessionId)
47
+ return `shared-context-${sessionId.slice(0, 8)}.json`;
48
+ return 'shared-context.json';
49
+ }
50
+ /**
51
+ * TeamCheckpointer handles persistence for multi-agent teams
52
+ */
53
+ export class TeamCheckpointer {
54
+ sessionsPath;
55
+ constructor(sessionsPath) {
56
+ this.sessionsPath = sessionsPath;
57
+ }
58
+ /**
59
+ * Get the session directory for a project
60
+ */
61
+ getProjectDir(projectId) {
62
+ if (projectId === null) {
63
+ return path.join(this.sessionsPath, 'global');
64
+ }
65
+ return path.join(this.sessionsPath, `project-${String(projectId)}`);
66
+ }
67
+ /**
68
+ * Get the team metadata file path (terminal-scoped when multi-terminal active)
69
+ */
70
+ getTeamFilePath(projectId) {
71
+ return path.join(this.getProjectDir(projectId), getTeamFilename());
72
+ }
73
+ /**
74
+ * Get the agent state file path (terminal-scoped when multi-terminal active)
75
+ */
76
+ getAgentFilePath(projectId, agentId) {
77
+ return path.join(this.getProjectDir(projectId), `${getAgentFilePrefix()}${agentId}.json`);
78
+ }
79
+ /**
80
+ * Get the shared context file path (terminal-scoped when multi-terminal active)
81
+ */
82
+ getSharedContextPath(projectId) {
83
+ return path.join(this.getProjectDir(projectId), getSharedContextFilename());
84
+ }
85
+ /**
86
+ * Get the artifacts directory path
87
+ */
88
+ getArtifactsPath(projectId) {
89
+ return path.join(this.getProjectDir(projectId), ARTIFACTS_DIR);
90
+ }
91
+ /**
92
+ * Check if a team exists for THIS terminal's project.
93
+ * Only checks this terminal's scoped file — never cross-terminal.
94
+ */
95
+ hasTeam(projectId) {
96
+ return fs.existsSync(this.getTeamFilePath(projectId));
97
+ }
98
+ /**
99
+ * Save team state
100
+ */
101
+ saveTeam(projectId, team) {
102
+ const projectDir = this.getProjectDir(projectId);
103
+ // Ensure directory exists
104
+ if (!fs.existsSync(projectDir)) {
105
+ fs.mkdirSync(projectDir, { recursive: true });
106
+ }
107
+ const serialized = team.serialize();
108
+ // Save team metadata
109
+ const teamPath = this.getTeamFilePath(projectId);
110
+ fs.writeFileSync(teamPath, JSON.stringify(serialized.metadata, null, 2), 'utf-8');
111
+ // Save each agent's state separately
112
+ for (const agent of serialized.agents) {
113
+ const agentPath = this.getAgentFilePath(projectId, agent.id);
114
+ fs.writeFileSync(agentPath, JSON.stringify(agent, null, 2), 'utf-8');
115
+ }
116
+ // Clean up old agent files that are no longer in the team
117
+ this.cleanupOldAgentFiles(projectId, serialized.metadata.agentIds);
118
+ }
119
+ /**
120
+ * Load team state for THIS terminal.
121
+ * Only loads this terminal's scoped files. Never cross-terminal.
122
+ * For cross-terminal loading, use loadTeamByPrefix().
123
+ */
124
+ loadTeam(projectId, agentFactory, onEvent) {
125
+ const teamPath = this.getTeamFilePath(projectId);
126
+ if (!fs.existsSync(teamPath))
127
+ return null;
128
+ return this.loadTeamFromPath(projectId, teamPath, null, agentFactory, onEvent);
129
+ }
130
+ /**
131
+ * Load team state for a SPECIFIC terminal prefix (cross-terminal resume).
132
+ * Used when the user explicitly picks another terminal's session to resume.
133
+ */
134
+ loadTeamByPrefix(projectId, terminalPrefix, agentFactory, onEvent) {
135
+ const projectDir = this.getProjectDir(projectId);
136
+ const teamPath = path.join(projectDir, `team-${terminalPrefix}.json`);
137
+ if (!fs.existsSync(teamPath)) {
138
+ return null;
139
+ }
140
+ return this.loadTeamFromPath(projectId, teamPath, terminalPrefix, agentFactory, onEvent);
141
+ }
142
+ /**
143
+ * Get the agent count from a team file for a specific terminal prefix.
144
+ * Lightweight — reads only metadata, doesn't load agents.
145
+ * Returns 0 if no team file exists (default agent only).
146
+ */
147
+ getTeamAgentCountByPrefix(projectId, terminalPrefix) {
148
+ const projectDir = this.getProjectDir(projectId);
149
+ const teamPath = path.join(projectDir, `team-${terminalPrefix}.json`);
150
+ if (!fs.existsSync(teamPath))
151
+ return 0;
152
+ try {
153
+ const content = fs.readFileSync(teamPath, 'utf-8');
154
+ const metadata = JSON.parse(content);
155
+ return metadata.agentIds.length;
156
+ }
157
+ catch {
158
+ return 0;
159
+ }
160
+ }
161
+ /**
162
+ * Internal: load team from a specific file path with optional terminal prefix for agent files.
163
+ */
164
+ loadTeamFromPath(projectId, teamPath, terminalPrefix, agentFactory, onEvent) {
165
+ try {
166
+ // Load team metadata
167
+ const metadataContent = fs.readFileSync(teamPath, 'utf-8');
168
+ const metadata = JSON.parse(metadataContent);
169
+ // Load each agent's state
170
+ const agents = [];
171
+ const projectDir = this.getProjectDir(projectId);
172
+ for (const agentId of metadata.agentIds) {
173
+ // Try paths in order: explicit prefix → this terminal
174
+ const explicitPath = terminalPrefix
175
+ ? path.join(projectDir, `agent-${terminalPrefix}-${agentId}.json`)
176
+ : null;
177
+ const ownPath = this.getAgentFilePath(projectId, agentId);
178
+ let loadedPath = null;
179
+ if (explicitPath && fs.existsSync(explicitPath)) {
180
+ loadedPath = explicitPath;
181
+ }
182
+ else if (fs.existsSync(ownPath)) {
183
+ loadedPath = ownPath;
184
+ }
185
+ if (loadedPath) {
186
+ const agentContent = fs.readFileSync(loadedPath, 'utf-8');
187
+ const agentData = JSON.parse(agentContent);
188
+ agents.push(agentData);
189
+ }
190
+ }
191
+ const serialized = { metadata, agents };
192
+ // Load shared context if it exists
193
+ const sharedContext = this.loadSharedContext(projectId) ?? undefined;
194
+ // Load artifact store
195
+ const artifactStore = this.getArtifactStore(projectId);
196
+ // Restore the team with shared context and artifact store
197
+ return AgentTeam.restore(serialized, agentFactory, onEvent, {
198
+ sharedContext,
199
+ artifactStore,
200
+ });
201
+ }
202
+ catch {
203
+ // If loading fails, return null
204
+ return null;
205
+ }
206
+ }
207
+ /**
208
+ * Save a single agent's state (for incremental updates)
209
+ */
210
+ saveAgent(projectId, agentId, agent) {
211
+ const projectDir = this.getProjectDir(projectId);
212
+ // Ensure directory exists
213
+ if (!fs.existsSync(projectDir)) {
214
+ fs.mkdirSync(projectDir, { recursive: true });
215
+ }
216
+ const agentPath = this.getAgentFilePath(projectId, agentId);
217
+ fs.writeFileSync(agentPath, JSON.stringify(agent, null, 2), 'utf-8');
218
+ }
219
+ /**
220
+ * Delete team data for a project
221
+ */
222
+ deleteTeam(projectId) {
223
+ const teamPath = this.getTeamFilePath(projectId);
224
+ if (!fs.existsSync(teamPath)) {
225
+ return false;
226
+ }
227
+ try {
228
+ // Load metadata to get agent IDs
229
+ const metadataContent = fs.readFileSync(teamPath, 'utf-8');
230
+ const metadata = JSON.parse(metadataContent);
231
+ // Delete agent files
232
+ for (const agentId of metadata.agentIds) {
233
+ const agentPath = this.getAgentFilePath(projectId, agentId);
234
+ if (fs.existsSync(agentPath)) {
235
+ fs.unlinkSync(agentPath);
236
+ }
237
+ }
238
+ // Delete team file
239
+ fs.unlinkSync(teamPath);
240
+ return true;
241
+ }
242
+ catch {
243
+ return false;
244
+ }
245
+ }
246
+ /**
247
+ * Claim team files from another terminal by renaming them to this terminal's prefix.
248
+ * Renames: team-{from}.json, agent-{from}-*.json, shared-context-{from}.json
249
+ */
250
+ claimTeamFiles(projectId, fromPrefix, toPrefix) {
251
+ const projectDir = this.getProjectDir(projectId);
252
+ if (!fs.existsSync(projectDir))
253
+ return false;
254
+ try {
255
+ const files = fs.readdirSync(projectDir);
256
+ for (const file of files) {
257
+ // team-{from}.json → team-{to}.json
258
+ if (file === `team-${fromPrefix}.json`) {
259
+ fs.renameSync(path.join(projectDir, file), path.join(projectDir, `team-${toPrefix}.json`));
260
+ continue;
261
+ }
262
+ // agent-{from}-{id}.json → agent-{to}-{id}.json
263
+ if (file.startsWith(`agent-${fromPrefix}-`) && file.endsWith('.json')) {
264
+ const agentId = file.slice(`agent-${fromPrefix}-`.length, -'.json'.length);
265
+ fs.renameSync(path.join(projectDir, file), path.join(projectDir, `agent-${toPrefix}-${agentId}.json`));
266
+ continue;
267
+ }
268
+ // shared-context-{from}.json → shared-context-{to}.json
269
+ if (file === `shared-context-${fromPrefix}.json`) {
270
+ fs.renameSync(path.join(projectDir, file), path.join(projectDir, `shared-context-${toPrefix}.json`));
271
+ continue;
272
+ }
273
+ }
274
+ return true;
275
+ }
276
+ catch {
277
+ return false;
278
+ }
279
+ }
280
+ // ---------------------------------------------------------------------------
281
+ // Shared Context Persistence
282
+ // ---------------------------------------------------------------------------
283
+ /**
284
+ * Check if shared context exists for this project
285
+ */
286
+ hasSharedContext(projectId) {
287
+ const contextPath = this.getSharedContextPath(projectId);
288
+ return fs.existsSync(contextPath);
289
+ }
290
+ /**
291
+ * Save shared context
292
+ */
293
+ saveSharedContext(projectId, context) {
294
+ const projectDir = this.getProjectDir(projectId);
295
+ // Ensure directory exists
296
+ if (!fs.existsSync(projectDir)) {
297
+ fs.mkdirSync(projectDir, { recursive: true });
298
+ }
299
+ const serialized = context.serialize();
300
+ const contextPath = this.getSharedContextPath(projectId);
301
+ fs.writeFileSync(contextPath, JSON.stringify(serialized, null, 2), 'utf-8');
302
+ }
303
+ /**
304
+ * Load shared context
305
+ */
306
+ loadSharedContext(projectId) {
307
+ const contextPath = this.getSharedContextPath(projectId);
308
+ if (!fs.existsSync(contextPath)) {
309
+ return null;
310
+ }
311
+ try {
312
+ const content = fs.readFileSync(contextPath, 'utf-8');
313
+ const serialized = JSON.parse(content);
314
+ return SharedContextManager.fromSerialized(serialized);
315
+ }
316
+ catch {
317
+ return null;
318
+ }
319
+ }
320
+ /**
321
+ * Delete shared context
322
+ */
323
+ deleteSharedContext(projectId) {
324
+ const contextPath = this.getSharedContextPath(projectId);
325
+ if (!fs.existsSync(contextPath)) {
326
+ return false;
327
+ }
328
+ try {
329
+ fs.unlinkSync(contextPath);
330
+ return true;
331
+ }
332
+ catch {
333
+ return false;
334
+ }
335
+ }
336
+ // ---------------------------------------------------------------------------
337
+ // Artifact Store Management
338
+ // ---------------------------------------------------------------------------
339
+ /**
340
+ * Get artifact store for a project
341
+ * The ArtifactStore handles its own persistence
342
+ */
343
+ getArtifactStore(projectId) {
344
+ const artifactsPath = this.getArtifactsPath(projectId);
345
+ const store = new ArtifactStore(artifactsPath);
346
+ store.load(); // Load existing artifacts
347
+ return store;
348
+ }
349
+ /**
350
+ * Check if artifacts exist for this project
351
+ */
352
+ hasArtifacts(projectId) {
353
+ const artifactsPath = this.getArtifactsPath(projectId);
354
+ return fs.existsSync(artifactsPath);
355
+ }
356
+ /**
357
+ * Delete all artifacts for a project
358
+ */
359
+ deleteArtifacts(projectId) {
360
+ const artifactsPath = this.getArtifactsPath(projectId);
361
+ if (!fs.existsSync(artifactsPath)) {
362
+ return false;
363
+ }
364
+ try {
365
+ // Delete all files in artifacts directory
366
+ const files = fs.readdirSync(artifactsPath);
367
+ for (const file of files) {
368
+ fs.unlinkSync(path.join(artifactsPath, file));
369
+ }
370
+ // Delete the directory
371
+ fs.rmdirSync(artifactsPath);
372
+ return true;
373
+ }
374
+ catch {
375
+ return false;
376
+ }
377
+ }
378
+ // ---------------------------------------------------------------------------
379
+ // Cleanup Helpers
380
+ // ---------------------------------------------------------------------------
381
+ /**
382
+ * Clean up agent files that are no longer in the team
383
+ */
384
+ cleanupOldAgentFiles(projectId, currentAgentIds) {
385
+ const projectDir = this.getProjectDir(projectId);
386
+ if (!fs.existsSync(projectDir)) {
387
+ return;
388
+ }
389
+ const prefix = getAgentFilePrefix();
390
+ try {
391
+ const files = fs.readdirSync(projectDir);
392
+ for (const file of files) {
393
+ if (file.startsWith(prefix) && file.endsWith('.json')) {
394
+ const agentId = file.slice(prefix.length, -5); // Remove prefix and .json
395
+ if (!currentAgentIds.includes(agentId)) {
396
+ fs.unlinkSync(path.join(projectDir, file));
397
+ }
398
+ }
399
+ }
400
+ }
401
+ catch {
402
+ // Ignore cleanup errors
403
+ }
404
+ }
405
+ /**
406
+ * List all projects that have team data.
407
+ */
408
+ listProjectsWithTeams() {
409
+ const projectIds = [];
410
+ if (!fs.existsSync(this.sessionsPath)) {
411
+ return projectIds;
412
+ }
413
+ try {
414
+ const entries = fs.readdirSync(this.sessionsPath);
415
+ for (const entry of entries) {
416
+ if (entry.startsWith('project-')) {
417
+ const idStr = entry.slice('project-'.length);
418
+ const id = parseInt(idStr, 10);
419
+ if (isNaN(id))
420
+ continue;
421
+ // Check for any team file (terminal-scoped or legacy)
422
+ const dirPath = path.join(this.sessionsPath, entry);
423
+ const files = fs.readdirSync(dirPath);
424
+ const hasTeamFile = files.some(f => f.startsWith('team') && f.endsWith('.json'));
425
+ if (hasTeamFile) {
426
+ projectIds.push(id);
427
+ }
428
+ }
429
+ }
430
+ }
431
+ catch {
432
+ // Ignore errors
433
+ }
434
+ return projectIds;
435
+ }
436
+ /**
437
+ * Get team metadata without loading the full team.
438
+ */
439
+ getTeamMetadata(projectId) {
440
+ const teamPath = this.getTeamFilePath(projectId);
441
+ if (!fs.existsSync(teamPath))
442
+ return null;
443
+ try {
444
+ const content = fs.readFileSync(teamPath, 'utf-8');
445
+ return JSON.parse(content);
446
+ }
447
+ catch {
448
+ return null;
449
+ }
450
+ }
451
+ }
452
+ /**
453
+ * Get the default sessions path
454
+ */
455
+ export function getSessionsPath() {
456
+ const homeDir = process.env.HOME ?? process.env.USERPROFILE ?? '.';
457
+ return path.join(homeDir, '.compilr-dev', 'sessions');
458
+ }
459
+ /**
460
+ * Singleton instance
461
+ */
462
+ let checkpointerInstance = null;
463
+ /**
464
+ * Get the shared TeamCheckpointer instance
465
+ */
466
+ export function getTeamCheckpointer() {
467
+ if (!checkpointerInstance) {
468
+ checkpointerInstance = new TeamCheckpointer(getSessionsPath());
469
+ }
470
+ return checkpointerInstance;
471
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Agent ID Collision Prevention
3
+ *
4
+ * When multiple terminals work on the same project, they may try to add
5
+ * agents with the same ID (e.g., both run `/add pm`). This module detects
6
+ * and resolves such collisions by querying the session registry for agent
7
+ * IDs already in use by other terminals.
8
+ */
9
+ /**
10
+ * Check if an agent ID is in use by another terminal and resolve collisions.
11
+ * Returns the original ID if available, or a suffixed variant (e.g., "pm_2").
12
+ */
13
+ export declare function resolveAgentIdCollision(requestedId: string, localTeamIds: string[], globalAgentIds: string[]): {
14
+ id: string;
15
+ wasCollision: boolean;
16
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Agent ID Collision Prevention
3
+ *
4
+ * When multiple terminals work on the same project, they may try to add
5
+ * agents with the same ID (e.g., both run `/add pm`). This module detects
6
+ * and resolves such collisions by querying the session registry for agent
7
+ * IDs already in use by other terminals.
8
+ */
9
+ import * as crypto from 'node:crypto';
10
+ /**
11
+ * Check if an agent ID is in use by another terminal and resolve collisions.
12
+ * Returns the original ID if available, or a suffixed variant (e.g., "pm_2").
13
+ */
14
+ export function resolveAgentIdCollision(requestedId, localTeamIds, globalAgentIds) {
15
+ if (!globalAgentIds.includes(requestedId)) {
16
+ return { id: requestedId, wasCollision: false };
17
+ }
18
+ // Try suffixes: pm_2, pm_3, etc.
19
+ for (let i = 2; i <= 10; i++) {
20
+ const candidate = `${requestedId}_${String(i)}`;
21
+ if (!localTeamIds.includes(candidate) && !globalAgentIds.includes(candidate)) {
22
+ return { id: candidate, wasCollision: true };
23
+ }
24
+ }
25
+ // Fallback: UUID suffix
26
+ const fallback = `${requestedId}_${crypto.randomUUID().slice(0, 4)}`;
27
+ return { id: fallback, wasCollision: true };
28
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * ContextResolver - Resolve $agent mentions to actual content
3
+ *
4
+ * Resolution strategy:
5
+ * 1. Check for explicit artifact reference in context hint
6
+ * 2. Search artifacts by name/content matching context hint
7
+ * 3. Fall back to recent conversation history
8
+ *
9
+ * Token budgets:
10
+ * - Single mention: 2000 tokens max
11
+ * - Multiple mentions: 3000 tokens total, split among mentions
12
+ */
13
+ import type { AgentTeam } from './team.js';
14
+ import type { ArtifactStore } from './artifacts.js';
15
+ import type { ParsedMention } from './mention-parser.js';
16
+ /**
17
+ * Resolution source type
18
+ */
19
+ export type ResolutionSource = 'artifact' | 'history' | 'decision' | 'not_found';
20
+ /**
21
+ * Resolved mention with content
22
+ */
23
+ export interface ResolvedMention {
24
+ /** Original mention */
25
+ mention: ParsedMention;
26
+ /** Resolution status */
27
+ resolved: boolean;
28
+ /** Source of resolution */
29
+ source: ResolutionSource;
30
+ /** Source name (artifact name, "recent history", etc.) */
31
+ sourceName: string;
32
+ /** Resolved content to inject */
33
+ content: string;
34
+ /** Approximate token count */
35
+ tokenCount: number;
36
+ }
37
+ /**
38
+ * Options for resolution
39
+ */
40
+ export interface ResolveOptions {
41
+ /** Max tokens per mention (default: 2000) */
42
+ maxTokensPerMention?: number;
43
+ /** Max total tokens for all mentions (default: 3000) */
44
+ maxTotalTokens?: number;
45
+ /** Include artifact content (not just summary) */
46
+ includeFullArtifact?: boolean;
47
+ /** Max history messages to search */
48
+ maxHistoryMessages?: number;
49
+ }
50
+ /**
51
+ * Resolve mentions to actual content
52
+ */
53
+ export declare class ContextResolver {
54
+ private readonly team;
55
+ private readonly artifactStore;
56
+ constructor(team: AgentTeam, artifactStore: ArtifactStore);
57
+ /**
58
+ * Resolve multiple mentions
59
+ */
60
+ resolveAll(mentions: ParsedMention[], options?: ResolveOptions): Map<string, ResolvedMention>;
61
+ /**
62
+ * Resolve a single mention
63
+ */
64
+ resolveMention(mention: ParsedMention, options?: ResolveOptions): ResolvedMention;
65
+ /**
66
+ * Resolve from artifacts
67
+ */
68
+ private resolveFromArtifacts;
69
+ /**
70
+ * Resolve from conversation history
71
+ */
72
+ private resolveFromHistory;
73
+ /**
74
+ * Extract relevant content from messages based on context hint
75
+ */
76
+ private extractRelevantContent;
77
+ /**
78
+ * Format a message for injection
79
+ */
80
+ private formatMessage;
81
+ /**
82
+ * Format artifact with full content
83
+ */
84
+ private formatArtifactFull;
85
+ /**
86
+ * Format artifact with summary only
87
+ */
88
+ private formatArtifactSummary;
89
+ /**
90
+ * Truncate content to approximate token count
91
+ */
92
+ private truncateToTokens;
93
+ }
94
+ /**
95
+ * Build a context map from resolved mentions
96
+ */
97
+ export declare function buildContextMap(resolved: Map<string, ResolvedMention>): Map<string, string>;