@compilr-dev/cli 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
package/dist/ui/footer.js CHANGED
@@ -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 { MODE_INFO } from './types.js';
@@ -21,6 +25,8 @@ import { InputPrompt, DEFAULT_COMMANDS } from './input-prompt.js';
21
25
  import { SubagentRenderer } from './subagent-renderer.js';
22
26
  import { debugLog, debugRender } from '../utils/debug-log.js';
23
27
  import { getPhysicalLineCount, getVisibleLength } from './line-utils.js';
28
+ import { getPendingRequestsManager } from '../multi-agent/index.js';
29
+ import { getSessionRegistry } from '../multi-agent/session-registry.js';
24
30
  // =============================================================================
25
31
  // Footer Class
26
32
  // =============================================================================
@@ -39,6 +45,7 @@ export class Footer extends EventEmitter {
39
45
  cursorLineFromBottom = 0; // Track cursor position for clear()
40
46
  projectName = null; // Current active project name
41
47
  externalRendererEnabled = false; // When true, skip internal render loop
48
+ activeTeamAgent = null; // Active team agent
42
49
  // Render loop
43
50
  renderInterval;
44
51
  renderTimer = null;
@@ -88,6 +95,18 @@ export class Footer extends EventEmitter {
88
95
  this.subagentRenderer.toggleExpand();
89
96
  this.needsRender = true;
90
97
  });
98
+ // Phase 3b: Listen to pending requests changes for footer indicator
99
+ const pendingManager = getPendingRequestsManager();
100
+ pendingManager.on('count-changed', () => {
101
+ this.needsRender = true;
102
+ });
103
+ // Multi-terminal: Listen to session count changes from heartbeat
104
+ const registry = getSessionRegistry();
105
+ if (registry) {
106
+ registry.onCountChange(() => {
107
+ this.needsRender = true;
108
+ });
109
+ }
91
110
  }
92
111
  // ===========================================================================
93
112
  // Public API
