@compilr-dev/cli 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Artifact Detail Overlay V2
3
+ *
4
+ * Fullscreen markdown artifact viewer with vim-style navigation.
5
+ *
6
+ * Features:
7
+ * - Full-screen artifact viewing with markdown rendering
8
+ * - Vim-style navigation (j/k, g/G, PgUp/PgDn)
9
+ * - Metadata display (type, agent, version, timestamps)
10
+ */
11
+ import chalk from 'chalk';
12
+ import { marked } from 'marked';
13
+ import { markedTerminal } from 'marked-terminal';
14
+ import { BaseOverlayV2 } from '../../base/overlay-base-v2.js';
15
+ import { getCurrentTheme } from '../../../themes/index.js';
16
+ import * as terminal from '../../terminal.js';
17
+ import { ARTIFACT_TYPE_LABELS } from '../../constants/labels.js';
18
+ // =============================================================================
19
+ // Alternate Screen Buffer Management
20
+ // =============================================================================
21
+ let inAlternateScreen = false;
22
+ function enterAlternateScreen() {
23
+ if (inAlternateScreen)
24
+ return;
25
+ process.stdout.write('\x1b[?1049h'); // Switch to alternate screen
26
+ process.stdout.write('\x1b[H'); // Move cursor to home
27
+ inAlternateScreen = true;
28
+ }
29
+ function exitAlternateScreen() {
30
+ if (!inAlternateScreen)
31
+ return;
32
+ process.stdout.write('\x1b[?1049l'); // Switch back to main screen
33
+ inAlternateScreen = false;
34
+ }
35
+ // Ensure we exit alternate screen on process termination
36
+ function setupAlternateScreenCleanup() {
37
+ const cleanup = () => {
38
+ exitAlternateScreen();
39
+ };
40
+ process.on('exit', cleanup);
41
+ process.on('SIGINT', () => {
42
+ cleanup();
43
+ process.exit(130);
44
+ });
45
+ process.on('SIGTERM', () => {
46
+ cleanup();
47
+ process.exit(143);
48
+ });
49
+ }
50
+ setupAlternateScreenCleanup();
51
+ // =============================================================================
52
+ // Constants
53
+ // =============================================================================
54
+ const TYPE_LABELS = ARTIFACT_TYPE_LABELS;
55
+ // =============================================================================
56
+ // Markdown Rendering Helper
57
+ // =============================================================================
58
+ function getThemedMarkedOptions(termWidth) {
59
+ const theme = getCurrentTheme();
60
+ const primaryColor = chalk.hex(theme.colors.primary);
61
+ const secondaryColor = chalk.hex(theme.colors.secondary || theme.colors.primary);
62
+ const mutedColor = chalk.hex(theme.colors.muted);
63
+ const borderColor = chalk.hex(theme.colors.border);
64
+ const fgColor = chalk.hex(theme.colors.foreground);
65
+ return {
66
+ showSectionPrefix: false,
67
+ reflowText: false,
68
+ width: Math.min(100, termWidth - 4),
69
+ unescape: true,
70
+ tab: 2,
71
+ heading: primaryColor.bold,
72
+ firstHeading: primaryColor.bold,
73
+ strong: fgColor.bold,
74
+ em: fgColor.italic,
75
+ link: secondaryColor,
76
+ href: secondaryColor.underline,
77
+ blockquote: mutedColor.italic,
78
+ del: mutedColor.strikethrough,
79
+ hr: borderColor,
80
+ codespan: secondaryColor,
81
+ code: secondaryColor,
82
+ html: mutedColor,
83
+ table: fgColor,
84
+ listitem: fgColor,
85
+ paragraph: fgColor,
86
+ };
87
+ }
88
+ function renderMarkdownSync(content, termWidth) {
89
+ const options = getThemedMarkedOptions(termWidth);
90
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
91
+ marked.use(markedTerminal(options));
92
+ const rendered = marked.parse(content, { async: false });
93
+ return rendered.split('\n');
94
+ }
95
+ // =============================================================================
96
+ // Artifact Detail Overlay V2
97
+ // =============================================================================
98
+ export class ArtifactDetailOverlayV2 extends BaseOverlayV2 {
99
+ // Use 'inline' type so terminal-ui doesn't clear screen - we manage alternate screen ourselves
100
+ type = 'inline';
101
+ id = 'artifact-detail-overlay-v2';
102
+ // Tell terminal-ui we manage our own screen buffer - skip clearing on close
103
+ usesAlternateScreen = true;
104
+ artifact;
105
+ constructor(artifact) {
106
+ // Build header with metadata
107
+ const theme = getCurrentTheme();
108
+ const termWidth = terminal.getTerminalWidth();
109
+ const header = [];
110
+ header.push(chalk.bold.hex(theme.colors.primary)(`"${artifact.name}"`));
111
+ header.push('');
112
+ const typeLabel = TYPE_LABELS[artifact.type] || artifact.type;
113
+ const meta = [
114
+ `Type: ${chalk.bold(typeLabel)}`,
115
+ `Agent: ${chalk.bold(`$${artifact.agent}`)}`,
116
+ `Version: ${String(artifact.version)}`,
117
+ ];
118
+ header.push(meta.join(' | '));
119
+ const created = artifact.createdAt.toLocaleString();
120
+ const updated = artifact.updatedAt.toLocaleString();
121
+ header.push(chalk.hex(theme.colors.muted)(`Created: ${created} | Updated: ${updated}`));
122
+ header.push('');
123
+ if (artifact.summary) {
124
+ header.push(chalk.hex(theme.colors.muted)(`Summary: ${artifact.summary}`));
125
+ header.push('');
126
+ }
127
+ header.push(chalk.hex(theme.colors.muted)('─'.repeat(termWidth - 4)));
128
+ header.push('');
129
+ // Render markdown content
130
+ const contentLines = renderMarkdownSync(artifact.content, termWidth);
131
+ // Combine header and content
132
+ const renderedLines = [...header, ...contentLines];
133
+ super({
134
+ renderedLines,
135
+ scrollOffset: 0,
136
+ maxScroll: 0,
137
+ });
138
+ this.artifact = artifact;
139
+ }
140
+ /**
141
+ * Enter alternate screen buffer when overlay mounts.
142
+ */
143
+ onMount() {
144
+ enterAlternateScreen();
145
+ terminal.hideCursor();
146
+ }
147
+ /**
148
+ * Exit alternate screen buffer when overlay unmounts.
149
+ */
150
+ onUnmount() {
151
+ exitAlternateScreen();
152
+ terminal.showCursor();
153
+ }
154
+ renderContent(context) {
155
+ const s = context.styles;
156
+ const cols = context.width;
157
+ const rows = context.height;
158
+ // Calculate visible area (reserve 2 lines for footer)
159
+ const contentHeight = rows - 2;
160
+ this.state.maxScroll = Math.max(0, this.state.renderedLines.length - contentHeight + 2);
161
+ // Build output
162
+ const output = [];
163
+ // Render visible content lines
164
+ for (let i = 0; i < contentHeight; i++) {
165
+ const lineIndex = this.state.scrollOffset + i;
166
+ if (lineIndex < this.state.renderedLines.length) {
167
+ const line = this.state.renderedLines[lineIndex];
168
+ // Truncate to terminal width
169
+ output.push(line.slice(0, cols));
170
+ }
171
+ else {
172
+ output.push('');
173
+ }
174
+ }
175
+ // Render footer
176
+ const scrollInfo = this.state.maxScroll > 0
177
+ ? ` [${String(this.state.scrollOffset + 1)}-${String(Math.min(this.state.scrollOffset + contentHeight, this.state.renderedLines.length))}/${String(this.state.renderedLines.length)}]`
178
+ : '';
179
+ output.push(s.inverse(` q/Esc: back j/k: scroll g/G: top/bottom PgUp/PgDn: page ${scrollInfo} `.padEnd(cols)));
180
+ return output;
181
+ }
182
+ /**
183
+ * Handle key events
184
+ */
185
+ handleKey(key) {
186
+ const termHeight = terminal.getTerminalHeight();
187
+ const pageSize = termHeight - 4;
188
+ // Scroll down: j, Down
189
+ if (key.name === 'j' || key.name === 'down') {
190
+ if (this.state.scrollOffset < this.state.maxScroll) {
191
+ this.state.scrollOffset++;
192
+ }
193
+ return this.rerender();
194
+ }
195
+ // Scroll up: k, Up
196
+ if (key.name === 'k' || key.name === 'up') {
197
+ if (this.state.scrollOffset > 0) {
198
+ this.state.scrollOffset--;
199
+ }
200
+ return this.rerender();
201
+ }
202
+ // Page down: PgDn, Space, Ctrl+d
203
+ if (key.name === 'pagedown' || key.name === 'space' || (key.name === 'd' && key.ctrl)) {
204
+ this.state.scrollOffset = Math.min(this.state.maxScroll, this.state.scrollOffset + pageSize);
205
+ return this.rerender();
206
+ }
207
+ // Page up: PgUp, Ctrl+b
208
+ if (key.name === 'pageup' || (key.name === 'b' && key.ctrl)) {
209
+ this.state.scrollOffset = Math.max(0, this.state.scrollOffset - pageSize);
210
+ return this.rerender();
211
+ }
212
+ // Go to top: g, Home
213
+ if (key.name === 'g' || key.name === 'home') {
214
+ this.state.scrollOffset = 0;
215
+ return this.rerender();
216
+ }
217
+ // Go to bottom: G (shift+g), End
218
+ if ((key.name === 'g' && key.shift) || key.name === 'end') {
219
+ this.state.scrollOffset = this.state.maxScroll;
220
+ return this.rerender();
221
+ }
222
+ // Ctrl+C: exit completely
223
+ if (this.isInterruptKey(key)) {
224
+ return this.close({ goBack: false });
225
+ }
226
+ // q, Esc: go back to list
227
+ if (this.isCloseKey(key)) {
228
+ return this.close({ goBack: true });
229
+ }
230
+ return this.noAction();
231
+ }
232
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Artifact Overlay V2
3
+ *
4
+ * Browse and manage team artifacts.
5
+ * Uses TabbedListOverlayV2 for consistent list/tab/search behavior.
6
+ *
7
+ * Features:
8
+ * - Tabbed filtering by artifact type
9
+ * - Search with / toggle
10
+ * - Paginated list
11
+ * - Returns selected artifact for viewing in separate fullscreen overlay
12
+ */
13
+ import { TabbedListOverlayV2 } from '../../base/tabbed-list-overlay-v2.js';
14
+ import type { OverlayAction, KeyEvent } from '../types.js';
15
+ import { type Artifact } from '../../../multi-agent/index.js';
16
+ export interface ArtifactOverlayV2Result {
17
+ /** Selected artifact to view (if any) */
18
+ selectedArtifact?: Artifact;
19
+ /** Whether user cancelled (Ctrl+C or Esc) */
20
+ cancelled: boolean;
21
+ }
22
+ export declare class ArtifactOverlayV2 extends TabbedListOverlayV2<Artifact, ArtifactOverlayV2Result> {
23
+ readonly type: "inline";
24
+ readonly id = "artifact-overlay-v2";
25
+ private readonly projectName;
26
+ constructor();
27
+ /**
28
+ * Override to render project name in header
29
+ */
30
+ protected renderHeader(title: string, subtitle?: string): string[];
31
+ /**
32
+ * Override to handle item selection.
33
+ * Returns the selected artifact so the command handler can show it in a fullscreen overlay.
34
+ */
35
+ protected onItemSelected(artifact: Artifact): ArtifactOverlayV2Result | undefined;
36
+ /**
37
+ * Override to handle custom keys (delete)
38
+ */
39
+ handleKey(key: KeyEvent): OverlayAction<ArtifactOverlayV2Result>;
40
+ }
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Artifact Overlay V2
3
+ *
4
+ * Browse and manage team artifacts.
5
+ * Uses TabbedListOverlayV2 for consistent list/tab/search behavior.
6
+ *
7
+ * Features:
8
+ * - Tabbed filtering by artifact type
9
+ * - Search with / toggle
10
+ * - Paginated list
11
+ * - Returns selected artifact for viewing in separate fullscreen overlay
12
+ */
13
+ import { TabbedListOverlayV2 } from '../../base/tabbed-list-overlay-v2.js';
14
+ import { getTeamCheckpointer, } from '../../../multi-agent/index.js';
15
+ import { getCurrentProject } from '../../../tools/project-db.js';
16
+ import { ARTIFACT_TYPE_LABELS } from '../../constants/labels.js';
17
+ // =============================================================================
18
+ // Constants
19
+ // =============================================================================
20
+ const PAGE_SIZE = 10;
21
+ const TYPE_LABELS = ARTIFACT_TYPE_LABELS;
22
+ const TYPE_ICONS = {
23
+ 'design': '◇', // Diamond - architecture
24
+ 'plan': '◆', // Filled diamond - task breakdown
25
+ 'review': '○', // Circle - feedback
26
+ 'decision': '●', // Filled circle - decisions
27
+ 'note': '□', // Square - general notes
28
+ };
29
+ const TABS = [
30
+ { id: 'all', label: 'All' },
31
+ { id: 'design', label: 'Design' },
32
+ { id: 'plan', label: 'Plan' },
33
+ { id: 'review', label: 'Review' },
34
+ { id: 'decision', label: 'Decision' },
35
+ { id: 'note', label: 'Note' },
36
+ ];
37
+ // =============================================================================
38
+ // Artifact Overlay V2
39
+ // =============================================================================
40
+ export class ArtifactOverlayV2 extends TabbedListOverlayV2 {
41
+ type = 'inline';
42
+ id = 'artifact-overlay-v2';
43
+ projectName;
44
+ constructor() {
45
+ const activeProject = getCurrentProject();
46
+ const projectId = activeProject?.id ?? null;
47
+ const projectName = activeProject?.displayName ?? null;
48
+ // Load artifacts from checkpointer
49
+ const checkpointer = getTeamCheckpointer();
50
+ const store = checkpointer.getArtifactStore(projectId);
51
+ const artifacts = store.list();
52
+ // Sort by most recently updated
53
+ artifacts.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
54
+ super({
55
+ title: 'Artifacts',
56
+ tabs: TABS,
57
+ items: artifacts,
58
+ pageSize: PAGE_SIZE,
59
+ filterByTab: (artifact, tabId) => {
60
+ if (tabId === 'all')
61
+ return true;
62
+ return artifact.type === tabId;
63
+ },
64
+ getSearchText: (artifact) => `${artifact.name} ${artifact.type} ${artifact.agent} ${artifact.summary}`,
65
+ renderItem: (artifact, isSelected, styles) => {
66
+ const prefix = isSelected ? styles.primary('> ') : ' ';
67
+ const icon = TYPE_ICONS[artifact.type] || '?';
68
+ const typeLabel = (TYPE_LABELS[artifact.type] || artifact.type).padEnd(9);
69
+ // Format: [icon] TYPE "Name" by $agent (v2)
70
+ const name = artifact.name.slice(0, 35);
71
+ const agent = `$${artifact.agent}`;
72
+ const version = artifact.version > 1 ? ` (v${String(artifact.version)})` : '';
73
+ if (isSelected) {
74
+ return `${prefix}${icon} ${styles.primaryBold(typeLabel)} ${styles.primary(`"${name}"`)} ${styles.muted(`by ${agent}${version}`)}`;
75
+ }
76
+ return `${prefix}${icon} ${styles.muted(typeLabel)} ${styles.secondary(`"${name}"`)} ${styles.muted(`by ${agent}${version}`)}`;
77
+ },
78
+ showCount: true,
79
+ emptyMessage: projectId === null
80
+ ? 'No active project. Use /projects to select one.'
81
+ : 'No artifacts yet. Use artifact_save to create one.',
82
+ noResultsMessage: 'No artifacts match the search.',
83
+ });
84
+ this.projectName = projectName;
85
+ this.minHeight = 18;
86
+ }
87
+ /**
88
+ * Override to render project name in header
89
+ */
90
+ renderHeader(title, subtitle) {
91
+ const displaySubtitle = this.projectName || subtitle;
92
+ return super.renderHeader(title, displaySubtitle);
93
+ }
94
+ /**
95
+ * Override to handle item selection.
96
+ * Returns the selected artifact so the command handler can show it in a fullscreen overlay.
97
+ */
98
+ onItemSelected(artifact) {
99
+ return { selectedArtifact: artifact, cancelled: false };
100
+ }
101
+ /**
102
+ * Override to handle custom keys (delete)
103
+ */
104
+ handleKey(key) {
105
+ // Check for close keys first
106
+ if (this.isInterruptKey(key)) {
107
+ return this.close({ cancelled: true });
108
+ }
109
+ if (this.isCloseKey(key) && !this.state.searchMode) {
110
+ return this.close({ cancelled: true });
111
+ }
112
+ // Let parent handle everything else (including Enter → onItemSelected)
113
+ return super.handleKey(key);
114
+ }
115
+ }
@@ -144,11 +144,8 @@ export class AskUserOverlayV2 extends BaseOverlayV2 {
144
144
  const question = this.questions[this.state.currentQuestion];
145
145
  const questionIndex = this.state.currentQuestion;
146
146
  const totalQuestions = this.questions.length;
147
- // Context if provided (only on first question)
148
- if (this.context && questionIndex === 0) {
149
- lines.push(s.muted(' ' + this.context));
150
- lines.push('');
151
- }
147
+ // Note: context field is deprecated - agent explanations should be streamed
148
+ // before the tool call, not displayed inside the overlay
152
149
  // Question number and text
153
150
  lines.push(chalk.bold(` [${String(questionIndex + 1)}/${String(totalQuestions)}] ${question.question}`));
154
151
  lines.push('');
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Background Agents Overlay V2
3
+ *
4
+ * Modal overlay for viewing and managing background agents.
5
+ * Users can see status, bring to foreground, or kill agents.
6
+ *
7
+ * Phase 3c: Background Agents
8
+ */
9
+ import { BaseOverlayV2 } from '../../base/index.js';
10
+ import type { RenderContext, OverlayAction, KeyEvent } from '../index.js';
11
+ import type { BackgroundSessionInfo } from '../../../multi-agent/types.js';
12
+ export type BackgroundOverlayResult = {
13
+ type: 'closed';
14
+ } | {
15
+ type: 'foreground';
16
+ agentId: string;
17
+ } | {
18
+ type: 'kill';
19
+ agentId: string;
20
+ };
21
+ interface BackgroundOverlayState {
22
+ /** Currently selected agent index */
23
+ selectedIndex: number;
24
+ /** Sessions snapshot */
25
+ sessions: BackgroundSessionInfo[];
26
+ }
27
+ export interface BackgroundOverlayOptions {
28
+ /** Function to get current background sessions */
29
+ getSessions: () => BackgroundSessionInfo[];
30
+ }
31
+ export declare class BackgroundOverlayV2 extends BaseOverlayV2<BackgroundOverlayState, BackgroundOverlayResult> {
32
+ readonly type: "inline";
33
+ readonly id = "background-overlay-v2";
34
+ private readonly getSessions;
35
+ constructor(options: BackgroundOverlayOptions);
36
+ protected renderContent(context: RenderContext): string[];
37
+ handleKey(key: KeyEvent): OverlayAction<BackgroundOverlayResult>;
38
+ getCloseSummary(result: BackgroundOverlayResult): string | null;
39
+ }
40
+ export {};
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Background Agents Overlay V2
3
+ *
4
+ * Modal overlay for viewing and managing background agents.
5
+ * Users can see status, bring to foreground, or kill agents.
6
+ *
7
+ * Phase 3c: Background Agents
8
+ */
9
+ import chalk from 'chalk';
10
+ import { getStyles } from '../../../themes/index.js';
11
+ import { BaseOverlayV2 } from '../../base/index.js';
12
+ import * as terminal from '../../terminal.js';
13
+ // =============================================================================
14
+ // Background Overlay V2 Class
15
+ // =============================================================================
16
+ export class BackgroundOverlayV2 extends BaseOverlayV2 {
17
+ type = 'inline';
18
+ id = 'background-overlay-v2';
19
+ getSessions;
20
+ constructor(options) {
21
+ const sessions = options.getSessions();
22
+ super({
23
+ selectedIndex: 0,
24
+ sessions,
25
+ });
26
+ this.getSessions = options.getSessions;
27
+ this.minHeight = 10;
28
+ }
29
+ renderContent(context) {
30
+ const s = context.styles;
31
+ const lines = [];
32
+ const cols = terminal.getTerminalWidth();
33
+ const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
34
+ // Refresh sessions each render
35
+ this.state.sessions = this.getSessions();
36
+ // Header
37
+ lines.push(border);
38
+ lines.push(' ' + chalk.bold('Background Agents') + s.muted(` (${String(this.state.sessions.length)} running)`));
39
+ lines.push(border);
40
+ lines.push('');
41
+ if (this.state.sessions.length === 0) {
42
+ lines.push(s.muted(' No background agents running.'));
43
+ lines.push('');
44
+ lines.push(s.muted(' Start an agent in background with:'));
45
+ lines.push(s.info(' $agent message &'));
46
+ lines.push(s.muted(' or:'));
47
+ lines.push(s.info(' message &'));
48
+ lines.push('');
49
+ }
50
+ else {
51
+ // Render each agent
52
+ for (let i = 0; i < this.state.sessions.length; i++) {
53
+ const session = this.state.sessions[i];
54
+ const isSelected = i === this.state.selectedIndex;
55
+ const prefix = isSelected ? ' ❯ ' : ' ';
56
+ // Agent header: [mascot] $agent (displayName)
57
+ const header = `${session.mascot} $${session.agentId} (${session.displayName})`;
58
+ if (isSelected) {
59
+ lines.push(s.primary(prefix + header));
60
+ }
61
+ else {
62
+ lines.push(s.muted(prefix + header));
63
+ }
64
+ // Status line
65
+ let statusText;
66
+ if (session.isBlocked) {
67
+ statusText = s.warning(`Status: blocked`) + s.muted(` · ${String(session.pendingCount)} pending request${session.pendingCount !== 1 ? 's' : ''}`);
68
+ }
69
+ else if (session.currentAction) {
70
+ statusText = s.success('Status: running') + s.muted(` · ${session.currentAction}`);
71
+ }
72
+ else {
73
+ statusText = s.success('Status: running');
74
+ }
75
+ // Add queue count if there are queued messages
76
+ if (session.queuedCount > 0) {
77
+ statusText += s.muted(` · ${String(session.queuedCount)} queued`);
78
+ }
79
+ lines.push(' ' + statusText);
80
+ // Actions line (only for selected)
81
+ if (isSelected) {
82
+ lines.push(s.info(' [f]oreground · [k]ill'));
83
+ }
84
+ else {
85
+ lines.push('');
86
+ }
87
+ lines.push('');
88
+ }
89
+ }
90
+ // Footer
91
+ lines.push(border);
92
+ if (this.state.sessions.length > 0) {
93
+ lines.push(s.muted(' ↑↓ Navigate · f Foreground · k Kill · Esc Close'));
94
+ }
95
+ else {
96
+ lines.push(s.muted(' Esc Close'));
97
+ }
98
+ return lines;
99
+ }
100
+ handleKey(key) {
101
+ // Escape or Ctrl+C = close
102
+ if (key.name === 'escape' || (key.ctrl && key.name === 'c')) {
103
+ return this.close({ type: 'closed' });
104
+ }
105
+ // No sessions - just allow closing
106
+ if (this.state.sessions.length === 0) {
107
+ return this.rerender();
108
+ }
109
+ const keyStr = key.char?.toLowerCase() ?? '';
110
+ // Arrow navigation
111
+ if (key.name === 'up') {
112
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
113
+ return this.rerender();
114
+ }
115
+ if (key.name === 'down') {
116
+ this.state.selectedIndex = Math.min(this.state.sessions.length - 1, this.state.selectedIndex + 1);
117
+ return this.rerender();
118
+ }
119
+ // Bring to foreground
120
+ if (keyStr === 'f') {
121
+ const session = this.state.sessions[this.state.selectedIndex];
122
+ if (session) {
123
+ return this.close({ type: 'foreground', agentId: session.agentId });
124
+ }
125
+ }
126
+ // Kill agent
127
+ if (keyStr === 'k') {
128
+ const session = this.state.sessions[this.state.selectedIndex];
129
+ if (session) {
130
+ return this.close({ type: 'kill', agentId: session.agentId });
131
+ }
132
+ }
133
+ return this.rerender();
134
+ }
135
+ getCloseSummary(result) {
136
+ if (result.type === 'foreground' || result.type === 'kill') {
137
+ // Action taken, no summary needed (action will print its own message)
138
+ return null;
139
+ }
140
+ const s = getStyles();
141
+ const count = this.state.sessions.length;
142
+ if (count > 0) {
143
+ return s.muted(`Background agents: ${String(count)} running`);
144
+ }
145
+ return null;
146
+ }
147
+ }
@@ -27,6 +27,7 @@ export interface BacklogItem {
27
27
  title: string;
28
28
  description: string;
29
29
  commit?: string;
30
+ owner?: string;
30
31
  }
31
32
  export interface BacklogOverlayV2Result {
32
33
  modified: boolean;
@@ -35,12 +36,14 @@ export declare class BacklogOverlayV2 extends TabbedListOverlayV2<BacklogItem, B
35
36
  readonly type: "inline";
36
37
  readonly id = "backlog-overlay-v2";
37
38
  private readonly editState;
39
+ private readonly teamAgentIds;
38
40
  /**
39
41
  * @param projectId - Optional project ID to view backlog for.
40
42
  * If not provided, uses the active project.
41
43
  * Pass this when opening from workflow overlay for a specific project.
44
+ * @param teamAgentIds - List of agent IDs in the team for owner selection.
42
45
  */
43
- constructor(projectId?: number);
46
+ constructor(projectId?: number, teamAgentIds?: string[]);
44
47
  protected createDetailScreen(item: BacklogItem): BaseScreen | null;
45
48
  /**
46
49
  * Override handleKey to add custom behavior (Space toggle, 'a' add).