@capybara-hq/kernel 0.1.0-rc.0 → 0.1.0-rc.2

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 (626) hide show
  1. package/bootstrap.json +10 -6
  2. package/dist/admin/admin.controller.d.ts +17 -17
  3. package/dist/admin/admin.controller.js +43 -26
  4. package/dist/admin/admin.module.d.ts +3 -0
  5. package/dist/admin/admin.module.js +22 -0
  6. package/dist/admin/extensions.controller.d.ts +14 -14
  7. package/dist/admin/extensions.controller.js +30 -17
  8. package/dist/admin/setup-lock.d.ts +16 -0
  9. package/dist/admin/setup-lock.js +47 -0
  10. package/dist/admin/setup.controller.d.ts +8 -8
  11. package/dist/admin/setup.controller.js +27 -25
  12. package/dist/admin/setup.service.d.ts +19 -27
  13. package/dist/admin/setup.service.js +61 -61
  14. package/dist/agents/agent-lookup.d.ts +53 -0
  15. package/dist/agents/agent-lookup.js +179 -0
  16. package/dist/agents/agents.controller.d.ts +1 -1
  17. package/dist/agents/agents.controller.js +14 -8
  18. package/dist/agents/agents.module.d.ts +7 -0
  19. package/dist/agents/agents.module.js +41 -0
  20. package/dist/agents/agents.service.d.ts +39 -58
  21. package/dist/agents/agents.service.js +261 -329
  22. package/dist/agents/definition.d.ts +8 -0
  23. package/dist/agents/definition.js +8 -0
  24. package/dist/agents/models.controller.d.ts +1 -1
  25. package/dist/agents/models.controller.js +2 -2
  26. package/dist/agents/templates.controller.d.ts +1 -1
  27. package/dist/agents/templates.controller.js +2 -2
  28. package/dist/agents/templates.d.ts +6 -8
  29. package/dist/agents/templates.js +20 -4
  30. package/dist/app.d.ts +93 -0
  31. package/dist/app.js +150 -0
  32. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  33. package/dist/catalog/admin-catalog.controller.js +27 -13
  34. package/dist/catalog/catalog-content.d.ts +185 -0
  35. package/dist/catalog/catalog-content.js +323 -0
  36. package/dist/catalog/catalog-items.d.ts +186 -0
  37. package/dist/catalog/catalog-items.js +410 -0
  38. package/dist/catalog/catalog.module.d.ts +14 -0
  39. package/dist/catalog/catalog.module.js +71 -0
  40. package/dist/catalog/catalog.service.d.ts +34 -188
  41. package/dist/catalog/catalog.service.js +155 -489
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +30 -13
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +2 -2
  70. package/dist/channels/channels.module.d.ts +40 -0
  71. package/dist/channels/channels.module.js +128 -0
  72. package/dist/channels/connections.controller.d.ts +1 -1
  73. package/dist/channels/connections.controller.js +11 -6
  74. package/dist/channels/connections.service.d.ts +43 -21
  75. package/dist/channels/connections.service.js +236 -131
  76. package/dist/channels/inbound.d.ts +34 -38
  77. package/dist/channels/inbound.js +107 -41
  78. package/dist/channels/job-ids.d.ts +10 -0
  79. package/dist/channels/job-ids.js +10 -0
  80. package/dist/channels/jobs.d.ts +85 -0
  81. package/dist/channels/jobs.js +157 -0
  82. package/dist/channels/outbound.d.ts +60 -82
  83. package/dist/channels/outbound.js +165 -193
  84. package/dist/channels/supervisor.d.ts +88 -46
  85. package/dist/channels/supervisor.js +230 -132
  86. package/dist/channels/threads.d.ts +29 -8
  87. package/dist/channels/threads.js +71 -13
  88. package/dist/channels/webhook.d.ts +20 -14
  89. package/dist/channels/webhook.js +51 -20
  90. package/dist/config/load.d.ts +3 -2
  91. package/dist/config/load.js +3 -2
  92. package/dist/config/nacos-source.js +11 -2
  93. package/dist/config/schema.d.ts +16 -1
  94. package/dist/config/schema.js +54 -7
  95. package/dist/conversations/access.d.ts +29 -0
  96. package/dist/conversations/access.js +86 -0
  97. package/dist/conversations/artifacts.d.ts +10 -10
  98. package/dist/conversations/artifacts.js +35 -9
  99. package/dist/conversations/attachments.controller.d.ts +1 -1
  100. package/dist/conversations/attachments.controller.js +8 -6
  101. package/dist/conversations/attachments.module.d.ts +7 -0
  102. package/dist/conversations/attachments.module.js +25 -0
  103. package/dist/conversations/attachments.service.d.ts +30 -22
  104. package/dist/conversations/attachments.service.js +119 -46
  105. package/dist/conversations/conversations.controller.d.ts +8 -7
  106. package/dist/conversations/conversations.controller.js +59 -29
  107. package/dist/conversations/conversations.module.d.ts +8 -0
  108. package/dist/conversations/conversations.module.js +69 -0
  109. package/dist/conversations/conversations.service.d.ts +40 -38
  110. package/dist/conversations/conversations.service.js +130 -140
  111. package/dist/conversations/event-log.d.ts +28 -18
  112. package/dist/conversations/event-log.js +74 -27
  113. package/dist/conversations/files.d.ts +10 -10
  114. package/dist/conversations/files.js +37 -11
  115. package/dist/conversations/idem-keys.d.ts +5 -0
  116. package/dist/conversations/idem-keys.js +5 -0
  117. package/dist/conversations/job-ids.d.ts +6 -0
  118. package/dist/conversations/job-ids.js +6 -0
  119. package/dist/conversations/outputs-read.d.ts +11 -11
  120. package/dist/conversations/outputs-read.js +31 -7
  121. package/dist/conversations/queue.d.ts +48 -56
  122. package/dist/conversations/queue.js +13 -289
  123. package/dist/conversations/queue.service.d.ts +60 -0
  124. package/dist/conversations/queue.service.js +343 -0
  125. package/dist/conversations/sandbox-status.d.ts +13 -10
  126. package/dist/conversations/sandbox-status.js +36 -8
  127. package/dist/conversations/titles.d.ts +71 -24
  128. package/dist/conversations/titles.js +159 -62
  129. package/dist/ctx/bus.js +9 -3
  130. package/dist/ctx/create-ctx.d.ts +6 -0
  131. package/dist/ctx/create-ctx.js +7 -9
  132. package/dist/ctx/lock.d.ts +7 -3
  133. package/dist/ctx/lock.js +9 -20
  134. package/dist/ctx/queue.js +3 -2
  135. package/dist/ctx/secrets.d.ts +10 -2
  136. package/dist/ctx/secrets.js +7 -3
  137. package/dist/db/kernel-schema.d.ts +2 -2
  138. package/dist/db/pool.d.ts +5 -0
  139. package/dist/db/pool.js +1 -0
  140. package/dist/errors.d.ts +2 -0
  141. package/dist/errors.js +2 -0
  142. package/dist/evals/budget.d.ts +42 -21
  143. package/dist/evals/budget.js +114 -62
  144. package/dist/evals/evals.module.d.ts +31 -0
  145. package/dist/evals/evals.module.js +114 -0
  146. package/dist/evals/jobs.d.ts +20 -0
  147. package/dist/evals/jobs.js +45 -0
  148. package/dist/evals/run-replay.d.ts +56 -8
  149. package/dist/evals/run-replay.js +140 -80
  150. package/dist/evals/runs.controller.d.ts +1 -1
  151. package/dist/evals/runs.controller.js +17 -8
  152. package/dist/evals/runs.service.d.ts +23 -45
  153. package/dist/evals/runs.service.js +245 -234
  154. package/dist/evals/sets.controller.d.ts +1 -1
  155. package/dist/evals/sets.controller.js +17 -8
  156. package/dist/evals/sets.service.d.ts +22 -6
  157. package/dist/evals/sets.service.js +248 -194
  158. package/dist/evals/snapshot.d.ts +2 -2
  159. package/dist/evals/step-replay.d.ts +2 -2
  160. package/dist/evals/step-replay.js +1 -1
  161. package/dist/evals/trajectory.controller.d.ts +1 -1
  162. package/dist/evals/trajectory.controller.js +11 -7
  163. package/dist/evals/trajectory.service.d.ts +5 -4
  164. package/dist/evals/trajectory.service.js +30 -7
  165. package/dist/evals/worker.d.ts +44 -27
  166. package/dist/evals/worker.js +220 -120
  167. package/dist/extensions/admin-ops.d.ts +61 -33
  168. package/dist/extensions/admin-ops.js +248 -154
  169. package/dist/extensions/admin-view.d.ts +38 -27
  170. package/dist/extensions/admin-view.js +126 -55
  171. package/dist/extensions/approvals.d.ts +12 -8
  172. package/dist/extensions/approvals.js +73 -46
  173. package/dist/extensions/blobs.d.ts +27 -10
  174. package/dist/extensions/blobs.js +111 -45
  175. package/dist/extensions/bootstrap.d.ts +96 -42
  176. package/dist/extensions/bootstrap.js +303 -155
  177. package/dist/extensions/cli.d.ts +20 -10
  178. package/dist/extensions/cli.js +41 -96
  179. package/dist/extensions/config-issues.d.ts +7 -0
  180. package/dist/extensions/config-issues.js +31 -0
  181. package/dist/extensions/deployment-config-store.d.ts +49 -0
  182. package/dist/extensions/deployment-config-store.js +133 -0
  183. package/dist/extensions/deployment-config.d.ts +58 -67
  184. package/dist/extensions/deployment-config.js +202 -230
  185. package/dist/extensions/enabled.d.ts +5 -5
  186. package/dist/extensions/extensions.module.d.ts +8 -0
  187. package/dist/extensions/extensions.module.js +77 -0
  188. package/dist/extensions/hooks.d.ts +3 -2
  189. package/dist/extensions/hooks.js +1 -1
  190. package/dist/extensions/host.d.ts +72 -68
  191. package/dist/extensions/host.js +191 -152
  192. package/dist/extensions/installs.d.ts +49 -16
  193. package/dist/extensions/installs.js +128 -32
  194. package/dist/extensions/job-ids.d.ts +6 -0
  195. package/dist/extensions/job-ids.js +6 -0
  196. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  197. package/dist/extensions/lifecycle-topics.js +18 -0
  198. package/dist/extensions/lifecycle.d.ts +35 -47
  199. package/dist/extensions/lifecycle.js +103 -39
  200. package/dist/extensions/locks.d.ts +33 -0
  201. package/dist/extensions/locks.js +86 -0
  202. package/dist/extensions/migrate-lock.d.ts +3 -4
  203. package/dist/extensions/org-config.controller.d.ts +1 -1
  204. package/dist/extensions/org-config.controller.js +8 -5
  205. package/dist/extensions/org-config.d.ts +48 -46
  206. package/dist/extensions/org-config.js +284 -226
  207. package/dist/extensions/registry.d.ts +50 -2
  208. package/dist/extensions/registry.js +89 -4
  209. package/dist/extensions/sources.d.ts +12 -8
  210. package/dist/extensions/sources.js +34 -13
  211. package/dist/files/files.module.d.ts +3 -0
  212. package/dist/files/files.module.js +22 -0
  213. package/dist/files/previewers.controller.d.ts +7 -2
  214. package/dist/files/previewers.controller.js +17 -9
  215. package/dist/files/previewers.d.ts +13 -18
  216. package/dist/files/previewers.js +83 -36
  217. package/dist/http/adapter.d.ts +3 -0
  218. package/dist/http/adapter.js +25 -0
  219. package/dist/http/api.module.d.ts +3 -110
  220. package/dist/http/api.module.js +47 -355
  221. package/dist/http/app.d.ts +11 -15
  222. package/dist/http/app.js +52 -47
  223. package/dist/http/error-filter.module.d.ts +5 -0
  224. package/dist/http/error-filter.module.js +18 -0
  225. package/dist/http/error.filter.js +2 -2
  226. package/dist/identity/accounts.d.ts +82 -29
  227. package/dist/identity/accounts.js +294 -175
  228. package/dist/identity/api-tokens.d.ts +11 -7
  229. package/dist/identity/api-tokens.js +71 -44
  230. package/dist/identity/audit.d.ts +7 -4
  231. package/dist/identity/audit.js +5 -1
  232. package/dist/identity/auth.controller.d.ts +11 -10
  233. package/dist/identity/auth.controller.js +31 -25
  234. package/dist/identity/auth.guard.d.ts +3 -3
  235. package/dist/identity/auth.guard.js +6 -4
  236. package/dist/identity/binding.d.ts +9 -11
  237. package/dist/identity/binding.js +41 -13
  238. package/dist/identity/enterprise-admin.d.ts +18 -12
  239. package/dist/identity/enterprise-admin.js +67 -13
  240. package/dist/identity/external-identity-lock.d.ts +17 -0
  241. package/dist/identity/external-identity-lock.js +39 -0
  242. package/dist/identity/external.d.ts +19 -15
  243. package/dist/identity/external.js +163 -125
  244. package/dist/identity/identity.module.d.ts +6 -0
  245. package/dist/identity/identity.module.js +56 -0
  246. package/dist/identity/me.controller.d.ts +16 -15
  247. package/dist/identity/me.controller.js +37 -31
  248. package/dist/identity/sessions.d.ts +12 -10
  249. package/dist/identity/sessions.js +74 -42
  250. package/dist/identity/settings.d.ts +20 -14
  251. package/dist/identity/settings.js +85 -57
  252. package/dist/identity/sso.controller.d.ts +7 -7
  253. package/dist/identity/sso.controller.js +13 -9
  254. package/dist/identity/sso.d.ts +9 -12
  255. package/dist/identity/sso.js +54 -24
  256. package/dist/inbox/inbox.module.d.ts +3 -0
  257. package/dist/inbox/inbox.module.js +22 -0
  258. package/dist/inbox/inbox.service.d.ts +7 -9
  259. package/dist/inbox/inbox.service.js +32 -11
  260. package/dist/index.d.ts +19 -12
  261. package/dist/index.js +13 -8
  262. package/dist/infra/cache/cache.module.d.ts +3 -0
  263. package/dist/infra/cache/cache.module.js +16 -0
  264. package/dist/infra/cache/cache.service.d.ts +21 -0
  265. package/dist/infra/cache/cache.service.js +80 -0
  266. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  267. package/dist/infra/cache/cacheable.decorator.js +83 -0
  268. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  269. package/dist/infra/cli/kernel-cli.module.js +165 -0
  270. package/dist/infra/close-within.d.ts +15 -0
  271. package/dist/infra/close-within.js +36 -0
  272. package/dist/infra/config/config.module.d.ts +13 -0
  273. package/dist/infra/config/config.module.js +39 -0
  274. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  275. package/dist/infra/config/kernel-config.service.js +126 -0
  276. package/dist/infra/database/after-commit.d.ts +6 -0
  277. package/dist/infra/database/after-commit.js +9 -0
  278. package/dist/infra/database/database.module.d.ts +25 -0
  279. package/dist/infra/database/database.module.js +90 -0
  280. package/dist/infra/database/kernel-db.d.ts +22 -0
  281. package/dist/infra/database/kernel-db.js +65 -0
  282. package/dist/infra/database/transaction-host.d.ts +50 -0
  283. package/dist/infra/database/transaction-host.js +125 -0
  284. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  285. package/dist/infra/database/transactional.decorator.js +27 -0
  286. package/dist/infra/database/xact-lock.d.ts +17 -0
  287. package/dist/infra/database/xact-lock.js +43 -0
  288. package/dist/infra/events/kernel-events.d.ts +96 -0
  289. package/dist/infra/events/kernel-events.js +65 -0
  290. package/dist/infra/health/health.controller.d.ts +26 -0
  291. package/dist/infra/health/health.controller.js +104 -0
  292. package/dist/infra/health/health.module.d.ts +9 -0
  293. package/dist/infra/health/health.module.js +24 -0
  294. package/dist/infra/health/health.options.d.ts +10 -0
  295. package/dist/infra/health/health.options.js +15 -0
  296. package/dist/infra/health/shutdown-state.d.ts +6 -0
  297. package/dist/infra/health/shutdown-state.js +2 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  300. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  301. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  302. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  303. package/dist/infra/lifecycle/process-guards.js +86 -0
  304. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  305. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  306. package/dist/infra/lock/key-template.d.ts +13 -0
  307. package/dist/infra/lock/key-template.js +46 -0
  308. package/dist/infra/lock/lock.module.d.ts +3 -0
  309. package/dist/infra/lock/lock.module.js +16 -0
  310. package/dist/infra/lock/lock.service.d.ts +120 -0
  311. package/dist/infra/lock/lock.service.js +343 -0
  312. package/dist/infra/lock/shared-lease.d.ts +44 -0
  313. package/dist/infra/lock/shared-lease.js +121 -0
  314. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  315. package/dist/infra/lock/with-lock.decorator.js +49 -0
  316. package/dist/infra/logging/logging.module.d.ts +16 -0
  317. package/dist/infra/logging/logging.module.js +34 -0
  318. package/dist/infra/queue/configured-processor.d.ts +18 -0
  319. package/dist/infra/queue/configured-processor.js +23 -0
  320. package/dist/infra/queue/job-failure.d.ts +18 -0
  321. package/dist/infra/queue/job-failure.js +26 -0
  322. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  323. package/dist/infra/queue/queue-shutdown.js +81 -0
  324. package/dist/infra/queue/queue.module.d.ts +16 -0
  325. package/dist/infra/queue/queue.module.js +61 -0
  326. package/dist/infra/queue/redis-connection.d.ts +7 -0
  327. package/dist/infra/queue/redis-connection.js +18 -0
  328. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  329. package/dist/infra/queue/retired-schedulers.js +9 -0
  330. package/dist/infra/queue/run-job.d.ts +16 -0
  331. package/dist/infra/queue/run-job.js +19 -0
  332. package/dist/infra/redis/redis.module.d.ts +24 -0
  333. package/dist/infra/redis/redis.module.js +87 -0
  334. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  335. package/dist/infra/schedule/cron-tick.js +25 -0
  336. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  337. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  338. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  339. package/dist/infra/schedule/locked-interval.js +190 -0
  340. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  341. package/dist/infra/schedule/locked-tick.js +137 -0
  342. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  343. package/dist/infra/schedule/schedule.module.js +27 -0
  344. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  345. package/dist/infra/schedule/scheduled-runs.js +163 -0
  346. package/dist/infra/swagger/swagger.d.ts +16 -0
  347. package/dist/infra/swagger/swagger.js +31 -0
  348. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  349. package/dist/infra/throttler/credential-throttler.js +77 -0
  350. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  351. package/dist/infra/throttler/named-throttlers.js +119 -0
  352. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  353. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  354. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  355. package/dist/infra/throttler/throttler.guard.js +68 -0
  356. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  357. package/dist/infra/throttler/throttler.module.js +53 -0
  358. package/dist/infra/tokens.d.ts +15 -0
  359. package/dist/infra/tokens.js +15 -0
  360. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  361. package/dist/infra/validation/create-zod-dto.js +35 -0
  362. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  363. package/dist/infra/validation/parse-with-zod.js +12 -0
  364. package/dist/infra/validation/validation.module.d.ts +3 -0
  365. package/dist/infra/validation/validation.module.js +16 -0
  366. package/dist/infra/validation/zod-params.d.ts +7 -0
  367. package/dist/infra/validation/zod-params.js +42 -0
  368. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  369. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  370. package/dist/kernel.d.ts +9 -241
  371. package/dist/kernel.js +8 -1305
  372. package/dist/kernel.module.d.ts +17 -0
  373. package/dist/kernel.module.js +136 -0
  374. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  375. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  376. package/dist/lifecycle/tokens.d.ts +3 -0
  377. package/dist/lifecycle/tokens.js +3 -0
  378. package/dist/log-config.d.ts +9 -0
  379. package/dist/log-config.js +27 -0
  380. package/dist/log-context.d.ts +34 -0
  381. package/dist/log-context.js +44 -0
  382. package/dist/log-loki.d.ts +34 -0
  383. package/dist/log-loki.js +145 -0
  384. package/dist/log.d.ts +41 -10
  385. package/dist/log.js +91 -17
  386. package/dist/models/models.module.d.ts +3 -0
  387. package/dist/models/models.module.js +24 -0
  388. package/dist/models/prices.d.ts +8 -2
  389. package/dist/models/prices.js +65 -37
  390. package/dist/models/purposes.controller.d.ts +1 -1
  391. package/dist/models/purposes.controller.js +5 -6
  392. package/dist/models/purposes.d.ts +35 -13
  393. package/dist/models/purposes.js +101 -51
  394. package/dist/net/public-address.js +3 -2
  395. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  396. package/dist/orgs/directory-sync.controller.js +2 -2
  397. package/dist/orgs/directory-sync.d.ts +61 -31
  398. package/dist/orgs/directory-sync.js +212 -125
  399. package/dist/orgs/invitations.controller.d.ts +8 -8
  400. package/dist/orgs/invitations.controller.js +27 -26
  401. package/dist/orgs/invitations.service.d.ts +12 -9
  402. package/dist/orgs/invitations.service.js +130 -92
  403. package/dist/orgs/job-ids.d.ts +8 -0
  404. package/dist/orgs/job-ids.js +8 -0
  405. package/dist/orgs/members.service.d.ts +19 -12
  406. package/dist/orgs/members.service.js +161 -117
  407. package/dist/orgs/offboarding.d.ts +54 -57
  408. package/dist/orgs/offboarding.js +161 -71
  409. package/dist/orgs/org-lock.d.ts +28 -19
  410. package/dist/orgs/org-lock.js +81 -35
  411. package/dist/orgs/org.guard.d.ts +1 -1
  412. package/dist/orgs/org.guard.js +2 -2
  413. package/dist/orgs/orgs.controller.d.ts +13 -13
  414. package/dist/orgs/orgs.controller.js +29 -17
  415. package/dist/orgs/orgs.module.d.ts +6 -0
  416. package/dist/orgs/orgs.module.js +68 -0
  417. package/dist/orgs/orgs.service.d.ts +30 -19
  418. package/dist/orgs/orgs.service.js +139 -86
  419. package/dist/orgs/settings.controller.d.ts +1 -1
  420. package/dist/orgs/settings.controller.js +8 -6
  421. package/dist/orgs/settings.service.d.ts +14 -8
  422. package/dist/orgs/settings.service.js +75 -46
  423. package/dist/overrides.d.ts +56 -0
  424. package/dist/overrides.js +30 -0
  425. package/dist/roles/gateway-role.d.ts +43 -0
  426. package/dist/roles/gateway-role.js +98 -0
  427. package/dist/roles/gateway.module.d.ts +8 -0
  428. package/dist/roles/gateway.module.js +28 -0
  429. package/dist/roles/worker-role.d.ts +63 -0
  430. package/dist/roles/worker-role.js +144 -0
  431. package/dist/roles/worker.module.d.ts +14 -0
  432. package/dist/roles/worker.module.js +90 -0
  433. package/dist/runtime/abort.js +19 -2
  434. package/dist/runtime/checkpointer.d.ts +8 -3
  435. package/dist/runtime/checkpointer.js +87 -55
  436. package/dist/runtime/conversation-lock.d.ts +20 -11
  437. package/dist/runtime/conversation-lock.js +62 -72
  438. package/dist/runtime/hook-calls.d.ts +3 -3
  439. package/dist/runtime/hook-calls.js +1 -6
  440. package/dist/runtime/job-ids.d.ts +10 -0
  441. package/dist/runtime/job-ids.js +10 -0
  442. package/dist/runtime/langgraph-loop.js +1 -1
  443. package/dist/runtime/loop.d.ts +7 -0
  444. package/dist/runtime/loop.js +14 -0
  445. package/dist/runtime/maintenance-queue.d.ts +10 -0
  446. package/dist/runtime/maintenance-queue.js +10 -0
  447. package/dist/runtime/maintenance.d.ts +45 -74
  448. package/dist/runtime/maintenance.js +139 -136
  449. package/dist/runtime/model-call.d.ts +7 -4
  450. package/dist/runtime/model-call.js +24 -57
  451. package/dist/runtime/providers.d.ts +17 -6
  452. package/dist/runtime/providers.js +66 -25
  453. package/dist/runtime/quota.d.ts +17 -3
  454. package/dist/runtime/quota.js +27 -2
  455. package/dist/runtime/retired-schedulers.d.ts +7 -0
  456. package/dist/runtime/retired-schedulers.js +31 -0
  457. package/dist/runtime/run-control.d.ts +33 -0
  458. package/dist/runtime/run-control.js +77 -0
  459. package/dist/runtime/run-finish.d.ts +26 -17
  460. package/dist/runtime/run-finish.js +98 -51
  461. package/dist/runtime/run-jobs.d.ts +48 -0
  462. package/dist/runtime/run-jobs.js +95 -0
  463. package/dist/runtime/run-processors.d.ts +60 -0
  464. package/dist/runtime/run-processors.js +185 -0
  465. package/dist/runtime/run-queue.d.ts +32 -57
  466. package/dist/runtime/run-queue.js +291 -295
  467. package/dist/runtime/run-steps.d.ts +39 -0
  468. package/dist/runtime/run-steps.js +96 -0
  469. package/dist/runtime/run-worker.d.ts +121 -75
  470. package/dist/runtime/run-worker.js +340 -225
  471. package/dist/runtime/runtime.module.d.ts +10 -0
  472. package/dist/runtime/runtime.module.js +112 -0
  473. package/dist/runtime/step-log.d.ts +40 -0
  474. package/dist/runtime/step-log.js +94 -0
  475. package/dist/runtime/stream.controller.d.ts +5 -8
  476. package/dist/runtime/stream.controller.js +14 -12
  477. package/dist/runtime/stream.d.ts +24 -6
  478. package/dist/runtime/stream.js +78 -7
  479. package/dist/runtime/subagents/child.d.ts +3 -44
  480. package/dist/runtime/subagents/child.js +0 -79
  481. package/dist/runtime/subagents/definition.d.ts +4 -4
  482. package/dist/runtime/subagents/definition.js +2 -2
  483. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  484. package/dist/runtime/subagents/dispatch.js +135 -140
  485. package/dist/runtime/subagents/limits.d.ts +9 -4
  486. package/dist/runtime/subagents/limits.js +4 -2
  487. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  488. package/dist/runtime/subagents/org-agents.js +1 -1
  489. package/dist/runtime/subagents/progress.d.ts +2 -2
  490. package/dist/runtime/subagents/roster.d.ts +3 -3
  491. package/dist/runtime/subagents/roster.js +1 -1
  492. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  493. package/dist/runtime/subagents/skill-fork.js +16 -5
  494. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  495. package/dist/runtime/subagents/subagents.service.js +101 -0
  496. package/dist/runtime/usage-report.d.ts +94 -52
  497. package/dist/runtime/usage-report.js +200 -99
  498. package/dist/runtime/waits.d.ts +125 -57
  499. package/dist/runtime/waits.js +431 -208
  500. package/dist/sandbox/job-ids.d.ts +10 -0
  501. package/dist/sandbox/job-ids.js +10 -0
  502. package/dist/sandbox/jobs.d.ts +41 -0
  503. package/dist/sandbox/jobs.js +113 -0
  504. package/dist/sandbox/leases.d.ts +39 -31
  505. package/dist/sandbox/leases.js +117 -257
  506. package/dist/sandbox/providers.d.ts +19 -0
  507. package/dist/sandbox/providers.js +38 -0
  508. package/dist/sandbox/sandbox.module.d.ts +8 -0
  509. package/dist/sandbox/sandbox.module.js +30 -0
  510. package/dist/sandbox/sandbox.service.d.ts +24 -29
  511. package/dist/sandbox/sandbox.service.js +106 -75
  512. package/dist/skills/catalog.d.ts +33 -20
  513. package/dist/skills/catalog.js +96 -53
  514. package/dist/skills/changes.controller.d.ts +4 -4
  515. package/dist/skills/changes.controller.js +15 -9
  516. package/dist/skills/changes.service.d.ts +28 -18
  517. package/dist/skills/changes.service.js +421 -364
  518. package/dist/skills/invocable.controller.d.ts +1 -1
  519. package/dist/skills/invocable.controller.js +8 -5
  520. package/dist/skills/invoke.d.ts +16 -15
  521. package/dist/skills/invoke.js +48 -17
  522. package/dist/skills/skills.controller.d.ts +1 -1
  523. package/dist/skills/skills.controller.js +11 -6
  524. package/dist/skills/skills.module.d.ts +6 -0
  525. package/dist/skills/skills.module.js +30 -0
  526. package/dist/skills/skills.service.d.ts +47 -30
  527. package/dist/skills/skills.service.js +221 -158
  528. package/dist/storage/job-ids.d.ts +6 -0
  529. package/dist/storage/job-ids.js +6 -0
  530. package/dist/storage/purge.d.ts +22 -7
  531. package/dist/storage/purge.js +55 -3
  532. package/dist/storage/storage.module.d.ts +6 -0
  533. package/dist/storage/storage.module.js +23 -0
  534. package/dist/storage/storage.service.d.ts +18 -4
  535. package/dist/storage/storage.service.js +44 -3
  536. package/dist/tools/approvals.controller.d.ts +1 -1
  537. package/dist/tools/approvals.controller.js +12 -8
  538. package/dist/tools/approvals.service.d.ts +27 -25
  539. package/dist/tools/approvals.service.js +324 -258
  540. package/dist/tools/breaker.d.ts +2 -2
  541. package/dist/tools/breaker.js +21 -3
  542. package/dist/tools/builtins/ask-user.d.ts +2 -2
  543. package/dist/tools/builtins/ask-user.js +1 -1
  544. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  545. package/dist/tools/builtins/builtin-tools.js +80 -0
  546. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  547. package/dist/tools/builtins/read-tool-output.js +1 -1
  548. package/dist/tools/builtins/sandbox/bash.js +2 -2
  549. package/dist/tools/builtins/sandbox/common.d.ts +7 -4
  550. package/dist/tools/builtins/sandbox/common.js +5 -3
  551. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  552. package/dist/tools/builtins/sandbox/edit.js +1 -1
  553. package/dist/tools/builtins/sandbox/glob.js +2 -2
  554. package/dist/tools/builtins/sandbox/grep.js +2 -2
  555. package/dist/tools/builtins/sandbox/read.js +1 -1
  556. package/dist/tools/builtins/sandbox/write.js +1 -1
  557. package/dist/tools/builtins/skill-load.d.ts +3 -3
  558. package/dist/tools/builtins/skill-load.js +1 -1
  559. package/dist/tools/canonical-json.d.ts +6 -0
  560. package/dist/tools/canonical-json.js +16 -0
  561. package/dist/tools/connector-content.controller.d.ts +1 -1
  562. package/dist/tools/connector-content.controller.js +11 -6
  563. package/dist/tools/connector-content.d.ts +12 -15
  564. package/dist/tools/connector-content.js +53 -18
  565. package/dist/tools/connectors.controller.d.ts +1 -1
  566. package/dist/tools/connectors.controller.js +21 -10
  567. package/dist/tools/connectors.service.d.ts +31 -13
  568. package/dist/tools/connectors.service.js +434 -344
  569. package/dist/tools/credentials.d.ts +17 -20
  570. package/dist/tools/credentials.js +55 -34
  571. package/dist/tools/drift.d.ts +29 -41
  572. package/dist/tools/drift.js +111 -79
  573. package/dist/tools/info.d.ts +12 -9
  574. package/dist/tools/info.js +33 -7
  575. package/dist/tools/job-ids.d.ts +13 -0
  576. package/dist/tools/job-ids.js +15 -0
  577. package/dist/tools/jobs.d.ts +24 -0
  578. package/dist/tools/jobs.js +69 -0
  579. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  580. package/dist/tools/oauth/flow-paths.js +38 -0
  581. package/dist/tools/oauth/flow.d.ts +30 -30
  582. package/dist/tools/oauth/flow.js +109 -81
  583. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  584. package/dist/tools/oauth/oauth.controller.js +12 -9
  585. package/dist/tools/oauth/tokens.d.ts +11 -3
  586. package/dist/tools/oauth/tokens.js +15 -14
  587. package/dist/tools/outputs.d.ts +13 -4
  588. package/dist/tools/outputs.js +47 -3
  589. package/dist/tools/pipeline.d.ts +62 -46
  590. package/dist/tools/pipeline.js +145 -64
  591. package/dist/tools/policy.d.ts +2 -2
  592. package/dist/tools/questions.controller.d.ts +1 -1
  593. package/dist/tools/questions.controller.js +8 -5
  594. package/dist/tools/questions.service.d.ts +25 -24
  595. package/dist/tools/questions.service.js +201 -142
  596. package/dist/tools/registry.d.ts +30 -20
  597. package/dist/tools/registry.js +73 -37
  598. package/dist/tools/specs.d.ts +5 -4
  599. package/dist/tools/specs.js +3 -1
  600. package/dist/tools/tools.module.d.ts +10 -0
  601. package/dist/tools/tools.module.js +91 -0
  602. package/dist/ui/call-extension.d.ts +16 -0
  603. package/dist/ui/call-extension.js +38 -0
  604. package/dist/ui/embed-token.d.ts +9 -5
  605. package/dist/ui/embed-token.js +34 -6
  606. package/dist/ui/ui-stream.d.ts +22 -17
  607. package/dist/ui/ui-stream.js +72 -12
  608. package/dist/ui/ui.module.d.ts +7 -0
  609. package/dist/ui/ui.module.js +28 -0
  610. package/dist/ui/views.controller.d.ts +14 -12
  611. package/dist/ui/views.controller.js +32 -25
  612. package/dist/ui/views.d.ts +9 -57
  613. package/dist/ui/views.js +43 -45
  614. package/package.json +11 -2
  615. package/dist/http/health.controller.d.ts +0 -26
  616. package/dist/http/health.controller.js +0 -79
  617. package/dist/http/tokens.d.ts +0 -131
  618. package/dist/http/tokens.js +0 -131
  619. package/dist/http/zod.pipe.d.ts +0 -8
  620. package/dist/http/zod.pipe.js +0 -14
  621. package/dist/identity/rate-limit.d.ts +0 -55
  622. package/dist/identity/rate-limit.js +0 -121
  623. package/dist/sandbox/lifecycle.d.ts +0 -21
  624. package/dist/sandbox/lifecycle.js +0 -68
  625. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  626. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,10 +1,14 @@
