@compilr-dev/cli 0.4.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 (634) hide show
  1. package/README.md +254 -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 +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  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/index.d.ts +2 -1
  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.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -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,28 @@
1
+ /**
2
+ * Debug Logger
3
+ *
4
+ * Writes timestamped logs to a file for debugging timing issues.
5
+ * Usage: import { debugLog } from './utils/debug-log.js';
6
+ * debugLog('event-name', 'description');
7
+ *
8
+ * For rendering debug: set DEBUG_RENDERING=1 environment variable
9
+ * Usage: DEBUG_RENDERING=1 compilr
10
+ * Then: tail -f /tmp/compilr-debug.log
11
+ */
12
+ export declare const DEBUG_RENDERING: boolean;
13
+ /**
14
+ * Log a debug message with timestamp
15
+ */
16
+ export declare function debugLog(event: string, details?: string): void;
17
+ /**
18
+ * Clear the log file
19
+ */
20
+ export declare function clearDebugLog(): void;
21
+ /**
22
+ * Get the log file path
23
+ */
24
+ export declare function getDebugLogPath(): string;
25
+ /**
26
+ * Log rendering-specific debug info (only if DEBUG_RENDERING=1)
27
+ */
28
+ export declare function debugRender(component: string, details: string): void;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Debug Logger
3
+ *
4
+ * Writes timestamped logs to a file for debugging timing issues.
5
+ * Usage: import { debugLog } from './utils/debug-log.js';
6
+ * debugLog('event-name', 'description');
7
+ *
8
+ * For rendering debug: set DEBUG_RENDERING=1 environment variable
9
+ * Usage: DEBUG_RENDERING=1 compilr
10
+ * Then: tail -f /tmp/compilr-debug.log
11
+ */
12
+ import fs from 'node:fs';
13
+ import path from 'node:path';
14
+ import os from 'node:os';
15
+ const LOG_FILE = path.join(os.tmpdir(), 'compilr-debug.log');
16
+ const startTime = Date.now();
17
+ // Check if rendering debug is enabled via environment variable
18
+ export const DEBUG_RENDERING = process.env['DEBUG_RENDERING'] === '1';
19
+ /**
20
+ * Log a debug message with timestamp
21
+ */
22
+ export function debugLog(event, details) {
23
+ const elapsed = Date.now() - startTime;
24
+ const timestamp = new Date().toISOString();
25
+ const line = `[${timestamp}] +${String(elapsed)}ms | ${event}${details ? ` | ${details}` : ''}\n`;
26
+ try {
27
+ fs.appendFileSync(LOG_FILE, line);
28
+ }
29
+ catch {
30
+ // Ignore errors
31
+ }
32
+ }
33
+ /**
34
+ * Clear the log file
35
+ */
36
+ export function clearDebugLog() {
37
+ try {
38
+ fs.writeFileSync(LOG_FILE, `=== Debug Log Started ${new Date().toISOString()} ===\n`);
39
+ }
40
+ catch {
41
+ // Ignore errors
42
+ }
43
+ }
44
+ /**
45
+ * Get the log file path
46
+ */
47
+ export function getDebugLogPath() {
48
+ return LOG_FILE;
49
+ }
50
+ /**
51
+ * Log rendering-specific debug info (only if DEBUG_RENDERING=1)
52
+ */
53
+ export function debugRender(component, details) {
54
+ if (!DEBUG_RENDERING)
55
+ return;
56
+ debugLog(`[RENDER:${component}]`, details);
57
+ }
@@ -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 {