@compilr-dev/cli 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Footer renderer.
3
+ *
4
+ * Extracted from TerminalUI — owns render state (line height tracking,
5
+ * spinner animation) and the render pipeline (clear, render, line builders).
6
+ * Reads application state through the host's getRenderData() snapshot.
7
+ */
8
+ import * as terminal from './terminal.js';
9
+ import { getPhysicalLineCount, getVisibleLength } from './line-utils.js';
10
+ import { getStyles } from '../themes/index.js';
11
+ import { formatTokens } from './base/index.js';
12
+ import { formatInputText } from './terminal-autocomplete-utils.js';
13
+ import { buildTodoLine, formatDuration } from './terminal-line-builders.js';
14
+ import { getDefaultShellManager } from '@compilr-dev/sdk';
15
+ import { MASCOT } from './terminal-types.js';
16
+ import { MODE_INFO } from './types.js';
17
+ import { getPendingRequestsManager } from '../multi-agent/index.js';
18
+ import { getSessionRegistry } from '../multi-agent/session-registry.js';
19
+ import { getNotificationManager } from '../multi-agent/notification-manager.js';
20
+ export class FooterRenderer {
21
+ lastRenderHeight = 0;
22
+ cursorLineFromBottom = 0;
23
+ spinnerFrame = 0;
24
+ spinnerTimer = null;
25
+ spinnerFrames = MASCOT.crt;
26
+ host;
27
+ constructor(host) {
28
+ this.host = host;
29
+ }
30
+ // ===========================================================================
31
+ // Clear / Render
32
+ // ===========================================================================
33
+ clear() {
34
+ if (this.lastRenderHeight === 0) {
35
+ return;
36
+ }
37
+ terminal.moveCursorToLineStart();
38
+ // Move cursor to TOP of footer
39
+ // cursorRowFromTop = which row the cursor is on (1-indexed from top of footer)
40
+ const cursorRowFromTop = this.lastRenderHeight - this.cursorLineFromBottom;
41
+ const rowsToMoveUp = cursorRowFromTop - 1;
42
+ if (rowsToMoveUp > 0) {
43
+ terminal.moveCursorUp(rowsToMoveUp);
44
+ }
45
+ terminal.clearToEndOfScreen();
46
+ this.lastRenderHeight = 0;
47
+ this.cursorLineFromBottom = 0;
48
+ }
49
+ render() {
50
+ if (!this.host.isFooterRenderAllowed()) {
51
+ return;
52
+ }
53
+ const data = this.host.getRenderData();
54
+ const termWidth = terminal.getTerminalWidth();
55
+ const s = getStyles();
56
+ // Build all lines in order
57
+ const lines = [];
58
+ // 0. LiveRegion (if has items) - rendered at top of footer
59
+ if (data.liveRegion.hasItems()) {
60
+ const liveLines = data.liveRegion.render({
61
+ width: termWidth,
62
+ verbose: data.liveVerbose,
63
+ showTokens: true,
64
+ });
65
+ for (const line of liveLines) {
66
+ lines.push({
67
+ content: line,
68
+ physicalLines: getPhysicalLineCount(line, termWidth),
69
+ });
70
+ }
71
+ // Blank line after live region for spacing
72
+ if (liveLines.length > 0) {
73
+ lines.push({ content: '', physicalLines: 1 });
74
+ }
75
+ }
76
+ // 1. Header: Spinner (when running) or "Todos" (when idle with todos)
77
+ if (data.agentRunning) {
78
+ const spinnerLine = this.buildSpinnerLine(data);
79
+ lines.push({
80
+ content: spinnerLine,
81
+ physicalLines: getPhysicalLineCount(spinnerLine, termWidth),
82
+ });
83
+ }
84
+ else if (data.todos.length > 0) {
85
+ const headerLine = s.muted('Todos');
86
+ lines.push({
87
+ content: headerLine,
88
+ physicalLines: 1,
89
+ });
90
+ }
91
+ // 2. Todo list (show if there are todos AND showTodos is true)
92
+ // Sort: in_progress → pending → completed (completed sink to bottom)
93
+ // Stable sort preserves original order within each status group.
94
+ if (data.todos.length > 0 && data.showTodos) {
95
+ const indexed = data.todos.map((todo, i) => ({ todo, taskNumber: i + 1 }));
96
+ const statusOrder = { in_progress: 0, pending: 1, completed: 2 };
97
+ const sorted = [...indexed].sort((a, b) => (statusOrder[a.todo.status] ?? 1) - (statusOrder[b.todo.status] ?? 1));
98
+ for (const { todo, taskNumber } of sorted) {
99
+ const todoLine = buildTodoLine(todo, taskNumber);
100
+ lines.push({
101
+ content: todoLine,
102
+ physicalLines: getPhysicalLineCount(todoLine, termWidth),
103
+ });
104
+ }
105
+ // Blank line after todos for spacing
106
+ lines.push({ content: '', physicalLines: 1 });
107
+ }
108
+ // 3. Queued inputs (show multiline as single line with ↵ indicator)
109
+ for (const queued of data.queuedInputs) {
110
+ const displayText = queued.replace(/\n/g, ' ↵ ');
111
+ const queuedLine = s.muted(`queued: "${displayText}"`);
112
+ lines.push({
113
+ content: queuedLine,
114
+ physicalLines: getPhysicalLineCount(queuedLine, termWidth),
115
+ });
116
+ }
117
+ // 4. Top separator
118
+ const separator = '─'.repeat(termWidth);
119
+ lines.push({ content: separator, physicalLines: 1 });
120
+ // 5. Input prompt (multiline support)
121
+ const continuationPrompt = s.muted(' \\ ');
122
+ const continuationPromptLen = getVisibleLength(continuationPrompt);
123
+ const cursorLineIndex = lines.length + data.currentLine; // Index where cursor is
124
+ for (let i = 0; i < data.lines.length; i++) {
125
+ const linePrompt = i === 0 ? data.promptPrefix : continuationPrompt;
126
+ const linePromptLen = i === 0 ? data.promptPrefixLen : continuationPromptLen;
127
+ const lineContent = data.lines[i];
128
+ // Show ghost text on first line when input is empty and no autocomplete
129
+ let fullLine;
130
+ let totalLen;
131
+ if (i === 0 &&
132
+ lineContent === '' &&
133
+ data.lines.length === 1 &&
134
+ data.suggestion &&
135
+ !data.ac.isActive()) {
136
+ // Build: [prompt][suggestion]...[↵ send]
137
+ const rightHint = '↵ send';
138
+ const leftContent = linePrompt + s.muted(data.suggestion);
139
+ const leftLen = linePromptLen + data.suggestion.length;
140
+ const rightLen = rightHint.length;
141
+ const padding = Math.max(1, termWidth - leftLen - rightLen);
142
+ fullLine = leftContent + ' '.repeat(padding) + s.muted(rightHint);
143
+ totalLen = termWidth; // Full width
144
+ }
145
+ else {
146
+ // Format special prefixes: $agent, @path, /command
147
+ const formattedContent = formatInputText(lineContent);
148
+ fullLine = linePrompt + formattedContent;
149
+ totalLen = linePromptLen + getVisibleLength(lineContent);
150
+ }
151
+ const physicalLines = totalLen === 0 ? 1 : Math.ceil(totalLen / termWidth) || 1;
152
+ lines.push({
153
+ content: fullLine,
154
+ physicalLines,
155
+ });
156
+ }
157
+ // 6. Bottom separator
158
+ lines.push({ content: separator, physicalLines: 1 });
159
+ // 7. Mode indicator
160
+ const modeLine = this.buildModeLine(data, termWidth);
161
+ lines.push({
162
+ content: modeLine,
163
+ physicalLines: getPhysicalLineCount(modeLine, termWidth),
164
+ });
165
+ // 7b. Status bar indicators (single horizontal line)
166
+ const statusItems = data.statusBar.getItems();
167
+ if (statusItems.length > 0) {
168
+ const pendingCount = getPendingRequestsManager().getCount();
169
+ const terminalCount = getSessionRegistry()?.getProjectScopedSessionCount() ?? 0;
170
+ const notifCount = getNotificationManager()?.getUnreadCount() ?? 0;
171
+ const segments = [];
172
+ for (let idx = 0; idx < statusItems.length; idx++) {
173
+ const item = statusItems[idx];
174
+ const isSelected = data.statusBar.navActive && data.statusBar.selectedIndex === idx;
175
+ let label;
176
+ if (item.id === 'notifications') {
177
+ label = `[!] ${String(notifCount)} notif`;
178
+ }
179
+ else if (item.id === 'pending') {
180
+ label = `pending: ${String(pendingCount)}`;
181
+ }
182
+ else if (item.id === 'terminals') {
183
+ label = `terminals: ${String(terminalCount)}`;
184
+ }
185
+ else if (item.id === 'mcp') {
186
+ label = 'mcp: connecting...';
187
+ }
188
+ else {
189
+ label = `bg: ${String(data.statusBar.backgroundAgentCount)}`;
190
+ }
191
+ if (isSelected) {
192
+ segments.push(s.inverse(` ${label} `));
193
+ }
194
+ else if (data.statusBar.navActive) {
195
+ segments.push(s.muted(label));
196
+ }
197
+ else {
198
+ segments.push(s.warning(label));
199
+ }
200
+ }
201
+ let statusLine = segments.join(' ');
202
+ if (data.statusBar.navActive) {
203
+ statusLine += ' ' + s.muted('[Enter]');
204
+ }
205
+ else {
206
+ statusLine += ' ' + s.muted('[↓]');
207
+ }
208
+ lines.push({
209
+ content: statusLine,
210
+ physicalLines: getPhysicalLineCount(statusLine, termWidth),
211
+ });
212
+ }
213
+ // 8. Autocomplete dropdown (if active) - agent > file > command priority
214
+ const agentAutocompleteLines = data.ac.buildAgentLines(termWidth);
215
+ const fileAutocompleteLines = data.ac.buildFileLines(termWidth);
216
+ const autocompleteLines = agentAutocompleteLines.length > 0
217
+ ? agentAutocompleteLines
218
+ : fileAutocompleteLines.length > 0
219
+ ? fileAutocompleteLines
220
+ : data.ac.buildCommandLines(termWidth);
221
+ for (const line of autocompleteLines) {
222
+ lines.push({
223
+ content: line,
224
+ physicalLines: getPhysicalLineCount(line, termWidth),
225
+ });
226
+ }
227
+ // Calculate total physical height
228
+ let totalPhysicalLines = 0;
229
+ for (const line of lines) {
230
+ totalPhysicalLines += line.physicalLines;
231
+ }
232
+ // Clear existing footer
233
+ this.clear();
234
+ // Write all lines
235
+ for (let i = 0; i < lines.length; i++) {
236
+ terminal.write(lines[i].content);
237
+ if (i < lines.length - 1) {
238
+ terminal.write('\n');
239
+ }
240
+ }
241
+ // Calculate cursor position (for multiline, position on the line where cursor is)
242
+ let rowsAfterCursor = 0;
243
+ for (let i = cursorLineIndex + 1; i < lines.length; i++) {
244
+ rowsAfterCursor += lines[i].physicalLines;
245
+ }
246
+ if (rowsAfterCursor > 0) {
247
+ terminal.moveCursorUp(rowsAfterCursor);
248
+ }
249
+ // Calculate column within current line
250
+ const currentLinePromptLen = data.currentLine === 0 ? data.promptPrefixLen : continuationPromptLen;
251
+ const totalPos = currentLinePromptLen + data.cursorPos;
252
+ const cursorCol = (totalPos % termWidth) + 1;
253
+ terminal.moveCursorToColumn(cursorCol);
254
+ terminal.showCursor();
255
+ this.lastRenderHeight = totalPhysicalLines;
256
+ this.cursorLineFromBottom = rowsAfterCursor;
257
+ }
258
+ // ===========================================================================
259
+ // Render state reset
260
+ // ===========================================================================
261
+ resetRenderState() {
262
+ this.lastRenderHeight = 0;
263
+ this.cursorLineFromBottom = 0;
264
+ }
265
+ // ===========================================================================
266
+ // Spinner animation
267
+ // ===========================================================================
268
+ startSpinnerAnimation(onTick) {
269
+ if (this.spinnerTimer)
270
+ return;
271
+ this.spinnerTimer = setInterval(() => {
272
+ this.spinnerFrame++;
273
+ onTick();
274
+ }, 200); // Slower, more relaxed animation
275
+ }
276
+ stopSpinnerAnimation() {
277
+ if (this.spinnerTimer) {
278
+ clearInterval(this.spinnerTimer);
279
+ this.spinnerTimer = null;
280
+ }
281
+ this.spinnerFrame = 0;
282
+ }
283
+ // ===========================================================================
284
+ // Line builders (private)
285
+ // ===========================================================================
286
+ buildSpinnerLine(data) {
287
+ const s = getStyles();
288
+ const frame = this.spinnerFrames[this.spinnerFrame % this.spinnerFrames.length];
289
+ const text = data.currentTool ?? data.spinnerText ?? 'Thinking...';
290
+ // Build hints (Claude Code style: ctrl+c to interrupt · time · tokens · thinking)
291
+ const hints = ['esc to interrupt'];
292
+ // Show "ctrl+b to background" hint if bash running for more than 3 seconds
293
+ if (data.activeBashInfo && (Date.now() - data.activeBashInfo.startTime) > 3000) {
294
+ hints.push('ctrl+b to background');
295
+ }
296
+ // Add elapsed time
297
+ if (data.turnMetrics.startTime > 0) {
298
+ const elapsedMs = Date.now() - data.turnMetrics.startTime;
299
+ hints.push(formatDuration(elapsedMs));
300
+ }
301
+ // Add token counts (↓ input ↑ output) with thinking/cache tokens and API call count
302
+ if (data.turnMetrics.inputTokens > 0 || data.turnMetrics.outputTokens > 0) {
303
+ const inputStr = formatTokens(data.turnMetrics.inputTokens);
304
+ const outputStr = formatTokens(data.turnMetrics.outputTokens);
305
+ let tokenDisplay = `↓ ${inputStr} ↑ ${outputStr}`;
306
+ // Build parenthetical for thinking/cache tokens
307
+ const extras = [];
308
+ if (data.turnMetrics.thinkingTokens > 0) {
309
+ extras.push(`think: ${formatTokens(data.turnMetrics.thinkingTokens)}`);
310
+ }
311
+ if (data.turnMetrics.cacheReadTokens > 0) {
312
+ extras.push(`cache: ${formatTokens(data.turnMetrics.cacheReadTokens)}`);
313
+ }
314
+ if (extras.length > 0) {
315
+ tokenDisplay += ` (${extras.join(', ')})`;
316
+ }
317
+ // Add API call count if multiple calls
318
+ if (data.turnMetrics.apiCalls > 1) {
319
+ tokenDisplay += ` (${String(data.turnMetrics.apiCalls)} calls)`;
320
+ }
321
+ hints.push(tokenDisplay);
322
+ }
323
+ // Add "thinking" indicator when extended thinking is active
324
+ if (data.turnMetrics.isThinking) {
325
+ hints.push('thinking');
326
+ }
327
+ // Add background task count
328
+ const bgTaskCount = getDefaultShellManager().listRunning().length;
329
+ if (bgTaskCount > 0) {
330
+ hints.push(`bg: ${String(bgTaskCount)}`);
331
+ }
332
+ if (data.todos.length > 0 && data.showTodos) {
333
+ hints.push('ctrl+t to hide todos');
334
+ }
335
+ else if (data.todos.length > 0 && !data.showTodos) {
336
+ hints.push('ctrl+t to show todos');
337
+ }
338
+ const hintsText = hints.length > 0 ? ` (${hints.join(' · ')})` : '';
339
+ // Format: [CRT scanner] text (hints)
340
+ return s.muted(`${frame} ${text}${hintsText}`);
341
+ }
342
+ buildModeLine(data, termWidth) {
343
+ const s = getStyles();
344
+ const modeInfo = MODE_INFO[data.mode];
345
+ // Build mode part (left)
346
+ let modePart;
347
+ let modePartLen;
348
+ switch (data.mode) {
349
+ case 'normal':
350
+ modePart = s.muted(`mode: ${modeInfo.label}`);
351
+ modePartLen = `mode: ${modeInfo.label}`.length;
352
+ break;
353
+ case 'auto-accept':
354
+ modePart = s.warning(`mode: ${modeInfo.label}`);
355
+ modePartLen = `mode: ${modeInfo.label}`.length;
356
+ break;
357
+ case 'plan':
358
+ if (data.activePlanName) {
359
+ modePart = s.info(`mode: ${modeInfo.label}`) + s.secondary(` [${data.activePlanName}]`);
360
+ modePartLen = `mode: ${modeInfo.label} [${data.activePlanName}]`.length;
361
+ }
362
+ else {
363
+ modePart = s.info(`mode: ${modeInfo.label}`);
364
+ modePartLen = `mode: ${modeInfo.label}`.length;
365
+ }
366
+ break;
367
+ default:
368
+ modePart = s.muted(`mode: ${modeInfo.label}`);
369
+ modePartLen = `mode: ${modeInfo.label}`.length;
370
+ }
371
+ // Add background task count indicator after mode (if any running)
372
+ const bgCount = getDefaultShellManager().listRunning().length;
373
+ if (bgCount > 0) {
374
+ modePart += ' ' + s.info(`[bg: ${String(bgCount)}]`);
375
+ modePartLen += 1 + `[bg: ${String(bgCount)}]`.length;
376
+ }
377
+ // Add conversation filter indicator (if active)
378
+ if (data.conversationFilterActive) {
379
+ const filterText = '[/f: on]';
380
+ modePart += ' ' + s.secondary(filterText);
381
+ modePartLen += 1 + filterText.length;
382
+ }
383
+ // Add restored history hint (if available, only when not running)
384
+ if (!data.agentRunning && data.hasRestoredHistory) {
385
+ const histHint = '[ctrl+r: history]';
386
+ modePart += ' ' + s.muted(histHint);
387
+ modePartLen += 1 + histHint.length;
388
+ }
389
+ // Build agent part (center) - only if not default
390
+ let agentPart = '';
391
+ let agentPartLen = 0;
392
+ if (data.activeTeamAgent && data.activeTeamAgent.id !== 'default') {
393
+ const agent = data.activeTeamAgent;
394
+ agentPart = s.secondary(`${agent.mascot} $${agent.id}`) + s.muted(` (${agent.displayName})`);
395
+ agentPartLen = `${agent.mascot} $${agent.id} (${agent.displayName})`.length;
396
+ }
397
+ // Build project part (right)
398
+ let projectPart = '';
399
+ let projectPartLen = 0;
400
+ if (data.projectName) {
401
+ const projectText = `Project: ${data.projectName}`;
402
+ projectPart = s.muted(projectText);
403
+ projectPartLen = projectText.length;
404
+ }
405
+ // Calculate layout
406
+ const totalContentLen = modePartLen + agentPartLen + projectPartLen;
407
+ const availableSpace = termWidth - totalContentLen;
408
+ if (availableSpace < 4) {
409
+ // Not enough space - just put mode on left, project on right, skip agent
410
+ if (!data.projectName) {
411
+ return modePart;
412
+ }
413
+ const padding = Math.max(2, termWidth - modePartLen - projectPartLen);
414
+ return modePart + ' '.repeat(padding) + projectPart;
415
+ }
416
+ // Distribute space: split between left-center and center-right gaps
417
+ if (agentPartLen > 0) {
418
+ const leftGap = Math.floor(availableSpace / 2);
419
+ const rightGap = availableSpace - leftGap;
420
+ return modePart + ' '.repeat(Math.max(2, leftGap)) + agentPart + ' '.repeat(Math.max(2, rightGap)) + projectPart;
421
+ }
422
+ else {
423
+ // No agent, just mode and project
424
+ if (!data.projectName) {
425
+ return modePart;
426
+ }
427
+ const padding = Math.max(2, termWidth - modePartLen - projectPartLen);
428
+ return modePart + ' '.repeat(padding) + projectPart;
429
+ }
430
+ }
431
+ }
@@ -1,16 +1,20 @@
1
1
  /**
2
+ * @deprecated DEAD CODE — This class is never instantiated. Do NOT modify this file.
3
+ *
4
+ * The active footer/render pipeline is in TerminalUI (src/ui/terminal-ui.ts).
5
+ * TerminalUI has its own inline render loop with numbered sections (1-8),
6
+ * status bar items, mode indicator, etc. All footer changes should go there.
7
+ *
8
+ * This file is kept only because it is type-imported by terminal-renderer.ts
9
+ * and memory-handler.ts. It can be safely deleted once those imports are removed.
10
+ *
11
+ * --- Original description ---
2
12
  * Footer Orchestrator
3
13
  *
4
14
  * Manages all persistent UI elements below the scrolling zone:
5
15
  * - TodoZone (spinner + todo list)
6
16
  * - Queued input display
7
17
  * - InputPrompt
8
- *
9
- * Handles:
10
- * - Coordinated rendering via single render loop
11
- * - Event forwarding from InputPrompt
12
- * - Clearing for scrolling output
13
- * - State management for agent running/idle modes
14
18
  */