1
- import { type Logger, type SandboxHandle, type SandboxProvider } from "@capybara-hq/plugin-sdk";
1
+ import { type SandboxHandle, type SandboxProvider } from "@capybara-hq/plugin-sdk";
2
2
  import type { Redis } from "ioredis";
3
3
  import { type Selectable } from "kysely";
4
4
  import { type KernelConfig } from "../config/schema.js";
5
- import type { KernelDb, SandboxesTable } from "../db/kernel-schema.js";
5
+ import type { SandboxesTable } from "../db/kernel-schema.js";
6
6
  import { ApiError } from "../errors.js";
7
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
8
+ import { KernelDb } from "../infra/database/kernel-db.js";
9
+ import type { KernelLogger } from "../log.js";
7
10
  import { SandboxLeases, type SandboxPathLease } from "./leases.js";
11
+ import { type SandboxProviderEntry, SandboxProviders } from "./providers.js";
8
12
  export { SANDBOX_BUSY_PREFIX, SANDBOX_LOCK_PREFIX, SANDBOX_LOCK_TTL_MS, SandboxLockLostError, sandboxBusy, } from "./leases.js";
9
13
  /** `withSandbox` 回调的第三个参数。 */
10
14
  export interface SandboxUseInfo {
@@ -13,27 +17,7 @@ export interface SandboxUseInfo {
13
17
  /** 之前有过实例、但已不在(被销毁、提供方返回 gone、换了提供方),这是重建的空沙箱。 */
14
18
  recreated: boolean;
15
19
  }
16
- /** 当前的 `sandbox@1` 提供方:插件名与实现。 */
17
- export interface SandboxProviderEntry {
18
- plugin: string;
19
- impl: SandboxProvider;
20
- }
21
- export interface SandboxServiceDeps {
22
- db: KernelDb;
23
- redis: Redis;
24
- /** 每次调用时取(提供方在插件加载后才就绪);没有提供方为 undefined。 */
25
- provider: () => SandboxProviderEntry | undefined;
26
- /** 按插件名找仍加载着的提供方(销毁换提供方前的旧实例);省略则视为找不到。 */
27
- lookup?: (plugin: string) => SandboxProvider | undefined;
28
- config: () => Pick<KernelConfig, "sandbox">;
29
- log: Pick<Logger, "info" | "warn">;
30
- /** Poll interval while waiting for a lease (ms), default 100; tests make it shorter. */
31
- lockPollMs?: number;
32
- /** Lease TTL (ms), default {@link SANDBOX_LOCK_TTL_MS}; tests make it shorter to notice a lost lease quickly. */
33
- lockTtlMs?: number;
34
- /** Lease implementation, default a {@link SandboxLeases} on `redis` (tests may wrap one). */
35
- leases?: SandboxLeases;
36
- }
20
+ export type { SandboxProviderEntry } from "./providers.js";
37
21
  type Row = Selectable<SandboxesTable>;
38
22
  /**
39
23
  * One instance of a conversation's sandbox: its handle and the row's `created_at`, which the
@@ -85,7 +69,7 @@ export declare const sandboxUnavailable: () => ApiError;
85
69
  * first, so a stale exclusive holder's later writes fail. Shared holders write nothing else but
86
70
  * `last_used_at` (monotonic). A lost
87
71
  * lease aborts the signal passed to `fn` and to maintenance provider calls.
88
- * - **休眠与销毁**由维护队列定期调用 {@link suspendIdle} / {@link destroyInactive};它们只试一次 exclusive
72
+ * - **Suspension and destruction**: the sweeps (`SandboxSweepJobs`, crons) call {@link suspendIdle} / {@link destroyInactive};它们只试一次 exclusive
89
73
  * lease and skip a sandbox with any holder; a sandbox past `maxRunningMinutes` gets the intent for
90
74
  * a short window (about a second) so the suspension can get in when its commands end.
91
75
  * - **透明恢复**:已休眠的在下次使用时恢复;恢复返回 `gone`、已销毁、记录的提供方不是当前提供方、
@@ -108,10 +92,21 @@ export declare const sandboxUnavailable: () => ApiError;
108
92
  * 没有提供方时 {@link available} 为 false,使用时抛 `sandbox.unavailable`(503)。本身无进程内状态,可多副本共用。
109
93
  */
110
94
  export declare class SandboxService {
111
- private readonly d;
95
+ private readonly db;
96
+ /** The record of the instance each holder last used (`capk:sandbox-seen:…`). */
97
+ private readonly redis;
112
98
  private readonly leases;
113
- private readonly pollMs;
114
- constructor(d: SandboxServiceDeps);
99
+ /** The `sandbox@1` provider (read at every call: providers are ready after the extension load). */
100
+ private readonly providers;
101
+ private readonly config;
102
+ private readonly log;
103
+ constructor(db: KernelDb,
104
+ /** The record of the instance each holder last used (`capk:sandbox-seen:…`). */
105
+ redis: Pick<Redis, "set">, leases: SandboxLeases,
106
+ /** The `sandbox@1` provider (read at every call: providers are ready after the extension load). */
107
+ providers: Pick<SandboxProviders, "current" | "lookup">, config: Pick<KernelConfigService, "get">, log: Pick<KernelLogger, "info" | "warn">);
108
+ /** Poll interval while waiting for a lease (the leases' own). */
109
+ private get pollMs();
115
110
  /** 是否有沙箱提供方。 */
116
111
  get available(): boolean;
117
112
  /** Concurrent holders the provider gets ({@link sandboxConcurrency} with the current config). */
@@ -192,12 +187,12 @@ export declare class SandboxService {
192
187
  /**
193
188
  * 休眠:空闲超过 `suspendAfterIdleMinutes`、或连续运行超过 `maxRunningMinutes` 的运行中沙箱。
194
189
  * Skips a sandbox with any holder; one past `maxRunningMinutes` gets the intent for one poll
195
- * window (about a second) first. 返回本次休眠的个数。由维护队列每分钟调用。
190
+ * window (about a second) first. 返回本次休眠的个数。Called every minute by the `sandbox-suspend-idle` cron.
196
191
  */
197
192
  suspendIdle(now: Date): Promise<number>;
198
193
  /**
199
194
  * 销毁:超过 `destroyAfterInactiveDays` 没用过的、所属组织已删除的、对话已不存在的沙箱
200
- * (对话已不存在的,销毁后删掉记录)。有 holder 的跳过。返回本次销毁的个数。由维护队列每小时调用。
195
+ * (对话已不存在的,销毁后删掉记录)。有 holder 的跳过。返回本次销毁的个数。Called hourly by the `sandbox-destroy-inactive` cron.
201
196
  */
202
197
  destroyInactive(now: Date): Promise<number>;
203
198
  /**
@@ -1,12 +1,26 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
1
10
  import { randomUUID } from "node:crypto";
2
11
  import { isSandboxGoneError, } from "@capybara-hq/plugin-sdk";
12
+ import { Inject, Injectable } from "@nestjs/common";
3
13
  import { sql, } from "kysely";
4
14
  import { DEFAULT_MAX_COMMAND_SECONDS, DEFAULT_MAX_RUN_SECONDS, } from "../config/schema.js";
5
15
  import { ApiError } from "../errors.js";
6
16
  import { readSandboxLimitOverride } from "../identity/settings.js";
17
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
18
+ import { KernelDb } from "../infra/database/kernel-db.js";
19
+ import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
7
20
  import { effectiveSandboxEgress, effectiveSandboxLimits, readOrgSettings, } from "../orgs/settings.service.js";
8
- import { canonicalJson } from "../tools/registry.js";
9
- import { SANDBOX_LOCK_TTL_MS, SandboxLeases, SandboxLockLostError, sandboxBusy, } from "./leases.js";
21
+ import { canonicalJson } from "../tools/canonical-json.js";
22
+ import { SandboxLeases, SandboxLockLostError, sandboxBusy, } from "./leases.js";
23
+ import { SandboxProviders } from "./providers.js";
10
24
  // Moved to leases.ts (phase C); re-exported for existing importers
11
25
  export { SANDBOX_BUSY_PREFIX, SANDBOX_LOCK_PREFIX, SANDBOX_LOCK_TTL_MS, SandboxLockLostError, sandboxBusy, } from "./leases.js";
12
26
  /** Margin (ms) of a holder record's TTL beyond the longest command: by then the in-sandbox limit has ended its commands. */
@@ -137,7 +151,7 @@ async function inPool(items, limit, fn) {
137
151
  * first, so a stale exclusive holder's later writes fail. Shared holders write nothing else but
138
152
  * `last_used_at` (monotonic). A lost
139
153
  * lease aborts the signal passed to `fn` and to maintenance provider calls.
140
- * - **休眠与销毁**由维护队列定期调用 {@link suspendIdle} / {@link destroyInactive};它们只试一次 exclusive
154
+ * - **Suspension and destruction**: the sweeps (`SandboxSweepJobs`, crons) call {@link suspendIdle} / {@link destroyInactive};它们只试一次 exclusive
141
155
  * lease and skip a sandbox with any holder; a sandbox past `maxRunningMinutes` gets the intent for
142
156
  * a short window (about a second) so the suspension can get in when its commands end.
143
157
  * - **透明恢复**:已休眠的在下次使用时恢复;恢复返回 `gone`、已销毁、记录的提供方不是当前提供方、
@@ -159,36 +173,43 @@ async function inPool(items, limit, fn) {
159
173
  * 换提供方会泄漏旧实例:新提供方销毁不了旧提供方的实例,只有旧提供方仍加载时才能清理(记在 `prev_*` 列)。
160
174
  * 没有提供方时 {@link available} 为 false,使用时抛 `sandbox.unavailable`(503)。本身无进程内状态,可多副本共用。
161
175
  */
162
- export class SandboxService {
163
- d;
176
+ let SandboxService = class SandboxService {
177
+ db;
178
+ redis;
164
179
  leases;
165
- pollMs;
166
- constructor(d) {
167
- this.d = d;
168
- this.pollMs = d.lockPollMs ?? 100;
169
- this.leases =
170
- d.leases ??
171
- new SandboxLeases({
172
- redis: d.redis,
173
- log: d.log,
174
- ttlMs: d.lockTtlMs ?? SANDBOX_LOCK_TTL_MS,
175
- pollMs: this.pollMs,
176
- });
180
+ providers;
181
+ config;
182
+ log;
183
+ constructor(db,
184
+ /** The record of the instance each holder last used (`capk:sandbox-seen:…`). */
185
+ redis, leases,
186
+ /** The `sandbox@1` provider (read at every call: providers are ready after the extension load). */
187
+ providers, config, log) {
188
+ this.db = db;
189
+ this.redis = redis;
190
+ this.leases = leases;
191
+ this.providers = providers;
192
+ this.config = config;
193
+ this.log = log;
194
+ }
195
+ /** Poll interval while waiting for a lease (the leases' own). */
196
+ get pollMs() {
197
+ return this.leases.pollMs;
177
198
  }
178
199
  /** 是否有沙箱提供方。 */
179
200
  get available() {
180
- return this.d.provider() !== undefined;
201
+ return this.providers.current() !== undefined;
181
202
  }
182
203
  /** Concurrent holders the provider gets ({@link sandboxConcurrency} with the current config). */
183
204
  effectiveCap(p) {
184
- return sandboxConcurrency(p.impl, this.d.config().sandbox.maxConcurrentCommands);
205
+ return sandboxConcurrency(p.impl, this.config.get().sandbox.maxConcurrentCommands);
185
206
  }
186
207
  /**
187
208
  * 该对话沙箱的对外状态(只读,不拿锁):`running` / `suspended` 与最近使用时间。
188
209
  * 还没有、已销毁、或停在 `creating`(正在创建,或创建失败等下次使用重建)的都返回 null(界面显示「未创建」)。
189
210
  */
190
211
  async status(orgId, conversationId) {
191
- const row = await this.d.db
212
+ const row = await this.db
192
213
  .selectFrom("sandboxes")
193
214
  .select(["status", "last_used_at"])
194
215
  .where("conversation_id", "=", conversationId)
@@ -231,7 +252,7 @@ export class SandboxService {
231
252
  catch (err) {
232
253
  if (!isSandboxGoneError(err))
233
254
  throw err;
234
- this.d.log.info("sandbox instance is gone during use; recreating", {
255
+ this.log.info("sandbox instance is gone during use; recreating", {
235
256
  conversationId: ctx.conversationId,
236
257
  });
237
258
  const gone = { handle: e.handle, createdAt: e.createdAt };
@@ -252,14 +273,14 @@ export class SandboxService {
252
273
  */
253
274
  async seenBy(conversationId, holder, e) {
254
275
  try {
255
- const ttl = (this.d.config().sandbox.limits.destroyAfterInactiveDays + 1) * 86_400;
256
- const prev = await this.d.redis.set(`capk:sandbox-seen:${conversationId}:${holder}`, String(e.createdAt), "EX", ttl, "GET");
276
+ const ttl = (this.config.get().sandbox.limits.destroyAfterInactiveDays + 1) * 86_400;
277
+ const prev = await this.redis.set(`capk:sandbox-seen:${conversationId}:${holder}`, String(e.createdAt), "EX", ttl, "GET");
257
278
  if (prev !== null && prev !== String(e.createdAt) && !e.info.recreated) {
258
279
  return { ...e, info: { fresh: e.info.fresh, recreated: true } };
259
280
  }
260
281
  }
261
282
  catch (err) {
262
- this.d.log.warn("cannot record the sandbox instance a holder uses", {
283
+ this.log.warn("cannot record the sandbox instance a holder uses", {
263
284
  conversationId,
264
285
  holder,
265
286
  err,
@@ -283,7 +304,7 @@ export class SandboxService {
283
304
  async enter(ctx, p, signal, gone) {
284
305
  const conv = ctx.conversationId;
285
306
  const cap = this.effectiveCap(p);
286
- const deadline = Date.now() + this.d.config().sandbox.lockWaitSeconds * 1000;
307
+ const deadline = Date.now() + this.config.get().sandbox.lockWaitSeconds * 1000;
287
308
  const token = randomUUID();
288
309
  let intent = false;
289
310
  try {
@@ -322,10 +343,10 @@ export class SandboxService {
322
343
  async clearIntent(conv, token) {
323
344
  await this.leases
324
345
  .clearIntent(conv, token)
325
- .catch((err) => this.d.log.warn("cannot clear sandbox intent", { conversationId: conv, err }));
346
+ .catch((err) => this.log.warn("cannot clear sandbox intent", { conversationId: conv, err }));
326
347
  }
327
348
  async readRow(ctx) {
328
- const row = await this.d.db
349
+ const row = await this.db
329
350
  .selectFrom("sandboxes")
330
351
  .selectAll()
331
352
  .where("conversation_id", "=", ctx.conversationId)
@@ -358,7 +379,7 @@ export class SandboxService {
358
379
  // Bump the fence as every acquisition did before phase C: an exclusive holder whose lease
359
380
  // expired unnoticed (a stalled sweep) then fails its next write instead of suspending or
360
381
  // destroying the instance under this holder. Shared holders never compare it.
361
- await this.d.db
382
+ await this.db
362
383
  .updateTable("sandboxes")
363
384
  .set((eb) => ({ generation: eb("generation", "+", 1) }))
364
385
  .where("conversation_id", "=", conv)
@@ -379,7 +400,7 @@ export class SandboxService {
379
400
  await this.killLeftovers(conv, row.handle, p, sig, "takeover");
380
401
  }
381
402
  else {
382
- this.d.log.warn("cannot kill leftover sandbox commands: the provider has no killTagged and another holder is live; the in-sandbox time limit ends them", { conversationId: conv });
403
+ this.log.warn("cannot kill leftover sandbox commands: the provider has no killTagged and another holder is live; the in-sandbox time limit ends them", { conversationId: conv });
383
404
  }
384
405
  }
385
406
  return {
@@ -423,24 +444,24 @@ export class SandboxService {
423
444
  async leave(conv, e) {
424
445
  await this.unregister(conv, e.lease.token);
425
446
  await e.lease.release();
426
- await this.d.db
447
+ await this.db
427
448
  .updateTable("sandboxes")
428
449
  .set({ last_used_at: sql `GREATEST(last_used_at, now())` })
429
450
  .where("conversation_id", "=", conv)
430
451
  .where("status", "=", "running")
431
452
  .execute()
432
- .catch((err) => this.d.log.warn("cannot update sandbox last_used_at", { conversationId: conv, err }));
453
+ .catch((err) => this.log.warn("cannot update sandbox last_used_at", { conversationId: conv, err }));
433
454
  }
434
455
  async register(conv, token) {
435
- const ttl = this.d.config().sandbox.limits.maxCommandSeconds * 1000 + HOLDER_TTL_MARGIN_MS;
456
+ const ttl = this.config.get().sandbox.limits.maxCommandSeconds * 1000 + HOLDER_TTL_MARGIN_MS;
436
457
  await this.leases
437
458
  .registerHolder(conv, token, ttl)
438
- .catch((err) => this.d.log.warn("cannot record sandbox holder", { conversationId: conv, err }));
459
+ .catch((err) => this.log.warn("cannot record sandbox holder", { conversationId: conv, err }));
439
460
  }
440
461
  async unregister(conv, token) {
441
462
  await this.leases
442
463
  .unregisterHolder(conv, token)
443
- .catch((err) => this.d.log.warn("cannot clear sandbox holder record", { conversationId: conv, err }));
464
+ .catch((err) => this.log.warn("cannot clear sandbox holder record", { conversationId: conv, err }));
444
465
  }
445
466
  /**
446
467
  * Crashed holders' tags (claimed), and an older kernel's busy marker when `exclusiveToken` is
@@ -451,7 +472,7 @@ export class SandboxService {
451
472
  return await this.leases.claimDeadHolders(conv, exclusiveToken);
452
473
  }
453
474
  catch (err) {
454
- this.d.log.warn("cannot read sandbox holder records", { conversationId: conv, err });
475
+ this.log.warn("cannot read sandbox holder records", { conversationId: conv, err });
455
476
  return { tags: [], legacyMarker: false };
456
477
  }
457
478
  }
@@ -460,33 +481,33 @@ export class SandboxService {
460
481
  try {
461
482
  await call();
462
483
  if (why === "takeover") {
463
- this.d.log.info("sandbox taken over from a holder that did not finish; leftover commands killed", { conversationId });
484
+ this.log.info("sandbox taken over from a holder that did not finish; leftover commands killed", { conversationId });
464
485
  }
465
486
  }
466
487
  catch (err) {
467
488
  if (signal?.aborted || isSandboxGoneError(err))
468
489
  throw err;
469
- this.d.log.warn("cannot kill leftover sandbox commands", { conversationId, err });
490
+ this.log.warn("cannot kill leftover sandbox commands", { conversationId, err });
470
491
  }
471
492
  }
472
493
  /**
473
494
  * 休眠:空闲超过 `suspendAfterIdleMinutes`、或连续运行超过 `maxRunningMinutes` 的运行中沙箱。
474
495
  * Skips a sandbox with any holder; one past `maxRunningMinutes` gets the intent for one poll
475
- * window (about a second) first. 返回本次休眠的个数。由维护队列每分钟调用。
496
+ * window (about a second) first. 返回本次休眠的个数。Called every minute by the `sandbox-suspend-idle` cron.
476
497
  */
477
498
  async suspendIdle(now) {
478
- const p = this.d.provider();
499
+ const p = this.providers.current();
479
500
  if (!p)
480
501
  return 0;
481
502
  const due = this.suspendDue(now, p.plugin);
482
- const runningBefore = new Date(now.getTime() - this.d.config().sandbox.limits.maxRunningMinutes * 60_000);
503
+ const runningBefore = new Date(now.getTime() - this.config.get().sandbox.limits.maxRunningMinutes * 60_000);
483
504
  const rows = await this.candidates(due);
484
505
  let n = 0;
485
506
  await inPool(rows, SWEEP_CONCURRENCY, async (c) => {
486
507
  const overdue = c.running_since !== null && c.running_since < runningBefore;
487
508
  const done = await this.tryLocked(c.conversation_id, async (lease) => {
488
509
  const id = c.conversation_id;
489
- const row = await this.d.db
510
+ const row = await this.db
490
511
  .selectFrom("sandboxes")
491
512
  .selectAll()
492
513
  .where("conversation_id", "=", id)
@@ -504,7 +525,7 @@ export class SandboxService {
504
525
  running_since: null,
505
526
  sweep_failed_at: null,
506
527
  });
507
- this.d.log.info("sandbox suspended", { conversationId: id });
528
+ this.log.info("sandbox suspended", { conversationId: id });
508
529
  return true;
509
530
  }, overdue);
510
531
  if (done)
@@ -514,10 +535,10 @@ export class SandboxService {
514
535
  }
515
536
  /**
516
537
  * 销毁:超过 `destroyAfterInactiveDays` 没用过的、所属组织已删除的、对话已不存在的沙箱
517
- * (对话已不存在的,销毁后删掉记录)。有 holder 的跳过。返回本次销毁的个数。由维护队列每小时调用。
538
+ * (对话已不存在的,销毁后删掉记录)。有 holder 的跳过。返回本次销毁的个数。Called hourly by the `sandbox-destroy-inactive` cron.
518
539
  */
519
540
  async destroyInactive(now) {
520
- const p = this.d.provider();
541
+ const p = this.providers.current();
521
542
  if (!p)
522
543
  return 0;
523
544
  const due = this.destroyDue(now);
@@ -525,7 +546,7 @@ export class SandboxService {
525
546
  let n = 0;
526
547
  await inPool(rows, SWEEP_CONCURRENCY, async ({ conversation_id: id }) => {
527
548
  const done = await this.tryLocked(id, async (lease) => {
528
- const row = await this.d.db
549
+ const row = await this.db
529
550
  .selectFrom("sandboxes")
530
551
  .selectAll()
531
552
  .where("conversation_id", "=", id)
@@ -540,7 +561,7 @@ export class SandboxService {
540
561
  n++;
541
562
  });
542
563
  // 早先已销毁、对话后来才删除、且没有遗留旧实例的记录
543
- await this.d.db
564
+ await this.db
544
565
  .deleteFrom("sandboxes")
545
566
  .where("status", "=", "destroyed")
546
567
  .where("prev_handle", "is", null)
@@ -556,21 +577,21 @@ export class SandboxService {
556
577
  * to 10 minutes. 没有提供方时只记 warn。
557
578
  */
558
579
  async destroyFor(conversationId) {
559
- const row = await this.d.db
580
+ const row = await this.db
560
581
  .selectFrom("sandboxes")
561
582
  .select("status")
562
583
  .where("conversation_id", "=", conversationId)
563
584
  .executeTakeFirst();
564
585
  if (!row || row.status === "destroyed")
565
586
  return;
566
- const p = this.d.provider();
587
+ const p = this.providers.current();
567
588
  if (!p) {
568
- this.d.log.warn("cannot destroy sandbox: no sandbox provider", { conversationId });
589
+ this.log.warn("cannot destroy sandbox: no sandbox provider", { conversationId });
569
590
  return;
570
591
  }
571
592
  const lease = await this.leases.acquireExclusive(conversationId, AbortSignal.timeout(DESTROY_FOR_WAIT_MS), undefined, { intent: true });
572
593
  try {
573
- const current = await this.d.db
594
+ const current = await this.db
574
595
  .selectFrom("sandboxes")
575
596
  .selectAll()
576
597
  .where("conversation_id", "=", conversationId)
@@ -591,14 +612,14 @@ export class SandboxService {
591
612
  const killAll = p.impl.killAll;
592
613
  if (!killAll) {
593
614
  if (why === "takeover") {
594
- this.d.log.info("sandbox taken over from a holder that did not finish; provider cannot kill its commands", { conversationId });
615
+ this.log.info("sandbox taken over from a holder that did not finish; provider cannot kill its commands", { conversationId });
595
616
  }
596
617
  return;
597
618
  }
598
619
  await this.kill(conversationId, why, () => killAll.call(p.impl, handle, signal), signal);
599
620
  }
600
621
  require() {
601
- const p = this.d.provider();
622
+ const p = this.providers.current();
602
623
  if (!p)
603
624
  throw sandboxUnavailable();
604
625
  return p;
@@ -609,7 +630,7 @@ export class SandboxService {
609
630
  async fenced(lease, id, fence, set) {
610
631
  if (lease.signal.aborted)
611
632
  throw new SandboxLockLostError(id);
612
- const r = await this.d.db
633
+ const r = await this.db
613
634
  .updateTable("sandboxes")
614
635
  .set({ ...set, generation: fence.gen + 1 })
615
636
  .where("conversation_id", "=", id)
@@ -623,7 +644,7 @@ export class SandboxService {
623
644
  }
624
645
  /** 扫描的候选:上次扫描失败的排在后面,其余按最久未用在前。 */
625
646
  async candidates(due) {
626
- return await this.d.db
647
+ return await this.db
627
648
  .selectFrom("sandboxes")
628
649
  .select(["conversation_id", "running_since"])
629
650
  .where(due)
@@ -653,7 +674,7 @@ export class SandboxService {
653
674
  }
654
675
  }
655
676
  catch (err) {
656
- this.d.log.warn("cannot take sandbox lock", { conversationId, err });
677
+ this.log.warn("cannot take sandbox lock", { conversationId, err });
657
678
  return false;
658
679
  }
659
680
  if (!lease)
@@ -662,8 +683,8 @@ export class SandboxService {
662
683
  return await fn(lease);
663
684
  }
664
685
  catch (err) {
665
- this.d.log.warn("sandbox maintenance failed; will retry", { conversationId, err });
666
- await this.d.db
686
+ this.log.warn("sandbox maintenance failed; will retry", { conversationId, err });
687
+ await this.db
667
688
  .updateTable("sandboxes")
668
689
  .set({ sweep_failed_at: sql `now()` })
669
690
  .where("conversation_id", "=", conversationId)
@@ -682,12 +703,12 @@ export class SandboxService {
682
703
  */
683
704
  async ensure(ctx, p, held, signal, gone) {
684
705
  const id = ctx.conversationId;
685
- await this.d.db
706
+ await this.db
686
707
  .insertInto("sandboxes")
687
708
  .values({ conversation_id: id, org_id: ctx.orgId, provider: p.plugin, status: "creating" })
688
709
  .onConflict((oc) => oc.column("conversation_id").doNothing())
689
710
  .execute();
690
- const row = await this.d.db
711
+ const row = await this.db
691
712
  .selectFrom("sandboxes")
692
713
  .selectAll()
693
714
  .where("conversation_id", "=", id)
@@ -725,7 +746,7 @@ export class SandboxService {
725
746
  resumed: true,
726
747
  };
727
748
  }
728
- this.d.log.info("sandbox is gone at the provider; recreating", { conversationId: id });
749
+ this.log.info("sandbox is gone at the provider; recreating", { conversationId: id });
729
750
  }
730
751
  }
731
752
  // 换了提供方且旧实例还没销毁:交给旧提供方(仍加载时)销毁,否则记进 prev_*
@@ -734,7 +755,7 @@ export class SandboxService {
734
755
  const kept = await this.retire(id, row.provider, handle, signal);
735
756
  if (kept) {
736
757
  if (row.prev_handle) {
737
- this.d.log.warn("sandbox instance of an earlier provider is leaked", {
758
+ this.log.warn("sandbox instance of an earlier provider is leaked", {
738
759
  conversationId: id,
739
760
  provider: row.prev_provider,
740
761
  });
@@ -764,11 +785,11 @@ export class SandboxService {
764
785
  sweep_failed_at: null,
765
786
  ...extra,
766
787
  });
767
- const cfg = this.d.config().sandbox;
788
+ const cfg = this.config.get().sandbox;
768
789
  // 出站按组织设置收窄(Ruling M19);只在创建时生效,改设置只影响之后新建的沙箱
769
- const egress = effectiveSandboxEgress(cfg.limits, (await readOrgSettings(this.d.db, ctx.orgId)).sandboxEgress);
790
+ const egress = effectiveSandboxEgress(cfg.limits, (await readOrgSettings(this.db.db, ctx.orgId)).sandboxEgress);
770
791
  // cpu / 内存按企业管理员的组织覆盖(C19 / Ruling M16),同样只在创建时生效
771
- const sized = effectiveSandboxLimits({ ...cfg.limits, ...egress }, await readSandboxLimitOverride(this.d.db, ctx.orgId));
792
+ const sized = effectiveSandboxLimits({ ...cfg.limits, ...egress }, await readSandboxLimitOverride(this.db.db, ctx.orgId));
772
793
  const limits = {
773
794
  cpu: sized.cpu,
774
795
  memoryMb: sized.memoryMb,
@@ -792,27 +813,27 @@ export class SandboxService {
792
813
  // 锁已丢失、没能记下句柄:尽力销毁刚建好的实例,免得泄漏。
793
814
  // 提供方按名字(cap-<对话>)复用实例时(Ruling M10),这个 destroy 可能打到新持有者刚恢复 / 创建的同一个实例。
794
815
  // 这能自愈:新持有者下一次提供方调用抛 SandboxGoneError(或 resume 返回 gone),withSandbox 原地重建并重试。
795
- await p.impl.destroy(handle, AbortSignal.timeout(SWEEP_OP_TIMEOUT_MS)).catch((err) => this.d.log.warn("cannot destroy sandbox created after the lock was lost", {
816
+ await p.impl.destroy(handle, AbortSignal.timeout(SWEEP_OP_TIMEOUT_MS)).catch((err) => this.log.warn("cannot destroy sandbox created after the lock was lost", {
796
817
  conversationId: id,
797
818
  err,
798
819
  }));
799
820
  throw e;
800
821
  }
801
- this.d.log.info("sandbox created", { conversationId: id, provider: p.plugin });
822
+ this.log.info("sandbox created", { conversationId: id, provider: p.plugin });
802
823
  return { handle, createdAt: createdAt.getTime() };
803
824
  }
804
825
  /**
805
826
  * 用旧提供方销毁别的提供方创建的实例:旧提供方仍加载且销毁成功 → false;否则 warn 并返回 true(需要留着记录)。
806
827
  */
807
828
  async retire(id, provider, handle, signal) {
808
- const old = this.d.lookup?.(provider);
829
+ const old = this.providers.lookup(provider);
809
830
  if (old) {
810
831
  try {
811
832
  await old.destroy(handle, AbortSignal.any([signal, AbortSignal.timeout(SWEEP_OP_TIMEOUT_MS)]));
812
833
  return false;
813
834
  }
814
835
  catch (err) {
815
- this.d.log.warn("cannot destroy sandbox instance of the previous provider", {
836
+ this.log.warn("cannot destroy sandbox instance of the previous provider", {
816
837
  conversationId: id,
817
838
  provider,
818
839
  err,
@@ -820,7 +841,7 @@ export class SandboxService {
820
841
  return true;
821
842
  }
822
843
  }
823
- this.d.log.warn("sandbox was created by another provider that is not loaded; its instance may leak", { conversationId: id, provider });
844
+ this.log.warn("sandbox was created by another provider that is not loaded; its instance may leak", { conversationId: id, provider });
824
845
  return true;
825
846
  }
826
847
  /** 在锁内:销毁实例(与遗留的旧提供方实例);对话已不存在的删掉记录,否则标记 destroyed。 */
@@ -848,7 +869,7 @@ export class SandboxService {
848
869
  }
849
870
  if (!(await held.renew()))
850
871
  throw new SandboxLockLostError(id);
851
- const conversation = await this.d.db
872
+ const conversation = await this.db
852
873
  .selectFrom("conversations")
853
874
  .select("id")
854
875
  .where("id", "=", id)
@@ -864,7 +885,7 @@ export class SandboxService {
864
885
  });
865
886
  }
866
887
  else {
867
- const r = await this.d.db
888
+ const r = await this.db
868
889
  .deleteFrom("sandboxes")
869
890
  .where("conversation_id", "=", id)
870
891
  .where("generation", "=", fence.gen)
@@ -872,11 +893,11 @@ export class SandboxService {
872
893
  if (Number(r.numDeletedRows) !== 1)
873
894
  throw new SandboxLockLostError(id, "generation");
874
895
  }
875
- this.d.log.info("sandbox destroyed", { conversationId: id });
896
+ this.log.info("sandbox destroyed", { conversationId: id });
876
897
  }
877
898
  /** 该休眠的:本提供方创建、运行中,且空闲到期或连续运行超时。 */
878
899
  suspendDue(now, plugin) {
879
- const lim = this.d.config().sandbox.limits;
900
+ const lim = this.config.get().sandbox.limits;
880
901
  const idleBefore = new Date(now.getTime() - lim.suspendAfterIdleMinutes * 60_000);
881
902
  const runningBefore = new Date(now.getTime() - lim.maxRunningMinutes * 60_000);
882
903
  return (eb) => eb.and([
@@ -887,7 +908,7 @@ export class SandboxService {
887
908
  }
888
909
  /** 该销毁的:未销毁,且不活跃到期、组织已删除或对话已不存在。 */
889
910
  destroyDue(now) {
890
- const days = this.d.config().sandbox.limits.destroyAfterInactiveDays;
911
+ const days = this.config.get().sandbox.limits.destroyAfterInactiveDays;
891
912
  const before = new Date(now.getTime() - days * 24 * 3_600_000);
892
913
  return (eb) => eb.and([
893
914
  eb("status", "<>", "destroyed"),
@@ -905,4 +926,14 @@ export class SandboxService {
905
926
  ]),
906
927
  ]);
907
928
  }
908
- }
929
+ };
930
+ SandboxService = __decorate([
931
+ Injectable(),
932
+ __param(0, Inject(KernelDb)),
933
+ __param(1, Inject(REDIS)),
934
+ __param(2, Inject(SandboxLeases)),
935
+ __param(3, Inject(SandboxProviders)),
936
+ __param(4, Inject(KernelConfigService)),
937
+ __param(5, Inject(KERNEL_LOGGER))
938
+ ], SandboxService);
939
+ export { SandboxService };