@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
@@ -0,0 +1,208 @@
1
+ /**
2
+ * L1 complexity classifier — a prompt-complexity **tier proposer** for the E9
3
+ * LLM chokepoint.
4
+ *
5
+ * ## What this is
6
+ *
7
+ * A faithful TypeScript port of the deleted Rust `cant-router` Layer-1
8
+ * classifier (`crates/cant-router/src/features.rs` + `classifier.rs`, retired
9
+ * in T11807 / D11137). It converts a raw prompt string into five auditable
10
+ * heuristic features, scores them with a fixed linear model, and maps the
11
+ * scalar score to a three-level complexity tier (`low` / `mid` / `high`).
12
+ *
13
+ * The classifier is a **proposer** that COMPLEMENTS — never replaces — the E9
14
+ * resolver {@link resolveLLMForSystem}. The flow is:
15
+ *
16
+ * ```text
17
+ * classifyComplexity(prompt) -> ComplexityTier ('low'|'mid'|'high')
18
+ * complexityTierToRole(tier) -> RoleName (cheap → capable ladder)
19
+ * resolveLLMForSystem({ kind:'role', id }) -> model + credential
20
+ * ```
21
+ *
22
+ * So when a caller has NO explicit tier/role, it can derive one from the
23
+ * prompt's complexity and feed it to the chokepoint.
24
+ *
25
+ * ## What this is NOT (Gate-13 LLM Chokepoint Guard — T11783)
26
+ *
27
+ * - It NEVER constructs a transport or SDK client.
28
+ * - It NEVER reads `*_API_KEY` (no credential I/O at all).
29
+ * - It NEVER hardcodes a model-id literal. The tier→model mapping is the E9
30
+ * resolver's job; this module stops at proposing a {@link RoleName}.
31
+ *
32
+ * It returns a TIER (and, via the helper, a role). The provider, model, and
33
+ * credential are resolved exclusively by {@link resolveLLMForSystem}.
34
+ *
35
+ * The classifier is a pure, deterministic function with no I/O and no module
36
+ * side effects — safe to import anywhere in the chokepoint.
37
+ *
38
+ * @module llm/complexity-classifier
39
+ * @task T11906
40
+ * @epic T11745
41
+ * @see {@link resolveLLMForSystem} — the E9 chokepoint this proposer feeds.
42
+ */
43
+ import type { RoleName } from '@cleocode/contracts';
44
+ /**
45
+ * The three-level complexity ladder proposed by {@link classifyComplexity}.
46
+ *
47
+ * Ported verbatim from the Rust `Tier` enum (`low` / `mid` / `high`, in
48
+ * lowercase serde rename order). It is distinct from the dispatch
49
+ * `Tier = 0 | 1 | 2` in `@cleocode/contracts`: this ladder describes prompt
50
+ * complexity, not dispatch privilege.
51
+ *
52
+ * - `low` — fastest, cheapest models. Short, simple prompts.
53
+ * - `mid` — balanced cost/latency/capability. The default workhorse.
54
+ * - `high` — most capable, most expensive models. Complex reasoning.
55
+ */
56
+ export type ComplexityTier = 'low' | 'mid' | 'high';
57
+ /**
58
+ * The five heuristic features extracted from a prompt — the inputs to the
59
+ * linear classifier.
60
+ *
61
+ * Each field corresponds to one of the five signals defined in the deleted
62
+ * Rust `PromptFeatures` struct (ULTRAPLAN §11.1). Pure heuristics, no ML
63
+ * runtime — each extractor is a small, auditable signal.
64
+ */
65
+ export interface PromptFeatures {
66
+ /** Raw whitespace-delimited token count of the prompt. */
67
+ tokenCount: number;
68
+ /** Syntactic complexity in `[0.0, 1.0]` — proxied by nested bracket depth. */
69
+ syntacticComplexity: number;
70
+ /** Count of reasoning keywords (why / should / compare / decide / …). */
71
+ reasoningDepth: number;
72
+ /** Domain-specificity in `[0.0, 1.0]` — proxied by CamelCase identifier density. */
73
+ domainSpecificity: number;
74
+ /** Number of file references detected in the prompt. */
75
+ touchesFilesCount: number;
76
+ }
77
+ /**
78
+ * A classification result — the tier recommended for a prompt, plus the raw
79
+ * score and feature vector that produced it.
80
+ *
81
+ * Mirrors the deleted Rust `Classification` struct so downstream consumers can
82
+ * inspect the signals behind the decision.
83
+ */
84
+ export interface Classification {
85
+ /** Scalar complexity score in `[0.0, 1.0]` produced by the weighted sum. */
86
+ score: number;
87
+ /** The tier chosen by threshold-mapping `score`. */
88
+ tier: ComplexityTier;
89
+ /** The raw feature vector that produced this classification. */
90
+ features: PromptFeatures;
91
+ }
92
+ /** Weight applied to the normalized `tokenCount` feature. */
93
+ export declare const WEIGHT_TOKEN_COUNT = 0.15;
94
+ /** Weight applied to the normalized `syntacticComplexity` feature. */
95
+ export declare const WEIGHT_SYNTACTIC_COMPLEXITY = 0.25;
96
+ /** Weight applied to the normalized `reasoningDepth` feature. */
97
+ export declare const WEIGHT_REASONING_DEPTH = 0.3;
98
+ /** Weight applied to the normalized `domainSpecificity` feature. */
99
+ export declare const WEIGHT_DOMAIN_SPECIFICITY = 0.2;
100
+ /** Weight applied to the normalized `touchesFilesCount` feature. */
101
+ export declare const WEIGHT_TOUCHES_FILES_COUNT = 0.1;
102
+ /** Score at or above which the classifier returns the `high` tier. */
103
+ export declare const THRESHOLD_HIGH = 0.75;
104
+ /**
105
+ * Score at or above which the classifier returns the `mid` tier.
106
+ *
107
+ * Scores strictly below this threshold are mapped to `low`.
108
+ */
109
+ export declare const THRESHOLD_MID = 0.35;
110
+ /**
111
+ * Extract a {@link PromptFeatures} vector from a raw prompt string.
112
+ *
113
+ * Pure heuristics, no ML runtime — the Layer-1 input stage. Each field is a
114
+ * small, auditable signal that feeds {@link classify}.
115
+ *
116
+ * @param prompt - The raw prompt string.
117
+ * @returns The five-feature vector for `prompt`.
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * const f = extractFeatures('Refactor auth.ts to use JWT tokens.');
122
+ * f.tokenCount; // > 0
123
+ * ```
124
+ */
125
+ export declare function extractFeatures(prompt: string): PromptFeatures;
126
+ /**
127
+ * Classify a feature vector into a {@link Classification} result.
128
+ *
129
+ * Applies the linear weighted sum from ULTRAPLAN §11.1 and maps the resulting
130
+ * score to a tier via {@link THRESHOLD_HIGH} and {@link THRESHOLD_MID}. The
131
+ * input {@link PromptFeatures} is preserved so downstream consumers can inspect
132
+ * the raw signals that produced the decision.
133
+ *
134
+ * @param features - The five-feature vector to score.
135
+ * @returns The score, tier, and preserved feature vector.
136
+ */
137
+ export declare function classify(features: PromptFeatures): Classification;
138
+ /**
139
+ * Classify a raw prompt into a complexity {@link ComplexityTier}.
140
+ *
141
+ * The one-call entry point: `extractFeatures` → `classify` → tier. This is the
142
+ * **proposer** half of the L1 router — it stops at a tier and never touches a
143
+ * model, transport, or credential (Gate-13 compliant).
144
+ *
145
+ * @param prompt - The raw prompt string to classify.
146
+ * @returns The proposed complexity tier (`low` / `mid` / `high`).
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * classifyComplexity('list files'); // 'low'
151
+ * classifyComplexity('Why should we compare these and decide the trade-off?'); // 'mid'+
152
+ * ```
153
+ */
154
+ export declare function classifyComplexity(prompt: string): ComplexityTier;
155
+ /**
156
+ * The next tier up for escalation — ported from the Rust `Tier::escalate`.
157
+ *
158
+ * Returns `null` when already at `high`, signalling the caller that no further
159
+ * escalation is possible.
160
+ *
161
+ * @param tier - The current complexity tier.
162
+ * @returns The next tier up, or `null` at the top of the ladder.
163
+ */
164
+ export declare function escalateTier(tier: ComplexityTier): ComplexityTier | null;
165
+ /**
166
+ * Map a complexity {@link ComplexityTier} to the {@link RoleName} that
167
+ * {@link resolveLLMForSystem} should resolve when no explicit tier/role was
168
+ * given.
169
+ *
170
+ * This is the wiring contract (AC2) that lets a tier flow into the E9
171
+ * chokepoint: the classifier proposes a tier, this maps it to a role, and
172
+ * `resolveLLMForSystem({ kind: 'role', id })` performs the actual model +
173
+ * credential resolution. The mapping is a cheap → capable ladder over the
174
+ * canonical {@link RoleName} set — it pins NO model literal of its own.
175
+ *
176
+ * - `low` → `hygiene` — cheapest single-turn cleanup-class role.
177
+ * - `mid` → `consolidation` — the default workhorse role.
178
+ * - `high` → `judgement` — the most-capable reasoning role.
179
+ *
180
+ * @param tier - The proposed complexity tier.
181
+ * @returns The {@link RoleName} to feed into the E9 resolver.
182
+ */
183
+ export declare function complexityTierToRole(tier: ComplexityTier): RoleName;
184
+ /**
185
+ * Propose the {@link RoleName} for a raw prompt by classifying its complexity
186
+ * and mapping the resulting tier to a role.
187
+ *
188
+ * Convenience composition of {@link classifyComplexity} and
189
+ * {@link complexityTierToRole} — the single call a caller uses to derive a role
190
+ * for {@link resolveLLMForSystem} when it has no explicit tier/role.
191
+ *
192
+ * The returned role is intended to be passed as the structured descriptor:
193
+ * `resolveLLMForSystem({ kind: 'role', id: proposeRoleForPrompt(prompt) })`.
194
+ *
195
+ * @param prompt - The raw prompt string.
196
+ * @returns The proposed {@link RoleName} for the E9 chokepoint.
197
+ *
198
+ * @example
199
+ * ```ts
200
+ * import { proposeRoleForPrompt } from './complexity-classifier.js';
201
+ * import { resolveLLMForSystem } from './system-resolver.js';
202
+ *
203
+ * const role = proposeRoleForPrompt(userPrompt);
204
+ * const llm = await resolveLLMForSystem({ kind: 'role', id: role }, { projectRoot });
205
+ * ```
206
+ */
207
+ export declare function proposeRoleForPrompt(prompt: string): RoleName;
208
+ //# sourceMappingURL=complexity-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity-classifier.d.ts","sourceRoot":"","sources":["../../src/llm/complexity-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAMpD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,IAAI,EAAE,cAAc,CAAC;IACrB,gEAAgE;IAChE,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAMD,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,sEAAsE;AACtE,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,oEAAoE;AACpE,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,sEAAsE;AACtE,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,aAAa,OAAO,CAAC;AA2IlC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAQ9D;AAyCD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAajE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,IAAI,CASxE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,QAAQ,CASnE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE7D"}
@@ -0,0 +1,359 @@
1
+ /**
2
+ * L1 complexity classifier — a prompt-complexity **tier proposer** for the E9
3
+ * LLM chokepoint.
4
+ *
5
+ * ## What this is
6
+ *
7
+ * A faithful TypeScript port of the deleted Rust `cant-router` Layer-1
8
+ * classifier (`crates/cant-router/src/features.rs` + `classifier.rs`, retired
9
+ * in T11807 / D11137). It converts a raw prompt string into five auditable
10
+ * heuristic features, scores them with a fixed linear model, and maps the
11
+ * scalar score to a three-level complexity tier (`low` / `mid` / `high`).
12
+ *
13
+ * The classifier is a **proposer** that COMPLEMENTS — never replaces — the E9
14
+ * resolver {@link resolveLLMForSystem}. The flow is:
15
+ *
16
+ * ```text
17
+ * classifyComplexity(prompt) -> ComplexityTier ('low'|'mid'|'high')
18
+ * complexityTierToRole(tier) -> RoleName (cheap → capable ladder)
19
+ * resolveLLMForSystem({ kind:'role', id }) -> model + credential
20
+ * ```
21
+ *
22
+ * So when a caller has NO explicit tier/role, it can derive one from the
23
+ * prompt's complexity and feed it to the chokepoint.
24
+ *
25
+ * ## What this is NOT (Gate-13 LLM Chokepoint Guard — T11783)
26
+ *
27
+ * - It NEVER constructs a transport or SDK client.
28
+ * - It NEVER reads `*_API_KEY` (no credential I/O at all).
29
+ * - It NEVER hardcodes a model-id literal. The tier→model mapping is the E9
30
+ * resolver's job; this module stops at proposing a {@link RoleName}.
31
+ *
32
+ * It returns a TIER (and, via the helper, a role). The provider, model, and
33
+ * credential are resolved exclusively by {@link resolveLLMForSystem}.
34
+ *
35
+ * The classifier is a pure, deterministic function with no I/O and no module
36
+ * side effects — safe to import anywhere in the chokepoint.
37
+ *
38
+ * @module llm/complexity-classifier
39
+ * @task T11906
40
+ * @epic T11745
41
+ * @see {@link resolveLLMForSystem} — the E9 chokepoint this proposer feeds.
42
+ */
43
+ // ---------------------------------------------------------------------------
44
+ // Classifier weights + thresholds (ULTRAPLAN §11.1 — ported from classifier.rs)
45
+ // ---------------------------------------------------------------------------
46
+ /** Weight applied to the normalized `tokenCount` feature. */
47
+ export const WEIGHT_TOKEN_COUNT = 0.15;
48
+ /** Weight applied to the normalized `syntacticComplexity` feature. */
49
+ export const WEIGHT_SYNTACTIC_COMPLEXITY = 0.25;
50
+ /** Weight applied to the normalized `reasoningDepth` feature. */
51
+ export const WEIGHT_REASONING_DEPTH = 0.3;
52
+ /** Weight applied to the normalized `domainSpecificity` feature. */
53
+ export const WEIGHT_DOMAIN_SPECIFICITY = 0.2;
54
+ /** Weight applied to the normalized `touchesFilesCount` feature. */
55
+ export const WEIGHT_TOUCHES_FILES_COUNT = 0.1;
56
+ /** Score at or above which the classifier returns the `high` tier. */
57
+ export const THRESHOLD_HIGH = 0.75;
58
+ /**
59
+ * Score at or above which the classifier returns the `mid` tier.
60
+ *
61
+ * Scores strictly below this threshold are mapped to `low`.
62
+ */
63
+ export const THRESHOLD_MID = 0.35;
64
+ // ---------------------------------------------------------------------------
65
+ // Feature extraction (ported from features.rs — five pure heuristics)
66
+ // ---------------------------------------------------------------------------
67
+ /**
68
+ * Estimate syntactic complexity by counting nested bracket depth.
69
+ *
70
+ * Walks the string once tracking the running depth of `(`, `{`, `[` (and their
71
+ * matching closers). The maximum depth observed is divided by 5 and clamped to
72
+ * `[0.0, 1.0]`, so a prompt with no brackets scores 0 and one with 5+ nested
73
+ * brackets scores 1.
74
+ *
75
+ * @param s - The raw prompt string.
76
+ * @returns A syntactic-complexity score in `[0.0, 1.0]`.
77
+ */
78
+ function estimateSyntacticComplexity(s) {
79
+ let depth = 0;
80
+ let maxDepth = 0;
81
+ for (const c of s) {
82
+ if (c === '(' || c === '{' || c === '[') {
83
+ depth += 1;
84
+ if (depth > maxDepth)
85
+ maxDepth = depth;
86
+ }
87
+ else if (c === ')' || c === '}' || c === ']') {
88
+ depth = Math.max(depth - 1, 0);
89
+ }
90
+ }
91
+ return Math.min(maxDepth / 5.0, 1.0);
92
+ }
93
+ /**
94
+ * Reasoning-signal keywords — terms that correlate with multi-step reasoning.
95
+ *
96
+ * Intentionally short and biased; ported verbatim from the Rust `KEYWORDS`
97
+ * slice in `count_reasoning_keywords`.
98
+ */
99
+ const REASONING_KEYWORDS = [
100
+ 'why',
101
+ 'should',
102
+ 'compare',
103
+ 'decide',
104
+ 'explain',
105
+ 'analyze',
106
+ 'evaluate',
107
+ 'consider',
108
+ 'trade-off',
109
+ 'tradeoff',
110
+ ];
111
+ /**
112
+ * Count reasoning-signal keyword occurrences in the prompt (case-insensitive,
113
+ * counting every (possibly overlapping-free) occurrence, matching the Rust
114
+ * `str::matches` semantics).
115
+ *
116
+ * @param s - The raw prompt string.
117
+ * @returns The total number of reasoning-keyword occurrences.
118
+ */
119
+ function countReasoningKeywords(s) {
120
+ const lower = s.toLowerCase();
121
+ let total = 0;
122
+ for (const keyword of REASONING_KEYWORDS) {
123
+ let from = 0;
124
+ for (;;) {
125
+ const idx = lower.indexOf(keyword, from);
126
+ if (idx === -1)
127
+ break;
128
+ total += 1;
129
+ // Rust's `str::matches` advances past each non-overlapping match.
130
+ from = idx + keyword.length;
131
+ }
132
+ }
133
+ return total;
134
+ }
135
+ /**
136
+ * Count the uppercase characters in a token (used by the CamelCase proxy).
137
+ *
138
+ * @param w - A single whitespace-delimited token.
139
+ * @returns The number of uppercase characters in `w`.
140
+ */
141
+ function uppercaseCount(w) {
142
+ let n = 0;
143
+ for (const c of w) {
144
+ // An uppercase letter is one that differs from its lowercase form and equals
145
+ // its own uppercase form (excludes digits/punctuation, mirroring Rust's
146
+ // `char::is_uppercase`).
147
+ if (c !== c.toLowerCase() && c === c.toUpperCase())
148
+ n += 1;
149
+ }
150
+ return n;
151
+ }
152
+ /**
153
+ * Estimate domain specificity via CamelCase identifier density.
154
+ *
155
+ * Counts whitespace-delimited tokens containing at least two uppercase letters
156
+ * (a rough proxy for domain-specific identifiers like `ModelSelection` or
157
+ * `XDGBaseDir`). The count is divided by 10 and clamped to `[0.0, 1.0]`.
158
+ *
159
+ * @param s - The raw prompt string.
160
+ * @returns A domain-specificity score in `[0.0, 1.0]`.
161
+ */
162
+ function estimateDomainSpecificity(s) {
163
+ const camelCaseCount = splitWhitespace(s).filter((w) => uppercaseCount(w) >= 2).length;
164
+ return Math.min(camelCaseCount / 10.0, 1.0);
165
+ }
166
+ /**
167
+ * Count file references in the prompt.
168
+ *
169
+ * A token is a file reference if it contains a `/` or ends in a known
170
+ * source-file extension (`.rs`, `.ts`, `.md`, `.json`). Punctuation on the
171
+ * token is left intact for v1 — callers aware of this limitation can pre-clean
172
+ * their prompts.
173
+ *
174
+ * @param s - The raw prompt string.
175
+ * @returns The number of file-reference tokens.
176
+ */
177
+ function countFileReferences(s) {
178
+ return splitWhitespace(s).filter((w) => w.includes('/') ||
179
+ w.endsWith('.rs') ||
180
+ w.endsWith('.ts') ||
181
+ w.endsWith('.md') ||
182
+ w.endsWith('.json')).length;
183
+ }
184
+ /**
185
+ * Split a string on Unicode whitespace, dropping empty segments — matching
186
+ * Rust's `str::split_whitespace` (which never yields empty tokens).
187
+ *
188
+ * @param s - The string to split.
189
+ * @returns The non-empty whitespace-delimited tokens of `s`.
190
+ */
191
+ function splitWhitespace(s) {
192
+ return s.split(/\s+/).filter((w) => w.length > 0);
193
+ }
194
+ /**
195
+ * Extract a {@link PromptFeatures} vector from a raw prompt string.
196
+ *
197
+ * Pure heuristics, no ML runtime — the Layer-1 input stage. Each field is a
198
+ * small, auditable signal that feeds {@link classify}.
199
+ *
200
+ * @param prompt - The raw prompt string.
201
+ * @returns The five-feature vector for `prompt`.
202
+ *
203
+ * @example
204
+ * ```ts
205
+ * const f = extractFeatures('Refactor auth.ts to use JWT tokens.');
206
+ * f.tokenCount; // > 0
207
+ * ```
208
+ */
209
+ export function extractFeatures(prompt) {
210
+ return {
211
+ tokenCount: splitWhitespace(prompt).length,
212
+ syntacticComplexity: estimateSyntacticComplexity(prompt),
213
+ reasoningDepth: countReasoningKeywords(prompt),
214
+ domainSpecificity: estimateDomainSpecificity(prompt),
215
+ touchesFilesCount: countFileReferences(prompt),
216
+ };
217
+ }
218
+ /**
219
+ * Clamp a value to `[lo, hi]` — equivalent to Rust's `f64::clamp`. Returns `lo`
220
+ * for `NaN`, matching the saturating intent of the original normalizers.
221
+ */
222
+ function clamp(value, lo, hi) {
223
+ if (Number.isNaN(value))
224
+ return lo;
225
+ return Math.min(Math.max(value, lo), hi);
226
+ }
227
+ /**
228
+ * Normalize each feature to `[0.0, 1.0]` for the weighted sum.
229
+ *
230
+ * These normalization constants are the heuristic v1 defaults tuned against
231
+ * the ULTRAPLAN §11.1 example ranges (not a labeled corpus). Ported verbatim
232
+ * from the Rust `normalize_features`.
233
+ */
234
+ function normalizeFeatures(f) {
235
+ return {
236
+ tokenCount: Math.min(f.tokenCount / 1000.0, 1.0),
237
+ syntacticComplexity: clamp(f.syntacticComplexity, 0.0, 1.0),
238
+ reasoningDepth: Math.min(f.reasoningDepth / 10.0, 1.0),
239
+ domainSpecificity: clamp(f.domainSpecificity, 0.0, 1.0),
240
+ touchesFilesCount: Math.min(f.touchesFilesCount / 20.0, 1.0),
241
+ };
242
+ }
243
+ /**
244
+ * Classify a feature vector into a {@link Classification} result.
245
+ *
246
+ * Applies the linear weighted sum from ULTRAPLAN §11.1 and maps the resulting
247
+ * score to a tier via {@link THRESHOLD_HIGH} and {@link THRESHOLD_MID}. The
248
+ * input {@link PromptFeatures} is preserved so downstream consumers can inspect
249
+ * the raw signals that produced the decision.
250
+ *
251
+ * @param features - The five-feature vector to score.
252
+ * @returns The score, tier, and preserved feature vector.
253
+ */
254
+ export function classify(features) {
255
+ const normalized = normalizeFeatures(features);
256
+ const score = WEIGHT_TOKEN_COUNT * normalized.tokenCount +
257
+ WEIGHT_SYNTACTIC_COMPLEXITY * normalized.syntacticComplexity +
258
+ WEIGHT_REASONING_DEPTH * normalized.reasoningDepth +
259
+ WEIGHT_DOMAIN_SPECIFICITY * normalized.domainSpecificity +
260
+ WEIGHT_TOUCHES_FILES_COUNT * normalized.touchesFilesCount;
261
+ const tier = score >= THRESHOLD_HIGH ? 'high' : score >= THRESHOLD_MID ? 'mid' : 'low';
262
+ return { score, tier, features };
263
+ }
264
+ // ---------------------------------------------------------------------------
265
+ // Public proposer API
266
+ // ---------------------------------------------------------------------------
267
+ /**
268
+ * Classify a raw prompt into a complexity {@link ComplexityTier}.
269
+ *
270
+ * The one-call entry point: `extractFeatures` → `classify` → tier. This is the
271
+ * **proposer** half of the L1 router — it stops at a tier and never touches a
272
+ * model, transport, or credential (Gate-13 compliant).
273
+ *
274
+ * @param prompt - The raw prompt string to classify.
275
+ * @returns The proposed complexity tier (`low` / `mid` / `high`).
276
+ *
277
+ * @example
278
+ * ```ts
279
+ * classifyComplexity('list files'); // 'low'
280
+ * classifyComplexity('Why should we compare these and decide the trade-off?'); // 'mid'+
281
+ * ```
282
+ */
283
+ export function classifyComplexity(prompt) {
284
+ return classify(extractFeatures(prompt)).tier;
285
+ }
286
+ /**
287
+ * The next tier up for escalation — ported from the Rust `Tier::escalate`.
288
+ *
289
+ * Returns `null` when already at `high`, signalling the caller that no further
290
+ * escalation is possible.
291
+ *
292
+ * @param tier - The current complexity tier.
293
+ * @returns The next tier up, or `null` at the top of the ladder.
294
+ */
295
+ export function escalateTier(tier) {
296
+ switch (tier) {
297
+ case 'low':
298
+ return 'mid';
299
+ case 'mid':
300
+ return 'high';
301
+ case 'high':
302
+ return null;
303
+ }
304
+ }
305
+ /**
306
+ * Map a complexity {@link ComplexityTier} to the {@link RoleName} that
307
+ * {@link resolveLLMForSystem} should resolve when no explicit tier/role was
308
+ * given.
309
+ *
310
+ * This is the wiring contract (AC2) that lets a tier flow into the E9
311
+ * chokepoint: the classifier proposes a tier, this maps it to a role, and
312
+ * `resolveLLMForSystem({ kind: 'role', id })` performs the actual model +
313
+ * credential resolution. The mapping is a cheap → capable ladder over the
314
+ * canonical {@link RoleName} set — it pins NO model literal of its own.
315
+ *
316
+ * - `low` → `hygiene` — cheapest single-turn cleanup-class role.
317
+ * - `mid` → `consolidation` — the default workhorse role.
318
+ * - `high` → `judgement` — the most-capable reasoning role.
319
+ *
320
+ * @param tier - The proposed complexity tier.
321
+ * @returns The {@link RoleName} to feed into the E9 resolver.
322
+ */
323
+ export function complexityTierToRole(tier) {
324
+ switch (tier) {
325
+ case 'low':
326
+ return 'hygiene';
327
+ case 'mid':
328
+ return 'consolidation';
329
+ case 'high':
330
+ return 'judgement';
331
+ }
332
+ }
333
+ /**
334
+ * Propose the {@link RoleName} for a raw prompt by classifying its complexity
335
+ * and mapping the resulting tier to a role.
336
+ *
337
+ * Convenience composition of {@link classifyComplexity} and
338
+ * {@link complexityTierToRole} — the single call a caller uses to derive a role
339
+ * for {@link resolveLLMForSystem} when it has no explicit tier/role.
340
+ *
341
+ * The returned role is intended to be passed as the structured descriptor:
342
+ * `resolveLLMForSystem({ kind: 'role', id: proposeRoleForPrompt(prompt) })`.
343
+ *
344
+ * @param prompt - The raw prompt string.
345
+ * @returns The proposed {@link RoleName} for the E9 chokepoint.
346
+ *
347
+ * @example
348
+ * ```ts
349
+ * import { proposeRoleForPrompt } from './complexity-classifier.js';
350
+ * import { resolveLLMForSystem } from './system-resolver.js';
351
+ *
352
+ * const role = proposeRoleForPrompt(userPrompt);
353
+ * const llm = await resolveLLMForSystem({ kind: 'role', id: role }, { projectRoot });
354
+ * ```
355
+ */
356
+ export function proposeRoleForPrompt(prompt) {
357
+ return complexityTierToRole(classifyComplexity(prompt));
358
+ }
359
+ //# sourceMappingURL=complexity-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity-classifier.js","sourceRoot":"","sources":["../../src/llm/complexity-classifier.ts"],"names":[],"mappings":"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"}
@@ -243,7 +243,9 @@ export declare class CredentialPool {
243
243
  * @param existing - Credential entry to refresh.
244
244
  * @param tokenEndpoint - Provider token endpoint URL.
245
245
  * @param clientId - OAuth client ID.
246
+ * @param bodyFormat - Token request body encoding (`'json'` for Anthropic).
246
247
  * @task T9302
248
+ * @task T11958
247
249
  */
248
250
  private _refreshViaPkce;
249
251
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"credential-pool.d.ts","sourceRoot":"","sources":["../../src/llm/credential-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential-pool.d.ts","sourceRoot":"","sources":["../../src/llm/credential-pool.ts"],"names":[],"mappings":"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"}
@@ -418,7 +418,7 @@ export class CredentialPool {
418
418
  const profile = await getProviderProfile(this.provider);
419
419
  const oauthCfg = profile?.oauth;
420
420
  if (oauthCfg?.mode === 'pkce') {
421
- await this._refreshViaPkce(existing, oauthCfg.tokenEndpoint, oauthCfg.clientId);
421
+ await this._refreshViaPkce(existing, oauthCfg.tokenEndpoint, oauthCfg.clientId, oauthCfg.tokenBodyFormat);
422
422
  }
423
423
  else if (this.provider === 'kimi-code') {
424
424
  const cfg = getKimiCodeDeviceCodeConfig();
@@ -434,9 +434,11 @@ export class CredentialPool {
434
434
  * @param existing - Credential entry to refresh.
435
435
  * @param tokenEndpoint - Provider token endpoint URL.
436
436
  * @param clientId - OAuth client ID.
437
+ * @param bodyFormat - Token request body encoding (`'json'` for Anthropic).
437
438
  * @task T9302
439
+ * @task T11958
438
440
  */
439
- async _refreshViaPkce(existing, tokenEndpoint, clientId) {
441
+ async _refreshViaPkce(existing, tokenEndpoint, clientId, bodyFormat) {
440
442
  if (!existing.refreshToken)
441
443
  return;
442
444
  let tokens;
@@ -446,6 +448,7 @@ export class CredentialPool {
446
448
  clientId,
447
449
  refreshToken: existing.refreshToken,
448
450
  tokenEndpoint,
451
+ bodyFormat,
449
452
  });
450
453
  }
451
454
  catch {