15
19
  import { EventEmitter } from 'events';
16
20
  import type { TodoItem, AgentMode } from './types.js';
@@ -40,6 +44,7 @@ export declare class Footer extends EventEmitter {
40
44
  private cursorLineFromBottom;
41
45
  private projectName;
42
46
  private externalRendererEnabled;
47
+ private activeTeamAgent;
43
48
  private readonly renderInterval;
44
49
  private renderTimer;
45
50
  private needsRender;
@@ -77,6 +82,31 @@ export declare class Footer extends EventEmitter {
77
82
  * Get the current project name
78
83
  */
79
84
  getProjectName(): string | null;
85
+ /**
86
+ * Set the active team agent (displayed in footer)
87
+ * Pass null to clear (default agent or no team)
88
+ */
89
+ setActiveTeamAgent(agent: {
90
+ id: string;
91
+ displayName: string;
92
+ mascot: string;
93
+ } | null): void;
94
+ /**
95
+ * Set the callback to get available team agents for $ autocomplete
96
+ */
97
+ setAgentSuggestionsCallback(callback: (() => {
98
+ id: string;
99
+ displayName: string;
100
+ mascot: string;
101
+ }[]) | undefined): void;
102
+ /**
103
+ * Get the active team agent
104
+ */
105
+ getActiveTeamAgent(): {
106
+ id: string;
107
+ displayName: string;
108
+ mascot: string;
109
+ } | null;
80
110
  /**
81
111
  * Update the todo list
82
112
  */
@@ -95,9 +125,26 @@ export declare class Footer extends EventEmitter {
95
125
  */
96
126
  setSpinnerText(text: string | null): void;
97
127
  /**
98
- * Add tokens to the spinner counter
128
+ * Add tokens to the spinner counter (legacy)
99
129
  */
100
130
  addTokens(count: number): void;
131
+ /**
132
+ * Add input/output tokens separately (new API for live display)
133
+ */
134
+ addTokensDetailed(inputTokens: number, outputTokens: number): void;
135
+ /**
136
+ * Get current token counts
137
+ */
138
+ getTokenCounts(): {
139
+ input: number;
140
+ output: number;
141
+ total: number;
142
+ };
143
+ /**
144
+ * Set whether extended thinking mode is active
145
+ * Shows "thinking" indicator in status line
146
+ */
147
+ setThinking(thinking: boolean): void;
101
148
  /**
102
149
  * Called when a subagent starts
103
150
  */
@@ -248,6 +295,26 @@ export declare class Footer extends EventEmitter {
248
295
  * Render mode indicator line
249
296
  */
250
297
  private renderModeIndicator;
298
+ /**
299
+ * Render agent indicator line (only when team agent is active and not default)
300
+ * Returns empty string if no team agent or default agent.
301
+ * Format: "[◈_◈] $arch (Solution Architect) /team to switch"
302
+ */
303
+ private renderAgentIndicator;
304
+ /**
305
+ * Render pending requests indicator (Phase 3b: Background Agents)
306
+ * Shows count of pending requests from background agents if any.
307
+ * Format: "⚠ 2 pending requests [/pending to view]"
308
+ * Returns empty string if no pending requests.
309
+ */
310
+ private renderPendingRequestsIndicator;
311
+ /**
312
+ * Render terminal count indicator (multi-terminal awareness).
313
+ * Shows count of active terminal sessions if more than 1.
314
+ * Format: "+ 2 terminals [/terminals]"
315
+ * Returns empty string if only this terminal is active.
316
+ */
317
+ private renderTerminalCountIndicator;
251
318
  /**
252
319
  * Calculate how many terminal rows a line takes (accounting for wrapping)
253
320
  * Uses unified line-utils for consistent calculation across all components.