@cleocode/core 2026.6.13 → 2026.6.14

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 (392) 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 +179 -0
  8. package/dist/check/pr-gate.d.ts.map +1 -0
  9. package/dist/check/pr-gate.js +366 -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/registry.d.ts +54 -0
  24. package/dist/config/registry.d.ts.map +1 -1
  25. package/dist/config/registry.js +94 -2
  26. package/dist/config/registry.js.map +1 -1
  27. package/dist/deriver/queue-manager.d.ts +30 -2
  28. package/dist/deriver/queue-manager.d.ts.map +1 -1
  29. package/dist/deriver/queue-manager.js +54 -9
  30. package/dist/deriver/queue-manager.js.map +1 -1
  31. package/dist/dispatch/config-domain-handler.d.ts +125 -0
  32. package/dist/dispatch/config-domain-handler.d.ts.map +1 -0
  33. package/dist/dispatch/config-domain-handler.js +160 -0
  34. package/dist/dispatch/config-domain-handler.js.map +1 -0
  35. package/dist/dispatch/contracts/input-contracts.d.ts.map +1 -1
  36. package/dist/dispatch/contracts/input-contracts.js +19 -1
  37. package/dist/dispatch/contracts/input-contracts.js.map +1 -1
  38. package/dist/docs/export-document.js +3704 -680
  39. package/dist/docs/export-document.js.map +3 -3
  40. package/dist/gateway-client/client.d.ts +123 -0
  41. package/dist/gateway-client/client.d.ts.map +1 -0
  42. package/dist/gateway-client/client.js +93 -0
  43. package/dist/gateway-client/client.js.map +1 -0
  44. package/dist/gateway-client/generated/client/client.gen.d.ts +3 -0
  45. package/dist/gateway-client/generated/client/client.gen.d.ts.map +1 -0
  46. package/dist/gateway-client/generated/client/client.gen.js +217 -0
  47. package/dist/gateway-client/generated/client/client.gen.js.map +1 -0
  48. package/dist/gateway-client/generated/client/index.d.ts +11 -0
  49. package/dist/gateway-client/generated/client/index.d.ts.map +1 -0
  50. package/dist/gateway-client/generated/client/index.js +7 -0
  51. package/dist/gateway-client/generated/client/index.js.map +1 -0
  52. package/dist/gateway-client/generated/client/types.gen.d.ts +121 -0
  53. package/dist/gateway-client/generated/client/types.gen.d.ts.map +1 -0
  54. package/dist/gateway-client/generated/client/types.gen.js +3 -0
  55. package/dist/gateway-client/generated/client/types.gen.js.map +1 -0
  56. package/dist/gateway-client/generated/client/utils.gen.d.ts +38 -0
  57. package/dist/gateway-client/generated/client/utils.gen.d.ts.map +1 -0
  58. package/dist/gateway-client/generated/client/utils.gen.js +229 -0
  59. package/dist/gateway-client/generated/client/utils.gen.js.map +1 -0
  60. package/dist/gateway-client/generated/client.gen.d.ts +13 -0
  61. package/dist/gateway-client/generated/client.gen.d.ts.map +1 -0
  62. package/dist/gateway-client/generated/client.gen.js +4 -0
  63. package/dist/gateway-client/generated/client.gen.js.map +1 -0
  64. package/dist/gateway-client/generated/core/auth.gen.d.ts +26 -0
  65. package/dist/gateway-client/generated/core/auth.gen.d.ts.map +1 -0
  66. package/dist/gateway-client/generated/core/auth.gen.js +15 -0
  67. package/dist/gateway-client/generated/core/auth.gen.js.map +1 -0
  68. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts +26 -0
  69. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts.map +1 -0
  70. package/dist/gateway-client/generated/core/bodySerializer.gen.js +58 -0
  71. package/dist/gateway-client/generated/core/bodySerializer.gen.js.map +1 -0
  72. package/dist/gateway-client/generated/core/params.gen.d.ts +44 -0
  73. package/dist/gateway-client/generated/core/params.gen.d.ts.map +1 -0
  74. package/dist/gateway-client/generated/core/params.gen.js +101 -0
  75. package/dist/gateway-client/generated/core/params.gen.js.map +1 -0
  76. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts +34 -0
  77. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts.map +1 -0
  78. package/dist/gateway-client/generated/core/pathSerializer.gen.js +107 -0
  79. package/dist/gateway-client/generated/core/pathSerializer.gen.js.map +1 -0
  80. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts +19 -0
  81. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  82. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js +93 -0
  83. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js.map +1 -0
  84. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts +72 -0
  85. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  86. package/dist/gateway-client/generated/core/serverSentEvents.gen.js +133 -0
  87. package/dist/gateway-client/generated/core/serverSentEvents.gen.js.map +1 -0
  88. package/dist/gateway-client/generated/core/types.gen.d.ts +84 -0
  89. package/dist/gateway-client/generated/core/types.gen.d.ts.map +1 -0
  90. package/dist/gateway-client/generated/core/types.gen.js +3 -0
  91. package/dist/gateway-client/generated/core/types.gen.js.map +1 -0
  92. package/dist/gateway-client/generated/core/utils.gen.d.ts +20 -0
  93. package/dist/gateway-client/generated/core/utils.gen.d.ts.map +1 -0
  94. package/dist/gateway-client/generated/core/utils.gen.js +88 -0
  95. package/dist/gateway-client/generated/core/utils.gen.js.map +1 -0
  96. package/dist/gateway-client/generated/index.d.ts +3 -0
  97. package/dist/gateway-client/generated/index.d.ts.map +1 -0
  98. package/dist/gateway-client/generated/index.js +3 -0
  99. package/dist/gateway-client/generated/index.js.map +1 -0
  100. package/dist/gateway-client/generated/namespaces.gen.d.ts +512 -0
  101. package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -0
  102. package/dist/gateway-client/generated/namespaces.gen.js +521 -0
  103. package/dist/gateway-client/generated/namespaces.gen.js.map +1 -0
  104. package/dist/gateway-client/generated/sdk.gen.d.ts +1780 -0
  105. package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -0
  106. package/dist/gateway-client/generated/sdk.gen.js +3811 -0
  107. package/dist/gateway-client/generated/sdk.gen.js.map +1 -0
  108. package/dist/gateway-client/generated/types.gen.d.ts +14681 -0
  109. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -0
  110. package/dist/gateway-client/generated/types.gen.js +3 -0
  111. package/dist/gateway-client/generated/types.gen.js.map +1 -0
  112. package/dist/gateway-client/index.d.ts +27 -0
  113. package/dist/gateway-client/index.d.ts.map +1 -0
  114. package/dist/gateway-client/index.js +25 -0
  115. package/dist/gateway-client/index.js.map +1 -0
  116. package/dist/index.d.ts +10 -0
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +20 -0
  119. package/dist/index.js.map +1 -1
  120. package/dist/init.d.ts.map +1 -1
  121. package/dist/init.js +28 -0
  122. package/dist/init.js.map +1 -1
  123. package/dist/internal.d.ts +10 -1
  124. package/dist/internal.d.ts.map +1 -1
  125. package/dist/internal.js +18 -1
  126. package/dist/internal.js.map +1 -1
  127. package/dist/llm/catalog-model-resolver.d.ts +19 -0
  128. package/dist/llm/catalog-model-resolver.d.ts.map +1 -1
  129. package/dist/llm/catalog-model-resolver.js +36 -0
  130. package/dist/llm/catalog-model-resolver.js.map +1 -1
  131. package/dist/llm/catalog-resolver.d.ts +112 -0
  132. package/dist/llm/catalog-resolver.d.ts.map +1 -0
  133. package/dist/llm/catalog-resolver.js +207 -0
  134. package/dist/llm/catalog-resolver.js.map +1 -0
  135. package/dist/llm/catalog-seeder.d.ts +96 -0
  136. package/dist/llm/catalog-seeder.d.ts.map +1 -0
  137. package/dist/llm/catalog-seeder.js +189 -0
  138. package/dist/llm/catalog-seeder.js.map +1 -0
  139. package/dist/llm/cli-ops.js +5 -5
  140. package/dist/llm/cli-ops.js.map +1 -1
  141. package/dist/llm/complexity-classifier.d.ts +208 -0
  142. package/dist/llm/complexity-classifier.d.ts.map +1 -0
  143. package/dist/llm/complexity-classifier.js +359 -0
  144. package/dist/llm/complexity-classifier.js.map +1 -0
  145. package/dist/llm/credential-pool.d.ts +2 -0
  146. package/dist/llm/credential-pool.d.ts.map +1 -1
  147. package/dist/llm/credential-pool.js +5 -2
  148. package/dist/llm/credential-pool.js.map +1 -1
  149. package/dist/llm/credentials-store.d.ts +10 -14
  150. package/dist/llm/credentials-store.d.ts.map +1 -1
  151. package/dist/llm/credentials-store.js.map +1 -1
  152. package/dist/llm/entity-ops.d.ts +299 -0
  153. package/dist/llm/entity-ops.d.ts.map +1 -0
  154. package/dist/llm/entity-ops.js +441 -0
  155. package/dist/llm/entity-ops.js.map +1 -0
  156. package/dist/llm/index.d.ts +15 -0
  157. package/dist/llm/index.d.ts.map +1 -1
  158. package/dist/llm/index.js +8 -0
  159. package/dist/llm/index.js.map +1 -1
  160. package/dist/llm/llm-queue-admit.d.ts +118 -0
  161. package/dist/llm/llm-queue-admit.d.ts.map +1 -0
  162. package/dist/llm/llm-queue-admit.js +275 -0
  163. package/dist/llm/llm-queue-admit.js.map +1 -0
  164. package/dist/llm/oauth/device-code.d.ts.map +1 -1
  165. package/dist/llm/oauth/device-code.js +2 -8
  166. package/dist/llm/oauth/device-code.js.map +1 -1
  167. package/dist/llm/oauth/google-pkce.d.ts.map +1 -1
  168. package/dist/llm/oauth/google-pkce.js +2 -18
  169. package/dist/llm/oauth/google-pkce.js.map +1 -1
  170. package/dist/llm/oauth/pkce.d.ts +70 -0
  171. package/dist/llm/oauth/pkce.d.ts.map +1 -1
  172. package/dist/llm/oauth/pkce.js +106 -29
  173. package/dist/llm/oauth/pkce.js.map +1 -1
  174. package/dist/llm/onboarding/front-door.d.ts +146 -0
  175. package/dist/llm/onboarding/front-door.d.ts.map +1 -0
  176. package/dist/llm/onboarding/front-door.js +153 -0
  177. package/dist/llm/onboarding/front-door.js.map +1 -0
  178. package/dist/llm/onboarding/login-engine.d.ts +175 -0
  179. package/dist/llm/onboarding/login-engine.d.ts.map +1 -0
  180. package/dist/llm/onboarding/login-engine.js +286 -0
  181. package/dist/llm/onboarding/login-engine.js.map +1 -0
  182. package/dist/llm/pi/pi-gondolin-env.d.ts +23 -0
  183. package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -1
  184. package/dist/llm/pi/pi-gondolin-env.js +2 -2
  185. package/dist/llm/pi/pi-gondolin-env.js.map +1 -1
  186. package/dist/llm/plugin-facade.js +3853 -814
  187. package/dist/llm/plugin-facade.js.map +3 -3
  188. package/dist/llm/provider-registry/builtin/anthropic.d.ts.map +1 -1
  189. package/dist/llm/provider-registry/builtin/anthropic.js +23 -10
  190. package/dist/llm/provider-registry/builtin/anthropic.js.map +1 -1
  191. package/dist/llm/provider-registry/provider-alias.d.ts +62 -0
  192. package/dist/llm/provider-registry/provider-alias.d.ts.map +1 -0
  193. package/dist/llm/provider-registry/provider-alias.js +85 -0
  194. package/dist/llm/provider-registry/provider-alias.js.map +1 -0
  195. package/dist/llm/provider-registry/provider-defs.d.ts +45 -0
  196. package/dist/llm/provider-registry/provider-defs.d.ts.map +1 -0
  197. package/dist/llm/provider-registry/provider-defs.js +145 -0
  198. package/dist/llm/provider-registry/provider-defs.js.map +1 -0
  199. package/dist/llm/provider-registry/provider-seed.d.ts +78 -0
  200. package/dist/llm/provider-registry/provider-seed.d.ts.map +1 -0
  201. package/dist/llm/provider-registry/provider-seed.js +113 -0
  202. package/dist/llm/provider-registry/provider-seed.js.map +1 -0
  203. package/dist/llm/role-executor.d.ts.map +1 -1
  204. package/dist/llm/role-executor.js +36 -0
  205. package/dist/llm/role-executor.js.map +1 -1
  206. package/dist/llm/role-resolver.d.ts.map +1 -1
  207. package/dist/llm/role-resolver.js +9 -2
  208. package/dist/llm/role-resolver.js.map +1 -1
  209. package/dist/llm/system-resolver.d.ts.map +1 -1
  210. package/dist/llm/system-resolver.js +73 -22
  211. package/dist/llm/system-resolver.js.map +1 -1
  212. package/dist/memory/learnings.d.ts +4 -0
  213. package/dist/memory/learnings.d.ts.map +1 -1
  214. package/dist/memory/patterns.d.ts +4 -0
  215. package/dist/memory/patterns.d.ts.map +1 -1
  216. package/dist/metrics/index.d.ts +2 -0
  217. package/dist/metrics/index.d.ts.map +1 -1
  218. package/dist/metrics/index.js +1 -0
  219. package/dist/metrics/index.js.map +1 -1
  220. package/dist/orchestration/spawn.d.ts +89 -0
  221. package/dist/orchestration/spawn.d.ts.map +1 -1
  222. package/dist/orchestration/spawn.js +68 -0
  223. package/dist/orchestration/spawn.js.map +1 -1
  224. package/dist/playbooks/cantbook-profile.d.ts +96 -0
  225. package/dist/playbooks/cantbook-profile.d.ts.map +1 -0
  226. package/dist/playbooks/cantbook-profile.js +97 -0
  227. package/dist/playbooks/cantbook-profile.js.map +1 -0
  228. package/dist/playbooks/guarded-deterministic-runner.d.ts +153 -0
  229. package/dist/playbooks/guarded-deterministic-runner.d.ts.map +1 -0
  230. package/dist/playbooks/guarded-deterministic-runner.js +155 -0
  231. package/dist/playbooks/guarded-deterministic-runner.js.map +1 -0
  232. package/dist/playbooks/index.d.ts +2 -0
  233. package/dist/playbooks/index.d.ts.map +1 -1
  234. package/dist/playbooks/index.js +10 -0
  235. package/dist/playbooks/index.js.map +1 -1
  236. package/dist/playbooks/pi-runner-wiring.d.ts +75 -0
  237. package/dist/playbooks/pi-runner-wiring.d.ts.map +1 -0
  238. package/dist/playbooks/pi-runner-wiring.js +82 -0
  239. package/dist/playbooks/pi-runner-wiring.js.map +1 -0
  240. package/dist/runtime/openapi/generate-openapi.d.ts +211 -0
  241. package/dist/runtime/openapi/generate-openapi.d.ts.map +1 -0
  242. package/dist/runtime/openapi/generate-openapi.js +300 -0
  243. package/dist/runtime/openapi/generate-openapi.js.map +1 -0
  244. package/dist/runtime/openapi/index.d.ts +16 -0
  245. package/dist/runtime/openapi/index.d.ts.map +1 -0
  246. package/dist/runtime/openapi/index.js +16 -0
  247. package/dist/runtime/openapi/index.js.map +1 -0
  248. package/dist/selfimprove/scenarios/dhq-replay-find/golden.json +32 -0
  249. package/dist/selfimprove/scenarios/dhq-replay-find/scenario.json +18 -0
  250. package/dist/setup/config-json-merge.d.ts.map +1 -1
  251. package/dist/setup/config-json-merge.js +14 -0
  252. package/dist/setup/config-json-merge.js.map +1 -1
  253. package/dist/setup/index.d.ts +23 -11
  254. package/dist/setup/index.d.ts.map +1 -1
  255. package/dist/setup/index.js +25 -12
  256. package/dist/setup/index.js.map +1 -1
  257. package/dist/setup/sections/llm.d.ts +28 -1
  258. package/dist/setup/sections/llm.d.ts.map +1 -1
  259. package/dist/setup/sections/llm.js +27 -6
  260. package/dist/setup/sections/llm.js.map +1 -1
  261. package/dist/setup/sections/models-roles.d.ts +40 -0
  262. package/dist/setup/sections/models-roles.d.ts.map +1 -0
  263. package/dist/setup/sections/models-roles.js +219 -0
  264. package/dist/setup/sections/models-roles.js.map +1 -0
  265. package/dist/setup/wizard.d.ts +19 -1
  266. package/dist/setup/wizard.d.ts.map +1 -1
  267. package/dist/setup/wizard.js.map +1 -1
  268. package/dist/store/schedule-schema.d.ts +195 -0
  269. package/dist/store/schedule-schema.d.ts.map +1 -0
  270. package/dist/store/schedule-schema.js +84 -0
  271. package/dist/store/schedule-schema.js.map +1 -0
  272. package/dist/store/schedule-store.d.ts +144 -0
  273. package/dist/store/schedule-store.d.ts.map +1 -0
  274. package/dist/store/schedule-store.js +162 -0
  275. package/dist/store/schedule-store.js.map +1 -0
  276. package/dist/store/schema/attachments.d.ts +1 -1
  277. package/dist/store/schema/cleo-global/index.d.ts +3 -0
  278. package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
  279. package/dist/store/schema/cleo-global/index.js +5 -0
  280. package/dist/store/schema/cleo-global/index.js.map +1 -1
  281. package/dist/store/schema/cleo-global/models-catalog.d.ts +359 -0
  282. package/dist/store/schema/cleo-global/models-catalog.d.ts.map +1 -0
  283. package/dist/store/schema/cleo-global/models-catalog.js +114 -0
  284. package/dist/store/schema/cleo-global/models-catalog.js.map +1 -0
  285. package/dist/store/schema/cleo-global/providers.d.ts +279 -0
  286. package/dist/store/schema/cleo-global/providers.d.ts.map +1 -0
  287. package/dist/store/schema/cleo-global/providers.js +94 -0
  288. package/dist/store/schema/cleo-global/providers.js.map +1 -0
  289. package/dist/store/schema/cleo-global/services.d.ts +493 -0
  290. package/dist/store/schema/cleo-global/services.d.ts.map +1 -0
  291. package/dist/store/schema/cleo-global/services.js +200 -0
  292. package/dist/store/schema/cleo-global/services.js.map +1 -0
  293. package/dist/store/schema/cleo-project/docs.d.ts +1 -1
  294. package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
  295. package/dist/store/schema/cleo-shared/brain.d.ts +2 -2
  296. package/dist/store/schema/memory-schema.d.ts +182 -2
  297. package/dist/store/schema/memory-schema.d.ts.map +1 -1
  298. package/dist/store/schema/memory-schema.js +111 -2
  299. package/dist/store/schema/memory-schema.js.map +1 -1
  300. package/dist/store/schema/provenance/releases.d.ts +1 -1
  301. package/dist/store/service-connections-accessor.d.ts +313 -0
  302. package/dist/store/service-connections-accessor.d.ts.map +1 -0
  303. package/dist/store/service-connections-accessor.js +464 -0
  304. package/dist/store/service-connections-accessor.js.map +1 -0
  305. package/dist/store/service-host-matcher.d.ts +70 -0
  306. package/dist/store/service-host-matcher.d.ts.map +1 -0
  307. package/dist/store/service-host-matcher.js +127 -0
  308. package/dist/store/service-host-matcher.js.map +1 -0
  309. package/dist/store/service-injection.d.ts +152 -0
  310. package/dist/store/service-injection.d.ts.map +1 -0
  311. package/dist/store/service-injection.js +225 -0
  312. package/dist/store/service-injection.js.map +1 -0
  313. package/dist/store/service-oauth.d.ts +287 -0
  314. package/dist/store/service-oauth.d.ts.map +1 -0
  315. package/dist/store/service-oauth.js +524 -0
  316. package/dist/store/service-oauth.js.map +1 -0
  317. package/dist/store/service-trust-gate.d.ts +164 -0
  318. package/dist/store/service-trust-gate.d.ts.map +1 -0
  319. package/dist/store/service-trust-gate.js +122 -0
  320. package/dist/store/service-trust-gate.js.map +1 -0
  321. package/dist/store/validation-schemas.d.ts +4 -4
  322. package/dist/tasks/agent-lifecycle-lane.d.ts +175 -0
  323. package/dist/tasks/agent-lifecycle-lane.d.ts.map +1 -0
  324. package/dist/tasks/agent-lifecycle-lane.js +176 -0
  325. package/dist/tasks/agent-lifecycle-lane.js.map +1 -0
  326. package/dist/tasks/complete.d.ts +17 -0
  327. package/dist/tasks/complete.d.ts.map +1 -1
  328. package/dist/tasks/complete.js +53 -10
  329. package/dist/tasks/complete.js.map +1 -1
  330. package/dist/tasks/depends-waiver-audit.d.ts +52 -0
  331. package/dist/tasks/depends-waiver-audit.d.ts.map +1 -0
  332. package/dist/tasks/depends-waiver-audit.js +36 -0
  333. package/dist/tasks/depends-waiver-audit.js.map +1 -0
  334. package/dist/tasks/engine-wrap.d.ts +36 -2
  335. package/dist/tasks/engine-wrap.d.ts.map +1 -1
  336. package/dist/tasks/engine-wrap.js +44 -2
  337. package/dist/tasks/engine-wrap.js.map +1 -1
  338. package/dist/tasks/index.d.ts +1 -0
  339. package/dist/tasks/index.d.ts.map +1 -1
  340. package/dist/tasks/index.js +1 -0
  341. package/dist/tasks/index.js.map +1 -1
  342. package/dist/tasks/ops.d.ts +3 -0
  343. package/dist/tasks/ops.d.ts.map +1 -1
  344. package/dist/tasks/task-ops.d.ts +1 -1
  345. package/dist/tasks/task-ops.d.ts.map +1 -1
  346. package/dist/tasks/task-ops.js +3 -1
  347. package/dist/tasks/task-ops.js.map +1 -1
  348. package/dist/tasks/task-reparent.d.ts +90 -0
  349. package/dist/tasks/task-reparent.d.ts.map +1 -1
  350. package/dist/tasks/task-reparent.js +171 -0
  351. package/dist/tasks/task-reparent.js.map +1 -1
  352. package/dist/tools/builtin-agent-tools.d.ts.map +1 -1
  353. package/dist/tools/builtin-agent-tools.js +41 -0
  354. package/dist/tools/builtin-agent-tools.js.map +1 -1
  355. package/dist/tools/exec-code-agent-tool.d.ts +179 -0
  356. package/dist/tools/exec-code-agent-tool.d.ts.map +1 -0
  357. package/dist/tools/exec-code-agent-tool.js +239 -0
  358. package/dist/tools/exec-code-agent-tool.js.map +1 -0
  359. package/dist/tools/index.d.ts +6 -0
  360. package/dist/tools/index.d.ts.map +1 -1
  361. package/dist/tools/index.js +15 -0
  362. package/dist/tools/index.js.map +1 -1
  363. package/dist/tools/mcp-agent-tool.d.ts +189 -0
  364. package/dist/tools/mcp-agent-tool.d.ts.map +1 -0
  365. package/dist/tools/mcp-agent-tool.js +243 -0
  366. package/dist/tools/mcp-agent-tool.js.map +1 -0
  367. package/dist/tools/media-agent-tools.d.ts +105 -0
  368. package/dist/tools/media-agent-tools.d.ts.map +1 -0
  369. package/dist/tools/media-agent-tools.js +255 -0
  370. package/dist/tools/media-agent-tools.js.map +1 -0
  371. package/dist/tools/memory-agent-tools.d.ts +99 -0
  372. package/dist/tools/memory-agent-tools.d.ts.map +1 -0
  373. package/dist/tools/memory-agent-tools.js +190 -0
  374. package/dist/tools/memory-agent-tools.js.map +1 -0
  375. package/dist/tools/schedule-agent-tools.d.ts +151 -0
  376. package/dist/tools/schedule-agent-tools.d.ts.map +1 -0
  377. package/dist/tools/schedule-agent-tools.js +238 -0
  378. package/dist/tools/schedule-agent-tools.js.map +1 -0
  379. package/dist/tools/skill-agent-tool.d.ts +108 -0
  380. package/dist/tools/skill-agent-tool.d.ts.map +1 -0
  381. package/dist/tools/skill-agent-tool.js +135 -0
  382. package/dist/tools/skill-agent-tool.js.map +1 -0
  383. package/dist/validation/engine-ops.d.ts.map +1 -1
  384. package/dist/validation/engine-ops.js +17 -1
  385. package/dist/validation/engine-ops.js.map +1 -1
  386. package/migrations/drizzle-brain/20260610000001_t10405-bitemporal-network-columns/migration.sql +71 -0
  387. package/migrations/drizzle-cleo-global/20260609000000_t11937-service-vault/migration.sql +93 -0
  388. package/migrations/drizzle-cleo-global/20260609010000_t11733-models-catalog/migration.sql +65 -0
  389. package/migrations/drizzle-cleo-global/20260609020000_t11703-providers/migration.sql +52 -0
  390. package/migrations/drizzle-cleo-global/20260610000000_t11962-schedules/migration.sql +48 -0
  391. package/migrations/drizzle-cleo-project/20260610000000_t11962-schedules/migration.sql +48 -0
  392. package/package.json +23 -13
