@compilr-dev/cli 0.5.0 → 0.5.2

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 (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Delegation Tracker (Phase 3d-beta - Coordinator Mode)
3
+ *
4
+ * Tracks active delegations from the coordinator to background specialists.
5
+ * Maintains a completion event queue so the coordinator can be notified
6
+ * when specialists finish their work.
7
+ *
8
+ * Pattern follows PendingRequestsManager (singleton, event-based).
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ export type DelegationStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
12
+ export interface Delegation {
13
+ /** Unique delegation ID (del_<uuid>) */
14
+ id: string;
15
+ /** Agent that initiated the delegation (always 'default' for now) */
16
+ coordinatorId: string;
17
+ /** Target specialist agent ID (e.g., 'arch', 'dev', 'qa') */
18
+ targetAgentId: string;
19
+ /** Task description sent to the specialist */
20
+ task: string;
21
+ /** What the specialist is expected to produce */
22
+ expectedOutput?: string;
23
+ /** Associated todo index (if any) */
24
+ todoIndex?: number;
25
+ /** Current status */
26
+ status: DelegationStatus;
27
+ /** Result (set on completion or failure) */
28
+ result?: DelegationResult;
29
+ /** When the delegation was created */
30
+ createdAt: Date;
31
+ /** When the delegation completed */
32
+ completedAt?: Date;
33
+ }
34
+ export interface DelegationResult {
35
+ /** Whether the task completed successfully */
36
+ success: boolean;
37
+ /** Brief outcome summary */
38
+ summary: string;
39
+ /** Artifact IDs created by the specialist */
40
+ artifactIds: string[];
41
+ /** Error message (if failed) */
42
+ error?: string;
43
+ }
44
+ export interface CompletionEvent {
45
+ /** The delegation ID */
46
+ delegationId: string;
47
+ /** The specialist that completed the work */
48
+ agentId: string;
49
+ /** Completion status */
50
+ status: 'completed' | 'failed';
51
+ /** Result details */
52
+ result: DelegationResult;
53
+ /** When the event was generated */
54
+ timestamp: Date;
55
+ }
56
+ export interface CreateDelegationOptions {
57
+ /** Agent that initiated the delegation */
58
+ coordinatorId: string;
59
+ /** Target specialist agent ID */
60
+ targetAgentId: string;
61
+ /** Task description */
62
+ task: string;
63
+ /** Expected output description */
64
+ expectedOutput?: string;
65
+ /** Associated todo index */
66
+ todoIndex?: number;
67
+ }
68
+ export interface DelegationStats {
69
+ total: number;
70
+ pending: number;
71
+ running: number;
72
+ completed: number;
73
+ failed: number;
74
+ cancelled: number;
75
+ }
76
+ export interface DelegationTrackerEvents {
77
+ /** Emitted when a new delegation is created */
78
+ 'delegation-created': (delegation: Delegation) => void;
79
+ /** Emitted when a delegation completes successfully */
80
+ 'delegation-completed': (event: CompletionEvent) => void;
81
+ /** Emitted when a delegation fails */
82
+ 'delegation-failed': (event: CompletionEvent) => void;
83
+ /** Emitted when delegation counts change */
84
+ 'count-changed': (stats: DelegationStats) => void;
85
+ }
86
+ export declare class DelegationTracker extends EventEmitter {
87
+ private readonly delegations;
88
+ private readonly completionQueue;
89
+ /**
90
+ * Create a new delegation.
91
+ */
92
+ create(options: CreateDelegationOptions): Delegation;
93
+ /**
94
+ * Update a delegation's status.
95
+ */
96
+ updateStatus(id: string, status: DelegationStatus): void;
97
+ /**
98
+ * Mark a delegation as completed with a result.
99
+ */
100
+ complete(id: string, result: DelegationResult): void;
101
+ /**
102
+ * Mark a delegation as failed.
103
+ */
104
+ fail(id: string, error: string): void;
105
+ /**
106
+ * Mark a delegation as cancelled.
107
+ */
108
+ cancel(id: string): void;
109
+ /**
110
+ * Cancel all active delegations for a specific agent.
111
+ */
112
+ cancelAllForAgent(agentId: string): number;
113
+ /**
114
+ * Get a delegation by ID.
115
+ */
116
+ get(id: string): Delegation | undefined;
117
+ /**
118
+ * Get all delegations targeting a specific agent.
119
+ */
120
+ getByAgent(agentId: string): Delegation[];
121
+ /**
122
+ * Get all active (pending or running) delegations.
123
+ */
124
+ getActive(): Delegation[];
125
+ /**
126
+ * Get all delegations.
127
+ */
128
+ getAll(): Delegation[];
129
+ /**
130
+ * Check if there are pending completion events.
131
+ */
132
+ hasCompletionEvents(): boolean;
133
+ /**
134
+ * Drain all completion events (removes them from queue).
135
+ */
136
+ drainCompletionEvents(): CompletionEvent[];
137
+ /**
138
+ * Peek at completion events without removing them.
139
+ */
140
+ peekCompletionEvents(): CompletionEvent[];
141
+ /**
142
+ * Get delegation statistics.
143
+ */
144
+ getStats(): DelegationStats;
145
+ /**
146
+ * Clear all delegations and completion events.
147
+ */
148
+ clear(): void;
149
+ }
150
+ /**
151
+ * Get the singleton DelegationTracker instance.
152
+ */
153
+ export declare function getDelegationTracker(): DelegationTracker;
154
+ /**
155
+ * Reset the singleton (for testing).
156
+ */
157
+ export declare function resetDelegationTracker(): void;
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Delegation Tracker (Phase 3d-beta - Coordinator Mode)
3
+ *
4
+ * Tracks active delegations from the coordinator to background specialists.
5
+ * Maintains a completion event queue so the coordinator can be notified
6
+ * when specialists finish their work.
7
+ *
8
+ * Pattern follows PendingRequestsManager (singleton, event-based).
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ import { randomUUID } from 'crypto';
12
+ // =============================================================================
13
+ // Tracker Class
14
+ // =============================================================================
15
+ export class DelegationTracker extends EventEmitter {
16
+ delegations = new Map();
17
+ completionQueue = [];
18
+ /**
19
+ * Create a new delegation.
20
+ */
21
+ create(options) {
22
+ const delegation = {
23
+ id: `del_${randomUUID().slice(0, 8)}`,
24
+ coordinatorId: options.coordinatorId,
25
+ targetAgentId: options.targetAgentId,
26
+ task: options.task,
27
+ expectedOutput: options.expectedOutput,
28
+ todoIndex: options.todoIndex,
29
+ status: 'pending',
30
+ createdAt: new Date(),
31
+ };
32
+ this.delegations.set(delegation.id, delegation);
33
+ this.emit('delegation-created', delegation);
34
+ this.emit('count-changed', this.getStats());
35
+ return delegation;
36
+ }
37
+ /**
38
+ * Update a delegation's status.
39
+ */
40
+ updateStatus(id, status) {
41
+ const delegation = this.delegations.get(id);
42
+ if (!delegation)
43
+ return;
44
+ delegation.status = status;
45
+ this.emit('count-changed', this.getStats());
46
+ }
47
+ /**
48
+ * Mark a delegation as completed with a result.
49
+ */
50
+ complete(id, result) {
51
+ const delegation = this.delegations.get(id);
52
+ if (!delegation)
53
+ return;
54
+ delegation.status = 'completed';
55
+ delegation.result = result;
56
+ delegation.completedAt = new Date();
57
+ const event = {
58
+ delegationId: id,
59
+ agentId: delegation.targetAgentId,
60
+ status: 'completed',
61
+ result,
62
+ timestamp: new Date(),
63
+ };
64
+ this.completionQueue.push(event);
65
+ this.emit('delegation-completed', event);
66
+ this.emit('count-changed', this.getStats());
67
+ }
68
+ /**
69
+ * Mark a delegation as failed.
70
+ */
71
+ fail(id, error) {
72
+ const delegation = this.delegations.get(id);
73
+ if (!delegation)
74
+ return;
75
+ const result = {
76
+ success: false,
77
+ summary: `Failed: ${error}`,
78
+ artifactIds: [],
79
+ error,
80
+ };
81
+ delegation.status = 'failed';
82
+ delegation.result = result;
83
+ delegation.completedAt = new Date();
84
+ const event = {
85
+ delegationId: id,
86
+ agentId: delegation.targetAgentId,
87
+ status: 'failed',
88
+ result,
89
+ timestamp: new Date(),
90
+ };
91
+ this.completionQueue.push(event);
92
+ this.emit('delegation-failed', event);
93
+ this.emit('count-changed', this.getStats());
94
+ }
95
+ /**
96
+ * Mark a delegation as cancelled.
97
+ */
98
+ cancel(id) {
99
+ const delegation = this.delegations.get(id);
100
+ if (!delegation)
101
+ return;
102
+ delegation.status = 'cancelled';
103
+ delegation.completedAt = new Date();
104
+ this.emit('count-changed', this.getStats());
105
+ }
106
+ /**
107
+ * Cancel all active delegations for a specific agent.
108
+ */
109
+ cancelAllForAgent(agentId) {
110
+ const active = this.getByAgent(agentId).filter(d => d.status === 'pending' || d.status === 'running');
111
+ for (const delegation of active) {
112
+ this.cancel(delegation.id);
113
+ }
114
+ return active.length;
115
+ }
116
+ // ===========================================================================
117
+ // Query
118
+ // ===========================================================================
119
+ /**
120
+ * Get a delegation by ID.
121
+ */
122
+ get(id) {
123
+ return this.delegations.get(id);
124
+ }
125
+ /**
126
+ * Get all delegations targeting a specific agent.
127
+ */
128
+ getByAgent(agentId) {
129
+ return Array.from(this.delegations.values())
130
+ .filter(d => d.targetAgentId === agentId);
131
+ }
132
+ /**
133
+ * Get all active (pending or running) delegations.
134
+ */
135
+ getActive() {
136
+ return Array.from(this.delegations.values())
137
+ .filter(d => d.status === 'pending' || d.status === 'running');
138
+ }
139
+ /**
140
+ * Get all delegations.
141
+ */
142
+ getAll() {
143
+ return Array.from(this.delegations.values())
144
+ .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
145
+ }
146
+ // ===========================================================================
147
+ // Completion Events
148
+ // ===========================================================================
149
+ /**
150
+ * Check if there are pending completion events.
151
+ */
152
+ hasCompletionEvents() {
153
+ return this.completionQueue.length > 0;
154
+ }
155
+ /**
156
+ * Drain all completion events (removes them from queue).
157
+ */
158
+ drainCompletionEvents() {
159
+ const events = [...this.completionQueue];
160
+ this.completionQueue.length = 0;
161
+ return events;
162
+ }
163
+ /**
164
+ * Peek at completion events without removing them.
165
+ */
166
+ peekCompletionEvents() {
167
+ return [...this.completionQueue];
168
+ }
169
+ // ===========================================================================
170
+ // Stats
171
+ // ===========================================================================
172
+ /**
173
+ * Get delegation statistics.
174
+ */
175
+ getStats() {
176
+ let pending = 0;
177
+ let running = 0;
178
+ let completed = 0;
179
+ let failed = 0;
180
+ let cancelled = 0;
181
+ for (const d of this.delegations.values()) {
182
+ switch (d.status) {
183
+ case 'pending':
184
+ pending++;
185
+ break;
186
+ case 'running':
187
+ running++;
188
+ break;
189
+ case 'completed':
190
+ completed++;
191
+ break;
192
+ case 'failed':
193
+ failed++;
194
+ break;
195
+ case 'cancelled':
196
+ cancelled++;
197
+ break;
198
+ }
199
+ }
200
+ return {
201
+ total: this.delegations.size,
202
+ pending,
203
+ running,
204
+ completed,
205
+ failed,
206
+ cancelled,
207
+ };
208
+ }
209
+ // ===========================================================================
210
+ // Cleanup
211
+ // ===========================================================================
212
+ /**
213
+ * Clear all delegations and completion events.
214
+ */
215
+ clear() {
216
+ this.delegations.clear();
217
+ this.completionQueue.length = 0;
218
+ this.emit('count-changed', this.getStats());
219
+ }
220
+ }
221
+ // =============================================================================
222
+ // Singleton Instance
223
+ // =============================================================================
224
+ let instance = null;
225
+ /**
226
+ * Get the singleton DelegationTracker instance.
227
+ */
228
+ export function getDelegationTracker() {
229
+ if (!instance) {
230
+ instance = new DelegationTracker();
231
+ }
232
+ return instance;
233
+ }
234
+ /**
235
+ * Reset the singleton (for testing).
236
+ */
237
+ export function resetDelegationTracker() {
238
+ if (instance) {
239
+ instance.clear();
240
+ instance.removeAllListeners();
241
+ }
242
+ instance = null;
243
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * File Lock Hooks - Advisory lock checks for multi-terminal file editing
3
+ *
4
+ * beforeTool hook: Checks for file lock conflicts before write_file/edit operations.
5
+ * afterTool hook: Acquires locks after successful write_file/edit operations.
6
+ *
7
+ * These hooks read getActiveProject() and getActiveTerminalSessionId() at call time
8
+ * (not capture time), so they work correctly even when project/session changes.
9
+ */
10
+ import { type BeforeToolHook, type AfterToolHook } from '@compilr-dev/sdk';
11
+ /** Getter for the active project — injected by caller to avoid tools/ → multi-agent/ cycle. */
12
+ type ProjectGetter = () => {
13
+ id: number;
14
+ name: string;
15
+ displayName: string;
16
+ path: string;
17
+ } | null;
18
+ /**
19
+ * Create a beforeTool hook that checks for file lock conflicts.
20
+ * Blocks write_file and edit operations if the file is locked by another terminal.
21
+ * Returns an advisory error that the LLM can relay to the user.
22
+ */
23
+ export declare function createFileLockCheckHook(getActiveProject: ProjectGetter): BeforeToolHook;
24
+ /**
25
+ * Create an afterTool hook that acquires locks after successful writes.
26
+ * Locks are acquired for write_file and edit operations that succeed.
27
+ */
28
+ export declare function createFileLockAcquireHook(getActiveProject: ProjectGetter): AfterToolHook;
29
+ export {};
@@ -0,0 +1,97 @@
1
+ /**
2
+ * File Lock Hooks - Advisory lock checks for multi-terminal file editing
3
+ *
4
+ * beforeTool hook: Checks for file lock conflicts before write_file/edit operations.
5
+ * afterTool hook: Acquires locks after successful write_file/edit operations.
6
+ *
7
+ * These hooks read getActiveProject() and getActiveTerminalSessionId() at call time
8
+ * (not capture time), so they work correctly even when project/session changes.
9
+ */
10
+ import { TOOL_NAMES } from '@compilr-dev/sdk';
11
+ import { getFileLockManager } from './file-locks.js';
12
+ import { getActiveTerminalSessionId, getSessionRegistry } from './session-registry.js';
13
+ /**
14
+ * Create a beforeTool hook that checks for file lock conflicts.
15
+ * Blocks write_file and edit operations if the file is locked by another terminal.
16
+ * Returns an advisory error that the LLM can relay to the user.
17
+ */
18
+ export function createFileLockCheckHook(getActiveProject) {
19
+ return (context) => {
20
+ const sessionId = getActiveTerminalSessionId();
21
+ const project = getActiveProject();
22
+ if (!sessionId || !project)
23
+ return undefined;
24
+ const { toolName, input } = context;
25
+ // Only check write operations
26
+ let filePath;
27
+ if (toolName === TOOL_NAMES.WRITE_FILE) {
28
+ filePath = input.path;
29
+ }
30
+ else if (toolName === TOOL_NAMES.EDIT) {
31
+ filePath = input.filePath;
32
+ }
33
+ if (!filePath)
34
+ return undefined;
35
+ const manager = getFileLockManager();
36
+ if (!manager)
37
+ return undefined;
38
+ const conflict = manager.checkLock(filePath, project.id, sessionId);
39
+ if (!conflict)
40
+ return undefined;
41
+ // Block the write — return error describing the conflict
42
+ return {
43
+ skip: true,
44
+ result: {
45
+ success: false,
46
+ error: `File locked by another terminal.\n` +
47
+ `${conflict.path} is being edited by $${conflict.agentId} in ${conflict.sessionLabel} (locked ${conflict.lockedAgo}).\n` +
48
+ `Wait for the other terminal to finish, or use the file anyway if you're sure there's no conflict.`,
49
+ },
50
+ };
51
+ };
52
+ }
53
+ /**
54
+ * Create an afterTool hook that acquires locks after successful writes.
55
+ * Locks are acquired for write_file and edit operations that succeed.
56
+ */
57
+ export function createFileLockAcquireHook(getActiveProject) {
58
+ return (context) => {
59
+ const sessionId = getActiveTerminalSessionId();
60
+ const project = getActiveProject();
61
+ if (!sessionId || !project)
62
+ return undefined;
63
+ const { toolName, input, result } = context;
64
+ if (!result.success)
65
+ return undefined;
66
+ let filePath;
67
+ if (toolName === TOOL_NAMES.WRITE_FILE) {
68
+ filePath = input.path;
69
+ }
70
+ else if (toolName === TOOL_NAMES.EDIT) {
71
+ filePath = input.filePath;
72
+ }
73
+ if (!filePath)
74
+ return undefined;
75
+ const manager = getFileLockManager();
76
+ if (!manager)
77
+ return undefined;
78
+ // Get active agent ID from session registry
79
+ const registry = getSessionRegistry();
80
+ let agentId = 'default';
81
+ if (registry) {
82
+ try {
83
+ const sessions = registry.getActiveSessions();
84
+ const selfSession = sessions.find(s => s.id === sessionId);
85
+ if (selfSession) {
86
+ agentId = selfSession.active_agent;
87
+ }
88
+ }
89
+ catch {
90
+ // Best effort — use default
91
+ }
92
+ }
93
+ // Acquire lock (INSERT OR REPLACE — idempotent for same session)
94
+ manager.acquireLock(filePath, project.id, sessionId, agentId);
95
+ return undefined;
96
+ };
97
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * FileLockManager - Multi-terminal file lock awareness
3
+ *
4
+ * Manages advisory file locks to prevent two terminals from editing
5
+ * the same file simultaneously. Locks are stored in the shared projects.db
6
+ * and auto-cleaned when sessions are removed (via ON DELETE CASCADE).
7
+ *
8
+ * Locks are advisory — the before-tool hook blocks writes with an error
9
+ * message that the LLM can relay to the user.
10
+ */
11
+ import type Database from 'better-sqlite3';
12
+ export interface FileLockConflict {
13
+ path: string;
14
+ sessionId: string;
15
+ sessionLabel: string;
16
+ agentId: string;
17
+ lockedAt: string;
18
+ lockedAgo: string;
19
+ }
20
+ /**
21
+ * Get the current FileLockManager instance (null if not initialized)
22
+ */
23
+ export declare function getFileLockManager(): FileLockManager | null;
24
+ /**
25
+ * Initialize and return the FileLockManager singleton.
26
+ */
27
+ export declare function initFileLockManager(): FileLockManager;
28
+ export declare class FileLockManager {
29
+ private readonly db;
30
+ constructor(db: Database.Database);
31
+ /**
32
+ * Acquire a lock on a file. Returns true if lock acquired, false if held by another session.
33
+ * Uses INSERT OR REPLACE — if same session re-locks, just updates timestamp.
34
+ * If another active (non-expired) session holds the lock, returns false.
35
+ * Expired locks (older than LOCK_TTL_SECONDS) are overwritten.
36
+ */
37
+ acquireLock(filePath: string, projectId: number, sessionId: string, agentId: string): boolean;
38
+ /**
39
+ * Release a specific file lock.
40
+ */
41
+ releaseLock(filePath: string, projectId: number): void;
42
+ /**
43
+ * Release all locks held by a session.
44
+ * Called on unregister or project switch.
45
+ */
46
+ releaseSessionLocks(sessionId: string): void;
47
+ /**
48
+ * Check if a file is locked by another active session.
49
+ * Returns lock info if locked by someone else (and not expired), null otherwise.
50
+ * Expired locks (older than LOCK_TTL_SECONDS) are treated as free.
51
+ */
52
+ checkLock(filePath: string, projectId: number, selfSessionId: string): FileLockConflict | null;
53
+ /**
54
+ * Clean up locks from stale/dead sessions (heartbeat expired).
55
+ * Called opportunistically during stale session cleanup.
56
+ */
57
+ cleanupStaleLocks(staleThresholdMs: number): number;
58
+ }