@cleocode/core 2026.6.13 → 2026.6.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/dist/admin/ops.d.ts +4 -0
  2. package/dist/admin/ops.d.ts.map +1 -1
  3. package/dist/check/index.d.ts +12 -0
  4. package/dist/check/index.d.ts.map +1 -0
  5. package/dist/check/index.js +12 -0
  6. package/dist/check/index.js.map +1 -0
  7. package/dist/check/pr-gate.d.ts +183 -0
  8. package/dist/check/pr-gate.d.ts.map +1 -0
  9. package/dist/check/pr-gate.js +348 -0
  10. package/dist/check/pr-gate.js.map +1 -0
  11. package/dist/conduit/delivery-router.d.ts +134 -0
  12. package/dist/conduit/delivery-router.d.ts.map +1 -0
  13. package/dist/conduit/delivery-router.js +0 -0
  14. package/dist/conduit/delivery-router.js.map +1 -0
  15. package/dist/conduit/index.d.ts +5 -2
  16. package/dist/conduit/index.d.ts.map +1 -1
  17. package/dist/conduit/index.js +5 -2
  18. package/dist/conduit/index.js.map +1 -1
  19. package/dist/conduit/local-tui-adapter.d.ts +89 -0
  20. package/dist/conduit/local-tui-adapter.d.ts.map +1 -0
  21. package/dist/conduit/local-tui-adapter.js +225 -0
  22. package/dist/conduit/local-tui-adapter.js.map +1 -0
  23. package/dist/config/config-repair.d.ts +70 -0
  24. package/dist/config/config-repair.d.ts.map +1 -0
  25. package/dist/config/config-repair.js +248 -0
  26. package/dist/config/config-repair.js.map +1 -0
  27. package/dist/config/registry.d.ts +54 -0
  28. package/dist/config/registry.d.ts.map +1 -1
  29. package/dist/config/registry.js +92 -0
  30. package/dist/config/registry.js.map +1 -1
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +11 -10
  33. package/dist/config.js.map +1 -1
  34. package/dist/deriver/queue-manager.d.ts +30 -2
  35. package/dist/deriver/queue-manager.d.ts.map +1 -1
  36. package/dist/deriver/queue-manager.js +54 -9
  37. package/dist/deriver/queue-manager.js.map +1 -1
  38. package/dist/dispatch/config-domain-handler.d.ts +125 -0
  39. package/dist/dispatch/config-domain-handler.d.ts.map +1 -0
  40. package/dist/dispatch/config-domain-handler.js +160 -0
  41. package/dist/dispatch/config-domain-handler.js.map +1 -0
  42. package/dist/dispatch/contracts/input-contracts.d.ts.map +1 -1
  43. package/dist/dispatch/contracts/input-contracts.js +19 -1
  44. package/dist/dispatch/contracts/input-contracts.js.map +1 -1
  45. package/dist/docs/export-document.js +3721 -696
  46. package/dist/docs/export-document.js.map +3 -3
  47. package/dist/gateway-client/client.d.ts +123 -0
  48. package/dist/gateway-client/client.d.ts.map +1 -0
  49. package/dist/gateway-client/client.js +93 -0
  50. package/dist/gateway-client/client.js.map +1 -0
  51. package/dist/gateway-client/generated/client/client.gen.d.ts +3 -0
  52. package/dist/gateway-client/generated/client/client.gen.d.ts.map +1 -0
  53. package/dist/gateway-client/generated/client/client.gen.js +217 -0
  54. package/dist/gateway-client/generated/client/client.gen.js.map +1 -0
  55. package/dist/gateway-client/generated/client/index.d.ts +11 -0
  56. package/dist/gateway-client/generated/client/index.d.ts.map +1 -0
  57. package/dist/gateway-client/generated/client/index.js +7 -0
  58. package/dist/gateway-client/generated/client/index.js.map +1 -0
  59. package/dist/gateway-client/generated/client/types.gen.d.ts +121 -0
  60. package/dist/gateway-client/generated/client/types.gen.d.ts.map +1 -0
  61. package/dist/gateway-client/generated/client/types.gen.js +3 -0
  62. package/dist/gateway-client/generated/client/types.gen.js.map +1 -0
  63. package/dist/gateway-client/generated/client/utils.gen.d.ts +38 -0
  64. package/dist/gateway-client/generated/client/utils.gen.d.ts.map +1 -0
  65. package/dist/gateway-client/generated/client/utils.gen.js +229 -0
  66. package/dist/gateway-client/generated/client/utils.gen.js.map +1 -0
  67. package/dist/gateway-client/generated/client.gen.d.ts +13 -0
  68. package/dist/gateway-client/generated/client.gen.d.ts.map +1 -0
  69. package/dist/gateway-client/generated/client.gen.js +4 -0
  70. package/dist/gateway-client/generated/client.gen.js.map +1 -0
  71. package/dist/gateway-client/generated/core/auth.gen.d.ts +26 -0
  72. package/dist/gateway-client/generated/core/auth.gen.d.ts.map +1 -0
  73. package/dist/gateway-client/generated/core/auth.gen.js +15 -0
  74. package/dist/gateway-client/generated/core/auth.gen.js.map +1 -0
  75. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts +26 -0
  76. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts.map +1 -0
  77. package/dist/gateway-client/generated/core/bodySerializer.gen.js +58 -0
  78. package/dist/gateway-client/generated/core/bodySerializer.gen.js.map +1 -0
  79. package/dist/gateway-client/generated/core/params.gen.d.ts +44 -0
  80. package/dist/gateway-client/generated/core/params.gen.d.ts.map +1 -0
  81. package/dist/gateway-client/generated/core/params.gen.js +101 -0
  82. package/dist/gateway-client/generated/core/params.gen.js.map +1 -0
  83. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts +34 -0
  84. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts.map +1 -0
  85. package/dist/gateway-client/generated/core/pathSerializer.gen.js +107 -0
  86. package/dist/gateway-client/generated/core/pathSerializer.gen.js.map +1 -0
  87. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts +19 -0
  88. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  89. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js +93 -0
  90. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js.map +1 -0
  91. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts +72 -0
  92. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  93. package/dist/gateway-client/generated/core/serverSentEvents.gen.js +133 -0
  94. package/dist/gateway-client/generated/core/serverSentEvents.gen.js.map +1 -0
  95. package/dist/gateway-client/generated/core/types.gen.d.ts +84 -0
  96. package/dist/gateway-client/generated/core/types.gen.d.ts.map +1 -0
  97. package/dist/gateway-client/generated/core/types.gen.js +3 -0
  98. package/dist/gateway-client/generated/core/types.gen.js.map +1 -0
  99. package/dist/gateway-client/generated/core/utils.gen.d.ts +20 -0
  100. package/dist/gateway-client/generated/core/utils.gen.d.ts.map +1 -0
  101. package/dist/gateway-client/generated/core/utils.gen.js +88 -0
  102. package/dist/gateway-client/generated/core/utils.gen.js.map +1 -0
  103. package/dist/gateway-client/generated/index.d.ts +3 -0
  104. package/dist/gateway-client/generated/index.d.ts.map +1 -0
  105. package/dist/gateway-client/generated/index.js +3 -0
  106. package/dist/gateway-client/generated/index.js.map +1 -0
  107. package/dist/gateway-client/generated/namespaces.gen.d.ts +512 -0
  108. package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -0
  109. package/dist/gateway-client/generated/namespaces.gen.js +521 -0
  110. package/dist/gateway-client/generated/namespaces.gen.js.map +1 -0
  111. package/dist/gateway-client/generated/sdk.gen.d.ts +1780 -0
  112. package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -0
  113. package/dist/gateway-client/generated/sdk.gen.js +3811 -0
  114. package/dist/gateway-client/generated/sdk.gen.js.map +1 -0
  115. package/dist/gateway-client/generated/types.gen.d.ts +14681 -0
  116. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -0
  117. package/dist/gateway-client/generated/types.gen.js +3 -0
  118. package/dist/gateway-client/generated/types.gen.js.map +1 -0
  119. package/dist/gateway-client/index.d.ts +27 -0
  120. package/dist/gateway-client/index.d.ts.map +1 -0
  121. package/dist/gateway-client/index.js +25 -0
  122. package/dist/gateway-client/index.js.map +1 -0
  123. package/dist/gc/cleanup.d.ts +23 -8
  124. package/dist/gc/cleanup.d.ts.map +1 -1
  125. package/dist/gc/cleanup.js +287 -22
  126. package/dist/gc/cleanup.js.map +1 -1
  127. package/dist/index.d.ts +10 -0
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +20 -0
  130. package/dist/index.js.map +1 -1
  131. package/dist/init.d.ts.map +1 -1
  132. package/dist/init.js +28 -0
  133. package/dist/init.js.map +1 -1
  134. package/dist/internal.d.ts +10 -1
  135. package/dist/internal.d.ts.map +1 -1
  136. package/dist/internal.js +18 -1
  137. package/dist/internal.js.map +1 -1
  138. package/dist/llm/catalog-model-resolver.d.ts +19 -0
  139. package/dist/llm/catalog-model-resolver.d.ts.map +1 -1
  140. package/dist/llm/catalog-model-resolver.js +36 -0
  141. package/dist/llm/catalog-model-resolver.js.map +1 -1
  142. package/dist/llm/catalog-resolver.d.ts +112 -0
  143. package/dist/llm/catalog-resolver.d.ts.map +1 -0
  144. package/dist/llm/catalog-resolver.js +207 -0
  145. package/dist/llm/catalog-resolver.js.map +1 -0
  146. package/dist/llm/catalog-seeder.d.ts +96 -0
  147. package/dist/llm/catalog-seeder.d.ts.map +1 -0
  148. package/dist/llm/catalog-seeder.js +189 -0
  149. package/dist/llm/catalog-seeder.js.map +1 -0
  150. package/dist/llm/cli-ops.d.ts +16 -0
  151. package/dist/llm/cli-ops.d.ts.map +1 -1
  152. package/dist/llm/cli-ops.js +37 -10
  153. package/dist/llm/cli-ops.js.map +1 -1
  154. package/dist/llm/complexity-classifier.d.ts +208 -0
  155. package/dist/llm/complexity-classifier.d.ts.map +1 -0
  156. package/dist/llm/complexity-classifier.js +359 -0
  157. package/dist/llm/complexity-classifier.js.map +1 -0
  158. package/dist/llm/credential-pool.d.ts +2 -0
  159. package/dist/llm/credential-pool.d.ts.map +1 -1
  160. package/dist/llm/credential-pool.js +5 -2
  161. package/dist/llm/credential-pool.js.map +1 -1
  162. package/dist/llm/credentials-store.d.ts +10 -14
  163. package/dist/llm/credentials-store.d.ts.map +1 -1
  164. package/dist/llm/credentials-store.js.map +1 -1
  165. package/dist/llm/cross-provider-selector.d.ts +249 -0
  166. package/dist/llm/cross-provider-selector.d.ts.map +1 -0
  167. package/dist/llm/cross-provider-selector.js +572 -0
  168. package/dist/llm/cross-provider-selector.js.map +1 -0
  169. package/dist/llm/entity-ops.d.ts +299 -0
  170. package/dist/llm/entity-ops.d.ts.map +1 -0
  171. package/dist/llm/entity-ops.js +441 -0
  172. package/dist/llm/entity-ops.js.map +1 -0
  173. package/dist/llm/index.d.ts +17 -0
  174. package/dist/llm/index.d.ts.map +1 -1
  175. package/dist/llm/index.js +9 -0
  176. package/dist/llm/index.js.map +1 -1
  177. package/dist/llm/llm-queue-admit.d.ts +118 -0
  178. package/dist/llm/llm-queue-admit.d.ts.map +1 -0
  179. package/dist/llm/llm-queue-admit.js +275 -0
  180. package/dist/llm/llm-queue-admit.js.map +1 -0
  181. package/dist/llm/local-model-fit.d.ts +260 -0
  182. package/dist/llm/local-model-fit.d.ts.map +1 -0
  183. package/dist/llm/local-model-fit.js +563 -0
  184. package/dist/llm/local-model-fit.js.map +1 -0
  185. package/dist/llm/oauth/device-code.d.ts.map +1 -1
  186. package/dist/llm/oauth/device-code.js +2 -8
  187. package/dist/llm/oauth/device-code.js.map +1 -1
  188. package/dist/llm/oauth/google-pkce.d.ts.map +1 -1
  189. package/dist/llm/oauth/google-pkce.js +2 -18
  190. package/dist/llm/oauth/google-pkce.js.map +1 -1
  191. package/dist/llm/oauth/pkce.d.ts +70 -0
  192. package/dist/llm/oauth/pkce.d.ts.map +1 -1
  193. package/dist/llm/oauth/pkce.js +106 -29
  194. package/dist/llm/oauth/pkce.js.map +1 -1
  195. package/dist/llm/onboarding/front-door.d.ts +146 -0
  196. package/dist/llm/onboarding/front-door.d.ts.map +1 -0
  197. package/dist/llm/onboarding/front-door.js +153 -0
  198. package/dist/llm/onboarding/front-door.js.map +1 -0
  199. package/dist/llm/onboarding/login-engine.d.ts +175 -0
  200. package/dist/llm/onboarding/login-engine.d.ts.map +1 -0
  201. package/dist/llm/onboarding/login-engine.js +286 -0
  202. package/dist/llm/onboarding/login-engine.js.map +1 -0
  203. package/dist/llm/pi/pi-gondolin-env.d.ts +23 -0
  204. package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -1
  205. package/dist/llm/pi/pi-gondolin-env.js +2 -2
  206. package/dist/llm/pi/pi-gondolin-env.js.map +1 -1
  207. package/dist/llm/plugin-facade.js +4612 -1042
  208. package/dist/llm/plugin-facade.js.map +3 -3
  209. package/dist/llm/provider-registry/builtin/anthropic.d.ts.map +1 -1
  210. package/dist/llm/provider-registry/builtin/anthropic.js +23 -10
  211. package/dist/llm/provider-registry/builtin/anthropic.js.map +1 -1
  212. package/dist/llm/provider-registry/builtin/ollama.d.ts +18 -0
  213. package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
  214. package/dist/llm/provider-registry/builtin/ollama.js +20 -2
  215. package/dist/llm/provider-registry/builtin/ollama.js.map +1 -1
  216. package/dist/llm/provider-registry/provider-alias.d.ts +62 -0
  217. package/dist/llm/provider-registry/provider-alias.d.ts.map +1 -0
  218. package/dist/llm/provider-registry/provider-alias.js +85 -0
  219. package/dist/llm/provider-registry/provider-alias.js.map +1 -0
  220. package/dist/llm/provider-registry/provider-defs.d.ts +45 -0
  221. package/dist/llm/provider-registry/provider-defs.d.ts.map +1 -0
  222. package/dist/llm/provider-registry/provider-defs.js +145 -0
  223. package/dist/llm/provider-registry/provider-defs.js.map +1 -0
  224. package/dist/llm/provider-registry/provider-seed.d.ts +78 -0
  225. package/dist/llm/provider-registry/provider-seed.d.ts.map +1 -0
  226. package/dist/llm/provider-registry/provider-seed.js +113 -0
  227. package/dist/llm/provider-registry/provider-seed.js.map +1 -0
  228. package/dist/llm/role-executor.d.ts.map +1 -1
  229. package/dist/llm/role-executor.js +36 -0
  230. package/dist/llm/role-executor.js.map +1 -1
  231. package/dist/llm/role-resolver.d.ts.map +1 -1
  232. package/dist/llm/role-resolver.js +52 -10
  233. package/dist/llm/role-resolver.js.map +1 -1
  234. package/dist/llm/system-resolver.d.ts.map +1 -1
  235. package/dist/llm/system-resolver.js +73 -22
  236. package/dist/llm/system-resolver.js.map +1 -1
  237. package/dist/llm/transports/codex-responses.d.ts +111 -88
  238. package/dist/llm/transports/codex-responses.d.ts.map +1 -1
  239. package/dist/llm/transports/codex-responses.js +456 -258
  240. package/dist/llm/transports/codex-responses.js.map +1 -1
  241. package/dist/memory/learnings.d.ts +4 -0
  242. package/dist/memory/learnings.d.ts.map +1 -1
  243. package/dist/memory/patterns.d.ts +4 -0
  244. package/dist/memory/patterns.d.ts.map +1 -1
  245. package/dist/metrics/index.d.ts +2 -0
  246. package/dist/metrics/index.d.ts.map +1 -1
  247. package/dist/metrics/index.js +1 -0
  248. package/dist/metrics/index.js.map +1 -1
  249. package/dist/orchestration/spawn.d.ts +89 -0
  250. package/dist/orchestration/spawn.d.ts.map +1 -1
  251. package/dist/orchestration/spawn.js +68 -0
  252. package/dist/orchestration/spawn.js.map +1 -1
  253. package/dist/playbooks/cantbook-profile.d.ts +96 -0
  254. package/dist/playbooks/cantbook-profile.d.ts.map +1 -0
  255. package/dist/playbooks/cantbook-profile.js +97 -0
  256. package/dist/playbooks/cantbook-profile.js.map +1 -0
  257. package/dist/playbooks/guarded-deterministic-runner.d.ts +153 -0
  258. package/dist/playbooks/guarded-deterministic-runner.d.ts.map +1 -0
  259. package/dist/playbooks/guarded-deterministic-runner.js +155 -0
  260. package/dist/playbooks/guarded-deterministic-runner.js.map +1 -0
  261. package/dist/playbooks/index.d.ts +2 -0
  262. package/dist/playbooks/index.d.ts.map +1 -1
  263. package/dist/playbooks/index.js +10 -0
  264. package/dist/playbooks/index.js.map +1 -1
  265. package/dist/playbooks/pi-runner-wiring.d.ts +75 -0
  266. package/dist/playbooks/pi-runner-wiring.d.ts.map +1 -0
  267. package/dist/playbooks/pi-runner-wiring.js +82 -0
  268. package/dist/playbooks/pi-runner-wiring.js.map +1 -0
  269. package/dist/release/index.d.ts +2 -2
  270. package/dist/release/index.d.ts.map +1 -1
  271. package/dist/release/index.js +1 -1
  272. package/dist/release/index.js.map +1 -1
  273. package/dist/release/reconcile.d.ts +97 -0
  274. package/dist/release/reconcile.d.ts.map +1 -1
  275. package/dist/release/reconcile.js +412 -5
  276. package/dist/release/reconcile.js.map +1 -1
  277. package/dist/resources/backend.d.ts +155 -0
  278. package/dist/resources/backend.d.ts.map +1 -0
  279. package/dist/resources/backend.js +23 -0
  280. package/dist/resources/backend.js.map +1 -0
  281. package/dist/resources/linux-backend.d.ts +167 -0
  282. package/dist/resources/linux-backend.d.ts.map +1 -0
  283. package/dist/resources/linux-backend.js +259 -0
  284. package/dist/resources/linux-backend.js.map +1 -0
  285. package/dist/resources/monitor.d.ts +230 -0
  286. package/dist/resources/monitor.d.ts.map +1 -0
  287. package/dist/resources/monitor.js +255 -0
  288. package/dist/resources/monitor.js.map +1 -0
  289. package/dist/resources/spawn-wrapper.d.ts +265 -0
  290. package/dist/resources/spawn-wrapper.d.ts.map +1 -0
  291. package/dist/resources/spawn-wrapper.js +304 -0
  292. package/dist/resources/spawn-wrapper.js.map +1 -0
  293. package/dist/runtime/openapi/generate-openapi.d.ts +211 -0
  294. package/dist/runtime/openapi/generate-openapi.d.ts.map +1 -0
  295. package/dist/runtime/openapi/generate-openapi.js +300 -0
  296. package/dist/runtime/openapi/generate-openapi.js.map +1 -0
  297. package/dist/runtime/openapi/index.d.ts +16 -0
  298. package/dist/runtime/openapi/index.d.ts.map +1 -0
  299. package/dist/runtime/openapi/index.js +16 -0
  300. package/dist/runtime/openapi/index.js.map +1 -0
  301. package/dist/selfimprove/budget.d.ts +11 -2
  302. package/dist/selfimprove/budget.d.ts.map +1 -1
  303. package/dist/selfimprove/budget.js +11 -2
  304. package/dist/selfimprove/budget.js.map +1 -1
  305. package/dist/selfimprove/fix-gen.d.ts +229 -0
  306. package/dist/selfimprove/fix-gen.d.ts.map +1 -0
  307. package/dist/selfimprove/fix-gen.js +266 -0
  308. package/dist/selfimprove/fix-gen.js.map +1 -0
  309. package/dist/selfimprove/run-loop.d.ts +44 -4
  310. package/dist/selfimprove/run-loop.d.ts.map +1 -1
  311. package/dist/selfimprove/run-loop.js +73 -6
  312. package/dist/selfimprove/run-loop.js.map +1 -1
  313. package/dist/selfimprove/scenarios/dhq-replay-find/golden.json +32 -0
  314. package/dist/selfimprove/scenarios/dhq-replay-find/scenario.json +18 -0
  315. package/dist/sentient/cross-project-hygiene.d.ts +11 -2
  316. package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
  317. package/dist/sentient/cross-project-hygiene.js +73 -10
  318. package/dist/sentient/cross-project-hygiene.js.map +1 -1
  319. package/dist/sentient/daemon.d.ts.map +1 -1
  320. package/dist/sentient/daemon.js +7 -2
  321. package/dist/sentient/daemon.js.map +1 -1
  322. package/dist/sentient/worktree-dispatch.d.ts.map +1 -1
  323. package/dist/sentient/worktree-dispatch.js +8 -1
  324. package/dist/sentient/worktree-dispatch.js.map +1 -1
  325. package/dist/setup/config-json-merge.d.ts.map +1 -1
  326. package/dist/setup/config-json-merge.js +14 -0
  327. package/dist/setup/config-json-merge.js.map +1 -1
  328. package/dist/setup/index.d.ts +23 -11
  329. package/dist/setup/index.d.ts.map +1 -1
  330. package/dist/setup/index.js +25 -12
  331. package/dist/setup/index.js.map +1 -1
  332. package/dist/setup/sections/llm.d.ts +28 -1
  333. package/dist/setup/sections/llm.d.ts.map +1 -1
  334. package/dist/setup/sections/llm.js +27 -6
  335. package/dist/setup/sections/llm.js.map +1 -1
  336. package/dist/setup/sections/models-roles.d.ts +40 -0
  337. package/dist/setup/sections/models-roles.d.ts.map +1 -0
  338. package/dist/setup/sections/models-roles.js +219 -0
  339. package/dist/setup/sections/models-roles.js.map +1 -0
  340. package/dist/setup/wizard.d.ts +19 -1
  341. package/dist/setup/wizard.d.ts.map +1 -1
  342. package/dist/setup/wizard.js.map +1 -1
  343. package/dist/spawn/branch-lock.d.ts.map +1 -1
  344. package/dist/spawn/branch-lock.js +7 -1
  345. package/dist/spawn/branch-lock.js.map +1 -1
  346. package/dist/store/attachment-repair.d.ts +110 -0
  347. package/dist/store/attachment-repair.d.ts.map +1 -0
  348. package/dist/store/attachment-repair.js +326 -0
  349. package/dist/store/attachment-repair.js.map +1 -0
  350. package/dist/store/attachment-store.d.ts.map +1 -1
  351. package/dist/store/attachment-store.js +24 -7
  352. package/dist/store/attachment-store.js.map +1 -1
  353. package/dist/store/schedule-schema.d.ts +195 -0
  354. package/dist/store/schedule-schema.d.ts.map +1 -0
  355. package/dist/store/schedule-schema.js +84 -0
  356. package/dist/store/schedule-schema.js.map +1 -0
  357. package/dist/store/schedule-store.d.ts +144 -0
  358. package/dist/store/schedule-store.d.ts.map +1 -0
  359. package/dist/store/schedule-store.js +162 -0
  360. package/dist/store/schedule-store.js.map +1 -0
  361. package/dist/store/schema/attachments.d.ts +1 -1
  362. package/dist/store/schema/cleo-global/index.d.ts +3 -0
  363. package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
  364. package/dist/store/schema/cleo-global/index.js +5 -0
  365. package/dist/store/schema/cleo-global/index.js.map +1 -1
  366. package/dist/store/schema/cleo-global/models-catalog.d.ts +359 -0
  367. package/dist/store/schema/cleo-global/models-catalog.d.ts.map +1 -0
  368. package/dist/store/schema/cleo-global/models-catalog.js +114 -0
  369. package/dist/store/schema/cleo-global/models-catalog.js.map +1 -0
  370. package/dist/store/schema/cleo-global/providers.d.ts +279 -0
  371. package/dist/store/schema/cleo-global/providers.d.ts.map +1 -0
  372. package/dist/store/schema/cleo-global/providers.js +94 -0
  373. package/dist/store/schema/cleo-global/providers.js.map +1 -0
  374. package/dist/store/schema/cleo-global/services.d.ts +493 -0
  375. package/dist/store/schema/cleo-global/services.d.ts.map +1 -0
  376. package/dist/store/schema/cleo-global/services.js +200 -0
  377. package/dist/store/schema/cleo-global/services.js.map +1 -0
  378. package/dist/store/schema/cleo-project/docs.d.ts +1 -1
  379. package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
  380. package/dist/store/schema/cleo-shared/brain.d.ts +2 -2
  381. package/dist/store/schema/memory-schema.d.ts +182 -2
  382. package/dist/store/schema/memory-schema.d.ts.map +1 -1
  383. package/dist/store/schema/memory-schema.js +111 -2
  384. package/dist/store/schema/memory-schema.js.map +1 -1
  385. package/dist/store/schema/provenance/releases.d.ts +1 -1
  386. package/dist/store/service-connections-accessor.d.ts +313 -0
  387. package/dist/store/service-connections-accessor.d.ts.map +1 -0
  388. package/dist/store/service-connections-accessor.js +464 -0
  389. package/dist/store/service-connections-accessor.js.map +1 -0
  390. package/dist/store/service-host-matcher.d.ts +70 -0
  391. package/dist/store/service-host-matcher.d.ts.map +1 -0
  392. package/dist/store/service-host-matcher.js +127 -0
  393. package/dist/store/service-host-matcher.js.map +1 -0
  394. package/dist/store/service-injection.d.ts +152 -0
  395. package/dist/store/service-injection.d.ts.map +1 -0
  396. package/dist/store/service-injection.js +225 -0
  397. package/dist/store/service-injection.js.map +1 -0
  398. package/dist/store/service-oauth.d.ts +287 -0
  399. package/dist/store/service-oauth.d.ts.map +1 -0
  400. package/dist/store/service-oauth.js +524 -0
  401. package/dist/store/service-oauth.js.map +1 -0
  402. package/dist/store/service-trust-gate.d.ts +164 -0
  403. package/dist/store/service-trust-gate.d.ts.map +1 -0
  404. package/dist/store/service-trust-gate.js +122 -0
  405. package/dist/store/service-trust-gate.js.map +1 -0
  406. package/dist/store/validation-schemas.d.ts +4 -4
  407. package/dist/tasks/agent-lifecycle-lane.d.ts +175 -0
  408. package/dist/tasks/agent-lifecycle-lane.d.ts.map +1 -0
  409. package/dist/tasks/agent-lifecycle-lane.js +176 -0
  410. package/dist/tasks/agent-lifecycle-lane.js.map +1 -0
  411. package/dist/tasks/complete.d.ts +17 -0
  412. package/dist/tasks/complete.d.ts.map +1 -1
  413. package/dist/tasks/complete.js +53 -10
  414. package/dist/tasks/complete.js.map +1 -1
  415. package/dist/tasks/depends-waiver-audit.d.ts +52 -0
  416. package/dist/tasks/depends-waiver-audit.d.ts.map +1 -0
  417. package/dist/tasks/depends-waiver-audit.js +36 -0
  418. package/dist/tasks/depends-waiver-audit.js.map +1 -0
  419. package/dist/tasks/engine-wrap.d.ts +36 -2
  420. package/dist/tasks/engine-wrap.d.ts.map +1 -1
  421. package/dist/tasks/engine-wrap.js +44 -2
  422. package/dist/tasks/engine-wrap.js.map +1 -1
  423. package/dist/tasks/evidence.d.ts +34 -2
  424. package/dist/tasks/evidence.d.ts.map +1 -1
  425. package/dist/tasks/evidence.js +293 -35
  426. package/dist/tasks/evidence.js.map +1 -1
  427. package/dist/tasks/index.d.ts +1 -0
  428. package/dist/tasks/index.d.ts.map +1 -1
  429. package/dist/tasks/index.js +1 -0
  430. package/dist/tasks/index.js.map +1 -1
  431. package/dist/tasks/ops.d.ts +3 -0
  432. package/dist/tasks/ops.d.ts.map +1 -1
  433. package/dist/tasks/task-ops.d.ts +1 -1
  434. package/dist/tasks/task-ops.d.ts.map +1 -1
  435. package/dist/tasks/task-ops.js +3 -1
  436. package/dist/tasks/task-ops.js.map +1 -1
  437. package/dist/tasks/task-reparent.d.ts +90 -0
  438. package/dist/tasks/task-reparent.d.ts.map +1 -1
  439. package/dist/tasks/task-reparent.js +171 -0
  440. package/dist/tasks/task-reparent.js.map +1 -1
  441. package/dist/tools/builtin-agent-tools.d.ts.map +1 -1
  442. package/dist/tools/builtin-agent-tools.js +41 -0
  443. package/dist/tools/builtin-agent-tools.js.map +1 -1
  444. package/dist/tools/exec-code-agent-tool.d.ts +179 -0
  445. package/dist/tools/exec-code-agent-tool.d.ts.map +1 -0
  446. package/dist/tools/exec-code-agent-tool.js +239 -0
  447. package/dist/tools/exec-code-agent-tool.js.map +1 -0
  448. package/dist/tools/index.d.ts +6 -0
  449. package/dist/tools/index.d.ts.map +1 -1
  450. package/dist/tools/index.js +15 -0
  451. package/dist/tools/index.js.map +1 -1
  452. package/dist/tools/mcp-agent-tool.d.ts +189 -0
  453. package/dist/tools/mcp-agent-tool.d.ts.map +1 -0
  454. package/dist/tools/mcp-agent-tool.js +243 -0
  455. package/dist/tools/mcp-agent-tool.js.map +1 -0
  456. package/dist/tools/media-agent-tools.d.ts +105 -0
  457. package/dist/tools/media-agent-tools.d.ts.map +1 -0
  458. package/dist/tools/media-agent-tools.js +255 -0
  459. package/dist/tools/media-agent-tools.js.map +1 -0
  460. package/dist/tools/memory-agent-tools.d.ts +99 -0
  461. package/dist/tools/memory-agent-tools.d.ts.map +1 -0
  462. package/dist/tools/memory-agent-tools.js +190 -0
  463. package/dist/tools/memory-agent-tools.js.map +1 -0
  464. package/dist/tools/schedule-agent-tools.d.ts +151 -0
  465. package/dist/tools/schedule-agent-tools.d.ts.map +1 -0
  466. package/dist/tools/schedule-agent-tools.js +238 -0
  467. package/dist/tools/schedule-agent-tools.js.map +1 -0
  468. package/dist/tools/skill-agent-tool.d.ts +108 -0
  469. package/dist/tools/skill-agent-tool.d.ts.map +1 -0
  470. package/dist/tools/skill-agent-tool.js +135 -0
  471. package/dist/tools/skill-agent-tool.js.map +1 -0
  472. package/dist/validation/engine-ops.d.ts.map +1 -1
  473. package/dist/validation/engine-ops.js +17 -1
  474. package/dist/validation/engine-ops.js.map +1 -1
  475. package/dist/verification/verify-tools.d.ts.map +1 -1
  476. package/dist/verification/verify-tools.js +5 -6
  477. package/dist/verification/verify-tools.js.map +1 -1
  478. package/migrations/drizzle-brain/20260610000001_t10405-bitemporal-network-columns/migration.sql +71 -0
  479. package/migrations/drizzle-cleo-global/20260609000000_t11937-service-vault/migration.sql +93 -0
  480. package/migrations/drizzle-cleo-global/20260609010000_t11733-models-catalog/migration.sql +65 -0
  481. package/migrations/drizzle-cleo-global/20260609020000_t11703-providers/migration.sql +52 -0
  482. package/migrations/drizzle-cleo-global/20260610000000_t11962-schedules/migration.sql +48 -0
  483. package/migrations/drizzle-cleo-project/20260610000000_t11962-schedules/migration.sql +48 -0
  484. package/package.json +33 -13
  485. package/templates/workflows/release-prepare.yml.tmpl +48 -2
