@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,164 @@
1
+ /**
2
+ * Service-vault trust gate — **policy-before-decrypt** per-agent access control.
3
+ *
4
+ * EP-UNIVERSAL-SERVICE-VAULT (epic T11765 · saga SG-VAULT-CORE T10409 · M2 W1a ·
5
+ * task T11937 · AC4). Ports onecli `connect.rs` selective-mode: an agent may use a
6
+ * service connection ONLY when (a) a row exists in `agent_service_grants` linking
7
+ * the agent to the connection, AND (b) the grant's `session_policy` evaluates to
8
+ * an allow. This module evaluates that decision from already-loaded grant data —
9
+ * it performs ZERO crypto. The store
10
+ * ({@link import('./service-connections-accessor.js')}) calls `decryptGlobal`
11
+ * ONLY after this gate returns `allowed: true`, so a denied/blocked agent NEVER
12
+ * triggers a decrypt (the policy-before-decrypt invariant, proven by unit test).
13
+ *
14
+ * ## Why the gate is decrypt-free
15
+ *
16
+ * The gate takes the grant rows as INPUT and returns a pure decision. It cannot
17
+ * decrypt even if it wanted to — it imports no crypto. The decryption chokepoint
18
+ * lives one layer up (the accessor), guarded by this decision. That separation is
19
+ * exactly what makes "a denied agent never decrypts" structurally true and
20
+ * spy-assertable: the spy is placed on `decryptGlobal`, and a deny path returns
21
+ * before the accessor reaches the decrypt call.
22
+ *
23
+ * ## Policy shape ({@link SessionPolicy})
24
+ *
25
+ * Mirrors onecli's `PolicyAction` (block / rate-limit / manual-approval) collapsed
26
+ * to a per-grant JSON:
27
+ *
28
+ * - `mode: 'allow' | 'block'` — `block` is a hard deny (no decrypt).
29
+ * - `rateLimit?` — advisory rate cap; the gate surfaces it but does not itself
30
+ * count requests (the caller enforces). Presence alone does not deny.
31
+ * - `manualApproval?: true` — the connection requires an out-of-band human
32
+ * approval that has not been granted for this session → deny (no decrypt)
33
+ * until the caller supplies `approved: true` in the evaluation context.
34
+ *
35
+ * A bare grant (`{"mode":"allow"}`, the column default) allows.
36
+ *
37
+ * @module store/service-trust-gate
38
+ * @task T11937
39
+ * @epic T11765
40
+ * @saga T10409
41
+ * @see ./service-connections-accessor.ts — the accessor that decrypts ONLY on allow
42
+ * @see ../../../onecli — `apps/gateway/src/connect.rs` selective-mode (the ported model)
43
+ */
44
+ /**
45
+ * Advisory rate-limit clause on a {@link SessionPolicy}.
46
+ *
47
+ * The gate reports it on an allow decision; it does NOT itself maintain a counter
48
+ * (the consumer enforces the cap). Presence never denies access — it shapes how
49
+ * the caller throttles an already-permitted credential use.
50
+ *
51
+ * @task T11937
52
+ */
53
+ export interface SessionRateLimit {
54
+ /** Maximum requests permitted within `window`. */
55
+ readonly maxRequests: number;
56
+ /** Rolling window the cap applies over. */
57
+ readonly window: 'minute' | 'hour' | 'day';
58
+ }
59
+ /**
60
+ * Per-grant session policy evaluated by the trust gate BEFORE any decrypt.
61
+ *
62
+ * Serialized as the `agent_service_grants.session_policy` JSON column. The column
63
+ * default `{"mode":"allow"}` makes a bare grant permissive.
64
+ *
65
+ * @task T11937
66
+ */
67
+ export interface SessionPolicy {
68
+ /** `block` is a hard deny (no decrypt); `allow` permits (subject to other clauses). */
69
+ readonly mode: 'allow' | 'block';
70
+ /** Advisory rate cap surfaced on an allow decision (never itself denies). */
71
+ readonly rateLimit?: SessionRateLimit;
72
+ /**
73
+ * When `true`, the connection requires an out-of-band human approval. The gate
74
+ * DENIES unless the evaluation context carries `approved: true` for this
75
+ * session.
76
+ */
77
+ readonly manualApproval?: boolean;
78
+ }
79
+ /**
80
+ * Minimal grant projection the gate evaluates — exactly the
81
+ * `agent_service_grants` columns the decision needs, no token material.
82
+ *
83
+ * @task T11937
84
+ */
85
+ export interface ServiceGrant {
86
+ /** The granted agent. */
87
+ readonly agentId: string;
88
+ /** The connection this grant authorizes. */
89
+ readonly serviceConnectionId: number;
90
+ /** The parsed {@link SessionPolicy} (already JSON-decoded from the column). */
91
+ readonly sessionPolicy: SessionPolicy;
92
+ }
93
+ /**
94
+ * Context for a single access evaluation.
95
+ *
96
+ * @task T11937
97
+ */
98
+ export interface TrustEvalContext {
99
+ /** The agent requesting access. */
100
+ readonly agentId: string;
101
+ /** The connection the agent wants to use. */
102
+ readonly serviceConnectionId: number;
103
+ /**
104
+ * Whether an out-of-band manual approval has been granted for this session.
105
+ * Required to pass a `manualApproval: true` policy. Defaults to `false`.
106
+ */
107
+ readonly approved?: boolean;
108
+ }
109
+ /**
110
+ * Reason an access evaluation was DENIED — stable codes for diagnostics/audit.
111
+ *
112
+ * @task T11937
113
+ */
114
+ export type TrustDenyReason = 'no-grant' | 'policy-block' | 'manual-approval-required';
115
+ /**
116
+ * The pure decision returned by {@link evaluateServiceAccess}.
117
+ *
118
+ * On `allowed: false` the accessor MUST NOT decrypt. On `allowed: true` the
119
+ * accessor may decrypt and (optionally) honor `rateLimit`.
120
+ *
121
+ * @task T11937
122
+ */
123
+ export type TrustDecision = {
124
+ readonly allowed: true;
125
+ readonly rateLimit?: SessionRateLimit;
126
+ } | {
127
+ readonly allowed: false;
128
+ readonly reason: TrustDenyReason;
129
+ };
130
+ /**
131
+ * Parse a raw `session_policy` JSON string into a {@link SessionPolicy}, failing
132
+ * CLOSED (to `block`) on any malformed input.
133
+ *
134
+ * SECURITY: a corrupt/unparseable policy must NEVER silently widen access — it
135
+ * resolves to `{ mode: 'block' }` so the gate denies and no decrypt occurs.
136
+ *
137
+ * @param raw - The `agent_service_grants.session_policy` column value.
138
+ * @returns A well-formed {@link SessionPolicy}; `block` on parse failure.
139
+ * @task T11937
140
+ */
141
+ export declare function parseSessionPolicy(raw: string): SessionPolicy;
142
+ /**
143
+ * Evaluate whether an agent may access a service connection — the **policy-
144
+ * before-decrypt** chokepoint.
145
+ *
146
+ * Pure: takes the agent's grants (already loaded) + the evaluation context and
147
+ * returns a {@link TrustDecision} WITHOUT touching crypto. The store calls
148
+ * `decryptGlobal` ONLY when the returned `allowed` is `true`. Deny order:
149
+ *
150
+ * 1. no matching grant → `no-grant` (denied).
151
+ * 2. grant policy `mode: 'block'` → `policy-block` (denied).
152
+ * 3. policy `manualApproval` set but context not `approved` →
153
+ * `manual-approval-required` (denied).
154
+ * 4. otherwise → allowed (carrying any advisory `rateLimit`).
155
+ *
156
+ * @param grants - The agent's grant rows (the accessor loads these from
157
+ * `agent_service_grants`). Only grants for `ctx.agentId` /
158
+ * `ctx.serviceConnectionId` are considered.
159
+ * @param ctx - The evaluation context (agent, connection, approval flag).
160
+ * @returns The access decision. NEVER decrypts.
161
+ * @task T11937
162
+ */
163
+ export declare function evaluateServiceAccess(grants: readonly ServiceGrant[], ctx: TrustEvalContext): TrustDecision;
164
+ //# sourceMappingURL=service-trust-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-trust-gate.d.ts","sourceRoot":"","sources":["../../src/store/service-trust-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;CAC5C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,cAAc,GAAG,0BAA0B,CAAC;AAEvF;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAElE;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAkC7D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,GAAG,EAAE,gBAAgB,GACpB,aAAa,CAiBf"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Service-vault trust gate — **policy-before-decrypt** per-agent access control.
3
+ *
4
+ * EP-UNIVERSAL-SERVICE-VAULT (epic T11765 · saga SG-VAULT-CORE T10409 · M2 W1a ·
5
+ * task T11937 · AC4). Ports onecli `connect.rs` selective-mode: an agent may use a
6
+ * service connection ONLY when (a) a row exists in `agent_service_grants` linking
7
+ * the agent to the connection, AND (b) the grant's `session_policy` evaluates to
8
+ * an allow. This module evaluates that decision from already-loaded grant data —
9
+ * it performs ZERO crypto. The store
10
+ * ({@link import('./service-connections-accessor.js')}) calls `decryptGlobal`
11
+ * ONLY after this gate returns `allowed: true`, so a denied/blocked agent NEVER
12
+ * triggers a decrypt (the policy-before-decrypt invariant, proven by unit test).
13
+ *
14
+ * ## Why the gate is decrypt-free
15
+ *
16
+ * The gate takes the grant rows as INPUT and returns a pure decision. It cannot
17
+ * decrypt even if it wanted to — it imports no crypto. The decryption chokepoint
18
+ * lives one layer up (the accessor), guarded by this decision. That separation is
19
+ * exactly what makes "a denied agent never decrypts" structurally true and
20
+ * spy-assertable: the spy is placed on `decryptGlobal`, and a deny path returns
21
+ * before the accessor reaches the decrypt call.
22
+ *
23
+ * ## Policy shape ({@link SessionPolicy})
24
+ *
25
+ * Mirrors onecli's `PolicyAction` (block / rate-limit / manual-approval) collapsed
26
+ * to a per-grant JSON:
27
+ *
28
+ * - `mode: 'allow' | 'block'` — `block` is a hard deny (no decrypt).
29
+ * - `rateLimit?` — advisory rate cap; the gate surfaces it but does not itself
30
+ * count requests (the caller enforces). Presence alone does not deny.
31
+ * - `manualApproval?: true` — the connection requires an out-of-band human
32
+ * approval that has not been granted for this session → deny (no decrypt)
33
+ * until the caller supplies `approved: true` in the evaluation context.
34
+ *
35
+ * A bare grant (`{"mode":"allow"}`, the column default) allows.
36
+ *
37
+ * @module store/service-trust-gate
38
+ * @task T11937
39
+ * @epic T11765
40
+ * @saga T10409
41
+ * @see ./service-connections-accessor.ts — the accessor that decrypts ONLY on allow
42
+ * @see ../../../onecli — `apps/gateway/src/connect.rs` selective-mode (the ported model)
43
+ */
44
+ /**
45
+ * Parse a raw `session_policy` JSON string into a {@link SessionPolicy}, failing
46
+ * CLOSED (to `block`) on any malformed input.
47
+ *
48
+ * SECURITY: a corrupt/unparseable policy must NEVER silently widen access — it
49
+ * resolves to `{ mode: 'block' }` so the gate denies and no decrypt occurs.
50
+ *
51
+ * @param raw - The `agent_service_grants.session_policy` column value.
52
+ * @returns A well-formed {@link SessionPolicy}; `block` on parse failure.
53
+ * @task T11937
54
+ */
55
+ export function parseSessionPolicy(raw) {
56
+ let parsed;
57
+ try {
58
+ parsed = JSON.parse(raw);
59
+ }
60
+ catch {
61
+ return { mode: 'block' };
62
+ }
63
+ if (typeof parsed !== 'object' || parsed === null) {
64
+ return { mode: 'block' };
65
+ }
66
+ const obj = parsed;
67
+ const mode = obj['mode'] === 'block' ? 'block' : obj['mode'] === 'allow' ? 'allow' : 'block';
68
+ const policy = { mode };
69
+ if (obj['manualApproval'] === true) {
70
+ policy.manualApproval = true;
71
+ }
72
+ const rl = obj['rateLimit'];
73
+ if (typeof rl === 'object' && rl !== null) {
74
+ const rlObj = rl;
75
+ const maxRequests = rlObj['maxRequests'];
76
+ const window = rlObj['window'];
77
+ if (typeof maxRequests === 'number' &&
78
+ maxRequests > 0 &&
79
+ (window === 'minute' || window === 'hour' || window === 'day')) {
80
+ policy.rateLimit = { maxRequests, window };
81
+ }
82
+ }
83
+ return policy;
84
+ }
85
+ /**
86
+ * Evaluate whether an agent may access a service connection — the **policy-
87
+ * before-decrypt** chokepoint.
88
+ *
89
+ * Pure: takes the agent's grants (already loaded) + the evaluation context and
90
+ * returns a {@link TrustDecision} WITHOUT touching crypto. The store calls
91
+ * `decryptGlobal` ONLY when the returned `allowed` is `true`. Deny order:
92
+ *
93
+ * 1. no matching grant → `no-grant` (denied).
94
+ * 2. grant policy `mode: 'block'` → `policy-block` (denied).
95
+ * 3. policy `manualApproval` set but context not `approved` →
96
+ * `manual-approval-required` (denied).
97
+ * 4. otherwise → allowed (carrying any advisory `rateLimit`).
98
+ *
99
+ * @param grants - The agent's grant rows (the accessor loads these from
100
+ * `agent_service_grants`). Only grants for `ctx.agentId` /
101
+ * `ctx.serviceConnectionId` are considered.
102
+ * @param ctx - The evaluation context (agent, connection, approval flag).
103
+ * @returns The access decision. NEVER decrypts.
104
+ * @task T11937
105
+ */
106
+ export function evaluateServiceAccess(grants, ctx) {
107
+ const grant = grants.find((g) => g.agentId === ctx.agentId && g.serviceConnectionId === ctx.serviceConnectionId);
108
+ if (grant === undefined) {
109
+ return { allowed: false, reason: 'no-grant' };
110
+ }
111
+ const policy = grant.sessionPolicy;
112
+ if (policy.mode === 'block') {
113
+ return { allowed: false, reason: 'policy-block' };
114
+ }
115
+ if (policy.manualApproval === true && ctx.approved !== true) {
116
+ return { allowed: false, reason: 'manual-approval-required' };
117
+ }
118
+ return policy.rateLimit !== undefined
119
+ ? { allowed: true, rateLimit: policy.rateLimit }
120
+ : { allowed: true };
121
+ }
122
+ //# sourceMappingURL=service-trust-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-trust-gate.js","sourceRoot":"","sources":["../../src/store/service-trust-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AA0FH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7F,MAAM,MAAM,GAIR,EAAE,IAAI,EAAE,CAAC;IACb,IAAI,GAAG,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/B,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,EAA6B,CAAC;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,IACE,OAAO,WAAW,KAAK,QAAQ;YAC/B,WAAW,GAAG,CAAC;YACf,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC,EAC9D,CAAC;YACD,MAAM,CAAC,SAAS,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAA+B,EAC/B,GAAqB;IAErB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,mBAAmB,KAAK,GAAG,CAAC,mBAAmB,CACtF,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;IACnC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;QAChD,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC"}
@@ -227,10 +227,10 @@ export declare const brainLinkTypeSchema: z.ZodEnum<{
227
227
  }>;
