@compilr-dev/cli 0.4.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 (634) hide show
  1. package/README.md +254 -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 +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  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/index.d.ts +2 -1
  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.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Keys Overlay V2
3
+ *
4
+ * API key management overlay using the new Overlay interface.
5
+ * Shows status of all providers and allows setting/deleting keys.
6
+ *
7
+ * Features:
8
+ * - List all providers with key status
9
+ * - Set new API keys
10
+ * - Delete stored keys
11
+ * - Works with TerminalUI's overlay management
12
+ */
13
+ import * as terminal from '../../terminal.js';
14
+ import { BaseOverlayV2, BaseScreen, ScreenStack, stay, pushScreen, popScreen, closeOverlay, isEscape, isEnter, isCtrlC, isClose, isNavigateUp, isNavigateDown, isD, renderBorder, } from '../../base/index.js';
15
+ import { InputFeature } from '../../features/index.js';
16
+ import { getAllProviderStatuses, setApiKey, deleteApiKey, } from '../../../utils/credentials.js';
17
+ // =============================================================================
18
+ // Screens
19
+ // =============================================================================
20
+ /**
21
+ * List screen - shows all providers with their key status
22
+ */
23
+ class ListScreen extends BaseScreen {
24
+ state;
25
+ getStyles;
26
+ getWidth;
27
+ constructor(state, getStyles, getWidth) {
28
+ super();
29
+ this.state = state;
30
+ this.getStyles = getStyles;
31
+ this.getWidth = getWidth;
32
+ }
33
+ render() {
34
+ const s = this.getStyles();
35
+ const cols = this.getWidth();
36
+ const border = renderBorder(cols, s);
37
+ const lines = [];
38
+ // Header
39
+ lines.push(border);
40
+ lines.push(` ${s.primaryBold('API Keys')}`);
41
+ lines.push('');
42
+ // Provider list
43
+ for (let i = 0; i < this.state.providers.length; i++) {
44
+ const p = this.state.providers[i];
45
+ const isCursor = this.state.selectedIndex === i;
46
+ const prefix = isCursor ? s.primary(' > ') : ' ';
47
+ // Status indicator
48
+ let status;
49
+ if (p.provider === 'ollama') {
50
+ status = s.secondary('Local (no key needed)');
51
+ }
52
+ else if (p.hasKey) {
53
+ const source = p.fromEnv ? s.muted(' (env)') : '';
54
+ status = s.success(`● ${p.masked ?? '***'}`) + source;
55
+ }
56
+ else {
57
+ status = s.warning('○ Not set');
58
+ }
59
+ // Provider name
60
+ const name = isCursor ? s.primary(p.name.padEnd(18)) : s.muted(p.name.padEnd(18));
61
+ lines.push(`${prefix}${name} ${status}`);
62
+ }
63
+ // Footer
64
+ lines.push('');
65
+ lines.push(border);
66
+ lines.push(` ${s.muted('up/down/jk Navigate . Enter Edit . d Delete . q/Esc Close')}`);
67
+ lines.push(border);
68
+ return lines;
69
+ }
70
+ handleKey(data) {
71
+ // Close keys
72
+ if (isCtrlC(data) || isClose(data)) {
73
+ return closeOverlay({ changed: this.state.changed });
74
+ }
75
+ // Navigation up
76
+ if (isNavigateUp(data)) {
77
+ if (this.state.selectedIndex > 0) {
78
+ this.state.selectedIndex--;
79
+ return stay();
80
+ }
81
+ return stay(false);
82
+ }
83
+ // Navigation down
84
+ if (isNavigateDown(data)) {
85
+ if (this.state.selectedIndex < this.state.providers.length - 1) {
86
+ this.state.selectedIndex++;
87
+ return stay();
88
+ }
89
+ return stay(false);
90
+ }
91
+ // Enter - edit selected provider
92
+ if (isEnter(data)) {
93
+ const selected = this.state.providers[this.state.selectedIndex];
94
+ if (selected.provider !== 'ollama') {
95
+ return pushScreen(new InputScreen(this.state, this.getStyles, this.getWidth, selected.provider));
96
+ }
97
+ return stay(false);
98
+ }
99
+ // Delete key
100
+ if (isD(data)) {
101
+ const selected = this.state.providers[this.state.selectedIndex];
102
+ if (selected.provider !== 'ollama' && selected.hasKey && !selected.fromEnv) {
103
+ deleteApiKey(selected.provider);
104
+ this.state.providers = getAllProviderStatuses();
105
+ this.state.changed = true;
106
+ return stay();
107
+ }
108
+ return stay(false);
109
+ }
110
+ return stay(false);
111
+ }
112
+ }
113
+ /**
114
+ * Input screen - text input for entering API key
115
+ */
116
+ class InputScreen extends BaseScreen {
117
+ state;
118
+ getStyles;
119
+ getWidth;
120
+ provider;
121
+ input;
122
+ constructor(state, getStyles, getWidth, provider) {
123
+ super();
124
+ this.state = state;
125
+ this.getStyles = getStyles;
126
+ this.getWidth = getWidth;
127
+ this.provider = provider;
128
+ this.input = new InputFeature({ placeholder: 'Paste or type your API key...' });
129
+ }
130
+ onEnter() {
131
+ terminal.showCursor();
132
+ }
133
+ onExit() {
134
+ terminal.hideCursor();
135
+ }
136
+ render() {
137
+ const s = this.getStyles();
138
+ const cols = this.getWidth();
139
+ const border = renderBorder(cols, s);
140
+ const lines = [];
141
+ const providerInfo = this.state.providers.find(p => p.provider === this.provider);
142
+ // Header
143
+ lines.push(border);
144
+ lines.push(` ${s.primaryBold('API Keys')}`);
145
+ lines.push('');
146
+ // Input prompt
147
+ lines.push(` Set API key for ${s.primary(providerInfo?.name ?? this.provider)}:`);
148
+ lines.push('');
149
+ lines.push(' ' + this.input.render(s));
150
+ lines.push('');
151
+ // Help text
152
+ if (providerInfo?.keyUrl) {
153
+ lines.push(s.muted(` Get key: ${providerInfo.keyUrl}`));
154
+ lines.push('');
155
+ }
156
+ // Footer
157
+ lines.push(border);
158
+ lines.push(` ${s.muted('Enter Save . Esc Cancel')}`);
159
+ lines.push(border);
160
+ return lines;
161
+ }
162
+ handleKey(data) {
163
+ // Ctrl+C closes overlay
164
+ if (isCtrlC(data)) {
165
+ return closeOverlay({ changed: this.state.changed });
166
+ }
167
+ // Escape goes back to list
168
+ if (isEscape(data)) {
169
+ return popScreen();
170
+ }
171
+ // Enter saves the key
172
+ if (isEnter(data)) {
173
+ const value = this.input.trimmedValue;
174
+ if (value) {
175
+ setApiKey(this.provider, value);
176
+ this.state.providers = getAllProviderStatuses();
177
+ this.state.changed = true;
178
+ }
179
+ return popScreen();
180
+ }
181
+ // Let InputFeature handle the key
182
+ const result = this.input.handleKey(data);
183
+ if (result.handled) {
184
+ return stay(result.render);
185
+ }
186
+ return stay(false);
187
+ }
188
+ getMinHeight() {
189
+ return 12;
190
+ }
191
+ }
192
+ // =============================================================================
193
+ // Keys Overlay V2 Class
194
+ // =============================================================================
195
+ /**
196
+ * Keys overlay using the new Overlay interface.
197
+ * Manages API keys for LLM providers.
198
+ */
199
+ export class KeysOverlayV2 extends BaseOverlayV2 {
200
+ type = 'inline';
201
+ id = 'keys-overlay-v2';
202
+ screenStack;
203
+ constructor() {
204
+ const providers = getAllProviderStatuses();
205
+ const initialState = {
206
+ selectedIndex: 0,
207
+ changed: false,
208
+ providers,
209
+ };
210
+ super(initialState);
211
+ this.minHeight = 14;
212
+ this.screenStack = new ScreenStack();
213
+ this.screenStack.push(new ListScreen(this.state, () => this.getStyles(), () => this.termWidth));
214
+ }
215
+ renderContent(_context) {
216
+ const screen = this.screenStack.current();
217
+ return screen?.render() ?? [];
218
+ }
219
+ render(context) {
220
+ this.styles = context.styles;
221
+ this.termWidth = context.width;
222
+ const lines = this.renderContent(context);
223
+ const screen = this.screenStack.current();
224
+ const screenMinHeight = screen?.getMinHeight?.() ?? 0;
225
+ const effectiveMinHeight = Math.max(this.minHeight, screenMinHeight);
226
+ return effectiveMinHeight > 0 ? { lines, minHeight: effectiveMinHeight } : { lines };
227
+ }
228
+ handleKey(key) {
229
+ const data = key.raw;
230
+ const screen = this.screenStack.current();
231
+ if (!screen) {
232
+ return this.close({ changed: this.state.changed });
233
+ }
234
+ const result = screen.handleKey(data);
235
+ switch (result.action) {
236
+ case 'stay':
237
+ return result.render ? this.rerender() : this.noAction();
238
+ case 'push':
239
+ this.screenStack.push(result.screen);
240
+ return this.rerender();
241
+ case 'pop':
242
+ this.screenStack.pop();
243
+ return this.rerender();
244
+ case 'close':
245
+ return this.close(result.result);
246
+ }
247
+ }
248
+ }
@@ -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,41 @@
1
+ /**
2
+ * Mascot Overlay V2
3
+ *
4
+ * Mascot selection overlay using the new Overlay interface.
5
+ * Shows all mascot expressions with live preview.
6
+ *
7
+ * Features:
8
+ * - All mascot expressions
9
+ * - Live preview
10
+ * - Persists selection to settings
11
+ * - Works with TerminalUI's overlay management
12
+ */
13
+ import { BaseOverlayV2 } from '../../base/index.js';
14
+ import { type MascotSetting } from '../../mascot/index.js';
15
+ import type { RenderContext, OverlayAction, KeyEvent } from '../index.js';
16
+ export interface MascotOverlayV2Options {
17
+ /** Current mascot setting (for highlighting current selection) */
18
+ currentMascot?: MascotSetting;
19
+ }
20
+ export interface MascotOverlayV2Result {
21
+ /** Selected mascot (if changed) */
22
+ mascotChanged?: MascotSetting;
23
+ }
24
+ interface MascotState {
25
+ /** Selected mascot index */
26
+ selectedIndex: number;
27
+ /** Current mascot for checkmark display */
28
+ currentMascot: MascotSetting;
29
+ }
30
+ /**
31
+ * Mascot overlay using the new Overlay interface.
32
+ * Displays mascot options with live preview.
33
+ */
34
+ export declare class MascotOverlayV2 extends BaseOverlayV2<MascotState, MascotOverlayV2Result> {
35
+ readonly type: "inline";
36
+ readonly id = "mascot-overlay-v2";
37
+ constructor(options?: MascotOverlayV2Options);
38
+ protected renderContent(context: RenderContext): string[];
39
+ handleKey(key: KeyEvent): OverlayAction<MascotOverlayV2Result>;
40
+ }
41
+ export {};