@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,671 @@
1
+ /**
2
+ * SharedContextManager - Shared context across team agents
3
+ *
4
+ * Provides a lightweight, token-budgeted context layer that's injected
5
+ * into all agent system prompts. Enables cross-agent knowledge sharing.
6
+ *
7
+ * Token Budget: ~4000 tokens (2% of 200K context)
8
+ */
9
+ // =============================================================================
10
+ // Constants
11
+ // =============================================================================
12
+ const DEFAULT_TOKEN_BUDGET = 4000;
13
+ const MAX_DECISIONS = 10;
14
+ const MAX_DECISION_LENGTH = 100;
15
+ const MAX_MEMORY_SUMMARY_LENGTH = 2000;
16
+ const MAX_ACTIVITY_ITEMS = 5;
17
+ // Token counting via tiktoken
18
+ import { estimateTokens } from '../utils/token-tracker.js';
19
+ // =============================================================================
20
+ // SharedContextManager
21
+ // =============================================================================
22
+ /**
23
+ * Manages shared context across all team agents
24
+ */
25
+ export class SharedContextManager {
26
+ project;
27
+ team;
28
+ teamRoster = []; // Full roster for team awareness
29
+ recentActivity = []; // Activity feed for team awareness
30
+ decisions = [];
31
+ artifactIndex = [];
32
+ tokenBudget;
33
+ updatedAt = new Date();
34
+ constructor(options) {
35
+ this.project = {
36
+ id: options?.project?.id ?? null,
37
+ name: options?.project?.name ?? 'Unknown Project',
38
+ path: options?.project?.path ?? process.cwd(),
39
+ memorySummary: options?.project?.memorySummary ?? '',
40
+ };
41
+ this.team = {
42
+ agents: ['default'],
43
+ activeAgent: 'default',
44
+ };
45
+ this.tokenBudget = {
46
+ max: options?.maxTokens ?? DEFAULT_TOKEN_BUDGET,
47
+ current: 0,
48
+ };
49
+ this.updateTokenCount();
50
+ }
51
+ // ---------------------------------------------------------------------------
52
+ // Project Management
53
+ // ---------------------------------------------------------------------------
54
+ /**
55
+ * Update project information
56
+ */
57
+ setProject(project) {
58
+ if (project.id !== undefined)
59
+ this.project.id = project.id;
60
+ if (project.name !== undefined)
61
+ this.project.name = project.name;
62
+ if (project.path !== undefined)
63
+ this.project.path = project.path;
64
+ if (project.memorySummary !== undefined) {
65
+ // Truncate if too long
66
+ this.project.memorySummary = project.memorySummary.slice(0, MAX_MEMORY_SUMMARY_LENGTH);
67
+ }
68
+ this.touch();
69
+ }
70
+ /**
71
+ * Get project information
72
+ */
73
+ getProject() {
74
+ return { ...this.project };
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Team Management
78
+ // ---------------------------------------------------------------------------
79
+ /**
80
+ * Update team roster
81
+ */
82
+ setTeam(agents, activeAgent) {
83
+ this.team.agents = [...agents];
84
+ if (activeAgent && agents.includes(activeAgent)) {
85
+ this.team.activeAgent = activeAgent;
86
+ }
87
+ this.touch();
88
+ }
89
+ /**
90
+ * Set active agent
91
+ */
92
+ setActiveAgent(agentId) {
93
+ if (this.team.agents.includes(agentId)) {
94
+ this.team.activeAgent = agentId;
95
+ this.touch();
96
+ }
97
+ }
98
+ /**
99
+ * Add an agent to the team
100
+ */
101
+ addAgent(agentId) {
102
+ if (!this.team.agents.includes(agentId)) {
103
+ this.team.agents.push(agentId);
104
+ this.touch();
105
+ }
106
+ }
107
+ /**
108
+ * Remove an agent from the team
109
+ */
110
+ removeAgent(agentId) {
111
+ const index = this.team.agents.indexOf(agentId);
112
+ if (index !== -1) {
113
+ this.team.agents.splice(index, 1);
114
+ // If active agent was removed, switch to default
115
+ if (this.team.activeAgent === agentId) {
116
+ this.team.activeAgent = 'default';
117
+ }
118
+ this.touch();
119
+ }
120
+ }
121
+ /**
122
+ * Get team roster
123
+ */
124
+ getTeam() {
125
+ return { ...this.team, agents: [...this.team.agents] };
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // Team Roster (for Team Awareness)
129
+ // ---------------------------------------------------------------------------
130
+ /**
131
+ * Update the full team roster with agent details
132
+ * Called when team composition changes
133
+ */
134
+ updateTeamRoster(entries) {
135
+ this.teamRoster = entries.map(entry => ({ ...entry }));
136
+ this.touch();
137
+ }
138
+ /**
139
+ * Set active agent in the roster
140
+ * Called on agent switch
141
+ */
142
+ setRosterActiveAgent(agentId) {
143
+ for (const entry of this.teamRoster) {
144
+ entry.isActive = entry.id === agentId;
145
+ }
146
+ // Also update the simple team info
147
+ if (this.team.agents.includes(agentId)) {
148
+ this.team.activeAgent = agentId;
149
+ }
150
+ this.touch();
151
+ }
152
+ /**
153
+ * Get the full team roster
154
+ */
155
+ getTeamRoster() {
156
+ return this.teamRoster.map(entry => ({ ...entry }));
157
+ }
158
+ /**
159
+ * Check if team roster is available (more than just default agent)
160
+ */
161
+ hasTeamRoster() {
162
+ return this.teamRoster.length > 1;
163
+ }
164
+ /**
165
+ * Update task counts for an agent
166
+ * Called by REPL when todo list or work items change
167
+ */
168
+ updateAgentTaskCounts(agentId, todoCount, workItemCount) {
169
+ const entry = this.teamRoster.find(e => e.id === agentId);
170
+ if (entry) {
171
+ entry.todoCount = todoCount;
172
+ entry.workItemCount = workItemCount;
173
+ this.touch();
174
+ }
175
+ }
176
+ /**
177
+ * Update task counts for all agents
178
+ * Called with a map of agentId -> { todoCount, workItemCount }
179
+ */
180
+ updateAllAgentTaskCounts(counts) {
181
+ for (const entry of this.teamRoster) {
182
+ if (entry.id in counts) {
183
+ const agentCounts = counts[entry.id];
184
+ entry.todoCount = agentCounts.todoCount;
185
+ entry.workItemCount = agentCounts.workItemCount;
186
+ }
187
+ else {
188
+ entry.todoCount = 0;
189
+ entry.workItemCount = 0;
190
+ }
191
+ }
192
+ this.touch();
193
+ }
194
+ // ---------------------------------------------------------------------------
195
+ // Activity Feed (for Team Awareness)
196
+ // ---------------------------------------------------------------------------
197
+ /**
198
+ * Record a team activity
199
+ * Called when significant actions occur (artifact created, task completed, etc.)
200
+ */
201
+ recordActivity(activity) {
202
+ const newActivity = {
203
+ ...activity,
204
+ timestamp: new Date(),
205
+ };
206
+ this.recentActivity.unshift(newActivity);
207
+ // Keep only MAX_ACTIVITY_ITEMS
208
+ if (this.recentActivity.length > MAX_ACTIVITY_ITEMS) {
209
+ this.recentActivity = this.recentActivity.slice(0, MAX_ACTIVITY_ITEMS);
210
+ }
211
+ this.touch();
212
+ }
213
+ /**
214
+ * Get recent activity
215
+ */
216
+ getRecentActivity() {
217
+ return this.recentActivity.map(a => ({ ...a }));
218
+ }
219
+ /**
220
+ * Check if there is recent activity to display
221
+ */
222
+ hasRecentActivity() {
223
+ return this.recentActivity.length > 0;
224
+ }
225
+ /**
226
+ * Clear activity feed
227
+ */
228
+ clearActivity() {
229
+ this.recentActivity = [];
230
+ this.touch();
231
+ }
232
+ // ---------------------------------------------------------------------------
233
+ // Decision Management
234
+ // ---------------------------------------------------------------------------
235
+ /**
236
+ * Add a decision to the shared context
237
+ */
238
+ addDecision(decision) {
239
+ const id = `dec-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`;
240
+ // Truncate summary if too long
241
+ const summary = decision.summary.slice(0, MAX_DECISION_LENGTH);
242
+ const newDecision = {
243
+ id,
244
+ agent: decision.agent,
245
+ summary,
246
+ reasoning: decision.reasoning,
247
+ timestamp: new Date(),
248
+ };
249
+ this.decisions.unshift(newDecision);
250
+ // Keep only MAX_DECISIONS
251
+ if (this.decisions.length > MAX_DECISIONS) {
252
+ this.decisions = this.decisions.slice(0, MAX_DECISIONS);
253
+ }
254
+ this.touch();
255
+ return id;
256
+ }
257
+ /**
258
+ * Update/supersede a decision
259
+ */
260
+ supersededDecision(oldId, newDecision) {
261
+ // Mark old decision as superseded
262
+ const old = this.decisions.find(d => d.id === oldId);
263
+ const newId = this.addDecision(newDecision);
264
+ if (old) {
265
+ old.supersededBy = newId;
266
+ }
267
+ return newId;
268
+ }
269
+ /**
270
+ * Get all decisions (active only by default)
271
+ */
272
+ getDecisions(includeSuperseded = false) {
273
+ if (includeSuperseded) {
274
+ return [...this.decisions];
275
+ }
276
+ return this.decisions.filter(d => !d.supersededBy);
277
+ }
278
+ /**
279
+ * Clear all decisions
280
+ */
281
+ clearDecisions() {
282
+ this.decisions = [];
283
+ this.touch();
284
+ }
285
+ // ---------------------------------------------------------------------------
286
+ // Artifact Index Management
287
+ // ---------------------------------------------------------------------------
288
+ /**
289
+ * Update the artifact index (called by ArtifactStore)
290
+ */
291
+ setArtifactIndex(index) {
292
+ this.artifactIndex = [...index];
293
+ this.touch();
294
+ }
295
+ /**
296
+ * Add an artifact to the index
297
+ */
298
+ addArtifactToIndex(artifact) {
299
+ // Remove existing with same ID
300
+ this.artifactIndex = this.artifactIndex.filter(a => a.id !== artifact.id);
301
+ this.artifactIndex.unshift(artifact);
302
+ this.touch();
303
+ }
304
+ /**
305
+ * Remove an artifact from the index
306
+ */
307
+ removeArtifactFromIndex(artifactId) {
308
+ this.artifactIndex = this.artifactIndex.filter(a => a.id !== artifactId);
309
+ this.touch();
310
+ }
311
+ /**
312
+ * Get artifact index
313
+ */
314
+ getArtifactIndex() {
315
+ return [...this.artifactIndex];
316
+ }
317
+ // ---------------------------------------------------------------------------
318
+ // Token Budget Management
319
+ // ---------------------------------------------------------------------------
320
+ /**
321
+ * Update token count based on current content
322
+ */
323
+ updateTokenCount() {
324
+ let tokens = 0;
325
+ // Project info
326
+ tokens += estimateTokens(this.project.name);
327
+ tokens += estimateTokens(this.project.path);
328
+ tokens += estimateTokens(this.project.memorySummary);
329
+ // Team info
330
+ tokens += estimateTokens(this.team.agents.join(', '));
331
+ // Decisions
332
+ for (const decision of this.decisions) {
333
+ tokens += estimateTokens(decision.summary);
334
+ if (decision.reasoning) {
335
+ tokens += estimateTokens(decision.reasoning);
336
+ }
337
+ }
338
+ // Artifact index
339
+ for (const artifact of this.artifactIndex) {
340
+ tokens += estimateTokens(artifact.name);
341
+ tokens += estimateTokens(artifact.summary);
342
+ }
343
+ this.tokenBudget.current = tokens;
344
+ }
345
+ /**
346
+ * Check if adding content would exceed budget
347
+ */
348
+ wouldExceedBudget(additionalTokens) {
349
+ return (this.tokenBudget.current + additionalTokens) > this.tokenBudget.max;
350
+ }
351
+ /**
352
+ * Get token budget status
353
+ */
354
+ getTokenBudget() {
355
+ return { ...this.tokenBudget };
356
+ }
357
+ /**
358
+ * Get utilization percentage
359
+ */
360
+ getUtilization() {
361
+ return Math.round((this.tokenBudget.current / this.tokenBudget.max) * 100);
362
+ }
363
+ // ---------------------------------------------------------------------------
364
+ // Context Formatting
365
+ // ---------------------------------------------------------------------------
366
+ /**
367
+ * Format shared context for injection into system prompt.
368
+ * @param options.excludeRoster - If true, omit the team roster (it will be injected via anchor instead)
369
+ */
370
+ format(options) {
371
+ const lines = [];
372
+ lines.push('## SHARED TEAM CONTEXT');
373
+ lines.push('');
374
+ // Project info
375
+ lines.push(`**Project:** ${this.project.name}`);
376
+ lines.push(`**Path:** ${this.project.path}`);
377
+ if (this.project.memorySummary) {
378
+ lines.push(`**Summary:** ${this.project.memorySummary}`);
379
+ }
380
+ lines.push('');
381
+ // Team roster — skip if excluded (will be injected via anchor for live updates)
382
+ if (!options?.excludeRoster) {
383
+ if (this.hasTeamRoster()) {
384
+ lines.push(this.formatTeamRoster());
385
+ lines.push('');
386
+ }
387
+ else {
388
+ // Fallback to simple team info
389
+ lines.push(`**Team:** ${this.team.agents.map(a => `$${a}`).join(', ')}`);
390
+ lines.push(`**Active:** $${this.team.activeAgent}`);
391
+ lines.push('');
392
+ // Team collaboration instructions (only if multiple agents)
393
+ if (this.team.agents.length > 1) {
394
+ lines.push('**Team Collaboration:**');
395
+ lines.push('- You are part of a multi-agent team. Each agent has a specialized role.');
396
+ lines.push('- If a question or task seems better suited for another team member, suggest asking them.');
397
+ lines.push('- Example: "This is more of an architecture question - you might want to ask $arch about this."');
398
+ lines.push('- Reference artifacts created by other agents when relevant using $mention syntax.');
399
+ lines.push('');
400
+ }
401
+ }
402
+ }
403
+ // Recent team activity (if any)
404
+ if (this.hasRecentActivity()) {
405
+ lines.push(this.formatRecentActivity());
406
+ lines.push('');
407
+ }
408
+ // Decisions
409
+ const activeDecisions = this.getDecisions(false);
410
+ if (activeDecisions.length > 0) {
411
+ lines.push('**Recent Decisions:**');
412
+ for (const decision of activeDecisions.slice(0, 5)) {
413
+ lines.push(`- [$${decision.agent}] ${decision.summary}`);
414
+ }
415
+ lines.push('');
416
+ }
417
+ // Artifacts
418
+ if (this.artifactIndex.length > 0) {
419
+ lines.push('**Available Artifacts:**');
420
+ for (const artifact of this.artifactIndex.slice(0, 10)) {
421
+ lines.push(`- "${artifact.name}" by $${artifact.agent} (${artifact.type})`);
422
+ }
423
+ lines.push('');
424
+ }
425
+ return lines.join('\n');
426
+ }
427
+ /**
428
+ * Format team roster as a table for team awareness
429
+ */
430
+ formatTeamRoster() {
431
+ const lines = [];
432
+ // Find the active agent for personalized guidance
433
+ const activeEntry = this.teamRoster.find(e => e.isActive);
434
+ // Check if any agent has task counts to show
435
+ const showTaskCounts = this.teamRoster.some(e => (e.todoCount ?? 0) > 0 || (e.workItemCount ?? 0) > 0);
436
+ lines.push('### Your Team');
437
+ lines.push('');
438
+ if (showTaskCounts) {
439
+ lines.push('| Agent | Role | Tasks | Expertise |');
440
+ lines.push('|-------|------|-------|-----------|');
441
+ }
442
+ else {
443
+ lines.push('| Agent | Role | Expertise |');
444
+ lines.push('|-------|------|-----------|');
445
+ }
446
+ for (const entry of this.teamRoster) {
447
+ const marker = entry.isActive ? '→ ' : ' ';
448
+ const youMarker = entry.isActive ? ' ← YOU' : '';
449
+ // Show first 3 expertise keywords to keep it concise
450
+ const expertise = entry.expertise.slice(0, 3).join(', ');
451
+ if (showTaskCounts) {
452
+ // Format task counts
453
+ const todoCount = entry.todoCount ?? 0;
454
+ const workItemCount = entry.workItemCount ?? 0;
455
+ const taskParts = [];
456
+ if (todoCount > 0)
457
+ taskParts.push(`${String(todoCount)} todo${todoCount > 1 ? 's' : ''}`);
458
+ if (workItemCount > 0)
459
+ taskParts.push(`${String(workItemCount)} item${workItemCount > 1 ? 's' : ''}`);
460
+ const taskStr = taskParts.length > 0 ? taskParts.join(', ') : '-';
461
+ lines.push(`| ${marker}$${entry.id} ${entry.mascot} | ${entry.displayName} | ${taskStr} | ${expertise}${youMarker} |`);
462
+ }
463
+ else {
464
+ lines.push(`| ${marker}$${entry.id} ${entry.mascot} | ${entry.displayName} | ${expertise}${youMarker} |`);
465
+ }
466
+ }
467
+ lines.push('');
468
+ // Handoff guidance - dynamic based on active agent and team
469
+ if (activeEntry) {
470
+ const yourExpertise = activeEntry.expertise.slice(0, 3).join(', ');
471
+ lines.push(`**Your expertise:** ${yourExpertise}`);
472
+ lines.push('');
473
+ }
474
+ lines.push('**Collaboration Guidelines:**');
475
+ lines.push('- If a task falls outside your expertise, suggest the appropriate specialist');
476
+ lines.push('- Example: "This would be better handled by $arch for architecture decisions"');
477
+ lines.push('- Do NOT attempt tasks far outside your expertise - it\'s better to suggest a handoff');
478
+ // Add specific handoff suggestions based on teammates
479
+ const handoffSuggestions = this.buildHandoffSuggestions(activeEntry?.id);
480
+ if (handoffSuggestions.length > 0) {
481
+ lines.push('');
482
+ lines.push('**When to involve teammates:**');
483
+ for (const suggestion of handoffSuggestions) {
484
+ lines.push(`- ${suggestion}`);
485
+ }
486
+ }
487
+ return lines.join('\n');
488
+ }
489
+ /**
490
+ * Build handoff suggestions based on team composition
491
+ */
492
+ buildHandoffSuggestions(activeAgentId) {
493
+ const suggestions = [];
494
+ for (const entry of this.teamRoster) {
495
+ // Skip the active agent
496
+ if (entry.id === activeAgentId)
497
+ continue;
498
+ // Build suggestion based on role
499
+ const role = entry.role;
500
+ switch (role) {
501
+ case 'arch':
502
+ suggestions.push(`Architecture/design questions → "Let me get $${entry.id}'s input on the design"`);
503
+ break;
504
+ case 'pm':
505
+ suggestions.push(`Planning/prioritization → "$${entry.id} can help with task breakdown"`);
506
+ break;
507
+ case 'qa':
508
+ suggestions.push(`Testing/quality concerns → "$${entry.id} should review the test strategy"`);
509
+ break;
510
+ case 'dev':
511
+ suggestions.push(`Implementation details → "$${entry.id} can handle the coding"`);
512
+ break;
513
+ case 'ops':
514
+ suggestions.push(`Deployment/infrastructure → "$${entry.id} can advise on CI/CD"`);
515
+ break;
516
+ case 'docs':
517
+ suggestions.push(`Documentation needs → "$${entry.id} can write the user docs"`);
518
+ break;
519
+ case 'ba':
520
+ suggestions.push(`Requirements clarity → "$${entry.id} can help clarify the business need"`);
521
+ break;
522
+ default:
523
+ // For default or custom agents, use their display name
524
+ if (entry.expertise.length > 0) {
525
+ suggestions.push(`${entry.expertise[0]} → "$${entry.id} specializes in this"`);
526
+ }
527
+ }
528
+ }
529
+ // Limit to 5 suggestions to keep it concise
530
+ return suggestions.slice(0, 5);
531
+ }
532
+ /**
533
+ * Format recent activity feed for team awareness
534
+ */
535
+ formatRecentActivity() {
536
+ const lines = [];
537
+ lines.push('### Recent Team Activity');
538
+ lines.push('');
539
+ for (const activity of this.recentActivity) {
540
+ const ago = this.formatTimeAgo(activity.timestamp);
541
+ lines.push(`- [${ago}] $${activity.agentId} ${activity.summary}`);
542
+ }
543
+ return lines.join('\n');
544
+ }
545
+ /**
546
+ * Format a timestamp as "Xm ago", "Xh ago", etc.
547
+ */
548
+ formatTimeAgo(timestamp) {
549
+ const now = Date.now();
550
+ const diff = now - timestamp.getTime();
551
+ const minutes = Math.floor(diff / 60000);
552
+ const hours = Math.floor(diff / 3600000);
553
+ if (minutes < 1) {
554
+ return 'just now';
555
+ }
556
+ else if (minutes < 60) {
557
+ return `${String(minutes)}m ago`;
558
+ }
559
+ else if (hours < 24) {
560
+ return `${String(hours)}h ago`;
561
+ }
562
+ else {
563
+ const days = Math.floor(hours / 24);
564
+ return `${String(days)}d ago`;
565
+ }
566
+ }
567
+ /**
568
+ * Format a compact version (for token-constrained situations)
569
+ */
570
+ formatCompact() {
571
+ const parts = [];
572
+ parts.push(`Project: ${this.project.name}`);
573
+ parts.push(`Team: ${this.team.agents.map(a => `$${a}`).join(', ')}`);
574
+ const activeDecisions = this.getDecisions(false);
575
+ if (activeDecisions.length > 0) {
576
+ parts.push(`Decisions: ${String(activeDecisions.length)}`);
577
+ }
578
+ if (this.artifactIndex.length > 0) {
579
+ parts.push(`Artifacts: ${this.artifactIndex.map(a => `"${a.name}"`).join(', ')}`);
580
+ }
581
+ return parts.join(' | ');
582
+ }
583
+ // ---------------------------------------------------------------------------
584
+ // Persistence
585
+ // ---------------------------------------------------------------------------
586
+ /**
587
+ * Mark as updated
588
+ */
589
+ touch() {
590
+ this.updatedAt = new Date();
591
+ this.updateTokenCount();
592
+ }
593
+ /**
594
+ * Serialize for persistence
595
+ */
596
+ serialize() {
597
+ return {
598
+ version: 1,
599
+ project: {
600
+ id: this.project.id,
601
+ name: this.project.name,
602
+ path: this.project.path,
603
+ memorySummary: this.project.memorySummary,
604
+ },
605
+ decisions: this.decisions.map(d => ({
606
+ id: d.id,
607
+ agent: d.agent,
608
+ summary: d.summary,
609
+ reasoning: d.reasoning,
610
+ timestamp: d.timestamp.toISOString(),
611
+ supersededBy: d.supersededBy,
612
+ })),
613
+ artifactIndex: this.artifactIndex.map(a => ({
614
+ id: a.id,
615
+ name: a.name,
616
+ agent: a.agent,
617
+ type: a.type,
618
+ summary: a.summary,
619
+ updatedAt: a.updatedAt.toISOString(),
620
+ })),
621
+ updatedAt: this.updatedAt.toISOString(),
622
+ };
623
+ }
624
+ /**
625
+ * Restore from serialized data
626
+ */
627
+ static fromSerialized(data) {
628
+ const manager = new SharedContextManager({
629
+ project: {
630
+ id: data.project.id,
631
+ name: data.project.name,
632
+ path: data.project.path,
633
+ memorySummary: data.project.memorySummary,
634
+ },
635
+ });
636
+ // Restore decisions
637
+ manager.decisions = data.decisions.map(d => ({
638
+ id: d.id,
639
+ agent: d.agent,
640
+ summary: d.summary,
641
+ reasoning: d.reasoning,
642
+ timestamp: new Date(d.timestamp),
643
+ supersededBy: d.supersededBy,
644
+ }));
645
+ // Restore artifact index
646
+ manager.artifactIndex = data.artifactIndex.map(a => ({
647
+ id: a.id,
648
+ name: a.name,
649
+ agent: a.agent,
650
+ type: a.type,
651
+ summary: a.summary,
652
+ updatedAt: new Date(a.updatedAt),
653
+ }));
654
+ manager.updatedAt = new Date(data.updatedAt);
655
+ manager.updateTokenCount();
656
+ return manager;
657
+ }
658
+ /**
659
+ * Get the full context object
660
+ */
661
+ getContext() {
662
+ return {
663
+ project: this.getProject(),
664
+ team: this.getTeam(),
665
+ decisions: this.getDecisions(),
666
+ artifactIndex: this.getArtifactIndex(),
667
+ tokenBudget: this.getTokenBudget(),
668
+ updatedAt: this.updatedAt,
669
+ };
670
+ }
671
+ }