@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
@@ -4,7 +4,7 @@
4
4
  * Creates persistent anchors from user input prefixed with "#".
5
5
  * Auto-detects priority based on keywords in the note.
6
6
  */
7
- import type { Agent } from '@compilr-dev/agents';
7
+ import type { Agent } from '@compilr-dev/sdk';
8
8
  import type { Footer } from '../ui/footer.js';
9
9
  export interface MemoryHandlerContext {
10
10
  agent: Agent;
@@ -8,6 +8,7 @@ import { addAnchor } from '../anchors/index.js';
8
8
  import { getActiveProject } from '../tools/project-db.js';
9
9
  import * as conversation from '../ui/conversation.js';
10
10
  import * as terminal from '../ui/terminal.js';
11
+ import { truncate } from '../ui/base/index.js';
11
12
  // =============================================================================
12
13
  // Handler
13
14
  // =============================================================================
@@ -52,7 +53,7 @@ export function handleMemoryInput(input, ctx) {
52
53
  ctx.footer.clearForOutput();
53
54
  const scope = activeProject ? `project "${activeProject.displayName || activeProject.name}"` : 'global';
54
55
  const priorityLabel = priority === 'info' ? '' : ` (${priority})`;
55
- conversation.printSuccess(`Saved${priorityLabel}: "${note.length > 50 ? note.slice(0, 47) + '...' : note}" → ${scope}`);
56
+ conversation.printSuccess(`Saved${priorityLabel}: "${truncate(note, 50)}" → ${scope}`);
56
57
  terminal.writeLine('');
57
58
  ctx.footer.forceRender();
58
59
  // Also add to agent's anchor manager if enabled (for current session)
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Models Module
3
+ *
4
+ * Model-related types and utilities.
5
+ */
6
+ export { type ModelTier, type TierInfo, type ProviderModelMap, TIER_INFO, MODEL_TIERS, getModelForTier, getTierMappings, getTierDisplayName, getShortModelName, getDefaultTierMappings, isValidTier, setTierOverride, clearTierOverride, } from './model-tiers.js';
7
+ export { type ModelValidationResult, validateModel, checkApiKeyStatus, } from './model-validation.js';
8
+ export { type ThinkingFormat, type ModelStatus, type ModelInfo, type ModelOptionForUI, MODEL_REGISTRY, getModelsForProvider, getModelsSortedForDisplay, getModelInfo, isKnownModel, isModelSupported, getThinkingFormat, getStatusIndicator, getStatusLabel, getDefaultModelForTier, areThinkingFormatsCompatible, shouldClearHistoryOnModelChange, getDefaultModelsForUI, getDefaultModelsForProvider, getAllModelsForProviderUI, getModelDisplayName, getModelDescription, getModelContextWindow, } from './model-registry.js';
9
+ export { type ProviderMetadata, type OthersProviderModel, PROVIDER_METADATA, TOGETHER_MODELS, GROQ_MODELS, FIREWORKS_MODELS, PERPLEXITY_MODELS, OPENROUTER_MODELS, getModelsForOthersProvider, getOthersProviders, getProviderMetadata, isOthersProvider, } from './providers.js';
10
+ export { type OllamaModelInfo, type OllamaModelsResult, listOllamaModels, clearOllamaModelsCache, isOllamaModelAvailable, formatModelSize, getOllamaModelDisplayName, getOllamaModelDescription, } from './ollama-models.js';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Models Module
3
+ *
4
+ * Model-related types and utilities.
5
+ */
6
+ export { TIER_INFO, MODEL_TIERS, getModelForTier, getTierMappings, getTierDisplayName, getShortModelName, getDefaultTierMappings, isValidTier, setTierOverride, clearTierOverride, } from './model-tiers.js';
7
+ export { validateModel, checkApiKeyStatus, } from './model-validation.js';
8
+ export { MODEL_REGISTRY, getModelsForProvider, getModelsSortedForDisplay, getModelInfo, isKnownModel, isModelSupported, getThinkingFormat, getStatusIndicator, getStatusLabel, getDefaultModelForTier, areThinkingFormatsCompatible, shouldClearHistoryOnModelChange,
9
+ // UI helpers
10
+ getDefaultModelsForUI, getDefaultModelsForProvider, getAllModelsForProviderUI, getModelDisplayName, getModelDescription, getModelContextWindow, } from './model-registry.js';
11
+ export { PROVIDER_METADATA, TOGETHER_MODELS, GROQ_MODELS, FIREWORKS_MODELS, PERPLEXITY_MODELS, OPENROUTER_MODELS, getModelsForOthersProvider, getOthersProviders, getProviderMetadata, isOthersProvider, } from './providers.js';
12
+ export { listOllamaModels, clearOllamaModelsCache, isOllamaModelAvailable, formatModelSize, getOllamaModelDisplayName, getOllamaModelDescription, } from './ollama-models.js';
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Model Registry — Re-exported from @compilr-dev/sdk
3
+ *
4
+ * The SDK owns the model registry data and core helpers.
5
+ * This file re-exports those and adds CLI-specific UI helpers.
6
+ */
7
+ import type { ProviderType } from './provider-types.js';
8
+ import type { ModelTier } from './types.js';
9
+ export { type ThinkingFormat, type ModelStatus, type ModelInfo, MODEL_REGISTRY, getModelsForProvider, getModelsSortedForDisplay, getModelInfo, isKnownModel, isModelSupported, getThinkingFormat, getStatusIndicator, getStatusLabel, getDefaultModelForTier, areThinkingFormatsCompatible, shouldClearHistoryOnModelChange, getModelContextWindow, getModelDisplayName, getModelDescription, } from '@compilr-dev/sdk';
10
+ /**
11
+ * Model option for UI overlays (config, model selector).
12
+ * Simplified interface for overlay display.
13
+ */
14
+ export interface ModelOptionForUI {
15
+ /** Model ID */
16
+ id: string;
17
+ /** Display name */
18
+ name: string;
19
+ /** Short description */
20
+ description: string;
21
+ /** Provider */
22
+ provider: ProviderType;
23
+ /** Tier (if this is a default model for a tier) */
24
+ tier?: ModelTier;
25
+ }
26
+ /**
27
+ * Get default models for each tier, formatted for UI overlays.
28
+ * Returns one model per tier per provider (fast, balanced, powerful).
29
+ */
30
+ export declare function getDefaultModelsForUI(): ModelOptionForUI[];
31
+ /**
32
+ * Get default models for a specific provider, formatted for UI overlays.
33
+ */
34
+ export declare function getDefaultModelsForProvider(provider: ProviderType): ModelOptionForUI[];
35
+ /**
36
+ * Get all models for a provider (including non-defaults), formatted for UI overlays.
37
+ */
38
+ export declare function getAllModelsForProviderUI(provider: ProviderType): ModelOptionForUI[];
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Model Registry — Re-exported from @compilr-dev/sdk
3
+ *
4
+ * The SDK owns the model registry data and core helpers.
5
+ * This file re-exports those and adds CLI-specific UI helpers.
6
+ */
7
+ // Re-export everything from SDK
8
+ export { MODEL_REGISTRY, getModelsForProvider, getModelsSortedForDisplay, getModelInfo, isKnownModel, isModelSupported, getThinkingFormat, getStatusIndicator, getStatusLabel, getDefaultModelForTier, areThinkingFormatsCompatible, shouldClearHistoryOnModelChange, getModelContextWindow, getModelDisplayName, getModelDescription, } from '@compilr-dev/sdk';
9
+ // Import for use in CLI-specific helpers below
10
+ import { MODEL_REGISTRY } from '@compilr-dev/sdk';
11
+ /**
12
+ * Get default models for each tier, formatted for UI overlays.
13
+ * Returns one model per tier per provider (fast, balanced, powerful).
14
+ */
15
+ export function getDefaultModelsForUI() {
16
+ const result = [];
17
+ // Get models with defaultTier set (these are the defaults)
18
+ const defaultModels = MODEL_REGISTRY.filter((m) => m.defaultTier !== undefined && m.status === 'supported');
19
+ // Sort by provider, then by tier order (fast → balanced → powerful)
20
+ const tierOrder = { fast: 0, balanced: 1, powerful: 2 };
21
+ const providerOrder = {
22
+ claude: 0,
23
+ openai: 1,
24
+ gemini: 2,
25
+ ollama: 3,
26
+ together: 4,
27
+ groq: 5,
28
+ fireworks: 6,
29
+ perplexity: 7,
30
+ openrouter: 8,
31
+ custom: 9,
32
+ };
33
+ defaultModels.sort((a, b) => {
34
+ const providerDiff = providerOrder[a.provider] - providerOrder[b.provider];
35
+ if (providerDiff !== 0)
36
+ return providerDiff;
37
+ return tierOrder[a.defaultTier ?? 'balanced'] - tierOrder[b.defaultTier ?? 'balanced'];
38
+ });
39
+ for (const model of defaultModels) {
40
+ result.push({
41
+ id: model.id,
42
+ name: model.displayName,
43
+ description: model.description,
44
+ provider: model.provider,
45
+ tier: model.defaultTier,
46
+ });
47
+ }
48
+ return result;
49
+ }
50
+ /**
51
+ * Get default models for a specific provider, formatted for UI overlays.
52
+ */
53
+ export function getDefaultModelsForProvider(provider) {
54
+ return getDefaultModelsForUI().filter(m => m.provider === provider);
55
+ }
56
+ /**
57
+ * Get all models for a provider (including non-defaults), formatted for UI overlays.
58
+ */
59
+ export function getAllModelsForProviderUI(provider) {
60
+ return MODEL_REGISTRY
61
+ .filter((m) => m.provider === provider && m.status === 'supported')
62
+ .map((m) => ({
63
+ id: m.id,
64
+ name: m.displayName,
65
+ description: m.description,
66
+ provider: m.provider,
67
+ tier: m.defaultTier,
68
+ }));
69
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Model Tiers — CLI wrapper over SDK's pure tier functions
3
+ *
4
+ * Adds settings integration: reads/writes user overrides from
5
+ * the CLI's settings store.
6
+ */
7
+ import type { ProviderType } from './provider-types.js';
8
+ import type { ModelTier, ProviderModelMap } from './types.js';
9
+ export { type ModelTier, type TierInfo, type ProviderModelMap, MODEL_TIERS, TIER_INFO, isValidTier, } from './types.js';
10
+ export { getTierDisplayName, getShortModelName, getDefaultTierMappings } from '@compilr-dev/sdk';
11
+ /**
12
+ * Get the model ID for a given tier and provider.
13
+ * Checks user overrides in settings first, then falls back to registry defaults.
14
+ */
15
+ export declare function getModelForTier(provider: ProviderType, tier: ModelTier): string;
16
+ /**
17
+ * Get all tier mappings for a provider (with user overrides applied).
18
+ */
19
+ export declare function getTierMappings(provider: ProviderType): ProviderModelMap;
20
+ /**
21
+ * Set a tier override for a provider.
22
+ * This saves the custom model to settings.
23
+ */
24
+ export declare function setTierOverride(provider: ProviderType, tier: ModelTier, model: string): void;
25
+ /**
26
+ * Clear a tier override for a provider (revert to default).
27
+ */
28
+ export declare function clearTierOverride(provider: ProviderType, tier: ModelTier): void;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Model Tiers — CLI wrapper over SDK's pure tier functions
3
+ *
4
+ * Adds settings integration: reads/writes user overrides from
5
+ * the CLI's settings store.
6
+ */
7
+ import { getSetting, setSetting } from '../settings/index.js';
8
+ import { getModelForTier as sdkGetModelForTier, getTierMappings as sdkGetTierMappings, } from '@compilr-dev/sdk';
9
+ // Re-export types and pure functions from SDK (via types.ts)
10
+ export { MODEL_TIERS, TIER_INFO, isValidTier, } from './types.js';
11
+ // Re-export pure functions that don't need settings
12
+ export { getTierDisplayName, getShortModelName, getDefaultTierMappings } from '@compilr-dev/sdk';
13
+ // =============================================================================
14
+ // CLI Functions (with settings integration)
15
+ // =============================================================================
16
+ /**
17
+ * Get user tier overrides from settings.
18
+ */
19
+ function getUserOverrides() {
20
+ return getSetting('modelTiers');
21
+ }
22
+ /**
23
+ * Get the model ID for a given tier and provider.
24
+ * Checks user overrides in settings first, then falls back to registry defaults.
25
+ */
26
+ export function getModelForTier(provider, tier) {
27
+ return sdkGetModelForTier(provider, tier, getUserOverrides());
28
+ }
29
+ /**
30
+ * Get all tier mappings for a provider (with user overrides applied).
31
+ */
32
+ export function getTierMappings(provider) {
33
+ return sdkGetTierMappings(provider, getUserOverrides());
34
+ }
35
+ /**
36
+ * Set a tier override for a provider.
37
+ * This saves the custom model to settings.
38
+ */
39
+ export function setTierOverride(provider, tier, model) {
40
+ const current = (getSetting('modelTiers') ?? {});
41
+ // Initialize provider if not exists
42
+ let providerOverrides = current[provider];
43
+ if (providerOverrides === undefined) {
44
+ providerOverrides = {};
45
+ current[provider] = providerOverrides;
46
+ }
47
+ // Set the override
48
+ providerOverrides[tier] = model;
49
+ setSetting('modelTiers', current);
50
+ }
51
+ /**
52
+ * Clear a tier override for a provider (revert to default).
53
+ */
54
+ export function clearTierOverride(provider, tier) {
55
+ const current = (getSetting('modelTiers') ?? {});
56
+ const providerOverrides = current[provider];
57
+ if (providerOverrides === undefined || !(tier in providerOverrides)) {
58
+ return; // Nothing to clear
59
+ }
60
+ // Remove the tier override
61
+ const { [tier]: _removed, ...remaining } = providerOverrides;
62
+ // Update or remove the provider entry
63
+ if (Object.keys(remaining).length === 0) {
64
+ const { [provider]: _removedProvider, ...remainingProviders } = current;
65
+ setSetting('modelTiers', remainingProviders);
66
+ }
67
+ else {
68
+ current[provider] = remaining;
69
+ setSetting('modelTiers', current);
70
+ }
71
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Model Validation
3
+ *
4
+ * Validates model names by making lightweight API calls.
5
+ * Uses direct HTTP requests to avoid SDK dependencies.
6
+ */
7
+ import type { ProviderType } from './provider-types.js';
8
+ export interface ModelValidationResult {
9
+ valid: boolean;
10
+ error?: string;
11
+ errorType?: 'no_api_key' | 'invalid_model' | 'network_error' | 'rate_limit' | 'unknown';
12
+ }
13
+ /**
14
+ * Validate a model by making a minimal API call.
15
+ * Returns result indicating if model is valid, with error details if not.
16
+ */
17
+ export declare function validateModel(provider: ProviderType, modelId: string): Promise<ModelValidationResult>;
18
+ /**
19
+ * Check if API key is set for a provider.
20
+ * Returns user-friendly hint if not set.
21
+ */
22
+ export declare function checkApiKeyStatus(provider: ProviderType): {
23
+ hasKey: boolean;
24
+ hint?: string;
25
+ };
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Model Validation
3
+ *
4
+ * Validates model names by making lightweight API calls.
5
+ * Uses direct HTTP requests to avoid SDK dependencies.
6
+ */
7
+ import { getApiKey, hasApiKey } from '../utils/credentials.js';
8
+ import { getSetting } from '../settings/index.js';
9
+ import { PROVIDER_METADATA } from './providers.js';
10
+ // =============================================================================
11
+ // Validation Functions
12
+ // =============================================================================
13
+ /**
14
+ * Validate a model by making a minimal API call.
15
+ * Returns result indicating if model is valid, with error details if not.
16
+ */
17
+ export async function validateModel(provider, modelId) {
18
+ switch (provider) {
19
+ case 'claude':
20
+ return validateAnthropicModel(modelId);
21
+ case 'openai':
22
+ return validateOpenAIModel(modelId);
23
+ case 'gemini':
24
+ return validateGeminiModel(modelId);
25
+ case 'ollama':
26
+ return validateOllamaModel(modelId);
27
+ default:
28
+ return { valid: false, error: 'Unknown provider', errorType: 'unknown' };
29
+ }
30
+ }
31
+ /**
32
+ * Validate an Anthropic/Claude model via HTTP.
33
+ */
34
+ async function validateAnthropicModel(modelId) {
35
+ const apiKey = getApiKey('anthropic');
36
+ if (!apiKey) {
37
+ return {
38
+ valid: false,
39
+ error: 'No Anthropic API key set. Run /keys to configure.',
40
+ errorType: 'no_api_key',
41
+ };
42
+ }
43
+ try {
44
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
45
+ method: 'POST',
46
+ headers: {
47
+ 'Content-Type': 'application/json',
48
+ 'x-api-key': apiKey,
49
+ 'anthropic-version': '2023-06-01',
50
+ },
51
+ body: JSON.stringify({
52
+ model: modelId,
53
+ max_tokens: 1,
54
+ messages: [{ role: 'user', content: 'hi' }],
55
+ }),
56
+ signal: AbortSignal.timeout(15000),
57
+ });
58
+ if (response.ok) {
59
+ return { valid: true };
60
+ }
61
+ const data = await response.json().catch(() => ({}));
62
+ return parseHttpError(response.status, data, 'Anthropic');
63
+ }
64
+ catch (error) {
65
+ return parseNetworkError(error, 'Anthropic');
66
+ }
67
+ }
68
+ /**
69
+ * Validate an OpenAI model via HTTP.
70
+ */
71
+ async function validateOpenAIModel(modelId) {
72
+ const apiKey = getApiKey('openai');
73
+ if (!apiKey) {
74
+ return {
75
+ valid: false,
76
+ error: 'No OpenAI API key set. Run /keys to configure.',
77
+ errorType: 'no_api_key',
78
+ };
79
+ }
80
+ try {
81
+ const response = await fetch('https://api.openai.com/v1/chat/completions', {
82
+ method: 'POST',
83
+ headers: {
84
+ 'Content-Type': 'application/json',
85
+ 'Authorization': `Bearer ${apiKey}`,
86
+ },
87
+ body: JSON.stringify({
88
+ model: modelId,
89
+ max_tokens: 1,
90
+ messages: [{ role: 'user', content: 'hi' }],
91
+ }),
92
+ signal: AbortSignal.timeout(15000),
93
+ });
94
+ if (response.ok) {
95
+ return { valid: true };
96
+ }
97
+ const data = await response.json().catch(() => ({}));
98
+ return parseHttpError(response.status, data, 'OpenAI');
99
+ }
100
+ catch (error) {
101
+ return parseNetworkError(error, 'OpenAI');
102
+ }
103
+ }
104
+ /**
105
+ * Validate a Gemini model via HTTP (using OpenAI-compatible endpoint).
106
+ */
107
+ async function validateGeminiModel(modelId) {
108
+ const apiKey = getApiKey('google');
109
+ if (!apiKey) {
110
+ return {
111
+ valid: false,
112
+ error: 'No Google API key set. Run /keys to configure.',
113
+ errorType: 'no_api_key',
114
+ };
115
+ }
116
+ try {
117
+ // Use OpenAI-compatible endpoint (same as @compilr-dev/agents)
118
+ const response = await fetch('https://generativelanguage.googleapis.com/v1beta/openai/chat/completions', {
119
+ method: 'POST',
120
+ headers: {
121
+ 'Content-Type': 'application/json',
122
+ 'Authorization': `Bearer ${apiKey}`,
123
+ },
124
+ body: JSON.stringify({
125
+ model: modelId,
126
+ max_tokens: 1,
127
+ messages: [{ role: 'user', content: 'hi' }],
128
+ }),
129
+ signal: AbortSignal.timeout(15000),
130
+ });
131
+ if (response.ok) {
132
+ return { valid: true };
133
+ }
134
+ const data = await response.json().catch(() => ({}));
135
+ return parseHttpError(response.status, data, 'Google');
136
+ }
137
+ catch (error) {
138
+ return parseNetworkError(error, 'Google');
139
+ }
140
+ }
141
+ /**
142
+ * Validate an Ollama model by checking if it exists locally.
143
+ * This doesn't make an LLM call - just lists available models.
144
+ */
145
+ async function validateOllamaModel(modelId) {
146
+ // Get base URL from settings first, then env var, then default
147
+ const settingUrl = getSetting('ollamaBaseUrl');
148
+ const ollamaHost = (typeof settingUrl === 'string' ? settingUrl : null)
149
+ ?? process.env.OLLAMA_BASE_URL
150
+ ?? process.env.OLLAMA_HOST
151
+ ?? 'http://localhost:11434';
152
+ try {
153
+ // List models to check if Ollama is running and model exists
154
+ const response = await fetch(`${ollamaHost}/api/tags`, {
155
+ method: 'GET',
156
+ signal: AbortSignal.timeout(5000),
157
+ });
158
+ if (!response.ok) {
159
+ return {
160
+ valid: false,
161
+ error: 'Cannot connect to Ollama. Is it running?',
162
+ errorType: 'network_error',
163
+ };
164
+ }
165
+ const data = await response.json();
166
+ const models = data.models || [];
167
+ // Check if the model exists (handle "model:tag" format)
168
+ const normalizedModelId = modelId.toLowerCase();
169
+ const modelExists = models.some(m => {
170
+ const name = m.name.toLowerCase();
171
+ return name === normalizedModelId ||
172
+ name.startsWith(normalizedModelId + ':') ||
173
+ normalizedModelId.startsWith(name.split(':')[0]);
174
+ });
175
+ if (modelExists) {
176
+ return { valid: true };
177
+ }
178
+ return {
179
+ valid: false,
180
+ error: `Model '${modelId}' not found locally. Run: ollama pull ${modelId}`,
181
+ errorType: 'invalid_model',
182
+ };
183
+ }
184
+ catch (error) {
185
+ if (error instanceof Error) {
186
+ if (error.name === 'AbortError' || error.message.includes('timeout')) {
187
+ return {
188
+ valid: false,
189
+ error: 'Ollama connection timed out. Is Ollama running?',
190
+ errorType: 'network_error',
191
+ };
192
+ }
193
+ if (error.message.includes('ECONNREFUSED') || error.message.includes('fetch failed')) {
194
+ return {
195
+ valid: false,
196
+ error: 'Cannot connect to Ollama. Start it with: ollama serve',
197
+ errorType: 'network_error',
198
+ };
199
+ }
200
+ }
201
+ return {
202
+ valid: false,
203
+ error: `Ollama error: ${error instanceof Error ? error.message : 'Unknown'}`,
204
+ errorType: 'unknown',
205
+ };
206
+ }
207
+ }
208
+ function parseHttpError(status, data, provider) {
209
+ const errorMsg = data.error?.message || '';
210
+ const errorType = data.error?.type || data.error?.code || '';
211
+ const lowerMsg = errorMsg.toLowerCase();
212
+ const lowerType = errorType.toLowerCase();
213
+ // Model not found
214
+ if (status === 404 ||
215
+ lowerMsg.includes('model') && (lowerMsg.includes('not found') || lowerMsg.includes('does not exist')) ||
216
+ lowerType.includes('invalid_model') || lowerType.includes('model_not_found')) {
217
+ return {
218
+ valid: false,
219
+ error: `Model not found. Check the model ID is correct for ${provider}.`,
220
+ errorType: 'invalid_model',
221
+ };
222
+ }
223
+ // Authentication error
224
+ if (status === 401 || status === 403 ||
225
+ lowerMsg.includes('api key') || lowerMsg.includes('authentication') || lowerMsg.includes('unauthorized')) {
226
+ return {
227
+ valid: false,
228
+ error: `${provider} API key is invalid or expired. Run /keys to update.`,
229
+ errorType: 'no_api_key',
230
+ };
231
+ }
232
+ // Rate limit
233
+ if (status === 429 || lowerType.includes('rate_limit')) {
234
+ return {
235
+ valid: false,
236
+ error: `${provider} rate limit hit. Model may be valid - try again later.`,
237
+ errorType: 'rate_limit',
238
+ };
239
+ }
240
+ // Generic error
241
+ return {
242
+ valid: false,
243
+ error: errorMsg || `${provider} returned error ${String(status)}`,
244
+ errorType: 'unknown',
245
+ };
246
+ }
247
+ function parseNetworkError(error, provider) {
248
+ if (error instanceof Error) {
249
+ if (error.name === 'AbortError' || error.message.includes('timeout')) {
250
+ return {
251
+ valid: false,
252
+ error: `${provider} request timed out. Check your connection.`,
253
+ errorType: 'network_error',
254
+ };
255
+ }
256
+ if (error.message.includes('fetch failed') || error.message.includes('ECONNREFUSED')) {
257
+ return {
258
+ valid: false,
259
+ error: `Cannot connect to ${provider}. Check your internet connection.`,
260
+ errorType: 'network_error',
261
+ };
262
+ }
263
+ }
264
+ return {
265
+ valid: false,
266
+ error: `${provider} error: ${error instanceof Error ? error.message : 'Unknown'}`,
267
+ errorType: 'unknown',
268
+ };
269
+ }
270
+ // =============================================================================
271
+ // API Key Status Check
272
+ // =============================================================================
273
+ /**
274
+ * Check if API key is set for a provider.
275
+ * Returns user-friendly hint if not set.
276
+ */
277
+ export function checkApiKeyStatus(provider) {
278
+ // Get provider metadata for correct credential key and env var
279
+ const metadata = PROVIDER_METADATA[provider];
280
+ if (!metadata.requiresKey) {
281
+ return { hasKey: true }; // Ollama and other local providers don't need API key
282
+ }
283
+ const keySet = hasApiKey(metadata.credentialKey);
284
+ if (!keySet) {
285
+ return {
286
+ hasKey: false,
287
+ hint: `Set ${metadata.envVar} or run /keys`,
288
+ };
289
+ }
290
+ return { hasKey: true };
291
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Ollama Model Auto-Detection
3
+ *
4
+ * Fetches available models from a running Ollama instance.
5
+ * Provides caching to avoid repeated API calls.
6
+ */
7
+ /**
8
+ * Information about an Ollama model as returned by the API.
9
+ */
10
+ export interface OllamaModelInfo {
11
+ /** Model name (e.g., "llama3.2:8b", "deepseek-r1:14b") */
12
+ name: string;
13
+ /** Model size in bytes */
14
+ size: number;
15
+ /** When the model was modified/pulled */
16
+ modifiedAt: string;
17
+ /** Model digest (hash) */
18
+ digest: string;
19
+ /** Model details (family, parameter size, quantization) */
20
+ details?: {
21
+ family?: string;
22
+ parameterSize?: string;
23
+ quantizationLevel?: string;
24
+ };
25
+ }
26
+ /**
27
+ * Result of listing Ollama models.
28
+ */
29
+ export interface OllamaModelsResult {
30
+ /** Whether the fetch was successful */
31
+ success: boolean;
32
+ /** Available models (empty if failed) */
33
+ models: OllamaModelInfo[];
34
+ /** Error message if failed */
35
+ error?: string;
36
+ /** Whether Ollama is running */
37
+ ollamaRunning: boolean;
38
+ /** Timestamp of the fetch (for cache management) */
39
+ fetchedAt: number;
40
+ }
41
+ /**
42
+ * Clear the cache (useful for testing or forcing refresh).
43
+ */
44
+ export declare function clearOllamaModelsCache(): void;
45
+ /**
46
+ * List all locally available Ollama models.
47
+ *
48
+ * Features:
49
+ * - Caches results for 30 seconds to avoid repeated API calls
50
+ * - Returns gracefully with error info when Ollama is not running
51
+ * - Parses model metadata (size, family, quantization)
52
+ *
53
+ * @param forceRefresh - If true, bypasses the cache
54
+ */
55
+ export declare function listOllamaModels(forceRefresh?: boolean): Promise<OllamaModelsResult>;
56
+ /**
57
+ * Check if a specific model is available locally.
58
+ * Uses the cached model list for efficiency.
59
+ */
60
+ export declare function isOllamaModelAvailable(modelId: string): Promise<boolean>;
61
+ /**
62
+ * Format model size for display (e.g., "4.1 GB").
63
+ */
64
+ export declare function formatModelSize(bytes: number): string;
65
+ /**
66
+ * Get a friendly display name for a model.
67
+ * Capitalizes the base name and formats the tag.
68
+ */
69
+ export declare function getOllamaModelDisplayName(name: string): string;
70
+ /**
71
+ * Get a short description for a model based on its metadata.
72
+ */
73
+ export declare function getOllamaModelDescription(model: OllamaModelInfo): string;