@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
@@ -20,6 +20,7 @@
20
20
  */
21
21
  import { getStyles } from '../themes/index.js';
22
22
  import { debugRender } from '../utils/debug-log.js';
23
+ import { formatTokens, truncate } from './base/index.js';
23
24
  // =============================================================================
24
25
  // Formatting Helpers
25
26
  // =============================================================================
@@ -35,29 +36,12 @@ function formatDuration(ms) {
35
36
  const remainingSeconds = Math.floor(seconds % 60);
36
37
  return `${String(minutes)}m ${String(remainingSeconds)}s`;
37
38
  }
38
- /**
39
- * Format token count (e.g., "18.1k", "500")
40
- */
41
- function formatTokens(tokens) {
42
- if (tokens >= 1000) {
43
- return `${(tokens / 1000).toFixed(1)}k`;
44
- }
45
- return tokens.toString();
46
- }
47
39
  /**
48
40
  * Capitalize first letter
49
41
  */
50
42
  function capitalize(str) {
51
43
  return str.charAt(0).toUpperCase() + str.slice(1);
52
44
  }
53
- /**
54
- * Truncate string to max length with ellipsis
55
- */
56
- function truncate(str, maxLen) {
57
- if (str.length <= maxLen)
58
- return str;
59
- return str.slice(0, maxLen - 1) + '…';
60
- }
61
45
  // =============================================================================
62
46
  // Tree Characters (Unicode box drawing)
63
47
  // =============================================================================
@@ -264,7 +248,7 @@ export class SubagentRenderer {
264
248
  if (agent.toolCount > 1) {
265
249
  lines.push(s.muted(` +${String(agent.toolCount - 1)} more tool uses (ctrl+o to expand)`));
266
250
  }
267
- lines.push(s.muted(' ctrl+b to run in background'));
251
+ // ctrl+b background: coming soon
268
252
  }
269
253
  return lines;
270
254
  }
@@ -317,7 +301,7 @@ export class SubagentRenderer {
317
301
  }
318
302
  // Footer hint for running agents
319
303
  if (counts.running > 0) {
320
- lines.push(s.muted(' ctrl+b to run in background'));
304
+ // ctrl+b background: coming soon
321
305
  }
322
306
  return lines;
323
307
  }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Standalone utility functions for input text formatting and autocomplete.
