@compilr-dev/cli 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. package/README.md +254 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands/index.d.ts +2 -1
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -2,81 +2,165 @@
2
2
  * Conversation Renderer
3
3
  *
4
4
  * Handles the scrolling zone - prints conversation messages.
5
- * Uses console.log() which naturally scrolls content up.
5
+ * When TerminalRenderer is connected (scroll region mode), uses appendToScrollZone().
6
+ * Otherwise falls back to console.log() for legacy mode.
6
7
  */
7
- import chalk, { Chalk } from 'chalk';
8
+ import { Chalk } from 'chalk';
8
9
  import { marked } from 'marked';
9
10
  import { markedTerminal } from 'marked-terminal';
10
11
  import { highlight } from 'cli-highlight';
11
12
  import { getStyles } from '../themes/index.js';
13
+ import { getThemeColors } from '../themes/index.js';
12
14
  import * as terminal from './terminal.js';
13
- import { isVerboseEnabled } from '../settings/index.js';
15
+ import { isVerboseEnabled, getMascotSetting } from '../settings/index.js';
14
16
  import { detectProjectStatus, getWorkflowStage } from '../utils/project-status.js';
17
+ import { renderMascotWithLogo } from './mascot/index.js';
18
+ import { formatTokens, truncate } from './base/index.js';
19
+ // =============================================================================
20
+ // Renderer Integration
21
+ // =============================================================================
22
+ /** Module-level renderer reference for scroll region mode */
23
+ let rendererInstance = null;
24
+ /**
25
+ * Set the TerminalRenderer instance for scroll region output
26
+ * When set, output goes through renderer.appendToScrollZone()
27
+ * When null, falls back to console.log (legacy mode)
28
+ */
29
+ export function setRenderer(renderer) {
30
+ rendererInstance = renderer;
31
+ }
32
+ /**
33
+ * Get the current renderer instance
34
+ */
35
+ export function getRenderer() {
36
+ return rendererInstance;
37
+ }
38
+ /**
39
+ * Output lines to the scroll zone
40
+ * Uses renderer if connected (scroll region mode), otherwise console.log
41
+ */
42
+ function outputLines(lines) {
43
+ if (rendererInstance) {
44
+ rendererInstance.appendToScrollZone(lines);
45
+ }
46
+ else {
47
+ for (const line of lines) {
48
+ console.log(line);
49
+ }
50
+ }
51
+ }
52
+ /**
53
+ * Output a single line to the scroll zone
54
+ */
55
+ function outputLine(line) {
56
+ outputLines([line]);
57
+ }
15
58
  // Create chalk instance with colors forced on for our direct usage
16
59
  // Note: FORCE_COLOR=3 is set in index.ts for global chalk-based libraries
17
60
  const chalkWithColors = new Chalk({ level: 3 });
