@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,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
+ }