@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
@@ -24,6 +24,7 @@ interface ProjectStats {
24
24
  hasPrd: boolean;
25
25
  hasArchDocs: boolean;
26
26
  hasScaffold: boolean;
27
+ hasModel: boolean;
27
28
  }
28
29
  interface ActionItem {
29
30
  label: string;
@@ -20,6 +20,7 @@ import { projectRepository, workItemRepository, documentRepository } from '../..
20
20
  import { BacklogOverlayV2 } from './backlog-overlay-v2.js';
21
21
  import { DocsOverlayV2 } from './docs-overlay-v2.js';
22
22
  import { AnchorsOverlayV2 } from './anchors-overlay-v2.js';
23
+ import { ProjectEditOverlayV2 } from './project-edit-overlay-v2.js';
23
24
  // =============================================================================
24
25
  // Constants
25
26
  // =============================================================================
@@ -52,7 +53,7 @@ const PHASES = [
52
53
  id: 'scaffold',
53
54
  name: 'Scaffold',
54
55
  command: '/scaffold',
55
- description: 'Create project foundation',
56
+ description: 'Create project foundation (auto-generates if model available)',
56
57
  isComplete: (_project, stats) => stats.hasScaffold,
57
58
  isActive: (_project, stats) => stats.totalItems >= 3 && !stats.hasScaffold,
58
59
  },
@@ -81,6 +82,7 @@ function getProjectStats(project) {
81
82
  const docs = documentRepository.listByProject(project.id);
82
83
  const hasPrd = docs.some(d => d.docType === 'prd');
83
84
  const hasArchDocs = docs.some(d => d.docType === 'architecture');
85
+ const hasModel = docs.some(d => d.docType === 'app-model');
84
86
  const hasScaffold = items.some(i => i.title.toLowerCase().includes('scaffold') && i.status === 'completed') || project.metadata?.scaffolded === true;
85
87
  return {
86
88
  totalItems: items.length,
@@ -89,6 +91,7 @@ function getProjectStats(project) {
89
91
  hasPrd,
90
92
  hasArchDocs,
91
93
  hasScaffold,
94
+ hasModel,
92
95
  };
93
96
  }
94
97
  function buildActionsItems(project, stats) {
@@ -129,9 +132,9 @@ function buildActionsItems(project, stats) {
129
132
  }
130
133
  if (stats.totalItems > 0 && !stats.hasScaffold) {
131
134
  actions.push({
132
- label: 'Scaffold Project',
135
+ label: stats.hasModel ? 'Generate from Model' : 'Scaffold Project',
133
136
  command: '/scaffold',
134
- description: 'Create project foundation',
137
+ description: stats.hasModel ? 'Auto-generate from Application Model' : 'Create project foundation',
135
138
  enabled: true,
136
139
  });
137
140
  }
@@ -550,7 +553,8 @@ export class WorkflowOverlayV2 extends BaseOverlayV2 {
550
553
  const projectId = this.state.project?.id;
551
554
  switch (command) {
552
555
  case '/backlog':
553
- return new BacklogOverlayV2(projectId);
556
+ // Note: teamAgentIds not available here, owner cycling disabled
557
+ return new BacklogOverlayV2(projectId, []);
554
558
  case '/docs':
555
559
  return new DocsOverlayV2(projectId);
556
560
  case '/anchors':
@@ -615,6 +619,8 @@ export class WorkflowOverlayV2 extends BaseOverlayV2 {
615
619
  this.refreshProject();
616
620
  return this.rerender();
617
621
  case 'edit':
622
+ // Push the edit overlay
623
+ return this.push(new ProjectEditOverlayV2(this.state.project));
618
624
  case 'delete':
619
625
  return this.close({
620
626
  command: null,
@@ -6,7 +6,7 @@
6
6
  export type { Overlay, RenderContext, OverlayContent, OverlayAction, KeyEvent, OverlayResolver, OverlayRenderState, } from './types.js';
7
7
  export { isCloseWithResult, isCloseCancelled } from './types.js';
8
8
  export { parseKeyEvent, matchesKey } from './key-utils.js';
9
- export { HelpOverlayV2 } from './impl/help-overlay-v2.js';
9
+ export { HelpOverlayV2, type HelpOverlayV2Options } from './impl/help-overlay-v2.js';
10
10
  export { ThemeOverlayV2, type ThemeOverlayOptions, type ThemeOverlayResult } from './impl/theme-overlay-v2.js';
11
11
  export { ModelOverlayV2, type ModelOverlayV2Options, type ModelOverlayV2Result } from './impl/model-overlay-v2.js';
12
12
  export { ToolsOverlayV2, type ToolsOverlayV2Options, type ToolsOverlayV2Result, type ToolInfo, type ToolParameter, type ToolPermissionInfo } from './impl/tools-overlay-v2.js';
@@ -21,6 +21,7 @@ export { DocsOverlayV2, type DocsOverlayV2Result } from './impl/docs-overlay-v2.
21
21
  export { DocumentDetailOverlayV2, type DocumentDetailResult } from './impl/document-detail-overlay-v2.js';
22
22
  export { AnchorsOverlayV2, type AnchorsOverlayV2Result } from './impl/anchors-overlay-v2.js';
23
23
  export { ProjectsOverlayV2, type ProjectsOverlayV2Result } from './impl/projects-overlay-v2.js';
24
+ export { ProjectEditOverlayV2, type ProjectEditResult } from './impl/project-edit-overlay-v2.js';
24
25
  export { ConfigOverlayV2, type ConfigOverlayV2Options, type ConfigOverlayV2Result } from './impl/config-overlay-v2.js';
25
26
  export { AskUserSimpleOverlayV2, type AskUserSimpleOptionsV2, type AskUserSimpleResultV2 } from './impl/ask-user-simple-overlay-v2.js';
26
27
  export { GuardrailOverlayV2, type GuardrailConfirmOptionsV2, type GuardrailConfirmResultV2 } from './impl/guardrail-overlay-v2.js';
@@ -31,3 +32,21 @@ export { NewProjectOverlayV2, type NewProjectResultV2 } from './impl/new-overlay
31
32
  export { InitSetupOverlayV2, type InitSetupResultV2 } from './impl/init-setup-overlay-v2.js';
32
33
  export { ArchTypeOverlayV2, type ArchTypeChoiceV2, type ArchDocType } from './impl/arch-type-overlay-v2.js';
33
34
  export { DashboardOverlayV2, type DashboardOverlayV2Result } from './impl/dashboard-overlay-v2.js';
35
+ export { OnboardingWizardOverlayV2, type OnboardingWizardResult } from './impl/onboarding-wizard-overlay-v2.js';
36
+ export { ResumeOverlayV2, type ResumeOverlayV2Options, type ResumeOverlayV2Result, type SessionItem } from './impl/resume-overlay-v2.js';
37
+ export { PlanApprovalOverlayV2, type PlanApprovalOverlayOptions, type PlanApprovalResult, type PlanApprovalAction } from './impl/plan-approval-overlay-v2.js';
38
+ export { PermissionsOverlayV2, type PermissionsOverlayV2Options, type PermissionsOverlayV2Result } from './impl/permissions-overlay-v2.js';
39
+ export { ResetOverlayV2, type ResetOverlayV2Options, type ResetOverlayV2Result, type ResetOption } from './impl/reset-overlay-v2.js';
40
+ export { SessionModeOverlayV2, type SessionModeOverlayV2Options, type SessionModeOverlayV2Result, type SessionModeOption } from './impl/session-mode-overlay-v2.js';
41
+ export { TeamOverlayV2, type TeamOverlayV2Result } from './impl/team-overlay-v2.js';
42
+ export { CustomAgentFormOverlayV2, type CustomAgentFormOptions, type CustomAgentFormResult } from './impl/custom-agent-form-overlay-v2.js';
43
+ export { ArtifactOverlayV2, type ArtifactOverlayV2Result } from './impl/artifact-overlay-v2.js';
44
+ export { ArtifactDetailOverlayV2, type ArtifactDetailOverlayV2Result } from './impl/artifact-detail-overlay-v2.js';
45
+ export { GamesOverlayV2, type GamesOverlayV2Result, type GamesOverlayV2Options } from './impl/games-overlay-v2.js';
46
+ export { PendingOverlayV2, type PendingOverlayResult } from './impl/pending-overlay-v2.js';
47
+ export { BackgroundOverlayV2, type BackgroundOverlayResult, type BackgroundOverlayOptions } from './impl/background-overlay-v2.js';
48
+ export { FilterOverlayV2, type FilterOverlayV2Result, type FilterOverlayV2Config } from './impl/filter-overlay-v2.js';
49
+ export { ChangelogOverlayV2, type ChangelogOverlayV2Result } from './impl/changelog-overlay-v2.js';
50
+ export { NotificationsOverlayV2 } from './impl/notifications-overlay-v2.js';
51
+ export { MCPOverlayV2, type MCPOverlayV2Result } from './impl/mcp-overlay-v2.js';
52
+ export { DelegationsOverlayV2 } from './impl/delegations-overlay-v2.js';
@@ -23,6 +23,7 @@ export { DocsOverlayV2 } from './impl/docs-overlay-v2.js';
23
23
  export { DocumentDetailOverlayV2 } from './impl/document-detail-overlay-v2.js';
24
24
  export { AnchorsOverlayV2 } from './impl/anchors-overlay-v2.js';
25
25
  export { ProjectsOverlayV2 } from './impl/projects-overlay-v2.js';
26
+ export { ProjectEditOverlayV2 } from './impl/project-edit-overlay-v2.js';
26
27
  export { ConfigOverlayV2 } from './impl/config-overlay-v2.js';
27
28
  export { AskUserSimpleOverlayV2 } from './impl/ask-user-simple-overlay-v2.js';
28
29
  export { GuardrailOverlayV2 } from './impl/guardrail-overlay-v2.js';
@@ -33,3 +34,21 @@ export { NewProjectOverlayV2 } from './impl/new-overlay-v2.js';
33
34
  export { InitSetupOverlayV2 } from './impl/init-setup-overlay-v2.js';
34
35
  export { ArchTypeOverlayV2 } from './impl/arch-type-overlay-v2.js';
35
36
  export { DashboardOverlayV2 } from './impl/dashboard-overlay-v2.js';
37
+ export { OnboardingWizardOverlayV2 } from './impl/onboarding-wizard-overlay-v2.js';
38
+ export { ResumeOverlayV2 } from './impl/resume-overlay-v2.js';
39
+ export { PlanApprovalOverlayV2 } from './impl/plan-approval-overlay-v2.js';
40
+ export { PermissionsOverlayV2 } from './impl/permissions-overlay-v2.js';
41
+ export { ResetOverlayV2 } from './impl/reset-overlay-v2.js';
42
+ export { SessionModeOverlayV2 } from './impl/session-mode-overlay-v2.js';
43
+ export { TeamOverlayV2 } from './impl/team-overlay-v2.js';
44
+ export { CustomAgentFormOverlayV2 } from './impl/custom-agent-form-overlay-v2.js';
45
+ export { ArtifactOverlayV2 } from './impl/artifact-overlay-v2.js';
46
+ export { ArtifactDetailOverlayV2 } from './impl/artifact-detail-overlay-v2.js';
47
+ export { GamesOverlayV2 } from './impl/games-overlay-v2.js';
48
+ export { PendingOverlayV2 } from './impl/pending-overlay-v2.js';
49
+ export { BackgroundOverlayV2 } from './impl/background-overlay-v2.js';
50
+ export { FilterOverlayV2 } from './impl/filter-overlay-v2.js';
51
+ export { ChangelogOverlayV2 } from './impl/changelog-overlay-v2.js';
52
+ export { NotificationsOverlayV2 } from './impl/notifications-overlay-v2.js';
53
+ export { MCPOverlayV2 } from './impl/mcp-overlay-v2.js';
54
+ export { DelegationsOverlayV2 } from './impl/delegations-overlay-v2.js';
@@ -26,6 +26,11 @@ export interface Overlay<TState = unknown, TResult = unknown> {
26
26
  onMount?(): void | Promise<void>;
27
27
  /** Called when overlay is unmounted. Cleanup. */
28
28
  onUnmount?(): void;
29
+ /**
30
+ * Set callback for requesting re-render from async operations.
31
+ * Called by TerminalUI when mounting the overlay.
32
+ */
33
+ setRenderCallback?(callback: () => void): void;
29
34
  /** Get current state (for TerminalUI to access if needed) */
30
35
  getState(): TState;
31
36
  /**
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Overlay lifecycle manager.
3
+ *
4
+ * Extracted from TerminalUI — owns the overlay stack, resolvers,
5
+ * render state, and print buffer. Uses host interface for footer
6
+ * clear/render and console output.
7
+ */
8
+ import type { PrintableItem } from './terminal-types.js';
9
+ import type { Overlay } from './overlay/index.js';
10
+ export interface OverlayManagerHost {
11
+ clearFooter(): void;
12
+ renderFooter(): void;
13
+ print(item: PrintableItem): void;
14
+ renderItemToConsole(item: PrintableItem): void;
15
+ }
16
+ export declare class OverlayManager {
17
+ private readonly stack;
18
+ private readonly resolvers;
19
+ private renderState;
20
+ private printBuffer;
21
+ private readonly host;
22
+ constructor(host: OverlayManagerHost);
23
+ hasActiveOverlay(): boolean;
24
+ getActiveOverlay(): Overlay | null;
25
+ showOverlay<TResult>(overlay: Overlay<unknown, TResult>): Promise<TResult | null>;
26
+ closeCurrentOverlay(result: unknown, cancelled: boolean): void;
27
+ private enterFullscreenOverlayMode;
28
+ private enterInlineOverlayMode;
29
+ private exitOverlayMode;
30
+ bufferItem(item: PrintableItem): void;
31
+ private flushPrintBuffer;
32
+ requestOverlayRender(): void;
33
+ private clearOverlayRender;
34
+ private renderOverlay;
35
+ private renderFullscreenOverlay;
36
+ private renderInlineOverlay;
37
+ processOverlayAction(action: {
38
+ type: 'none' | 'render' | 'close' | 'push' | 'pop';
39
+ result?: unknown;
40
+ cancelled?: boolean;
41
+ overlay?: Overlay;
42
+ }): void;
43
+ }
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Overlay lifecycle manager.
3
+ *
4
+ * Extracted from TerminalUI — owns the overlay stack, resolvers,
5
+ * render state, and print buffer. Uses host interface for footer
6
+ * clear/render and console output.
7
+ */
8
+ import * as terminal from './terminal.js';
9
+ import { getVisibleLength } from './line-utils.js';
10
+ import { getStyles } from '../themes/index.js';
11
+ export class OverlayManager {
12
+ stack = [];
13
+ resolvers = new Map();
14
+ renderState = { lineCount: 0, maxLineCount: 0 };
15
+ printBuffer = [];
16
+ host;
17
+ constructor(host) {
18
+ this.host = host;
19
+ }
20
+ // ===========================================================================
21
+ // Queries
22
+ // ===========================================================================
23
+ hasActiveOverlay() {
24
+ return this.stack.length > 0;
25
+ }
26
+ getActiveOverlay() {
27
+ return this.stack.length > 0
28
+ ? this.stack[this.stack.length - 1]
29
+ : null;
30
+ }
31
+ // ===========================================================================
32
+ // Show / Close
33
+ // ===========================================================================
34
+ async showOverlay(overlay) {
35
+ const isPushingOntoExisting = this.stack.length > 0;
36
+ if (isPushingOntoExisting) {
37
+ this.clearOverlayRender();
38
+ }
39
+ this.stack.push(overlay);
40
+ overlay.setRenderCallback?.(() => { this.requestOverlayRender(); });
41
+ await overlay.onMount?.();
42
+ if (!overlay.usesAlternateScreen) {
43
+ if (overlay.type === 'fullscreen') {
44
+ this.enterFullscreenOverlayMode();
45
+ }
46
+ else {
47
+ this.enterInlineOverlayMode();
48
+ }
49
+ }
50
+ this.renderOverlay();
51
+ return new Promise((resolve) => {
52
+ this.resolvers.set(overlay.id, resolve);
53
+ });
54
+ }
55
+ closeCurrentOverlay(result, cancelled) {
56
+ const overlay = this.stack.pop();
57
+ if (!overlay)
58
+ return;
59
+ const usesAlternateScreen = overlay.usesAlternateScreen === true;
60
+ overlay.onUnmount?.();
61
+ const summary = (!cancelled && result !== null)
62
+ ? overlay.getCloseSummary?.(result)
63
+ : null;
64
+ if (this.stack.length === 0) {
65
+ if (usesAlternateScreen) {
66
+ this.renderState = { lineCount: 0, maxLineCount: 0 };
67
+ this.flushPrintBuffer();
68
+ }
69
+ else {
70
+ this.exitOverlayMode();
71
+ }
72
+ }
73
+ else {
74
+ if (!usesAlternateScreen) {
75
+ this.clearOverlayRender();
76
+ }
77
+ this.renderState = { lineCount: 0, maxLineCount: 0 };
78
+ this.renderOverlay();
79
+ }
80
+ if (summary) {
81
+ this.host.print({ type: 'info', message: summary });
82
+ }
83
+ const resolver = this.resolvers.get(overlay.id);
84
+ resolver?.(result);
85
+ this.resolvers.delete(overlay.id);
86
+ }
87
+ // ===========================================================================
88
+ // Overlay mode transitions
89
+ // ===========================================================================
90
+ enterFullscreenOverlayMode() {
91
+ this.host.clearFooter();
92
+ process.stdout.write('\x1b[2J\x1b[H');
93
+ this.renderState = { lineCount: 0, maxLineCount: 0 };
94
+ }
95
+ enterInlineOverlayMode() {
96
+ this.host.clearFooter();
97
+ this.renderState = { lineCount: 0, maxLineCount: 0 };
98
+ }
99
+ exitOverlayMode() {
100
+ this.clearOverlayRender();
101
+ this.renderState = { lineCount: 0, maxLineCount: 0 };
102
+ this.flushPrintBuffer();
103
+ this.host.renderFooter();
104
+ }
105
+ // ===========================================================================
106
+ // Print buffer (items queued while overlay is active)
107
+ // ===========================================================================
108
+ bufferItem(item) {
109
+ this.printBuffer.push(item);
110
+ }
111
+ flushPrintBuffer() {
112
+ if (this.printBuffer.length === 0)
113
+ return;
114
+ for (const item of this.printBuffer) {
115
+ this.host.renderItemToConsole(item);
116
+ }
117
+ this.printBuffer = [];
118
+ }
119
+ // ===========================================================================
120
+ // Render
121
+ // ===========================================================================
122
+ requestOverlayRender() {
123
+ if (this.getActiveOverlay()) {
124
+ this.renderOverlay();
125
+ }
126
+ }
127
+ clearOverlayRender() {
128
+ const linesToClear = this.renderState.maxLineCount;
129
+ if (linesToClear > 0) {
130
+ process.stdout.write(`\x1b[${String(linesToClear)}A`);
131
+ process.stdout.write('\r');
132
+ process.stdout.write('\x1b[J');
133
+ }
134
+ }
135
+ renderOverlay() {
136
+ const overlay = this.getActiveOverlay();
137
+ if (!overlay)
138
+ return;
139
+ const termWidth = terminal.getTerminalWidth();
140
+ const termHeight = terminal.getTerminalHeight();
141
+ const s = getStyles();
142
+ const context = {
143
+ width: termWidth,
144
+ height: termHeight,
145
+ styles: s,
146
+ };
147
+ const content = overlay.render(context);
148
+ if (overlay.type === 'fullscreen') {
149
+ this.renderFullscreenOverlay(content, termWidth);
150
+ }
151
+ else {
152
+ this.renderInlineOverlay(content, termWidth);
153
+ }
154
+ }
155
+ renderFullscreenOverlay(content, termWidth) {
156
+ this.clearOverlayRender();
157
+ let physicalLines = 0;
158
+ for (const line of content.lines) {
159
+ const visibleLen = getVisibleLength(line);
160
+ physicalLines += Math.max(1, Math.ceil(visibleLen / termWidth));
161
+ }
162
+ const contentMinHeight = content.minHeight ?? 0;
163
+ const naturalHeight = Math.max(physicalLines, contentMinHeight);
164
+ this.renderState.maxLineCount = Math.max(this.renderState.maxLineCount, naturalHeight);
165
+ const targetHeight = this.renderState.maxLineCount;
166
+ const paddedLines = [...content.lines];
167
+ while (physicalLines < targetHeight) {
168
+ paddedLines.push('');
169
+ physicalLines++;
170
+ }
171
+ this.renderState.lineCount = physicalLines;
172
+ for (let i = 0; i < paddedLines.length; i++) {
173
+ process.stdout.write(paddedLines[i]);
174
+ if (i < paddedLines.length - 1) {
175
+ process.stdout.write('\n');
176
+ }
177
+ }
178
+ if (content.cursorPosition) {
179
+ const { line, column } = content.cursorPosition;
180
+ const linesFromEnd = paddedLines.length - 1 - line;
181
+ if (linesFromEnd > 0) {
182
+ process.stdout.write(`\x1b[${String(linesFromEnd)}A`);
183
+ }
184
+ process.stdout.write(`\x1b[${String(column)}G`);
185
+ }
186
+ terminal.showCursor();
187
+ }
188
+ renderInlineOverlay(content, termWidth) {
189
+ this.clearOverlayRender();
190
+ let physicalLines = 0;
191
+ for (const line of content.lines) {
192
+ const visibleLen = getVisibleLength(line);
193
+ physicalLines += Math.max(1, Math.ceil(visibleLen / termWidth));
194
+ }
195
+ const contentMinHeight = content.minHeight ?? 0;
196
+ const naturalHeight = Math.max(physicalLines, contentMinHeight);
197
+ this.renderState.maxLineCount = Math.max(this.renderState.maxLineCount, naturalHeight);
198
+ const targetHeight = this.renderState.maxLineCount;
199
+ const paddedLines = [...content.lines];
200
+ while (physicalLines < targetHeight) {
201
+ paddedLines.push('');
202
+ physicalLines++;
203
+ }
204
+ this.renderState.lineCount = physicalLines;
205
+ for (const line of paddedLines) {
206
+ process.stdout.write(line + '\n');
207
+ }
208
+ terminal.showCursor();
209
+ }
210
+ // ===========================================================================
211
+ // Action processing
212
+ // ===========================================================================
213
+ processOverlayAction(action) {
214
+ switch (action.type) {
215
+ case 'none':
216
+ break;
217
+ case 'render':
218
+ this.renderOverlay();
219
+ break;
220
+ case 'close':
221
+ if (action.cancelled) {
222
+ this.closeCurrentOverlay(null, true);
223
+ }
224
+ else {
225
+ this.closeCurrentOverlay(action.result ?? null, false);
226
+ }
227
+ break;
228
+ case 'push':
229
+ if (action.overlay) {
230
+ void this.showOverlay(action.overlay);
231
+ }
232
+ break;
233
+ case 'pop':
234
+ this.closeCurrentOverlay(null, true);
235
+ break;
236
+ }
237
+ }
238
+ }
@@ -10,6 +10,7 @@
10
10
  import chalk from 'chalk';
11
11
  import * as terminal from './terminal.js';
12
12
  import { getStyles } from '../themes/index.js';
13
+ import { renderProgressBar, truncate } from './base/index.js';
13
14
  /**
14
15
  * Show a confirmation dialog
15
16
  */
@@ -59,7 +60,7 @@ export function showPermissionPrompt(tool, args) {
59
60
  terminal.writeLine('');
60
61
  terminal.writeLine(' Tool: ' + s.primary(tool));
61
62
  if (args) {
62
- terminal.writeLine(' Args: ' + s.muted(args.slice(0, 60) + (args.length > 60 ? '...' : '')));
63
+ terminal.writeLine(' Args: ' + s.muted(truncate(args, 60)));
63
64
  }
64
65
  terminal.writeLine('');
65
66
  terminal.write(s.muted(' [') +
@@ -119,8 +120,9 @@ export function showPermissionPrompt(tool, args) {
119
120
  * Show context window usage stats
120
121
  */
121
122
  export function showContextStats(stats) {
123
+ const s = getStyles();
122
124
  const pct = (stats.utilization * 100).toFixed(1);
123
- const bar = renderProgressBar(stats.utilization, 30);
125
+ const bar = renderProgressBar(stats.utilization, 30, s);
124
126
  terminal.writeLine('');
125
127
  terminal.writeLine(chalk.bold('Context Usage'));
126
128
  terminal.writeLine('');
@@ -130,20 +132,6 @@ export function showContextStats(stats) {
130
132
  terminal.writeLine(` Turns: ${String(stats.turns)}`);
131
133
  terminal.writeLine('');
132
134
  }
133
- /**
134
- * Render a progress bar
135
- */
136
- function renderProgressBar(value, width) {
137
- const s = getStyles();
138
- const filled = Math.round(value * width);
139
- const empty = width - filled;
140
- let color = s.success;
141
- if (value > 0.8)
142
- color = s.error;
143
- else if (value > 0.6)
144
- color = s.warning;
145
- return color('█'.repeat(filled)) + s.muted('░'.repeat(empty));
146
- }
147
135
  /**
148
136
  * Show session token usage
149
137
  */
@@ -7,6 +7,7 @@
7
7
  import chalk from 'chalk';
8
8
  import { getStyles } from '../themes/index.js';
9
9
  import { InlineOverlay } from './base/inline-overlay.js';
10
+ import { truncate } from './base/index.js';
10
11
  // =============================================================================
11
12
  // Helpers (unchanged from original)
12
13
  // =============================================================================
@@ -17,7 +18,7 @@ import { InlineOverlay } from './base/inline-overlay.js';
17
18
  function formatValue(value, maxLen) {
18
19
  if (typeof value === 'string') {
19
20
  const singleLine = value.replace(/\r?\n|\r/g, '↵');
20
- return singleLine.length > maxLen ? singleLine.slice(0, maxLen) + '...' : singleLine;
21
+ return truncate(singleLine, maxLen);
21
22
  }
22
23
  if (typeof value === 'boolean' || typeof value === 'number') {
23
24
  return String(value);
@@ -75,7 +76,7 @@ function formatArgs(toolName, args, maxWidth) {
75
76
  else {
76
77
  lines.push(prefix);
77
78
  const maxCmdLength = availableWidth * 3;
78
- const truncatedCmd = cmd.length > maxCmdLength ? cmd.slice(0, maxCmdLength) + '...' : cmd;
79
+ const truncatedCmd = truncate(cmd, maxCmdLength);
79
80
  lines.push(' ' + truncatedCmd);
80
81
  }
81
82
  return lines;
@@ -128,7 +129,7 @@ function formatArgs(toolName, args, maxWidth) {
128
129
  const valueStr = formatValue(value, maxWidth - key.length - 6);
129
130
  const line = `${key}: ${valueStr}`;
130
131
  if (line.length > maxWidth - 4) {
131
- lines.push(line.slice(0, maxWidth - 7) + '...');
132
+ lines.push(truncate(line, maxWidth - 4));
132
133
  }
133
134
  else {
134
135
  lines.push(line);
@@ -234,7 +235,7 @@ class PermissionOverlayImpl extends InlineOverlay {
234
235
  const maxArgWidth = cols - 6;
235
236
  const argLines = formatArgs(this.options.toolName, this.options.args, maxArgWidth);
236
237
  for (const argLine of argLines) {
237
- const safeArg = argLine.length > maxArgWidth ? argLine.slice(0, maxArgWidth - 3) + '...' : argLine;
238
+ const safeArg = truncate(argLine, maxArgWidth);
238
239
  lines.push(' ' + s.muted(safeArg));
239
240
  }
240
241
  lines.push('');
@@ -274,7 +275,7 @@ class PermissionOverlayImpl extends InlineOverlay {
274
275
  const endLine = Math.min(this.state.detailScrollOffset + visibleLines, contentLines.length);
275
276
  for (let i = this.state.detailScrollOffset; i < endLine; i++) {
276
277
  const line = contentLines[i];
277
- const safeLine = line.length > cols - 4 ? line.slice(0, cols - 7) + '...' : line;
278
+ const safeLine = truncate(line, cols - 4);
278
279
  lines.push(' ' + safeLine);
279
280
  }
280
281
  // Pad to fixed height
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Status bar navigation controller.
3
+ *
4
+ * Extracted from TerminalUI — manages the navigable status bar indicators
5
+ * (pending requests, background agents, terminals, notifications).
6
+ */
7
+ import type { KeypressKey } from './terminal-types.js';
8
+ export interface StatusBarItem {
9
+ id: 'pending' | 'bg-agents' | 'terminals' | 'notifications' | 'mcp';
10
+ action: string;
11
+ }
12
+ export interface StatusBarHost {
13
+ requestRender(): void;
14
+ emit(event: string, ...args: unknown[]): void;
15
+ }
16
+ export declare class StatusBarController {
17
+ navActive: boolean;
18
+ selectedIndex: number;
19
+ backgroundAgentCount: number;
20
+ mcpLoading: boolean;
21
+ mcpToolCount: number;
22
+ private readonly host;
23
+ constructor(host: StatusBarHost);
24
+ /** Set background agent count (called by REPL to keep UI in sync). */
25
+ setBackgroundAgentCount(count: number): void;
26
+ /** Set MCP loading state (shown while MCP servers connect in background). */
27
+ setMCPLoading(loading: boolean, toolCount?: number): void;
28
+ /** Returns navigable status bar indicators based on current state. */
29
+ getItems(): StatusBarItem[];
30
+ /** Handle keys while in status bar navigation mode. */
31
+ handleKey(_str: string, key: KeypressKey): void;
32
+ exitNav(): void;
33
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Status bar navigation controller.
3
+ *
4
+ * Extracted from TerminalUI — manages the navigable status bar indicators
5
+ * (pending requests, background agents, terminals, notifications).
6
+ */
7
+ import { getPendingRequestsManager } from '../multi-agent/index.js';
8
+ import { getSessionRegistry } from '../multi-agent/session-registry.js';
9
+ import { getNotificationManager } from '../multi-agent/notification-manager.js';
10
+ export class StatusBarController {
11
+ navActive = false;
12
+ selectedIndex = 0;
13
+ backgroundAgentCount = 0;
14
+ mcpLoading = false;
15
+ mcpToolCount = 0;
16
+ host;
17
+ constructor(host) {
18
+ this.host = host;
19
+ }
20
+ /** Set background agent count (called by REPL to keep UI in sync). */
21
+ setBackgroundAgentCount(count) {
22
+ this.backgroundAgentCount = count;
23
+ this.host.requestRender();
24
+ }
25
+ /** Set MCP loading state (shown while MCP servers connect in background). */
26
+ setMCPLoading(loading, toolCount) {
27
+ this.mcpLoading = loading;
28
+ if (toolCount !== undefined)
29
+ this.mcpToolCount = toolCount;
30
+ this.host.requestRender();
31
+ }
32
+ /** Returns navigable status bar indicators based on current state. */
33
+ getItems() {
34
+ const items = [];
35
+ const notifManager = getNotificationManager();
36
+ if (notifManager && notifManager.getUnreadCount() > 0) {
37
+ items.push({ id: 'notifications', action: 'notifications' });
38
+ }
39
+ if (getPendingRequestsManager().getCount() > 0) {
40
+ items.push({ id: 'pending', action: 'pending' });
41
+ }
42
+ if (this.backgroundAgentCount > 0) {
43
+ items.push({ id: 'bg-agents', action: 'bg' });
44
+ }
45
+ const registry = getSessionRegistry();
46
+ if (registry && registry.getProjectScopedSessionCount() > 1) {
47
+ items.push({ id: 'terminals', action: 'terminals' });
48
+ }
49
+ if (this.mcpLoading) {
50
+ items.push({ id: 'mcp', action: 'mcp' });
51
+ }
52
+ return items;
53
+ }
54
+ /** Handle keys while in status bar navigation mode. */
55
+ handleKey(_str, key) {
56
+ const items = this.getItems();
57
+ if (items.length === 0) {
58
+ this.exitNav();
59
+ return;
60
+ }
61
+ if (key.name === 'right' || key.name === 'down') {
62
+ if (this.selectedIndex < items.length - 1) {
63
+ this.selectedIndex++;
64
+ this.host.requestRender();
65
+ }
66
+ }
67
+ else if (key.name === 'left') {
68
+ if (this.selectedIndex > 0) {
69
+ this.selectedIndex--;
70
+ this.host.requestRender();
71
+ }
72
+ }
73
+ else if (key.name === 'up') {
74
+ if (this.selectedIndex > 0) {
75
+ this.selectedIndex--;
76
+ this.host.requestRender();
77
+ }
78
+ else {
79
+ this.exitNav();
80
+ }
81
+ }
82
+ else if (key.name === 'return') {
83
+ const item = items[this.selectedIndex];
84
+ this.exitNav();
85
+ this.host.emit('command', item.action, '');
86
+ }
87
+ else if (key.name === 'escape') {
88
+ this.exitNav();
89
+ }
90
+ else {
91
+ this.exitNav();
92
+ }
93
+ }
94
+ exitNav() {
95
+ this.navActive = false;
96
+ this.selectedIndex = 0;
97
+ this.host.requestRender();
98
+ }
99
+ }