@@ -75,6 +75,53 @@ export function buildAuthorizationUrl(params) {
75
75
  }
76
76
  return url.toString();
77
77
  }
78
+ // ---------------------------------------------------------------------------
79
+ // Authorization-response input parsing
80
+ // ---------------------------------------------------------------------------
81
+ /**
82
+ * Parse a user-pasted authorization response into `{ code, state }`.
83
+ *
84
+ * Accepts every form a provider's callback page can hand the user
85
+ * (mirrors pi-ai's `parseAuthorizationInput`):
86
+ * - a full redirect URL — `https://…/callback?code=…&state=…`
87
+ * - the `code#state` pair Anthropic's hosted callback page displays
88
+ * - a bare query string — `code=…&state=…`
89
+ * - a bare authorization code
90
+ *
91
+ * Callers MUST validate a returned `state` against the authorize-time state
92
+ * (CSRF check, RFC 6749 §10.12) before exchanging the code.
93
+ *
94
+ * @param input - Raw pasted text from the user.
95
+ * @returns Extracted `code` and `state` (either may be `undefined`).
96
+ * @task T11958
97
+ */
98
+ export function parseAuthorizationInput(input) {
99
+ const value = input.trim();
100
+ if (!value)
101
+ return {};
102
+ try {
103
+ const url = new URL(value);
104
+ return {
105
+ code: url.searchParams.get('code') ?? undefined,
106
+ state: url.searchParams.get('state') ?? undefined,
107
+ };
108
+ }
109
+ catch {
110
+ // not a URL — fall through to the bare forms
111
+ }
112
+ if (value.includes('#')) {
113
+ const [code, state] = value.split('#', 2);
114
+ return { code: code || undefined, state: state || undefined };
115
+ }
116
+ if (value.includes('code=')) {
117
+ const params = new URLSearchParams(value);
118
+ return {
119
+ code: params.get('code') ?? undefined,
120
+ state: params.get('state') ?? undefined,
121
+ };
122
+ }
123
+ return { code: value };
124
+ }
78
125
  /**
79
126
  * Exchange an authorization code + PKCE verifier for access and refresh tokens.
80
127
  *
@@ -87,24 +134,21 @@ export function buildAuthorizationUrl(params) {
87
134
  * @task T9302
88
135
  */