18
- // Configure marked for terminal output
19
- // Type assertion is needed because markedTerminal returns a type incompatible with marked's extension type
20
- // but it works correctly at runtime. This is a known issue with the marked-terminal types.
21
- marked.use(markedTerminal({
22
- reflowText: true,
23
- width: process.stdout.columns || 80,
24
- // Enable styling options
25
- showSectionPrefix: false,
26
- tab: 2,
27
- // Use our chalk instance with colors forced on
28
- // marked-terminal uses these for inline formatting
29
- strong: chalkWithColors.bold,
30
- em: chalkWithColors.italic,
31
- codespan: chalkWithColors.cyan,
32
- }));
61
+ // =============================================================================
62
+ // Theme-Aware Markdown Options (using markedTerminal)
63
+ // =============================================================================
64
+ /**
65
+ * Get markedTerminal options configured with current theme colors.
66
+ */
67
+ function getThemedMarkedOptions() {
68
+ const colors = getThemeColors();
69
+ const chalk = new Chalk({ level: 3 });
70
+ // Create chalk instances with theme colors
71
+ const primaryColor = chalk.hex(colors.primary);
72
+ const secondaryColor = chalk.hex(colors.secondary || colors.primary);
73
+ const fgColor = chalk.hex(colors.foreground);
74
+ const mutedColor = chalk.hex(colors.muted);
75
+ const borderColor = chalk.hex(colors.border);
76
+ return {
77
+ reflowText: true,
78
+ width: Math.min(100, terminal.getTerminalWidth() - 4),
79
+ unescape: true,
80
+ tab: 2,
81
+ showSectionPrefix: false,
82
+ // Theme-aware styling
83
+ heading: primaryColor.bold,
84
+ firstHeading: primaryColor.bold,
85
+ strong: fgColor.bold,
86
+ em: fgColor.italic,
87
+ link: secondaryColor,
88
+ href: secondaryColor.underline,
89
+ blockquote: mutedColor.italic,
90
+ del: mutedColor.strikethrough,
91
+ hr: borderColor,
92
+ codespan: primaryColor,
93
+ code: secondaryColor,
94
+ html: mutedColor,
95
+ table: fgColor,
96
+ listitem: fgColor,
97
+ paragraph: fgColor,
98
+ tableOptions: {
99
+ style: { head: ['bold'], border: [] },
100
+ chars: {
101
+ 'top': '─', 'top-mid': '─', 'top-left': '─', 'top-right': '─',
102
+ 'bottom': '─', 'bottom-mid': '─', 'bottom-left': '─', 'bottom-right': '─',
103
+ 'left': ' ', 'left-mid': ' ', 'mid': '─', 'mid-mid': '─',
104
+ 'right': ' ', 'right-mid': ' ', 'middle': ' ',
105
+ },
106
+ },
107
+ };
108
+ }
109
+ /**
110
+ * Preprocess markdown before parsing.
111
+ */
112
+ function preprocessMarkdown(content) {
113
+ const lines = content.split('\n');
114
+ return lines.map((line) => {
115
+ // Normalize bullet lists: "* " -> "- "
116
+ if (/^\s*\* /.test(line)) {
117
+ return line.replace(/^(\s*)\* /, '$1- ');
118
+ }
119
+ return line;
120
+ }).join('\n');
121
+ }
122
+ /**
123
+ * Post-process to catch formatting that markedTerminal missed.
124
+ * Handles: **bold**, `code`, and **`bold code`** patterns.
125
+ */
126
+ function postProcessFormatting(text) {
127
+ const chalk = new Chalk({ level: 3 });
128
+ const colors = getThemeColors();
129
+ const primary = chalk.hex(colors.primary);
130
+ const secondary = chalk.hex(colors.secondary || colors.primary);
131
+ let result = text;
132
+ // Handle **`code`** (bold code) - common pattern in tool docs
133
+ result = result.replace(/\*\*`([^`]+)`\*\*/g, (_match, code) => chalk.bold(primary(code)));
134
+ // Handle remaining `code` spans
135
+ result = result.replace(/`([^`]+)`/g, (_match, code) => primary(code));
136
+ // Handle remaining **bold**
137
+ result = result.replace(/\*\*([^*]+)\*\*/g, (_match, content) => chalk.bold(content));
138
+ // Handle $agent references - bold + secondary color
139
+ // Match $word at word boundaries (not inside other text)
140
+ result = result.replace(/(?<![$\w])\$([a-zA-Z_][a-zA-Z0-9_]*)\b/g, (_match, agentId) => chalk.bold(secondary(`$${agentId}`)));
141
+ return result;
142
+ }
33
143
  // =============================================================================
34
144
  // Markdown Rendering
35
145
  // =============================================================================
36
146
  /**
37
- * Render markdown text for terminal display
147
+ * Render markdown text for terminal display with theme colors.
148
+ * Uses markedTerminal with theme-aware options.
38
149
  */
