@compilr-dev/cli 0.5.0 → 0.5.2

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 (587) hide show
  1. package/LICENSE +108 -0
  2. package/README.md +237 -69
  3. package/dist/.tsbuildinfo.app +1 -0
  4. package/dist/.tsbuildinfo.data +1 -0
  5. package/dist/.tsbuildinfo.domain +1 -0
  6. package/dist/.tsbuildinfo.foundation +1 -0
  7. package/dist/agent.d.ts +61 -4
  8. package/dist/agent.js +241 -245
  9. package/dist/anchors/index.d.ts +1 -1
  10. package/dist/anchors/index.js +1 -1
  11. package/dist/anchors/project-anchors.d.ts +2 -2
  12. package/dist/anchors/project-anchors.js +1 -1
  13. package/dist/auth/api-client.d.ts +124 -0
  14. package/dist/auth/api-client.js +261 -0
  15. package/dist/auth/index.d.ts +172 -0
  16. package/dist/auth/index.js +545 -0
  17. package/dist/auth/storage.d.ts +52 -0
  18. package/dist/auth/storage.js +118 -0
  19. package/dist/changelog/index.d.ts +16 -0
  20. package/dist/changelog/index.js +24 -0
  21. package/dist/changelog/releases.d.ts +17 -0
  22. package/dist/changelog/releases.js +63 -0
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.js +286 -81
  28. package/dist/commands-v2/handlers/core.d.ts +1 -0
  29. package/dist/commands-v2/handlers/core.js +133 -8
  30. package/dist/commands-v2/handlers/debug.js +18 -0
  31. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  32. package/dist/commands-v2/handlers/delegations.js +29 -0
  33. package/dist/commands-v2/handlers/files.d.ts +8 -0
  34. package/dist/commands-v2/handlers/files.js +162 -0
  35. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  36. package/dist/commands-v2/handlers/filter.js +130 -0
  37. package/dist/commands-v2/handlers/games.d.ts +7 -0
  38. package/dist/commands-v2/handlers/games.js +57 -0
  39. package/dist/commands-v2/handlers/index.d.ts +13 -0
  40. package/dist/commands-v2/handlers/index.js +39 -0
  41. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  42. package/dist/commands-v2/handlers/mcp.js +39 -0
  43. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  44. package/dist/commands-v2/handlers/notifications.js +34 -0
  45. package/dist/commands-v2/handlers/project.js +295 -31
  46. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  47. package/dist/commands-v2/handlers/reset.js +118 -0
  48. package/dist/commands-v2/handlers/session.d.ts +161 -0
  49. package/dist/commands-v2/handlers/session.js +805 -0
  50. package/dist/commands-v2/handlers/settings.d.ts +2 -0
  51. package/dist/commands-v2/handlers/settings.js +217 -35
  52. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  53. package/dist/commands-v2/handlers/tasks.js +36 -0
  54. package/dist/commands-v2/handlers/team.d.ts +9 -0
  55. package/dist/commands-v2/handlers/team.js +549 -0
  56. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  57. package/dist/commands-v2/handlers/terminals.js +34 -0
  58. package/dist/commands-v2/index.d.ts +3 -2
  59. package/dist/commands-v2/index.js +4 -1
  60. package/dist/commands-v2/registry.d.ts +15 -0
  61. package/dist/commands-v2/registry.js +34 -0
  62. package/dist/commands-v2/types.d.ts +81 -3
  63. package/dist/commands.js +13 -0
  64. package/dist/compilr-diff-companion.vsix +0 -0
  65. package/dist/db/index.js +98 -4
  66. package/dist/db/repositories/document-repository.d.ts +2 -0
  67. package/dist/db/repositories/document-repository.js +6 -1
  68. package/dist/db/repositories/index.d.ts +2 -0
  69. package/dist/db/repositories/index.js +1 -0
  70. package/dist/db/repositories/plan-repository.d.ts +101 -0
  71. package/dist/db/repositories/plan-repository.js +275 -0
  72. package/dist/db/repositories/project-repository.d.ts +6 -0
  73. package/dist/db/repositories/project-repository.js +41 -0
  74. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  75. package/dist/db/repositories/work-item-repository.js +69 -4
  76. package/dist/db/schema.d.ts +40 -3
  77. package/dist/db/schema.js +66 -3
  78. package/dist/episodes/index.d.ts +20 -0
  79. package/dist/episodes/index.js +27 -0
  80. package/dist/episodes/recorder.d.ts +51 -0
  81. package/dist/episodes/recorder.js +195 -0
  82. package/dist/episodes/significant-work.d.ts +21 -0
  83. package/dist/episodes/significant-work.js +56 -0
  84. package/dist/episodes/store.d.ts +38 -0
  85. package/dist/episodes/store.js +199 -0
  86. package/dist/episodes/types.d.ts +35 -0
  87. package/dist/episodes/types.js +6 -0
  88. package/dist/episodes/work-at-risk.d.ts +12 -0
  89. package/dist/episodes/work-at-risk.js +38 -0
  90. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  91. package/dist/episodes/work-summary-anchor.js +73 -0
  92. package/dist/games/coins.d.ts +66 -0
  93. package/dist/games/coins.js +165 -0
  94. package/dist/games/game-base.d.ts +84 -0
  95. package/dist/games/game-base.js +204 -0
  96. package/dist/games/index.d.ts +16 -0
  97. package/dist/games/index.js +49 -0
  98. package/dist/games/scores.d.ts +69 -0
  99. package/dist/games/scores.js +191 -0
  100. package/dist/games/tetris/board.d.ts +59 -0
  101. package/dist/games/tetris/board.js +170 -0
  102. package/dist/games/tetris/index.d.ts +109 -0
  103. package/dist/games/tetris/index.js +610 -0
  104. package/dist/games/tetris/pieces.d.ts +44 -0
  105. package/dist/games/tetris/pieces.js +271 -0
  106. package/dist/games/tetris/renderer.d.ts +26 -0
  107. package/dist/games/tetris/renderer.js +77 -0
  108. package/dist/guide/guide-content.d.ts +23 -0
  109. package/dist/guide/guide-content.js +196 -0
  110. package/dist/guide/index.d.ts +8 -0
  111. package/dist/guide/index.js +7 -0
  112. package/dist/guide/shared-content.d.ts +37 -0
  113. package/dist/guide/shared-content.js +1272 -0
  114. package/dist/guide/tutorial-helpers.d.ts +57 -0
  115. package/dist/guide/tutorial-helpers.js +147 -0
  116. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  117. package/dist/handlers/ask-user-handlers.js +104 -0
  118. package/dist/handlers/delegation-handlers.d.ts +34 -0
  119. package/dist/handlers/delegation-handlers.js +291 -0
  120. package/dist/handlers/permission-handler.d.ts +30 -0
  121. package/dist/handlers/permission-handler.js +205 -0
  122. package/dist/index.d.ts +11 -1
  123. package/dist/index.js +448 -271
  124. package/dist/input-handlers/memory-handler.d.ts +1 -1
  125. package/dist/input-handlers/memory-handler.js +2 -1
  126. package/dist/models/index.d.ts +10 -0
  127. package/dist/models/index.js +12 -0
  128. package/dist/models/model-registry.d.ts +38 -0
  129. package/dist/models/model-registry.js +69 -0
  130. package/dist/models/model-tiers.d.ts +28 -0
  131. package/dist/models/model-tiers.js +71 -0
  132. package/dist/models/model-validation.d.ts +25 -0
  133. package/dist/models/model-validation.js +291 -0
  134. package/dist/models/ollama-models.d.ts +73 -0
  135. package/dist/models/ollama-models.js +178 -0
  136. package/dist/models/provider-types.d.ts +6 -0
  137. package/dist/models/provider-types.js +1 -0
  138. package/dist/models/providers.d.ts +35 -0
  139. package/dist/models/providers.js +58 -0
  140. package/dist/models/types.d.ts +4 -0
  141. package/dist/models/types.js +4 -0
  142. package/dist/multi-agent/activity.d.ts +21 -0
  143. package/dist/multi-agent/activity.js +34 -0
  144. package/dist/multi-agent/agent-selection.d.ts +55 -0
  145. package/dist/multi-agent/agent-selection.js +90 -0
  146. package/dist/multi-agent/artifacts.d.ts +197 -0
  147. package/dist/multi-agent/artifacts.js +379 -0
  148. package/dist/multi-agent/checkpointer.d.ts +138 -0
  149. package/dist/multi-agent/checkpointer.js +471 -0
  150. package/dist/multi-agent/collision-utils.d.ts +16 -0
  151. package/dist/multi-agent/collision-utils.js +28 -0
  152. package/dist/multi-agent/context-resolver.d.ts +97 -0
  153. package/dist/multi-agent/context-resolver.js +316 -0
  154. package/dist/multi-agent/custom-agents.d.ts +83 -0
  155. package/dist/multi-agent/custom-agents.js +227 -0
  156. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  157. package/dist/multi-agent/delegation-tracker.js +243 -0
  158. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  159. package/dist/multi-agent/file-lock-hook.js +97 -0
  160. package/dist/multi-agent/file-locks.d.ts +58 -0
  161. package/dist/multi-agent/file-locks.js +194 -0
  162. package/dist/multi-agent/index.d.ts +24 -0
  163. package/dist/multi-agent/index.js +30 -0
  164. package/dist/multi-agent/mention-parser.d.ts +64 -0
  165. package/dist/multi-agent/mention-parser.js +146 -0
  166. package/dist/multi-agent/notification-manager.d.ts +84 -0
  167. package/dist/multi-agent/notification-manager.js +224 -0
  168. package/dist/multi-agent/pending-requests.d.ts +122 -0
  169. package/dist/multi-agent/pending-requests.js +155 -0
  170. package/dist/multi-agent/session-registry.d.ts +139 -0
  171. package/dist/multi-agent/session-registry.js +514 -0
  172. package/dist/multi-agent/shared-context.d.ts +293 -0
  173. package/dist/multi-agent/shared-context.js +671 -0
  174. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  175. package/dist/multi-agent/skill-requirements.js +178 -0
  176. package/dist/multi-agent/task-assignment.d.ts +69 -0
  177. package/dist/multi-agent/task-assignment.js +123 -0
  178. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  179. package/dist/multi-agent/task-suggestion.js +72 -0
  180. package/dist/multi-agent/team-agent.d.ts +201 -0
  181. package/dist/multi-agent/team-agent.js +488 -0
  182. package/dist/multi-agent/team.d.ts +286 -0
  183. package/dist/multi-agent/team.js +610 -0
  184. package/dist/multi-agent/tool-config.d.ts +110 -0
  185. package/dist/multi-agent/tool-config.js +661 -0
  186. package/dist/multi-agent/types.d.ts +211 -0
  187. package/dist/multi-agent/types.js +617 -0
  188. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  189. package/dist/prompts/plan-mode-prompt.js +95 -0
  190. package/dist/repl-helpers.js +5 -2
  191. package/dist/repl-v2.d.ts +401 -2
  192. package/dist/repl-v2.js +2588 -65
  193. package/dist/session/index.d.ts +6 -0
  194. package/dist/session/index.js +6 -0
  195. package/dist/session/project-session-manager.d.ts +158 -0
  196. package/dist/session/project-session-manager.js +650 -0
  197. package/dist/settings/index.d.ts +133 -13
  198. package/dist/settings/index.js +329 -24
  199. package/dist/settings/mcp-config.d.ts +76 -0
  200. package/dist/settings/mcp-config.js +143 -0
  201. package/dist/settings/paths.d.ts +4 -0
  202. package/dist/settings/paths.js +6 -0
  203. package/dist/shared-handlers.d.ts +62 -0
  204. package/dist/shared-handlers.js +48 -0
  205. package/dist/system-prompt/builder.d.ts +5 -0
  206. package/dist/system-prompt/builder.js +4 -0
  207. package/dist/system-prompt/index.d.ts +18 -0
  208. package/dist/system-prompt/index.js +18 -0
  209. package/dist/system-prompt/modules.d.ts +5 -0
  210. package/dist/system-prompt/modules.js +4 -0
  211. package/dist/tabbed-menu.js +2 -1
  212. package/dist/templates/compilr-md-import.d.ts +16 -0
  213. package/dist/templates/compilr-md-import.js +241 -0
  214. package/dist/templates/compilr-md.js +10 -61
  215. package/dist/templates/config-json.d.ts +1 -25
  216. package/dist/templates/index.d.ts +2 -0
  217. package/dist/templates/index.js +34 -73
  218. package/dist/tool-names.d.ts +113 -0
  219. package/dist/tool-names.js +239 -0
  220. package/dist/tools/ask-user-simple.d.ts +1 -1
  221. package/dist/tools/ask-user-simple.js +2 -1
  222. package/dist/tools/ask-user.d.ts +1 -1
  223. package/dist/tools/ask-user.js +2 -1
  224. package/dist/tools/backlog.d.ts +2 -2
  225. package/dist/tools/backlog.js +1 -1
  226. package/dist/tools/db-tools.d.ts +13 -61
  227. package/dist/tools/db-tools.js +12 -13
  228. package/dist/tools/delegate-background.d.ts +27 -0
  229. package/dist/tools/delegate-background.js +115 -0
  230. package/dist/tools/delegate.d.ts +22 -0
  231. package/dist/tools/delegate.js +97 -0
  232. package/dist/tools/delegation-status.d.ts +16 -0
  233. package/dist/tools/delegation-status.js +128 -0
  234. package/dist/tools/guide-tool.d.ts +12 -0
  235. package/dist/tools/guide-tool.js +59 -0
  236. package/dist/tools/handoff.d.ts +25 -0
  237. package/dist/tools/handoff.js +99 -0
  238. package/dist/tools/meta-tools.d.ts +26 -0
  239. package/dist/tools/meta-tools.js +47 -0
  240. package/dist/tools/platform-adapter.d.ts +35 -0
  241. package/dist/tools/platform-adapter.js +404 -0
  242. package/dist/tools/project-db.d.ts +5 -73
  243. package/dist/tools/project-db.js +5 -336
  244. package/dist/tools.d.ts +67 -2
  245. package/dist/tools.js +240 -48
  246. package/dist/ui/autocomplete-controller.d.ts +42 -0
  247. package/dist/ui/autocomplete-controller.js +384 -0
  248. package/dist/ui/base/index.d.ts +1 -1
  249. package/dist/ui/base/index.js +1 -1
  250. package/dist/ui/base/overlay-base-v2.d.ts +10 -0
  251. package/dist/ui/base/overlay-base-v2.js +14 -0
  252. package/dist/ui/base/render-utils.d.ts +19 -0
  253. package/dist/ui/base/render-utils.js +25 -0
  254. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
  255. package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
  256. package/dist/ui/constants/labels.d.ts +14 -0
  257. package/dist/ui/constants/labels.js +52 -0
  258. package/dist/ui/conversation-store.d.ts +55 -0
  259. package/dist/ui/conversation-store.js +107 -0
  260. package/dist/ui/conversation.js +11 -13
  261. package/dist/ui/diff.d.ts +7 -1
  262. package/dist/ui/diff.js +85 -48
  263. package/dist/ui/ephemeral.js +3 -9
  264. package/dist/ui/file-autocomplete.d.ts +24 -0
  265. package/dist/ui/file-autocomplete.js +56 -0
  266. package/dist/ui/footer-renderer.d.ts +69 -0
  267. package/dist/ui/footer-renderer.js +431 -0
  268. package/dist/ui/footer.d.ts +74 -7
  269. package/dist/ui/footer.js +173 -16
  270. package/dist/ui/input-controller.d.ts +51 -0
  271. package/dist/ui/input-controller.js +176 -0
  272. package/dist/ui/input-prompt.d.ts +19 -0
  273. package/dist/ui/input-prompt.js +206 -14
  274. package/dist/ui/keyboard-handler.d.ts +57 -0
  275. package/dist/ui/keyboard-handler.js +557 -0
  276. package/dist/ui/live-region-facade.d.ts +42 -0
  277. package/dist/ui/live-region-facade.js +205 -0
  278. package/dist/ui/live-region.d.ts +0 -4
  279. package/dist/ui/live-region.js +6 -14
  280. package/dist/ui/mascot/renderer.d.ts +1 -1
  281. package/dist/ui/mascot/renderer.js +37 -2
  282. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  283. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  284. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  285. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  286. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  287. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  288. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  289. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  290. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  291. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  292. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  293. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  294. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  295. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  296. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  297. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  298. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  299. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  300. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  301. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  302. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  303. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  304. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  305. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  306. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  307. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  308. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  309. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  310. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  311. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  312. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  313. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  314. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  315. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  316. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  317. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  318. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  319. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  320. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  321. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  322. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  323. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  324. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  325. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  326. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  327. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  328. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  329. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  330. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  331. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  332. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  333. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  334. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  335. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  336. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  337. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  338. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  339. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  340. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  341. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  342. package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
  343. package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
  344. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  345. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  346. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  347. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  348. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
  349. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  350. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  351. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
  352. package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
  353. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  354. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  355. package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
  356. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
  357. package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
  358. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  359. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  360. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
  361. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
  362. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  363. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  364. package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
  365. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
  366. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
  367. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  368. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  369. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  370. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  371. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
  372. package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
  373. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  374. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  375. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  376. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  377. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
  378. package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
  379. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
  380. package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
  381. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  382. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  383. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  384. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  385. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  386. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  387. package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
  388. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  389. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  390. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  391. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  392. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  393. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  394. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
  395. package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
  396. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  397. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  398. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  399. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  400. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  401. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  402. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  403. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  404. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  405. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  406. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  407. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  408. package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
  409. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
  410. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
  411. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
  412. package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
  413. package/dist/ui/overlay/index.d.ts +20 -1
  414. package/dist/ui/overlay/index.js +19 -0
  415. package/dist/ui/overlay/types.d.ts +5 -0
  416. package/dist/ui/overlay-manager.d.ts +43 -0
  417. package/dist/ui/overlay-manager.js +238 -0
  418. package/dist/ui/overlays.js +4 -16
  419. package/dist/ui/permission-overlay.js +6 -5
  420. package/dist/ui/status-bar-controller.d.ts +33 -0
  421. package/dist/ui/status-bar-controller.js +99 -0
  422. package/dist/ui/subagent-renderer.js +3 -19
  423. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  424. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  425. package/dist/ui/terminal-line-builders.d.ts +17 -0
  426. package/dist/ui/terminal-line-builders.js +42 -0
  427. package/dist/ui/terminal-render-item.d.ts +16 -0
  428. package/dist/ui/terminal-render-item.js +267 -0
  429. package/dist/ui/terminal-renderer.d.ts +7 -8
  430. package/dist/ui/terminal-renderer.js +7 -8
  431. package/dist/ui/terminal-types.d.ts +179 -0
  432. package/dist/ui/terminal-types.js +34 -0
  433. package/dist/ui/terminal-ui.d.ts +144 -276
  434. package/dist/ui/terminal-ui.js +384 -1861
  435. package/dist/ui/todo-zone.d.ts +19 -1
  436. package/dist/ui/todo-zone.js +71 -13
  437. package/dist/ui/tool-formatters.js +696 -1
  438. package/dist/ui/turn-metrics.d.ts +56 -0
  439. package/dist/ui/turn-metrics.js +75 -0
  440. package/dist/ui/types.d.ts +28 -0
  441. package/dist/ui/types.js +1 -0
  442. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  443. package/dist/ui/vscode-diff-ipc.js +385 -0
  444. package/dist/utils/credentials.d.ts +24 -5
  445. package/dist/utils/credentials.js +123 -9
  446. package/dist/utils/format-tokens.d.ts +13 -0
  447. package/dist/utils/format-tokens.js +18 -0
  448. package/dist/utils/git-config.d.ts +26 -0
  449. package/dist/utils/git-config.js +54 -0
  450. package/dist/utils/message-utils.d.ts +61 -0
  451. package/dist/utils/message-utils.js +72 -0
  452. package/dist/utils/model-tiers.d.ts +8 -1
  453. package/dist/utils/model-tiers.js +38 -16
  454. package/dist/utils/open-browser.d.ts +5 -0
  455. package/dist/utils/open-browser.js +32 -0
  456. package/dist/utils/path-safety.js +3 -2
  457. package/dist/utils/project-detection.d.ts +58 -0
  458. package/dist/utils/project-detection.js +424 -0
  459. package/dist/utils/project-memory.js +2 -1
  460. package/dist/utils/project-status.d.ts +2 -2
  461. package/dist/utils/startup-perf.d.ts +18 -0
  462. package/dist/utils/startup-perf.js +60 -0
  463. package/dist/utils/token-tracker.d.ts +62 -0
  464. package/dist/utils/token-tracker.js +150 -0
  465. package/dist/utils/token-types.d.ts +23 -0
  466. package/dist/utils/token-types.js +18 -0
  467. package/dist/utils/types/config-types.d.ts +32 -0
  468. package/dist/utils/types/config-types.js +8 -0
  469. package/dist/utils/update-checker.d.ts +28 -0
  470. package/dist/utils/update-checker.js +106 -0
  471. package/dist/utils/version.d.ts +7 -0
  472. package/dist/utils/version.js +10 -0
  473. package/dist/utils/vscode-detect.d.ts +39 -0
  474. package/dist/utils/vscode-detect.js +137 -0
  475. package/package.json +27 -13
  476. package/dist/commands/handler-types.d.ts +0 -68
  477. package/dist/commands/handler-types.js +0 -8
  478. package/dist/commands/handlers/agent-commands.d.ts +0 -13
  479. package/dist/commands/handlers/agent-commands.js +0 -305
  480. package/dist/commands/handlers/design-commands.d.ts +0 -15
  481. package/dist/commands/handlers/design-commands.js +0 -334
  482. package/dist/commands/handlers/index.d.ts +0 -20
  483. package/dist/commands/handlers/index.js +0 -43
  484. package/dist/commands/handlers/overlay-commands.d.ts +0 -21
  485. package/dist/commands/handlers/overlay-commands.js +0 -287
  486. package/dist/commands/handlers/project-commands.d.ts +0 -11
  487. package/dist/commands/handlers/project-commands.js +0 -167
  488. package/dist/commands/handlers/simple-commands.d.ts +0 -19
  489. package/dist/commands/handlers/simple-commands.js +0 -144
  490. package/dist/commands/registry.d.ts +0 -50
  491. package/dist/commands/registry.js +0 -75
  492. package/dist/index.old.d.ts +0 -7
  493. package/dist/index.old.js +0 -1014
  494. package/dist/repl.d.ts +0 -149
  495. package/dist/repl.js +0 -1151
  496. package/dist/templates/claude-md.d.ts +0 -7
  497. package/dist/templates/claude-md.js +0 -189
  498. package/dist/test-autocomplete.d.ts +0 -7
  499. package/dist/test-autocomplete.js +0 -85
  500. package/dist/test-tabbed-menu.d.ts +0 -7
  501. package/dist/test-tabbed-menu.js +0 -25
  502. package/dist/tool-selector.d.ts +0 -71
  503. package/dist/tool-selector.js +0 -184
  504. package/dist/tools/anchor-tools.d.ts +0 -31
  505. package/dist/tools/anchor-tools.js +0 -255
  506. package/dist/tools/backlog-wrappers.d.ts +0 -54
  507. package/dist/tools/backlog-wrappers.js +0 -338
  508. package/dist/tools/document-db.d.ts +0 -43
  509. package/dist/tools/document-db.js +0 -220
  510. package/dist/tools/workitem-db.d.ts +0 -103
  511. package/dist/tools/workitem-db.js +0 -549
  512. package/dist/ui/agents-overlay-v2.d.ts +0 -43
  513. package/dist/ui/agents-overlay-v2.js +0 -809
  514. package/dist/ui/agents-overlay.d.ts +0 -12
  515. package/dist/ui/agents-overlay.js +0 -863
  516. package/dist/ui/anchors-overlay.d.ts +0 -12
  517. package/dist/ui/anchors-overlay.js +0 -775
  518. package/dist/ui/arch-type-overlay.d.ts +0 -15
  519. package/dist/ui/arch-type-overlay.js +0 -201
  520. package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
  521. package/dist/ui/ask-user-overlay-v2.js +0 -555
  522. package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
  523. package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
  524. package/dist/ui/backlog-overlay.d.ts +0 -32
  525. package/dist/ui/backlog-overlay.js +0 -652
  526. package/dist/ui/commands-overlay-v2.d.ts +0 -33
  527. package/dist/ui/commands-overlay-v2.js +0 -441
  528. package/dist/ui/commands-overlay.d.ts +0 -16
  529. package/dist/ui/commands-overlay.js +0 -439
  530. package/dist/ui/config-overlay.d.ts +0 -35
  531. package/dist/ui/config-overlay.js +0 -707
  532. package/dist/ui/docs-overlay.d.ts +0 -17
  533. package/dist/ui/docs-overlay.js +0 -303
  534. package/dist/ui/footer-v2.d.ts +0 -222
  535. package/dist/ui/footer-v2.js +0 -1349
  536. package/dist/ui/help-overlay-v2.d.ts +0 -34
  537. package/dist/ui/help-overlay-v2.js +0 -309
  538. package/dist/ui/help-overlay.d.ts +0 -16
  539. package/dist/ui/help-overlay.js +0 -316
  540. package/dist/ui/init-overlay-v2.d.ts +0 -34
  541. package/dist/ui/init-overlay-v2.js +0 -600
  542. package/dist/ui/init-overlay.d.ts +0 -34
  543. package/dist/ui/init-overlay.js +0 -604
  544. package/dist/ui/input-prompt-v2.d.ts +0 -180
  545. package/dist/ui/input-prompt-v2.js +0 -999
  546. package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
  547. package/dist/ui/iteration-limit-overlay-v2.js +0 -114
  548. package/dist/ui/keys-overlay-v2.d.ts +0 -41
  549. package/dist/ui/keys-overlay-v2.js +0 -248
  550. package/dist/ui/mascot-overlay-v2.d.ts +0 -41
  551. package/dist/ui/mascot-overlay-v2.js +0 -138
  552. package/dist/ui/mascot-overlay.d.ts +0 -21
  553. package/dist/ui/mascot-overlay.js +0 -146
  554. package/dist/ui/model-overlay-v2.d.ts +0 -49
  555. package/dist/ui/model-overlay-v2.js +0 -118
  556. package/dist/ui/model-overlay.d.ts +0 -27
  557. package/dist/ui/model-overlay.js +0 -221
  558. package/dist/ui/model-warning-overlay.d.ts +0 -30
  559. package/dist/ui/model-warning-overlay.js +0 -169
  560. package/dist/ui/new-overlay.d.ts +0 -34
  561. package/dist/ui/new-overlay.js +0 -604
  562. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
  563. package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
  564. package/dist/ui/overlay/overlay-types.d.ts +0 -128
  565. package/dist/ui/overlay/overlay-types.js +0 -22
  566. package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
  567. package/dist/ui/overlays/help-overlay-v2.js +0 -198
  568. package/dist/ui/overlays/index.d.ts +0 -11
  569. package/dist/ui/overlays/index.js +0 -11
  570. package/dist/ui/permission-overlay-v2.d.ts +0 -36
  571. package/dist/ui/permission-overlay-v2.js +0 -380
  572. package/dist/ui/projects-overlay.d.ts +0 -19
  573. package/dist/ui/projects-overlay.js +0 -484
  574. package/dist/ui/theme-overlay-v2.d.ts +0 -42
  575. package/dist/ui/theme-overlay-v2.js +0 -135
  576. package/dist/ui/theme-overlay.d.ts +0 -24
  577. package/dist/ui/theme-overlay.js +0 -127
  578. package/dist/ui/tools-overlay-v2.d.ts +0 -47
  579. package/dist/ui/tools-overlay-v2.js +0 -218
  580. package/dist/ui/tools-overlay.d.ts +0 -34
  581. package/dist/ui/tools-overlay.js +0 -230
  582. package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
  583. package/dist/ui/tutorial-overlay-v2.js +0 -1035
  584. package/dist/ui/tutorial-overlay.d.ts +0 -11
  585. package/dist/ui/tutorial-overlay.js +0 -1034
  586. package/dist/ui/workflow-overlay.d.ts +0 -22
  587. package/dist/ui/workflow-overlay.js +0 -636