228
228
  /** Zod enum schema for brain memory entity types. */
229
229
  export declare const brainMemoryTypeSchema: z.ZodEnum<{
230
+ observation: "observation";
230
231
  decision: "decision";
231
232
  pattern: "pattern";
232
233
  learning: "learning";
233
- observation: "observation";
234
234
  }>;
235
235
  /** Zod enum schema for brain sticky note statuses. */
236
236
  export declare const brainStickyStatusSchema: z.ZodEnum<{
@@ -257,10 +257,10 @@ export declare const brainNodeTypeSchema: z.ZodEnum<{
257
257
  symbol: "symbol";
258
258
  file: "file";
259
259
  task: "task";
260
+ observation: "observation";
260
261
  decision: "decision";
261
262
  pattern: "pattern";
262
263
  learning: "learning";
263
- observation: "observation";
264
264
  epic: "epic";
265
265
  session: "session";
266
266
  sticky: "sticky";
@@ -7969,7 +7969,7 @@ export declare const insertReleaseSchema: import("drizzle-orm/zod").BuildSchema<
7969
7969
  name: string;
7970
7970
  tableName: "tasks_releases";
7971
7971
  dataType: "string enum";
7972
- data: "latest" | "beta" | "dev" | "hotfix";
7972
+ data: "beta" | "latest" | "dev" | "hotfix";
7973
7973
  driverParam: string;
7974
7974
  notNull: true;
7975
7975
  hasDefault: true;
@@ -8470,7 +8470,7 @@ export declare const selectReleaseSchema: import("drizzle-orm/zod").BuildSchema<
8470
8470
  name: string;
8471
8471
  tableName: "tasks_releases";
8472
8472
  dataType: "string enum";
8473
- data: "latest" | "beta" | "dev" | "hotfix";
8473
+ data: "beta" | "latest" | "dev" | "hotfix";
8474
8474
  driverParam: string;
8475
8475
  notNull: true;
8476
8476
  hasDefault: true;
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Pure agent-lifecycle LANE RESOLVER — the SINGLE source of truth for the
3
+ * seven dispatcher lanes shared by the Studio Kanban board and the `cleo tui`
4
+ * terminal cockpit.
5
+ *
6
+ * ## Why this lives in `@cleocode/core` (not Studio)
7
+ *
8
+ * The lane model was originally authored for the Studio read-only Kanban
9
+ * dispatcher (T11926) under
10
+ * `packages/studio/src/lib/components/tasks/agent-lifecycle-lane.ts`. The
11
+ * `cleo tui` Kanban home view (T11934) needs the EXACT same semantics — same
12
+ * seven lanes, same precedence ladder — so the model was lifted here, into the
13
+ * SDK package both surfaces already depend on, and the Studio copy is now a
14
+ * thin re-export of this module (relate T11934 ↔ T11926). One lane model, two
15
+ * renderers, zero divergence.
16
+ *
17
+ * It is intentionally a pure, framework-free `.ts` module: NO Svelte import, NO
18
+ * gateway/DB access, only a `TaskStatus` type from `@cleocode/contracts`. That
19
+ * keeps it trivially unit-testable under vitest's `environment: 'node'` and
20
+ * importable from any surface (CLI, TUI, Studio loader/route).
21
+ *
22
+ * The resolver answers *"where is this task in the agent dispatch lifecycle?"* —
23
+ * collapsing several orthogonal signals (status, verification gates,
24
+ * completion-readiness, blocking dependencies, HITL pauses, and any
25
+ * active-worker / orchestrate-ready hint) onto ONE of seven dispatcher lanes:
26
+ *
27
+ * ```
28
+ * Backlog → Ready → Running → Review → Blocked → Done → Cancelled
29
+ * ```
30
+ *
31
+ * @task T11934 — extracted to core as the shared lane SSoT
32
+ * @task T11926 — original Studio resolver (now re-exports this module)
33
+ * @epic T11916
34
+ */
35
+ import type { TaskStatus } from '@cleocode/contracts';
36
+ /**
37
+ * The seven dispatcher lanes, in canonical left-to-right board order.
38
+ *
39
+ * - `backlog` — pending work not yet eligible to start (deps unmet OR no
40
+ * active dispatch signal).
41
+ * - `ready` — dependencies satisfied and the task is eligible to be
42
+ * spawned, but no worker has claimed it yet.
43
+ * - `running` — an agent/worker is actively executing (spawned / claimed).
44
+ * - `review` — implementation done, awaiting verification gates / a PR
45
+ * merge before completion.
46
+ * - `blocked` — held by an explicit `blockedBy` reason, an unmet dependency
47
+ * it cannot start without, or a HITL approval pause.
48
+ * - `done` — terminal success.
49
+ * - `cancelled` — terminal abandonment.
50
+ */
51
+ export type AgentLifecycleLane = 'backlog' | 'ready' | 'running' | 'review' | 'blocked' | 'done' | 'cancelled';
52
+ /**
53
+ * Canonical ordered list of dispatcher lanes — drives column order on the
54
+ * board. Tasks in unknown / non-surfaced statuses (e.g. `archived`,
55
+ * `proposed`) are filtered before resolution and never appear.
56
+ */
57
+ export declare const AGENT_LIFECYCLE_LANES: readonly AgentLifecycleLane[];
58
+ /** Human-readable, board-facing labels for each lane. */
59
+ export declare const AGENT_LIFECYCLE_LANE_LABELS: Readonly<Record<AgentLifecycleLane, string>>;
60
+ /** One-line lane descriptions used for board empty-states + tooltips. */
61
+ export declare const AGENT_LIFECYCLE_LANE_HINTS: Readonly<Record<AgentLifecycleLane, string>>;
62
+ /**
63
+ * Minimal verification-gate snapshot the resolver consults to decide the
64
+ * {@link AgentLifecycleLane | review} lane.
65
+ *
66
+ * Structurally compatible with `TaskViewGatesStatus` from
67
+ * `@cleocode/contracts` so callers can pass the `/api/tasks` `views[i].
68
+ * gatesStatus` (Studio) or the gateway SDK's `view.gatesStatus` (TUI) straight
69
+ * through.
70
+ */
71
+ export interface LaneGatesSnapshot {
72
+ /** Whether the `implemented` gate has passed. */
73
+ implemented: boolean;
74
+ /** Whether the `testsPassed` gate has passed. */
75
+ testsPassed: boolean;
76
+ /** Whether the `qaPassed` gate has passed. */
77
+ qaPassed: boolean;
78
+ }
79
+ /**
80
+ * Normalised, framework-free signal bundle for one task.
81
+ *
82
+ * Every caller projects a `Task` + its canonical `TaskView` (and the raw
83
+ * `depends` / `blockedBy` fields) onto this shape so the resolver never has to
84
+ * know about either contract directly — keeping it a pure, trivially testable
85
+ * function.
86
+ */
87
+ export interface AgentLifecycleSignal {
88
+ /** Canonical execution status (`tasks.status`). */
89
+ status: TaskStatus;
90
+ /**
91
+ * Free-text blocker reason from `tasks.blockedBy`. Non-empty ⇒ the task is
92
+ * explicitly blocked by an operator/agent note (e.g. "waiting for API key",
93
+ * "awaiting HITL approval").
94
+ */
95
+ blockedBy?: string | null;
96
+ /**
97
+ * IDs of tasks this task depends on (`tasks.depends`). Combined with
98
+ * {@link AgentLifecycleSignal.unmetDependsCount} to decide Ready-vs-Backlog
99
+ * and dependency blocking.
100
+ */
101
+ depends?: readonly string[] | null;
102
+ /**
103
+ * Count of {@link AgentLifecycleSignal.depends} whose status is NOT `done`.
104
+ * `0` means every dependency is satisfied. When unknown (loader could not
105
+ * resolve), pass `undefined` — the resolver then treats a non-empty
106
+ * `depends` list as "not yet eligible" (conservative: keeps it in Backlog
107
+ * rather than falsely promoting to Ready).
108
+ */
109
+ unmetDependsCount?: number;
110
+ /**
111
+ * Verification gate snapshot. When all three gates are green and the task
112
+ * has not yet reached a terminal status, the task is parked in `review`
113
+ * awaiting completion.
114
+ */
115
+ gates?: LaneGatesSnapshot | null;
116
+ /**
117
+ * Canonical `readyToComplete` flag from `TaskView` — true when required
118
+ * gates are green AND no unresolved blocking deps AND status is non-terminal.
119
+ * A strong `review` signal.
120
+ */
121
+ readyToComplete?: boolean;
122
+ /**
123
+ * Whether a PR is open/awaiting for this task (review signal). The loader
124
+ * derives this from orchestration metadata when available; defaults to
125
+ * `false`.
126
+ */
127
+ prAwaiting?: boolean;
128
+ /**
129
+ * Whether the task is paused on a HITL (human-in-the-loop) approval gate.
130
+ * A `blocked` signal that outranks everything except terminal status.
131
+ */
132
+ hitlPending?: boolean;
133
+ /**
134
+ * Whether an agent/worker is actively spawned or has claimed this task.
135
+ * The loader derives this from the active-session / orchestrate signal in
136
+ * the existing data layer; defaults to `false`.
137
+ */
138
+ workerActive?: boolean;
139
+ /**
140
+ * Canonical `nextAction` hint from `TaskView`. `'spawn-worker'` is treated
141
+ * as an orchestrate-ready signal; `'blocked-on-deps'` reinforces blocking.
142
+ * Optional — the resolver never requires it.
143
+ */
144
+ nextAction?: string;
145
+ }
146
+ /**
147
+ * Resolve a single task's signal bundle onto exactly ONE
148
+ * {@link AgentLifecycleLane}.
149
+ *
150
+ * ## Precedence ladder (highest wins)
151
+ *
152
+ * 1. **`cancelled`** — terminal. `status === 'cancelled'`.
153
+ * 2. **`done`** — terminal. `status === 'done'`.
154
+ * 3. **`blocked`** — `status === 'blocked'` OR a non-empty `blockedBy` reason
155
+ * OR a pending HITL gate OR a known-unmet dependency. (Blocked outranks
156
+ * Running/Review/Ready because a blocked task cannot progress regardless of
157
+ * other signals.)
158
+ * 4. **`review`** — non-terminal, not blocked, and verified: all gates green
159
+ * OR `readyToComplete` OR a PR is awaiting. (A task in review may also be
160
+ * `active`, but review outranks running — it is past execution.)
161
+ * 5. **`running`** — a worker is actively executing: `workerActive` OR
162
+ * `status === 'active'` OR `nextAction === 'spawn-worker'`-already-spawned.
163
+ * 6. **`ready`** — `status === 'pending'`, dependencies satisfied, and an
164
+ * orchestrate-ready hint (`nextAction === 'spawn-worker'`).
165
+ * 7. **`backlog`** — everything else (pending, not yet eligible / unwaved).
166
+ *
167
+ * The ladder is documented as `cancelled > done > blocked > review > running
168
+ * > ready > backlog`. Terminal lanes short-circuit first so a `done` task
169
+ * with stale gate/worker flags can never leak into Running or Review.
170
+ *
171
+ * @param signal - Normalised signal bundle (see {@link AgentLifecycleSignal}).
172
+ * @returns The single lane this task belongs in.
173
+ */
174
+ export declare function resolveAgentLifecycleLane(signal: AgentLifecycleSignal): AgentLifecycleLane;
175
+ //# sourceMappingURL=agent-lifecycle-lane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-lifecycle-lane.d.ts","sourceRoot":"","sources":["../../src/tasks/agent-lifecycle-lane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,WAAW,CAAC;AAEhB;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAQrD,CAAC;AAEX,yDAAyD;AACzD,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAQ3E,CAAC;AAEX,yEAAyE;AACzE,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAQ1E,CAAC;AAMX;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,WAAW,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,WAAW,EAAE,OAAO,CAAC;IACrB,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,MAAM,EAAE,UAAU,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiDD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,CA0C1F"}