39
150
  export function renderMarkdown(text) {
40
151
  try {
41
- // Preprocess: normalize list markers and indentation
42
- const lines = text.split('\n');
43
- const processedLines = lines.map((line) => {
44
- // Normalize bullet lists: "* " or "- " -> "- "
45
- // This prevents the asterisk from being confused with italic
46
- if (/^\*\s{2,}/.test(line)) {
47
- return line.replace(/^\*\s{2,}/, '- ');
48
- }
49
- // Remove leading 4 spaces that would make it a code block
50
- // But preserve intentional code blocks (``` fenced)
51
- if (line.startsWith(' ') && !line.startsWith(' ```')) {
52
- return line.slice(4);
53
- }
54
- return line;
55
- });
56
- const processed = processedLines.join('\n');
57
- // marked.parse returns string synchronously with these options
58
- let rendered = marked.parse(processed, { async: false });
59
- // Post-process: marked-terminal doesn't always render bold/italic inside list items
60
- // Convert remaining **bold** and *italic* to ANSI codes
61
- // Use chalkWithColors to ensure ANSI codes are always generated
62
- const s = getStyles();
63
- // Handle **`code`** (bold code) - common pattern
64
- rendered = rendered.replace(/\*\*`([^`]+)`\*\*/g, (_match, code) => chalkWithColors.bold(s.primary(code)));
65
- // Handle `code` inside **bold** - e.g., **some `code` here**
66
- rendered = rendered.replace(/\*\*([^*]*)`([^`]+)`([^*]*)\*\*/g, (_match, before, code, after) => chalkWithColors.bold(`${before}${s.primary(code)}${after}`));
67
- // Handle **bold** (not already processed)
68
- rendered = rendered.replace(/\*\*([^*]+)\*\*/g, (_match, boldText) => chalkWithColors.bold(boldText));
69
- // Handle *italic* - must not be at start of line (bullet) and not part of **
70
- // Match *text* but not * (bullet with spaces) and not **
71
- rendered = rendered.replace(/(?<![*\n])\*([^*\s][^*]*[^*\s])\*(?!\*)/g, (_match, italicText) => chalkWithColors.italic(italicText));
72
- // Also handle single-word italic: *word*
73
- rendered = rendered.replace(/(?<![*\n])\*(\S+)\*(?!\*)/g, (_match, word) => chalkWithColors.italic(word));
74
- // Handle `code` (inline code) - use theme primary color
75
- rendered = rendered.replace(/`([^`]+)`/g, (_match, code) => s.primary(code));
76
- // Handle numbered lists that weren't processed (e.g., "1. text")
77
- rendered = rendered.replace(/^(\d+)\.\s{2,}/gm, (_match, num) => chalkWithColors.bold(`${num}. `));
78
- // Remove trailing newlines that marked adds
79
- return rendered.replace(/\n+$/, '');
152
+ // Preprocess markdown
153
+ const preprocessed = preprocessMarkdown(text);
154
+ // Configure marked with theme-aware options
155
+ const options = getThemedMarkedOptions();
156
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
157
+ marked.use(markedTerminal(options));
158
+ // Parse
159
+ const rendered = marked.parse(preprocessed, { async: false });
160
+ // Post-process for any remaining formatting that markedTerminal missed
161
+ const postProcessed = postProcessFormatting(rendered);
162
+ // Remove excessive trailing newlines
163
+ return postProcessed.replace(/\n{3,}/g, '\n\n').replace(/\n+$/, '');
80
164
  }
81
165
  catch {
82
166
  return text; // Fallback to raw text
@@ -117,6 +201,8 @@ export function renderInlineMarkdown(text) {
117
201
  result = result.replace(/(?<![*\s])\*(\S+)\*(?!\*)/g, (_match, word) => chalkWithColors.italic(word));
118
202
  // Handle `code` - use theme primary color
119
203
  result = result.replace(/`([^`]+)`/g, (_match, code) => s.primary(code));
204
+ // Handle $agent references - bold + secondary color
205
+ result = result.replace(/(?<![$\w])\$([a-zA-Z_][a-zA-Z0-9_]*)\b/g, (_match, agentId) => chalkWithColors.bold(s.secondary(`$${agentId}`)));
120
206
  return result;
121
207
  }
122
208
  // =============================================================================
@@ -132,6 +218,20 @@ export function formatToolResult(result) {
132
218
  if (result === null || result === undefined) {
133
219
  return '';
134
220
  }
221
+ // DEBUG: Log type to understand what's coming in (uncomment if needed)
222
+ // console.error(`[DEBUG formatToolResult] type=${typeof result}, isArray=${Array.isArray(result)}, preview=${String(result).slice(0, 100)}`);
223
+ // Handle JSON strings - parse and format as object
224
+ if (typeof result === 'string' && (result.startsWith('{') || result.startsWith('['))) {
225
+ try {
226
+ const parsed = JSON.parse(result);
227
+ if (typeof parsed === 'object' && parsed !== null) {
228
+ return formatToolResult(parsed); // Recursively format the parsed object
229
+ }
230
+ }
231
+ catch {
232
+ // Not valid JSON, continue with string handling
233
+ }
234
+ }
135
235
  // String result - count lines or truncate
136
236
  if (typeof result === 'string') {
137
237
  const allLines = result.split('\n');
@@ -151,8 +251,8 @@ export function formatToolResult(result) {
151
251
  if (nonEmptyLines > 3) {
152
252
  return s.muted(`${String(nonEmptyLines)} lines`);
153
253
  }
154
- const truncated = result.slice(0, 80).replace(/\n/g, ' ');
155
- return s.muted(truncated + (result.length > 80 ? '...' : ''));
254
+ const singleLine = result.replace(/\n/g, ' ');
255
+ return s.muted(truncate(singleLine, 80));
156
256
  }
157
257
  }
158
258
  // Array result - show count and type hint
@@ -214,6 +314,40 @@ export function formatToolResult(result) {
214
314
  const branches = obj.branches;
215
315
  return s.muted(`${String(branches?.length ?? 0)} branches`);
216
316
  }
317
+ // Backlog/workitem pattern - { items: [...], total: N, filtered: N }
318
+ if ('items' in obj && Array.isArray(obj.items) && 'total' in obj) {
319
+ const items = obj.items;
320
+ const total = obj.total;
321
+ const filtered = 'filtered' in obj ? obj.filtered : items.length;
322
+ if (items.length === 0) {
323
+ return s.muted('no items');
324
+ }
325
+ if (verbose) {
326
+ // Verbose mode: show item summaries
327
+ const lines = [];
328
+ const maxItems = Math.min(items.length, 10);
329
+ for (let i = 0; i < maxItems; i++) {
330
+ const item = items[i];
331
+ const id = item.id || '?';
332
+ const title = (item.title || 'Untitled').slice(0, 50);
333
+ const status = item.status || '?';
334
+ const priority = item.priority ? `[${item.priority}]` : '';
335
+ lines.push(` ${id}: ${title} (${status}) ${priority}`);
336
+ }
337
+ if (items.length > maxItems) {
338
+ lines.push(` ... and ${String(items.length - maxItems)} more`);
339
+ }
340
+ const summary = filtered < total
341
+ ? `${String(filtered)} of ${String(total)} items:`
342
+ : `${String(total)} items:`;
343
+ return s.muted(summary + '\n' + lines.join('\n'));
344
+ }
345
+ // Non-verbose: show count summary
346
+ const summary = filtered < total
347
+ ? `${String(filtered)} of ${String(total)} items`
348
+ : `${String(total)} items`;
349
+ return s.muted(summary);
350
+ }
217
351
  // File read pattern
218
352
  if ('content' in obj) {
219
353
  const content = String(obj.content);
@@ -281,28 +415,122 @@ export function formatToolResult(result) {
281
415
  return s.muted(resultStr.slice(0, 60));
282
416
  }
283
417
  // =============================================================================
284
- // Message Printing
418
+ // Message Formatting (return string[] for TerminalRenderer)
419
+ // =============================================================================
420
+ /**
421
+ * Format user message for display
422
+ * Returns: [primary "❯ " + message content, ""]
423
+ */
424
+ export function formatUserMessage(content) {
425
+ const s = getStyles();
426
+ return [s.primary('❯ ') + content, ''];
427
+ }
428
+ /**
429
+ * Format assistant message for display
430
+ * Renders markdown (code blocks, bold, etc.)
431
+ */
432
+ export function formatAssistantMessage(content) {
433
+ if (!content.trim())
434
+ return [];
435
+ const s = getStyles();
436
+ const lines = [];
437
+ lines.push(s.success('Agent: '));
438
+ lines.push(renderMarkdown(content));
439
+ lines.push('');
440
+ return lines;
441
+ }
442
+ /**
443
+ * Format assistant response (event-based rendering)
444
+ * Used when text is accumulated between tool calls.
445
+ */
446
+ export function formatAssistantResponse(content) {
447
+ if (!content.trim())
448
+ return [];
449
+ const s = getStyles();
450
+ const rendered = renderInlineMarkdown(content);
451
+ return [s.primary('● ') + rendered];
452
+ }
453
+ /**
454
+ * Format tool execution for display
455
+ */
456
+ export function formatToolExecution(name, args, result) {
457
+ const s = getStyles();
458
+ const verbose = isVerboseEnabled();
459
+ const lines = [];
460
+ let displayArgs = args;
461
+ if (args && !verbose && args.length > 60) {
462
+ displayArgs = truncate(args, 60);
463
+ }
464
+ const toolHeader = displayArgs
465
+ ? s.warning(`● ${name}`) + s.secondary(`(${displayArgs})`)
466
+ : s.warning(`● ${name}`);
467
+ lines.push(toolHeader);
468
+ if (result) {
469
+ lines.push(s.muted(' ⎿ ') + result);
470
+ }
471
+ lines.push('');
472
+ return lines;
473
+ }
474
+ /**
475
+ * Format sub-agent completion summary
476
+ */
477
+ export function formatSubagentResponse(stats) {
478
+ const s = getStyles();
479
+ const lines = [];
480
+ const typeLabel = stats.type.charAt(0).toUpperCase() + stats.type.slice(1);
481
+ lines.push(s.primary(`● ${typeLabel}(${stats.description})`));
482
+ const duration = formatDuration(stats.durationMs);
483
+ const tokens = formatTokens(stats.tokenCount);
484
+ const toolUses = stats.toolCount === 1 ? '1 tool use' : `${String(stats.toolCount)} tool uses`;
485
+ const statsLine = `${toolUses} · ${tokens} tokens · ${duration}`;
486
+ lines.push(s.muted(` ⎿ Done (${statsLine})`));
487
+ lines.push('');
488
+ return lines;
489
+ }
490
+ /**
491
+ * Format error message
492
+ */
493
+ export function formatError(message) {
494
+ const s = getStyles();
495
+ return [s.error('✖ ') + message, ''];
496
+ }
497
+ /**
498
+ * Format info message
499
+ */
500
+ export function formatInfo(message) {
501
+ const s = getStyles();
502
+ return [s.muted(message)];
503
+ }
504
+ /**
505
+ * Format success message
506
+ */
507
+ export function formatSuccess(message) {
508
+ const s = getStyles();
509
+ return [s.success('✔ ') + message, ''];
510
+ }
511
+ /**
512
+ * Format warning message
513
+ */
514
+ export function formatWarning(message) {
515
+ const s = getStyles();
516
+ return [s.warning('⚠ ') + message, ''];
517
+ }
518
+ // =============================================================================
519
+ // Message Printing (wrappers for backward compatibility)
285
520
  // =============================================================================
286
521
  /**
287
522
  * Print user message to conversation
288
523
  * Format: primary "❯ " + message content
289
524
  */
290
525
  export function printUserMessage(content) {
291
- const s = getStyles();
292
- console.log(s.primary('❯ ') + content);
293
- console.log(''); // Blank line after
526
+ outputLines(formatUserMessage(content));
294
527
  }
295
528
  /**
296
529
  * Print assistant message to conversation
297
530
  * Renders markdown (code blocks, bold, etc.)
298
531
  */
299
532
  export function printAssistantMessage(content) {
300
- if (!content.trim())
301
- return;
302
- const s = getStyles();
303
- console.log(s.success('Agent: '));
304
- console.log(renderMarkdown(content));
305
- console.log(''); // Blank line after
533
+ outputLines(formatAssistantMessage(content));
306
534
  }
307
535
  /**
308
536
  * Print assistant response (event-based rendering)
@@ -310,13 +538,7 @@ export function printAssistantMessage(content) {
310
538
  * Format: "● " prefix + rendered markdown with syntax highlighting
311
539
  */
312
540
  export function printAssistantResponse(content) {
313
- if (!content.trim())
314
- return;
315
- const s = getStyles();
316
- // Use bullet prefix (consistent with tool output style)
317
- // Apply renderInlineMarkdown which handles code blocks with syntax highlighting
318
- const rendered = renderInlineMarkdown(content);
319
- console.log(s.primary('● ') + rendered);
541
+ outputLines(formatAssistantResponse(content));
320
542
  }
321
543
  /**
322
544
  * Print tool execution log
@@ -324,75 +546,63 @@ export function printAssistantResponse(content) {
324
546
  * When verbose mode is enabled, shows full args
325
547
  */
326
548
  export function printToolLog(tool) {
327
- const s = getStyles();
328
- const verbose = isVerboseEnabled();
329
- // In verbose mode, show full args; otherwise truncate
330
- let displayArgs = tool.args;
331
- if (tool.args && !verbose && tool.args.length > 60) {
332
- displayArgs = tool.args.slice(0, 57) + '...';
333
- }
334
- const toolHeader = displayArgs
335
- ? s.warning(`● ${tool.name}`) + s.secondary(`(${displayArgs})`)
336
- : s.warning(`● ${tool.name}`);
337
- console.log(toolHeader);
338
- if (tool.result) {
339
- console.log(s.muted(' ⎿ ') + tool.result);
340
- }
341
- console.log(''); // Blank line after
549
+ outputLines(formatToolExecution(tool.name, tool.args, tool.result));
342
550
  }
343
551
  /**
344
552
  * Print tool execution inline (without creating ToolMessage)
345
553
  * When verbose mode is enabled, shows full args instead of truncated
346
554
  */
347
555
  export function printToolExecution(name, args, result) {
348
- const s = getStyles();
349
- const verbose = isVerboseEnabled();
350
- // In verbose mode, show full args; otherwise truncate
351
- let displayArgs = args;
352
- if (args && !verbose && args.length > 60) {
353
- displayArgs = args.slice(0, 57) + '...';
354
- }
355
- const toolHeader = displayArgs
356
- ? s.warning(`● ${name}`) + s.secondary(`(${displayArgs})`)
357
- : s.warning(`● ${name}`);
358
- console.log(toolHeader);
359
- if (result) {
360
- console.log(s.muted(' ⎿ ') + result);
556
+ outputLines(formatToolExecution(name, args, result));
557
+ }
558
+ /**
559
+ * Format duration in human-readable format (e.g., "1m 23s", "45s", "19.2s")
560
+ */
561
+ function formatDuration(ms) {
562
+ const seconds = ms / 1000;
563
+ if (seconds < 60) {
564
+ return seconds < 10 ? `${seconds.toFixed(1)}s` : `${String(Math.floor(seconds))}s`;
361
565
  }
362
- console.log(''); // Blank line after
566
+ const minutes = Math.floor(seconds / 60);
567
+ const remainingSeconds = Math.floor(seconds % 60);
568
+ return `${String(minutes)}m ${String(remainingSeconds)}s`;
569
+ }
570
+ /**
571
+ * Print sub-agent completion summary
572
+ * Format matches the footer's subagent zone when done:
573
+ * ● Explore(Find CLI entry points)
574
+ * ⎿ Done (6 tool uses · 38.8k tokens · 19s)
575
+ */
576
+ export function printSubagentResponse(stats) {
577
+ outputLines(formatSubagentResponse(stats));
363
578
  }
364
579
  /**
365
580
  * Print error message
366
581
  * Format: error "✖ " + message
367
582
  */
368
583
  export function printError(message) {
369
- const s = getStyles();
370
- console.log(s.error('✖ ') + message);
371
- console.log('');
584
+ outputLines(formatError(message));
372
585
  }
373
586
  /**
374
587
  * Print info message
375
588
  * Format: muted text
376
589
  */
377
590
  export function printInfo(message) {
378
- const s = getStyles();
379
- console.log(s.muted(message));
591
+ outputLines(formatInfo(message));
380
592
  }
381
593
  /**
382
594
  * Print success message
383
595
  * Format: success "✔ " + message
384
596
  */
385
597
  export function printSuccess(message) {
386
- const s = getStyles();
387
- console.log(s.success('✔ ') + message);
598
+ outputLines(formatSuccess(message));
388
599
  }
389
600
  /**
390
601
  * Print warning message
391
602
  * Format: warning "⚠ " + message
392
603
  */
393
604
  export function printWarning(message) {
394
- const s = getStyles();
395
- console.log(s.warning('⚠ ') + message);
605
+ outputLines(formatWarning(message));
396
606
  }
397
607
  // =============================================================================
398
608
  // Welcome Banner
@@ -400,43 +610,34 @@ export function printWarning(message) {
400
610
  /**
401
611
  * Print just the ASCII logo (for startup before full welcome)
402
612
  */
403
- export function printLogo(version) {
404
- const s = getStyles();
613
+ export function printLogo(version, projectName) {
405
614
  terminal.clearScreen();
406
- console.log('');
407
- console.log(s.primary(" ___ ___ _ __ ___ _ __ (_) |_ __"));
408
- console.log(s.primary(" / __|/ _ \\| '_ ` _ \\| '_ \\| | | '__|"));
409
- console.log(s.primary(" | (__| (_) | | | | | | |_) | | | |"));
410
- console.log(s.primary(" \\___|\\___/|_| |_| |_| .__/|_|_|_|"));
411
- console.log(s.primary(' | |') + s.secondary(' .dev'));
412
- console.log(s.primary(' |_|') + s.muted(` v${version}`));
413
- console.log('');
414
- console.log(chalk.bold('@compilr-dev/cli') + s.muted(' - AI-powered coding assistant'));
415
- console.log('');
615
+ outputLine('');
616
+ // Get mascot setting and render mascot + logo
617
+ const mascotSetting = getMascotSetting();
618
+ const lines = renderMascotWithLogo(mascotSetting, version, projectName);
619
+ outputLines(lines);
620
+ outputLine('');
416
621
  }
417
622
  /**
418
623
  * Print welcome banner with ASCII logo and contextual guidance
419
624
  */
420
- export function printWelcome(model, version) {
625
+ export function printWelcome(model, version, projectName) {
421
626
  const s = getStyles();
422
- console.log('');
423
- console.log(s.primary(" ___ ___ _ __ ___ _ __ (_) |_ __"));
424
- console.log(s.primary(" / __|/ _ \\| '_ ` _ \\| '_ \\| | | '__|"));
425
- console.log(s.primary(" | (__| (_) | | | | | | |_) | | | |"));
426
- console.log(s.primary(" \\___|\\___/|_| |_| |_| .__/|_|_|_|"));
427
- console.log(s.primary(' | |') + s.secondary(' .dev'));
428
- console.log(s.primary(' |_|') + s.muted(` v${version}`));
429
- console.log('');
430
- console.log(chalk.bold('@compilr-dev/cli') + s.muted(' - AI-powered coding assistant'));
431
- console.log('');
432
- console.log(s.muted(`Model: ${model}`));
433
- console.log('');
627
+ outputLine('');
628
+ // Get mascot setting and render mascot + logo
629
+ const mascotSetting = getMascotSetting();
630
+ const lines = renderMascotWithLogo(mascotSetting, version, projectName);
631
+ outputLines(lines);
632
+ outputLine('');
633
+ outputLine(s.muted(`Model: ${model}`));
634
+ outputLine('');
434
635
  // Detect project status and show contextual guidance
435
636
  const status = detectProjectStatus();
436
637
  const stage = getWorkflowStage(status);
437
638
  printWorkflowGuidance(status, stage);
438
- console.log(s.muted('Type /help for commands, /exit to quit'));
439
- console.log('');
639
+ outputLine(s.muted('Type /help for commands, /exit to quit'));
640
+ outputLine('');
440
641
  }
441
642
  /**
442
643
  * Print workflow guidance based on project status
@@ -446,28 +647,34 @@ function printWorkflowGuidance(status, stage) {
446
647
  switch (stage) {
447
648
  case 'new':
448
649
  // Brand new directory, nothing exists
449
- console.log(s.muted('Get started:'));
450
- console.log(s.muted(' /init ') + s.secondary('Create project structure'));
451
- console.log(s.muted(' /sketch ') + s.secondary('Quick 6-question outline'));
452
- console.log(s.muted(' /tutorial ') + s.secondary('Learn the workflow'));
453
- console.log('');
650
+ outputLines([
651
+ s.muted('Get started:'),
652
+ s.muted(' /new ') + s.secondary('Create project structure'),
653
+ s.muted(' /sketch ') + s.secondary('Quick 6-question outline'),
654
+ s.muted(' /tutorial ') + s.secondary('Learn the workflow'),
655
+ '',
656
+ ]);
454
657
  break;
455
658
  case 'initialized':
456
659
  // Existing project, but no compilr setup
457
660
  if (status.isExistingProject && !status.hasMemory) {
458
- console.log(s.muted(`Detected ${status.projectType || 'existing'} project. Define requirements:`));
459
- console.log(s.muted(' /design ') + s.secondary('Agent-driven requirements'));
460
- console.log(s.muted(' /sketch ') + s.secondary('Quick project outline'));
461
- console.log(s.muted(' /tutorial ') + s.secondary('Learn the workflow'));
462
- console.log('');
661
+ outputLines([
662
+ s.muted(`Detected ${status.projectType || 'existing'} project. Define requirements:`),
663
+ s.muted(' /design ') + s.secondary('Agent-driven requirements'),
664
+ s.muted(' /sketch ') + s.secondary('Quick project outline'),
665
+ s.muted(' /tutorial ') + s.secondary('Learn the workflow'),
666
+ '',
667
+ ]);
463
668
  }
464
669
  break;
465
670
  case 'designing':
466
671
  // Has PRD or initialized, but no backlog yet
467
- console.log(s.muted('Project initialized. Create your backlog:'));
468
- console.log(s.muted(' /design ') + s.secondary('Refine requirements'));
469
- console.log(s.muted(' /backlog ') + s.secondary('View/manage tasks'));
470
- console.log('');
672
+ outputLines([
673
+ s.muted('Project initialized. Create your backlog:'),
674
+ s.muted(' /design ') + s.secondary('Refine requirements'),
675
+ s.muted(' /backlog ') + s.secondary('View/manage tasks'),
676
+ '',
677
+ ]);
471
678
  break;
472
679
  case 'building':
473
680
  // Has backlog with pending items
@@ -476,20 +683,24 @@ function printWorkflowGuidance(status, stage) {
476
683
  const taskInfo = inProgress > 0
477
684
  ? `${String(inProgress)} in progress, ${String(pending)} pending`
478
685
  : `${String(pending)} tasks pending`;
479
- console.log(s.muted(`Backlog: ${taskInfo}`));
480
- console.log(s.muted(' /backlog ') + s.secondary('View tasks'));
481
- console.log(s.muted(' "build next item" ') + s.secondary('Start working'));
482
- console.log('');
686
+ outputLines([
687
+ s.muted(`Backlog: ${taskInfo}`),
688
+ s.muted(' /backlog ') + s.secondary('View tasks'),
689
+ s.muted(' "build next item" ') + s.secondary('Start working'),
690
+ '',
691
+ ]);
483
692
  }
484
693
  break;
485
694
  case 'maintaining':
486
695
  // Most items completed
487
696
  if (status.backlogStats) {
488
697
  const { total, completed } = status.backlogStats;
489
- console.log(s.muted(`Backlog: ${String(completed)}/${String(total)} completed`));
490
- console.log(s.muted(' /backlog ') + s.secondary('View tasks'));
491
- console.log(s.muted(' /refine ') + s.secondary('Add new requirements'));
492
- console.log('');
698
+ outputLines([
699
+ s.muted(`Backlog: ${String(completed)}/${String(total)} completed`),
700
+ s.muted(' /backlog ') + s.secondary('View tasks'),
701
+ s.muted(' /refine ') + s.secondary('Add new requirements'),
702
+ '',
703
+ ]);
493
704
  }
494
705
  break;
495
706
  }
@@ -503,6 +714,6 @@ function printWorkflowGuidance(status, stage) {
503
714
  */
504
715
  export function formatPendingMessage(content) {
505
716
  const s = getStyles();
506
- const truncated = content.length > 60 ? content.slice(0, 57) + '...' : content;
717
+ const truncated = truncate(content, 60);
507
718
  return s.muted('⏳ ') + s.muted(truncated);
508
719
  }