@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
@@ -0,0 +1,728 @@
1
+ /**
2
+ * Onboarding Wizard Overlay V2
3
+ *
4
+ * First-run wizard that guides new users through initial CLI setup.
5
+ * Shown automatically on first launch, or manually via /init command.
6
+ *
7
+ * Steps (when running in VS Code):
8
+ * 1. Welcome - Introduction to the CLI
9
+ * 2. Telemetry - Opt-in/opt-out for anonymous usage data
10
+ * 3. VS Code Diff - Enable side-by-side diff view (VS Code only)
11
+ * 4. API Key Check - Configure LLM API keys (opens /keys overlay)
12
+ * 5. Git Config - Configure git user.name and user.email
13
+ * 6. Projects Path - Set default projects folder location
14
+ * 7. COMPILR.md Intro - Explain project memory files
15
+ * 8. Quick Tour - Overview of key commands
16
+ * 9. Complete - Finish setup
17
+ *
18
+ * When NOT in VS Code, step 3 is skipped (8 steps total).
19
+ *
20
+ * This is an interactive wizard where users can actually configure settings,
21
+ * not just view status screens.
22
+ */
23
+ import { BaseOverlayV2, renderBorder } from '../../base/index.js';
24
+ import { hasApiKey } from '../../../utils/credentials.js';
25
+ import { checkGitConfig, setGitConfigValue } from '../../../utils/git-config.js';
26
+ import { completeFirstRun, setSetting } from '../../../settings/index.js';
27
+ import { getProjectsPath, setProjectsPath } from '../../../settings/paths.js';
28
+ import { isInVSCode, ensureExtensionInstalled } from '../../../utils/vscode-detect.js';
29
+ import { InputFeature } from '../../features/index.js';
30
+ import * as terminal from '../../terminal.js';
31
+ // =============================================================================
32
+ // Constants
33
+ // =============================================================================
34
+ /** Total steps depends on whether VS Code step is shown */
35
+ function getTotalSteps(showVSCodeStep) {
36
+ return showVSCodeStep ? 9 : 8;
37
+ }
38
+ /**
39
+ * Map numeric step to logical step name based on whether VS Code step is present.
40
+ */
41
+ function getLogicalStep(step, showVSCodeStep) {
42
+ if (showVSCodeStep) {
43
+ // 9-step flow: 1=welcome, 2=telemetry, 3=vscode-diff, 4=api-keys, ...
44
+ switch (step) {
45
+ case 1: return 'welcome';
46
+ case 2: return 'telemetry';
47
+ case 3: return 'vscode-diff';
48
+ case 4: return 'api-keys';
49
+ case 5: return 'git-config';
50
+ case 6: return 'paths';
51
+ case 7: return 'compilr-md';
52
+ case 8: return 'quick-tour';
53
+ case 9: return 'complete';
54
+ }
55
+ }
56
+ // 8-step flow (no VS Code): 1=welcome, 2=telemetry, 3=api-keys, ...
57
+ switch (step) {
58
+ case 1: return 'welcome';
59
+ case 2: return 'telemetry';
60
+ case 3: return 'api-keys';
61
+ case 4: return 'git-config';
62
+ case 5: return 'paths';
63
+ case 6: return 'compilr-md';
64
+ case 7: return 'quick-tour';
65
+ case 8: return 'complete';
66
+ default: return 'complete';
67
+ }
68
+ }
69
+ const PROVIDER_NAMES = {
70
+ anthropic: 'Anthropic (Claude)',
71
+ openai: 'OpenAI',
72
+ google: 'Google AI (Gemini)',
73
+ ollama: 'Ollama (Local)',
74
+ together: 'Together AI',
75
+ groq: 'Groq',
76
+ fireworks: 'Fireworks AI',
77
+ perplexity: 'Perplexity',
78
+ openrouter: 'OpenRouter',
79
+ };
80
+ // =============================================================================
81
+ // Onboarding Wizard Overlay V2
82
+ // =============================================================================
83
+ export class OnboardingWizardOverlayV2 extends BaseOverlayV2 {
84
+ type = 'inline';
85
+ id = 'onboarding-wizard-overlay-v2';
86
+ // Input features for different input modes
87
+ gitNameInput;
88
+ gitEmailInput;
89
+ pathInput;
90
+ constructor() {
91
+ // Check API key status
92
+ const providers = ['anthropic', 'openai', 'google', 'ollama'];
93
+ const configuredProviders = [];
94
+ for (const provider of providers) {
95
+ if (hasApiKey(provider)) {
96
+ configuredProviders.push(PROVIDER_NAMES[provider]);
97
+ }
98
+ }
99
+ // Check git config
100
+ const gitConfig = checkGitConfig();
101
+ // Get paths
102
+ const projectsPath = getProjectsPath();
103
+ const showVSCodeStep = isInVSCode();
104
+ super({
105
+ step: 1,
106
+ selectedIndex: 0,
107
+ hasAnyKey: configuredProviders.length > 0,
108
+ configuredProviders,
109
+ gitConfig,
110
+ projectsPath,
111
+ inputMode: 'none',
112
+ pendingGitName: gitConfig.userName ?? '',
113
+ pendingGitEmail: gitConfig.userEmail ?? '',
114
+ showVSCodeStep,
115
+ });
116
+ // Initialize input features
117
+ this.gitNameInput = new InputFeature({
118
+ placeholder: 'Your Name',
119
+ initialValue: gitConfig.userName ?? '',
120
+ });
121
+ this.gitEmailInput = new InputFeature({
122
+ placeholder: 'you@example.com',
123
+ initialValue: gitConfig.userEmail ?? '',
124
+ });
125
+ this.pathInput = new InputFeature({
126
+ placeholder: projectsPath,
127
+ initialValue: projectsPath,
128
+ });
129
+ this.minHeight = 22;
130
+ }
131
+ // ===========================================================================
132
+ // Rendering
133
+ // ===========================================================================
134
+ renderContent(context) {
135
+ const s = context.styles;
136
+ const cols = terminal.getTerminalWidth();
137
+ const border = renderBorder(cols, s);
138
+ const lines = [];
139
+ const totalSteps = getTotalSteps(this.state.showVSCodeStep);
140
+ const logicalStep = getLogicalStep(this.state.step, this.state.showVSCodeStep);
141
+ // Header
142
+ lines.push(border);
143
+ lines.push(` ${s.primaryBold('Welcome to compilr-dev')} ${s.muted(`[${String(this.state.step)}/${String(totalSteps)}]`)}`);
144
+ lines.push(border);
145
+ lines.push('');
146
+ // Step content based on logical step
147
+ switch (logicalStep) {
148
+ case 'welcome':
149
+ lines.push(...this.renderStepWelcome(s));
150
+ break;
151
+ case 'telemetry':
152
+ lines.push(...this.renderStepTelemetry(s));
153
+ break;
154
+ case 'vscode-diff':
155
+ lines.push(...this.renderStepVSCodeDiff(s));
156
+ break;
157
+ case 'api-keys':
158
+ lines.push(...this.renderStepApiKeys(s));
159
+ break;
160
+ case 'git-config':
161
+ lines.push(...this.renderStepGitConfig(s));
162
+ break;
163
+ case 'paths':
164
+ lines.push(...this.renderStepPaths(s));
165
+ break;
166
+ case 'compilr-md':
167
+ lines.push(...this.renderStepCompilrMd(s));
168
+ break;
169
+ case 'quick-tour':
170
+ lines.push(...this.renderStepQuickTour(s));
171
+ break;
172
+ case 'complete':
173
+ lines.push(...this.renderStepComplete(s));
174
+ break;
175
+ }
176
+ // Footer
177
+ lines.push('');
178
+ lines.push(border);
179
+ lines.push(this.getStepFooter(s));
180
+ lines.push(border);
181
+ return lines;
182
+ }
183
+ getStepFooter(s) {
184
+ // Input mode footers
185
+ if (this.state.inputMode !== 'none') {
186
+ return s.muted(' Enter Confirm | Esc Cancel');
187
+ }
188
+ const logicalStep = getLogicalStep(this.state.step, this.state.showVSCodeStep);
189
+ const totalSteps = getTotalSteps(this.state.showVSCodeStep);
190
+ if (this.state.step === totalSteps) {
191
+ return s.muted(' Enter Finish | Esc Back');
192
+ }
193
+ switch (logicalStep) {
194
+ case 'welcome':
195
+ return s.muted(' Press Enter to continue');
196
+ case 'telemetry':
197
+ case 'vscode-diff':
198
+ return s.muted(' Up/Down Navigate | Enter Continue | Esc Back');
199
+ case 'api-keys':
200
+ if (this.state.hasAnyKey) {
201
+ return s.muted(' Enter Continue | Esc Back');
202
+ }
203
+ return s.muted(' Up/Down Navigate | Enter Select | Esc Back');
204
+ case 'git-config':
205
+ if (this.state.gitConfig.isConfigured) {
206
+ return s.muted(' Enter Continue | Esc Back');
207
+ }
208
+ return s.muted(' Up/Down Navigate | Enter Select | Esc Back');
209
+ case 'paths':
210
+ return s.muted(' Up/Down Navigate | Enter Select | Esc Back');
211
+ case 'compilr-md':
212
+ case 'quick-tour':
213
+ return s.muted(' Enter Continue | Esc Back');
214
+ default:
215
+ return '';
216
+ }
217
+ }
218
+ // ===========================================================================
219
+ // Step Renderers
220
+ // ===========================================================================
221
+ renderStepWelcome(s) {
222
+ const lines = [];
223
+ lines.push(` ${s.primary('AI-powered coding assistant for the terminal')}`);
224
+ lines.push('');
225
+ lines.push(' This quick setup will help you configure:');
226
+ lines.push('');
227
+ let stepNum = 1;
228
+ lines.push(` ${s.secondary(`${String(stepNum++)}.`)} Telemetry preferences`);
229
+ if (this.state.showVSCodeStep) {
230
+ lines.push(` ${s.secondary(`${String(stepNum++)}.`)} VS Code diff integration`);
231
+ }
232
+ lines.push(` ${s.secondary(`${String(stepNum++)}.`)} LLM API keys (Claude, GPT-4, Gemini, Ollama)`);
233
+ lines.push(` ${s.secondary(`${String(stepNum++)}.`)} Git user configuration`);
234
+ lines.push(` ${s.secondary(`${String(stepNum++)}.`)} Default projects folder`);
235
+ lines.push(` ${s.secondary(`${String(stepNum)}.`)} Project memory files (COMPILR.md)`);
236
+ lines.push('');
237
+ lines.push(s.muted(' You can skip any step and configure later with /config.'));
238
+ return lines;
239
+ }
240
+ renderStepTelemetry(s) {
241
+ const lines = [];
242
+ lines.push(` ${s.secondary('Telemetry Preferences')}`);
243
+ lines.push('');
244
+ lines.push(' Help improve compilr by sharing anonymous usage data:');
245
+ lines.push('');
246
+ lines.push(` ${s.muted('•')} Commands used (not their arguments)`);
247
+ lines.push(` ${s.muted('•')} Session duration`);
248
+ lines.push(` ${s.muted('•')} Error counts`);
249
+ lines.push('');
250
+ lines.push(` We ${s.primaryBold('never')} collect: code, file contents, prompts, or personal data.`);
251
+ lines.push('');
252
+ lines.push(this.renderOption(s, 0, 'Enable anonymous telemetry (recommended)'));
253
+ lines.push(this.renderOption(s, 1, 'Disable telemetry'));
254
+ return lines;
255
+ }
256
+ renderStepVSCodeDiff(s) {
257
+ const lines = [];
258
+ lines.push(` ${s.secondary('VS Code Diff Integration')}`);
259
+ lines.push('');
260
+ lines.push(' When the AI proposes file edits, open a side-by-side diff');
261
+ lines.push(' view in VS Code alongside the terminal prompt.');
262
+ lines.push('');
263
+ lines.push(` ${s.muted('•')} See exactly what will change before accepting`);
264
+ lines.push(` ${s.muted('•')} Accept or reject from VS Code or terminal`);
265
+ lines.push(` ${s.muted('•')} Installs a companion VS Code extension`);
266
+ lines.push('');
267
+ lines.push(this.renderOption(s, 0, 'Enable VS Code diff view (recommended)'));
268
+ lines.push(this.renderOption(s, 1, 'Skip for now'));
269
+ lines.push('');
270
+ lines.push(s.muted(' You can change this later with /config.'));
271
+ return lines;
272
+ }
273
+ renderStepApiKeys(s) {
274
+ const lines = [];
275
+ lines.push(` ${s.secondary('Step 2: LLM API Keys')}`);
276
+ lines.push('');
277
+ if (this.state.hasAnyKey) {
278
+ lines.push(` ${s.success('✓')} You have API keys configured:`);
279
+ lines.push('');
280
+ for (const provider of this.state.configuredProviders) {
281
+ lines.push(` ${s.success('●')} ${provider}`);
282
+ }
283
+ lines.push('');
284
+ lines.push(s.muted(' You can manage keys anytime with /keys'));
285
+ }
286
+ else {
287
+ lines.push(` ${s.warning('⚠')} No API keys found.`);
288
+ lines.push('');
289
+ lines.push(' You need at least one API key to use the AI assistant.');
290
+ lines.push('');
291
+ lines.push(this.renderOption(s, 0, 'Configure API keys now'));
292
+ lines.push(this.renderOption(s, 1, 'Skip for now'));
293
+ lines.push('');
294
+ lines.push(s.muted(' Tip: Set ANTHROPIC_API_KEY in your environment'));
295
+ }
296
+ return lines;
297
+ }
298
+ renderStepGitConfig(s) {
299
+ const lines = [];
300
+ const { gitConfig, inputMode } = this.state;
301
+ lines.push(` ${s.secondary('Step 3: Git Configuration')}`);
302
+ lines.push('');
303
+ // Input mode: entering git name
304
+ if (inputMode === 'git-name') {
305
+ lines.push(' Enter your name for git commits:');
306
+ lines.push('');
307
+ lines.push(' ' + this.gitNameInput.render(s));
308
+ return lines;
309
+ }
310
+ // Input mode: entering git email
311
+ if (inputMode === 'git-email') {
312
+ lines.push(` ${s.success('✓')} Name: ${this.state.pendingGitName}`);
313
+ lines.push('');
314
+ lines.push(' Enter your email for git commits:');
315
+ lines.push('');
316
+ lines.push(' ' + this.gitEmailInput.render(s));
317
+ return lines;
318
+ }
319
+ // Normal mode: show status
320
+ if (gitConfig.isConfigured) {
321
+ lines.push(` ${s.success('✓')} Git is configured:`);
322
+ lines.push('');
323
+ lines.push(` ${s.muted('Name:')} ${gitConfig.userName ?? ''}`);
324
+ lines.push(` ${s.muted('Email:')} ${gitConfig.userEmail ?? ''}`);
325
+ lines.push('');
326
+ lines.push(s.muted(' Press Enter to continue'));
327
+ }
328
+ else {
329
+ lines.push(` ${s.warning('⚠')} Git user config is incomplete.`);
330
+ lines.push('');
331
+ if (gitConfig.userName) {
332
+ lines.push(` ${s.success('✓')} Name: ${gitConfig.userName}`);
333
+ }
334
+ else {
335
+ lines.push(` ${s.warning('○')} Name: ${s.muted('not set')}`);
336
+ }
337
+ if (gitConfig.userEmail) {
338
+ lines.push(` ${s.success('✓')} Email: ${gitConfig.userEmail}`);
339
+ }
340
+ else {
341
+ lines.push(` ${s.warning('○')} Email: ${s.muted('not set')}`);
342
+ }
343
+ lines.push('');
344
+ lines.push(this.renderOption(s, 0, 'Configure git now'));
345
+ lines.push(this.renderOption(s, 1, 'Skip for now'));
346
+ }
347
+ return lines;
348
+ }
349
+ renderStepPaths(s) {
350
+ const lines = [];
351
+ const { inputMode, projectsPath } = this.state;
352
+ lines.push(` ${s.secondary('Step 4: Projects Folder')}`);
353
+ lines.push('');
354
+ // Input mode: editing path
355
+ if (inputMode === 'projects-path') {
356
+ lines.push(' Enter projects folder path:');
357
+ lines.push('');
358
+ lines.push(' ' + this.pathInput.render(s));
359
+ lines.push('');
360
+ lines.push(s.muted(' New projects will be created in this folder.'));
361
+ return lines;
362
+ }
363
+ // Normal mode: show current path with options
364
+ lines.push(' New projects will be created in:');
365
+ lines.push('');
366
+ lines.push(` ${s.primary(projectsPath)}`);
367
+ lines.push('');
368
+ lines.push(this.renderOption(s, 0, 'Keep this path'));
369
+ lines.push(this.renderOption(s, 1, 'Change path'));
370
+ return lines;
371
+ }
372
+ renderStepCompilrMd(s) {
373
+ const lines = [];
374
+ lines.push(` ${s.secondary('Step 5: Project Memory (COMPILR.md)')}`);
375
+ lines.push('');
376
+ lines.push(' Create a COMPILR.md file in your project root to give the');
377
+ lines.push(' AI assistant context about your codebase.');
378
+ lines.push('');
379
+ lines.push(` ${s.primary('What to include:')}`);
380
+ lines.push('');
381
+ lines.push(` ${s.muted('•')} Project overview and architecture`);
382
+ lines.push(` ${s.muted('•')} Key files and directories`);
383
+ lines.push(` ${s.muted('•')} Coding conventions and patterns`);
384
+ lines.push(` ${s.muted('•')} Build and test commands`);
385
+ lines.push(` ${s.muted('•')} Important context the AI should know`);
386
+ lines.push('');
387
+ lines.push(s.muted(' The AI reads this file automatically when you work in the'));
388
+ lines.push(s.muted(' project. It also supports CLAUDE.md and AGENTS.md.'));
389
+ return lines;
390
+ }
391
+ renderStepQuickTour(s) {
392
+ const lines = [];
393
+ lines.push(` ${s.secondary('Quick Tour')}`);
394
+ lines.push('');
395
+ lines.push(' Here are the key commands to get started:');
396
+ lines.push('');
397
+ lines.push(` ${s.primary('/menu')} Dashboard - select projects, settings`);
398
+ lines.push(` ${s.primary('/new')} Create a new project with scaffolding`);
399
+ lines.push(` ${s.primary('/help')} Show all available commands`);
400
+ lines.push(` ${s.primary('/config')} Customize settings and preferences`);
401
+ lines.push(` ${s.primary('/keys')} Manage LLM API keys`);
402
+ lines.push('');
403
+ lines.push(s.muted(' Just type naturally to chat with the AI assistant.'));
404
+ return lines;
405
+ }
406
+ renderStepComplete(s) {
407
+ const lines = [];
408
+ lines.push(` ${s.success('✓')} Setup complete!`);
409
+ lines.push('');
410
+ // Summary of what was configured
411
+ const configured = [];
412
+ if (this.state.hasAnyKey) {
413
+ configured.push('API keys');
414
+ }
415
+ if (this.state.gitConfig.isConfigured) {
416
+ configured.push('Git config');
417
+ }
418
+ configured.push('Projects path');
419
+ if (configured.length > 0) {
420
+ lines.push(` Configured: ${configured.join(', ')}`);
421
+ lines.push('');
422
+ }
423
+ if (this.state.hasAnyKey) {
424
+ lines.push(" You're ready to start coding! Try:");
425
+ lines.push('');
426
+ lines.push(` • Type a question to chat with the AI`);
427
+ lines.push(` • Run ${s.primary('/new')} to create a project`);
428
+ lines.push(` • Run ${s.primary('/help')} to see all commands`);
429
+ }
430
+ else {
431
+ lines.push(" Almost there! You'll need an API key to use the AI.");
432
+ lines.push('');
433
+ lines.push(` • Run ${s.primary('/keys')} to add your API key`);
434
+ lines.push(` • Or set ANTHROPIC_API_KEY in your environment`);
435
+ }
436
+ lines.push('');
437
+ lines.push(s.muted(' Run /init anytime to see this wizard again.'));
438
+ return lines;
439
+ }
440
+ renderOption(s, index, label) {
441
+ const isSelected = this.state.selectedIndex === index;
442
+ const prefix = isSelected ? ' > ' : ' ';
443
+ return isSelected ? s.primary(prefix + label) : s.muted(prefix + label);
444
+ }
445
+ // ===========================================================================
446
+ // Key Handling
447
+ // ===========================================================================
448
+ handleKey(key) {
449
+ // Ctrl+C always cancels
450
+ if (this.isInterruptKey(key)) {
451
+ return this.close({ completed: false });
452
+ }
453
+ // Handle input modes
454
+ if (this.state.inputMode !== 'none') {
455
+ return this.handleInputMode(key);
456
+ }
457
+ // Escape: first step cancels, otherwise goes back
458
+ if (key.name === 'escape') {
459
+ if (this.state.step === 1) {
460
+ return this.close({ completed: false });
461
+ }
462
+ this.prevStep();
463
+ return this.rerender();
464
+ }
465
+ // Step-specific handling
466
+ const logicalStep = getLogicalStep(this.state.step, this.state.showVSCodeStep);
467
+ switch (logicalStep) {
468
+ case 'telemetry':
469
+ return this.handleTelemetrySelection(key);
470
+ case 'vscode-diff':
471
+ return this.handleVSCodeDiffSelection(key);
472
+ case 'api-keys':
473
+ if (!this.state.hasAnyKey) {
474
+ return this.handleApiKeysSelection(key);
475
+ }
476
+ break;
477
+ case 'git-config':
478
+ if (!this.state.gitConfig.isConfigured) {
479
+ return this.handleGitConfigSelection(key);
480
+ }
481
+ break;
482
+ case 'paths':
483
+ return this.handlePathsSelection(key);
484
+ }
485
+ // Enter advances to next step
486
+ if (this.isEnterKey(key)) {
487
+ return this.handleEnter();
488
+ }
489
+ return this.noAction();
490
+ }
491
+ handleInputMode(key) {
492
+ const { inputMode } = this.state;
493
+ // Escape cancels input and goes back to selection
494
+ if (key.name === 'escape') {
495
+ terminal.hideCursor();
496
+ this.state.inputMode = 'none';
497
+ this.state.selectedIndex = 0;
498
+ return this.rerender();
499
+ }
500
+ // Enter confirms input
501
+ if (this.isEnterKey(key)) {
502
+ return this.confirmInput();
503
+ }
504
+ // Get the current input feature
505
+ let input;
506
+ switch (inputMode) {
507
+ case 'git-name':
508
+ input = this.gitNameInput;
509
+ break;
510
+ case 'git-email':
511
+ input = this.gitEmailInput;
512
+ break;
513
+ case 'projects-path':
514
+ input = this.pathInput;
515
+ break;
516
+ default:
517
+ return this.noAction();
518
+ }
519
+ // Let InputFeature handle the key
520
+ const result = input.handleKey(key.raw);
521
+ if (result.handled && result.render) {
522
+ return this.rerender();
523
+ }
524
+ return this.noAction();
525
+ }
526
+ confirmInput() {
527
+ const { inputMode } = this.state;
528
+ terminal.hideCursor();
529
+ switch (inputMode) {
530
+ case 'git-name': {
531
+ const name = this.gitNameInput.trimmedValue;
532
+ if (name) {
533
+ this.state.pendingGitName = name;
534
+ // Move to email input
535
+ this.state.inputMode = 'git-email';
536
+ terminal.showCursor();
537
+ return this.rerender();
538
+ }
539
+ // Empty name - stay in input mode
540
+ return this.noAction();
541
+ }
542
+ case 'git-email': {
543
+ const email = this.gitEmailInput.trimmedValue;
544
+ if (email) {
545
+ // Save both git config values
546
+ setGitConfigValue('user.name', this.state.pendingGitName);
547
+ setGitConfigValue('user.email', email);
548
+ // Refresh git config state
549
+ this.state.gitConfig = checkGitConfig();
550
+ this.state.inputMode = 'none';
551
+ // Move to next step
552
+ this.nextStep();
553
+ return this.rerender();
554
+ }
555
+ // Empty email - stay in input mode
556
+ return this.noAction();
557
+ }
558
+ case 'projects-path': {
559
+ const path = this.pathInput.trimmedValue;
560
+ if (path) {
561
+ setProjectsPath(path);
562
+ this.state.projectsPath = path;
563
+ }
564
+ this.state.inputMode = 'none';
565
+ // Move to next step
566
+ this.nextStep();
567
+ return this.rerender();
568
+ }
569
+ default:
570
+ this.state.inputMode = 'none';
571
+ return this.rerender();
572
+ }
573
+ }
574
+ handleTelemetrySelection(key) {
575
+ // Navigation
576
+ if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
577
+ this.state.selectedIndex--;
578
+ return this.rerender();
579
+ }
580
+ if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
581
+ this.state.selectedIndex++;
582
+ return this.rerender();
583
+ }
584
+ // Enter to confirm selection and continue
585
+ if (this.isEnterKey(key)) {
586
+ // 0 = enable (recommended), 1 = disable
587
+ setSetting('telemetryEnabled', this.state.selectedIndex === 0);
588
+ this.nextStep();
589
+ return this.rerender();
590
+ }
591
+ return this.noAction();
592
+ }
593
+ handleVSCodeDiffSelection(key) {
594
+ // Navigation
595
+ if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
596
+ this.state.selectedIndex--;
597
+ return this.rerender();
598
+ }
599
+ if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
600
+ this.state.selectedIndex++;
601
+ return this.rerender();
602
+ }
603
+ // Enter to confirm selection and continue
604
+ if (this.isEnterKey(key)) {
605
+ if (this.state.selectedIndex === 0) {
606
+ // Enable VS Code diff + install extension
607
+ setSetting('vsDiffExtension', true);
608
+ void ensureExtensionInstalled().then(result => {
609
+ if (result.needsReload) {
610
+ process.stderr.write('\n \x1b[33m⚠ VS Code diff extension installed.\x1b[0m\n' +
611
+ ' \x1b[2mReload VS Code window (Ctrl+Shift+P → "Developer: Reload Window") to activate.\x1b[0m\n\n');
612
+ }
613
+ });
614
+ }
615
+ // Both options proceed to next step
616
+ this.nextStep();
617
+ return this.rerender();
618
+ }
619
+ return this.noAction();
620
+ }
621
+ handleApiKeysSelection(key) {
622
+ // Navigation
623
+ if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
624
+ this.state.selectedIndex--;
625
+ return this.rerender();
626
+ }
627
+ if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
628
+ this.state.selectedIndex++;
629
+ return this.rerender();
630
+ }
631
+ // Enter to select
632
+ if (this.isEnterKey(key)) {
633
+ if (this.state.selectedIndex === 0) {
634
+ // Open /keys overlay
635
+ return this.close({ completed: false, openKeys: true });
636
+ }
637
+ // Skip - continue to next step
638
+ this.nextStep();
639
+ return this.rerender();
640
+ }
641
+ return this.noAction();
642
+ }
643
+ handleGitConfigSelection(key) {
644
+ // Navigation
645
+ if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
646
+ this.state.selectedIndex--;
647
+ return this.rerender();
648
+ }
649
+ if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
650
+ this.state.selectedIndex++;
651
+ return this.rerender();
652
+ }
653
+ // Enter to select
654
+ if (this.isEnterKey(key)) {
655
+ if (this.state.selectedIndex === 0) {
656
+ // Start git config input
657
+ this.state.inputMode = 'git-name';
658
+ terminal.showCursor();
659
+ return this.rerender();
660
+ }
661
+ // Skip - continue to next step
662
+ this.nextStep();
663
+ return this.rerender();
664
+ }
665
+ return this.noAction();
666
+ }
667
+ handlePathsSelection(key) {
668
+ // Navigation
669
+ if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
670
+ this.state.selectedIndex--;
671
+ return this.rerender();
672
+ }
673
+ if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
674
+ this.state.selectedIndex++;
675
+ return this.rerender();
676
+ }
677
+ // Enter to select
678
+ if (this.isEnterKey(key)) {
679
+ if (this.state.selectedIndex === 0) {
680
+ // Keep path - continue to next step
681
+ this.nextStep();
682
+ return this.rerender();
683
+ }
684
+ // Change path - enter input mode
685
+ this.state.inputMode = 'projects-path';
686
+ terminal.showCursor();
687
+ return this.rerender();
688
+ }
689
+ return this.noAction();
690
+ }
691
+ handleEnter() {
692
+ const totalSteps = getTotalSteps(this.state.showVSCodeStep);
693
+ if (this.state.step === totalSteps) {
694
+ // Complete the wizard
695
+ completeFirstRun();
696
+ return this.close({ completed: true });
697
+ }
698
+ this.nextStep();
699
+ return this.rerender();
700
+ }
701
+ nextStep() {
702
+ const totalSteps = getTotalSteps(this.state.showVSCodeStep);
703
+ if (this.state.step < totalSteps) {
704
+ this.state.step = (this.state.step + 1);
705
+ this.state.selectedIndex = 0;
706
+ }
707
+ }
708
+ prevStep() {
709
+ if (this.state.step > 1) {
710
+ this.state.step = (this.state.step - 1);
711
+ this.state.selectedIndex = 0;
712
+ }
713
+ }
714
+ // ===========================================================================
715
+ // Close Summary
716
+ // ===========================================================================
717
+ getCloseSummary(result) {
718
+ const s = this.getStyles();
719
+ if (result.completed) {
720
+ // No summary — avoids a flash before /menu opens
721
+ return null;
722
+ }
723
+ if (result.openKeys) {
724
+ return null; // Will open /keys overlay next
725
+ }
726
+ return s.muted('Setup cancelled. Run /init to complete setup later.');
727
+ }
728
+ }