@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
@@ -1,146 +0,0 @@
1
- /**
2
- * Mascot Overlay
3
- *
4
- * Standalone mascot selection overlay.
5
- * Accessible via /mascot command or from Config overlay.
6
- *
7
- * Features:
8
- * - All mascot expressions
9
- * - Live preview
10
- * - Persists selection to settings
11
- */
12
- import * as terminal from './terminal.js';
13
- import { BaseOverlay, isEscape, isEnter, isSpace, isCtrlC, isNavigateUp, isNavigateDown, isClose, renderBorder, } from './base/index.js';
14
- import { getSettings, setSetting } from '../settings/index.js';
15
- import { MASCOT_OPTIONS, MASCOT_LABELS, EXPRESSIONS, } from './mascot/index.js';
16
- // =============================================================================
17
- // Mascot Overlay Class
18
- // =============================================================================
19
- class MascotOverlay extends BaseOverlay {
20
- constructor(options = {}) {
21
- const currentMascot = options.currentMascot ?? getSettings().mascot;
22
- // Find current mascot in options list
23
- let selectedIndex = 0;
24
- const mascotIndex = MASCOT_OPTIONS.findIndex(m => m === currentMascot);
25
- if (mascotIndex >= 0) {
26
- selectedIndex = mascotIndex;
27
- }
28
- const initialState = {
29
- lineCount: 0,
30
- maxLineCount: 0,
31
- selectedIndex,
32
- currentMascot,
33
- };
34
- super(initialState, { minHeight: 18 });
35
- }
36
- render() {
37
- const s = this.styles;
38
- const cols = terminal.getTerminalWidth();
39
- const border = renderBorder(cols, s);
40
- const lines = [];
41
- // Get preview lines for side-by-side layout
42
- const selectedOption = MASCOT_OPTIONS[this.state.selectedIndex];
43
- let previewLines = [];
44
- let previewLabel = '';
45
- if (selectedOption === 'none') {
46
- previewLabel = '(No mascot)';
47
- previewLines = ['', '', '', '', '', ''];
48
- }
49
- else if (selectedOption === 'random') {
50
- previewLabel = '(Random on startup)';
51
- previewLines = EXPRESSIONS.neutral;
52
- }
53
- else {
54
- previewLabel = MASCOT_LABELS[selectedOption];
55
- previewLines = EXPRESSIONS[selectedOption];
56
- }
57
- // Header
58
- lines.push(border);
59
- lines.push(` ${s.primaryBold('Select Mascot')}`);
60
- lines.push('');
61
- // Column widths
62
- const listColWidth = 28; // Space for list items
63
- const gap = 4; // Gap between columns
64
- const previewColStart = listColWidth + gap;
65
- // Build side-by-side layout
66
- // Options list on left, preview on right
67
- const optionCount = MASCOT_OPTIONS.length;
68
- const previewHeight = previewLines.length;
69
- // Calculate where to start the preview (vertically center it with the list)
70
- const previewStartRow = Math.max(0, Math.floor((optionCount - previewHeight) / 2));
71
- for (let i = 0; i < Math.max(optionCount, previewStartRow + previewHeight + 1); i++) {
72
- let leftPart = '';
73
- let rightPart = '';
74
- // Left column: option list
75
- if (i < optionCount) {
76
- const option = MASCOT_OPTIONS[i];
77
- const isSelected = i === this.state.selectedIndex;
78
- const isCurrent = option === this.state.currentMascot;
79
- const prefix = isSelected ? s.primary('❯ ') : ' ';
80
- const num = `${(i + 1).toString().padStart(2)}. `;
81
- const checkmark = isCurrent ? s.success(' ✓') : '';
82
- const label = isSelected ? s.primary(MASCOT_LABELS[option]) : MASCOT_LABELS[option];
83
- leftPart = ` ${prefix}${num}${label}${checkmark}`;
84
- }
85
- // Right column: preview
86
- const previewRow = i - previewStartRow;
87
- if (previewRow === -1) {
88
- // Preview label above the mascot
89
- rightPart = s.muted(previewLabel);
90
- }
91
- else if (previewRow >= 0 && previewRow < previewHeight) {
92
- rightPart = s.secondary(previewLines[previewRow]);
93
- }
94
- // Combine columns with proper spacing
95
- // Strip ANSI codes for width calculation
96
- // eslint-disable-next-line no-control-regex
97
- const leftPlain = leftPart.replace(/\x1b\[[0-9;]*m/g, '');
98
- const padding = ' '.repeat(Math.max(0, previewColStart - leftPlain.length));
99
- lines.push(leftPart + padding + rightPart);
100
- }
101
- // Footer
102
- lines.push('');
103
- lines.push(border);
104
- lines.push(` ${s.muted('↑↓/jk Navigate · Enter/Space Select · q/Esc Close')}`);
105
- lines.push(border);
106
- return lines;
107
- }
108
- handleKey(data) {
109
- const maxIndex = MASCOT_OPTIONS.length - 1;
110
- // Ctrl+C always closes
111
- if (isCtrlC(data)) {
112
- this.close({});
113
- return;
114
- }
115
- // q or Esc closes
116
- if (isEscape(data) || isClose(data)) {
117
- this.close({});
118
- return;
119
- }
120
- // Navigation
121
- if (isNavigateUp(data) && this.state.selectedIndex > 0) {
122
- this.state.selectedIndex--;
123
- this.update();
124
- return;
125
- }
126
- if (isNavigateDown(data) && this.state.selectedIndex < maxIndex) {
127
- this.state.selectedIndex++;
128
- this.update();
129
- return;
130
- }
131
- // Enter/Space to select
132
- if (isEnter(data) || isSpace(data)) {
133
- const selectedMascot = MASCOT_OPTIONS[this.state.selectedIndex];
134
- setSetting('mascot', selectedMascot);
135
- this.close({
136
- mascotChanged: selectedMascot,
137
- });
138
- }
139
- }
140
- }
141
- // =============================================================================
142
- // Export Function
143
- // =============================================================================
144
- export async function showMascotOverlay(options = {}) {
145
- return new MascotOverlay(options).show();
146
- }
@@ -1,49 +0,0 @@
1
- /**
2
- * Model Overlay V2
3
- *
4
- * Model selection overlay using TabbedListOverlayV2 for the new Overlay interface.
5
- * Works with TerminalUI's overlay management.
6
- *
7
- * Features:
8
- * - Tabs by provider (Claude, OpenAI, Gemini, Ollama)
9
- * - Hot-swap detection (same provider = immediate, different = restart)
10
- * - API key status checking
11
- * - Persists selection to settings
12
- */
13
- import { TabbedListOverlayV2 } from './base/index.js';
14
- interface ModelOption {
15
- id: string;
16
- name: string;
17
- description: string;
18
- provider: string;
19
- }
20
- export interface ModelOverlayV2Options {
21
- /** Current model ID */
22
- currentModel?: string;
23
- /** Current provider (for hot-swap detection) */
24
- currentProvider?: string;
25
- }
26
- export interface ModelOverlayV2Result {
27
- /** Selected model ID (if changed) */
28
- modelChanged?: string;
29
- /** Selected provider */
30
- provider?: string;
31
- /** Whether restart is required (different provider) */
32
- requiresRestart?: boolean;
33
- }
34
- /**
35
- * Model selection overlay using the new Overlay interface.
36
- * Displays available models in a tabbed list by provider.
37
- */
38
- export declare class ModelOverlayV2 extends TabbedListOverlayV2<ModelOption, ModelOverlayV2Result> {
39
- readonly type: "inline";
40
- readonly id = "model-overlay-v2";
41
- private readonly currentModel;
42
- private readonly currentProvider;
43
- constructor(options?: ModelOverlayV2Options);
44
- /**
45
- * Override to handle model selection on Enter.
46
- */
47
- protected onItemSelected(item: ModelOption): ModelOverlayV2Result | undefined;
48
- }
49
- export {};
@@ -1,118 +0,0 @@
1
- /**
2
- * Model Overlay V2
3
- *
4
- * Model selection overlay using TabbedListOverlayV2 for the new Overlay interface.
5
- * Works with TerminalUI's overlay management.
6
- *
7
- * Features:
8
- * - Tabs by provider (Claude, OpenAI, Gemini, Ollama)
9
- * - Hot-swap detection (same provider = immediate, different = restart)
10
- * - API key status checking
11
- * - Persists selection to settings
12
- */
13
- import { TabbedListOverlayV2, } from './base/index.js';
14
- import { setSetting } from '../settings/index.js';
15
- import { hasApiKey, settingsProviderToCredentialKey } from '../utils/credentials.js';
16
- // =============================================================================
17
- // Constants
18
- // =============================================================================
19
- const PAGE_SIZE = 10;
20
- const PROVIDER_TABS = [
21
- { id: 'claude', label: 'Claude' },
22
- { id: 'openai', label: 'OpenAI' },
23
- { id: 'gemini', label: 'Gemini' },
24
- { id: 'ollama', label: 'Ollama' },
25
- ];
26
- const MODEL_OPTIONS = [
27
- // Claude
28
- { id: 'claude-sonnet-4-20250514', name: 'Sonnet 4', description: 'Best for everyday tasks', provider: 'claude' },
29
- { id: 'claude-opus-4-20250514', name: 'Opus 4', description: 'Most capable for complex work', provider: 'claude' },
30
- { id: 'claude-3-5-haiku-20241022', name: 'Haiku 3.5', description: 'Fastest for quick answers', provider: 'claude' },
31
- // OpenAI
32
- { id: 'gpt-4o', name: 'GPT-4o', description: 'Best overall', provider: 'openai' },
33
- { id: 'gpt-4o-mini', name: 'GPT-4o Mini', description: 'Fast and affordable', provider: 'openai' },
34
- // Gemini
35
- { id: 'gemini-2.0-flash', name: 'Gemini 2.0 Flash', description: 'Fast multimodal', provider: 'gemini' },
36
- { id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', description: 'Latest stable flash', provider: 'gemini' },
37
- { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', description: 'Most capable Gemini', provider: 'gemini' },
38
- // Ollama
39
- { id: 'llama3.2', name: 'Llama 3.2', description: 'Local model', provider: 'ollama' },
40
- { id: 'mistral', name: 'Mistral', description: 'Local model', provider: 'ollama' },
41
- { id: 'codellama', name: 'Code Llama', description: 'Code-focused local model', provider: 'ollama' },
42
- ];
43
- // =============================================================================
44
- // Model Overlay V2 Class
45
- // =============================================================================
46
- /**
47
- * Model selection overlay using the new Overlay interface.
48
- * Displays available models in a tabbed list by provider.
49
- */
50
- export class ModelOverlayV2 extends TabbedListOverlayV2 {
51
- type = 'inline';
52
- id = 'model-overlay-v2';
53
- currentModel;
54
- currentProvider;
55
- constructor(options = {}) {
56
- const currentModel = options.currentModel ?? 'claude-sonnet-4-20250514';
57
- const currentProvider = options.currentProvider ?? 'claude';
58
- // Find the initial tab based on current provider
59
- const initialTabIndex = PROVIDER_TABS.findIndex((t) => t.id === currentProvider);
60
- super({
61
- title: 'Select Model',
62
- tabs: PROVIDER_TABS,
63
- items: MODEL_OPTIONS,
64
- pageSize: PAGE_SIZE,
65
- filterByTab: (item, tabId) => item.provider === tabId,
66
- getSearchText: (item) => `${item.name} ${item.description} ${item.id}`,
67
- renderItem: (item, isSelected, styles) => {
68
- const isCurrent = item.id === currentModel;
69
- const prefix = isSelected ? styles.primary(' > ') : ' ';
70
- // Check API key status for this provider
71
- const providerType = item.provider;
72
- const credKey = settingsProviderToCredentialKey(providerType);
73
- const hasKey = item.provider === 'ollama' || hasApiKey(credKey);
74
- const keyIndicator = hasKey ? styles.success('●') : styles.error('○');
75
- const name = isSelected
76
- ? styles.primary(item.name.padEnd(18))
77
- : styles.muted(item.name.padEnd(18));
78
- const desc = styles.muted(item.description);
79
- const currentBadge = isCurrent ? styles.success(' (current)') : '';
80
- return `${prefix}${keyIndicator} ${name}${desc}${currentBadge}`;
81
- },
82
- footerHints: (searchMode) => {
83
- if (searchMode) {
84
- return 'Type to filter · ↑↓/jk Navigate · Enter Select · Esc Exit search';
85
- }
86
- return 'Tab Provider · ↑↓/jk · / Search · Enter Select · q/Esc Close';
87
- },
88
- emptyMessage: 'No models available for this provider.',
89
- noResultsMessage: 'No models match the search.',
90
- });
91
- this.currentModel = currentModel;
92
- this.currentProvider = currentProvider;
93
- // Set initial tab based on current provider
94
- if (initialTabIndex >= 0) {
95
- this.state.currentTab = initialTabIndex;
96
- // Re-filter items for the selected tab
97
- this.state.filteredItems = MODEL_OPTIONS.filter((item) => item.provider === PROVIDER_TABS[initialTabIndex]?.id);
98
- }
99
- }
100
- /**
101
- * Override to handle model selection on Enter.
102
- */
103
- onItemSelected(item) {
104
- if (item.id === this.currentModel) {
105
- // Same model, no change
106
- return undefined;
107
- }
108
- // Save to settings
109
- setSetting('defaultModel', item.id);
110
- setSetting('defaultProvider', item.provider);
111
- const requiresRestart = item.provider !== this.currentProvider;
112
- return {
113
- modelChanged: item.id,
114
- provider: item.provider,
115
- requiresRestart,
116
- };
117
- }
118
- }
@@ -1,27 +0,0 @@
1
- /**
2
- * Model Overlay
3
- *
4
- * Standalone model selection overlay with tabbed provider interface.
5
- * Accessible via /model command or from Config overlay.
6
- *
7
- * Features:
8
- * - Tabbed by provider (Claude, OpenAI, Gemini, Ollama)
9
- * - Hot-swap detection (same provider = immediate, different = restart)
10
- * - API key status checking
11
- * - Persists selection to settings
12
- */
13
- export interface ModelOverlayOptions {
14
- /** Current model ID */
15
- currentModel?: string;
16
- /** Current provider (for hot-swap detection) */
17
- currentProvider?: string;
18
- }
19
- export interface ModelOverlayResult {
20
- /** Selected model ID (if changed) */
21
- modelChanged?: string;
22
- /** Selected provider */
23
- provider?: string;
24
- /** Whether restart is required (different provider) */
25
- requiresRestart?: boolean;
26
- }
27
- export declare function showModelOverlay(options?: ModelOverlayOptions): Promise<ModelOverlayResult>;
@@ -1,221 +0,0 @@
1
- /**
2
- * Model Overlay
3
- *
4
- * Standalone model selection overlay with tabbed provider interface.
5
- * Accessible via /model command or from Config overlay.
6
- *
7
- * Features:
8
- * - Tabbed by provider (Claude, OpenAI, Gemini, Ollama)
9
- * - Hot-swap detection (same provider = immediate, different = restart)
10
- * - API key status checking
11
- * - Persists selection to settings
12
- */
13
- import * as terminal from './terminal.js';
14
- import { BaseOverlay, isEscape, isTab, isShiftTab, isEnter, isCtrlC, isNavigateUp, isNavigateDown, isClose, extractPrintable, renderBorder, } from './base/index.js';
15
- import { TabFeature } from './features/tab-feature.js';
16
- import { setSetting } from '../settings/index.js';
17
- import { hasApiKey, settingsProviderToCredentialKey } from '../utils/credentials.js';
18
- // =============================================================================
19
- // Constants
20
- // =============================================================================
21
- const PROVIDER_TABS = [
22
- { id: 'claude', label: 'Claude' },
23
- { id: 'openai', label: 'OpenAI' },
24
- { id: 'gemini', label: 'Gemini' },
25
- { id: 'ollama', label: 'Ollama' },
26
- ];
27
- const MODEL_OPTIONS = [
28
- // Claude
29
- { id: 'claude-sonnet-4-20250514', name: 'Sonnet 4', description: 'Best for everyday tasks', provider: 'claude' },
30
- { id: 'claude-opus-4-20250514', name: 'Opus 4', description: 'Most capable for complex work', provider: 'claude' },
31
- { id: 'claude-3-5-haiku-20241022', name: 'Haiku 3.5', description: 'Fastest for quick answers', provider: 'claude' },
32
- // OpenAI
33
- { id: 'gpt-4o', name: 'GPT-4o', description: 'Best overall', provider: 'openai' },
34
- { id: 'gpt-4o-mini', name: 'GPT-4o Mini', description: 'Fast and affordable', provider: 'openai' },
35
- // Gemini
36
- { id: 'gemini-2.0-flash', name: 'Gemini 2.0 Flash', description: 'Fast multimodal', provider: 'gemini' },
37
- { id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', description: 'Latest stable flash', provider: 'gemini' },
38
- { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', description: 'Most capable Gemini', provider: 'gemini' },
39
- // Ollama
40
- { id: 'llama3.2', name: 'Llama 3.2', description: 'Local model', provider: 'ollama' },
41
- { id: 'mistral', name: 'Mistral', description: 'Local model', provider: 'ollama' },
42
- { id: 'codellama', name: 'Code Llama', description: 'Code-focused local model', provider: 'ollama' },
43
- ];
44
- // =============================================================================
45
- // Helper Functions
46
- // =============================================================================
47
- function getModelsForProvider(providerId) {
48
- return MODEL_OPTIONS.filter(m => m.provider === providerId);
49
- }
50
- function findModelById(modelId) {
51
- return MODEL_OPTIONS.find(m => m.id === modelId);
52
- }
53
- function getProviderTabIndex(providerId) {
54
- const index = PROVIDER_TABS.findIndex(p => p.id === providerId);
55
- return index >= 0 ? index : 0;
56
- }
57
- // =============================================================================
58
- // Model Overlay Class
59
- // =============================================================================
60
- class ModelOverlay extends BaseOverlay {
61
- tabFeature;
62
- constructor(options = {}) {
63
- const currentModel = findModelById(options.currentModel ?? '');
64
- const currentProvider = options.currentProvider ?? currentModel?.provider ?? 'claude';
65
- // Find initial tab and model index
66
- const initialTab = getProviderTabIndex(currentProvider);
67
- const providerModels = getModelsForProvider(PROVIDER_TABS[initialTab].id);
68
- const modelIndex = currentModel
69
- ? providerModels.findIndex(m => m.id === currentModel.id)
70
- : 0;
71
- const initialState = {
72
- lineCount: 0,
73
- maxLineCount: 0,
74
- selectedIndex: modelIndex >= 0 ? modelIndex : 0,
75
- currentTab: initialTab,
76
- activeProvider: currentProvider,
77
- currentModelId: options.currentModel ?? '',
78
- };
79
- super(initialState, { minHeight: 16 });
80
- this.tabFeature = new TabFeature(PROVIDER_TABS, () => {
81
- // Reset selection when tab changes
82
- this.state.selectedIndex = 0;
83
- });
84
- }
85
- render() {
86
- const s = this.styles;
87
- const cols = terminal.getTerminalWidth();
88
- const border = renderBorder(cols, s);
89
- const lines = [];
90
- const currentProviderTab = PROVIDER_TABS[this.state.currentTab];
91
- const providerModels = getModelsForProvider(currentProviderTab.id);
92
- const isActiveProvider = currentProviderTab.id === this.state.activeProvider;
93
- // Header
94
- lines.push(border);
95
- lines.push(` ${s.primaryBold('Select Model')}`);
96
- lines.push('');
97
- // Provider tabs with checkmark on active
98
- let tabLine = ' ';
99
- for (let i = 0; i < PROVIDER_TABS.length; i++) {
100
- const tab = PROVIDER_TABS[i];
101
- const isActive = tab.id === this.state.activeProvider;
102
- const indicator = isActive ? ' ✓' : '';
103
- if (i === this.state.currentTab) {
104
- tabLine += s.selected(` ${tab.label}${indicator} `) + ' ';
105
- }
106
- else {
107
- tabLine += s.muted(` ${tab.label}${indicator} `) + ' ';
108
- }
109
- }
110
- tabLine += s.muted('(Tab · 1-4)');
111
- lines.push(tabLine);
112
- lines.push('');
113
- // Provider status message
114
- if (isActiveProvider) {
115
- lines.push(` ${s.success('Current provider - changes apply immediately')}`);
116
- }
117
- else {
118
- lines.push(` ${s.warning('Different provider - restart required to apply')}`);
119
- }
120
- // API key status (not needed for Ollama)
121
- if (currentProviderTab.id !== 'ollama') {
122
- const credKey = settingsProviderToCredentialKey(currentProviderTab.id);
123
- if (!hasApiKey(credKey)) {
124
- lines.push(` ${s.error('⚠ No API key configured - use /keys to set it')}`);
125
- }
126
- }
127
- lines.push('');
128
- // Model list
129
- for (let i = 0; i < providerModels.length; i++) {
130
- const model = providerModels[i];
131
- const isSelected = i === this.state.selectedIndex;
132
- const isCurrent = model.id === this.state.currentModelId;
133
- const prefix = isSelected ? s.primary('❯ ') : ' ';
134
- const checkmark = isCurrent ? s.success(' ✓') : '';
135
- const label = isSelected ? s.primary(model.name) : model.name;
136
- const desc = s.muted(` · ${model.description}`);
137
- lines.push(` ${prefix}${label.padEnd(20)}${desc}${checkmark}`);
138
- }
139
- // Pad for consistent height
140
- const minModelLines = 4;
141
- for (let i = providerModels.length; i < minModelLines; i++) {
142
- lines.push('');
143
- }
144
- // Footer
145
- lines.push('');
146
- lines.push(border);
147
- lines.push(` ${s.muted('Tab/1-4 Provider · ↑↓/jk Model · Enter Select · q/Esc Close')}`);
148
- lines.push(border);
149
- return lines;
150
- }
151
- handleKey(data) {
152
- const currentProviderTab = PROVIDER_TABS[this.state.currentTab];
153
- const providerModels = getModelsForProvider(currentProviderTab.id);
154
- const maxModelIndex = providerModels.length - 1;
155
- // Ctrl+C always closes
156
- if (isCtrlC(data)) {
157
- this.close({});
158
- return;
159
- }
160
- // q or Esc closes
161
- if (isEscape(data) || isClose(data)) {
162
- this.close({});
163
- return;
164
- }
165
- // Tab switching: Tab for next, Shift+Tab for previous
166
- if (isTab(data)) {
167
- this.state.currentTab = (this.state.currentTab + 1) % PROVIDER_TABS.length;
168
- this.state.selectedIndex = 0;
169
- this.update();
170
- return;
171
- }
172
- if (isShiftTab(data)) {
173
- this.state.currentTab = (this.state.currentTab - 1 + PROVIDER_TABS.length) % PROVIDER_TABS.length;
174
- this.state.selectedIndex = 0;
175
- this.update();
176
- return;
177
- }
178
- // Number keys 1-4 for provider tabs
179
- const char = extractPrintable(data);
180
- if (char && char >= '1' && char <= '4') {
181
- const tabNum = parseInt(char, 10) - 1;
182
- if (tabNum < PROVIDER_TABS.length) {
183
- this.state.currentTab = tabNum;
184
- this.state.selectedIndex = 0;
185
- this.update();
186
- }
187
- return;
188
- }
189
- // Navigation (↑↓ or j/k)
190
- if (isNavigateUp(data) && this.state.selectedIndex > 0) {
191
- this.state.selectedIndex--;
192
- this.update();
193
- return;
194
- }
195
- if (isNavigateDown(data) && this.state.selectedIndex < maxModelIndex) {
196
- this.state.selectedIndex++;
197
- this.update();
198
- return;
199
- }
200
- // Enter - select model
201
- if (isEnter(data) && providerModels.length > 0) {
202
- const selectedModel = providerModels[this.state.selectedIndex];
203
- const isCurrentProvider = selectedModel.provider === this.state.activeProvider;
204
- // Persist to settings
205
- setSetting('defaultProvider', selectedModel.provider);
206
- setSetting('defaultModel', selectedModel.id);
207
- this.close({
208
- modelChanged: selectedModel.id,
209
- provider: selectedModel.provider,
210
- requiresRestart: !isCurrentProvider,
211
- });
212
- return;
213
- }
214
- }
215
- }
216
- // =============================================================================
217
- // Export Function
218
- // =============================================================================
219
- export async function showModelOverlay(options = {}) {
220
- return new ModelOverlay(options).show();
221
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Model Warning Overlay
3
- *
4
- * Shows a warning when the user runs a command that requires
5
- * a larger model than they're currently using.
6
- *
7
- * Offers options to:
8
- * - Switch to a recommended model
9
- * - Use a simpler alternative command
10
- * - Continue anyway
11
- * - Cancel
12
- */
13
- import type { TierLevel } from '../utils/model-tiers.js';
14
- export interface ModelWarningOptions {
15
- /** The command being run (e.g., '/design') */
16
- command: string;
17
- /** Current model ID */
18
- currentModel: string;
19
- /** Current model's tier */
20
- currentTier: TierLevel;
21
- /** Suggested upgrade model (if available) */
22
- suggestedModel?: string;
23
- /** Alternative simpler command (e.g., '/sketch') */
24
- alternativeCommand?: string;
25
- }
26
- export type ModelWarningChoice = 'switch' | 'alternative' | 'continue' | 'cancel';
27
- /**
28
- * Show the model warning overlay and return the user's choice.
29
- */
30
- export declare function showModelWarningOverlay(options: ModelWarningOptions): Promise<ModelWarningChoice>;