@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
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Project Anchors - CLI wrapper for @compilr-dev/agents AnchorManager
3
+ *
4
+ * Manages per-project anchor isolation using the library's AnchorManager
5
+ * with project-scoped persistence based on CLI's dataPath configuration.
6
+ *
7
+ * Storage structure:
8
+ * {dataPath}/anchors/
9
+ * ├── global.json # Non-project anchors
10
+ * └── project-{id}.json # Per-project anchors
11
+ */
12
+ import { AnchorManager } from '@compilr-dev/sdk';
13
+ import type { Anchor, AnchorInput, AnchorQueryOptions } from '@compilr-dev/sdk';
14
+ export type { Anchor, AnchorInput, AnchorQueryOptions };
15
+ /**
16
+ * Get anchor manager for a project (or global if projectId is null)
17
+ *
18
+ * Creates a new manager if one doesn't exist, using file-based persistence.
19
+ *
20
+ * @param projectId - Project ID, or null for global anchors
21
+ * @returns AnchorManager instance
22
+ */
23
+ export declare function getAnchorManager(projectId: string | null): AnchorManager;
24
+ /**
25
+ * Get the global anchor manager
26
+ */
27
+ export declare function getGlobalAnchorManager(): AnchorManager;
28
+ /**
29
+ * Clear all anchors for a project
30
+ *
31
+ * Should be called when a project is deleted.
32
+ *
33
+ * @param projectId - Project ID to clear
34
+ * @returns Number of anchors removed
35
+ */
36
+ export declare function clearProjectAnchors(projectId: string): number;
37
+ /**
38
+ * Get formatted anchor content for injection into system prompt
39
+ *
40
+ * Combines global anchors with project-specific anchors.
41
+ *
42
+ * @param projectId - Optional project ID to include project anchors
43
+ * @returns Formatted anchor string for system prompt
44
+ */
45
+ export declare function getFormattedAnchors(projectId?: string): string;
46
+ /**
47
+ * Add an anchor
48
+ *
49
+ * Convenience function that routes to the appropriate manager.
50
+ *
51
+ * @param input - Anchor input with optional projectId
52
+ * @returns Created anchor
53
+ */
54
+ export declare function addAnchor(input: AnchorInput & {
55
+ projectId?: string;
56
+ }): Anchor;
57
+ /**
58
+ * Get all anchors across all managers
59
+ *
60
+ * @param options - Query options
61
+ * @returns Array of all anchors
62
+ */
63
+ export declare function getAllAnchors(options?: AnchorQueryOptions): Anchor[];
64
+ /**
65
+ * Get list of project IDs that have anchor files
66
+ */
67
+ export declare function getProjectsWithAnchors(): string[];
68
+ /**
69
+ * Get anchor statistics
70
+ */
71
+ export declare function getAnchorStats(): {
72
+ globalCount: number;
73
+ projectCounts: Map<string, number>;
74
+ totalTokens: number;
75
+ };
76
+ /**
77
+ * Clear all cached managers (useful for testing or refresh)
78
+ */
79
+ export declare function clearManagerCache(): void;
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Project Anchors - CLI wrapper for @compilr-dev/agents AnchorManager
3
+ *
4
+ * Manages per-project anchor isolation using the library's AnchorManager
5
+ * with project-scoped persistence based on CLI's dataPath configuration.
6
+ *
7
+ * Storage structure:
8
+ * {dataPath}/anchors/
9
+ * ├── global.json # Non-project anchors
10
+ * └── project-{id}.json # Per-project anchors
11
+ */
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ import { AnchorManager } from '@compilr-dev/sdk';
15
+ import { getDataPath } from '../settings/paths.js';
16
+ // =============================================================================
17
+ // State
18
+ // =============================================================================
19
+ /**
20
+ * Cache of anchor managers by project ID (null = global)
21
+ */
22
+ const managers = new Map();
23
+ // =============================================================================
24
+ // Helpers
25
+ // =============================================================================
26
+ /**
27
+ * Get the anchors directory path
28
+ */
29
+ function getAnchorsDir() {
30
+ return path.join(getDataPath(), 'anchors');
31
+ }
32
+ /**
33
+ * Get the persist path for a project (or global)
34
+ */
35
+ function getPersistPath(projectId) {
36
+ const anchorsDir = getAnchorsDir();
37
+ const filename = projectId ? `project-${projectId}.json` : 'global.json';
38
+ return path.join(anchorsDir, filename);
39
+ }
40
+ /**
41
+ * Ensure the anchors directory exists
42
+ */
43
+ function ensureAnchorsDir() {
44
+ const anchorsDir = getAnchorsDir();
45
+ if (!fs.existsSync(anchorsDir)) {
46
+ fs.mkdirSync(anchorsDir, { recursive: true });
47
+ }
48
+ }
49
+ // =============================================================================
50
+ // Public API
51
+ // =============================================================================
52
+ /**
53
+ * Get anchor manager for a project (or global if projectId is null)
54
+ *
55
+ * Creates a new manager if one doesn't exist, using file-based persistence.
56
+ *
57
+ * @param projectId - Project ID, or null for global anchors
58
+ * @returns AnchorManager instance
59
+ */
60
+ export function getAnchorManager(projectId) {
61
+ if (managers.has(projectId)) {
62
+ const existing = managers.get(projectId);
63
+ if (existing)
64
+ return existing;
65
+ }
66
+ ensureAnchorsDir();
67
+ const manager = new AnchorManager({
68
+ persistPath: getPersistPath(projectId),
69
+ // Only include default safety anchors for global manager
70
+ includeDefaults: projectId === null,
71
+ maxAnchors: 50,
72
+ maxTokens: 4000,
73
+ });
74
+ managers.set(projectId, manager);
75
+ return manager;
76
+ }
77
+ /**
78
+ * Get the global anchor manager
79
+ */
80
+ export function getGlobalAnchorManager() {
81
+ return getAnchorManager(null);
82
+ }
83
+ /**
84
+ * Clear all anchors for a project
85
+ *
86
+ * Should be called when a project is deleted.
87
+ *
88
+ * @param projectId - Project ID to clear
89
+ * @returns Number of anchors removed
90
+ */
91
+ export function clearProjectAnchors(projectId) {
92
+ const manager = managers.get(projectId);
93
+ let removed = 0;
94
+ if (manager) {
95
+ removed = manager.clear();
96
+ managers.delete(projectId);
97
+ }
98
+ // Also delete the persistence file
99
+ const filePath = getPersistPath(projectId);
100
+ if (fs.existsSync(filePath)) {
101
+ fs.unlinkSync(filePath);
102
+ }
103
+ return removed;
104
+ }
105
+ /**
106
+ * Get formatted anchor content for injection into system prompt
107
+ *
108
+ * Combines global anchors with project-specific anchors.
109
+ *
110
+ * @param projectId - Optional project ID to include project anchors
111
+ * @returns Formatted anchor string for system prompt
112
+ */
113
+ export function getFormattedAnchors(projectId) {
114
+ const parts = [];
115
+ // Get global anchors
116
+ const globalManager = getGlobalAnchorManager();
117
+ const globalFormatted = globalManager.format();
118
+ if (globalFormatted) {
119
+ parts.push(globalFormatted);
120
+ }
121
+ // Get project-specific anchors if project ID provided
122
+ if (projectId) {
123
+ const projectManager = getAnchorManager(projectId);
124
+ const projectFormatted = projectManager.format();
125
+ if (projectFormatted) {
126
+ if (parts.length > 0) {
127
+ parts.push(''); // Empty line separator
128
+ parts.push(`### Project Anchors (${projectId})`);
129
+ }
130
+ parts.push(projectFormatted);
131
+ }
132
+ }
133
+ return parts.join('\n');
134
+ }
135
+ /**
136
+ * Add an anchor
137
+ *
138
+ * Convenience function that routes to the appropriate manager.
139
+ *
140
+ * @param input - Anchor input with optional projectId
141
+ * @returns Created anchor
142
+ */
143
+ export function addAnchor(input) {
144
+ const manager = getAnchorManager(input.projectId ?? null);
145
+ return manager.add(input);
146
+ }
147
+ /**
148
+ * Get all anchors across all managers
149
+ *
150
+ * @param options - Query options
151
+ * @returns Array of all anchors
152
+ */
153
+ export function getAllAnchors(options) {
154
+ const allAnchors = [];
155
+ for (const manager of managers.values()) {
156
+ allAnchors.push(...manager.getAll(options));
157
+ }
158
+ return allAnchors;
159
+ }
160
+ /**
161
+ * Get list of project IDs that have anchor files
162
+ */
163
+ export function getProjectsWithAnchors() {
164
+ const anchorsDir = getAnchorsDir();
165
+ if (!fs.existsSync(anchorsDir)) {
166
+ return [];
167
+ }
168
+ const files = fs.readdirSync(anchorsDir);
169
+ const projectIds = [];
170
+ for (const file of files) {
171
+ const match = /^project-(.+)\.json$/.exec(file);
172
+ if (match && match[1]) {
173
+ projectIds.push(match[1]);
174
+ }
175
+ }
176
+ return projectIds;
177
+ }
178
+ /**
179
+ * Get anchor statistics
180
+ */
181
+ export function getAnchorStats() {
182
+ const globalManager = getGlobalAnchorManager();
183
+ const projectCounts = new Map();
184
+ let totalTokens = globalManager.getTotalTokens();
185
+ // Load all project managers to get stats
186
+ for (const projectId of getProjectsWithAnchors()) {
187
+ const manager = getAnchorManager(projectId);
188
+ projectCounts.set(projectId, manager.size);
189
+ totalTokens += manager.getTotalTokens();
190
+ }
191
+ return {
192
+ globalCount: globalManager.size,
193
+ projectCounts,
194
+ totalTokens,
195
+ };
196
+ }
197
+ /**
198
+ * Clear all cached managers (useful for testing or refresh)
199
+ */
200
+ export function clearManagerCache() {
201
+ managers.clear();
202
+ }
@@ -0,0 +1,124 @@
1
+ /**
2
+ * API Client for CLI Authentication
3
+ *
4
+ * All backend communication goes through Netlify Functions.
5
+ * No direct Supabase SDK dependency — the server handles Supabase calls.
6
+ *
7
+ * Note: This is for USER authentication only — users still bring their own LLM API keys.
8
+ */
9
+ export interface RefreshTokenResponse {
10
+ success: boolean;
11
+ access_token?: string;
12
+ refresh_token?: string;
13
+ expires_in?: number;
14
+ user?: {
15
+ id: string;
16
+ email: string;
17
+ };
18
+ error?: string;
19
+ }
20
+ export interface ProfileData {
21
+ user_id: string;
22
+ email: string;
23
+ account_type: 'free' | 'pro' | 'team' | 'enterprise';
24
+ telemetry_enabled: boolean;
25
+ default_provider: string;
26
+ default_model: string;
27
+ default_tier: string;
28
+ theme: string;
29
+ total_sessions: number;
30
+ total_messages: number;
31
+ first_session_at: string | null;
32
+ last_session_at: string | null;
33
+ created_at: string;
34
+ }
35
+ export interface HeartbeatData {
36
+ session_id: string;
37
+ cli_version: string;
38
+ os: string;
39
+ node_version: string;
40
+ project_id?: number;
41
+ total_messages?: number;
42
+ total_tokens_in?: number;
43
+ total_tokens_out?: number;
44
+ commands_used?: Record<string, number>;
45
+ agents_used?: string[];
46
+ tools_used?: string[];
47
+ llm_provider?: string;
48
+ llm_model?: string;
49
+ }
50
+ export interface DeviceCodeResponse {
51
+ device_code: string;
52
+ user_code: string;
53
+ verification_uri: string;
54
+ verification_uri_complete: string;
55
+ expires_in: number;
56
+ interval: number;
57
+ }
58
+ export interface DeviceTokenResponse {
59
+ access_token: string;
60
+ refresh_token: string;
61
+ token_type: string;
62
+ expires_in: number;
63
+ api_token?: string;
64
+ user: {
65
+ id: string;
66
+ email: string;
67
+ };
68
+ }
69
+ export interface DeviceTokenError {
70
+ error: 'authorization_pending' | 'slow_down' | 'expired_token' | 'access_denied' | 'invalid_grant' | 'server_error';
71
+ error_description: string;
72
+ }
73
+ /**
74
+ * Refresh an access token using a refresh token.
75
+ * Calls the server-side Netlify function which handles Supabase internally.
76
+ */
77
+ export declare function refreshToken(refreshTokenValue: string): Promise<RefreshTokenResponse>;
78
+ /**
79
+ * Send heartbeat to record session.
80
+ */
81
+ export declare function sendHeartbeat(accessToken: string, data: HeartbeatData): Promise<{
82
+ success: boolean;
83
+ telemetry_enabled?: boolean;
84
+ error?: string;
85
+ }>;
86
+ /**
87
+ * Get user profile from CLI API.
88
+ */
89
+ export declare function getProfile(accessToken: string): Promise<{
90
+ success: boolean;
91
+ profile?: ProfileData;
92
+ error?: string;
93
+ }>;
94
+ /**
95
+ * Update user profile via CLI API.
96
+ */
97
+ export declare function updateProfile(accessToken: string, updates: Partial<Pick<ProfileData, 'telemetry_enabled' | 'default_provider' | 'default_model' | 'default_tier' | 'theme'>>): Promise<{
98
+ success: boolean;
99
+ profile?: ProfileData;
100
+ error?: string;
101
+ }>;
102
+ /**
103
+ * Request a device code for CLI authentication.
104
+ * Returns codes and URLs for the user to authorize.
105
+ */
106
+ export declare function requestDeviceCode(): Promise<{
107
+ success: boolean;
108
+ data?: DeviceCodeResponse;
109
+ error?: string;
110
+ }>;
111
+ /**
112
+ * Poll for device token after user authorizes.
113
+ * Returns tokens on success, or error status if still pending.
114
+ */
115
+ export declare function pollDeviceToken(deviceCode: string): Promise<{
116
+ success: boolean;
117
+ data?: DeviceTokenResponse;
118
+ error?: DeviceTokenError;
119
+ networkError?: string;
120
+ }>;
121
+ /**
122
+ * Get the authorization URL for the device flow.
123
+ */
124
+ export declare function getAuthorizationUrl(userCode?: string): string;
@@ -0,0 +1,261 @@
1
+ /**
2
+ * API Client for CLI Authentication
3
+ *
4
+ * All backend communication goes through Netlify Functions.
5
+ * No direct Supabase SDK dependency — the server handles Supabase calls.
6
+ *
7
+ * Note: This is for USER authentication only — users still bring their own LLM API keys.
8
+ */
9
+ import * as os from 'os';
10
+ // =============================================================================
11
+ // Configuration
12
+ // =============================================================================
13
+ // API endpoint for CLI-specific operations
14
+ // Use COMPILR_API_URL env var for testing against branch previews
15
+ const API_BASE_URL = process.env.COMPILR_API_URL || 'https://compilr.dev/.netlify/functions';
16
+ // Device flow authorization URL
17
+ // Use COMPILR_WEB_URL env var for testing against branch previews
18
+ const WEB_BASE_URL = process.env.COMPILR_WEB_URL || 'https://compilr.dev';
19
+ const AUTHORIZATION_URL = `${WEB_BASE_URL}/cli/authorize`;
20
+ // =============================================================================
21
+ // Token Refresh (via Netlify Function)
22
+ // =============================================================================
23
+ /**
24
+ * Refresh an access token using a refresh token.
25
+ * Calls the server-side Netlify function which handles Supabase internally.
26
+ */
27
+ export async function refreshToken(refreshTokenValue) {
28
+ try {
29
+ const response = await fetch(`${API_BASE_URL}/cli-refresh-token`, {
30
+ method: 'POST',
31
+ headers: {
32
+ 'Content-Type': 'application/json',
33
+ },
34
+ body: JSON.stringify({ refresh_token: refreshTokenValue }),
35
+ });
36
+ const contentType = response.headers.get('content-type') ?? '';
37
+ if (!contentType.includes('application/json')) {
38
+ return { success: false, error: `Server returned non-JSON response (${String(response.status)})` };
39
+ }
40
+ const result = await response.json();
41
+ if (!response.ok) {
42
+ return {
43
+ success: false,
44
+ error: result.error ?? `HTTP ${String(response.status)}`,
45
+ };
46
+ }
47
+ return {
48
+ success: true,
49
+ access_token: result.access_token,
50
+ refresh_token: result.refresh_token,
51
+ expires_in: result.expires_in,
52
+ user: result.user,
53
+ };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ success: false,
58
+ error: error instanceof Error ? error.message : 'Network error',
59
+ };
60
+ }
61
+ }
62
+ // =============================================================================
63
+ // CLI API Operations (against our Netlify Functions)
64
+ // =============================================================================
65
+ /**
66
+ * Send heartbeat to record session.
67
+ */
68
+ export async function sendHeartbeat(accessToken, data) {
69
+ try {
70
+ const response = await fetch(`${API_BASE_URL}/cli-heartbeat`, {
71
+ method: 'POST',
72
+ headers: {
73
+ 'Authorization': `Bearer ${accessToken}`,
74
+ 'Content-Type': 'application/json',
75
+ },
76
+ body: JSON.stringify(data),
77
+ });
78
+ const contentType = response.headers.get('content-type') ?? '';
79
+ if (!contentType.includes('application/json')) {
80
+ return { success: false, error: `Server returned non-JSON response (${String(response.status)})` };
81
+ }
82
+ const result = await response.json();
83
+ if (!response.ok) {
84
+ return {
85
+ success: false,
86
+ error: result.error ?? `HTTP ${String(response.status)}`,
87
+ };
88
+ }
89
+ return {
90
+ success: result.success ?? true,
91
+ telemetry_enabled: result.telemetry_enabled,
92
+ };
93
+ }
94
+ catch (error) {
95
+ return {
96
+ success: false,
97
+ error: error instanceof Error ? error.message : 'Network error',
98
+ };
99
+ }
100
+ }
101
+ /**
102
+ * Get user profile from CLI API.
103
+ */
104
+ export async function getProfile(accessToken) {
105
+ try {
106
+ const response = await fetch(`${API_BASE_URL}/cli-profile`, {
107
+ method: 'GET',
108
+ headers: {
109
+ 'Authorization': `Bearer ${accessToken}`,
110
+ },
111
+ });
112
+ const contentType = response.headers.get('content-type') ?? '';
113
+ if (!contentType.includes('application/json')) {
114
+ return { success: false, error: `Server returned non-JSON response (${String(response.status)})` };
115
+ }
116
+ const result = await response.json();
117
+ if (!response.ok) {
118
+ return {
119
+ success: false,
120
+ error: result.error ?? `HTTP ${String(response.status)}`,
121
+ };
122
+ }
123
+ return {
124
+ success: true,
125
+ profile: result,
126
+ };
127
+ }
128
+ catch (error) {
129
+ return {
130
+ success: false,
131
+ error: error instanceof Error ? error.message : 'Network error',
132
+ };
133
+ }
134
+ }
135
+ /**
136
+ * Update user profile via CLI API.
137
+ */
138
+ export async function updateProfile(accessToken, updates) {
139
+ try {
140
+ const response = await fetch(`${API_BASE_URL}/cli-profile`, {
141
+ method: 'PATCH',
142
+ headers: {
143
+ 'Authorization': `Bearer ${accessToken}`,
144
+ 'Content-Type': 'application/json',
145
+ },
146
+ body: JSON.stringify(updates),
147
+ });
148
+ const contentType = response.headers.get('content-type') ?? '';
149
+ if (!contentType.includes('application/json')) {
150
+ return { success: false, error: `Server returned non-JSON response (${String(response.status)})` };
151
+ }
152
+ const result = await response.json();
153
+ if (!response.ok) {
154
+ return {
155
+ success: false,
156
+ error: result.error ?? `HTTP ${String(response.status)}`,
157
+ };
158
+ }
159
+ return {
160
+ success: result.success ?? true,
161
+ profile: result.profile,
162
+ };
163
+ }
164
+ catch (error) {
165
+ return {
166
+ success: false,
167
+ error: error instanceof Error ? error.message : 'Network error',
168
+ };
169
+ }
170
+ }
171
+ // =============================================================================
172
+ // Device Flow Authentication
173
+ // =============================================================================
174
+ /**
175
+ * Request a device code for CLI authentication.
176
+ * Returns codes and URLs for the user to authorize.
177
+ */
178
+ export async function requestDeviceCode() {
179
+ try {
180
+ const url = `${API_BASE_URL}/cli-device-code`;
181
+ const response = await fetch(url, {
182
+ method: 'POST',
183
+ headers: {
184
+ 'Content-Type': 'application/json',
185
+ },
186
+ });
187
+ const contentType = response.headers.get('content-type') ?? '';
188
+ if (!contentType.includes('application/json')) {
189
+ return {
190
+ success: false,
191
+ error: `Non-JSON response (${String(response.status)}) from: ${url}`,
192
+ };
193
+ }
194
+ if (!response.ok) {
195
+ const result = await response.json();
196
+ return {
197
+ success: false,
198
+ error: result.error ?? `HTTP ${String(response.status)}`,
199
+ };
200
+ }
201
+ const data = await response.json();
202
+ return { success: true, data };
203
+ }
204
+ catch (error) {
205
+ return {
206
+ success: false,
207
+ error: error instanceof Error ? error.message : 'Network error',
208
+ };
209
+ }
210
+ }
211
+ /**
212
+ * Poll for device token after user authorizes.
213
+ * Returns tokens on success, or error status if still pending.
214
+ */
215
+ export async function pollDeviceToken(deviceCode) {
216
+ try {
217
+ const response = await fetch(`${API_BASE_URL}/cli-device-token`, {
218
+ method: 'POST',
219
+ headers: {
220
+ 'Content-Type': 'application/json',
221
+ },
222
+ body: JSON.stringify({
223
+ device_code: deviceCode,
224
+ hostname: os.hostname(),
225
+ }),
226
+ });
227
+ const contentType = response.headers.get('content-type') ?? '';
228
+ if (!contentType.includes('application/json')) {
229
+ return {
230
+ success: false,
231
+ networkError: `Server returned non-JSON response (${String(response.status)})`,
232
+ };
233
+ }
234
+ const result = await response.json();
235
+ if (!response.ok) {
236
+ return {
237
+ success: false,
238
+ error: result,
239
+ };
240
+ }
241
+ return {
242
+ success: true,
243
+ data: result,
244
+ };
245
+ }
246
+ catch (error) {
247
+ return {
248
+ success: false,
249
+ networkError: error instanceof Error ? error.message : 'Network error',
250
+ };
251
+ }
252
+ }
253
+ /**
254
+ * Get the authorization URL for the device flow.
255
+ */
256
+ export function getAuthorizationUrl(userCode) {
257
+ if (userCode) {
258
+ return `${AUTHORIZATION_URL}?code=${userCode}`;
259
+ }
260
+ return AUTHORIZATION_URL;
261
+ }