@cleocode/core 2026.6.13 → 2026.6.15

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 (485) hide show
  1. package/dist/admin/ops.d.ts +4 -0
  2. package/dist/admin/ops.d.ts.map +1 -1
  3. package/dist/check/index.d.ts +12 -0
  4. package/dist/check/index.d.ts.map +1 -0
  5. package/dist/check/index.js +12 -0
  6. package/dist/check/index.js.map +1 -0
  7. package/dist/check/pr-gate.d.ts +183 -0
  8. package/dist/check/pr-gate.d.ts.map +1 -0
  9. package/dist/check/pr-gate.js +348 -0
  10. package/dist/check/pr-gate.js.map +1 -0
  11. package/dist/conduit/delivery-router.d.ts +134 -0
  12. package/dist/conduit/delivery-router.d.ts.map +1 -0
  13. package/dist/conduit/delivery-router.js +0 -0
  14. package/dist/conduit/delivery-router.js.map +1 -0
  15. package/dist/conduit/index.d.ts +5 -2
  16. package/dist/conduit/index.d.ts.map +1 -1
  17. package/dist/conduit/index.js +5 -2
  18. package/dist/conduit/index.js.map +1 -1
  19. package/dist/conduit/local-tui-adapter.d.ts +89 -0
  20. package/dist/conduit/local-tui-adapter.d.ts.map +1 -0
  21. package/dist/conduit/local-tui-adapter.js +225 -0
  22. package/dist/conduit/local-tui-adapter.js.map +1 -0
  23. package/dist/config/config-repair.d.ts +70 -0
  24. package/dist/config/config-repair.d.ts.map +1 -0
  25. package/dist/config/config-repair.js +248 -0
  26. package/dist/config/config-repair.js.map +1 -0
  27. package/dist/config/registry.d.ts +54 -0
  28. package/dist/config/registry.d.ts.map +1 -1
  29. package/dist/config/registry.js +92 -0
  30. package/dist/config/registry.js.map +1 -1
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +11 -10
  33. package/dist/config.js.map +1 -1
  34. package/dist/deriver/queue-manager.d.ts +30 -2
  35. package/dist/deriver/queue-manager.d.ts.map +1 -1
  36. package/dist/deriver/queue-manager.js +54 -9
  37. package/dist/deriver/queue-manager.js.map +1 -1
  38. package/dist/dispatch/config-domain-handler.d.ts +125 -0
  39. package/dist/dispatch/config-domain-handler.d.ts.map +1 -0
  40. package/dist/dispatch/config-domain-handler.js +160 -0
  41. package/dist/dispatch/config-domain-handler.js.map +1 -0
  42. package/dist/dispatch/contracts/input-contracts.d.ts.map +1 -1
  43. package/dist/dispatch/contracts/input-contracts.js +19 -1
  44. package/dist/dispatch/contracts/input-contracts.js.map +1 -1
  45. package/dist/docs/export-document.js +3721 -696
  46. package/dist/docs/export-document.js.map +3 -3
  47. package/dist/gateway-client/client.d.ts +123 -0
  48. package/dist/gateway-client/client.d.ts.map +1 -0
  49. package/dist/gateway-client/client.js +93 -0
  50. package/dist/gateway-client/client.js.map +1 -0
  51. package/dist/gateway-client/generated/client/client.gen.d.ts +3 -0
  52. package/dist/gateway-client/generated/client/client.gen.d.ts.map +1 -0
  53. package/dist/gateway-client/generated/client/client.gen.js +217 -0
  54. package/dist/gateway-client/generated/client/client.gen.js.map +1 -0
  55. package/dist/gateway-client/generated/client/index.d.ts +11 -0
  56. package/dist/gateway-client/generated/client/index.d.ts.map +1 -0
  57. package/dist/gateway-client/generated/client/index.js +7 -0
  58. package/dist/gateway-client/generated/client/index.js.map +1 -0
  59. package/dist/gateway-client/generated/client/types.gen.d.ts +121 -0
  60. package/dist/gateway-client/generated/client/types.gen.d.ts.map +1 -0
  61. package/dist/gateway-client/generated/client/types.gen.js +3 -0
  62. package/dist/gateway-client/generated/client/types.gen.js.map +1 -0
  63. package/dist/gateway-client/generated/client/utils.gen.d.ts +38 -0
  64. package/dist/gateway-client/generated/client/utils.gen.d.ts.map +1 -0
  65. package/dist/gateway-client/generated/client/utils.gen.js +229 -0
  66. package/dist/gateway-client/generated/client/utils.gen.js.map +1 -0
  67. package/dist/gateway-client/generated/client.gen.d.ts +13 -0
  68. package/dist/gateway-client/generated/client.gen.d.ts.map +1 -0
  69. package/dist/gateway-client/generated/client.gen.js +4 -0
  70. package/dist/gateway-client/generated/client.gen.js.map +1 -0
  71. package/dist/gateway-client/generated/core/auth.gen.d.ts +26 -0
  72. package/dist/gateway-client/generated/core/auth.gen.d.ts.map +1 -0
  73. package/dist/gateway-client/generated/core/auth.gen.js +15 -0
  74. package/dist/gateway-client/generated/core/auth.gen.js.map +1 -0
  75. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts +26 -0
  76. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts.map +1 -0
  77. package/dist/gateway-client/generated/core/bodySerializer.gen.js +58 -0
  78. package/dist/gateway-client/generated/core/bodySerializer.gen.js.map +1 -0
  79. package/dist/gateway-client/generated/core/params.gen.d.ts +44 -0
  80. package/dist/gateway-client/generated/core/params.gen.d.ts.map +1 -0
  81. package/dist/gateway-client/generated/core/params.gen.js +101 -0
  82. package/dist/gateway-client/generated/core/params.gen.js.map +1 -0
  83. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts +34 -0
  84. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts.map +1 -0
  85. package/dist/gateway-client/generated/core/pathSerializer.gen.js +107 -0
  86. package/dist/gateway-client/generated/core/pathSerializer.gen.js.map +1 -0
  87. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts +19 -0
  88. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  89. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js +93 -0
  90. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js.map +1 -0
  91. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts +72 -0
  92. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  93. package/dist/gateway-client/generated/core/serverSentEvents.gen.js +133 -0
  94. package/dist/gateway-client/generated/core/serverSentEvents.gen.js.map +1 -0
  95. package/dist/gateway-client/generated/core/types.gen.d.ts +84 -0
  96. package/dist/gateway-client/generated/core/types.gen.d.ts.map +1 -0
  97. package/dist/gateway-client/generated/core/types.gen.js +3 -0
  98. package/dist/gateway-client/generated/core/types.gen.js.map +1 -0
  99. package/dist/gateway-client/generated/core/utils.gen.d.ts +20 -0
  100. package/dist/gateway-client/generated/core/utils.gen.d.ts.map +1 -0
  101. package/dist/gateway-client/generated/core/utils.gen.js +88 -0
  102. package/dist/gateway-client/generated/core/utils.gen.js.map +1 -0
  103. package/dist/gateway-client/generated/index.d.ts +3 -0
  104. package/dist/gateway-client/generated/index.d.ts.map +1 -0
  105. package/dist/gateway-client/generated/index.js +3 -0
  106. package/dist/gateway-client/generated/index.js.map +1 -0
  107. package/dist/gateway-client/generated/namespaces.gen.d.ts +512 -0
  108. package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -0
  109. package/dist/gateway-client/generated/namespaces.gen.js +521 -0
  110. package/dist/gateway-client/generated/namespaces.gen.js.map +1 -0
  111. package/dist/gateway-client/generated/sdk.gen.d.ts +1780 -0
  112. package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -0
  113. package/dist/gateway-client/generated/sdk.gen.js +3811 -0
  114. package/dist/gateway-client/generated/sdk.gen.js.map +1 -0
  115. package/dist/gateway-client/generated/types.gen.d.ts +14681 -0
  116. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -0
  117. package/dist/gateway-client/generated/types.gen.js +3 -0
  118. package/dist/gateway-client/generated/types.gen.js.map +1 -0
  119. package/dist/gateway-client/index.d.ts +27 -0
  120. package/dist/gateway-client/index.d.ts.map +1 -0
  121. package/dist/gateway-client/index.js +25 -0
  122. package/dist/gateway-client/index.js.map +1 -0
  123. package/dist/gc/cleanup.d.ts +23 -8
  124. package/dist/gc/cleanup.d.ts.map +1 -1
  125. package/dist/gc/cleanup.js +287 -22
  126. package/dist/gc/cleanup.js.map +1 -1
  127. package/dist/index.d.ts +10 -0
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +20 -0
  130. package/dist/index.js.map +1 -1
  131. package/dist/init.d.ts.map +1 -1
  132. package/dist/init.js +28 -0
  133. package/dist/init.js.map +1 -1
  134. package/dist/internal.d.ts +10 -1
  135. package/dist/internal.d.ts.map +1 -1
  136. package/dist/internal.js +18 -1
  137. package/dist/internal.js.map +1 -1
  138. package/dist/llm/catalog-model-resolver.d.ts +19 -0
  139. package/dist/llm/catalog-model-resolver.d.ts.map +1 -1
  140. package/dist/llm/catalog-model-resolver.js +36 -0
  141. package/dist/llm/catalog-model-resolver.js.map +1 -1
  142. package/dist/llm/catalog-resolver.d.ts +112 -0
  143. package/dist/llm/catalog-resolver.d.ts.map +1 -0
  144. package/dist/llm/catalog-resolver.js +207 -0
  145. package/dist/llm/catalog-resolver.js.map +1 -0
  146. package/dist/llm/catalog-seeder.d.ts +96 -0
  147. package/dist/llm/catalog-seeder.d.ts.map +1 -0
  148. package/dist/llm/catalog-seeder.js +189 -0
  149. package/dist/llm/catalog-seeder.js.map +1 -0
  150. package/dist/llm/cli-ops.d.ts +16 -0
  151. package/dist/llm/cli-ops.d.ts.map +1 -1
  152. package/dist/llm/cli-ops.js +37 -10
  153. package/dist/llm/cli-ops.js.map +1 -1
  154. package/dist/llm/complexity-classifier.d.ts +208 -0
  155. package/dist/llm/complexity-classifier.d.ts.map +1 -0
  156. package/dist/llm/complexity-classifier.js +359 -0
  157. package/dist/llm/complexity-classifier.js.map +1 -0
  158. package/dist/llm/credential-pool.d.ts +2 -0
  159. package/dist/llm/credential-pool.d.ts.map +1 -1
  160. package/dist/llm/credential-pool.js +5 -2
  161. package/dist/llm/credential-pool.js.map +1 -1
  162. package/dist/llm/credentials-store.d.ts +10 -14
  163. package/dist/llm/credentials-store.d.ts.map +1 -1
  164. package/dist/llm/credentials-store.js.map +1 -1
  165. package/dist/llm/cross-provider-selector.d.ts +249 -0
  166. package/dist/llm/cross-provider-selector.d.ts.map +1 -0
  167. package/dist/llm/cross-provider-selector.js +572 -0
  168. package/dist/llm/cross-provider-selector.js.map +1 -0
  169. package/dist/llm/entity-ops.d.ts +299 -0
  170. package/dist/llm/entity-ops.d.ts.map +1 -0
  171. package/dist/llm/entity-ops.js +441 -0
  172. package/dist/llm/entity-ops.js.map +1 -0
  173. package/dist/llm/index.d.ts +17 -0
  174. package/dist/llm/index.d.ts.map +1 -1
  175. package/dist/llm/index.js +9 -0
  176. package/dist/llm/index.js.map +1 -1
  177. package/dist/llm/llm-queue-admit.d.ts +118 -0
  178. package/dist/llm/llm-queue-admit.d.ts.map +1 -0
  179. package/dist/llm/llm-queue-admit.js +275 -0
  180. package/dist/llm/llm-queue-admit.js.map +1 -0
  181. package/dist/llm/local-model-fit.d.ts +260 -0
  182. package/dist/llm/local-model-fit.d.ts.map +1 -0
  183. package/dist/llm/local-model-fit.js +563 -0
  184. package/dist/llm/local-model-fit.js.map +1 -0
  185. package/dist/llm/oauth/device-code.d.ts.map +1 -1
  186. package/dist/llm/oauth/device-code.js +2 -8
  187. package/dist/llm/oauth/device-code.js.map +1 -1
  188. package/dist/llm/oauth/google-pkce.d.ts.map +1 -1
  189. package/dist/llm/oauth/google-pkce.js +2 -18
  190. package/dist/llm/oauth/google-pkce.js.map +1 -1
  191. package/dist/llm/oauth/pkce.d.ts +70 -0
  192. package/dist/llm/oauth/pkce.d.ts.map +1 -1
  193. package/dist/llm/oauth/pkce.js +106 -29
  194. package/dist/llm/oauth/pkce.js.map +1 -1
  195. package/dist/llm/onboarding/front-door.d.ts +146 -0
  196. package/dist/llm/onboarding/front-door.d.ts.map +1 -0
  197. package/dist/llm/onboarding/front-door.js +153 -0
  198. package/dist/llm/onboarding/front-door.js.map +1 -0
  199. package/dist/llm/onboarding/login-engine.d.ts +175 -0
  200. package/dist/llm/onboarding/login-engine.d.ts.map +1 -0
  201. package/dist/llm/onboarding/login-engine.js +286 -0
  202. package/dist/llm/onboarding/login-engine.js.map +1 -0
  203. package/dist/llm/pi/pi-gondolin-env.d.ts +23 -0
  204. package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -1
  205. package/dist/llm/pi/pi-gondolin-env.js +2 -2
  206. package/dist/llm/pi/pi-gondolin-env.js.map +1 -1
  207. package/dist/llm/plugin-facade.js +4612 -1042
  208. package/dist/llm/plugin-facade.js.map +3 -3
  209. package/dist/llm/provider-registry/builtin/anthropic.d.ts.map +1 -1
  210. package/dist/llm/provider-registry/builtin/anthropic.js +23 -10
  211. package/dist/llm/provider-registry/builtin/anthropic.js.map +1 -1
  212. package/dist/llm/provider-registry/builtin/ollama.d.ts +18 -0
  213. package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
  214. package/dist/llm/provider-registry/builtin/ollama.js +20 -2
  215. package/dist/llm/provider-registry/builtin/ollama.js.map +1 -1
  216. package/dist/llm/provider-registry/provider-alias.d.ts +62 -0
  217. package/dist/llm/provider-registry/provider-alias.d.ts.map +1 -0
  218. package/dist/llm/provider-registry/provider-alias.js +85 -0
  219. package/dist/llm/provider-registry/provider-alias.js.map +1 -0
  220. package/dist/llm/provider-registry/provider-defs.d.ts +45 -0
  221. package/dist/llm/provider-registry/provider-defs.d.ts.map +1 -0
  222. package/dist/llm/provider-registry/provider-defs.js +145 -0
  223. package/dist/llm/provider-registry/provider-defs.js.map +1 -0
  224. package/dist/llm/provider-registry/provider-seed.d.ts +78 -0
  225. package/dist/llm/provider-registry/provider-seed.d.ts.map +1 -0
  226. package/dist/llm/provider-registry/provider-seed.js +113 -0
  227. package/dist/llm/provider-registry/provider-seed.js.map +1 -0
  228. package/dist/llm/role-executor.d.ts.map +1 -1
  229. package/dist/llm/role-executor.js +36 -0
  230. package/dist/llm/role-executor.js.map +1 -1
  231. package/dist/llm/role-resolver.d.ts.map +1 -1
  232. package/dist/llm/role-resolver.js +52 -10
  233. package/dist/llm/role-resolver.js.map +1 -1
  234. package/dist/llm/system-resolver.d.ts.map +1 -1
  235. package/dist/llm/system-resolver.js +73 -22
  236. package/dist/llm/system-resolver.js.map +1 -1
  237. package/dist/llm/transports/codex-responses.d.ts +111 -88
  238. package/dist/llm/transports/codex-responses.d.ts.map +1 -1
  239. package/dist/llm/transports/codex-responses.js +456 -258
  240. package/dist/llm/transports/codex-responses.js.map +1 -1
  241. package/dist/memory/learnings.d.ts +4 -0
  242. package/dist/memory/learnings.d.ts.map +1 -1
  243. package/dist/memory/patterns.d.ts +4 -0
  244. package/dist/memory/patterns.d.ts.map +1 -1
  245. package/dist/metrics/index.d.ts +2 -0
  246. package/dist/metrics/index.d.ts.map +1 -1
  247. package/dist/metrics/index.js +1 -0
  248. package/dist/metrics/index.js.map +1 -1
  249. package/dist/orchestration/spawn.d.ts +89 -0
  250. package/dist/orchestration/spawn.d.ts.map +1 -1
  251. package/dist/orchestration/spawn.js +68 -0
  252. package/dist/orchestration/spawn.js.map +1 -1
  253. package/dist/playbooks/cantbook-profile.d.ts +96 -0
  254. package/dist/playbooks/cantbook-profile.d.ts.map +1 -0
  255. package/dist/playbooks/cantbook-profile.js +97 -0
  256. package/dist/playbooks/cantbook-profile.js.map +1 -0
  257. package/dist/playbooks/guarded-deterministic-runner.d.ts +153 -0
  258. package/dist/playbooks/guarded-deterministic-runner.d.ts.map +1 -0
  259. package/dist/playbooks/guarded-deterministic-runner.js +155 -0
  260. package/dist/playbooks/guarded-deterministic-runner.js.map +1 -0
  261. package/dist/playbooks/index.d.ts +2 -0
  262. package/dist/playbooks/index.d.ts.map +1 -1
  263. package/dist/playbooks/index.js +10 -0
  264. package/dist/playbooks/index.js.map +1 -1
  265. package/dist/playbooks/pi-runner-wiring.d.ts +75 -0
  266. package/dist/playbooks/pi-runner-wiring.d.ts.map +1 -0
  267. package/dist/playbooks/pi-runner-wiring.js +82 -0
  268. package/dist/playbooks/pi-runner-wiring.js.map +1 -0
  269. package/dist/release/index.d.ts +2 -2
  270. package/dist/release/index.d.ts.map +1 -1
  271. package/dist/release/index.js +1 -1
  272. package/dist/release/index.js.map +1 -1
  273. package/dist/release/reconcile.d.ts +97 -0
  274. package/dist/release/reconcile.d.ts.map +1 -1
  275. package/dist/release/reconcile.js +412 -5
  276. package/dist/release/reconcile.js.map +1 -1
  277. package/dist/resources/backend.d.ts +155 -0
  278. package/dist/resources/backend.d.ts.map +1 -0
  279. package/dist/resources/backend.js +23 -0
  280. package/dist/resources/backend.js.map +1 -0
  281. package/dist/resources/linux-backend.d.ts +167 -0
  282. package/dist/resources/linux-backend.d.ts.map +1 -0
  283. package/dist/resources/linux-backend.js +259 -0
  284. package/dist/resources/linux-backend.js.map +1 -0
  285. package/dist/resources/monitor.d.ts +230 -0
  286. package/dist/resources/monitor.d.ts.map +1 -0
  287. package/dist/resources/monitor.js +255 -0
  288. package/dist/resources/monitor.js.map +1 -0
  289. package/dist/resources/spawn-wrapper.d.ts +265 -0
  290. package/dist/resources/spawn-wrapper.d.ts.map +1 -0
  291. package/dist/resources/spawn-wrapper.js +304 -0
  292. package/dist/resources/spawn-wrapper.js.map +1 -0
  293. package/dist/runtime/openapi/generate-openapi.d.ts +211 -0
  294. package/dist/runtime/openapi/generate-openapi.d.ts.map +1 -0
  295. package/dist/runtime/openapi/generate-openapi.js +300 -0
  296. package/dist/runtime/openapi/generate-openapi.js.map +1 -0
  297. package/dist/runtime/openapi/index.d.ts +16 -0
  298. package/dist/runtime/openapi/index.d.ts.map +1 -0
  299. package/dist/runtime/openapi/index.js +16 -0
  300. package/dist/runtime/openapi/index.js.map +1 -0
  301. package/dist/selfimprove/budget.d.ts +11 -2
  302. package/dist/selfimprove/budget.d.ts.map +1 -1
  303. package/dist/selfimprove/budget.js +11 -2
  304. package/dist/selfimprove/budget.js.map +1 -1
  305. package/dist/selfimprove/fix-gen.d.ts +229 -0
  306. package/dist/selfimprove/fix-gen.d.ts.map +1 -0
  307. package/dist/selfimprove/fix-gen.js +266 -0
  308. package/dist/selfimprove/fix-gen.js.map +1 -0
  309. package/dist/selfimprove/run-loop.d.ts +44 -4
  310. package/dist/selfimprove/run-loop.d.ts.map +1 -1
  311. package/dist/selfimprove/run-loop.js +73 -6
  312. package/dist/selfimprove/run-loop.js.map +1 -1
  313. package/dist/selfimprove/scenarios/dhq-replay-find/golden.json +32 -0
  314. package/dist/selfimprove/scenarios/dhq-replay-find/scenario.json +18 -0
  315. package/dist/sentient/cross-project-hygiene.d.ts +11 -2
  316. package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
  317. package/dist/sentient/cross-project-hygiene.js +73 -10
  318. package/dist/sentient/cross-project-hygiene.js.map +1 -1
  319. package/dist/sentient/daemon.d.ts.map +1 -1
  320. package/dist/sentient/daemon.js +7 -2
  321. package/dist/sentient/daemon.js.map +1 -1
  322. package/dist/sentient/worktree-dispatch.d.ts.map +1 -1
  323. package/dist/sentient/worktree-dispatch.js +8 -1
  324. package/dist/sentient/worktree-dispatch.js.map +1 -1
  325. package/dist/setup/config-json-merge.d.ts.map +1 -1
  326. package/dist/setup/config-json-merge.js +14 -0
  327. package/dist/setup/config-json-merge.js.map +1 -1
  328. package/dist/setup/index.d.ts +23 -11
  329. package/dist/setup/index.d.ts.map +1 -1
  330. package/dist/setup/index.js +25 -12
  331. package/dist/setup/index.js.map +1 -1
  332. package/dist/setup/sections/llm.d.ts +28 -1
  333. package/dist/setup/sections/llm.d.ts.map +1 -1
  334. package/dist/setup/sections/llm.js +27 -6
  335. package/dist/setup/sections/llm.js.map +1 -1
  336. package/dist/setup/sections/models-roles.d.ts +40 -0
  337. package/dist/setup/sections/models-roles.d.ts.map +1 -0
  338. package/dist/setup/sections/models-roles.js +219 -0
  339. package/dist/setup/sections/models-roles.js.map +1 -0
  340. package/dist/setup/wizard.d.ts +19 -1
  341. package/dist/setup/wizard.d.ts.map +1 -1
  342. package/dist/setup/wizard.js.map +1 -1
  343. package/dist/spawn/branch-lock.d.ts.map +1 -1
  344. package/dist/spawn/branch-lock.js +7 -1
  345. package/dist/spawn/branch-lock.js.map +1 -1
  346. package/dist/store/attachment-repair.d.ts +110 -0
  347. package/dist/store/attachment-repair.d.ts.map +1 -0
  348. package/dist/store/attachment-repair.js +326 -0
  349. package/dist/store/attachment-repair.js.map +1 -0
  350. package/dist/store/attachment-store.d.ts.map +1 -1
  351. package/dist/store/attachment-store.js +24 -7
  352. package/dist/store/attachment-store.js.map +1 -1
  353. package/dist/store/schedule-schema.d.ts +195 -0
  354. package/dist/store/schedule-schema.d.ts.map +1 -0
  355. package/dist/store/schedule-schema.js +84 -0
  356. package/dist/store/schedule-schema.js.map +1 -0
  357. package/dist/store/schedule-store.d.ts +144 -0
  358. package/dist/store/schedule-store.d.ts.map +1 -0
  359. package/dist/store/schedule-store.js +162 -0
  360. package/dist/store/schedule-store.js.map +1 -0
  361. package/dist/store/schema/attachments.d.ts +1 -1
  362. package/dist/store/schema/cleo-global/index.d.ts +3 -0
  363. package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
  364. package/dist/store/schema/cleo-global/index.js +5 -0
  365. package/dist/store/schema/cleo-global/index.js.map +1 -1
  366. package/dist/store/schema/cleo-global/models-catalog.d.ts +359 -0
  367. package/dist/store/schema/cleo-global/models-catalog.d.ts.map +1 -0
  368. package/dist/store/schema/cleo-global/models-catalog.js +114 -0
  369. package/dist/store/schema/cleo-global/models-catalog.js.map +1 -0
  370. package/dist/store/schema/cleo-global/providers.d.ts +279 -0
  371. package/dist/store/schema/cleo-global/providers.d.ts.map +1 -0
  372. package/dist/store/schema/cleo-global/providers.js +94 -0
  373. package/dist/store/schema/cleo-global/providers.js.map +1 -0
  374. package/dist/store/schema/cleo-global/services.d.ts +493 -0
  375. package/dist/store/schema/cleo-global/services.d.ts.map +1 -0
  376. package/dist/store/schema/cleo-global/services.js +200 -0
  377. package/dist/store/schema/cleo-global/services.js.map +1 -0
  378. package/dist/store/schema/cleo-project/docs.d.ts +1 -1
  379. package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
  380. package/dist/store/schema/cleo-shared/brain.d.ts +2 -2
  381. package/dist/store/schema/memory-schema.d.ts +182 -2
  382. package/dist/store/schema/memory-schema.d.ts.map +1 -1
  383. package/dist/store/schema/memory-schema.js +111 -2
  384. package/dist/store/schema/memory-schema.js.map +1 -1
  385. package/dist/store/schema/provenance/releases.d.ts +1 -1
  386. package/dist/store/service-connections-accessor.d.ts +313 -0
  387. package/dist/store/service-connections-accessor.d.ts.map +1 -0
  388. package/dist/store/service-connections-accessor.js +464 -0
  389. package/dist/store/service-connections-accessor.js.map +1 -0
  390. package/dist/store/service-host-matcher.d.ts +70 -0
  391. package/dist/store/service-host-matcher.d.ts.map +1 -0
  392. package/dist/store/service-host-matcher.js +127 -0
  393. package/dist/store/service-host-matcher.js.map +1 -0
  394. package/dist/store/service-injection.d.ts +152 -0
  395. package/dist/store/service-injection.d.ts.map +1 -0
  396. package/dist/store/service-injection.js +225 -0
  397. package/dist/store/service-injection.js.map +1 -0
  398. package/dist/store/service-oauth.d.ts +287 -0
  399. package/dist/store/service-oauth.d.ts.map +1 -0
  400. package/dist/store/service-oauth.js +524 -0
  401. package/dist/store/service-oauth.js.map +1 -0
  402. package/dist/store/service-trust-gate.d.ts +164 -0
  403. package/dist/store/service-trust-gate.d.ts.map +1 -0
  404. package/dist/store/service-trust-gate.js +122 -0
  405. package/dist/store/service-trust-gate.js.map +1 -0
  406. package/dist/store/validation-schemas.d.ts +4 -4
  407. package/dist/tasks/agent-lifecycle-lane.d.ts +175 -0
  408. package/dist/tasks/agent-lifecycle-lane.d.ts.map +1 -0
  409. package/dist/tasks/agent-lifecycle-lane.js +176 -0
  410. package/dist/tasks/agent-lifecycle-lane.js.map +1 -0
  411. package/dist/tasks/complete.d.ts +17 -0
  412. package/dist/tasks/complete.d.ts.map +1 -1
  413. package/dist/tasks/complete.js +53 -10
  414. package/dist/tasks/complete.js.map +1 -1
  415. package/dist/tasks/depends-waiver-audit.d.ts +52 -0
  416. package/dist/tasks/depends-waiver-audit.d.ts.map +1 -0
  417. package/dist/tasks/depends-waiver-audit.js +36 -0
  418. package/dist/tasks/depends-waiver-audit.js.map +1 -0
  419. package/dist/tasks/engine-wrap.d.ts +36 -2
  420. package/dist/tasks/engine-wrap.d.ts.map +1 -1
  421. package/dist/tasks/engine-wrap.js +44 -2
  422. package/dist/tasks/engine-wrap.js.map +1 -1
  423. package/dist/tasks/evidence.d.ts +34 -2
  424. package/dist/tasks/evidence.d.ts.map +1 -1
  425. package/dist/tasks/evidence.js +293 -35
  426. package/dist/tasks/evidence.js.map +1 -1
  427. package/dist/tasks/index.d.ts +1 -0
  428. package/dist/tasks/index.d.ts.map +1 -1
  429. package/dist/tasks/index.js +1 -0
  430. package/dist/tasks/index.js.map +1 -1
  431. package/dist/tasks/ops.d.ts +3 -0
  432. package/dist/tasks/ops.d.ts.map +1 -1
  433. package/dist/tasks/task-ops.d.ts +1 -1
  434. package/dist/tasks/task-ops.d.ts.map +1 -1
  435. package/dist/tasks/task-ops.js +3 -1
  436. package/dist/tasks/task-ops.js.map +1 -1
  437. package/dist/tasks/task-reparent.d.ts +90 -0
  438. package/dist/tasks/task-reparent.d.ts.map +1 -1
  439. package/dist/tasks/task-reparent.js +171 -0
  440. package/dist/tasks/task-reparent.js.map +1 -1
  441. package/dist/tools/builtin-agent-tools.d.ts.map +1 -1
  442. package/dist/tools/builtin-agent-tools.js +41 -0
  443. package/dist/tools/builtin-agent-tools.js.map +1 -1
  444. package/dist/tools/exec-code-agent-tool.d.ts +179 -0
  445. package/dist/tools/exec-code-agent-tool.d.ts.map +1 -0
  446. package/dist/tools/exec-code-agent-tool.js +239 -0
  447. package/dist/tools/exec-code-agent-tool.js.map +1 -0
  448. package/dist/tools/index.d.ts +6 -0
  449. package/dist/tools/index.d.ts.map +1 -1
  450. package/dist/tools/index.js +15 -0
  451. package/dist/tools/index.js.map +1 -1
  452. package/dist/tools/mcp-agent-tool.d.ts +189 -0
  453. package/dist/tools/mcp-agent-tool.d.ts.map +1 -0
  454. package/dist/tools/mcp-agent-tool.js +243 -0
  455. package/dist/tools/mcp-agent-tool.js.map +1 -0
  456. package/dist/tools/media-agent-tools.d.ts +105 -0
  457. package/dist/tools/media-agent-tools.d.ts.map +1 -0
  458. package/dist/tools/media-agent-tools.js +255 -0
  459. package/dist/tools/media-agent-tools.js.map +1 -0
  460. package/dist/tools/memory-agent-tools.d.ts +99 -0
  461. package/dist/tools/memory-agent-tools.d.ts.map +1 -0
  462. package/dist/tools/memory-agent-tools.js +190 -0
  463. package/dist/tools/memory-agent-tools.js.map +1 -0
  464. package/dist/tools/schedule-agent-tools.d.ts +151 -0
  465. package/dist/tools/schedule-agent-tools.d.ts.map +1 -0
  466. package/dist/tools/schedule-agent-tools.js +238 -0
  467. package/dist/tools/schedule-agent-tools.js.map +1 -0
  468. package/dist/tools/skill-agent-tool.d.ts +108 -0
  469. package/dist/tools/skill-agent-tool.d.ts.map +1 -0
  470. package/dist/tools/skill-agent-tool.js +135 -0
  471. package/dist/tools/skill-agent-tool.js.map +1 -0
  472. package/dist/validation/engine-ops.d.ts.map +1 -1
  473. package/dist/validation/engine-ops.js +17 -1
  474. package/dist/validation/engine-ops.js.map +1 -1
  475. package/dist/verification/verify-tools.d.ts.map +1 -1
  476. package/dist/verification/verify-tools.js +5 -6
  477. package/dist/verification/verify-tools.js.map +1 -1
  478. package/migrations/drizzle-brain/20260610000001_t10405-bitemporal-network-columns/migration.sql +71 -0
  479. package/migrations/drizzle-cleo-global/20260609000000_t11937-service-vault/migration.sql +93 -0
  480. package/migrations/drizzle-cleo-global/20260609010000_t11733-models-catalog/migration.sql +65 -0
  481. package/migrations/drizzle-cleo-global/20260609020000_t11703-providers/migration.sql +52 -0
  482. package/migrations/drizzle-cleo-global/20260610000000_t11962-schedules/migration.sql +48 -0
  483. package/migrations/drizzle-cleo-project/20260610000000_t11962-schedules/migration.sql +48 -0
  484. package/package.json +33 -13
  485. package/templates/workflows/release-prepare.yml.tmpl +48 -2
