@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
@@ -12,9 +12,8 @@
12
12
  */
13
13
  import chalk from 'chalk';
14
14
  import * as terminal from '../../terminal.js';
15
- import { getHelpCommands, getCommandByIndex } from '../../../commands.js';
16
15
  import { getCustomCommandRegistry } from '../../../commands/index.js';
17
- import { TabbedListOverlayV2, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isClose, renderBorder, wrapText, } from '../../base/index.js';
16
+ import { TabbedListOverlayV2, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isClose, renderBorder, wrapText, truncateAnsi, } from '../../base/index.js';
18
17
  // =============================================================================
19
18
  // Constants
20
19
  // =============================================================================
@@ -34,18 +33,20 @@ const TABS = [
34
33
  class CommandDetailScreen extends BaseScreen {
35
34
  item;
36
35
  styles;
37
- constructor(item, styles) {
36
+ getCommand;
37
+ constructor(item, styles, getCommand) {
38
38
  super();
39
39
  this.item = item;
40
40
  this.styles = styles;
41
+ this.getCommand = getCommand;
41
42
  }
42
43
  render() {
43
44
  const s = this.styles;
44
45
  const cols = terminal.getTerminalWidth();
45
46
  const maxLineWidth = cols - 2;
46
47
  const border = renderBorder(cols, s);
47
- const cmd = this.item.commandIndex !== undefined
48
- ? getCommandByIndex(this.item.commandIndex)
48
+ const cmd = this.item.commandName
49
+ ? this.getCommand(this.item.commandName)
49
50
  : null;
50
51
  const lines = [];
51
52
  lines.push(border);
@@ -58,36 +59,12 @@ class CommandDetailScreen extends BaseScreen {
58
59
  lines.push(border);
59
60
  return lines;
60
61
  }
61
- // Helper to truncate
62
- const truncate = (line, max = maxLineWidth) => {
63
- // eslint-disable-next-line no-control-regex
64
- const stripped = line.replace(/\x1b\[[0-9;]*m/g, '');
65
- if (stripped.length <= max)
66
- return line;
67
- let visibleLen = 0;
68
- let cutIndex = 0;
69
- for (let i = 0; i < line.length; i++) {
70
- if (line[i] === '\x1b') {
71
- const end = line.indexOf('m', i);
72
- if (end !== -1) {
73
- i = end;
74
- continue;
75
- }
76
- }
77
- visibleLen++;
78
- if (visibleLen >= max - 3) {
79
- cutIndex = i + 1;
80
- break;
81
- }
82
- }
83
- return line.slice(0, cutIndex) + '...';
84
- };
85
62
  // Command name
86
63
  lines.push(chalk.bold(` /${cmd.name}`));
87
64
  lines.push('');
88
65
  // Description
89
66
  lines.push(' ' + s.primary('DESCRIPTION'));
90
- lines.push(truncate(' ' + cmd.description));
67
+ lines.push(truncateAnsi(' ' + cmd.description, maxLineWidth));
91
68
  lines.push('');
92
69
  // Details
93
70
  if (cmd.details) {
@@ -97,7 +74,7 @@ class CommandDetailScreen extends BaseScreen {
97
74
  let currentLine = ' ';
98
75
  for (const word of words) {
99
76
  if (currentLine.length + word.length + 1 > maxWidth) {
100
- lines.push(truncate(currentLine));
77
+ lines.push(truncateAnsi(currentLine, maxLineWidth));
101
78
  currentLine = ' ' + word;
102
79
  }
103
80
  else {
@@ -105,14 +82,14 @@ class CommandDetailScreen extends BaseScreen {
105
82
  }
106
83
  }
107
84
  if (currentLine.length > 3) {
108
- lines.push(truncate(currentLine));
85
+ lines.push(truncateAnsi(currentLine, maxLineWidth));
109
86
  }
110
87
  lines.push('');
111
88
  }
112
89
  // Aliases
113
90
  if (cmd.aliases && cmd.aliases.length > 0) {
114
91
  lines.push(' ' + s.primary('ALIASES'));
115
- lines.push(truncate(' ' + cmd.aliases.map((a) => `/${a}`).join(', ')));
92
+ lines.push(truncateAnsi(' ' + cmd.aliases.map((a) => `/${a}`).join(', '), maxLineWidth));
116
93
  lines.push('');
117
94
  }
118
95
  // Examples
@@ -122,10 +99,10 @@ class CommandDetailScreen extends BaseScreen {
122
99
  if (example.description) {
123
100
  const paddedCode = example.code.padEnd(22);
124
101
  const exLine = ` ${s.muted(paddedCode)}${s.muted('·')} ${example.description}`;
125
- lines.push(truncate(exLine));
102
+ lines.push(truncateAnsi(exLine, maxLineWidth));
126
103
  }
127
104
  else {
128
- lines.push(truncate(' ' + s.muted(example.code)));
105
+ lines.push(truncateAnsi(' ' + s.muted(example.code), maxLineWidth));
129
106
  }
130
107
  }
131
108
  lines.push('');
@@ -134,7 +111,7 @@ class CommandDetailScreen extends BaseScreen {
134
111
  if (cmd.interactions && cmd.interactions.length > 0) {
135
112
  lines.push(' ' + s.primary('INTERACTIONS'));
136
113
  for (const hint of cmd.interactions) {
137
- lines.push(truncate(' ' + s.muted('• ' + hint)));
114
+ lines.push(truncateAnsi(' ' + s.muted('• ' + hint), maxLineWidth));
138
115
  }
139
116
  lines.push('');
140
117
  }
@@ -239,18 +216,18 @@ class CustomCommandDetailScreen extends BaseScreen {
239
216
  export class HelpOverlayV2 extends TabbedListOverlayV2 {
240
217
  type = 'inline';
241
218
  id = 'help-overlay-v2';
242
- constructor() {
219
+ getCommandDetail;
220
+ constructor(options) {
243
221
  // Build unified items list
244
222
  const items = [];
245
223
  // Add built-in commands
246
- const helpCommands = getHelpCommands();
247
- for (let i = 0; i < helpCommands.length; i++) {
248
- const cmd = helpCommands[i];
224
+ const helpCommands = options.getHelpCommands();
225
+ for (const cmd of helpCommands) {
249
226
  items.push({
250
227
  name: cmd.name,
251
228
  description: cmd.description,
252
229
  type: 'builtin',
253
- commandIndex: i,
230
+ commandName: cmd.name.startsWith('/') ? cmd.name.slice(1) : cmd.name,
254
231
  });
255
232
  }
256
233
  // Add custom commands
@@ -298,11 +275,12 @@ export class HelpOverlayV2 extends TabbedListOverlayV2 {
298
275
  emptyMessage: 'No commands available.',
299
276
  noResultsMessage: 'No commands match the search.',
300
277
  });
278
+ this.getCommandDetail = options.getCommand;
301
279
  }
302
280
  createDetailScreen(item) {
303
281
  const styles = this.getStyles();
304
282
  if (item.type === 'builtin') {
305
- return new CommandDetailScreen(item, styles);
283
+ return new CommandDetailScreen(item, styles, this.getCommandDetail);
306
284
  }
307
285
  return new CustomCommandDetailScreen(item, styles);
308
286
  }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Login Overlay V2
3
+ *
4
+ * Branded login overlay that handles the device flow within the TerminalUI overlay system.
5
+ * Replaces the raw console.log login flow in index.ts with a proper overlay experience.
6
+ *
7
+ * Screens:
8
+ * 1. Welcome - Logo/mascot, "Press Enter to log in"
9
+ * 2. Waiting - Device code + URL, auto-polls for authorization
10
+ * 3. Success - "Logged in as user@email.com", auto-closes after 1.5s
11
+ */
12
+ import { BaseOverlayV2 } from '../../base/index.js';
13
+ import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
14
+ type LoginScreen = 'welcome' | 'waiting' | 'success' | 'error';
15
+ interface LoginState {
16
+ screen: LoginScreen;
17
+ userCode: string | null;
18
+ authUrl: string | null;
19
+ email: string | null;
20
+ errorMessage: string | null;
21
+ statusMessage: string;
22
+ version: string;
23
+ }
24
+ export interface LoginOverlayResult {
25
+ success: boolean;
26
+ email?: string;
27
+ }
28
+ export declare class LoginOverlayV2 extends BaseOverlayV2<LoginState, LoginOverlayResult> {
29
+ readonly type: "inline";
30
+ readonly id = "login-overlay-v2";
31
+ private abortController;
32
+ private loginPromise;
33
+ constructor(version?: string);
34
+ onMount(): void;
35
+ onUnmount(): void;
36
+ protected renderContent(context: RenderContext): string[];
37
+ private renderWelcomeScreen;
38
+ private renderWaitingScreen;
39
+ private renderSuccessScreen;
40
+ private renderErrorScreen;
41
+ handleKey(key: KeyEvent): OverlayAction<LoginOverlayResult>;
42
+ private handleWelcomeKey;
43
+ private handleWaitingKey;
44
+ private handleSuccessKey;
45
+ private handleErrorKey;
46
+ private startDeviceFlow;
47
+ getCloseSummary(_result: LoginOverlayResult): string | null;
48
+ }
49
+ export {};
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Login Overlay V2
3
+ *
4
+ * Branded login overlay that handles the device flow within the TerminalUI overlay system.
5
+ * Replaces the raw console.log login flow in index.ts with a proper overlay experience.
6
+ *
7
+ * Screens:
8
+ * 1. Welcome - Logo/mascot, "Press Enter to log in"
9
+ * 2. Waiting - Device code + URL, auto-polls for authorization
10
+ * 3. Success - "Logged in as user@email.com", auto-closes after 1.5s
11
+ */
12
+ import { BaseOverlayV2, renderBorder } from '../../base/index.js';
13
+ import { renderMascotWithLogo } from '../../mascot/renderer.js';
14
+ import { getAuthManager } from '../../../auth/index.js';
15
+ import { getAuthorizationUrl } from '../../../auth/api-client.js';
16
+ import { openBrowser } from '../../../utils/open-browser.js';
17
+ import { getSettings } from '../../../settings/index.js';
18
+ import * as terminal from '../../terminal.js';
19
+ // =============================================================================
20
+ // Login Overlay V2
21
+ // =============================================================================
22
+ export class LoginOverlayV2 extends BaseOverlayV2 {
23
+ type = 'inline';
24
+ id = 'login-overlay-v2';
25
+ abortController;
26
+ loginPromise = null;
27
+ constructor(version) {
28
+ super({
29
+ screen: 'welcome',
30
+ userCode: null,
31
+ authUrl: null,
32
+ email: null,
33
+ errorMessage: null,
34
+ statusMessage: '',
35
+ version: version ?? '0.5.0',
36
+ });
37
+ this.abortController = new AbortController();
38
+ this.minHeight = 18;
39
+ }
40
+ // ===========================================================================
41
+ // Lifecycle
42
+ // ===========================================================================
43
+ onMount() {
44
+ // Clear any pre-login console output (agent debug lines, COMPILR.md loading, etc.)
45
+ terminal.clearScreen();
46
+ }
47
+ onUnmount() {
48
+ this.abortController.abort();
49
+ }
50
+ // ===========================================================================
51
+ // Rendering
52
+ // ===========================================================================
53
+ renderContent(context) {
54
+ const s = context.styles;
55
+ const cols = terminal.getTerminalWidth();
56
+ const border = renderBorder(cols, s);
57
+ const lines = [];
58
+ switch (this.state.screen) {
59
+ case 'welcome':
60
+ lines.push(...this.renderWelcomeScreen(s, border));
61
+ break;
62
+ case 'waiting':
63
+ lines.push(...this.renderWaitingScreen(s, border));
64
+ break;
65
+ case 'success':
66
+ lines.push(...this.renderSuccessScreen(s, border));
67
+ break;
68
+ case 'error':
69
+ lines.push(...this.renderErrorScreen(s, border));
70
+ break;
71
+ }
72
+ return lines;
73
+ }
74
+ renderWelcomeScreen(s, border) {
75
+ const lines = [];
76
+ const settings = getSettings();
77
+ // Logo with mascot
78
+ const logoLines = renderMascotWithLogo(settings.mascot, this.state.version, null);
79
+ for (const line of logoLines) {
80
+ lines.push(line);
81
+ }
82
+ lines.push('');
83
+ lines.push(border);
84
+ lines.push('');
85
+ lines.push(` ${s.primaryBold('Welcome to compilr')}`);
86
+ lines.push('');
87
+ lines.push(` ${s.foreground('Please log in to continue.')}`);
88
+ lines.push(` ${s.muted('No account? Sign up at:')} ${s.primary('https://compilr.dev/signup')}`);
89
+ lines.push('');
90
+ lines.push(border);
91
+ lines.push(s.muted(' Press Enter to open browser | Esc to exit'));
92
+ return lines;
93
+ }
94
+ renderWaitingScreen(s, border) {
95
+ const lines = [];
96
+ lines.push(border);
97
+ lines.push(` ${s.primaryBold('Log in to compilr')}`);
98
+ lines.push(border);
99
+ lines.push('');
100
+ lines.push(` ${s.foreground('Open this URL in your browser:')}`);
101
+ lines.push('');
102
+ if (this.state.authUrl) {
103
+ lines.push(` ${s.primary(this.state.authUrl)}`);
104
+ }
105
+ lines.push('');
106
+ if (this.state.userCode) {
107
+ lines.push(` ${s.foreground('Your code:')} ${s.primaryBold(this.state.userCode)}`);
108
+ }
109
+ lines.push('');
110
+ lines.push(` ${s.muted(this.state.statusMessage || 'Waiting for authorization...')}`);
111
+ lines.push('');
112
+ lines.push(border);
113
+ lines.push(s.muted(' Esc to cancel'));
114
+ return lines;
115
+ }
116
+ renderSuccessScreen(s, border) {
117
+ const lines = [];
118
+ lines.push(border);
119
+ lines.push(` ${s.primaryBold('Log in to compilr')}`);
120
+ lines.push(border);
121
+ lines.push('');
122
+ lines.push(` ${s.success('Logged in as')} ${s.primaryBold(this.state.email ?? '')}`);
123
+ lines.push('');
124
+ lines.push(border);
125
+ lines.push(s.muted(' Press Enter to continue'));
126
+ return lines;
127
+ }
128
+ renderErrorScreen(s, border) {
129
+ const lines = [];
130
+ lines.push(border);
131
+ lines.push(` ${s.primaryBold('Log in to compilr')}`);
132
+ lines.push(border);
133
+ lines.push('');
134
+ lines.push(` ${s.error(this.state.errorMessage ?? 'Login failed')}`);
135
+ lines.push('');
136
+ lines.push(border);
137
+ lines.push(s.muted(' Enter to retry | Esc to exit'));
138
+ return lines;
139
+ }
140
+ // ===========================================================================
141
+ // Key Handling
142
+ // ===========================================================================
143
+ handleKey(key) {
144
+ // Ctrl+C always cancels
145
+ if (this.isInterruptKey(key)) {
146
+ this.abortController.abort();
147
+ return this.close({ success: false });
148
+ }
149
+ switch (this.state.screen) {
150
+ case 'welcome':
151
+ return this.handleWelcomeKey(key);
152
+ case 'waiting':
153
+ return this.handleWaitingKey(key);
154
+ case 'success':
155
+ return this.handleSuccessKey(key);
156
+ case 'error':
157
+ return this.handleErrorKey(key);
158
+ default:
159
+ return this.noAction();
160
+ }
161
+ }
162
+ handleWelcomeKey(key) {
163
+ if (key.name === 'escape') {
164
+ return this.close({ success: false });
165
+ }
166
+ if (this.isEnterKey(key)) {
167
+ // Start the device flow
168
+ void this.startDeviceFlow();
169
+ return this.rerender();
170
+ }
171
+ return this.noAction();
172
+ }
173
+ handleWaitingKey(key) {
174
+ if (key.name === 'escape') {
175
+ this.abortController.abort();
176
+ return this.close({ success: false });
177
+ }
178
+ return this.noAction();
179
+ }
180
+ handleSuccessKey(key) {
181
+ if (this.isEnterKey(key) || key.name === 'escape') {
182
+ return this.close({ success: true, email: this.state.email ?? undefined });
183
+ }
184
+ return this.noAction();
185
+ }
186
+ handleErrorKey(key) {
187
+ if (key.name === 'escape') {
188
+ return this.close({ success: false });
189
+ }
190
+ if (this.isEnterKey(key)) {
191
+ // Retry - reset and start fresh
192
+ this.abortController = new AbortController();
193
+ this.state.screen = 'welcome';
194
+ this.state.errorMessage = null;
195
+ return this.rerender();
196
+ }
197
+ return this.noAction();
198
+ }
199
+ // ===========================================================================
200
+ // Device Flow
201
+ // ===========================================================================
202
+ async startDeviceFlow() {
203
+ this.state.screen = 'waiting';
204
+ this.state.statusMessage = 'Starting login...';
205
+ this.requestRender();
206
+ const auth = getAuthManager();
207
+ this.loginPromise = auth.loginWithDeviceFlow({
208
+ onCodeReady: (userCode, _verificationUrl) => {
209
+ // Use client-side URL (respects COMPILR_WEB_URL env var)
210
+ const url = getAuthorizationUrl(userCode);
211
+ this.state.userCode = userCode;
212
+ this.state.authUrl = url;
213
+ this.state.statusMessage = 'Waiting for authorization...';
214
+ this.requestRender();
215
+ },
216
+ onStatusUpdate: (status) => {
217
+ switch (status) {
218
+ case 'polling':
219
+ // Silent - overlay already shows "Waiting..."
220
+ break;
221
+ case 'authorized':
222
+ this.state.statusMessage = 'Authorization received!';
223
+ this.requestRender();
224
+ break;
225
+ case 'expired':
226
+ this.state.statusMessage = 'Authorization expired.';
227
+ this.requestRender();
228
+ break;
229
+ case 'denied':
230
+ this.state.statusMessage = 'Authorization denied.';
231
+ this.requestRender();
232
+ break;
233
+ }
234
+ },
235
+ onOpenBrowser: async (url) => {
236
+ const opened = await openBrowser(url);
237
+ if (opened) {
238
+ this.state.statusMessage = 'Browser opened. Waiting for authorization...';
239
+ }
240
+ else {
241
+ this.state.statusMessage = 'Please open the URL above in your browser.';
242
+ }
243
+ this.requestRender();
244
+ return opened;
245
+ },
246
+ }, this.abortController.signal);
247
+ try {
248
+ const result = await this.loginPromise;
249
+ if (result.success && result.user) {
250
+ this.state.screen = 'success';
251
+ this.state.email = result.user.email;
252
+ this.requestRender();
253
+ }
254
+ else {
255
+ this.state.screen = 'error';
256
+ this.state.errorMessage = result.error ?? 'Login failed';
257
+ this.requestRender();
258
+ }
259
+ }
260
+ catch {
261
+ // Aborted or network error
262
+ if (!this.abortController.signal.aborted) {
263
+ this.state.screen = 'error';
264
+ this.state.errorMessage = 'Login failed. Please try again.';
265
+ this.requestRender();
266
+ }
267
+ }
268
+ }
269
+ // ===========================================================================
270
+ // Close Summary
271
+ // ===========================================================================
272
+ getCloseSummary(_result) {
273
+ // No summary — the overlay already shows success/error on screen,
274
+ // and printing here causes a flash before the next overlay opens.
275
+ return null;
276
+ }
277
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * MCP Overlay V2
3
+ *
4
+ * Shows connected MCP servers and their tools.
5
+ * Extends TabbedListOverlayV2 for consistent UI.
6
+ *
7
+ * Features:
8
+ * - Single tab (all servers)
9
+ * - Server list with status and tool count
10
+ * - Detail view with tool list
11
+ * - Restart/disconnect actions
12
+ * - Add server form (with hot-reload)
13
+ * - Empty state with config file instructions
14
+ */
15
+ import { TabbedListOverlayV2, BaseScreen } from '../../base/index.js';
16
+ import type { OverlayAction, KeyEvent, RenderContext } from '../types.js';
17
+ import type { MCPManager, MCPClient, MCPToolDefinition, Agent } from '@compilr-dev/sdk';
18
+ export interface MCPOverlayV2Result {
19
+ viewed: boolean;
20
+ }
21
+ interface MCPServerItem {
22
+ tabId: string;
23
+ name: string;
24
+ status: string;
25
+ transport: string;
26
+ transportDetail: string;
27
+ toolCount: number;
28
+ tools: MCPToolDefinition[];
29
+ client: MCPClient;
30
+ }
31
+ export declare class MCPOverlayV2 extends TabbedListOverlayV2<MCPServerItem, MCPOverlayV2Result> {
32
+ readonly type: "inline";
33
+ readonly id = "mcp-overlay-v2";
34
+ private readonly manager;
35
+ private readonly agent;
36
+ private readonly getManager;
37
+ private readonly projectRoot?;
38
+ private initialized;
39
+ private listMessage;
40
+ constructor(manager: MCPManager | null, agent: Agent | null, getManager: () => Promise<MCPManager>, projectRoot?: string);
41
+ /**
42
+ * Load server data on first render.
43
+ */
44
+ private loadItems;
45
+ /**
46
+ * Override render to load items on first call and handle empty state.
47
+ */
48
+ render(context: RenderContext): {
49
+ lines: string[];
50
+ minHeight?: number;
51
+ };
52
+ /**
53
+ * Render helpful empty state with config file instructions.
54
+ */
55
+ private renderEmptyState;
56
+ /**
57
+ * Handle custom keys (a/r/d) on the list screen.
58
+ * Only intercepts when the screen stack is at the root list screen.
59
+ */
60
+ handleKey(key: KeyEvent): OverlayAction<MCPOverlayV2Result>;
61
+ protected createDetailScreen(item: MCPServerItem): BaseScreen | null;
62
+ }
63
+ export {};