@compilr-dev/cli 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +236 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +61 -4
  7. package/dist/agent.js +241 -245
  8. package/dist/anchors/index.d.ts +1 -1
  9. package/dist/anchors/index.js +1 -1
  10. package/dist/anchors/project-anchors.d.ts +2 -2
  11. package/dist/anchors/project-anchors.js +1 -1
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  23. package/dist/commands-v2/handlers/auth.js +118 -0
  24. package/dist/commands-v2/handlers/background.d.ts +14 -0
  25. package/dist/commands-v2/handlers/background.js +276 -0
  26. package/dist/commands-v2/handlers/context.js +266 -81
  27. package/dist/commands-v2/handlers/core.d.ts +1 -0
  28. package/dist/commands-v2/handlers/core.js +133 -8
  29. package/dist/commands-v2/handlers/debug.js +18 -0
  30. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  31. package/dist/commands-v2/handlers/delegations.js +29 -0
  32. package/dist/commands-v2/handlers/files.d.ts +8 -0
  33. package/dist/commands-v2/handlers/files.js +162 -0
  34. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  35. package/dist/commands-v2/handlers/filter.js +130 -0
  36. package/dist/commands-v2/handlers/games.d.ts +7 -0
  37. package/dist/commands-v2/handlers/games.js +57 -0
  38. package/dist/commands-v2/handlers/index.d.ts +13 -0
  39. package/dist/commands-v2/handlers/index.js +39 -0
  40. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  41. package/dist/commands-v2/handlers/mcp.js +39 -0
  42. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  43. package/dist/commands-v2/handlers/notifications.js +34 -0
  44. package/dist/commands-v2/handlers/project.js +244 -23
  45. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  46. package/dist/commands-v2/handlers/reset.js +118 -0
  47. package/dist/commands-v2/handlers/session.d.ts +161 -0
  48. package/dist/commands-v2/handlers/session.js +805 -0
  49. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  50. package/dist/commands-v2/handlers/settings.js +217 -35
  51. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  52. package/dist/commands-v2/handlers/tasks.js +36 -0
  53. package/dist/commands-v2/handlers/team.d.ts +9 -0
  54. package/dist/commands-v2/handlers/team.js +549 -0
  55. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  56. package/dist/commands-v2/handlers/terminals.js +34 -0
  57. package/dist/commands-v2/index.d.ts +3 -2
  58. package/dist/commands-v2/index.js +4 -1
  59. package/dist/commands-v2/registry.d.ts +15 -0
  60. package/dist/commands-v2/registry.js +34 -0
  61. package/dist/commands-v2/types.d.ts +81 -3
  62. package/dist/commands.js +13 -0
  63. package/dist/compilr-diff-companion.vsix +0 -0
  64. package/dist/db/index.js +98 -4
  65. package/dist/db/repositories/document-repository.d.ts +2 -0
  66. package/dist/db/repositories/document-repository.js +5 -1
  67. package/dist/db/repositories/index.d.ts +2 -0
  68. package/dist/db/repositories/index.js +1 -0
  69. package/dist/db/repositories/plan-repository.d.ts +101 -0
  70. package/dist/db/repositories/plan-repository.js +275 -0
  71. package/dist/db/repositories/project-repository.d.ts +6 -0
  72. package/dist/db/repositories/project-repository.js +41 -0
  73. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  74. package/dist/db/repositories/work-item-repository.js +69 -4
  75. package/dist/db/schema.d.ts +40 -3
  76. package/dist/db/schema.js +66 -3
  77. package/dist/episodes/index.d.ts +20 -0
  78. package/dist/episodes/index.js +27 -0
  79. package/dist/episodes/recorder.d.ts +51 -0
  80. package/dist/episodes/recorder.js +195 -0
  81. package/dist/episodes/significant-work.d.ts +21 -0
  82. package/dist/episodes/significant-work.js +56 -0
  83. package/dist/episodes/store.d.ts +38 -0
  84. package/dist/episodes/store.js +199 -0
  85. package/dist/episodes/types.d.ts +35 -0
  86. package/dist/episodes/types.js +6 -0
  87. package/dist/episodes/work-at-risk.d.ts +12 -0
  88. package/dist/episodes/work-at-risk.js +38 -0
  89. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  90. package/dist/episodes/work-summary-anchor.js +73 -0
  91. package/dist/games/coins.d.ts +66 -0
  92. package/dist/games/coins.js +165 -0
  93. package/dist/games/game-base.d.ts +84 -0
  94. package/dist/games/game-base.js +204 -0
  95. package/dist/games/index.d.ts +16 -0
  96. package/dist/games/index.js +49 -0
  97. package/dist/games/scores.d.ts +69 -0
  98. package/dist/games/scores.js +191 -0
  99. package/dist/games/tetris/board.d.ts +59 -0
  100. package/dist/games/tetris/board.js +170 -0
  101. package/dist/games/tetris/index.d.ts +109 -0
  102. package/dist/games/tetris/index.js +610 -0
  103. package/dist/games/tetris/pieces.d.ts +44 -0
  104. package/dist/games/tetris/pieces.js +271 -0
  105. package/dist/games/tetris/renderer.d.ts +26 -0
  106. package/dist/games/tetris/renderer.js +77 -0
  107. package/dist/guide/guide-content.d.ts +23 -0
  108. package/dist/guide/guide-content.js +196 -0
  109. package/dist/guide/index.d.ts +8 -0
  110. package/dist/guide/index.js +7 -0
  111. package/dist/guide/shared-content.d.ts +37 -0
  112. package/dist/guide/shared-content.js +1272 -0
  113. package/dist/guide/tutorial-helpers.d.ts +57 -0
  114. package/dist/guide/tutorial-helpers.js +147 -0
  115. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  116. package/dist/handlers/ask-user-handlers.js +104 -0
  117. package/dist/handlers/delegation-handlers.d.ts +34 -0
  118. package/dist/handlers/delegation-handlers.js +291 -0
  119. package/dist/handlers/permission-handler.d.ts +30 -0
  120. package/dist/handlers/permission-handler.js +205 -0
  121. package/dist/index.d.ts +11 -1
  122. package/dist/index.js +448 -271
  123. package/dist/input-handlers/memory-handler.d.ts +1 -1
  124. package/dist/input-handlers/memory-handler.js +2 -1
  125. package/dist/models/index.d.ts +10 -0
  126. package/dist/models/index.js +12 -0
  127. package/dist/models/model-registry.d.ts +38 -0
  128. package/dist/models/model-registry.js +69 -0
  129. package/dist/models/model-tiers.d.ts +28 -0
  130. package/dist/models/model-tiers.js +71 -0
  131. package/dist/models/model-validation.d.ts +25 -0
  132. package/dist/models/model-validation.js +291 -0
  133. package/dist/models/ollama-models.d.ts +73 -0
  134. package/dist/models/ollama-models.js +178 -0
  135. package/dist/models/provider-types.d.ts +6 -0
  136. package/dist/models/provider-types.js +1 -0
  137. package/dist/models/providers.d.ts +35 -0
  138. package/dist/models/providers.js +58 -0
  139. package/dist/models/types.d.ts +4 -0
  140. package/dist/models/types.js +4 -0
  141. package/dist/multi-agent/activity.d.ts +21 -0
  142. package/dist/multi-agent/activity.js +34 -0
  143. package/dist/multi-agent/agent-selection.d.ts +55 -0
  144. package/dist/multi-agent/agent-selection.js +90 -0
  145. package/dist/multi-agent/artifacts.d.ts +197 -0
  146. package/dist/multi-agent/artifacts.js +379 -0
  147. package/dist/multi-agent/checkpointer.d.ts +138 -0
  148. package/dist/multi-agent/checkpointer.js +471 -0
  149. package/dist/multi-agent/collision-utils.d.ts +16 -0
  150. package/dist/multi-agent/collision-utils.js +28 -0
  151. package/dist/multi-agent/context-resolver.d.ts +97 -0
  152. package/dist/multi-agent/context-resolver.js +316 -0
  153. package/dist/multi-agent/custom-agents.d.ts +83 -0
  154. package/dist/multi-agent/custom-agents.js +227 -0
  155. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  156. package/dist/multi-agent/delegation-tracker.js +243 -0
  157. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  158. package/dist/multi-agent/file-lock-hook.js +97 -0
  159. package/dist/multi-agent/file-locks.d.ts +58 -0
  160. package/dist/multi-agent/file-locks.js +194 -0
  161. package/dist/multi-agent/index.d.ts +24 -0
  162. package/dist/multi-agent/index.js +30 -0
  163. package/dist/multi-agent/mention-parser.d.ts +64 -0
  164. package/dist/multi-agent/mention-parser.js +146 -0
  165. package/dist/multi-agent/notification-manager.d.ts +84 -0
  166. package/dist/multi-agent/notification-manager.js +224 -0
  167. package/dist/multi-agent/pending-requests.d.ts +122 -0
  168. package/dist/multi-agent/pending-requests.js +155 -0
  169. package/dist/multi-agent/session-registry.d.ts +139 -0
  170. package/dist/multi-agent/session-registry.js +514 -0
  171. package/dist/multi-agent/shared-context.d.ts +293 -0
  172. package/dist/multi-agent/shared-context.js +671 -0
  173. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  174. package/dist/multi-agent/skill-requirements.js +178 -0
  175. package/dist/multi-agent/task-assignment.d.ts +69 -0
  176. package/dist/multi-agent/task-assignment.js +123 -0
  177. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  178. package/dist/multi-agent/task-suggestion.js +72 -0
  179. package/dist/multi-agent/team-agent.d.ts +201 -0
  180. package/dist/multi-agent/team-agent.js +488 -0
  181. package/dist/multi-agent/team.d.ts +286 -0
  182. package/dist/multi-agent/team.js +610 -0
  183. package/dist/multi-agent/tool-config.d.ts +110 -0
  184. package/dist/multi-agent/tool-config.js +661 -0
  185. package/dist/multi-agent/types.d.ts +211 -0
  186. package/dist/multi-agent/types.js +617 -0
  187. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  188. package/dist/prompts/plan-mode-prompt.js +95 -0
  189. package/dist/repl-helpers.js +3 -2
  190. package/dist/repl-v2.d.ts +401 -2
  191. package/dist/repl-v2.js +2577 -65
  192. package/dist/session/index.d.ts +6 -0
  193. package/dist/session/index.js +6 -0
  194. package/dist/session/project-session-manager.d.ts +158 -0
  195. package/dist/session/project-session-manager.js +650 -0
  196. package/dist/settings/index.d.ts +133 -13
  197. package/dist/settings/index.js +329 -24
  198. package/dist/settings/mcp-config.d.ts +76 -0
  199. package/dist/settings/mcp-config.js +143 -0
  200. package/dist/settings/paths.d.ts +4 -0
  201. package/dist/settings/paths.js +6 -0
  202. package/dist/shared-handlers.d.ts +62 -0
  203. package/dist/shared-handlers.js +48 -0
  204. package/dist/system-prompt/builder.d.ts +5 -0
  205. package/dist/system-prompt/builder.js +4 -0
  206. package/dist/system-prompt/index.d.ts +18 -0
  207. package/dist/system-prompt/index.js +18 -0
  208. package/dist/system-prompt/modules.d.ts +5 -0
  209. package/dist/system-prompt/modules.js +4 -0
  210. package/dist/tabbed-menu.js +2 -1
  211. package/dist/templates/compilr-md-import.d.ts +16 -0
  212. package/dist/templates/compilr-md-import.js +241 -0
  213. package/dist/templates/compilr-md.js +10 -61
  214. package/dist/templates/config-json.d.ts +1 -25
  215. package/dist/templates/index.d.ts +2 -0
  216. package/dist/templates/index.js +34 -73
  217. package/dist/tool-names.d.ts +108 -0
  218. package/dist/tool-names.js +227 -0
  219. package/dist/tools/anchor-tools.d.ts +4 -4
  220. package/dist/tools/anchor-tools.js +1 -1
  221. package/dist/tools/artifact-tools.d.ts +42 -0
  222. package/dist/tools/artifact-tools.js +328 -0
  223. package/dist/tools/ask-user-simple.d.ts +1 -1
  224. package/dist/tools/ask-user-simple.js +2 -1
  225. package/dist/tools/ask-user.d.ts +1 -1
  226. package/dist/tools/ask-user.js +2 -1
  227. package/dist/tools/backlog-wrappers.d.ts +5 -3
  228. package/dist/tools/backlog-wrappers.js +16 -1
  229. package/dist/tools/backlog.d.ts +2 -2
  230. package/dist/tools/backlog.js +1 -1
  231. package/dist/tools/db-tools.d.ts +8 -61
  232. package/dist/tools/db-tools.js +8 -13
  233. package/dist/tools/delegate-background.d.ts +27 -0
  234. package/dist/tools/delegate-background.js +115 -0
  235. package/dist/tools/delegate.d.ts +22 -0
  236. package/dist/tools/delegate.js +97 -0
  237. package/dist/tools/delegation-status.d.ts +16 -0
  238. package/dist/tools/delegation-status.js +128 -0
  239. package/dist/tools/document-db.d.ts +5 -5
  240. package/dist/tools/document-db.js +1 -1
  241. package/dist/tools/guide-tool.d.ts +12 -0
  242. package/dist/tools/guide-tool.js +59 -0
  243. package/dist/tools/handoff.d.ts +25 -0
  244. package/dist/tools/handoff.js +99 -0
  245. package/dist/tools/meta-tools.d.ts +26 -0
  246. package/dist/tools/meta-tools.js +47 -0
  247. package/dist/tools/plan-tools.d.ts +54 -0
  248. package/dist/tools/plan-tools.js +338 -0
  249. package/dist/tools/platform-adapter.d.ts +29 -0
  250. package/dist/tools/platform-adapter.js +394 -0
  251. package/dist/tools/project-db.d.ts +5 -73
  252. package/dist/tools/project-db.js +5 -336
  253. package/dist/tools/recall-work-tool.d.ts +18 -0
  254. package/dist/tools/recall-work-tool.js +82 -0
  255. package/dist/tools/workitem-db.d.ts +43 -11
  256. package/dist/tools/workitem-db.js +186 -5
  257. package/dist/tools.d.ts +67 -2
  258. package/dist/tools.js +237 -47
  259. package/dist/ui/autocomplete-controller.d.ts +42 -0
  260. package/dist/ui/autocomplete-controller.js +384 -0
  261. package/dist/ui/base/index.d.ts +1 -1
  262. package/dist/ui/base/index.js +1 -1
  263. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  264. package/dist/ui/base/overlay-base-v2.js +14 -0
  265. package/dist/ui/base/render-utils.d.ts +19 -0
  266. package/dist/ui/base/render-utils.js +25 -0
  267. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  268. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  269. package/dist/ui/constants/labels.d.ts +14 -0
  270. package/dist/ui/constants/labels.js +51 -0
  271. package/dist/ui/conversation-store.d.ts +55 -0
  272. package/dist/ui/conversation-store.js +107 -0
  273. package/dist/ui/conversation.js +11 -13
  274. package/dist/ui/diff.d.ts +7 -1
  275. package/dist/ui/diff.js +85 -48
  276. package/dist/ui/ephemeral.js +3 -9
  277. package/dist/ui/file-autocomplete.d.ts +24 -0
  278. package/dist/ui/file-autocomplete.js +56 -0
  279. package/dist/ui/footer-renderer.d.ts +69 -0
  280. package/dist/ui/footer-renderer.js +431 -0
  281. package/dist/ui/footer.d.ts +74 -7
  282. package/dist/ui/footer.js +173 -16
  283. package/dist/ui/input-controller.d.ts +51 -0
  284. package/dist/ui/input-controller.js +176 -0
  285. package/dist/ui/input-prompt.d.ts +19 -0
  286. package/dist/ui/input-prompt.js +206 -14
  287. package/dist/ui/keyboard-handler.d.ts +57 -0
  288. package/dist/ui/keyboard-handler.js +557 -0
  289. package/dist/ui/live-region-facade.d.ts +42 -0
  290. package/dist/ui/live-region-facade.js +205 -0
  291. package/dist/ui/live-region.d.ts +0 -4
  292. package/dist/ui/live-region.js +6 -14
  293. package/dist/ui/mascot/renderer.d.ts +1 -1
  294. package/dist/ui/mascot/renderer.js +37 -2
  295. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  296. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  297. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  298. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  299. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  300. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  301. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  302. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  303. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  304. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  305. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  306. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  307. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  308. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  309. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  310. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  311. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  312. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  313. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  314. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  315. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  316. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  317. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  318. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  319. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  320. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  321. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  322. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  323. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  324. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  325. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  326. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  327. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  328. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  329. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  330. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  331. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  332. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  333. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  334. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  335. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  336. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  337. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  338. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  339. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  340. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  341. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  342. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  343. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  344. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  345. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  346. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  347. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  348. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  349. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  350. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  351. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  352. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  353. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  354. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  355. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  356. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  357. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  358. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  359. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  360. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  361. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  362. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  363. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  364. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  365. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  366. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  367. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  368. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  369. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  370. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  371. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  372. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  373. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  374. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  375. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  376. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  377. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  378. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  379. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  380. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  381. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  382. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  383. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  384. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  385. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  386. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  387. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  388. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  389. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  390. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  391. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  392. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  393. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  394. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  395. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  396. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  397. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  398. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  399. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  400. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  401. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  402. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  403. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  404. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  405. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  406. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  407. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  408. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  409. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  410. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  411. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  412. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  413. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  414. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  415. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  416. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  417. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  418. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  419. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  420. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  421. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  422. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  423. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  424. package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
  425. package/dist/ui/overlay/index.d.ts +20 -1
  426. package/dist/ui/overlay/index.js +19 -0
  427. package/dist/ui/overlay/types.d.ts +5 -0
  428. package/dist/ui/overlay-manager.d.ts +43 -0
  429. package/dist/ui/overlay-manager.js +238 -0
  430. package/dist/ui/overlays.js +4 -16
  431. package/dist/ui/permission-overlay.js +6 -5
  432. package/dist/ui/status-bar-controller.d.ts +33 -0
  433. package/dist/ui/status-bar-controller.js +99 -0
  434. package/dist/ui/subagent-renderer.js +3 -19
  435. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  436. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  437. package/dist/ui/terminal-line-builders.d.ts +17 -0
  438. package/dist/ui/terminal-line-builders.js +42 -0
  439. package/dist/ui/terminal-render-item.d.ts +16 -0
  440. package/dist/ui/terminal-render-item.js +267 -0
  441. package/dist/ui/terminal-renderer.d.ts +7 -8
  442. package/dist/ui/terminal-renderer.js +7 -8
  443. package/dist/ui/terminal-types.d.ts +179 -0
  444. package/dist/ui/terminal-types.js +34 -0
  445. package/dist/ui/terminal-ui.d.ts +144 -276
  446. package/dist/ui/terminal-ui.js +384 -1861
  447. package/dist/ui/todo-zone.d.ts +19 -1
  448. package/dist/ui/todo-zone.js +71 -13
  449. package/dist/ui/tool-formatters.js +512 -1
  450. package/dist/ui/turn-metrics.d.ts +56 -0
  451. package/dist/ui/turn-metrics.js +75 -0
  452. package/dist/ui/types.d.ts +28 -0
  453. package/dist/ui/types.js +1 -0
  454. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  455. package/dist/ui/vscode-diff-ipc.js +385 -0
  456. package/dist/utils/credentials.d.ts +24 -5
  457. package/dist/utils/credentials.js +123 -9
  458. package/dist/utils/format-tokens.d.ts +13 -0
  459. package/dist/utils/format-tokens.js +18 -0
  460. package/dist/utils/git-config.d.ts +26 -0
  461. package/dist/utils/git-config.js +54 -0
  462. package/dist/utils/message-utils.d.ts +61 -0
  463. package/dist/utils/message-utils.js +72 -0
  464. package/dist/utils/model-tiers.d.ts +8 -1
  465. package/dist/utils/model-tiers.js +38 -16
  466. package/dist/utils/open-browser.d.ts +5 -0
  467. package/dist/utils/open-browser.js +32 -0
  468. package/dist/utils/path-safety.js +3 -2
  469. package/dist/utils/project-detection.d.ts +58 -0
  470. package/dist/utils/project-detection.js +424 -0
  471. package/dist/utils/project-memory.js +2 -1
  472. package/dist/utils/project-status.d.ts +2 -2
  473. package/dist/utils/startup-perf.d.ts +18 -0
  474. package/dist/utils/startup-perf.js +60 -0
  475. package/dist/utils/token-tracker.d.ts +62 -0
  476. package/dist/utils/token-tracker.js +150 -0
  477. package/dist/utils/token-types.d.ts +23 -0
  478. package/dist/utils/token-types.js +18 -0
  479. package/dist/utils/types/config-types.d.ts +32 -0
  480. package/dist/utils/types/config-types.js +8 -0
  481. package/dist/utils/update-checker.d.ts +28 -0
  482. package/dist/utils/update-checker.js +106 -0
  483. package/dist/utils/version.d.ts +7 -0
  484. package/dist/utils/version.js +10 -0
  485. package/dist/utils/vscode-detect.d.ts +39 -0
  486. package/dist/utils/vscode-detect.js +137 -0
  487. package/package.json +25 -12
  488. package/dist/commands/handler-types.d.ts +0 -68
  489. package/dist/commands/handler-types.js +0 -8
  490. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  491. package/dist/commands/handlers/agent-commands.js +0 -305
  492. package/dist/commands/handlers/design-commands.d.ts +0 -15
  493. package/dist/commands/handlers/design-commands.js +0 -334
  494. package/dist/commands/handlers/index.d.ts +0 -20
  495. package/dist/commands/handlers/index.js +0 -43
  496. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  497. package/dist/commands/handlers/overlay-commands.js +0 -287
  498. package/dist/commands/handlers/project-commands.d.ts +0 -11
  499. package/dist/commands/handlers/project-commands.js +0 -167
  500. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  501. package/dist/commands/handlers/simple-commands.js +0 -144
  502. package/dist/commands/registry.d.ts +0 -50
  503. package/dist/commands/registry.js +0 -75
  504. package/dist/index.old.d.ts +0 -7
  505. package/dist/index.old.js +0 -1014
  506. package/dist/repl.d.ts +0 -149
  507. package/dist/repl.js +0 -1151
  508. package/dist/templates/claude-md.d.ts +0 -7
  509. package/dist/templates/claude-md.js +0 -189
  510. package/dist/test-autocomplete.d.ts +0 -7
  511. package/dist/test-autocomplete.js +0 -85
  512. package/dist/test-tabbed-menu.d.ts +0 -7
  513. package/dist/test-tabbed-menu.js +0 -25
  514. package/dist/tool-selector.d.ts +0 -71
  515. package/dist/tool-selector.js +0 -184
  516. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  517. package/dist/ui/agents-overlay-v2.js +0 -809
  518. package/dist/ui/agents-overlay.d.ts +0 -12
  519. package/dist/ui/agents-overlay.js +0 -863
  520. package/dist/ui/anchors-overlay.d.ts +0 -12
  521. package/dist/ui/anchors-overlay.js +0 -775
  522. package/dist/ui/arch-type-overlay.d.ts +0 -15
  523. package/dist/ui/arch-type-overlay.js +0 -201
  524. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  525. package/dist/ui/ask-user-overlay-v2.js +0 -555
  526. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  527. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  528. package/dist/ui/backlog-overlay.d.ts +0 -32
  529. package/dist/ui/backlog-overlay.js +0 -652
  530. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  531. package/dist/ui/commands-overlay-v2.js +0 -441
  532. package/dist/ui/commands-overlay.d.ts +0 -16
  533. package/dist/ui/commands-overlay.js +0 -439
  534. package/dist/ui/config-overlay.d.ts +0 -35
  535. package/dist/ui/config-overlay.js +0 -707
  536. package/dist/ui/docs-overlay.d.ts +0 -17
  537. package/dist/ui/docs-overlay.js +0 -303
  538. package/dist/ui/footer-v2.d.ts +0 -222
  539. package/dist/ui/footer-v2.js +0 -1349
  540. package/dist/ui/help-overlay-v2.d.ts +0 -34
  541. package/dist/ui/help-overlay-v2.js +0 -309
  542. package/dist/ui/help-overlay.d.ts +0 -16
  543. package/dist/ui/help-overlay.js +0 -316
  544. package/dist/ui/init-overlay-v2.d.ts +0 -34
  545. package/dist/ui/init-overlay-v2.js +0 -600
  546. package/dist/ui/init-overlay.d.ts +0 -34
  547. package/dist/ui/init-overlay.js +0 -604
  548. package/dist/ui/input-prompt-v2.d.ts +0 -180
  549. package/dist/ui/input-prompt-v2.js +0 -999
  550. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  551. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  552. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  553. package/dist/ui/keys-overlay-v2.js +0 -248
  554. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  555. package/dist/ui/mascot-overlay-v2.js +0 -138
  556. package/dist/ui/mascot-overlay.d.ts +0 -21
  557. package/dist/ui/mascot-overlay.js +0 -146
  558. package/dist/ui/model-overlay-v2.d.ts +0 -49
  559. package/dist/ui/model-overlay-v2.js +0 -118
  560. package/dist/ui/model-overlay.d.ts +0 -27
  561. package/dist/ui/model-overlay.js +0 -221
  562. package/dist/ui/model-warning-overlay.d.ts +0 -30
  563. package/dist/ui/model-warning-overlay.js +0 -169
  564. package/dist/ui/new-overlay.d.ts +0 -34
  565. package/dist/ui/new-overlay.js +0 -604
  566. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  567. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  568. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  569. package/dist/ui/overlay/overlay-types.js +0 -22
  570. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  571. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  572. package/dist/ui/overlays/index.d.ts +0 -11
  573. package/dist/ui/overlays/index.js +0 -11
  574. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  575. package/dist/ui/permission-overlay-v2.js +0 -380
  576. package/dist/ui/projects-overlay.d.ts +0 -19
  577. package/dist/ui/projects-overlay.js +0 -484
  578. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  579. package/dist/ui/theme-overlay-v2.js +0 -135
  580. package/dist/ui/theme-overlay.d.ts +0 -24
  581. package/dist/ui/theme-overlay.js +0 -127
  582. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  583. package/dist/ui/tools-overlay-v2.js +0 -218
  584. package/dist/ui/tools-overlay.d.ts +0 -34
  585. package/dist/ui/tools-overlay.js +0 -230
  586. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  587. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  588. package/dist/ui/tutorial-overlay.d.ts +0 -11
  589. package/dist/ui/tutorial-overlay.js +0 -1034
  590. package/dist/ui/workflow-overlay.d.ts +0 -22
  591. package/dist/ui/workflow-overlay.js +0 -636
@@ -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 {};