@@ -197,6 +216,26 @@ export class Footer extends EventEmitter {
197
216
  getProjectName() {
198
217
  return this.projectName;
199
218
  }
219
+ /**
220
+ * Set the active team agent (displayed in footer)
221
+ * Pass null to clear (default agent or no team)
222
+ */
223
+ setActiveTeamAgent(agent) {
224
+ this.activeTeamAgent = agent;
225
+ this.needsRender = true;
226
+ }
227
+ /**
228
+ * Set the callback to get available team agents for $ autocomplete
229
+ */
230
+ setAgentSuggestionsCallback(callback) {
231
+ this.inputPrompt.setAgentSuggestionsCallback(callback);
232
+ }
233
+ /**
234
+ * Get the active team agent
235
+ */
236
+ getActiveTeamAgent() {
237
+ return this.activeTeamAgent;
238
+ }
200
239
  /**
201
240
  * Update the todo list
202
241
  */
@@ -227,11 +266,31 @@ export class Footer extends EventEmitter {
227
266
  this.needsRender = true;
228
267
  }
229
268
  /**
230
- * Add tokens to the spinner counter
269
+ * Add tokens to the spinner counter (legacy)
231
270
  */
232
271
  addTokens(count) {
233
272
  this.todoZone.addTokens(count);
234
273
  }
274
+ /**
275
+ * Add input/output tokens separately (new API for live display)
276
+ */
277
+ addTokensDetailed(inputTokens, outputTokens) {
278
+ this.todoZone.addTokensDetailed(inputTokens, outputTokens);
279
+ }
280
+ /**
281
+ * Get current token counts
282
+ */
283
+ getTokenCounts() {
284
+ return this.todoZone.getTokenCounts();
285
+ }
286
+ /**
287
+ * Set whether extended thinking mode is active
288
+ * Shows "thinking" indicator in status line
289
+ */
290
+ setThinking(thinking) {
291
+ this.todoZone.setThinking(thinking);
292
+ this.needsRender = true;
293
+ }
235
294
  // ===========================================================================
236
295
  // Subagent API
237
296
  // ===========================================================================
@@ -438,17 +497,32 @@ export class Footer extends EventEmitter {
438
497
  // 2. Todo zone (spinner + todos)
439
498
  const todoLines = this.todoZone.render();
440
499
  allLines.push(...todoLines);
441
- // 3. Queued inputs
500
+ // 3. Agent indicator (only if team agent is active and not default)
501
+ const agentIndicator = this.renderAgentIndicator();
502
+ if (agentIndicator) {
503
+ allLines.push(agentIndicator);
504
+ }
505
+ // 3b. Pending requests indicator (Phase 3b)
506
+ const pendingIndicator = this.renderPendingRequestsIndicator();
507
+ if (pendingIndicator) {
508
+ allLines.push(pendingIndicator);
509
+ }
510
+ // 3c. Terminal count indicator (multi-terminal awareness)
511
+ const terminalIndicator = this.renderTerminalCountIndicator();
512
+ if (terminalIndicator) {
513
+ allLines.push(terminalIndicator);
514
+ }
515
+ // 4. Queued inputs
442
516
  const queuedInputs = this.inputPrompt.getQueuedInputs();
443
517
  for (const queued of queuedInputs) {
444
518
  allLines.push(s.muted(`queued: "${queued}"`));
445
519
  }
446
- // 4. Input prompt
520
+ // 5. Input prompt
447
521
  const inputLines = this.inputPrompt.render();
448
522
  allLines.push(...inputLines);
449
- // 5. Mode indicator (below input, before autocomplete)
523
+ // 6. Mode indicator (below input, before autocomplete)
450
524
  allLines.push(this.renderModeIndicator());
451
- // 6. Autocomplete dropdown (if active)
525
+ // 7. Autocomplete dropdown (if active)
452
526
  const autocompleteLines = this.inputPrompt.getAutocompleteLines();
453
527
  allLines.push(...autocompleteLines);
454
528
  return allLines;
@@ -467,6 +541,20 @@ export class Footer extends EventEmitter {
467
541
  }
468
542
  // Todo lines
469
543
  linesBeforeInput += this.todoZone.render().length;
544
+ // Agent indicator line (if active team agent and not default)
545
+ if (this.activeTeamAgent && this.activeTeamAgent.id !== 'default') {
546
+ linesBeforeInput += 1;
547
+ }
548
+ // Pending indicator line (Phase 3b)
549
+ const pendingIndicator = this.renderPendingRequestsIndicator();
550
+ if (pendingIndicator) {
551
+ linesBeforeInput += 1;
552
+ }
553
+ // Terminal count indicator (multi-terminal awareness)
554
+ const terminalIndicator = this.renderTerminalCountIndicator();
555
+ if (terminalIndicator) {
556
+ linesBeforeInput += 1;
557
+ }
470
558
  // Queued inputs
471
559
  linesBeforeInput += this.inputPrompt.getQueuedInputs().length;
472
560
  // cursorInfo.row is 1-indexed (row 1 = first line after separator)
@@ -577,18 +665,39 @@ export class Footer extends EventEmitter {
577
665
  // 2. Todo zone (spinner + todos)
578
666
  const todoLines = this.todoZone.render();
579
667
  allLines.push(...todoLines);
580
- // 3. Queued inputs
668
+ // 3. Agent indicator (only if team agent is active and not default)
669
+ let agentIndicatorLineCount = 0;
670
+ const agentIndicator = this.renderAgentIndicator();
671
+ if (agentIndicator) {
672
+ allLines.push(agentIndicator);
673
+ agentIndicatorLineCount = 1;
674
+ }
675
+ // 3b. Pending requests indicator (Phase 3b: Background Agents)
676
+ let pendingIndicatorLineCount = 0;
677
+ const pendingIndicator = this.renderPendingRequestsIndicator();
678
+ if (pendingIndicator) {
679
+ allLines.push(pendingIndicator);
680
+ pendingIndicatorLineCount = 1;
681
+ }
682
+ // 3c. Terminal count indicator (multi-terminal awareness)
683
+ let terminalIndicatorLineCount = 0;
684
+ const terminalIndicator = this.renderTerminalCountIndicator();
685
+ if (terminalIndicator) {
686
+ allLines.push(terminalIndicator);
687
+ terminalIndicatorLineCount = 1;
688
+ }
689
+ // 4. Queued inputs
581
690
  const s = getStyles();
582
691
  const queuedInputs = this.inputPrompt.getQueuedInputs();
583
692
  for (const queued of queuedInputs) {
584
693
  allLines.push(s.muted(`queued: "${queued}"`));
585
694
  }
586
- // 4. Input prompt
695
+ // 5. Input prompt
587
696
  const inputLines = this.inputPrompt.render();
588
697
  allLines.push(...inputLines);
589
- // 5. Mode indicator (below input, before autocomplete)
698
+ // 6. Mode indicator (below input, before autocomplete)
590
699
  allLines.push(this.renderModeIndicator());
591
- // 6. Autocomplete dropdown (if active)
700
+ // 7. Autocomplete dropdown (if active)
592
701
  const autocompleteLines = this.inputPrompt.getAutocompleteLines();
593
702
  allLines.push(...autocompleteLines);
594
703
  // Calculate new height BEFORE clearing (to clear extra lines if growing)
@@ -616,7 +725,7 @@ export class Footer extends EventEmitter {
616
725
  this.lastRenderHeight = newHeight;
617
726
  debugRender('Footer:render', `lastRenderHeight set to ${String(newHeight)}`);
618
727
  // Position cursor within input prompt
619
- this.positionCursor(allLines, subagentLineCount + todoLines.length + queuedInputs.length);
728
+ this.positionCursor(allLines, subagentLineCount + todoLines.length + agentIndicatorLineCount + pendingIndicatorLineCount + terminalIndicatorLineCount + queuedInputs.length);
620
729
  }
621
730
  finally {
622
731
  this.isRendering = false;
@@ -658,6 +767,54 @@ export class Footer extends EventEmitter {
658
767
  const padding = Math.max(2, termWidth - leftVisible - rightVisible);
659
768
  return leftPart + ' '.repeat(padding) + rightPart;
660
769
  }
770
+ /**
771
+ * Render agent indicator line (only when team agent is active and not default)
772
+ * Returns empty string if no team agent or default agent.
773
+ * Format: "[◈_◈] $arch (Solution Architect) /team to switch"
774
+ */
775
+ renderAgentIndicator() {
776
+ if (!this.activeTeamAgent || this.activeTeamAgent.id === 'default') {
777
+ return '';
778
+ }
779
+ const s = getStyles();
780
+ const agent = this.activeTeamAgent;
781
+ const label = `${agent.mascot} $${agent.id} (${agent.displayName})`;
782
+ const hint = '/team to switch';
783
+ return s.secondary(label) + ' ' + s.muted(hint);
784
+ }
785
+ /**
786
+ * Render pending requests indicator (Phase 3b: Background Agents)
787
+ * Shows count of pending requests from background agents if any.
788
+ * Format: "⚠ 2 pending requests [/pending to view]"
789
+ * Returns empty string if no pending requests.
790
+ */
791
+ renderPendingRequestsIndicator() {
792
+ const pendingManager = getPendingRequestsManager();
793
+ const count = pendingManager.getCount();
794
+ if (count === 0) {
795
+ return '';
796
+ }
797
+ const s = getStyles();
798
+ const countText = count === 1 ? '1 pending request' : `${String(count)} pending requests`;
799
+ return s.warning(`⚠ ${countText}`) + ' ' + s.muted('[/pending to view]');
800
+ }
801
+ /**
802
+ * Render terminal count indicator (multi-terminal awareness).
803
+ * Shows count of active terminal sessions if more than 1.
804
+ * Format: "+ 2 terminals [/terminals]"
805
+ * Returns empty string if only this terminal is active.
806
+ */
807
+ renderTerminalCountIndicator() {
808
+ const registry = getSessionRegistry();
809
+ if (!registry)
810
+ return '';
811
+ const count = registry.getActiveSessionCount();
812
+ if (count <= 1)
813
+ return '';
814
+ const s = getStyles();
815
+ const text = `${String(count)} terminals`;
816
+ return s.muted(`+ ${text}`) + ' ' + s.muted('[/terminals]');
817
+ }
661
818
  /**
662
819
  * Calculate how many terminal rows a line takes (accounting for wrapping)
663
820
  * Uses unified line-utils for consistent calculation across all components.
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Input state controller.
3
+ *
4
+ * Extracted from TerminalUI — owns all input state (lines, cursor,
5
+ * history, suggestion, queued inputs) and their manipulation methods.
6
+ * TerminalUI delegates to this controller via getter/setter wrappers.
7
+ */
8
+ export declare class InputController {
9
+ lines: string[];
10
+ currentLine: number;
11
+ cursorPos: number;
12
+ readonly history: string[];
13
+ historyIndex: number;
14
+ savedInput: string;
15
+ suggestion: string | null;
16
+ queuedInputs: string[];
17
+ /** Get the full input value (all lines joined with newlines). */
18
+ getInputValue(): string;
19
+ /** Get the current line content. */
20
+ getCurrentLineContent(): string;
21
+ /** Clear input and reset to single empty line. */
22
+ clearInput(): void;
23
+ addToHistory(input: string): void;
24
+ /**
25
+ * Navigate to older history entry.
26
+ * @param isAutocompleteActive - when true, navigation is blocked
27
+ * @returns true if input changed
28
+ */
29
+ navigateHistoryUp(isAutocompleteActive: boolean): boolean;
30
+ /**
31
+ * Navigate to newer history entry.
32
+ * @param isAutocompleteActive - when true, navigation is blocked
33
+ * @returns true if input changed
34
+ */
35
+ navigateHistoryDown(isAutocompleteActive: boolean): boolean;
36
+ resetHistoryNavigation(): void;
37
+ /**
38
+ * Move cursor to previous word boundary (Option+Left).
39
+ * @returns true if cursor moved (caller should trigger render)
40
+ */
41
+ moveWordLeft(): boolean;
42
+ /**
43
+ * Move cursor to next word boundary (Option+Right).
44
+ * @returns true if cursor moved (caller should trigger render)
45
+ */
46
+ moveWordRight(): boolean;
47
+ getQueuedInputs(): string[];
48
+ popQueuedInput(): string | null;
49
+ hasQueuedInput(): boolean;
50
+ clearQueue(): void;
51
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Input state controller.
3
+ *
4
+ * Extracted from TerminalUI — owns all input state (lines, cursor,
5
+ * history, suggestion, queued inputs) and their manipulation methods.
6
+ * TerminalUI delegates to this controller via getter/setter wrappers.
7
+ */
8
+ export class InputController {
9
+ // Core multiline input state
10
+ lines = [''];
11
+ currentLine = 0;
12
+ cursorPos = 0;
13
+ // Command history
14
+ history = [];
15
+ historyIndex = -1;
16
+ savedInput = '';
17
+ // Ghost text suggestion
18
+ suggestion = null;
19
+ // Queued user inputs (when agent is busy)
20
+ queuedInputs = [];
21
+ // ===========================================================================
22
+ // Input value helpers
23
+ // ===========================================================================
24
+ /** Get the full input value (all lines joined with newlines). */
25
+ getInputValue() {
26
+ return this.lines.join('\n');
27
+ }
28
+ /** Get the current line content. */
29
+ getCurrentLineContent() {
30
+ return this.lines[this.currentLine];
31
+ }
32
+ /** Clear input and reset to single empty line. */
33
+ clearInput() {
34
+ this.lines = [''];
35
+ this.currentLine = 0;
36
+ this.cursorPos = 0;
37
+ }
38
+ // ===========================================================================
39
+ // History
40
+ // ===========================================================================
41
+ addToHistory(input) {
42
+ const trimmed = input.trim();
43
+ // Don't add empty or duplicate consecutive entries
44
+ if (trimmed && (this.history.length === 0 || this.history[this.history.length - 1] !== trimmed)) {
45
+ this.history.push(trimmed);
46
+ }
47
+ }
48
+ /**
49
+ * Navigate to older history entry.
50
+ * @param isAutocompleteActive - when true, navigation is blocked
51
+ * @returns true if input changed
52
+ */
53
+ navigateHistoryUp(isAutocompleteActive) {
54
+ if (isAutocompleteActive)
55
+ return false;
56
+ if (this.history.length === 0)
57
+ return false;
58
+ // Save current input when starting to navigate
59
+ if (this.historyIndex === -1) {
60
+ this.savedInput = this.getInputValue();
61
+ }
62
+ // Navigate to older entry
63
+ if (this.historyIndex < this.history.length - 1) {
64
+ this.historyIndex++;
65
+ const historyEntry = this.history[this.history.length - 1 - this.historyIndex];
66
+ // History entries are single-line (newlines stripped on save)
67
+ this.lines = [historyEntry];
68
+ this.currentLine = 0;
69
+ this.cursorPos = historyEntry.length;
70
+ return true;
71
+ }
72
+ return false;
73
+ }
74
+ /**
75
+ * Navigate to newer history entry.
76
+ * @param isAutocompleteActive - when true, navigation is blocked
77
+ * @returns true if input changed
78
+ */
79
+ navigateHistoryDown(isAutocompleteActive) {
80
+ if (isAutocompleteActive)
81
+ return false;
82
+ if (this.historyIndex < 0)
83
+ return false;
84
+ this.historyIndex--;
85
+ if (this.historyIndex === -1) {
86
+ // Restore saved input (may be multiline)
87
+ this.lines = this.savedInput.split('\n');
88
+ if (this.lines.length === 0)
89
+ this.lines = [''];
90
+ this.currentLine = this.lines.length - 1;
91
+ this.cursorPos = this.lines[this.currentLine].length;
92
+ }
93
+ else {
94
+ // Navigate to newer entry
95
+ const historyEntry = this.history[this.history.length - 1 - this.historyIndex];
96
+ this.lines = [historyEntry];
97
+ this.currentLine = 0;
98
+ this.cursorPos = historyEntry.length;
99
+ }
100
+ return true;
101
+ }
102
+ resetHistoryNavigation() {
103
+ this.historyIndex = -1;
104
+ this.savedInput = '';
105
+ }
106
+ // ===========================================================================
107
+ // Word movement
108
+ // ===========================================================================
109
+ /**
110
+ * Move cursor to previous word boundary (Option+Left).
111
+ * @returns true if cursor moved (caller should trigger render)
112
+ */
113
+ moveWordLeft() {
114
+ const line = this.lines[this.currentLine];
115
+ if (this.cursorPos > 0) {
116
+ let pos = this.cursorPos;
117
+ // Skip spaces
118
+ while (pos > 0 && line[pos - 1] === ' ')
119
+ pos--;
120
+ // Skip word
121
+ while (pos > 0 && line[pos - 1] !== ' ')
122
+ pos--;
123
+ this.cursorPos = pos;
124
+ return true;
125
+ }
126
+ else if (this.currentLine > 0) {
127
+ // Move to end of previous line
128
+ this.currentLine--;
129
+ this.cursorPos = this.lines[this.currentLine].length;
130
+ return true;
131
+ }
132
+ return false;
133
+ }
134
+ /**
135
+ * Move cursor to next word boundary (Option+Right).
136
+ * @returns true if cursor moved (caller should trigger render)
137
+ */
138
+ moveWordRight() {
139
+ const line = this.lines[this.currentLine];
140
+ if (this.cursorPos < line.length) {
141
+ let pos = this.cursorPos;
142
+ // Skip word
143
+ while (pos < line.length && line[pos] !== ' ')
144
+ pos++;
145
+ // Skip spaces
146
+ while (pos < line.length && line[pos] === ' ')
147
+ pos++;
148
+ this.cursorPos = pos;
149
+ return true;
150
+ }
151
+ else if (this.currentLine < this.lines.length - 1) {
152
+ // Move to start of next line
153
+ this.currentLine++;
154
+ this.cursorPos = 0;
155
+ return true;
156
+ }
157
+ return false;
158
+ }
159
+ // ===========================================================================
160
+ // Input queue
161
+ // ===========================================================================
162
+ getQueuedInputs() {
163
+ return [...this.queuedInputs];
164
+ }
165
+ popQueuedInput() {
166
+ if (this.queuedInputs.length === 0)
167
+ return null;
168
+ return this.queuedInputs.shift() ?? null;
169
+ }
170
+ hasQueuedInput() {
171
+ return this.queuedInputs.length > 0;
172
+ }
173
+ clearQueue() {
174
+ this.queuedInputs = [];
175
+ }
176
+ }
@@ -21,6 +21,14 @@ export declare const DEFAULT_COMMANDS: CommandOption[];
21
21
  * Uses unified line-utils for consistent behavior across components.
22
22
  */
23
23
  export declare function stripAnsi(str: string): string;
24
+ /**
25
+ * Agent suggestion for $ autocomplete
26
+ */
27
+ export interface AgentSuggestion {
28
+ id: string;
29
+ displayName: string;
30
+ mascot: string;
31
+ }
24
32
  export interface InputPromptEvents {
25
33
  submit: (input: string) => void;
26
34
  command: (command: string, args: string) => void;
@@ -33,15 +41,22 @@ export interface InputPromptOptions {
33
41
  prompt?: string;
34
42
  showSeparators?: boolean;
35
43
  commands?: CommandOption[];
44
+ /** Callback to get available team agents for $ autocomplete */
45
+ getAgentSuggestions?: () => AgentSuggestion[];
46
+ /** Callback to get available commands for / autocomplete */
47
+ getCommands?: () => CommandOption[];
36
48
  }
37
49
  export declare class InputPrompt extends EventEmitter {
38
50
  private prompt;
39
51
  private promptLen;
40
52
  private readonly showSeparators;
41
53
  private readonly commands;
54
+ private getAgentSuggestions?;
55
+ private readonly getCommands?;
42
56
  private state;
43
57
  private autocomplete;
44
58
  private fileAutocomplete;
59
+ private agentAutocomplete;
45
60
  private readonly history;
46
61
  private historyIndex;
47
62
  private savedInput;
@@ -72,6 +87,10 @@ export declare class InputPrompt extends EventEmitter {
72
87
  * Clear the current suggestion
73
88
  */
74
89
  clearSuggestion(): void;
90
+ /**
91
+ * Set the callback to get available team agents for $ autocomplete
92
+ */
93
+ setAgentSuggestionsCallback(callback: (() => AgentSuggestion[]) | undefined): void;
75
94
  /**
76
95
  * Start input capture (non-blocking, event-driven)
77
96
  */