@@ -0,0 +1,304 @@
1
+ /**
2
+ * Slice-aware launch-wrapper SSoT (T11993 · Epic T11992).
3
+ *
4
+ * This module is the ONLY constructor of `systemd-run` argv for cleo children.
5
+ * Every consumer that needs to launch a cleo child in a memory-capped cgroup
6
+ * MUST call {@link buildSpawnArgs} or {@link spawnWrapped} here instead of
7
+ * constructing `systemd-run` arguments ad-hoc.
8
+ *
9
+ * ## Design
10
+ *
11
+ * Children are placed inside `cleo.slice` when systemd is available:
12
+ *
13
+ * ```
14
+ * cleo.slice
15
+ * ├── cleo-daemon.service (managed by the daemon service unit)
16
+ * └── cleo-<scopeClass>-<n>.scope (transient scopes for child spawns)
17
+ * ```
18
+ *
19
+ * The slice applies MemoryHigh (primary soft throttle) and MemoryMax (hard
20
+ * safety net) at the slice level, shared across all members. Child scopes
21
+ * inherit these limits and may override them downward.
22
+ *
23
+ * ## Staged P1 budget (IMPORTANT — read before tuning)
24
+ *
25
+ * P1 ships MemoryHigh within 5 % of MemoryMax (80 % / 85 % of a reference
26
+ * host total) so that reclaim stalls under the soft limit NEVER block the
27
+ * SQLite WAL write-transaction held by a slice member. A stalled scope
28
+ * holding a WAL write-txn for > 30 s (busy_timeout) cascades SQLITE_BUSY to
29
+ * every other slice member.
30
+ *
31
+ * **P1 installed values (safe defaults):**
32
+ * - `MemoryHigh = undefined` (disabled — no throttle in P1)
33
+ * - `MemoryMax = 32G` (hard cap, benign cgroup kill)
34
+ *
35
+ * The 60 % / 85 % target shape is documented here and in `DEFAULT_SLICE_CONFIG`
36
+ * as the P2 goal once the stall-escalator (T11994) is in place.
37
+ *
38
+ * **With `MemorySwapMax=0`:** reclaim has only page-cache to chew against
39
+ * `MemoryHigh` on anonymous heaps — admission (P2) becomes the primary
40
+ * control, throttling is not load-bearing in P1.
41
+ *
42
+ * ## oomd-avoid (selective)
43
+ *
44
+ * `ManagedOOMPreference=avoid` is applied ONLY to daemon/db-heavy scope
45
+ * classes (`'daemon'`, `'db'`). Bulk agent/test scopes do NOT get `avoid`
46
+ * because Fedora oomd monitors `user@1000.service` at 80 %/20 s and ranks
47
+ * avoid-marked candidates last — blanket avoid redirects oomd kills onto
48
+ * innocent user apps.
49
+ *
50
+ * ## Fallback
51
+ *
52
+ * On hosts without systemd-run (macOS, CI containers, minimal installs)
53
+ * the wrapper degrades log-once to plain `spawn` in a new process-group
54
+ * with NODE_OPTIONS heap cap inherited from the caller. This is mirrored
55
+ * from the writer-lease `pgid-demotion` pattern.
56
+ *
57
+ * ## Return value — ownership handle (T11998 / T11995)
58
+ *
59
+ * {@link SpawnWrappedResult} carries `{ unitName?, pid, mode }` so the
60
+ * suite-containment epic (T11998) and the janitor (T11995) can look up or
61
+ * clean up the transient scope by unit name.
62
+ *
63
+ * @module @cleocode/core/resources/spawn-wrapper
64
+ * @epic T11992
65
+ * @task T11993
66
+ */
67
+ import { spawn, spawnSync } from 'node:child_process';
68
+ import { readFileSync } from 'node:fs';
69
+ // ---------------------------------------------------------------------------
70
+ // Constants
71
+ // ---------------------------------------------------------------------------
72
+ /**
73
+ * The systemd user slice that all cleo child scopes are placed under.
74
+ *
75
+ * The slice unit (`~/.config/systemd/user/cleo.slice`) must be installed
76
+ * by the doctor/install flow before this is effective. Placing an orphan
77
+ * scope under a non-existent slice degrades silently to the default slice —
78
+ * so the slice install is best-effort and the wrapper is always safe to call.
79
+ */
80
+ export const CLEO_SLICE = 'cleo.slice';
81
+ /**
82
+ * Default per-scope memory resource config (P1 staged values).
83
+ *
84
+ * P1: MemoryHigh disabled, MemoryMax=32G.
85
+ * P2 target (after T11994 stall-escalator lands): memoryHigh=0.60, memoryMax=0.85.
86
+ */
87
+ export const DEFAULT_SCOPE_RESOURCES = {
88
+ memoryHigh: 'infinity', // P1: disabled — no throttle (safe until P2 stall-escalator)
89
+ memoryMax: '32G', // P1: hard cap (benign cgroup kill; coredumps suppressed via ulimit -c 0)
90
+ };
91
+ /**
92
+ * Scope classes that receive `ManagedOOMPreference=avoid`.
93
+ *
94
+ * Only write-transaction holders (daemon, db) are marked `avoid` to prevent
95
+ * mid-txn oomd kills. See module-level TSDoc for the Fedora oomd rationale.
96
+ */
97
+ const OOM_AVOID_CLASSES = new Set(['daemon', 'db']);
98
+ // ---------------------------------------------------------------------------
99
+ // Internal helpers
100
+ // ---------------------------------------------------------------------------
101
+ /**
102
+ * Is `systemd-run` available on this host? Probed once and cached.
103
+ * Mirrors the probe in `packages/core/src/check/pr-gate.ts`.
104
+ */
105
+ let _systemdRunAvailable;
106
+ /**
107
+ * Check whether `systemd-run --user` is usable on this host.
108
+ *
109
+ * Returns `false` on non-Linux, when systemd-run is not on PATH, or when
110
+ * DBUS_SESSION_BUS_ADDRESS / XDG_RUNTIME_DIR are absent (CI containers,
111
+ * ssh sessions without a user bus).
112
+ */
113
+ export function hasSystemdRun() {
114
+ if (_systemdRunAvailable !== undefined)
115
+ return _systemdRunAvailable;
116
+ if (process.platform !== 'linux') {
117
+ _systemdRunAvailable = false;
118
+ return false;
119
+ }
120
+ // Quick binary availability check — does NOT test user-bus connectivity.
121
+ const probe = spawnSync('systemd-run', ['--version'], { stdio: 'ignore' });
122
+ _systemdRunAvailable = probe.status === 0;
123
+ return _systemdRunAvailable;
124
+ }
125
+ /**
126
+ * Force-override the cached systemd-run availability.
127
+ *
128
+ * Exposed for unit tests that need to exercise the pgid-fallback or
129
+ * systemd paths without the real binary.
130
+ *
131
+ * @param available - `true` = force systemd path, `false` = force pgid path.
132
+ */
133
+ export function _forceSystemdRunAvailable(available) {
134
+ _systemdRunAvailable = available;
135
+ }
136
+ /** Whether we have already emitted the pgid-demotion log line for this process. */
137
+ let _pgidDemotionLogged = false;
138
+ /**
139
+ * Resolve a memory value to a systemd property string.
140
+ *
141
+ * Numbers in (0, 1] are treated as fractions of a `totalBytes` reference.
142
+ * Strings are passed through verbatim. `undefined` / `'infinity'` resolves
143
+ * to `'infinity'` (disabled).
144
+ */
145
+ function resolveMemoryValue(val, totalBytes) {
146
+ if (val === undefined || val === 'infinity')
147
+ return 'infinity';
148
+ if (typeof val === 'string')
149
+ return val;
150
+ // Fraction: multiply by total and round to nearest mebibyte boundary.
151
+ const bytes = Math.round(val * totalBytes);
152
+ const mib = Math.round(bytes / (1024 * 1024));
153
+ return `${mib}M`;
154
+ }
155
+ /**
156
+ * Read /proc/meminfo MemTotal in bytes. Returns 32 GiB as a safe fallback
157
+ * when unavailable (non-Linux, CI, permission denied).
158
+ */
159
+ function readMemTotalBytes() {
160
+ if (process.platform !== 'linux')
161
+ return 32 * 1024 * 1024 * 1024;
162
+ try {
163
+ const raw = readFileSync('/proc/meminfo', 'utf8');
164
+ const m = raw.match(/^MemTotal:\s+(\d+)\s+kB/m);
165
+ if (m?.[1])
166
+ return parseInt(m[1], 10) * 1024;
167
+ }
168
+ catch {
169
+ // ignore
170
+ }
171
+ return 32 * 1024 * 1024 * 1024;
172
+ }
173
+ /** Counter for generating unique scope discriminators within a process. */
174
+ let _scopeCounter = 0;
175
+ // ---------------------------------------------------------------------------
176
+ // Core API
177
+ // ---------------------------------------------------------------------------
178
+ /**
179
+ * Build the argv for a cleo child spawn.
180
+ *
181
+ * When `systemd-run` is available, the result is:
182
+ *
183
+ * ```
184
+ * ['systemd-run', '--user', '--scope', '--slice=cleo.slice',
185
+ * '--unit=cleo-<class>-<id>.scope',
186
+ * '-p', 'MemoryHigh=<high>', '-p', 'MemoryMax=<max>',
187
+ * '-p', 'MemorySwapMax=0',
188
+ * ['-p', 'ManagedOOMPreference=avoid'], // daemon/db only
189
+ * '--',
190
+ * // when noCoreFile=true (default):
191
+ * 'sh', '-c', 'ulimit -c 0; exec "$@"', 'sh', command, ...args
192
+ * // when noCoreFile=false:
193
+ * command, ...args]
194
+ * ```
195
+ *
196
+ * `LimitCORE` is intentionally NOT used — it is a service-unit EXEC property
197
+ * and is rejected by `systemd-run --scope` with "Unknown assignment: LimitCORE".
198
+ * Core-dump suppression is applied at the process level instead via
199
+ * `ulimit -c 0` (POSIX sh, works in both systemd and pgid-fallback paths).
200
+ *
201
+ * When `systemd-run` is NOT available, the result is `[command, ...args]`
202
+ * (or the sh/ulimit-wrapped form when noCoreFile=true) and `mode` is `'pgid'`.
203
+ *
204
+ * @param command - The executable to run (e.g. `'node'`).
205
+ * @param args - Arguments to pass to the executable.
206
+ * @param opts - Wrapper options (scope class, resources, etc.).
207
+ * @returns Build result with final command, args, mode, and unit name.
208
+ */
209
+ export function buildSpawnArgs(command, args, opts = {}) {
210
+ const { scopeClass = 'agent', scopeId, resources = {}, noCoreFile = true } = opts;
211
+ if (!hasSystemdRun()) {
212
+ if (!_pgidDemotionLogged) {
213
+ _pgidDemotionLogged = true;
214
+ process.stderr.write('[cleo:spawn-wrapper] systemd-run unavailable — falling back to plain pgid spawn ' +
215
+ '(no cgroup containment; set NODE_OPTIONS=--max-old-space-size=<mb> externally)\n');
216
+ }
217
+ if (noCoreFile) {
218
+ // Apply ulimit -c 0 in the pgid path as well so core suppression is
219
+ // consistent regardless of whether systemd is available.
220
+ return {
221
+ command: 'sh',
222
+ args: ['-c', 'ulimit -c 0; exec "$@"', 'sh', command, ...args],
223
+ mode: 'pgid',
224
+ };
225
+ }
226
+ return { command, args: [...args], mode: 'pgid' };
227
+ }
228
+ const totalBytes = readMemTotalBytes();
229
+ const merged = {
230
+ memoryHigh: resources.memoryHigh ?? DEFAULT_SCOPE_RESOURCES.memoryHigh,
231
+ memoryMax: resources.memoryMax ?? DEFAULT_SCOPE_RESOURCES.memoryMax,
232
+ };
233
+ const highStr = resolveMemoryValue(merged.memoryHigh, totalBytes);
234
+ const maxStr = resolveMemoryValue(merged.memoryMax, totalBytes);
235
+ // Build a deterministic, unique unit name.
236
+ const counter = ++_scopeCounter;
237
+ const discriminator = scopeId ? scopeId.replace(/[^a-zA-Z0-9-]/g, '-') : String(counter);
238
+ const unitName = `cleo-${scopeClass}-${discriminator}.scope`;
239
+ const wrapArgs = [
240
+ '--user',
241
+ '--scope',
242
+ `--slice=${CLEO_SLICE}`,
243
+ `--unit=${unitName}`,
244
+ '-p',
245
+ `MemoryMax=${maxStr}`,
246
+ '-p',
247
+ 'MemorySwapMax=0',
248
+ ];
249
+ // MemoryHigh: only emit the directive when it is a real limit (not infinity).
250
+ if (highStr !== 'infinity') {
251
+ wrapArgs.push('-p', `MemoryHigh=${highStr}`);
252
+ }
253
+ // Selective oomd-avoid: only for write-txn holder classes.
254
+ if (OOM_AVOID_CLASSES.has(scopeClass)) {
255
+ wrapArgs.push('-p', 'ManagedOOMPreference=avoid');
256
+ }
257
+ if (noCoreFile) {
258
+ // LimitCORE is a service-unit EXEC property — it is NOT valid on scope
259
+ // units and causes systemd-run to reject the argv with:
260
+ // "Unknown assignment: LimitCORE=0"
261
+ // Suppress coredumps at the process level instead: wrap the inner command
262
+ // in a tiny sh fragment that sets `ulimit -c 0` then execs the real binary.
263
+ // This is equivalent to LimitCORE for our purposes and works on both
264
+ // Fedora and Ubuntu CI runners.
265
+ wrapArgs.push('--', 'sh', '-c', 'ulimit -c 0; exec "$@"', 'sh', command, ...args);
266
+ }
267
+ else {
268
+ wrapArgs.push('--', command, ...args);
269
+ }
270
+ return {
271
+ command: 'systemd-run',
272
+ args: wrapArgs,
273
+ mode: 'systemd',
274
+ unitName,
275
+ };
276
+ }
277
+ /**
278
+ * Spawn a command wrapped in a cleo.slice transient cgroup scope.
279
+ *
280
+ * This is a thin convenience wrapper over {@link buildSpawnArgs} +
281
+ * Node.js `child_process.spawn`. All cleo child spawns SHOULD route through
282
+ * this function instead of constructing `systemd-run` arguments inline.
283
+ *
284
+ * The returned {@link SpawnWrappedResult} carries `unitName` — the systemd
285
+ * transient scope unit name — as the ownership/cleanup handle for
286
+ * T11998 (suite containment) and T11995 (janitor).
287
+ *
288
+ * @param command - The executable to run.
289
+ * @param args - Arguments to pass to the executable.
290
+ * @param spawnOpts - Options forwarded to `child_process.spawn`.
291
+ * @param wrapOpts - Wrapper options (scope class, resources, etc.).
292
+ * @returns Wrapped spawn result.
293
+ */
294
+ export function spawnWrapped(command, args, spawnOpts = {}, wrapOpts = {}) {
295
+ const built = buildSpawnArgs(command, args, wrapOpts);
296
+ const child = spawn(built.command, built.args, spawnOpts);
297
+ return {
298
+ child,
299
+ pid: child.pid,
300
+ mode: built.mode,
301
+ unitName: built.unitName,
302
+ };
303
+ }
304
+ //# sourceMappingURL=spawn-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-wrapper.js","sourceRoot":"","sources":["../../src/resources/spawn-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * generateOpenApi — projects the CLEO operations registry into an OpenAPI 3.1
3
+ * document (DHQ-033/057 SDK-projection · T11918 · AC2 · M5/E-API-STANDARD-FOUNDATION
4
+ * T11769).
5
+ *
6
+ * ## Why this exists
7
+ *
8
+ * The `/v1` REST gateway routes `POST /v1/<domain>/<operation>` for every entry
9
+ * in the 413-row {@link OPERATIONS} registry. Downstream task T11920 generates a
10
+ * typed SDK client; its projection source is an OpenAPI 3.1 spec. Hand-authoring
11
+ * 413 path objects (and keeping them in lock-step with the registry) is exactly
12
+ * the drift trap the schema-first SSoT (`inputSchema`/`outputSchema`) was built
13
+ * to close. This builder DERIVES the whole spec from the single source of truth:
14
+ *
15
+ * - paths ← {@link OPERATIONS} (`POST /v1/<domain>/<operation>`)
16
+ * - requestBody ← {@link getInputContract}(op).schema, else a JSON Schema
17
+ * synthesised from `def.params` (richest available input shape)
18
+ * - 200 response ← {@link getOutputContract}(op).dataSchema (hand-authored
19
+ * {@link OUTPUT_CONTRACTS}, else {@link deriveOutputContract})
20
+ *
21
+ * Because `OperationInputContract.schema` and `OperationOutputContract.dataSchema`
22
+ * are ALREADY JSON Schema (draft-07) documents, and OpenAPI 3.1's Schema Object
23
+ * IS a superset of JSON Schema (it adopts the JSON Schema 2020-12 vocabulary),
24
+ * the schemas embed directly — no zod→OpenAPI conversion pass, no `zod-to-openapi`
25
+ * dependency. Zod (v4) is the authoring substrate for the contracts upstream; by
26
+ * the time a schema reaches this builder it is already plain JSON Schema, so this
27
+ * module stays a zero-runtime-dependency projection over the registry.
28
+ *
29
+ * ## Boundary
30
+ *
31
+ * Lives in `core/src/runtime` (NOT `contracts`): it reads {@link getOutputContract}
32
+ * / {@link getInputContract}, which are core-resident bodied resolvers, and it is
33
+ * itself a bodied runtime helper (the contracts-purity Gate 10 forbids net-new
34
+ * bodied functions in `contracts`). Import-time side-effect-free: it builds
35
+ * nothing at module load, only when {@link generateOpenApi} is called.
36
+ *
37
+ * @packageDocumentation
38
+ * @module @cleocode/core/runtime/openapi/generate-openapi
39
+ *
40
+ * @see {@link https://spec.openapis.org/oas/v3.1.0 | OpenAPI 3.1.0 Specification}
41
+ * @see OperationOutputContract — the OUTPUT-side JSON Schema SSoT this projects
42
+ * @see OperationInputContract — the INPUT-side JSON Schema SSoT this projects
43
+ *
44
+ * @epic T11769
45
+ * @task T11918 — AC2: zod→OpenAPI 3.1 bridge + `cleo gateway openapi`
46
+ */
47
+ import { type JsonSchema } from '@cleocode/contracts';
48
+ /**
49
+ * OpenAPI 3.1 `info` object — API identity surfaced to SDK generators and docs
50
+ * tooling.
51
+ *
52
+ * @see {@link https://spec.openapis.org/oas/v3.1.0#info-object}
53
+ */
54
+ export interface OpenApiInfo {
55
+ /** Human-readable API title. */
56
+ title: string;
57
+ /**
58
+ * Semantic version of the API surface (NOT the package version). The `/v1`
59
+ * REST gateway is version `1.x`; defaults to `'1.0.0'`.
60
+ */
61
+ version: string;
62
+ /** Optional one-line summary (OpenAPI 3.1 adds `summary` to the info object). */
63
+ summary?: string;
64
+ /** Optional CommonMark description. */
65
+ description?: string;
66
+ }
67
+ /**
68
+ * OpenAPI 3.1 Media Type object — pairs a content type with its schema.
69
+ *
70
+ * @see {@link https://spec.openapis.org/oas/v3.1.0#media-type-object}
71
+ */
72
+ export interface OpenApiMediaType {
73
+ /** The JSON Schema (2020-12 vocabulary) describing the payload. */
74
+ schema: JsonSchema;
75
+ }
76
+ /**
77
+ * OpenAPI 3.1 Request Body object.
78
+ *
79
+ * @see {@link https://spec.openapis.org/oas/v3.1.0#request-body-object}
80
+ */
81
+ export interface OpenApiRequestBody {
82
+ /** Content keyed by media type (always `application/json` here). */
83
+ content: Record<string, OpenApiMediaType>;
84
+ /** Whether the request body is required (true iff the op has required params). */
85
+ required: boolean;
86
+ /** Optional human description. */
87
+ description?: string;
88
+ }
89
+ /**
90
+ * OpenAPI 3.1 Response object.
91
+ *
92
+ * @see {@link https://spec.openapis.org/oas/v3.1.0#response-object}
93
+ */
94
+ export interface OpenApiResponse {
95
+ /** Required CommonMark description of the response. */
96
+ description: string;
97
+ /** Optional content keyed by media type. */
98
+ content?: Record<string, OpenApiMediaType>;
99
+ }
100
+ /**
101
+ * OpenAPI 3.1 Operation object — one HTTP operation on a path.
102
+ *
103
+ * @see {@link https://spec.openapis.org/oas/v3.1.0#operation-object}
104
+ */
105
+ export interface OpenApiOperation {
106
+ /** Unique, machine-friendly id (`<gateway>.<domain>.<operation>`) for SDK method naming. */
107
+ operationId: string;
108
+ /** Short summary (the registry `description`). */
109
+ summary: string;
110
+ /** Grouping tags — the canonical domain. */
111
+ tags: string[];
112
+ /** Request body, omitted when the op declares no input params. */
113
+ requestBody?: OpenApiRequestBody;
114
+ /** Responses keyed by HTTP status code (always at least `'200'`). */
115
+ responses: Record<string, OpenApiResponse>;
116
+ /**
117
+ * Vendor extension carrying the CQRS gateway (`'query'` | `'mutate'`) this
118
+ * operation routes through. The clean `/v1/<domain>/<operation>` path omits the
119
+ * gateway for readability, so the SDK reads this extension to pick the right
120
+ * dispatch gateway. OpenAPI tooling ignores `x-`-prefixed members it does not
121
+ * recognise, so emitting it keeps the document valid.
122
+ */
123
+ 'x-cleo-gateway': 'query' | 'mutate';
124
+ }
125
+ /**
126
+ * OpenAPI 3.1 Path Item object — the set of HTTP operations on one path. The
127
+ * CLEO `/v1` gateway only routes `POST`, so only `post` is ever populated.
128
+ *
129
+ * @see {@link https://spec.openapis.org/oas/v3.1.0#path-item-object}
130
+ */
131
+ export interface OpenApiPathItem {
132
+ /** The single `POST` operation served at this path. */
133
+ post: OpenApiOperation;
134
+ }
135
+ /**
136
+ * A minimal, structurally-typed OpenAPI 3.1 document — exactly the members
137
+ * {@link generateOpenApi} emits. The `openapi` field is pinned to the `3.1.x`
138
+ * literal family so consumers can statically assert the version.
139
+ *
140
+ * @see {@link https://spec.openapis.org/oas/v3.1.0#openapi-object}
141
+ */
142
+ export interface OpenApiDocument {
143
+ /** OpenAPI version string — always `'3.1.0'`. */
144
+ openapi: '3.1.0';
145
+ /** API identity. */
146
+ info: OpenApiInfo;
147
+ /**
148
+ * The JSON Schema dialect every embedded Schema Object uses, declared once at
149
+ * the document root per OpenAPI 3.1. The contracts ship draft-07 schemas,
150
+ * which validate under the 2020-12 dialect OpenAPI 3.1 mandates.
151
+ */
152
+ jsonSchemaDialect: string;
153
+ /**
154
+ * Path → path-item map, keyed by `<pathPrefix>/<domain>/<operation>` (with a
155
+ * trailing `/<gateway>` segment for the cross-gateway collision pairs).
156
+ */
157
+ paths: Record<string, OpenApiPathItem>;
158
+ }
159
+ /**
160
+ * Options for {@link generateOpenApi}.
161
+ */
162
+ export interface GenerateOpenApiOptions {
163
+ /**
164
+ * Semantic version stamped into `info.version`. This is the API-surface
165
+ * version (the `/v1` gateway), NOT the npm package version.
166
+ *
167
+ * @default '1.0.0'
168
+ */
169
+ version?: string;
170
+ /**
171
+ * Path prefix prepended to every operation route. The SDK-facing REST surface
172
+ * is versioned under `/v1` (T11769); each op maps to
173
+ * `POST <pathPrefix>/<domain>/<operation>`.
174
+ *
175
+ * @default '/v1'
176
+ */
177
+ pathPrefix?: string;
178
+ }
179
+ /**
180
+ * Project the {@link OPERATIONS} registry into a complete OpenAPI 3.1 document.
181
+ *
182
+ * Walks every registry entry, mapping each to a `POST` path whose `requestBody`
183
+ * is the resolved input schema and whose `200` response is the resolved output
184
+ * schema (`deriveOutputContract` coverage), wrapped in the LAFS envelope.
185
+ *
186
+ * Routing: the clean form is `POST <pathPrefix>/<domain>/<operation>`. Because
187
+ * the registry has cross-gateway collisions on `<domain>/<operation>` (the same
188
+ * pair under both `query` and `mutate`), a colliding entry is disambiguated by
189
+ * appending its gateway segment (`<pathPrefix>/<domain>/<operation>/<gateway>`).
190
+ * Each operation also carries an `x-cleo-gateway` extension so the SDK knows
191
+ * which CQRS gateway to dispatch through regardless of the path form.
192
+ *
193
+ * The number of paths in the returned document equals `OPERATIONS.length` (AC5):
194
+ * every registry entry gets a unique route (and a unique operationId).
195
+ *
196
+ * @param options - {@link GenerateOpenApiOptions} (version, path prefix).
197
+ * @returns A structurally-valid OpenAPI 3.1 {@link OpenApiDocument}.
198
+ *
199
+ * @example
200
+ * ```ts
201
+ * const doc = generateOpenApi();
202
+ * doc.openapi; // '3.1.0'
203
+ * Object.keys(doc.paths).length; // === OPERATIONS.length
204
+ * doc.paths['/v1/tasks/show'].post.operationId; // 'query.tasks.show'
205
+ * doc.paths['/v1/tasks/show'].post['x-cleo-gateway'];// 'query'
206
+ * ```
207
+ *
208
+ * @task T11918 — AC1/AC2/AC5
209
+ */
210
+ export declare function generateOpenApi(options?: GenerateOpenApiOptions): OpenApiDocument;
211
+ //# sourceMappingURL=generate-openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-openapi.d.ts","sourceRoot":"","sources":["../../../src/runtime/openapi/generate-openapi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAgD,MAAM,qBAAqB,CAAC;AAQpG;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,kEAAkE;IAClE,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C;;;;;;OAMG;IACH,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC;CACtC;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACxC;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA+LD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAkDrF"}