89
136
  export async function exchangePkceCode(params) {
90
- const body = new URLSearchParams({
137
+ const fields = {
91
138
  grant_type: 'authorization_code',
92
139
  client_id: params.clientId,
93
140
  code: params.code,
94
141
  code_verifier: params.codeVerifier,
95
142
  redirect_uri: params.redirectUri,
96
- });
97
- const resp = await globalThis.fetch(params.tokenEndpoint, {
98
- method: 'POST',
99
- headers: {
100
- 'Content-Type': 'application/x-www-form-urlencoded',
101
- Accept: 'application/json',
102
- ...params.extraHeaders,
103
- },
104
- body: body.toString(),
105
- });
143
+ };
144
+ // Anthropic (json) requires the authorize-time state echoed in the exchange;
145
+ // form-encoded RFC endpoints do not define it on the token request.
146
+ if (params.bodyFormat === 'json' && params.state) {
147
+ fields['state'] = params.state;
148
+ }
149
+ const resp = await postTokenRequest(params.tokenEndpoint, fields, params);
106
150
  if (!resp.ok) {
107
- const detail = await extractErrorDetail(resp);
151
+ const detail = await extractOAuthErrorDetail(resp);
108
152
  throw new Error(`PKCE code exchange failed for provider '${params.provider}': HTTP ${resp.status}${detail}`);
109
153
  }
110
154
  return parseTokenResponse(params.provider, await resp.json());
@@ -122,22 +166,14 @@ export async function exchangePkceCode(params) {
122
166
  * @task T9302
123
167
  */
124
168
  export async function refreshPkceToken(params) {
125
- const body = new URLSearchParams({
169
+ const fields = {
126
170
  grant_type: 'refresh_token',
127
171
  client_id: params.clientId,
128
172
  refresh_token: params.refreshToken,
129
- });
130
- const resp = await globalThis.fetch(params.tokenEndpoint, {
131
- method: 'POST',
132
- headers: {
133
- 'Content-Type': 'application/x-www-form-urlencoded',
134
- Accept: 'application/json',
135
- ...params.extraHeaders,
136
- },
137
- body: body.toString(),
138
- });
173
+ };
174
+ const resp = await postTokenRequest(params.tokenEndpoint, fields, params);
139
175
  if (!resp.ok) {
140
- const detail = await extractErrorDetail(resp);
176
+ const detail = await extractOAuthErrorDetail(resp);
141
177
  throw new Error(`PKCE token refresh failed for provider '${params.provider}': HTTP ${resp.status}${detail}`);
142
178
  }
143
179
  return parseTokenResponse(params.provider, await resp.json());
@@ -145,6 +181,28 @@ export async function refreshPkceToken(params) {
145
181
  // ---------------------------------------------------------------------------
146
182
  // Internal helpers
147
183
  // ---------------------------------------------------------------------------
184
+ /**
185
+ * POST a token-endpoint request (code exchange or refresh grant).
186
+ *
187
+ * Single home for the body-encoding split shared by {@link exchangePkceCode}
188
+ * and {@link refreshPkceToken}: `'form'` (RFC 6749 default,
189
+ * `application/x-www-form-urlencoded`) vs `'json'` (Anthropic's non-RFC
190
+ * `application/json` token endpoint). See
191
+ * `ProviderOAuthConfig.tokenBodyFormat`.
192
+ *
193
+ * @internal
194
+ */
195
+ function postTokenRequest(tokenEndpoint, fields, opts) {
196
+ return globalThis.fetch(tokenEndpoint, {
197
+ method: 'POST',
198
+ headers: {
199
+ 'Content-Type': opts.bodyFormat === 'json' ? 'application/json' : 'application/x-www-form-urlencoded',
200
+ Accept: 'application/json',
201
+ ...opts.extraHeaders,
202
+ },
203
+ body: opts.bodyFormat === 'json' ? JSON.stringify(fields) : new URLSearchParams(fields).toString(),
204
+ });
205
+ }
148
206
  /**
149
207
  * base64url-encode a byte array (RFC 4648 §5, no padding).
150
208
  *
@@ -180,12 +238,20 @@ function parseTokenResponse(provider, data) {
180
238
  };
181
239
  }
182
240
  /**
183
- * Extract a human-readable error detail string from a non-OK HTTP response.
241
+ * Extract a human-readable error detail string from a non-OK OAuth HTTP
242
+ * response.
243
+ *
244
+ * The single shared extractor for every OAuth surface in the LLM layer
245
+ * (`pkce.ts`, `google-pkce.ts`, `device-code.ts`) — local copies drifted and
246
+ * re-introduced the `[object Object]` masking of DHQ-075 (T11958).
184
247
  *
185
248
  * Strategy:
186
249
  * 1. Clone the response so the body stream is not consumed by the primary
187
250
  * error path (callers may need the body for further inspection).
188
251
  * 2. Parse as JSON; use `error_description` or `error` fields (RFC 6749 §5.2).
252
+ * When the field is an object (Anthropic nests
253
+ * `{"error": {"type", "message"}}`), extract `message`/`type` — never
254
+ * `String(object)`.
189
255
  * 3. Fall back to the raw text body when JSON parsing fails (e.g. HTML pages
190
256
  * returned by a WAF or a misconfigured reverse proxy). Truncate at 512 chars
191
257
  * so a multi-kilobyte HTML page does not flood the error message.
@@ -194,16 +260,27 @@ function parseTokenResponse(provider, data) {
194
260
  * This ensures the caller never sees `[object Object]` in the thrown message
195
261
  * and always surfaces the actual HTTP response body for debugging.
196
262
  *
197
- * @internal
263
+ * @task T11958
198
264
  */
199
- async function extractErrorDetail(resp) {
265
+ export async function extractOAuthErrorDetail(resp) {
200
266
  // Clone before reading so the caller's Response is not drained.
201
267
  const clone = resp.clone();
202
268
  try {
203
269
  const body = (await clone.json());
204
270
  const desc = body['error_description'] ?? body['error'];
205
- if (desc)
206
- return ` — ${String(desc)}`;
271
+ if (typeof desc === 'string' && desc)
272
+ return ` — ${desc}`;
273
+ // Anthropic nests the detail: {"error": {"type": "...", "message": "..."}}.
274
+ // `String(object)` here is what produced the undebuggable
275
+ // "[object Object]" of DHQ-075 — extract message/type, else stringify.
276
+ if (desc !== null && typeof desc === 'object') {
277
+ const d = desc;
278
+ const message = typeof d['message'] === 'string' ? d['message'] : undefined;
279
+ const type = typeof d['type'] === 'string' ? d['type'] : undefined;
280
+ if (message)
281
+ return ` — ${type ? `${type}: ` : ''}${message}`;
282
+ return ` — ${JSON.stringify(desc).slice(0, 512)}`;
283
+ }
207
284
  // JSON parsed but had no recognized field: fall through to raw-text path.
208
285
  const text = JSON.stringify(body);
209
286
  return ` — ${text.slice(0, 512)}`;
@@ -1 +1 @@
1
- {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../../src/llm/oauth/pkce.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../../src/llm/oauth/pkce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAsCH,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAElD,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAElE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AACzC,CAAC;AAgCD;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAmC;IACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAClD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,0EAA0E;IAC1E,0EAA0E;IAC1E,iCAAiC;IACjC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;YAC/C,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS;SAClD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;YACrC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS;SACxC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AA4CD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAA8B;IACnE,MAAM,MAAM,GAA2B;QACrC,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,YAAY,EAAE,MAAM,CAAC,WAAW;KACjC,CAAC;IACF,6EAA6E;IAC7E,oEAAoE;IACpE,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,2CAA2C,MAAM,CAAC,QAAQ,WAAW,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAC5F,CAAC;IACJ,CAAC;IAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AA+BD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAA8B;IACnE,MAAM,MAAM,GAA2B;QACrC,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,aAAa,EAAE,MAAM,CAAC,YAAY;KACnC,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,2CAA2C,MAAM,CAAC,QAAQ,WAAW,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAC5F,CAAC;IACJ,CAAC;IAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,SAAS,gBAAgB,CACvB,aAAqB,EACrB,MAA8B,EAC9B,IAAiE;IAEjE,OAAO,UAAU,CAAC,KAAK,CAAC,aAAa,EAAE;QACrC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EACZ,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mCAAmC;YACvF,MAAM,EAAE,kBAAkB;YAC1B,GAAG,IAAI,CAAC,YAAY;SACrB;QACD,IAAI,EACF,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;KAC/F,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,KAAiB;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,QAAgB,EAAE,IAAa;IACzD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,gCAAgC,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,CAAC,GAAG,IAA+B,CAAC;IAE1C,MAAM,WAAW,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IACtC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,0CAA0C,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO;QACL,WAAW;QACX,YAAY,EAAE,OAAO,CAAC,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;QACrF,SAAS,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5E,SAAS,EAAE,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ;KAC5E,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAc;IAC1D,gEAAgE;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI;YAAE,OAAO,MAAM,IAAI,EAAE,CAAC;QAC1D,4EAA4E;QAC5E,0DAA0D;QAC1D,uEAAuE;QACvE,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,IAA+B,CAAC;YAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,IAAI,OAAO;gBAAE,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;YAC9D,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACpD,CAAC;QACD,0EAA0E;QAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;QAC7E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,146 @@
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 type { OnboardingAuthMode, OnboardingResult, ProviderProfile, RoleName } from '@cleocode/contracts';
43
+ import { type OnboardingDeps, type OnboardingLoginOptions } from './login-engine.js';
44
+ /**
45
+ * Outcome of an interactive OAuth acquisition. The acquirer performs the
46
+ * browser / device-code exchange and lands the credential in the pool itself
47
+ * (reusing the existing, battle-tested `cleo llm login` flow), then returns the
48
+ * non-secret metadata the front door surfaces. Because the credential is
49
+ * already stored, the engine's connect step is told to skip its own write
50
+ * (`credentialAlreadyStored`) so the OAuth token is persisted exactly once.
51
+ *
52
+ * @task T11725
53
+ */
54
+ export interface AcquiredOAuthToken {
55
+ /** The credential label the acquirer stored the OAuth credential under. */
56
+ readonly label: string;
57
+ /** Seconds until the access token expires (surfaced in the summary), if known. */
58
+ readonly expiresIn?: number;
59
+ }
60
+ /**
61
+ * Injectable seam that performs the interactive OAuth flow for a provider AND
62
+ * lands the resulting credential in the pool, returning its non-secret label +
63
+ * metadata.
64
+ *
65
+ * The CLI front-door handler supplies the real implementation (wrapping the
66
+ * existing PKCE / device-code browser dance in `cleo llm login`). Unit tests
67
+ * pass a stub that records the call and returns a fixed label so the
68
+ * orchestrator is exercised without a live browser.
69
+ *
70
+ * @param provider - Canonical provider name (alias already resolved).
71
+ * @returns The stored credential label + non-secret metadata.
72
+ * @task T11725
73
+ */
74
+ export type OAuthTokenAcquirer = (provider: string) => Promise<AcquiredOAuthToken>;
75
+ /**
76
+ * Options for {@link runFrontDoorLogin}.
77
+ *
78
+ * @task T11725
79
+ */
80
+ export interface FrontDoorLoginOptions {
81
+ /**
82
+ * Explicit auth method. When omitted it is inferred from the resolved
83
+ * provider profile: `oauth` when the profile advertises an `oauth` config,
84
+ * else `api_key`.
85
+ */
86
+ authMode?: OnboardingAuthMode;
87
+ /**
88
+ * Pre-supplied credential secret for the `api_key` path (the raw API key).
89
+ * Ignored on the `oauth` path — that token comes from the acquirer.
90
+ */
91
+ token?: string;
92
+ /** Human-readable label stored alongside the credential. */
93
+ label?: string;
94
+ /** Explicit model id to bind; defaults to the latest catalog model. */
95
+ model?: string;
96
+ /** Bind to a specific role instead of the global default. */
97
+ role?: RoleName;
98
+ /** Project root threaded through the engine's validate step. */
99
+ projectRoot?: string;
100
+ }
101
+ /**
102
+ * Injectable accessors for {@link runFrontDoorLogin}.
103
+ *
104
+ * Defaults to the real core accessors; tests override individual members to
105
+ * drive the orchestrator without a live provider registry / engine.
106
+ *
107
+ * @task T11725
108
+ */
109
+ export interface FrontDoorDeps {
110
+ /** Resolve a provider profile by name/alias (alias → canonical). */
111
+ getProviderProfile: (name: string) => Promise<ProviderProfile | undefined>;
112
+ /** The 3-step onboarding engine. */
113
+ runOnboardingLogin: (provider: string, opts?: OnboardingLoginOptions, deps?: OnboardingDeps) => Promise<OnboardingResult>;
114
+ }
115
+ /**
116
+ * Resolve the auth method for a provider profile: caller override wins, else
117
+ * `oauth` when the profile advertises an OAuth config, else `api_key`.
118
+ *
119
+ * @param profile - The resolved provider profile.
120
+ * @param override - Optional explicit auth mode from the caller.
121
+ * @returns The effective {@link OnboardingAuthMode}.
122
+ * @task T11725
123
+ */
124
+ export declare function resolveAuthMode(profile: ProviderProfile, override?: OnboardingAuthMode): OnboardingAuthMode;
125
+ /**
126
+ * Run the shared onboarding front-door flow for a provider (T11725 · M3).
127
+ *
128
+ * Resolves the provider + auth method, acquires the credential secret (raw API
129
+ * key from `opts.token`, or via the injected {@link OAuthTokenAcquirer} for the
130
+ * OAuth path), then delegates the heavy lifting to {@link runOnboardingLogin}.
131
+ *
132
+ * Mirrors the engine's never-throw-on-expected-failure contract: an unknown
133
+ * provider or a missing api-key secret returns a failed {@link OnboardingResult}
134
+ * envelope rather than throwing. The OAuth acquirer's own errors DO propagate —
135
+ * an aborted browser flow is a hard, caller-visible failure.
136
+ *
137
+ * @param provider - Provider name or alias (e.g. `'anthropic'`, `'codex'`).
138
+ * @param opts - {@link FrontDoorLoginOptions}.
139
+ * @param acquireOAuth - Interactive OAuth token acquirer (the CLI's browser flow).
140
+ * Only invoked on the `oauth` path; may be omitted when the flow is `api_key`.
141
+ * @param deps - Injectable accessor seam; defaults to real core accessors.
142
+ * @returns The typed onboarding result envelope.
143
+ * @task T11725
144
+ */
145
+ export declare function runFrontDoorLogin(provider: string, opts?: FrontDoorLoginOptions, acquireOAuth?: OAuthTokenAcquirer, deps?: FrontDoorDeps): Promise<OnboardingResult>;
146
+ //# sourceMappingURL=front-door.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"front-door.d.ts","sourceRoot":"","sources":["../../../src/llm/onboarding/front-door.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE5B,MAAM,mBAAmB,CAAC;AAM3B;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAMnF;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC3E,oCAAoC;IACpC,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,sBAAsB,EAC7B,IAAI,CAAC,EAAE,cAAc,KAClB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAChC;AAkBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EACxB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,kBAAkB,CAGpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,qBAA0B,EAChC,YAAY,CAAC,EAAE,kBAAkB,EACjC,IAAI,GAAE,aAAsC,GAC3C,OAAO,CAAC,gBAAgB,CAAC,CA0C3B"}
@@ -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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"}