@compilr-dev/cli 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,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).