@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
@@ -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>;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Open a URL in the default browser.
3
+ * Returns true if browser was opened successfully.
4
+ */
5
+ import { exec } from 'child_process';
6
+ import * as os from 'os';
7
+ export function openBrowser(url) {
8
+ return new Promise((resolve) => {
9
+ const platform = os.platform();
10
+ let cmd;
11
+ switch (platform) {
12
+ case 'darwin':
13
+ cmd = `open "${url}"`;
14
+ break;
15
+ case 'win32':
16
+ cmd = `start "" "${url}"`;
17
+ break;
18
+ default:
19
+ // Linux and others
20
+ cmd = `xdg-open "${url}"`;
21
+ break;
22
+ }
23
+ exec(cmd, (error) => {
24
+ if (error) {
25
+ resolve(false);
26
+ }
27
+ else {
28
+ resolve(true);
29
+ }
30
+ });
31
+ });
32
+ }
@@ -8,6 +8,7 @@ import * as fs from 'fs';
8
8
  import * as path from 'path';
9
9
  import * as os from 'os';
10
10
  import { getAllowedDeletePaths, isDeleteProtectionEnabled, isProjectMatchRequired } from '../settings/paths.js';
11
+ import { truncatePlain as truncate } from '@compilr-dev/ui-core/utils';
11
12
  // =============================================================================
12
13
  // Dangerous Paths
13
14
  // =============================================================================
@@ -227,7 +228,7 @@ export function getSafeDisplayPath(targetPath, maxLength = 50) {
227
228
  }
228
229
  const parts = targetPath.split(path.sep);
229
230
  if (parts.length <= 2) {
230
- return targetPath.slice(0, maxLength - 3) + '...';
231
+ return truncate(targetPath, maxLength);
231
232
  }
232
233
  // Show first and last parts with ellipsis
233
234
  const first = parts.slice(0, 2).join(path.sep);
@@ -235,5 +236,5 @@ export function getSafeDisplayPath(targetPath, maxLength = 50) {
235
236
  if (first.length + last.length + 4 <= maxLength) {
236
237
  return first + '/.../' + last;
237
238
  }
238
- return targetPath.slice(0, maxLength - 3) + '...';
239
+ return truncate(targetPath, maxLength);
239
240
  }