@compilr-dev/cli 0.4.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 (634) hide show
  1. package/README.md +254 -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 +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  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/index.d.ts +2 -1
  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.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -0,0 +1,316 @@
1
+ /**
2
+ * ContextResolver - Resolve $agent mentions to actual content
3
+ *
4
+ * Resolution strategy:
5
+ * 1. Check for explicit artifact reference in context hint
6
+ * 2. Search artifacts by name/content matching context hint
7
+ * 3. Fall back to recent conversation history
8
+ *
9
+ * Token budgets:
10
+ * - Single mention: 2000 tokens max
11
+ * - Multiple mentions: 3000 tokens total, split among mentions
12
+ */
13
+ // =============================================================================
14
+ // Constants
15
+ // =============================================================================
16
+ const DEFAULT_MAX_TOKENS_PER_MENTION = 2000;
17
+ const DEFAULT_MAX_TOTAL_TOKENS = 3000;
18
+ const DEFAULT_MAX_HISTORY_MESSAGES = 10;
19
+ // Token counting via tiktoken
20
+ import { estimateTokens } from '../utils/token-tracker.js';
21
+ // =============================================================================
22
+ // ContextResolver
23
+ // =============================================================================
24
+ /**
25
+ * Resolve mentions to actual content
26
+ */
27
+ export class ContextResolver {
28
+ team;
29
+ artifactStore;
30
+ constructor(team, artifactStore) {
31
+ this.team = team;
32
+ this.artifactStore = artifactStore;
33
+ }
34
+ /**
35
+ * Resolve multiple mentions
36
+ */
37
+ resolveAll(mentions, options = {}) {
38
+ const maxTotal = options.maxTotalTokens ?? DEFAULT_MAX_TOTAL_TOKENS;
39
+ const perMention = options.maxTokensPerMention ?? DEFAULT_MAX_TOKENS_PER_MENTION;
40
+ // Calculate budget per mention
41
+ const budgetPerMention = Math.min(perMention, Math.floor(maxTotal / mentions.length));
42
+ const results = new Map();
43
+ let totalTokens = 0;
44
+ for (const mention of mentions) {
45
+ // Skip if we're out of budget
46
+ if (totalTokens >= maxTotal) {
47
+ results.set(mention.agentId, {
48
+ mention,
49
+ resolved: false,
50
+ source: 'not_found',
51
+ sourceName: 'budget exceeded',
52
+ content: '',
53
+ tokenCount: 0,
54
+ });
55
+ continue;
56
+ }
57
+ const remainingBudget = Math.min(budgetPerMention, maxTotal - totalTokens);
58
+ const resolved = this.resolveMention(mention, {
59
+ ...options,
60
+ maxTokensPerMention: remainingBudget,
61
+ });
62
+ results.set(mention.agentId, resolved);
63
+ totalTokens += resolved.tokenCount;
64
+ }
65
+ return results;
66
+ }
67
+ /**
68
+ * Resolve a single mention
69
+ */
70
+ resolveMention(mention, options = {}) {
71
+ const maxTokens = options.maxTokensPerMention ?? DEFAULT_MAX_TOKENS_PER_MENTION;
72
+ // 1. Try to find matching artifact
73
+ const artifactResult = this.resolveFromArtifacts(mention, maxTokens, options);
74
+ if (artifactResult) {
75
+ return artifactResult;
76
+ }
77
+ // 2. Try to extract from conversation history
78
+ const historyResult = this.resolveFromHistory(mention, maxTokens, options);
79
+ if (historyResult) {
80
+ return historyResult;
81
+ }
82
+ // 3. Not found
83
+ return {
84
+ mention,
85
+ resolved: false,
86
+ source: 'not_found',
87
+ sourceName: 'no relevant content found',
88
+ content: '',
89
+ tokenCount: 0,
90
+ };
91
+ }
92
+ /**
93
+ * Resolve from artifacts
94
+ */
95
+ resolveFromArtifacts(mention, maxTokens, options) {
96
+ const { agentId, context } = mention;
97
+ // Get artifacts by this agent
98
+ const agentArtifacts = this.artifactStore.listByAgent(agentId);
99
+ if (agentArtifacts.length === 0) {
100
+ return null;
101
+ }
102
+ // Sort artifacts by most recent first
103
+ const sortedArtifacts = agentArtifacts
104
+ .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
105
+ // Find matching artifact based on context hint
106
+ let matchedArtifact;
107
+ if (context) {
108
+ // Search by name or content
109
+ const searchResults = this.artifactStore.search(context);
110
+ const searchMatch = searchResults.find(a => a.agent === agentId);
111
+ // Use search match if found, otherwise fall back to most recent
112
+ matchedArtifact = searchMatch ?? sortedArtifacts[0];
113
+ }
114
+ else {
115
+ // No context hint - use most recent artifact
116
+ matchedArtifact = sortedArtifacts[0];
117
+ }
118
+ // Format artifact content
119
+ let content;
120
+ let tokenCount;
121
+ if (options.includeFullArtifact) {
122
+ content = this.formatArtifactFull(matchedArtifact);
123
+ tokenCount = estimateTokens(content);
124
+ // If over budget, fall back to summary
125
+ if (tokenCount > maxTokens) {
126
+ content = this.formatArtifactSummary(matchedArtifact);
127
+ tokenCount = estimateTokens(content);
128
+ }
129
+ }
130
+ else {
131
+ // Start with summary, include full if within budget
132
+ const summary = this.formatArtifactSummary(matchedArtifact);
133
+ const full = this.formatArtifactFull(matchedArtifact);
134
+ if (estimateTokens(full) <= maxTokens) {
135
+ content = full;
136
+ }
137
+ else {
138
+ content = summary;
139
+ }
140
+ tokenCount = estimateTokens(content);
141
+ }
142
+ return {
143
+ mention,
144
+ resolved: true,
145
+ source: 'artifact',
146
+ sourceName: matchedArtifact.name,
147
+ content,
148
+ tokenCount,
149
+ };
150
+ }
151
+ /**
152
+ * Resolve from conversation history
153
+ */
154
+ resolveFromHistory(mention, maxTokens, options) {
155
+ const { agentId, context } = mention;
156
+ const maxMessages = options.maxHistoryMessages ?? DEFAULT_MAX_HISTORY_MESSAGES;
157
+ // Get the team agent
158
+ const teamAgent = this.team.get(agentId);
159
+ if (!teamAgent) {
160
+ return null;
161
+ }
162
+ // Get the underlying agent
163
+ const agent = teamAgent.agent;
164
+ if (!agent) {
165
+ return null;
166
+ }
167
+ // Get recent messages from the agent's history
168
+ const state = agent.serialize();
169
+ const messages = state.messages;
170
+ if (messages.length === 0) {
171
+ return null;
172
+ }
173
+ // Get assistant messages (agent's responses)
174
+ const assistantMessages = messages
175
+ .filter((m) => m.role === 'assistant')
176
+ .slice(-maxMessages);
177
+ if (assistantMessages.length === 0) {
178
+ return null;
179
+ }
180
+ // Extract relevant content
181
+ let relevantContent;
182
+ if (context) {
183
+ // Search for context in messages
184
+ relevantContent = this.extractRelevantContent(assistantMessages, context, maxTokens);
185
+ }
186
+ else {
187
+ // Use most recent message
188
+ const lastMessage = assistantMessages[assistantMessages.length - 1];
189
+ relevantContent = this.formatMessage(lastMessage);
190
+ }
191
+ if (!relevantContent) {
192
+ return null;
193
+ }
194
+ // Truncate if needed
195
+ const tokenCount = estimateTokens(relevantContent);
196
+ if (tokenCount > maxTokens) {
197
+ relevantContent = this.truncateToTokens(relevantContent, maxTokens);
198
+ }
199
+ return {
200
+ mention,
201
+ resolved: true,
202
+ source: 'history',
203
+ sourceName: 'recent conversation',
204
+ content: relevantContent,
205
+ tokenCount: estimateTokens(relevantContent),
206
+ };
207
+ }
208
+ /**
209
+ * Extract relevant content from messages based on context hint
210
+ */
211
+ extractRelevantContent(messages, context, maxTokens) {
212
+ const keywords = context.toLowerCase().split(/\s+/).filter(w => w.length > 2);
213
+ // Score messages by relevance
214
+ const scored = messages.map(msg => {
215
+ const content = this.formatMessage(msg);
216
+ const contentLower = content.toLowerCase();
217
+ let score = 0;
218
+ for (const keyword of keywords) {
219
+ if (contentLower.includes(keyword)) {
220
+ score += 1;
221
+ }
222
+ }
223
+ return { content, score };
224
+ });
225
+ // Sort by score (highest first)
226
+ scored.sort((a, b) => b.score - a.score);
227
+ // Take best matches within token budget
228
+ const results = [];
229
+ let totalTokens = 0;
230
+ for (const { content, score } of scored) {
231
+ if (score === 0)
232
+ continue;
233
+ const tokens = estimateTokens(content);
234
+ if (totalTokens + tokens > maxTokens) {
235
+ // Try to include truncated version
236
+ const remaining = maxTokens - totalTokens;
237
+ if (remaining > 100) {
238
+ results.push(this.truncateToTokens(content, remaining));
239
+ }
240
+ break;
241
+ }
242
+ results.push(content);
243
+ totalTokens += tokens;
244
+ }
245
+ return results.join('\n\n---\n\n');
246
+ }
247
+ /**
248
+ * Format a message for injection
249
+ */
250
+ formatMessage(message) {
251
+ if (typeof message.content === 'string') {
252
+ return message.content;
253
+ }
254
+ // Handle array content (Claude format)
255
+ if (Array.isArray(message.content)) {
256
+ const blocks = message.content;
257
+ return blocks
258
+ .filter((block) => block.type === 'text' && typeof block.text === 'string')
259
+ .map(block => block.text)
260
+ .join('\n');
261
+ }
262
+ return String(message.content);
263
+ }
264
+ /**
265
+ * Format artifact with full content
266
+ */
267
+ formatArtifactFull(artifact) {
268
+ return [
269
+ `**${artifact.name}** (${artifact.type})`,
270
+ `By: $${artifact.agent} | Updated: ${artifact.updatedAt.toLocaleDateString()}`,
271
+ '',
272
+ artifact.content,
273
+ ].join('\n');
274
+ }
275
+ /**
276
+ * Format artifact with summary only
277
+ */
278
+ formatArtifactSummary(artifact) {
279
+ return [
280
+ `**${artifact.name}** (${artifact.type})`,
281
+ `By: $${artifact.agent} | Updated: ${artifact.updatedAt.toLocaleDateString()}`,
282
+ '',
283
+ `Summary: ${artifact.summary}`,
284
+ '',
285
+ `[Full content available via: /artifact view "${artifact.name}"]`,
286
+ ].join('\n');
287
+ }
288
+ /**
289
+ * Truncate content to approximate token count
290
+ */
291
+ truncateToTokens(content, maxTokens) {
292
+ const maxChars = maxTokens * 4;
293
+ if (content.length <= maxChars) {
294
+ return content;
295
+ }
296
+ // Truncate at word boundary
297
+ const truncated = content.slice(0, maxChars);
298
+ const lastSpace = truncated.lastIndexOf(' ');
299
+ if (lastSpace > maxChars * 0.8) {
300
+ return truncated.slice(0, lastSpace) + '...';
301
+ }
302
+ return truncated + '...';
303
+ }
304
+ }
305
+ /**
306
+ * Build a context map from resolved mentions
307
+ */
308
+ export function buildContextMap(resolved) {
309
+ const contextMap = new Map();
310
+ for (const [agentId, resolution] of resolved) {
311
+ if (resolution.resolved && resolution.content) {
312
+ contextMap.set(agentId, resolution.content);
313
+ }
314
+ }
315
+ return contextMap;
316
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Custom Agent Definitions
3
+ *
4
+ * Enables users to create custom specialized agents beyond predefined templates.
5
+ * Custom agents have user-defined names, specialties, and personalities.
6
+ */
7
+ import { type ToolConfig, type ToolProfile } from './tool-config.js';
8
+ import type { ModelTier } from '../models/index.js';
9
+ export interface CustomAgentDefinition {
10
+ id: string;
11
+ displayName: string;
12
+ specialty: string;
13
+ personality?: string;
14
+ mascot: string;
15
+ createdAt: string;
16
+ toolConfig?: ToolConfig;
17
+ enabledSkills?: string[];
18
+ modelTier?: ModelTier;
19
+ }
20
+ export type { ToolConfig, ToolProfile };
21
+ /**
22
+ * Mascots available for custom agents.
23
+ * These are distinct from predefined role mascots.
24
+ */
25
+ export declare const CUSTOM_MASCOTS: string[];
26
+ /**
27
+ * Assign a mascot from the available pool.
28
+ * Avoids mascots already in use by other custom agents.
29
+ */
30
+ export declare function assignMascot(existingAgents: CustomAgentDefinition[]): string;
31
+ /**
32
+ * Generate system prompt for a custom agent.
33
+ * Uses a template-based approach (no LLM call).
34
+ * Includes tool awareness if the agent has tool restrictions.
35
+ */
36
+ export declare function generateCustomAgentSystemPrompt(agent: CustomAgentDefinition): string;
37
+ /**
38
+ * Get the tool filter (list of allowed tools) for a custom agent.
39
+ * Returns undefined for full access (no filtering).
40
+ */
41
+ export declare function getCustomAgentToolFilter(agent: CustomAgentDefinition): string[] | undefined;
42
+ /**
43
+ * Get the profile display name for a custom agent.
44
+ */
45
+ export declare function getCustomAgentProfileLabel(agent: CustomAgentDefinition): string;
46
+ /**
47
+ * Validate agent ID format.
48
+ * Must be lowercase letters, numbers, and underscores.
49
+ * Must start with a letter.
50
+ */
51
+ export declare function validateAgentId(id: string): {
52
+ valid: boolean;
53
+ error?: string;
54
+ };
55
+ /**
56
+ * Check if agent ID is already in use.
57
+ */
58
+ export declare function isAgentIdTaken(id: string, existingCustomAgents: CustomAgentDefinition[], teamAgentIds: string[], predefinedRoleIds: string[]): {
59
+ taken: boolean;
60
+ reason?: string;
61
+ };
62
+ /**
63
+ * Load custom agents from project directory.
64
+ * Returns empty array if file doesn't exist.
65
+ * Automatically migrates v1 agents to v2 format.
66
+ */
67
+ export declare function loadCustomAgents(projectPath: string): CustomAgentDefinition[];
68
+ /**
69
+ * Save custom agents to project directory.
70
+ */
71
+ export declare function saveCustomAgents(projectPath: string, agents: CustomAgentDefinition[]): void;
72
+ /**
73
+ * Add a new custom agent and save.
74
+ */
75
+ export declare function addCustomAgent(projectPath: string, agent: CustomAgentDefinition): void;
76
+ /**
77
+ * Remove a custom agent by ID and save.
78
+ */
79
+ export declare function removeCustomAgent(projectPath: string, agentId: string): boolean;
80
+ /**
81
+ * Create a new CustomAgentDefinition with auto-assigned mascot.
82
+ */
83
+ export declare function createCustomAgentDefinition(id: string, displayName: string, specialty: string, personality: string | undefined, existingAgents: CustomAgentDefinition[], toolConfig?: ToolConfig, enabledSkills?: string[], modelTier?: ModelTier): CustomAgentDefinition;
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Custom Agent Definitions
3
+ *
4
+ * Enables users to create custom specialized agents beyond predefined templates.
5
+ * Custom agents have user-defined names, specialties, and personalities.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { createDefaultToolConfig, getToolsForProfile, generateToolAwarenessPrompt, PROFILE_INFO, } from './tool-config.js';
10
+ // Current storage version
11
+ const STORAGE_VERSION = 2;
12
+ // =============================================================================
13
+ // Mascot Pool for Custom Agents
14
+ // =============================================================================
15
+ /**
16
+ * Mascots available for custom agents.
17
+ * These are distinct from predefined role mascots.
18
+ */
19
+ export const CUSTOM_MASCOTS = [
20
+ '[⊡_⊡]', '[⊞_⊞]', '[⊟_⊟]', '[⊠_⊠]',
21
+ '[⋈_⋈]', '[⋐_⋐]', '[⋑_⋑]', '[⋒_⋒]',
22
+ '[◌_◌]', '[◍_◍]', '[●_●]', '[◐_◐]',
23
+ '[◑_◑]', '[◒_◒]', '[◓_◓]', '[◔_◔]',
24
+ ];
25
+ /**
26
+ * Assign a mascot from the available pool.
27
+ * Avoids mascots already in use by other custom agents.
28
+ */
29
+ export function assignMascot(existingAgents) {
30
+ const usedMascots = new Set(existingAgents.map(a => a.mascot));
31
+ const available = CUSTOM_MASCOTS.filter(m => !usedMascots.has(m));
32
+ if (available.length > 0) {
33
+ return available[0];
34
+ }
35
+ // Fall back to random selection if all are used
36
+ return CUSTOM_MASCOTS[Math.floor(Math.random() * CUSTOM_MASCOTS.length)];
37
+ }
38
+ // =============================================================================
39
+ // System Prompt Generation
40
+ // =============================================================================
41
+ /**
42
+ * Generate system prompt for a custom agent.
43
+ * Uses a template-based approach (no LLM call).
44
+ * Includes tool awareness if the agent has tool restrictions.
45
+ */
46
+ export function generateCustomAgentSystemPrompt(agent) {
47
+ const lines = [
48
+ `You are a ${agent.displayName} specialized in ${agent.specialty}.`,
49
+ ];
50
+ if (agent.personality) {
51
+ lines.push('');
52
+ lines.push(`Your approach: ${agent.personality}`);
53
+ }
54
+ lines.push('');
55
+ lines.push('Focus on your area of expertise. When questions fall outside your specialty, suggest which team member might be better suited to help.');
56
+ // Add tool awareness if agent has tool restrictions
57
+ const toolConfig = agent.toolConfig ?? createDefaultToolConfig();
58
+ if (toolConfig.profile !== 'full') {
59
+ lines.push('');
60
+ lines.push('---');
61
+ lines.push('');
62
+ lines.push(generateToolAwarenessPrompt(toolConfig));
63
+ }
64
+ return lines.join('\n');
65
+ }
66
+ /**
67
+ * Get the tool filter (list of allowed tools) for a custom agent.
68
+ * Returns undefined for full access (no filtering).
69
+ */
70
+ export function getCustomAgentToolFilter(agent) {
71
+ const toolConfig = agent.toolConfig ?? createDefaultToolConfig();
72
+ return getToolsForProfile(toolConfig.profile, toolConfig.customGroups);
73
+ }
74
+ /**
75
+ * Get the profile display name for a custom agent.
76
+ */
77
+ export function getCustomAgentProfileLabel(agent) {
78
+ const toolConfig = agent.toolConfig ?? createDefaultToolConfig();
79
+ const info = PROFILE_INFO[toolConfig.profile];
80
+ return info.label;
81
+ }
82
+ // =============================================================================
83
+ // Validation
84
+ // =============================================================================
85
+ /**
86
+ * Validate agent ID format.
87
+ * Must be lowercase letters, numbers, and underscores.
88
+ * Must start with a letter.
89
+ */
90
+ export function validateAgentId(id) {
91
+ if (!id || id.trim() === '') {
92
+ return { valid: false, error: 'Agent ID is required' };
93
+ }
94
+ if (id.length > 20) {
95
+ return { valid: false, error: 'Agent ID must be 20 characters or less' };
96
+ }
97
+ if (!/^[a-z][a-z0-9_]*$/.test(id)) {
98
+ return { valid: false, error: 'Must be lowercase letters, numbers, underscore (start with letter)' };
99
+ }
100
+ return { valid: true };
101
+ }
102
+ /**
103
+ * Check if agent ID is already in use.
104
+ */
105
+ export function isAgentIdTaken(id, existingCustomAgents, teamAgentIds, predefinedRoleIds) {
106
+ // Check predefined roles
107
+ if (predefinedRoleIds.includes(id)) {
108
+ return { taken: true, reason: `"${id}" is a predefined role` };
109
+ }
110
+ // Check team agents
111
+ if (teamAgentIds.includes(id)) {
112
+ return { taken: true, reason: `"${id}" is already in your team` };
113
+ }
114
+ // Check custom agents
115
+ if (existingCustomAgents.some(a => a.id === id)) {
116
+ return { taken: true, reason: `"${id}" already exists as a custom agent` };
117
+ }
118
+ return { taken: false };
119
+ }
120
+ // =============================================================================
121
+ // Storage
122
+ // =============================================================================
123
+ const CUSTOM_AGENTS_FILENAME = 'custom-agents.json';
124
+ const COMPILR_DIR = '.compilr';
125
+ /**
126
+ * Get the path to custom agents file for a project.
127
+ */
128
+ function getCustomAgentsPath(projectPath) {
129
+ return path.join(projectPath, COMPILR_DIR, CUSTOM_AGENTS_FILENAME);
130
+ }
131
+ /**
132
+ * Ensure .compilr directory exists.
133
+ */
134
+ function ensureCompilrDir(projectPath) {
135
+ const dirPath = path.join(projectPath, COMPILR_DIR);
136
+ if (!fs.existsSync(dirPath)) {
137
+ fs.mkdirSync(dirPath, { recursive: true });
138
+ }
139
+ }
140
+ /**
141
+ * Migrate a v1 agent to v2 format.
142
+ * Adds default toolConfig (full access) and empty enabledSkills.
143
+ */
144
+ function migrateAgentV1toV2(agent) {
145
+ return {
146
+ ...agent,
147
+ toolConfig: agent.toolConfig ?? createDefaultToolConfig(),
148
+ enabledSkills: agent.enabledSkills ?? [], // Empty = all skills
149
+ };
150
+ }
151
+ /**
152
+ * Load custom agents from project directory.
153
+ * Returns empty array if file doesn't exist.
154
+ * Automatically migrates v1 agents to v2 format.
155
+ */
156
+ export function loadCustomAgents(projectPath) {
157
+ const filePath = getCustomAgentsPath(projectPath);
158
+ if (!fs.existsSync(filePath)) {
159
+ return [];
160
+ }
161
+ try {
162
+ const content = fs.readFileSync(filePath, 'utf-8');
163
+ const data = JSON.parse(content);
164
+ const agents = data.agents;
165
+ // Migrate v1 agents to v2 format if needed
166
+ if (data.version < STORAGE_VERSION) {
167
+ const migratedAgents = agents.map(migrateAgentV1toV2);
168
+ // Save migrated agents
169
+ saveCustomAgents(projectPath, migratedAgents);
170
+ return migratedAgents;
171
+ }
172
+ return agents;
173
+ }
174
+ catch {
175
+ // If file is corrupted, return empty array
176
+ return [];
177
+ }
178
+ }
179
+ /**
180
+ * Save custom agents to project directory.
181
+ */
182
+ export function saveCustomAgents(projectPath, agents) {
183
+ ensureCompilrDir(projectPath);
184
+ const filePath = getCustomAgentsPath(projectPath);
185
+ const data = {
186
+ version: STORAGE_VERSION,
187
+ agents,
188
+ };
189
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
190
+ }
191
+ /**
192
+ * Add a new custom agent and save.
193
+ */
194
+ export function addCustomAgent(projectPath, agent) {
195
+ const agents = loadCustomAgents(projectPath);
196
+ agents.push(agent);
197
+ saveCustomAgents(projectPath, agents);
198
+ }
199
+ /**
200
+ * Remove a custom agent by ID and save.
201
+ */
202
+ export function removeCustomAgent(projectPath, agentId) {
203
+ const agents = loadCustomAgents(projectPath);
204
+ const index = agents.findIndex(a => a.id === agentId);
205
+ if (index === -1) {
206
+ return false;
207
+ }
208
+ agents.splice(index, 1);
209
+ saveCustomAgents(projectPath, agents);
210
+ return true;
211
+ }
212
+ /**
213
+ * Create a new CustomAgentDefinition with auto-assigned mascot.
214
+ */
215
+ export function createCustomAgentDefinition(id, displayName, specialty, personality, existingAgents, toolConfig, enabledSkills, modelTier) {
216
+ return {
217
+ id,
218
+ displayName,
219
+ specialty,
220
+ personality: personality || undefined,
221
+ mascot: assignMascot(existingAgents),
222
+ createdAt: new Date().toISOString(),
223
+ toolConfig: toolConfig ?? createDefaultToolConfig(),
224
+ enabledSkills: enabledSkills ?? [], // Empty = all skills
225
+ modelTier: modelTier ?? 'balanced', // Default tier
226
+ };
227
+ }