3
+ *
4
+ * Extracted from terminal-ui.ts for modularity.
5
+ * These are pure functions with no class dependencies.
6
+ */
7
+ import type { CommandOption } from './types.js';
8
+ /**
9
+ * Format input text with syntax highlighting for special prefixes.
10
+ * - $agent references: bold + secondary color
11
+ * - @path references: secondary color
12
+ * - /commands: primary color
13
+ */
14
+ export declare function formatInputText(text: string): string;
15
+ /**
16
+ * Calculate fuzzy match score for a query against a target string.
17
+ * Higher score = better match. Returns -1 if no match.
18
+ */
19
+ export declare function fuzzyMatchScore(query: string, target: string): number;
20
+ /**
21
+ * Filter and rank commands matching input using fuzzy matching
22
+ */
23
+ export declare function filterCommands(input: string, commands: CommandOption[]): CommandOption[];
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Standalone utility functions for input text formatting and autocomplete.
3
+ *
4
+ * Extracted from terminal-ui.ts for modularity.
5
+ * These are pure functions with no class dependencies.
6
+ */
7
+ import { Chalk } from 'chalk';
8
+ import { getStyles } from '../themes/index.js';
9
+ // Force color output (level 3 = 24-bit true color)
10
+ const chalk = new Chalk({ level: 3 });
11
+ // =============================================================================
12
+ // Input Text Formatting
13
+ // =============================================================================
14
+ /**
15
+ * Format input text with syntax highlighting for special prefixes.
16
+ * - $agent references: bold + secondary color
17
+ * - @path references: secondary color
18
+ * - /commands: primary color
19
+ */
20
+ export function formatInputText(text) {
21
+ const s = getStyles();
22
+ let result = text;
23
+ // Format $agent references - bold + secondary
24
+ // Match $word at word boundaries (not inside other text)
25
+ result = result.replace(/(?<![$\w])\$([a-zA-Z_][a-zA-Z0-9_]*)\b/g, (_match, agentId) => chalk.bold(s.secondary(`$${agentId}`)));
26
+ // Format @path references - secondary (not bold, paths can be long)
27
+ // Match @word or @path/to/file patterns
28
+ result = result.replace(/(?<![@\w])@([\w./-]+)/g, (_match, path) => s.secondary(`@${path}`));
29
+ // Format /commands at start of input - primary color
30
+ // Only match at start of line (after optional whitespace)
31
+ result = result.replace(/^(\s*)(\/[a-zA-Z][a-zA-Z0-9_-]*)/g, (_match, space, cmd) => space + s.primary(cmd));
32
+ return result;
33
+ }
34
+ // =============================================================================
35
+ // Fuzzy Matching
36
+ // =============================================================================
37
+ /**
38
+ * Calculate fuzzy match score for a query against a target string.
39
+ * Higher score = better match. Returns -1 if no match.
40
+ */
41
+ export function fuzzyMatchScore(query, target) {
42
+ const queryLower = query.toLowerCase();
43
+ const targetLower = target.toLowerCase();
44
+ // Exact prefix match - highest priority (score 1000+)
45
+ if (targetLower.startsWith(queryLower)) {
46
+ return 1000 + (100 - target.length); // Shorter commands rank higher
47
+ }
48
+ // Contiguous substring match - high priority (score 500+)
49
+ if (targetLower.includes(queryLower)) {
50
+ const index = targetLower.indexOf(queryLower);
51
+ return 500 + (100 - index); // Earlier matches rank higher
52
+ }
53
+ // Fuzzy match - characters appear in order (score 100+)
54
+ let queryIdx = 0;
55
+ let consecutiveBonus = 0;
56
+ let lastMatchIdx = -1;
57
+ for (let i = 0; i < targetLower.length && queryIdx < queryLower.length; i++) {
58
+ if (targetLower[i] === queryLower[queryIdx]) {
59
+ if (lastMatchIdx === i - 1) {
60
+ consecutiveBonus += 10;
61
+ }
62
+ lastMatchIdx = i;
63
+ queryIdx++;
64
+ }
65
+ }
66
+ if (queryIdx === queryLower.length) {
67
+ return 100 + consecutiveBonus + (100 - target.length);
68
+ }
69
+ return -1;
70
+ }
71
+ /**
72
+ * Filter and rank commands matching input using fuzzy matching
73
+ */
74
+ export function filterCommands(input, commands) {
75
+ const scored = commands
76
+ .map((cmd) => ({
77
+ cmd,
78
+ score: fuzzyMatchScore(input, cmd.command),
79
+ }))
80
+ .filter((item) => item.score >= 0);
81
+ scored.sort((a, b) => b.score - a.score);
82
+ return scored.map((item) => item.cmd);
83
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Pure line-building utility functions for TerminalUI.
3
+ *
4
+ * Extracted from terminal-ui.ts for modularity.
5
+ * These are pure functions with no class dependencies.
6
+ */
7
+ import type { TodoItem } from './types.js';
8
+ /**
9
+ * Format a duration in milliseconds to a human-readable string.
10
+ * e.g. 5000 → "5s", 90000 → "1m 30s"
11
+ */
12
+ export declare function formatDuration(ms: number): string;
13
+ /**
14
+ * Build a single todo line with task number prefix, icon, content,
15
+ * optional owner badge, and blocked-by suffix.
16
+ */
17
+ export declare function buildTodoLine(todo: TodoItem, taskNumber?: number): string;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pure line-building utility functions for TerminalUI.
3
+ *
4
+ * Extracted from terminal-ui.ts for modularity.
5
+ * These are pure functions with no class dependencies.
6
+ */
7
+ import { getStyles } from '../themes/index.js';
8
+ /**
9
+ * Format a duration in milliseconds to a human-readable string.
10
+ * e.g. 5000 → "5s", 90000 → "1m 30s"
11
+ */
12
+ export function formatDuration(ms) {
13
+ const seconds = Math.floor(ms / 1000);
14
+ if (seconds < 60) {
15
+ return `${String(seconds)}s`;
16
+ }
17
+ const minutes = Math.floor(seconds / 60);
18
+ const remainingSeconds = seconds % 60;
19
+ return `${String(minutes)}m ${String(remainingSeconds)}s`;
20
+ }
21
+ /**
22
+ * Build a single todo line with task number prefix, icon, content,
23
+ * optional owner badge, and blocked-by suffix.
24
+ */
25
+ export function buildTodoLine(todo, taskNumber) {
26
+ const s = getStyles();
27
+ const icon = todo.status === 'completed' ? '✓' :
28
+ todo.status === 'in_progress' ? '→' : '☐';
29
+ const style = todo.status === 'completed' ? s.muted :
30
+ todo.status === 'in_progress' ? s.info : s.muted;
31
+ // Task number prefix (e.g., "#1 ")
32
+ const prefix = taskNumber != null ? `#${String(taskNumber)} ` : '';
33
+ // Owner badge (skip for completed items)
34
+ const ownerBadge = todo.owner && todo.status !== 'completed'
35
+ ? s.muted(` @${todo.owner}`)
36
+ : '';
37
+ // Blocked-by suffix (skip for completed items)
38
+ const blockedSuffix = todo.blockedBy && todo.blockedBy.length > 0 && todo.status !== 'completed'
39
+ ? s.muted(` › blocked by ${todo.blockedBy.map((n) => `#${String(n)}`).join(', ')}`)
40
+ : '';
41
+ return style(`${prefix}${icon} ${todo.content}`) + ownerBadge + blockedSuffix;
42
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Render a single PrintableItem to the console.
3
+ *
4
+ * Extracted from terminal-ui.ts for modularity.
5
+ * This is a nearly-pure function — the only side effect is console.log output.
6
+ * The 'interrupted' case returns a suggestion string instead of calling setSuggestion().
7
+ */
8
+ import type { PrintableItem, TerminalUIConfig } from './terminal-types.js';
9
+ /**
10
+ * Render a single item to the console.
11
+ * Config-aware: respects verbose, showMascot settings.
12
+ *
13
+ * @returns suggestion string for 'interrupted' items, null otherwise.
14
+ * Caller should pass the suggestion to setSuggestion() if non-null.
15
+ */
16
+ export declare function renderItem(item: PrintableItem, config: TerminalUIConfig): string | null;
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Render a single PrintableItem to the console.
3
+ *
4
+ * Extracted from terminal-ui.ts for modularity.
5
+ * This is a nearly-pure function — the only side effect is console.log output.
6
+ * The 'interrupted' case returns a suggestion string instead of calling setSuggestion().
7
+ */
8
+ import * as terminal from './terminal.js';
9
+ import { getStyles } from '../themes/index.js';
10
+ import { renderMarkdown } from './conversation.js';
11
+ import { MASCOT } from './terminal-types.js';
12
+ /**
13
+ * Render a single item to the console.
14
+ * Config-aware: respects verbose, showMascot settings.
15
+ *
16
+ * @returns suggestion string for 'interrupted' items, null otherwise.
17
+ * Caller should pass the suggestion to setSuggestion() if non-null.
18
+ */
19
+ export function renderItem(item, config) {
20
+ const s = getStyles();
21
+ switch (item.type) {
22
+ case 'user-message':
23
+ console.log('');
24
+ console.log(s.primaryBold('> ') + item.text);
25
+ console.log(''); // Trailing blank for separation
26
+ break;
27
+ case 'agent-text': {
28
+ // Render markdown for proper formatting (headers, lists, bold, code, etc.)
29
+ const rendered = renderMarkdown(item.text);
30
+ // Prefix agent messages with mascot expression (if enabled)
31
+ if (config.showMascot) {
32
+ // Expression can be a key ('success', 'neutral') or a direct mascot string ('[◈_◈]')
33
+ let expr;
34
+ if (!item.expression) {
35
+ expr = MASCOT.neutral;
36
+ }
37
+ else if (item.expression.startsWith('[')) {
38
+ // Direct mascot string from team agent
39
+ expr = item.expression;
40
+ }
41
+ else if (item.expression in MASCOT) {
42
+ // Key lookup in MASCOT object
43
+ expr = MASCOT[item.expression];
44
+ }
45
+ else {
46
+ // Unknown expression key, use neutral
47
+ expr = MASCOT.neutral;
48
+ }
49
+ // Only prefix the first line with mascot
50
+ const lines = rendered.split('\n');
51
+ if (lines.length > 0) {
52
+ console.log(s.primary(expr) + s.muted(' > ') + lines[0]);
53
+ for (let i = 1; i < lines.length; i++) {
54
+ console.log(lines[i]);
55
+ }
56
+ }
57
+ }
58
+ else {
59
+ console.log(rendered);
60
+ }
61
+ console.log(''); // Trailing blank for separation
62
+ break;
63
+ }
64
+ case 'thinking':
65
+ // Only show thinking in verbose mode
66
+ if (config.verbose) {
67
+ console.log(s.muted(`∴ Thinking…`));
68
+ console.log('');
69
+ // Indent thinking text
70
+ const lines = item.text.split('\n');
71
+ for (const line of lines) {
72
+ console.log(s.muted(` ${line}`));
73
+ }
74
+ console.log('');
75
+ }
76
+ // If not verbose, skip entirely (but still stored in history)
77
+ break;
78
+ case 'tool-start': {
79
+ // Truncate long params (e.g., long bash commands)
80
+ const maxLen = Math.min(60, terminal.getTerminalWidth() - 15);
81
+ let params = item.params;
82
+ // Handle multi-line params
83
+ const nlIdx = params.indexOf('\n');
84
+ if (nlIdx !== -1) {
85
+ const first = params.slice(0, nlIdx).trim();
86
+ const count = params.split('\n').length;
87
+ params = first.length > 0 ? `${first}… (${String(count)} lines)` : `(${String(count)} line script)`;
88
+ }
89
+ // Truncate if still too long
90
+ if (params.length > maxLen) {
91
+ params = params.slice(0, maxLen) + '…';
92
+ }
93
+ console.log(s.info(`● ${item.name}`) + s.muted(`(${params})`));
94
+ break;
95
+ }
96
+ case 'tool-result': {
97
+ // Truncate long params (e.g., long bash commands)
98
+ const maxParamsLen = Math.min(60, terminal.getTerminalWidth() - 15);
99
+ let paramsDisplay = item.params;
100
+ // Handle multi-line params (show first line + count)
101
+ const newlineIdx = paramsDisplay.indexOf('\n');
102
+ if (newlineIdx !== -1) {
103
+ const firstLine = paramsDisplay.slice(0, newlineIdx).trim();
104
+ const lineCount = paramsDisplay.split('\n').length;
105
+ paramsDisplay = firstLine.length > 0
106
+ ? `${firstLine}… (${String(lineCount)} lines)`
107
+ : `(${String(lineCount)} line script)`;
108
+ }
109
+ // Truncate if still too long
110
+ if (paramsDisplay.length > maxParamsLen) {
111
+ paramsDisplay = paramsDisplay.slice(0, maxParamsLen) + '…';
112
+ }
113
+ console.log(s.info(`● ${item.name}`) + s.muted(`(${paramsDisplay})`));
114
+ // Diff lines: render directly (already ANSI-formatted by diff.ts)
115
+ if (item.diffLines && item.diffLines.length > 0) {
116
+ const maxDiffPreview = 10;
117
+ if (config.verbose || item.diffLines.length <= maxDiffPreview) {
118
+ for (const line of item.diffLines) {
119
+ console.log(` ${line}`);
120
+ }
121
+ }
122
+ else {
123
+ for (let i = 0; i < maxDiffPreview; i++) {
124
+ console.log(` ${item.diffLines[i]}`);
125
+ }
126
+ const hidden = item.diffLines.length - maxDiffPreview;
127
+ console.log(s.muted(` … +${String(hidden)} lines (ctrl+o to expand)`));
128
+ }
129
+ }
130
+ else if (item.content) {
131
+ const contentLines = item.content.split('\n').filter((l) => l.length > 0);
132
+ const maxPreviewLines = 3;
133
+ if (config.verbose) {
134
+ // Verbose: show all lines
135
+ for (const line of contentLines) {
136
+ console.log(s.muted(` ⎿ ${line}`));
137
+ }
138
+ }
139
+ else if (contentLines.length > 0) {
140
+ // Compact: show first few lines + hidden count
141
+ const previewLines = contentLines.slice(0, maxPreviewLines);
142
+ const hiddenCount = contentLines.length - maxPreviewLines;
143
+ for (let i = 0; i < previewLines.length; i++) {
144
+ if (i === 0) {
145
+ console.log(s.muted(` ⎿ ${previewLines[i]}`));
146
+ }
147
+ else {
148
+ console.log(s.muted(` ${previewLines[i]}`));
149
+ }
150
+ }
151
+ if (hiddenCount > 0) {
152
+ console.log(s.muted(` … +${String(hiddenCount)} lines`) + s.muted(' (ctrl+o to expand)'));
153
+ }
154
+ }
155
+ else {
156
+ // No output lines
157
+ const expandHint = s.muted(' (ctrl+o to expand)');
158
+ if (item.success === false) {
159
+ console.log(s.error(` ⎿ ${item.summary}`) + expandHint);
160
+ }
161
+ else {
162
+ console.log(s.muted(` ⎿ ${item.summary}`) + expandHint);
163
+ }
164
+ }
165
+ }
166
+ else {
167
+ // No content, just show summary
168
+ if (item.success === false) {
169
+ console.log(s.error(` ⎿ ${item.summary}`));
170
+ }
171
+ else {
172
+ console.log(s.muted(` ⎿ ${item.summary}`));
173
+ }
174
+ }
175
+ console.log('');
176
+ break;
177
+ }
178
+ case 'tool-error': {
179
+ // Truncate long params
180
+ const maxErrLen = Math.min(60, terminal.getTerminalWidth() - 15);
181
+ let errParams = item.params;
182
+ const errNlIdx = errParams.indexOf('\n');
183
+ if (errNlIdx !== -1) {
184
+ const errFirst = errParams.slice(0, errNlIdx).trim();
185
+ const errCount = errParams.split('\n').length;
186
+ errParams = errFirst.length > 0 ? `${errFirst}… (${String(errCount)} lines)` : `(${String(errCount)} line script)`;
187
+ }
188
+ if (errParams.length > maxErrLen) {
189
+ errParams = errParams.slice(0, maxErrLen) + '…';
190
+ }
191
+ console.log(s.info(`● ${item.name}`) + s.muted(`(${errParams})`));
192
+ console.log(s.error(` ⎿ Error: ${item.error}`));
193
+ console.log('');
194
+ break;
195
+ }
196
+ case 'interrupted': {
197
+ // Show what was ongoing (if provided)
198
+ if (item.action) {
199
+ console.log(s.info(`● ${item.action}`));
200
+ }
201
+ else {
202
+ // No action means interrupted right after user message.
203
+ // Move cursor up to consume the trailing blank from user-message.
204
+ //
205
+ // ⚠️ WARNING: This cursor manipulation is fragile!
206
+ // It assumes the previous item was user-message which adds a trailing blank.
207
+ // If we add items that don't add trailing blanks, or if the rendering
208
+ // order changes, this could cause visual artifacts (overwriting content).
209
+ // If issues arise, consider tracking the last printed item type instead.
210
+ process.stdout.write('\x1b[1A'); // Move up one line
211
+ }
212
+ // Show interrupted line with mascot
213
+ const suggestion = item.suggestion ?? 'What should I do instead?';
214
+ console.log(s.warning(` ⎿ ${MASCOT.confused} Interrupted - ${suggestion}`));
215
+ console.log('');
216
+ // Return suggestion so caller can set it as ghost text
217
+ return suggestion;
218
+ }
219
+ case 'error':
220
+ console.log(s.error(`${MASCOT.error} ${item.message}`));
221
+ console.log('');
222
+ break;
223
+ case 'success':
224
+ console.log(s.success(`${MASCOT.success} ${item.message}`));
225
+ console.log('');
226
+ break;
227
+ case 'info':
228
+ console.log(s.info(item.message));
229
+ console.log('');
230
+ break;
231
+ case 'warning':
232
+ console.log(s.warning(item.message));
233
+ console.log('');
234
+ break;
235
+ case 'turn-summary': {
236
+ // Compact summary line: ── 45s · ↓ 2.3k ↑ 1.1k · 5 tools ──
237
+ const line = s.muted(`── ${item.parts.join(' · ')} ──`);
238
+ console.log(line);
239
+ console.log('');
240
+ break;
241
+ }
242
+ case 'raw':
243
+ console.log(item.text);
244
+ break;
245
+ case 'raw-lines':
246
+ for (const line of item.lines) {
247
+ console.log(line);
248
+ }
249
+ break;
250
+ case 'background-agent': {
251
+ // Background agent output with mascot label
252
+ // Format: [◈_◈] $arch: text - mascot followed by agent reference
253
+ const bgLabel = s.muted(`${item.mascot} $${item.agentId}:`);
254
+ // Render markdown for proper formatting
255
+ const bgRendered = renderMarkdown(item.text);
256
+ const bgLines = bgRendered.split('\n');
257
+ if (bgLines.length > 0) {
258
+ console.log(`${bgLabel} ${bgLines[0]}`);
259
+ for (let i = 1; i < bgLines.length; i++) {
260
+ console.log(bgLines[i]);
261
+ }
262
+ }
263
+ break;
264
+ }
265
+ }
266
+ return null;
267
+ }
@@ -1,16 +1,15 @@
1
1
  /**
2
+ * @deprecated DEAD CODE — This class is never instantiated. Do NOT modify this file.
3
+ *
4
+ * The active render pipeline is in TerminalUI (src/ui/terminal-ui.ts).
5
+ * TerminalUI handles all rendering, keyboard input, overlays, and footer display.
6
+ * All UI changes should go there.
7
+ *
8
+ * --- Original description ---
2
9
  * Terminal Renderer
3
10
  *
4
11
  * Single point of terminal output. All rendering goes through this class.
5
12
  * Eliminates race conditions by ensuring only one writer.
6
- *
7
- * Key responsibilities:
8
- * - Manage render modes (MENU, REPL, OVERLAY)
9
- * - Set up and manage scroll regions (REPL mode)
10
- * - Collect content from providers
11
- * - Write to terminal (single writer)
12
- * - Handle resize events
13
- * - Route keyboard input
14
13
  */
15
14
  import { EventEmitter } from 'events';
16
15
  import { RenderMode, type ModeTransition } from './render-modes.js';
@@ -1,16 +1,15 @@
1
1
  /**
2
+ * @deprecated DEAD CODE — This class is never instantiated. Do NOT modify this file.
3
+ *
4
+ * The active render pipeline is in TerminalUI (src/ui/terminal-ui.ts).
5
+ * TerminalUI handles all rendering, keyboard input, overlays, and footer display.
6
+ * All UI changes should go there.
7
+ *
8
+ * --- Original description ---
2
9
  * Terminal Renderer
3
10
  *
4
11
  * Single point of terminal output. All rendering goes through this class.
5
12
  * Eliminates race conditions by ensuring only one writer.
6
- *
7
- * Key responsibilities:
8
- * - Manage render modes (MENU, REPL, OVERLAY)
9
- * - Set up and manage scroll regions (REPL mode)
10
- * - Collect content from providers
11
- * - Write to terminal (single writer)
12
- * - Handle resize events
13
- * - Route keyboard input
14
13
  */
15
14
  import { EventEmitter } from 'events';
16
15
  import { RenderMode, isValidTransition } from './render-modes.js';