@@ -6,11 +6,16 @@
6
6
  * - Machine-specific identifiers (hostname, username)
7
7
  * - A random "mk" value stored in settings.json
8
8
  */
9
- export type ProviderKey = 'anthropic' | 'openai' | 'google' | 'ollama';
9
+ export type ProviderKey = 'anthropic' | 'openai' | 'google' | 'ollama' | 'together' | 'groq' | 'fireworks' | 'perplexity' | 'openrouter';
10
10
  export interface StoredCredentials {
11
11
  anthropic?: string;
12
12
  openai?: string;
13
13
  google?: string;
14
+ together?: string;
15
+ groq?: string;
16
+ fireworks?: string;
17
+ perplexity?: string;
18
+ openrouter?: string;
14
19
  }
15
20
  /**
16
21
  * Get API key for a provider
@@ -39,17 +44,31 @@ export declare function getMaskedKey(provider: ProviderKey): string | null;
39
44
  */
40
45
  export declare function isKeyFromEnv(provider: ProviderKey): boolean;
41
46
  /**
42
- * Get all provider statuses
47
+ * Provider category for grouping in UI
48
+ */
49
+ export type ProviderCategory = 'primary' | 'local' | 'others';
50
+ /**
51
+ * Provider status with category information
43
52
  */
44
- export declare function getAllProviderStatuses(): Array<{
53
+ export interface ProviderStatus {
45
54
  provider: ProviderKey;
46
55
  name: string;
47
56
  hasKey: boolean;
48
57
  masked: string | null;
49
58
  fromEnv: boolean;
50
59
  keyUrl: string;
51
- }>;
60
+ category: ProviderCategory;
61
+ endpoint?: string;
62
+ }
63
+ /**
64
+ * Get all provider statuses
65
+ */
66
+ export declare function getAllProviderStatuses(): ProviderStatus[];
67
+ /**
68
+ * Get provider statuses filtered by category
69
+ */
70
+ export declare function getProvidersByCategory(category: ProviderCategory): ProviderStatus[];
52
71
  /**
53
72
  * Map provider type from settings to credential provider key
54
73
  */