@@ -0,0 +1,153 @@
1
+ /**
2
+ * `runFrontDoorLogin` — the shared onboarding front-door orchestrator (T11725 · M3).
3
+ *
4
+ * This is the ONE function every front-door entry point (`cleo login`,
5
+ * `cleo auth login`, `cleo llm login`) dispatches to. It owns the small amount
6
+ * of orchestration that sits ABOVE the 3-step onboarding engine
7
+ * ({@link runOnboardingLogin}):
8
+ *
9
+ * 1. **resolve provider** — alias → canonical via {@link getProviderProfile}.
10
+ * 2. **resolve auth method** — caller-supplied, else inferred from the
11
+ * provider profile (OAuth when the profile advertises an `oauth` config,
12
+ * else `api_key`).
13
+ * 3. **acquire the credential secret**:
14
+ * - `api_key` → the caller passes the raw key in {@link FrontDoorLoginOptions.token}.
15
+ * - `oauth` → the caller's injected {@link OAuthTokenAcquirer} runs the
16
+ * interactive browser / device-code dance and RETURNS the token. The
17
+ * interactive step lives in the CLI (so this module stays
18
+ * non-interactive and unit-testable); the acquirer is a seam, not a hard
19
+ * dependency.
20
+ * 4. **run the engine** — hand the acquired token to {@link runOnboardingLogin},
21
+ * which performs connect → select → bind → validate and returns the typed,
22
+ * secret-free {@link OnboardingResult} envelope.
23
+ *
24
+ * ## Why a core orchestrator (and not CLI glue)
25
+ *
26
+ * Keeping this in `@cleocode/core` means the CLI handlers for all three entry
27
+ * points are THIN — they parse flags, build a {@link ReadlineWizardIO}, supply
28
+ * the OAuth acquirer, and call THIS function. No entry point re-implements the
29
+ * picker, the auth-method inference, or the engine call (AC2: no duplicated
30
+ * handler logic). Studio / the future API surface reuse the same orchestrator.
31
+ *
32
+ * ## Security
33
+ *
34
+ * The returned {@link OnboardingResult} carries NO secret fields (inherited from
35
+ * the engine contract). The raw token flows only from the acquirer into the
36
+ * engine's connect step; it is never logged or surfaced on the envelope.
37
+ *
38
+ * @module llm/onboarding/front-door
39
+ * @task T11725
40
+ * @epic T11671 (E6-ONBOARDING-FRONT-DOOR)
41
+ */
42
+ import { getProviderProfile } from '../provider-registry/index.js';
43
+ import { runOnboardingLogin, } from './login-engine.js';
44
+ /**
45
+ * The default front-door dependency set — the real, merged core accessors.
46
+ *
47
+ * @internal
48
+ */
49
+ function defaultFrontDoorDeps() {
50
+ return {
51
+ getProviderProfile,
52
+ runOnboardingLogin: (provider, opts, deps) => runOnboardingLogin(provider, opts, deps),
53
+ };
54
+ }
55
+ // ---------------------------------------------------------------------------
56
+ // Public API
57
+ // ---------------------------------------------------------------------------
58
+ /**
59
+ * Resolve the auth method for a provider profile: caller override wins, else
60
+ * `oauth` when the profile advertises an OAuth config, else `api_key`.
61
+ *
62
+ * @param profile - The resolved provider profile.
63
+ * @param override - Optional explicit auth mode from the caller.
64
+ * @returns The effective {@link OnboardingAuthMode}.
65
+ * @task T11725
66
+ */
67
+ export function resolveAuthMode(profile, override) {
68
+ if (override)
69
+ return override;
70
+ return profile.oauth ? 'oauth' : 'api_key';
71
+ }
72
+ /**
73
+ * Run the shared onboarding front-door flow for a provider (T11725 · M3).
74
+ *
75
+ * Resolves the provider + auth method, acquires the credential secret (raw API
76
+ * key from `opts.token`, or via the injected {@link OAuthTokenAcquirer} for the
77
+ * OAuth path), then delegates the heavy lifting to {@link runOnboardingLogin}.
78
+ *
79
+ * Mirrors the engine's never-throw-on-expected-failure contract: an unknown
80
+ * provider or a missing api-key secret returns a failed {@link OnboardingResult}
81
+ * envelope rather than throwing. The OAuth acquirer's own errors DO propagate —
82
+ * an aborted browser flow is a hard, caller-visible failure.
83
+ *
84
+ * @param provider - Provider name or alias (e.g. `'anthropic'`, `'codex'`).
85
+ * @param opts - {@link FrontDoorLoginOptions}.
86
+ * @param acquireOAuth - Interactive OAuth token acquirer (the CLI's browser flow).
87
+ * Only invoked on the `oauth` path; may be omitted when the flow is `api_key`.
88
+ * @param deps - Injectable accessor seam; defaults to real core accessors.
89
+ * @returns The typed onboarding result envelope.
90
+ * @task T11725
91
+ */
92
+ export async function runFrontDoorLogin(provider, opts = {}, acquireOAuth, deps = defaultFrontDoorDeps()) {
93
+ // --- Resolve provider (alias → canonical) -------------------------------
94
+ const profile = await deps.getProviderProfile(provider);
95
+ if (!profile) {
96
+ // Defer the canonical "unknown provider" envelope to the engine so the
97
+ // failure shape is produced in exactly one place (DRY).
98
+ return deps.runOnboardingLogin(provider, buildEngineOptions(opts, opts.token, false));
99
+ }
100
+ const canonicalProvider = profile.name;
101
+ // --- Resolve auth method ------------------------------------------------
102
+ const authMode = resolveAuthMode(profile, opts.authMode);
103
+ // --- Acquire the credential ---------------------------------------------
104
+ // api_key: the raw key is already in `opts.token` — the engine's connect step
105
+ // performs the single write.
106
+ // oauth: the acquirer runs the interactive browser flow AND stores the
107
+ // credential, so the engine connect step skips its own write.
108
+ let token = opts.token;
109
+ let credentialAlreadyStored = false;
110
+ let label = opts.label;
111
+ if (authMode === 'oauth') {
112
+ if (!acquireOAuth) {
113
+ throw new Error(`OAuth login for '${canonicalProvider}' requires an interactive token acquirer. ` +
114
+ 'This entry point cannot complete an OAuth flow non-interactively — ' +
115
+ `supply an API key with --api-key/--token, or run on a terminal.`);
116
+ }
117
+ const acquired = await acquireOAuth(canonicalProvider);
118
+ credentialAlreadyStored = true;
119
+ // Prefer the acquirer-reported label so the engine binds to the credential
120
+ // the OAuth flow actually stored.
121
+ label = label ?? acquired.label;
122
+ token = undefined;
123
+ }
124
+ // --- Run the engine (connect → select → bind → validate) ----------------
125
+ return deps.runOnboardingLogin(canonicalProvider, buildEngineOptions({ ...opts, authMode, label }, token, credentialAlreadyStored));
126
+ }
127
+ /**
128
+ * Map the front-door options + resolved token to the engine's option shape.
129
+ *
130
+ * Centralised so the unknown-provider deferral path and the happy path build
131
+ * identical engine options.
132
+ *
133
+ * @internal
134
+ */
135
+ function buildEngineOptions(opts, token, credentialAlreadyStored) {
136
+ const engineOpts = {};
137
+ if (token !== undefined)
138
+ engineOpts.token = token;
139
+ if (opts.authMode !== undefined)
140
+ engineOpts.authMode = opts.authMode;
141
+ if (opts.label !== undefined)
142
+ engineOpts.label = opts.label;
143
+ if (opts.model !== undefined)
144
+ engineOpts.model = opts.model;
145
+ if (opts.role !== undefined)
146
+ engineOpts.role = opts.role;
147
+ if (opts.projectRoot !== undefined)
148
+ engineOpts.projectRoot = opts.projectRoot;
149
+ if (credentialAlreadyStored)
150
+ engineOpts.credentialAlreadyStored = true;
151
+ return engineOpts;
152
+ }
153
+ //# sourceMappingURL=front-door.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"front-door.js","sourceRoot":"","sources":["../../../src/llm/onboarding/front-door.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * `runOnboardingLogin` — the 3-step onboarding login engine (T11724 · M3).
3
+ *
4
+ * The imperative front-door flow that takes a provider from a cold start to a
5
+ * usable, validated profile binding. It ORCHESTRATES the already-merged
6
+ * credential / catalog / config / resolver accessors — it does NOT reimplement
7
+ * OAuth, construct a transport, or open an LLM client (Gate-13: chokepoint only).
8
+ *
9
+ * ## The four steps
10
+ *
11
+ * 1. **connect** — resolve the provider (alias → canonical via
12
+ * {@link getProviderProfile}) and land a credential (Account) in the
13
+ * multi-credential pool via {@link addCredential}. The OAuth token / API
14
+ * key is supplied by the caller (`opts.token`): the owner-driven browser
15
+ * step (PKCE / device-code) runs in `cleo llm login` BEFORE this engine,
16
+ * so the engine itself is non-interactive and testable. OAuth-less
17
+ * providers pass the same `opts.token` as an API key (AC4).
18
+ * 2. **select** — choose a model from the catalog: `opts.model` when given
19
+ * (validated against the catalog), else the latest by `release_date` via
20
+ * {@link resolveProviderDefaultModel}.
21
+ * 3. **bind** — write the `llm.default` (or `llm.roles[role]`) config
22
+ * binding tying the account + model together via {@link setConfigValue}.
23
+ * 4. **validate** — round-trip the binding through {@link resolveLLMForSystem}
24
+ * and confirm the resolved provider/model are consistent. NOT a live LLM
25
+ * call: no token is materialized; only resolution metadata is asserted,
26
+ * and the secret stays behind the sealed handle.
27
+ *
28
+ * ## Security (AC2)
29
+ *
30
+ * The {@link OnboardingResult} envelope carries NO secret fields — never an
31
+ * access token, API key, or refresh token. The plaintext is materialized only
32
+ * at the wire via the sealed handle, never on this envelope.
33
+ *
34
+ * ## Testability (AC3)
35
+ *
36
+ * Every step depends only on the injectable {@link OnboardingDeps} seam, which
37
+ * defaults to the real core accessors. Tests pass a {@link StubOnboardingDeps}
38
+ * (stub catalog + in-memory pool/config + stub resolver) to exercise each step
39
+ * in isolation without a live browser, network, or disk.
40
+ *
41
+ * @module llm/onboarding/login-engine
42
+ * @task T11724
43
+ * @epic T11671 (E6-ONBOARDING-FRONT-DOOR)
44
+ */
45
+ import type { ModelTransport, OnboardingAuthMode, OnboardingResult, ProviderProfile, RoleName } from '@cleocode/contracts';
46
+ import { type StoredAuthType } from '../credentials-store.js';
47
+ /**
48
+ * Options for {@link runOnboardingLogin}.
49
+ *
50
+ * @task T11724
51
+ */
52
+ export interface OnboardingLoginOptions {
53
+ /**
54
+ * The credential secret to store — an OAuth access token (when
55
+ * `authMode: 'oauth'`) or a raw API key (when `authMode: 'api_key'`).
56
+ *
57
+ * The interactive OAuth browser/device-code exchange runs in
58
+ * `cleo llm login` BEFORE this engine; the resulting token is passed here so
59
+ * the engine is non-interactive and testable. When omitted, the connect step
60
+ * fails cleanly with `E_ONBOARDING_NO_CREDENTIAL` (no throw).
61
+ */
62
+ token?: string;
63
+ /**
64
+ * Auth scheme for the supplied `token`. Defaults to `'oauth'` when the
65
+ * resolved provider profile exposes an OAuth config, else `'api_key'` (AC4).
66
+ */
67
+ authMode?: OnboardingAuthMode;
68
+ /** Human-readable label stored alongside the credential. Defaults to `'oauth-login'`. */
69
+ label?: string;
70
+ /**
71
+ * Explicit model id to bind. When omitted, the latest catalog model for the
72
+ * provider (by `release_date`) is selected. When given, it is validated
73
+ * against the catalog and rejected with `E_MODEL_NOT_IN_CATALOG` on a miss.
74
+ */
75
+ model?: string;
76
+ /**
77
+ * Bind the model to a specific role (`llm.roles[role]`) instead of the
78
+ * global default (`llm.default`). The bound name surfaces as
79
+ * {@link OnboardingResult.profileName}.
80
+ */
81
+ role?: RoleName;
82
+ /** Project root passed through to the resolver during the validate step. */
83
+ projectRoot?: string;
84
+ /**
85
+ * Skip the connect-step credential write because an interactive OAuth flow
86
+ * (e.g. `cleo llm login`'s PKCE / device-code dance) has ALREADY landed the
87
+ * credential in the pool. The connect step still resolves the provider and
88
+ * records an `ok` trace, but does NOT call {@link addCredential} a second
89
+ * time. Used by the shared front-door orchestrator (T11725) so the OAuth
90
+ * token is stored exactly once.
91
+ *
92
+ * When `true`, {@link OnboardingLoginOptions.token} is NOT required.
93
+ */
94
+ credentialAlreadyStored?: boolean;
95
+ }
96
+ /**
97
+ * Minimal resolver result the validate step asserts against — a structural
98
+ * subset of `ResolvedLLMForSystem` so a stub resolver need not construct a full
99
+ * client/credential graph.
100
+ *
101
+ * @task T11724
102
+ */
103
+ export interface OnboardingResolution {
104
+ /** Provider the binding resolved to. */
105
+ provider: ModelTransport;
106
+ /** Model the binding resolved to. */
107
+ model: string;
108
+ /**
109
+ * Sealed credential handle (or `null`). The validate step reads only its
110
+ * presence + `tokenPreview` — it NEVER calls `fetch()`, so no secret is
111
+ * materialized during onboarding.
112
+ */
113
+ sealedCredential: {
114
+ tokenPreview: string;
115
+ } | null;
116
+ }
117
+ /**
118
+ * Injectable accessor seam. Defaults to the real `@cleocode/core` accessors;
119
+ * tests override individual members to exercise each step in isolation.
120
+ *
121
+ * @task T11724
122
+ */
123
+ export interface OnboardingDeps {
124
+ /** Resolve a provider profile by name/alias (alias → canonical). */
125
+ getProviderProfile: (name: string) => Promise<ProviderProfile | undefined>;
126
+ /** Persist a credential (Account) into the multi-credential pool. */
127
+ addCredential: (input: {
128
+ provider: ModelTransport;
129
+ label: string;
130
+ authType: StoredAuthType;
131
+ accessToken: string;
132
+ source: string;
133
+ }) => Promise<unknown>;
134
+ /** Map a CLEO provider name to its models.dev catalog key. */
135
+ catalogKeyForProvider: (providerName: string) => string;
136
+ /** Resolve the latest catalog model for a provider, or `null`. */
137
+ resolveProviderDefaultModel: (catalogKey: string) => string | null;
138
+ /** Validate a model id against the catalog for a provider. */
139
+ validateModelForProvider: (model: string, catalogKey: string) => {
140
+ valid: boolean;
141
+ reason: string;
142
+ };
143
+ /** Write a global config value (the `llm.default` / `llm.roles[role]` binding). */
144
+ setConfigValue: (key: string, value: unknown) => Promise<unknown>;
145
+ /**
146
+ * Round-trip resolve the binding for the validate step.
147
+ *
148
+ * `role` is the role the bind step just wrote (`llm.roles[role]`), so the
149
+ * validate resolution MUST target that role — resolving a different role
150
+ * would validate an unrelated binding (T11725 takeover review).
151
+ */
152
+ resolve: (provider: ModelTransport, projectRoot?: string, role?: RoleName) => Promise<OnboardingResolution>;
153
+ }
154
+ /**
155
+ * Run the 3-step onboarding login flow for a provider (T11724 · M3).
156
+ *
157
+ * Walks **connect → select → bind → validate**, reusing the merged credential /
158
+ * catalog / config / resolver accessors. Returns a typed {@link OnboardingResult}
159
+ * envelope with the per-step trace and the non-secret binding identifiers.
160
+ *
161
+ * Like the resolver chokepoint, this engine **never throws** for an expected
162
+ * failure (missing credential, unknown model, config write error): it returns
163
+ * an envelope whose failing step carries `status: 'failed'` and a stable `E_*`
164
+ * `code`, with `validated: false`. Unexpected accessor errors are caught and
165
+ * mapped to a failed step trace as well.
166
+ *
167
+ * @param provider - Provider name or alias (e.g. `'anthropic'`, `'codex'`).
168
+ * @param opts - {@link OnboardingLoginOptions} (token, model, role, …).
169
+ * @param deps - Injectable accessor seam (AC3); defaults to real core accessors.
170
+ * @returns The typed onboarding result envelope; never throws on expected failure.
171
+ *
172
+ * @task T11724
173
+ */
174
+ export declare function runOnboardingLogin(provider: string, opts?: OnboardingLoginOptions, deps?: OnboardingDeps): Promise<OnboardingResult>;
175
+ //# sourceMappingURL=login-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-engine.d.ts","sourceRoot":"","sources":["../../../src/llm/onboarding/login-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAGhB,eAAe,EACf,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAU7E;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;OASG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,QAAQ,EAAE,cAAc,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,gBAAgB,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACnD;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC3E,qEAAqE;IACrE,aAAa,EAAE,CAAC,KAAK,EAAE;QACrB,QAAQ,EAAE,cAAc,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,cAAc,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvB,8DAA8D;IAC9D,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IACxD,kEAAkE;IAClE,2BAA2B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACnE,8DAA8D;IAC9D,wBAAwB,EAAE,CACxB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,KACf;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,mFAAmF;IACnF,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE;;;;;;OAMG;IACH,OAAO,EAAE,CACP,QAAQ,EAAE,cAAc,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,QAAQ,KACZ,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACpC;AA6ED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,sBAA2B,EACjC,IAAI,GAAE,cAA8B,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAqM3B"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * `runOnboardingLogin` — the 3-step onboarding login engine (T11724 · M3).
3
+ *
4
+ * The imperative front-door flow that takes a provider from a cold start to a
5
+ * usable, validated profile binding. It ORCHESTRATES the already-merged
6
+ * credential / catalog / config / resolver accessors — it does NOT reimplement
7
+ * OAuth, construct a transport, or open an LLM client (Gate-13: chokepoint only).
8
+ *
9
+ * ## The four steps
10
+ *
11
+ * 1. **connect** — resolve the provider (alias → canonical via
12
+ * {@link getProviderProfile}) and land a credential (Account) in the
13
+ * multi-credential pool via {@link addCredential}. The OAuth token / API
14
+ * key is supplied by the caller (`opts.token`): the owner-driven browser
15
+ * step (PKCE / device-code) runs in `cleo llm login` BEFORE this engine,
16
+ * so the engine itself is non-interactive and testable. OAuth-less
17
+ * providers pass the same `opts.token` as an API key (AC4).
18
+ * 2. **select** — choose a model from the catalog: `opts.model` when given
19
+ * (validated against the catalog), else the latest by `release_date` via
20
+ * {@link resolveProviderDefaultModel}.
21
+ * 3. **bind** — write the `llm.default` (or `llm.roles[role]`) config
22
+ * binding tying the account + model together via {@link setConfigValue}.
23
+ * 4. **validate** — round-trip the binding through {@link resolveLLMForSystem}
24
+ * and confirm the resolved provider/model are consistent. NOT a live LLM
25
+ * call: no token is materialized; only resolution metadata is asserted,
26
+ * and the secret stays behind the sealed handle.
27
+ *
28
+ * ## Security (AC2)
29
+ *
30
+ * The {@link OnboardingResult} envelope carries NO secret fields — never an
31
+ * access token, API key, or refresh token. The plaintext is materialized only
32
+ * at the wire via the sealed handle, never on this envelope.
33
+ *
34
+ * ## Testability (AC3)
35
+ *
36
+ * Every step depends only on the injectable {@link OnboardingDeps} seam, which
37
+ * defaults to the real core accessors. Tests pass a {@link StubOnboardingDeps}
38
+ * (stub catalog + in-memory pool/config + stub resolver) to exercise each step
39
+ * in isolation without a live browser, network, or disk.
40
+ *
41
+ * @module llm/onboarding/login-engine
42
+ * @task T11724
43
+ * @epic T11671 (E6-ONBOARDING-FRONT-DOOR)
44
+ */
45
+ import { WHOAMI_ROLE_IDS } from '@cleocode/contracts';
46
+ import { setConfigValue } from '../../config.js';
47
+ import { getLogger } from '../../logger.js';
48
+ import { catalogKeyForProvider, resolveProviderDefaultModel, validateModelForProvider, } from '../catalog-model-resolver.js';
49
+ import { addCredential } from '../credentials-store.js';
50
+ import { getProviderProfile } from '../provider-registry/index.js';
51
+ import { resolveLLMForSystem } from '../system-resolver.js';
52
+ const logger = getLogger('llm-onboarding');
53
+ /**
54
+ * The default dependency set — the real, merged core accessors.
55
+ *
56
+ * @task T11724
57
+ */
58
+ function defaultDeps() {
59
+ return {
60
+ getProviderProfile,
61
+ addCredential: (input) => addCredential(input),
62
+ catalogKeyForProvider,
63
+ resolveProviderDefaultModel: (catalogKey) => resolveProviderDefaultModel(catalogKey),
64
+ validateModelForProvider: (model, catalogKey) => validateModelForProvider(model, catalogKey),
65
+ setConfigValue: (key, value) => setConfigValue(key, value, undefined, { global: true }),
66
+ resolve: async (_provider, projectRoot, role) => {
67
+ const resolved = await resolveLLMForSystem({ kind: 'role', id: role ?? 'consolidation' }, projectRoot !== undefined ? { projectRoot } : undefined);
68
+ // Map the full resolver envelope down to the structural subset the
69
+ // validate step needs. NOTE: we never read or materialize the secret.
70
+ return {
71
+ provider: resolved.provider,
72
+ model: resolved.model,
73
+ sealedCredential: resolved.sealedCredential
74
+ ? { tokenPreview: resolved.sealedCredential.tokenPreview }
75
+ : null,
76
+ };
77
+ },
78
+ };
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Internal step-trace helpers
82
+ // ---------------------------------------------------------------------------
83
+ /** Build an `ok` step trace. @internal */
84
+ function ok(step, detail) {
85
+ return { step, status: 'ok', detail };
86
+ }
87
+ /** Build a `failed` step trace carrying a stable `E_*` code. @internal */
88
+ function fail(step, code, detail) {
89
+ return { step, status: 'failed', detail, code };
90
+ }
91
+ /** Build a `skipped` step trace (downstream of a failure). @internal */
92
+ function skipped(step, detail) {
93
+ return { step, status: 'skipped', detail };
94
+ }
95
+ /**
96
+ * Compose the partial envelope returned when a step fails: the failed step's
97
+ * trace plus a `skipped` trace for every remaining step, so the 4-row shape is
98
+ * always stable.
99
+ *
100
+ * @internal
101
+ */
102
+ function withSkips(done, failedAt) {
103
+ const order = ['connect', 'select', 'bind', 'validate'];
104
+ const steps = [...done, failedAt];
105
+ const seen = new Set(steps.map((s) => s.step));
106
+ for (const name of order) {
107
+ if (!seen.has(name))
108
+ steps.push(skipped(name, 'skipped — earlier step failed'));
109
+ }
110
+ // Re-sort into canonical execution order.
111
+ return order.map((name) => steps.find((s) => s.step === name));
112
+ }
113
+ // ---------------------------------------------------------------------------
114
+ // Public API
115
+ // ---------------------------------------------------------------------------
116
+ /**
117
+ * Run the 3-step onboarding login flow for a provider (T11724 · M3).
118
+ *
119
+ * Walks **connect → select → bind → validate**, reusing the merged credential /
120
+ * catalog / config / resolver accessors. Returns a typed {@link OnboardingResult}
121
+ * envelope with the per-step trace and the non-secret binding identifiers.
122
+ *
123
+ * Like the resolver chokepoint, this engine **never throws** for an expected
124
+ * failure (missing credential, unknown model, config write error): it returns
125
+ * an envelope whose failing step carries `status: 'failed'` and a stable `E_*`
126
+ * `code`, with `validated: false`. Unexpected accessor errors are caught and
127
+ * mapped to a failed step trace as well.
128
+ *
129
+ * @param provider - Provider name or alias (e.g. `'anthropic'`, `'codex'`).
130
+ * @param opts - {@link OnboardingLoginOptions} (token, model, role, …).
131
+ * @param deps - Injectable accessor seam (AC3); defaults to real core accessors.
132
+ * @returns The typed onboarding result envelope; never throws on expected failure.
133
+ *
134
+ * @task T11724
135
+ */
136
+ export async function runOnboardingLogin(provider, opts = {}, deps = defaultDeps()) {
137
+ const label = opts.label?.trim() ? opts.label.trim() : 'oauth-login';
138
+ const done = [];
139
+ // --- Step 1: connect ----------------------------------------------------
140
+ let canonicalProvider;
141
+ let authMode;
142
+ try {
143
+ const profile = await deps.getProviderProfile(provider);
144
+ if (!profile) {
145
+ const step = fail('connect', 'E_UNKNOWN_PROVIDER', `Unknown provider '${provider}'. Run \`cleo llm list-providers\` to see supported providers.`);
146
+ return envelope(withSkips(done, step), provider, label, null, null, null, false);
147
+ }
148
+ canonicalProvider = profile.name;
149
+ // OAuth when the provider profile advertises an OAuth config; else API key (AC4).
150
+ authMode = opts.authMode ?? (profile.oauth ? 'oauth' : 'api_key');
151
+ if (opts.credentialAlreadyStored) {
152
+ // An interactive OAuth flow already landed the credential in the pool
153
+ // (front-door orchestrator path — T11725). Resolve + record connect as
154
+ // ok WITHOUT a second write so the token is stored exactly once.
155
+ done.push(ok('connect', `account '${label}' connected (${authMode}, pre-stored)`));
156
+ }
157
+ else {
158
+ if (!opts.token) {
159
+ const step = fail('connect', 'E_ONBOARDING_NO_CREDENTIAL', `No credential supplied for '${canonicalProvider}'. ` +
160
+ `Complete \`cleo llm login ${canonicalProvider}\` (OAuth) or pass an API key.`);
161
+ return envelope(withSkips(done, step), canonicalProvider, label, null, null, null, false);
162
+ }
163
+ const storedAuthType = authMode === 'oauth' ? 'oauth' : 'api_key';
164
+ await deps.addCredential({
165
+ provider: canonicalProvider,
166
+ label,
167
+ authType: storedAuthType,
168
+ accessToken: opts.token,
169
+ source: 'onboarding-login',
170
+ });
171
+ done.push(ok('connect', `account '${label}' connected (${authMode})`));
172
+ }
173
+ }
174
+ catch (err) {
175
+ const step = fail('connect', 'E_ONBOARDING_CONNECT_FAILED', errMsg(err));
176
+ return envelope(withSkips(done, step), provider, label, null, null, null, false);
177
+ }
178
+ // --- Step 2: select -----------------------------------------------------
179
+ let modelId;
180
+ try {
181
+ const catalogKey = deps.catalogKeyForProvider(canonicalProvider);
182
+ if (opts.model) {
183
+ const validation = deps.validateModelForProvider(opts.model, catalogKey);
184
+ if (!validation.valid && validation.reason === 'not-found') {
185
+ const step = fail('select', 'E_MODEL_NOT_IN_CATALOG', `Model '${opts.model}' is not in the catalog for provider '${canonicalProvider}'. ` +
186
+ `Run \`cleo llm refresh-catalog\` to update the catalog.`);
187
+ return envelope(withSkips(done, step), canonicalProvider, label, authMode, null, null, false);
188
+ }
189
+ modelId = opts.model;
190
+ done.push(ok('select', `model '${modelId}' selected (explicit, validated)`));
191
+ }
192
+ else {
193
+ const latest = deps.resolveProviderDefaultModel(catalogKey);
194
+ if (!latest) {
195
+ const step = fail('select', 'E_NO_CATALOG_MODEL', `No catalog model available for '${canonicalProvider}'. ` +
196
+ `Run \`cleo llm refresh-catalog\`, or pass an explicit \`--model\`.`);
197
+ return envelope(withSkips(done, step), canonicalProvider, label, authMode, null, null, false);
198
+ }
199
+ modelId = latest;
200
+ done.push(ok('select', `model '${modelId}' selected (catalog default, latest release_date)`));
201
+ }
202
+ }
203
+ catch (err) {
204
+ const step = fail('select', 'E_ONBOARDING_SELECT_FAILED', errMsg(err));
205
+ return envelope(withSkips(done, step), canonicalProvider, label, authMode, null, null, false);
206
+ }
207
+ // --- Step 3: bind -------------------------------------------------------
208
+ let profileName;
209
+ try {
210
+ if (opts.role) {
211
+ if (!WHOAMI_ROLE_IDS.includes(opts.role)) {
212
+ const step = fail('bind', 'E_INVALID_ROLE', `Invalid role '${opts.role}'. Valid roles: ${WHOAMI_ROLE_IDS.join(', ')}.`);
213
+ return envelope(withSkips(done, step), canonicalProvider, label, authMode, modelId, null, false);
214
+ }
215
+ await deps.setConfigValue(`llm.roles.${opts.role}.provider`, canonicalProvider);
216
+ await deps.setConfigValue(`llm.roles.${opts.role}.model`, modelId);
217
+ await deps.setConfigValue(`llm.roles.${opts.role}.credentialLabel`, label);
218
+ profileName = opts.role;
219
+ done.push(ok('bind', `profile '${profileName}' bound → ${canonicalProvider}/${modelId}`));
220
+ }
221
+ else {
222
+ await deps.setConfigValue('llm.default.provider', canonicalProvider);
223
+ await deps.setConfigValue('llm.default.model', modelId);
224
+ profileName = 'default';
225
+ done.push(ok('bind', `default binding → ${canonicalProvider}/${modelId}`));
226
+ }
227
+ }
228
+ catch (err) {
229
+ const step = fail('bind', 'E_ONBOARDING_BIND_FAILED', errMsg(err));
230
+ return envelope(withSkips(done, step), canonicalProvider, label, authMode, modelId, null, false);
231
+ }
232
+ // --- Step 4: validate ---------------------------------------------------
233
+ try {
234
+ const resolved = await deps.resolve(canonicalProvider, opts.projectRoot, opts.role);
235
+ const providerMatch = resolved.provider === canonicalProvider;
236
+ const modelMatch = resolved.model === modelId;
237
+ const hasHandle = resolved.sealedCredential !== null;
238
+ if (providerMatch && modelMatch && hasHandle) {
239
+ done.push(ok('validate', `round-trip ok — resolves to ${resolved.provider}/${resolved.model} ` +
240
+ `(sealed handle ${resolved.sealedCredential?.tokenPreview ?? '…'})`));
241
+ return envelope(done, canonicalProvider, label, authMode, modelId, profileName, true);
242
+ }
243
+ const reason = !hasHandle
244
+ ? 'no credential handle resolved'
245
+ : `resolved ${resolved.provider}/${resolved.model}, expected ${canonicalProvider}/${modelId}`;
246
+ const step = fail('validate', 'E_ONBOARDING_VALIDATION_FAILED', `binding inconsistent — ${reason}`);
247
+ return envelope([...done, step], canonicalProvider, label, authMode, modelId, profileName, false);
248
+ }
249
+ catch (err) {
250
+ const step = fail('validate', 'E_ONBOARDING_VALIDATION_FAILED', errMsg(err));
251
+ return envelope([...done, step], canonicalProvider, label, authMode, modelId, profileName, false);
252
+ }
253
+ }
254
+ // ---------------------------------------------------------------------------
255
+ // Internal helpers
256
+ // ---------------------------------------------------------------------------
257
+ /**
258
+ * Assemble the {@link OnboardingResult} envelope. Centralised so every return
259
+ * path produces an identically-shaped, secret-free result.
260
+ *
261
+ * @internal
262
+ */
263
+ function envelope(steps, provider, accountLabel, authMode, modelId, profileName, validated) {
264
+ return {
265
+ steps,
266
+ provider,
267
+ accountLabel,
268
+ authMode,
269
+ modelId,
270
+ profileName,
271
+ validated,
272
+ };
273
+ }
274
+ /**
275
+ * Extract a short, secret-free message from an unknown thrown value. The
276
+ * onboarding accessors already redact their own error strings; this is a final
277
+ * defensive narrow so the envelope never carries a raw stack.
278
+ *
279
+ * @internal
280
+ */
281
+ function errMsg(err) {
282
+ const raw = err instanceof Error ? err.message : String(err);
283
+ logger.debug({ err: raw }, 'onboarding: step accessor error');
284
+ return raw;
285
+ }
286
+ //# sourceMappingURL=login-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-engine.js","sourceRoot":"","sources":["../../../src/llm/onboarding/login-engine.ts"],"names":[],"mappings":"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"}