@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,194 @@
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 { getDb } from '../db/index.js';
12
+ // =============================================================================
13
+ // Module-level singleton
14
+ // =============================================================================
15
+ let _fileLockManager = null;
16
+ /**
17
+ * Get the current FileLockManager instance (null if not initialized)
18
+ */
19
+ export function getFileLockManager() {
20
+ return _fileLockManager;
21
+ }
22
+ /**
23
+ * Initialize and return the FileLockManager singleton.
24
+ */
25
+ export function initFileLockManager() {
26
+ if (!_fileLockManager) {
27
+ _fileLockManager = new FileLockManager(getDb());
28
+ }
29
+ return _fileLockManager;
30
+ }
31
+ // =============================================================================
32
+ // FileLockManager
33
+ // =============================================================================
34
+ /**
35
+ * Lock TTL in seconds. A lock older than this is considered expired and can be
36
+ * overwritten by another session. This allows multi-terminal workflows where
37
+ * terminals take turns editing different files — once a terminal moves on to
38
+ * another file, the lock on the previous file expires after this period.
39
+ *
40
+ * The lock is refreshed (locked_at updated) on every successful write to the
41
+ * same file, so sequential edits within a session keep the lock alive.
42
+ */
43
+ const LOCK_TTL_SECONDS = 60;
44
+ export class FileLockManager {
45
+ db;
46
+ constructor(db) {
47
+ this.db = db;
48
+ }
49
+ /**
50
+ * Acquire a lock on a file. Returns true if lock acquired, false if held by another session.
51
+ * Uses INSERT OR REPLACE — if same session re-locks, just updates timestamp.
52
+ * If another active (non-expired) session holds the lock, returns false.
53
+ * Expired locks (older than LOCK_TTL_SECONDS) are overwritten.
54
+ */
55
+ acquireLock(filePath, projectId, sessionId, agentId) {
56
+ try {
57
+ // Check if another session holds the lock
58
+ const existing = this.db.prepare(`SELECT session_id, locked_at FROM file_locks WHERE path = ? AND project_id = ?`).get(filePath, projectId);
59
+ if (existing && existing.session_id !== sessionId) {
60
+ // Another session holds the lock — check if it's expired
61
+ if (!isLockExpired(existing.locked_at)) {
62
+ return false;
63
+ }
64
+ // Lock expired — safe to overwrite
65
+ }
66
+ // Acquire or refresh the lock (INSERT OR REPLACE for idempotent re-lock)
67
+ this.db.prepare(`
68
+ INSERT OR REPLACE INTO file_locks (path, project_id, session_id, agent_id, locked_at)
69
+ VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
70
+ `).run(filePath, projectId, sessionId, agentId);
71
+ return true;
72
+ }
73
+ catch {
74
+ // Best effort — if DB errors, allow the write
75
+ return true;
76
+ }
77
+ }
78
+ /**
79
+ * Release a specific file lock.
80
+ */
81
+ releaseLock(filePath, projectId) {
82
+ try {
83
+ this.db.prepare('DELETE FROM file_locks WHERE path = ? AND project_id = ?')
84
+ .run(filePath, projectId);
85
+ }
86
+ catch {
87
+ // Best effort
88
+ }
89
+ }
90
+ /**
91
+ * Release all locks held by a session.
92
+ * Called on unregister or project switch.
93
+ */
94
+ releaseSessionLocks(sessionId) {
95
+ try {
96
+ this.db.prepare('DELETE FROM file_locks WHERE session_id = ?')
97
+ .run(sessionId);
98
+ }
99
+ catch {
100
+ // Best effort
101
+ }
102
+ }
103
+ /**
104
+ * Check if a file is locked by another active session.
105
+ * Returns lock info if locked by someone else (and not expired), null otherwise.
106
+ * Expired locks (older than LOCK_TTL_SECONDS) are treated as free.
107
+ */
108
+ checkLock(filePath, projectId, selfSessionId) {
109
+ try {
110
+ const row = this.db.prepare(`
111
+ SELECT
112
+ fl.path,
113
+ fl.session_id,
114
+ fl.agent_id,
115
+ fl.locked_at,
116
+ ts.label,
117
+ ts.last_heartbeat
118
+ FROM file_locks fl
119
+ JOIN terminal_sessions ts ON fl.session_id = ts.id
120
+ WHERE fl.path = ? AND fl.project_id = ?
121
+ AND fl.session_id != ?
122
+ AND ts.status = 'active'
123
+ `).get(filePath, projectId, selfSessionId);
124
+ if (!row)
125
+ return null;
126
+ // Check if the lock has expired (file not recently written to)
127
+ if (isLockExpired(row.locked_at)) {
128
+ return null;
129
+ }
130
+ return {
131
+ path: row.path,
132
+ sessionId: row.session_id,
133
+ sessionLabel: row.label ?? `Terminal ${row.session_id.slice(0, 8)}`,
134
+ agentId: row.agent_id,
135
+ lockedAt: row.locked_at,
136
+ lockedAgo: formatRelativeTime(row.locked_at),
137
+ };
138
+ }
139
+ catch {
140
+ // Best effort — if DB errors, allow the write
141
+ return null;
142
+ }
143
+ }
144
+ /**
145
+ * Clean up locks from stale/dead sessions (heartbeat expired).
146
+ * Called opportunistically during stale session cleanup.
147
+ */
148
+ cleanupStaleLocks(staleThresholdMs) {
149
+ try {
150
+ // Delete locks whose owning session has expired heartbeat
151
+ const thresholdSec = Math.floor(staleThresholdMs / 1000);
152
+ const result = this.db.prepare(`
153
+ DELETE FROM file_locks
154
+ WHERE session_id IN (
155
+ SELECT id FROM terminal_sessions
156
+ WHERE (julianday('now') - julianday(last_heartbeat)) * 86400 > ?
157
+ )
158
+ `).run(thresholdSec);
159
+ return result.changes;
160
+ }
161
+ catch {
162
+ return 0;
163
+ }
164
+ }
165
+ }
166
+ // =============================================================================
167
+ // Helpers
168
+ // =============================================================================
169
+ /**
170
+ * Check if a lock's locked_at timestamp is older than LOCK_TTL_SECONDS.
171
+ */
172
+ function isLockExpired(lockedAt) {
173
+ const utcStr = lockedAt.endsWith('Z') ? lockedAt : lockedAt + 'Z';
174
+ const lockTime = new Date(utcStr).getTime();
175
+ const ageMs = Date.now() - lockTime;
176
+ return ageMs > LOCK_TTL_SECONDS * 1000;
177
+ }
178
+ /**
179
+ * Format a relative time string from a SQLite CURRENT_TIMESTAMP datetime.
180
+ */
181
+ function formatRelativeTime(sqliteDatetime) {
182
+ const now = Date.now();
183
+ const utcStr = sqliteDatetime.endsWith('Z') ? sqliteDatetime : sqliteDatetime + 'Z';
184
+ const then = new Date(utcStr).getTime();
185
+ const diffMs = now - then;
186
+ const diffSec = Math.floor(diffMs / 1000);
187
+ if (diffSec < 60)
188
+ return `${String(diffSec)}s ago`;
189
+ const diffMin = Math.floor(diffSec / 60);
190
+ if (diffMin < 60)
191
+ return `${String(diffMin)}m ago`;
192
+ const diffHr = Math.floor(diffMin / 60);
193
+ return `${String(diffHr)}h ${String(diffMin % 60)}m ago`;
194
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Multi-Agent Module
3
+ *
4
+ * Provides multi-agent team functionality:
5
+ * - AgentTeam: Orchestrates multiple persistent agents
6
+ * - TeamAgent: Wrapper for individual team agents
7
+ * - Checkpointing: Persistence for team state
8
+ * - SharedContextManager: Shared context across agents
9
+ * - ArtifactStore: Storage for team artifacts
10
+ */
11
+ export type { MascotExpression, AgentRole, RoleMetadata, TeamAgentConfig, SerializedTeamAgent, TeamMetadata, SerializedTeam, TeamEventType, TeamEvent, TeamEventHandler, } from './types.js';
12
+ export { ROLE_METADATA, ROLE_EXPERTISE, PREDEFINED_ROLE_IDS } from './types.js';
13
+ export { TeamAgent } from './team-agent.js';
14
+ export { AgentTeam, type AgentTeamConfig } from './team.js';
15
+ export { TeamCheckpointer, getTeamCheckpointer, getSessionsPath } from './checkpointer.js';
16
+ export { SharedContextManager, type SharedContext, type SharedProjectInfo, type SharedTeamInfo, type TeamRosterEntry, type TeamActivity, type TeamActivityType, type SharedDecision, type TokenBudget, type SerializedSharedContext, } from './shared-context.js';
17
+ export { ArtifactStore, type Artifact, type ArtifactType, type ArtifactSummary, type CreateArtifactOptions, type UpdateArtifactOptions, } from './artifacts.js';
18
+ export { parseInputForMentions, getReferencedAgents, hasReferences, buildMessageWithContext, type ParsedMention, type ParsedInput, } from './mention-parser.js';
19
+ export { ContextResolver, buildContextMap, type ResolvedMention, type ResolutionSource, type ResolveOptions, } from './context-resolver.js';
20
+ export { setActiveSharedContext, getActiveSharedContext, recordTeamActivity, } from './activity.js';
21
+ export { findAgentForRole, findAgentById, getAvailableSpecialists, getSpecialistsSummary, hasSpecialists, } from './agent-selection.js';
22
+ export { suggestOwner, suggestOwners, matchesAgentExpertise, } from './task-suggestion.js';
23
+ export { wouldCreateLoop, recordAssignment, getAssignmentHistory, clearAssignmentHistory, clearAllAssignmentHistory, canReassign, } from './task-assignment.js';
24
+ export { PendingRequestsManager, getPendingRequestsManager, resetPendingRequestsManager, type PendingRequest, type PendingRequestResponse, type PendingRequestType, type EnqueueOptions, type PendingRequestsEvents, } from './pending-requests.js';
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Multi-Agent Module
3
+ *
4
+ * Provides multi-agent team functionality:
5
+ * - AgentTeam: Orchestrates multiple persistent agents
6
+ * - TeamAgent: Wrapper for individual team agents
7
+ * - Checkpointing: Persistence for team state
8
+ * - SharedContextManager: Shared context across agents
9
+ * - ArtifactStore: Storage for team artifacts
10
+ */
11
+ export { ROLE_METADATA, ROLE_EXPERTISE, PREDEFINED_ROLE_IDS } from './types.js';
12
+ // Classes
13
+ export { TeamAgent } from './team-agent.js';
14
+ export { AgentTeam } from './team.js';
15
+ export { TeamCheckpointer, getTeamCheckpointer, getSessionsPath } from './checkpointer.js';
16
+ // Phase 2: Shared Context
17
+ export { SharedContextManager, } from './shared-context.js';
18
+ export { ArtifactStore, } from './artifacts.js';
19
+ // Phase 2c: Mention References
20
+ export { parseInputForMentions, getReferencedAgents, hasReferences, buildMessageWithContext, } from './mention-parser.js';
21
+ export { ContextResolver, buildContextMap, } from './context-resolver.js';
22
+ // Phase 2c: Activity Recording
23
+ export { setActiveSharedContext, getActiveSharedContext, recordTeamActivity, } from './activity.js';
24
+ // Phase 3: Agent Selection (for delegation)
25
+ export { findAgentForRole, findAgentById, getAvailableSpecialists, getSpecialistsSummary, hasSpecialists, } from './agent-selection.js';
26
+ // Task Ownership: Suggestion and Assignment
27
+ export { suggestOwner, suggestOwners, matchesAgentExpertise, } from './task-suggestion.js';
28
+ export { wouldCreateLoop, recordAssignment, getAssignmentHistory, clearAssignmentHistory, clearAllAssignmentHistory, canReassign, } from './task-assignment.js';
29
+ // Phase 3b: Background Agents - Pending Requests
30
+ export { PendingRequestsManager, getPendingRequestsManager, resetPendingRequestsManager, } from './pending-requests.js';
@@ -0,0 +1,64 @@
1
+ /**
2
+ * MentionParser - Parse $agent references in user input
3
+ *
4
+ * Two types of $agent usage:
5
+ * 1. Switch: "$arch message" at start of input → switch to arch, send message
6
+ * 2. Reference: "what did $arch propose" mid-sentence → inject arch's context
7
+ *
8
+ * Detection rule: $name at START of trimmed input = switch. Otherwise = reference.
9
+ */
10
+ /**
11
+ * A parsed mention in the input
12
+ */
13
+ export interface ParsedMention {
14
+ /** Agent ID without $ prefix */
15
+ agentId: string;
16
+ /** Position in original input */
17
+ startIndex: number;
18
+ endIndex: number;
19
+ /** The full match including $ prefix */
20
+ raw: string;
21
+ /** Optional query/context after the agent name */
22
+ context?: string;
23
+ }
24
+ /**
25
+ * Result of parsing user input for mentions
26
+ */
27
+ export interface ParsedInput {
28
+ /** Original input text */
29
+ original: string;
30
+ /** Whether the input starts with a switch ($agent at beginning) */
31
+ hasSwitch: boolean;
32
+ /** The switch target agent (if hasSwitch is true) */
33
+ switchTarget?: string;
34
+ /** Message to send after switching (if hasSwitch is true) */
35
+ messageAfterSwitch?: string;
36
+ /** All reference mentions (mid-sentence $agent) */
37
+ references: ParsedMention[];
38
+ /** Input with mentions replaced by placeholders for context injection */
39
+ normalizedInput: string;
40
+ }
41
+ /**
42
+ * Parse user input for $agent mentions
43
+ *
44
+ * @param input - User input string
45
+ * @param validAgents - Set of valid agent IDs (for validation)
46
+ * @returns Parsed input with mentions identified
47
+ */
48
+ export declare function parseInputForMentions(input: string, validAgents?: Set<string>): ParsedInput;
49
+ /**
50
+ * Get unique agent IDs from references
51
+ */
52
+ export declare function getReferencedAgents(parsed: ParsedInput): string[];
53
+ /**
54
+ * Check if input contains any references (not just switch)
55
+ */
56
+ export declare function hasReferences(parsed: ParsedInput): boolean;
57
+ /**
58
+ * Build a message with context injected for mentions
59
+ *
60
+ * @param parsed - Parsed input
61
+ * @param contextMap - Map of agentId → resolved context string
62
+ * @returns Message with context prepended or injected
63
+ */
64
+ export declare function buildMessageWithContext(parsed: ParsedInput, contextMap: Map<string, string>): string;
@@ -0,0 +1,146 @@
1
+ /**
2
+ * MentionParser - Parse $agent references in user input
3
+ *
4
+ * Two types of $agent usage:
5
+ * 1. Switch: "$arch message" at start of input → switch to arch, send message
6
+ * 2. Reference: "what did $arch propose" mid-sentence → inject arch's context
7
+ *
8
+ * Detection rule: $name at START of trimmed input = switch. Otherwise = reference.
9
+ */
10
+ // =============================================================================
11
+ // Constants
12
+ // =============================================================================
13
+ // Match $agentname pattern - alphanumeric and underscore/hyphen
14
+ const MENTION_PATTERN = /\$([a-zA-Z][a-zA-Z0-9_-]*)/g;
15
+ // Match $agent at start of input (for switch detection)
16
+ const SWITCH_PATTERN = /^\$([a-zA-Z][a-zA-Z0-9_-]*)\s*/;
17
+ // =============================================================================
18
+ // Parser
19
+ // =============================================================================
20
+ /**
21
+ * Parse user input for $agent mentions
22
+ *
23
+ * @param input - User input string
24
+ * @param validAgents - Set of valid agent IDs (for validation)
25
+ * @returns Parsed input with mentions identified
26
+ */
27
+ export function parseInputForMentions(input, validAgents) {
28
+ const trimmed = input.trim();
29
+ // Check for switch pattern at start
30
+ const switchMatch = trimmed.match(SWITCH_PATTERN);
31
+ let hasSwitch = false;
32
+ let switchTarget;
33
+ let messageAfterSwitch;
34
+ let searchStart = 0;
35
+ if (switchMatch) {
36
+ const agentId = switchMatch[1].toLowerCase();
37
+ // Only treat as switch if it's a valid agent
38
+ if (!validAgents || validAgents.has(agentId)) {
39
+ hasSwitch = true;
40
+ switchTarget = agentId;
41
+ messageAfterSwitch = trimmed.slice(switchMatch[0].length).trim();
42
+ searchStart = switchMatch[0].length; // Skip switch when looking for references
43
+ }
44
+ }
45
+ // Find all reference mentions (excluding the switch)
46
+ const references = [];
47
+ MENTION_PATTERN.lastIndex = searchStart;
48
+ let match;
49
+ while ((match = MENTION_PATTERN.exec(trimmed)) !== null) {
50
+ const agentId = match[1].toLowerCase();
51
+ // Skip if not a valid agent (if validation set provided)
52
+ if (validAgents && !validAgents.has(agentId)) {
53
+ continue;
54
+ }
55
+ // Skip if this is the switch mention
56
+ if (hasSwitch && match.index === 0) {
57
+ continue;
58
+ }
59
+ references.push({
60
+ agentId,
61
+ startIndex: match.index,
62
+ endIndex: match.index + match[0].length,
63
+ raw: match[0],
64
+ });
65
+ }
66
+ // Extract context hints for each reference
67
+ for (const ref of references) {
68
+ ref.context = extractContextHint(trimmed, ref.endIndex);
69
+ }
70
+ // Build normalized input (with mention placeholders)
71
+ const normalizedInput = hasSwitch ? messageAfterSwitch ?? '' : trimmed;
72
+ // For normalized input, we keep mentions as-is but could replace with markers
73
+ // This is useful for the resolver to know where to inject context
74
+ return {
75
+ original: input,
76
+ hasSwitch,
77
+ switchTarget,
78
+ messageAfterSwitch,
79
+ references,
80
+ normalizedInput,
81
+ };
82
+ }
83
+ /**
84
+ * Extract a context hint following a mention
85
+ *
86
+ * Examples:
87
+ * - "what did $arch propose for the API" → "propose for the API"
88
+ * - "review $qa's feedback on the PR" → "'s feedback on the PR"
89
+ * - "based on $arch" → undefined
90
+ */
91
+ function extractContextHint(text, afterIndex) {
92
+ const remaining = text.slice(afterIndex);
93
+ // Common patterns that provide context:
94
+ // - "'s <noun>" (possessive)
95
+ // - " <verb> <object>" (action)
96
+ // - " about <topic>"
97
+ // - " for <topic>"
98
+ // - " on <topic>"
99
+ // Get up to end of sentence or 50 chars
100
+ const endMatch = remaining.match(/^[^.!?\n]{0,50}/);
101
+ if (!endMatch || endMatch[0].trim().length < 3) {
102
+ return undefined;
103
+ }
104
+ return endMatch[0].trim();
105
+ }
106
+ /**
107
+ * Get unique agent IDs from references
108
+ */
109
+ export function getReferencedAgents(parsed) {
110
+ const agents = new Set();
111
+ for (const ref of parsed.references) {
112
+ agents.add(ref.agentId);
113
+ }
114
+ return Array.from(agents);
115
+ }
116
+ /**
117
+ * Check if input contains any references (not just switch)
118
+ */
119
+ export function hasReferences(parsed) {
120
+ return parsed.references.length > 0;
121
+ }
122
+ /**
123
+ * Build a message with context injected for mentions
124
+ *
125
+ * @param parsed - Parsed input
126
+ * @param contextMap - Map of agentId → resolved context string
127
+ * @returns Message with context prepended or injected
128
+ */
129
+ export function buildMessageWithContext(parsed, contextMap) {
130
+ if (parsed.references.length === 0) {
131
+ return parsed.normalizedInput;
132
+ }
133
+ // Collect context blocks
134
+ const contextBlocks = [];
135
+ for (const ref of parsed.references) {
136
+ const context = contextMap.get(ref.agentId);
137
+ if (context) {
138
+ contextBlocks.push(`[Context from $${ref.agentId}:\n${context}\n]`);
139
+ }
140
+ }
141
+ if (contextBlocks.length === 0) {
142
+ return parsed.normalizedInput;
143
+ }
144
+ // Prepend context blocks to the message
145
+ return `${contextBlocks.join('\n\n')}\n\n${parsed.normalizedInput}`;
146
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * NotificationManager - Cross-session notifications
3
+ *
4
+ * Polls the shared session_notifications table so that events in one terminal
5
+ * (e.g. a background agent finishing, a pending approval request) are surfaced
6
+ * to other terminals working on the same project.
7
+ *
8
+ * Singleton pattern — same as SessionRegistry and FileLockManager.
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ import type Database from 'better-sqlite3';
12
+ import { type SessionNotificationRecord } from '../db/index.js';
13
+ export interface NotificationInsertOptions {
14
+ projectId: number;
15
+ fromSessionId: string;
16
+ toSessionId?: string | null;
17
+ type: 'pending_request' | 'agent_finished';
18
+ title: string;
19
+ message?: string | null;
20
+ payload?: Record<string, unknown>;
21
+ }
22
+ export interface SessionNotification extends SessionNotificationRecord {
23
+ /** Label of the sending session (joined from terminal_sessions) */
24
+ from_label: string | null;
25
+ }
26
+ /**
27
+ * Get the current NotificationManager instance (null if not initialized)
28
+ */
29
+ export declare function getNotificationManager(): NotificationManager | null;
30
+ /**
31
+ * Initialize and return the NotificationManager singleton.
32
+ */
33
+ export declare function initNotificationManager(): NotificationManager;
34
+ export declare class NotificationManager extends EventEmitter {
35
+ private readonly db;
36
+ private pollInterval;
37
+ private lastKnownCount;
38
+ constructor(db: Database.Database);
39
+ /**
40
+ * Start polling for new notifications (5s interval, .unref()).
41
+ */
42
+ startPolling(): void;
43
+ /**
44
+ * Stop polling.
45
+ */
46
+ stopPolling(): void;
47
+ /**
48
+ * Insert a new notification into the shared DB.
49
+ * Returns the notification ID, or null on failure.
50
+ */
51
+ insert(options: NotificationInsertOptions): string | null;
52
+ /**
53
+ * Get the count of unread notifications for this session.
54
+ * Lightweight COUNT(*) — used by the status bar poll.
55
+ */
56
+ getUnreadCount(): number;
57
+ /**
58
+ * Get all unread notifications for this session (with sender label).
59
+ * Used by the overlay for full display.
60
+ */
61
+ getUnread(): SessionNotification[];
62
+ /**
63
+ * Mark a single notification as read.
64
+ */
65
+ markRead(notificationId: string): void;
66
+ /**
67
+ * Mark all unread notifications for this session as read.
68
+ */
69
+ markAllRead(): void;
70
+ /**
71
+ * Clean up old notifications:
72
+ * - Delete read notifications older than 1 hour
73
+ * - Delete orphaned notifications (sender session gone, CASCADE missed)
74
+ */
75
+ cleanup(): void;
76
+ /**
77
+ * Poll for new notifications and emit 'count-changed' on delta.
78
+ */
79
+ private checkForNewNotifications;
80
+ /**
81
+ * Re-check count and emit if changed (after mark operations).
82
+ */
83
+ private emitCountChange;
84
+ }