55
- export declare function settingsProviderToCredentialKey(provider: 'auto' | 'claude' | 'openai' | 'gemini' | 'ollama'): ProviderKey;
74
+ export declare function settingsProviderToCredentialKey(provider: 'auto' | 'claude' | 'openai' | 'gemini' | 'ollama' | 'together' | 'groq' | 'fireworks' | 'perplexity' | 'openrouter' | 'custom'): ProviderKey;
@@ -18,6 +18,8 @@ const SETTINGS_FILE = path.join(CONFIG_DIR, 'settings.json');
18
18
  const CREDENTIALS_FILE = path.join(CONFIG_DIR, 'credentials.enc');
19
19
  const ALGORITHM = 'aes-256-gcm';
20
20
  const SALT = 'compilr-dev-v1';
21
+ // Cache for loaded credentials (avoids repeated disk reads)
22
+ let credentialsCache = null;
21
23
  // =============================================================================
22
24
  // Master Key Management
23
25
  // =============================================================================
@@ -98,29 +100,38 @@ function decrypt(encryptedData) {
98
100
  // Credentials Storage
99
101
  // =============================================================================
100
102
  /**
101
- * Load all stored credentials
103
+ * Load all stored credentials (cached to avoid repeated disk reads)
102
104
  */
103
105
  function loadCredentials() {
106
+ // Return cached credentials if available
107
+ if (credentialsCache !== null) {
108
+ return credentialsCache;
109
+ }
104
110
  try {
105
111
  if (!fs.existsSync(CREDENTIALS_FILE)) {
106
- return {};
112
+ credentialsCache = {};
113
+ return credentialsCache;
107
114
  }
108
115
  const encryptedData = fs.readFileSync(CREDENTIALS_FILE, 'utf-8');
109
116
  const decrypted = decrypt(encryptedData);
110
- return JSON.parse(decrypted);
117
+ credentialsCache = JSON.parse(decrypted);
118
+ return credentialsCache;
111
119
  }
112
120
  catch {
113
121
  // If decryption fails (e.g., key changed), return empty
114
- return {};
122
+ credentialsCache = {};
123
+ return credentialsCache;
115
124
  }
116
125
  }
117
126
  /**
118
- * Save all credentials
127
+ * Save all credentials (invalidates cache)
119
128
  */
120
129
  function saveCredentials(credentials) {
121
130
  fs.mkdirSync(CONFIG_DIR, { recursive: true });
122
131
  const encrypted = encrypt(JSON.stringify(credentials));
123
132
  fs.writeFileSync(CREDENTIALS_FILE, encrypted, 'utf-8');
133
+ // Update cache with new credentials
134
+ credentialsCache = credentials;
124
135
  }
125
136
  // =============================================================================
126
137
  // Public API
@@ -136,6 +147,11 @@ export function getApiKey(provider) {
136
147
  openai: 'OPENAI_API_KEY',
137
148
  google: 'GOOGLE_API_KEY',
138
149
  ollama: '', // No key needed
150
+ together: 'TOGETHER_API_KEY',
151
+ groq: 'GROQ_API_KEY',
152
+ fireworks: 'FIREWORKS_API_KEY',
153
+ perplexity: 'PERPLEXITY_API_KEY',
154
+ openrouter: 'OPENROUTER_API_KEY',
139
155
  };
140
156
  const envVar = envVarMap[provider];
141
157
  if (envVar && process.env[envVar]) {
@@ -164,16 +180,33 @@ export function setApiKey(provider, key) {
164
180
  */
165
181
  export function deleteApiKey(provider) {
166
182
  const credentials = loadCredentials();
167
- // Remove the key by setting to undefined and then filtering
183
+ // Remove the key by setting to undefined
184
+ // Ollama doesn't have a key to delete
168
185
  if (provider === 'anthropic') {
169
- delete credentials.anthropic;
186
+ credentials.anthropic = undefined;
170
187
  }
171
188
  else if (provider === 'openai') {
172
- delete credentials.openai;
189
+ credentials.openai = undefined;
173
190
  }
174
191
  else if (provider === 'google') {
175
- delete credentials.google;
192
+ credentials.google = undefined;
193
+ }
194
+ else if (provider === 'together') {
195
+ credentials.together = undefined;
196
+ }
197
+ else if (provider === 'groq') {
198
+ credentials.groq = undefined;
199
+ }
200
+ else if (provider === 'fireworks') {
201
+ credentials.fireworks = undefined;
202
+ }
203
+ else if (provider === 'perplexity') {
204
+ credentials.perplexity = undefined;
176
205
  }
206
+ else if (provider === 'openrouter') {
207
+ credentials.openrouter = undefined;
208
+ }
209
+ // Note: ollama doesn't have a key to delete
177
210
  saveCredentials(credentials);
178
211
  }
179
212
  /**
@@ -205,6 +238,11 @@ export function isKeyFromEnv(provider) {
205
238
  openai: 'OPENAI_API_KEY',
206
239
  google: 'GOOGLE_API_KEY',
207
240
  ollama: '',
241
+ together: 'TOGETHER_API_KEY',
242
+ groq: 'GROQ_API_KEY',
243
+ fireworks: 'FIREWORKS_API_KEY',
244
+ perplexity: 'PERPLEXITY_API_KEY',
245
+ openrouter: 'OPENROUTER_API_KEY',
208
246
  };
209
247
  const envVar = envVarMap[provider];
210
248
  return !!(envVar && process.env[envVar]);
@@ -214,6 +252,7 @@ export function isKeyFromEnv(provider) {
214
252
  */
215
253
  export function getAllProviderStatuses() {
216
254
  return [
255
+ // Primary providers (main tabs)
217
256
  {
218
257
  provider: 'anthropic',
219
258
  name: 'Anthropic (Claude)',
@@ -221,6 +260,7 @@ export function getAllProviderStatuses() {
221
260
  masked: getMaskedKey('anthropic'),
222
261
  fromEnv: isKeyFromEnv('anthropic'),
223
262
  keyUrl: 'https://console.anthropic.com/settings/keys',
263
+ category: 'primary',
224
264
  },
225
265
  {
226
266
  provider: 'openai',
@@ -229,6 +269,7 @@ export function getAllProviderStatuses() {
229
269
  masked: getMaskedKey('openai'),
230
270
  fromEnv: isKeyFromEnv('openai'),
231
271
  keyUrl: 'https://platform.openai.com/api-keys',
272
+ category: 'primary',
232
273
  },
233
274
  {
234
275
  provider: 'google',
@@ -237,7 +278,9 @@ export function getAllProviderStatuses() {
237
278
  masked: getMaskedKey('google'),
238
279
  fromEnv: isKeyFromEnv('google'),
239
280
  keyUrl: 'https://aistudio.google.com/apikey',
281
+ category: 'primary',
240
282
  },
283
+ // Local provider
241
284
  {
242
285
  provider: 'ollama',
243
286
  name: 'Ollama (Local)',
@@ -245,9 +288,67 @@ export function getAllProviderStatuses() {
245
288
  masked: 'local',
246
289
  fromEnv: false,
247
290
  keyUrl: 'https://ollama.ai',
291
+ category: 'local',
292
+ },
293
+ // "Others" providers (OpenAI-compatible cloud APIs)
294
+ {
295
+ provider: 'together',
296
+ name: 'Together AI',
297
+ hasKey: hasApiKey('together'),
298
+ masked: getMaskedKey('together'),
299
+ fromEnv: isKeyFromEnv('together'),
300
+ keyUrl: 'https://api.together.xyz/settings/api-keys',
301
+ category: 'others',
302
+ endpoint: 'https://api.together.xyz/v1',
303
+ },
304
+ {
305
+ provider: 'groq',
306
+ name: 'Groq',
307
+ hasKey: hasApiKey('groq'),
308
+ masked: getMaskedKey('groq'),
309
+ fromEnv: isKeyFromEnv('groq'),
310
+ keyUrl: 'https://console.groq.com/keys',
311
+ category: 'others',
312
+ endpoint: 'https://api.groq.com/openai/v1',
313
+ },
314
+ {
315
+ provider: 'fireworks',
316
+ name: 'Fireworks AI',
317
+ hasKey: hasApiKey('fireworks'),
318
+ masked: getMaskedKey('fireworks'),
319
+ fromEnv: isKeyFromEnv('fireworks'),
320
+ keyUrl: 'https://fireworks.ai/account/api-keys',
321
+ category: 'others',
322
+ endpoint: 'https://api.fireworks.ai/inference/v1',
323
+ },
324
+ {
325
+ provider: 'perplexity',
326
+ name: 'Perplexity',
327
+ hasKey: hasApiKey('perplexity'),
328
+ masked: getMaskedKey('perplexity'),
329
+ fromEnv: isKeyFromEnv('perplexity'),
330
+ keyUrl: 'https://www.perplexity.ai/settings/api',
331
+ category: 'others',
332
+ endpoint: 'https://api.perplexity.ai',
333
+ },
334
+ {
335
+ provider: 'openrouter',
336
+ name: 'OpenRouter',
337
+ hasKey: hasApiKey('openrouter'),
338
+ masked: getMaskedKey('openrouter'),
339
+ fromEnv: isKeyFromEnv('openrouter'),
340
+ keyUrl: 'https://openrouter.ai/keys',
341
+ category: 'others',
342
+ endpoint: 'https://openrouter.ai/api/v1',
248
343
  },
249
344
  ];
250
345
  }
346
+ /**
347
+ * Get provider statuses filtered by category
348
+ */
349
+ export function getProvidersByCategory(category) {
350
+ return getAllProviderStatuses().filter(p => p.category === category);
351
+ }
251
352
  /**
252
353
  * Map provider type from settings to credential provider key
253
354
  */
@@ -261,6 +362,19 @@ export function settingsProviderToCredentialKey(provider) {
261
362
  return 'openai';
262
363
  case 'ollama':
263
364
  return 'ollama';
365
+ case 'together':
366
+ return 'together';
367
+ case 'groq':
368
+ return 'groq';
369
+ case 'fireworks':
370
+ return 'fireworks';
371
+ case 'perplexity':
372
+ return 'perplexity';
373
+ case 'openrouter':
374
+ return 'openrouter';
375
+ case 'custom':
376
+ // Custom provider might use any key; default to openai (most common format)
377
+ return 'openai';
264
378
  case 'auto':
265
379
  default:
266
380
  return 'anthropic'; // Default to anthropic for auto
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Format Tokens Utility
3
+ *
4
+ * Extracted from ui/base/render-utils.ts so foundation-layer code
5
+ * (token-tracker) can use it without importing from the domain layer.
6
+ */
7
+ /**
8
+ * Format a token count in a human-readable way.
9
+ *
10
+ * @param tokens - Number of tokens
11
+ * @returns Formatted string (e.g., "1.5k" for 1500)
12
+ */
13
+ export declare function formatTokens(tokens: number): string;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Format Tokens Utility
3
+ *
4
+ * Extracted from ui/base/render-utils.ts so foundation-layer code
5
+ * (token-tracker) can use it without importing from the domain layer.
6
+ */
7
+ /**
8
+ * Format a token count in a human-readable way.
9
+ *
10
+ * @param tokens - Number of tokens
11
+ * @returns Formatted string (e.g., "1.5k" for 1500)
12
+ */
13
+ export function formatTokens(tokens) {
14
+ if (tokens >= 1000) {
15
+ return `${(tokens / 1000).toFixed(1)}k`;
16
+ }
17
+ return String(tokens);
18
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Git Config Utilities
3
+ *
4
+ * Shared helpers for reading/writing git global config values.
5
+ * Used by onboarding wizard and new project overlay.
6
+ */
7
+ export interface GitConfig {
8
+ userName: string | null;
9
+ userEmail: string | null;
10
+ hasName: boolean;
11
+ hasEmail: boolean;
12
+ /** True when both user.name and user.email are set */
13
+ isConfigured: boolean;
14
+ }
15
+ /**
16
+ * Get a single git global config value, returns null if not set.
17
+ */
18
+ export declare function getGitConfigValue(key: string): string | null;
19
+ /**
20
+ * Set a git global config value. Returns true on success.
21
+ */
22
+ export declare function setGitConfigValue(key: string, value: string): boolean;
23
+ /**
24
+ * Check git user.name and user.email configuration status.
25
+ */
26
+ export declare function checkGitConfig(): GitConfig;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Git Config Utilities
3
+ *
4
+ * Shared helpers for reading/writing git global config values.
5
+ * Used by onboarding wizard and new project overlay.
6
+ */
7
+ import { execSync } from 'child_process';
8
+ // =============================================================================
9
+ // Functions
10
+ // =============================================================================
11
+ /**
12
+ * Get a single git global config value, returns null if not set.
13
+ */
14
+ export function getGitConfigValue(key) {
15
+ try {
16
+ const value = execSync(`git config --global ${key}`, {
17
+ encoding: 'utf-8',
18
+ stdio: ['pipe', 'pipe', 'pipe'],
19
+ }).trim();
20
+ return value || null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ /**
27
+ * Set a git global config value. Returns true on success.
28
+ */
29
+ export function setGitConfigValue(key, value) {
30
+ try {
31
+ execSync(`git config --global ${key} "${value.replace(/"/g, '\\"')}"`, {
32
+ encoding: 'utf-8',
33
+ stdio: ['pipe', 'pipe', 'pipe'],
34
+ });
35
+ return true;
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ }
41
+ /**
42
+ * Check git user.name and user.email configuration status.
43
+ */
44
+ export function checkGitConfig() {
45
+ const userName = getGitConfigValue('user.name');
46
+ const userEmail = getGitConfigValue('user.email');
47
+ return {
48
+ userName,
49
+ userEmail,
50
+ hasName: Boolean(userName),
51
+ hasEmail: Boolean(userEmail),
52
+ isConfigured: Boolean(userName && userEmail),
53
+ };
54
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Message Utilities
3
+ *
4
+ * Shared utilities for message manipulation across the codebase.
5
+ * This is the single source of truth for message transformation functions.
6
+ */
7
+ /**
8
+ * Minimal interface for content blocks with a type property.
9
+ * This is structurally compatible with any type that has a 'type' field.
10
+ */
11
+ interface TypedBlock {
12
+ type: string;
13
+ }
14
+ /**
15
+ * Strip thinking blocks from messages.
16
+ *
17
+ * Thinking blocks contain provider-specific signatures (e.g., Gemini's thought_signature)
18
+ * that don't transfer between sessions or when switching projects/models.
19
+ * This function removes them while preserving all other content blocks.
20
+ *
21
+ * Uses structural typing - works with any message that has a 'content' property
22
+ * that is either a string or an array of objects with 'type' fields.
23
+ *
24
+ * @param messages - Array of messages to process
25
+ * @returns New array with thinking blocks removed from each message
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * const cleanedMessages = stripThinkingBlocks(session.messages);
30
+ * await agent.setHistory(cleanedMessages);
31
+ * ```
32
+ */
33
+ export declare function stripThinkingBlocks<T extends {
34
+ content: string | TypedBlock[];
35
+ }>(messages: T[]): T[];
36
+ /**
37
+ * Message interface for text extraction functions.
38
+ */
39
+ interface MessageForTextExtraction {
40
+ content: string | (TypedBlock & {
41
+ text?: string;
42
+ })[];
43
+ }
44
+ /**
45
+ * Extract text content from a message.
46
+ *
47
+ * Handles both string content and array content with text blocks.
48
+ *
49
+ * @param msg - Message to extract text from
50
+ * @returns The text content, or empty string if not found
51
+ */
52
+ export declare function getMessageText(msg: MessageForTextExtraction): string;
53
+ /**
54
+ * Create a truncated preview of message text.
55
+ *
56
+ * @param msg - Message to preview
57
+ * @param maxLength - Maximum length of preview (default: 60)
58
+ * @returns Truncated text with ellipsis if needed
59
+ */
60
+ export declare function getMessagePreview(msg: MessageForTextExtraction, maxLength?: number): string;
61
+ export {};
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Message Utilities
3
+ *
4
+ * Shared utilities for message manipulation across the codebase.
5
+ * This is the single source of truth for message transformation functions.
6
+ */
7
+ import { truncatePlain as truncate } from '@compilr-dev/ui-core/utils';
8
+ /**
9
+ * Strip thinking blocks from messages.
10
+ *
11
+ * Thinking blocks contain provider-specific signatures (e.g., Gemini's thought_signature)
12
+ * that don't transfer between sessions or when switching projects/models.
13
+ * This function removes them while preserving all other content blocks.
14
+ *
15
+ * Uses structural typing - works with any message that has a 'content' property
16
+ * that is either a string or an array of objects with 'type' fields.
17
+ *
18
+ * @param messages - Array of messages to process
19
+ * @returns New array with thinking blocks removed from each message
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const cleanedMessages = stripThinkingBlocks(session.messages);
24
+ * await agent.setHistory(cleanedMessages);
25
+ * ```
26
+ */
27
+ export function stripThinkingBlocks(messages) {
28
+ return messages.map((msg) => {
29
+ // String content - no thinking blocks to strip
30
+ if (typeof msg.content === 'string') {
31
+ return msg;
32
+ }
33
+ // Array content - filter out thinking blocks
34
+ return {
35
+ ...msg,
36
+ content: msg.content.filter((block) => block.type !== 'thinking'),
37
+ };
38
+ });
39
+ }
40
+ /**
41
+ * Extract text content from a message.
42
+ *
43
+ * Handles both string content and array content with text blocks.
44
+ *
45
+ * @param msg - Message to extract text from
46
+ * @returns The text content, or empty string if not found
47
+ */
48
+ export function getMessageText(msg) {
49
+ if (typeof msg.content === 'string') {
50
+ return msg.content;
51
+ }
52
+ // Find the first text block
53
+ const textBlock = msg.content.find((b) => b.type === 'text');
54
+ if (textBlock && typeof textBlock.text === 'string') {
55
+ return textBlock.text;
56
+ }
57
+ return '';
58
+ }
59
+ /**
60
+ * Create a truncated preview of message text.
61
+ *
62
+ * @param msg - Message to preview
63
+ * @param maxLength - Maximum length of preview (default: 60)
64
+ * @returns Truncated text with ellipsis if needed
65
+ */
66
+ export function getMessagePreview(msg, maxLength = 60) {
67
+ const text = getMessageText(msg);
68
+ if (text.length <= maxLength) {
69
+ return text;
70
+ }
71
+ return truncate(text, maxLength);
72
+ }
@@ -1,11 +1,18 @@
1
1
  /**
2
- * Model Tier Detection
2
+ * Model Tier Detection (Capability Tiers)
3
3
  *
4
4
  * Categorizes LLM models by capability tier (small/medium/large)
5
5
  * and provides upgrade suggestions within the same provider.
6
6
  *
7
7
  * Used by commands like /design to warn users about model limitations
8
8
  * and suggest alternatives.
9
+ *
10
+ * NOTE: This is SEPARATE from the model registry in src/models/model-registry.ts.
11
+ * - Registry: Model metadata, selection UI, speed tiers (fast/balanced/powerful)
12
+ * - This file: Command capability requirements (small/medium/large)
13
+ *
14
+ * When adding new models to the registry, also update this file if the model
15
+ * should be recognized for capability tier detection.
9
16
  */
10
17
  export type TierLevel = 'small' | 'medium' | 'large';
11
18
  export interface ModelTier {
@@ -1,48 +1,69 @@
1
1
  /**
2
- * Model Tier Detection
2
+ * Model Tier Detection (Capability Tiers)
3
3
  *
4
4
  * Categorizes LLM models by capability tier (small/medium/large)
5
5
  * and provides upgrade suggestions within the same provider.
6
6
  *
7
7
  * Used by commands like /design to warn users about model limitations
8
8
  * and suggest alternatives.
9
+ *
10
+ * NOTE: This is SEPARATE from the model registry in src/models/model-registry.ts.
11
+ * - Registry: Model metadata, selection UI, speed tiers (fast/balanced/powerful)
12
+ * - This file: Command capability requirements (small/medium/large)
13
+ *
14
+ * When adding new models to the registry, also update this file if the model
15
+ * should be recognized for capability tier detection.
9
16
  */
10
17
  // =============================================================================
11
18
  // Model Tier Mappings
12
19
  // =============================================================================
13
20
  const MODEL_TIERS = {
14
- // Claude (Anthropic)
21
+ // Claude (Anthropic) - 4.5 series (current)
22
+ 'claude-opus-4-5': { tier: 'large', provider: 'anthropic' },
23
+ 'claude-sonnet-4-5': { tier: 'large', provider: 'anthropic' },
24
+ 'claude-haiku-4-5': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
25
+ // Claude legacy (for backward compatibility)
15
26
  'claude-3-opus': { tier: 'large', provider: 'anthropic' },
16
27
  'claude-opus-4': { tier: 'large', provider: 'anthropic' },
17
28
  'claude-sonnet-4': { tier: 'large', provider: 'anthropic' },
18
29
  'claude-3-5-sonnet': { tier: 'large', provider: 'anthropic' },
19
- 'claude-3-sonnet': { tier: 'large', provider: 'anthropic' },
20
- 'claude-3-5-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-20250514' },
21
- 'claude-3-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-20250514' },
22
- // OpenAI
30
+ 'claude-3-5-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
31
+ 'claude-3-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
32
+ // OpenAI - GPT-5 series (current)
33
+ 'gpt-5.2': { tier: 'large', provider: 'openai' },
34
+ 'gpt-5-mini': { tier: 'large', provider: 'openai' },
35
+ 'gpt-5-nano': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'gpt-5-mini-2025-08-07' },
36
+ // OpenAI legacy (for backward compatibility)
23
37
  'gpt-4o': { tier: 'large', provider: 'openai' },
24
38
  'gpt-4-turbo': { tier: 'large', provider: 'openai' },
25
39
  'gpt-4': { tier: 'large', provider: 'openai' },
26
- 'gpt-4o-mini': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'gpt-4o' },
27
- 'gpt-3.5-turbo': { tier: 'small', provider: 'openai', suggestedUpgrade: 'gpt-4o-mini' },
40
+ 'gpt-4o-mini': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'gpt-5-mini-2025-08-07' },
41
+ 'gpt-3.5-turbo': { tier: 'small', provider: 'openai', suggestedUpgrade: 'gpt-5-nano-2025-08-07' },
28
42
  'o1': { tier: 'large', provider: 'openai' },
29
43
  'o1-mini': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'o1' },
30
- 'o1-preview': { tier: 'large', provider: 'openai' },
31
- // Google (Gemini)
32
- 'gemini-1.5-pro': { tier: 'large', provider: 'google' },
33
- 'gemini-2.0-flash': { tier: 'large', provider: 'google' },
44
+ 'o3': { tier: 'large', provider: 'openai' },
45
+ 'o4-mini': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'o3' },
46
+ // Google (Gemini) - 3.x series (current)
47
+ 'gemini-3-pro': { tier: 'large', provider: 'google' },
48
+ 'gemini-3-flash': { tier: 'large', provider: 'google' },
49
+ 'gemini-2.5-flash-lite': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-3-flash-preview' },
50
+ // Gemini legacy (for backward compatibility)
34
51
  'gemini-2.5-pro': { tier: 'large', provider: 'google' },
35
- 'gemini-2.5-flash': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-2.5-pro' },
36
- 'gemini-1.5-flash': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-1.5-pro' },
37
- 'gemini-2.0-flash-lite': { tier: 'small', provider: 'google', suggestedUpgrade: 'gemini-2.0-flash' },
52
+ 'gemini-2.5-flash': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-3-flash-preview' },
53
+ 'gemini-2.0-flash': { tier: 'large', provider: 'google' },
54
+ 'gemini-1.5-pro': { tier: 'large', provider: 'google' },
55
+ 'gemini-1.5-flash': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-3-flash-preview' },
38
56
  // Ollama / Local models (common ones)
39
- 'llama3.2': { tier: 'small', provider: 'ollama', suggestedUpgrade: 'llama3.1:70b' },
57
+ 'llama3.2:8b': { tier: 'small', provider: 'ollama', suggestedUpgrade: 'llama3.2:70b' },
58
+ 'llama3.2:70b': { tier: 'large', provider: 'ollama' },
59
+ 'llama3.2': { tier: 'small', provider: 'ollama', suggestedUpgrade: 'llama3.2:70b' },
40
60
  'llama3.1': { tier: 'medium', provider: 'ollama', suggestedUpgrade: 'llama3.1:70b' },
41
61
  'llama3.1:70b': { tier: 'large', provider: 'ollama' },
42
62
  'mistral': { tier: 'small', provider: 'ollama' },
43
63
  'mixtral': { tier: 'medium', provider: 'ollama' },
44
64
  'codellama': { tier: 'medium', provider: 'ollama' },
45
65
  'deepseek-coder': { tier: 'medium', provider: 'ollama' },
66
+ 'deepseek-coder:33b': { tier: 'large', provider: 'ollama' },
46
67
  'qwen2.5-coder': { tier: 'medium', provider: 'ollama' },
47
68
  };
48
69
  // =============================================================================
@@ -78,6 +99,7 @@ export function getCommandMinTier(command) {
78
99
  '/design': 'large',
79
100
  '/refine': 'large',
80
101
  '/arch': 'large',
102
+ '/scaffold': 'large',
81
103
  '/build': 'medium',
82
104
  '/prd': 'medium',
83
105
  '/sketch': 'small', // Simplified version - works with any model
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Open a URL in the default browser.
3
+ * Returns true if browser was opened successfully.
4
+ */
5
+ export declare function openBrowser(url: string): Promise<boolean>;