@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,11 +1,32 @@
1
1
  import type { ChannelTarget } from "@capybara-hq/plugin-sdk";
2
- import type { KernelDb } from "../db/kernel-schema.js";
2
+ import type { KernelSchemaDb } from "../db/kernel-schema.js";
3
+ import { KernelDb } from "../infra/database/kernel-db.js";
4
+ import { TransactionHost } from "../infra/database/transaction-host.js";
5
+ import { XactLock } from "../infra/database/xact-lock.js";
3
6
  /**
4
- * 该组织唯一的匿名访客账号 id;首次使用时创建(`accounts.status = active`、没有任何登录方式、组织角色 guest)。
5
- * 每次都确保成员关系存在(被移出后再次使用会补回 guest):运行的兜底扫描会中止「发起人已不是该组织成员」的运行。
6
- * 跨副本并发首次创建用事务级咨询锁串行化,只建一个账号。
7
+ * The lock of an org's anonymous guest account (one provider per transaction-scoped lock):
8
+ * serializes the first creation across replicas, so only one account is created. Joins the caller's
9
+ * transaction (`mandatory`), which holds it until it ends.
7
10
  */
8
- export declare function ensureAnonymousGuest(db: KernelDb, orgId: string): Promise<string>;
11
+ export declare class AnonymousGuestLock {
12
+ private readonly xactLock;
13
+ readonly txHost: TransactionHost;
14
+ constructor(xactLock: XactLock, txHost: TransactionHost);
15
+ lock(orgId: string): Promise<void>;
16
+ }
17
+ /** 组织的匿名访客账号(渠道连接的未绑定策略 `anonymous`)。 */
18
+ export declare class AnonymousGuests {
19
+ private readonly db;
20
+ private readonly guestLock;
21
+ readonly txHost: TransactionHost;
22
+ constructor(db: KernelDb, guestLock: AnonymousGuestLock, txHost: TransactionHost);
23
+ /**
24
+ * 该组织唯一的匿名访客账号 id;首次使用时创建(`accounts.status = active`、没有任何登录方式、组织角色 guest)。
25
+ * 每次都确保成员关系存在(被移出后再次使用会补回 guest):运行的兜底扫描会中止「发起人已不是该组织成员」的运行。
26
+ * 跨副本并发首次创建由 {@link AnonymousGuestLock} 串行化,只建一个账号。
27
+ */
28
+ ensure(orgId: string): Promise<string>;
29
+ }
9
30
  /** 一条 IM 话题的定位:连接 + chat + 话题键 + 账号(匿名为 null)。 */
10
31
  export interface ThreadKey {
11
32
  connectionId: string;
@@ -19,11 +40,11 @@ export interface ThreadKey {
19
40
  */
20
41
  export declare function threadKeyOf(target: ChannelTarget, senderExternalId: string, messageId: string): string;
21
42
  /** 未归档的话题行对应的会话;没有返回 undefined。 */
22
- export declare function findThread(db: KernelDb, k: ThreadKey): Promise<string | undefined>;
43
+ export declare function findThread(db: KernelSchemaDb, k: ThreadKey): Promise<string | undefined>;
23
44
  /**
24
45
  * 记下话题 → 会话;同一话题已有未归档的行(并发的另一条消息抢先建了)时不写,返回已有的会话 id。
25
46
  * 返回实际生效的会话 id。
26
47
  */
27
- export declare function insertThread(db: KernelDb, k: ThreadKey, conversationId: string): Promise<string>;
48
+ export declare function insertThread(db: KernelSchemaDb, k: ThreadKey, conversationId: string): Promise<string>;
28
49
  /** 私聊 `/new`:归档当前话题行(下一条消息新建对话)。返回是否归档了一行。 */
29
- export declare function archiveThread(db: KernelDb, k: ThreadKey): Promise<boolean>;
50
+ export declare function archiveThread(db: KernelSchemaDb, k: ThreadKey): Promise<boolean>;
@@ -1,19 +1,67 @@
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";
11
+ import { Inject, Injectable } from "@nestjs/common";
2
12
  import { sql } from "kysely";
3
13
  import { audit } from "../identity/audit.js";
14
+ import { KernelDb } from "../infra/database/kernel-db.js";
15
+ import { TransactionHost } from "../infra/database/transaction-host.js";
16
+ import { Transactional } from "../infra/database/transactional.decorator.js";
17
+ import { XactLock } from "../infra/database/xact-lock.js";
4
18
  /** 匿名访客账号的显示名。 */
5
19
  const ANONYMOUS_DISPLAY_NAME = "Anonymous guest";
6
20
  /** 匿名访客成员关系的来源标记(通讯录同步只撤销 `directory:*`,不会碰它)。 */
7
21
  const ANONYMOUS_MEMBERSHIP_SOURCE = "anonymous";
8
22
  /**
9
- * 该组织唯一的匿名访客账号 id;首次使用时创建(`accounts.status = active`、没有任何登录方式、组织角色 guest)。
10
- * 每次都确保成员关系存在(被移出后再次使用会补回 guest):运行的兜底扫描会中止「发起人已不是该组织成员」的运行。
11
- * 跨副本并发首次创建用事务级咨询锁串行化,只建一个账号。
23
+ * The lock of an org's anonymous guest account (one provider per transaction-scoped lock):
24
+ * serializes the first creation across replicas, so only one account is created. Joins the caller's
25
+ * transaction (`mandatory`), which holds it until it ends.
12
26
  */
13
- export async function ensureAnonymousGuest(db, orgId) {
14
- return db.transaction().execute(async (t) => {
15
- await sql `SELECT pg_advisory_xact_lock(hashtext(${`capybara.anonymous:${orgId}`}))`.execute(t);
16
- const existing = await t
27
+ let AnonymousGuestLock = class AnonymousGuestLock {
28
+ xactLock;
29
+ txHost;
30
+ constructor(xactLock, txHost) {
31
+ this.xactLock = xactLock;
32
+ this.txHost = txHost;
33
+ }
34
+ async lock(orgId) {
35
+ await this.xactLock.lock(`capybara.anonymous:${orgId}`);
36
+ }
37
+ };
38
+ __decorate([
39
+ Transactional({ propagation: "mandatory" })
40
+ ], AnonymousGuestLock.prototype, "lock", null);
41
+ AnonymousGuestLock = __decorate([
42
+ Injectable(),
43
+ __param(0, Inject(XactLock)),
44
+ __param(1, Inject(TransactionHost))
45
+ ], AnonymousGuestLock);
46
+ export { AnonymousGuestLock };
47
+ /** 组织的匿名访客账号(渠道连接的未绑定策略 `anonymous`)。 */
48
+ let AnonymousGuests = class AnonymousGuests {
49
+ db;
50
+ guestLock;
51
+ txHost;
52
+ constructor(db, guestLock, txHost) {
53
+ this.db = db;
54
+ this.guestLock = guestLock;
55
+ this.txHost = txHost;
56
+ }
57
+ /**
58
+ * 该组织唯一的匿名访客账号 id;首次使用时创建(`accounts.status = active`、没有任何登录方式、组织角色 guest)。
59
+ * 每次都确保成员关系存在(被移出后再次使用会补回 guest):运行的兜底扫描会中止「发起人已不是该组织成员」的运行。
60
+ * 跨副本并发首次创建由 {@link AnonymousGuestLock} 串行化,只建一个账号。
61
+ */
62
+ async ensure(orgId) {
63
+ await this.guestLock.lock(orgId);
64
+ const existing = await this.db
17
65
  .selectFrom("org_anonymous_accounts")
18
66
  .select("account_id")
19
67
  .where("org_id", "=", orgId)
@@ -21,22 +69,22 @@ export async function ensureAnonymousGuest(db, orgId) {
21
69
  let accountId = existing?.account_id;
22
70
  if (accountId === undefined) {
23
71
  accountId = randomUUID();
24
- await t
72
+ await this.db
25
73
  .insertInto("accounts")
26
74
  .values({ id: accountId, display_name: ANONYMOUS_DISPLAY_NAME, email: null })
27
75
  .execute();
28
- await t
76
+ await this.db
29
77
  .insertInto("org_anonymous_accounts")
30
78
  .values({ org_id: orgId, account_id: accountId })
31
79
  .execute();
32
- await audit(t, {
80
+ await audit(this.db.db, {
33
81
  orgId,
34
82
  action: "account.created",
35
83
  target: accountId,
36
84
  detail: { anonymousGuest: true },
37
85
  });
38
86
  }
39
- await t
87
+ await this.db
40
88
  .insertInto("memberships")
41
89
  .values({
42
90
  org_id: orgId,
@@ -47,8 +95,18 @@ export async function ensureAnonymousGuest(db, orgId) {
47
95
  .onConflict((oc) => oc.columns(["org_id", "account_id"]).doNothing())
48
96
  .execute();
49
97
  return accountId;
50
- });
51
- }
98
+ }
99
+ };
100
+ __decorate([
101
+ Transactional()
102
+ ], AnonymousGuests.prototype, "ensure", null);
103
+ AnonymousGuests = __decorate([
104
+ Injectable(),
105
+ __param(0, Inject(KernelDb)),
106
+ __param(1, Inject(AnonymousGuestLock)),
107
+ __param(2, Inject(TransactionHost))
108
+ ], AnonymousGuests);
109
+ export { AnonymousGuests };
52
110
  /**
53
111
  * 话题键:私聊 `dm:<externalId>`;群聊用平台话题 id,消息不在话题里(开启新话题)时用该消息 id——
54
112
  * 机器人回复在以它为根的话题里,后续消息的 threadId 就是它,于是落到同一个对话。
@@ -1,6 +1,6 @@
1
1
  import type { ChannelWebhookRequest, ChannelWebhookResponse, Logger } from "@capybara-hq/plugin-sdk";
2
- import type { ChannelConnections } from "./connections.service.js";
3
- import type { ChannelInbound } from "./inbound.js";
2
+ import { ChannelConnections } from "./connections.service.js";
3
+ import { ChannelInbound } from "./inbound.js";
4
4
  /**
5
5
  * Deadline of one webhook request: connection lookups, the plugin's `webhook.handle` and handing
6
6
  * its events to `onEvent` (platform ack deadlines are a few seconds). Past it the kernel answers 503.
@@ -8,6 +8,15 @@ import type { ChannelInbound } from "./inbound.js";
8
8
  export declare const WEBHOOK_HANDLE_TIMEOUT_MS = 10000;
9
9
  /** How long a connection's decrypted runtime (plugin + config) is reused across requests. */
10
10
  export declare const WEBHOOK_RUNTIME_CACHE_MS = 5000;
11
+ /** The timings of {@link ChannelWebhooks}. */
12
+ export interface ChannelWebhookTimings {
13
+ /** The deadline of one request (ms), default {@link WEBHOOK_HANDLE_TIMEOUT_MS}. */
14
+ handleTimeoutMs: number;
15
+ /** How long a connection's runtime is reused (ms; 0 disables the cache), default {@link WEBHOOK_RUNTIME_CACHE_MS}. */
16
+ runtimeCacheMs: number;
17
+ }
18
+ /** Optional provider: {@link ChannelWebhookTimings} that replace some defaults (tests). */
19
+ export declare const CHANNEL_WEBHOOK_TIMINGS: unique symbol;
11
20
  /** Most connections whose runtime is cached in one process. */
12
21
  export declare const WEBHOOK_RUNTIME_CACHE_MAX = 1000;
13
22
  /**
@@ -15,17 +24,8 @@ export declare const WEBHOOK_RUNTIME_CACHE_MAX = 1000;
15
24
  * be rendered or sniffed by a browser).
16
25
  */
17
26
  export declare const WEBHOOK_SECURITY_HEADERS: Readonly<Record<string, string>>;
18
- export interface ChannelWebhooksDeps {
19
- connections: Pick<ChannelConnections, "row" | "runtime">;
20
- inbound: Pick<ChannelInbound, "onEvent">;
21
- log: Pick<Logger, "warn">;
22
- /** Defaults to {@link WEBHOOK_HANDLE_TIMEOUT_MS}. */
23
- handleTimeoutMs?: number;
24
- /** Defaults to {@link WEBHOOK_RUNTIME_CACHE_MS}; 0 disables the cache. */
25
- runtimeCacheMs?: number;
26
- }
27
27
  /**
28
- * Channel webhook inbound (F8 / F9), framework free. The gateway route
28
+ * Channel webhook inbound (F8 / F9), gateway role only. The gateway route
29
29
  * `POST /channels/webhook/:connectionId` hands every request here; the kernel applies no auth, so
30
30
  * everything a request can do goes through the plugin's `webhook.handle`, which verifies the
31
31
  * signature, decrypts and checks timestamps:
@@ -57,11 +57,17 @@ export interface ChannelWebhooksDeps {
57
57
  * counter keeps a fetch that started before `invalidateAll` from storing the old plugin instance.
58
58
  */
59
59
  export declare class ChannelWebhooks {
60
- private readonly deps;
60
+ private readonly connections;
61
+ private readonly inbound;
62
+ private readonly log;
61
63
  private readonly runtimes;
62
64
  /** Bumped by {@link invalidateAll}: a fetch started before the bump is not stored. */
63
65
  private generation;
64
- constructor(deps: ChannelWebhooksDeps);
66
+ /** The deadline of one request. */
67
+ private readonly handleTimeoutMs;
68
+ /** How long a connection's runtime is reused; 0 disables the cache. */
69
+ private readonly runtimeCacheMs;
70
+ constructor(connections: Pick<ChannelConnections, "row" | "runtime">, inbound: Pick<ChannelInbound, "onEvent">, log: Pick<Logger, "warn">, timings?: Partial<ChannelWebhookTimings>);
65
71
  /** Drops the cached runtime of one connection (on `channel.changed`). */
66
72
  invalidate(connectionId: string): void;
67
73
  /** Drops every cached runtime (a plugin was replaced, revoked or reloaded). */
@@ -1,5 +1,18 @@
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
+ };
10
+ import { Inject, Injectable, Optional } from "@nestjs/common";
1
11
  import { ApiError, errorBody } from "../errors.js";
2
12
  import { ExtensionUnloadedError } from "../extensions/inflight.js";
13
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
14
+ import { ChannelConnections } from "./connections.service.js";
15
+ import { ChannelInbound } from "./inbound.js";
3
16
  /**
4
17
  * Deadline of one webhook request: connection lookups, the plugin's `webhook.handle` and handing
5
18
  * its events to `onEvent` (platform ack deadlines are a few seconds). Past it the kernel answers 503.
@@ -7,6 +20,8 @@ import { ExtensionUnloadedError } from "../extensions/inflight.js";
7
20
  export const WEBHOOK_HANDLE_TIMEOUT_MS = 10_000;
8
21
  /** How long a connection's decrypted runtime (plugin + config) is reused across requests. */
9
22
  export const WEBHOOK_RUNTIME_CACHE_MS = 5_000;
23
+ /** Optional provider: {@link ChannelWebhookTimings} that replace some defaults (tests). */
24
+ export const CHANNEL_WEBHOOK_TIMINGS = Symbol("CHANNEL_WEBHOOK_TIMINGS");
10
25
  /** Most connections whose runtime is cached in one process. */
11
26
  export const WEBHOOK_RUNTIME_CACHE_MAX = 1_000;
12
27
  const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
@@ -60,7 +75,7 @@ function raceAbort(p, signal) {
60
75
  });
61
76
  }
62
77
  /**
63
- * Channel webhook inbound (F8 / F9), framework free. The gateway route
78
+ * Channel webhook inbound (F8 / F9), gateway role only. The gateway route
64
79
  * `POST /channels/webhook/:connectionId` hands every request here; the kernel applies no auth, so
65
80
  * everything a request can do goes through the plugin's `webhook.handle`, which verifies the
66
81
  * signature, decrypts and checks timestamps:
@@ -91,13 +106,23 @@ function raceAbort(p, signal) {
91
106
  * mode switch, deletion…) and {@link invalidateAll} when a plugin instance changes; a generation
92
107
  * counter keeps a fetch that started before `invalidateAll` from storing the old plugin instance.
93
108
  */
94
- export class ChannelWebhooks {
95
- deps;
109
+ let ChannelWebhooks = class ChannelWebhooks {
110
+ connections;
111
+ inbound;
112
+ log;
96
113
  runtimes = new Map();
97
114
  /** Bumped by {@link invalidateAll}: a fetch started before the bump is not stored. */
98
115
  generation = 0;
99
- constructor(deps) {
100
- this.deps = deps;
116
+ /** The deadline of one request. */
117
+ handleTimeoutMs;
118
+ /** How long a connection's runtime is reused; 0 disables the cache. */
119
+ runtimeCacheMs;
120
+ constructor(connections, inbound, log, timings = {}) {
121
+ this.connections = connections;
122
+ this.inbound = inbound;
123
+ this.log = log;
124
+ this.handleTimeoutMs = timings.handleTimeoutMs ?? WEBHOOK_HANDLE_TIMEOUT_MS;
125
+ this.runtimeCacheMs = timings.runtimeCacheMs ?? WEBHOOK_RUNTIME_CACHE_MS;
101
126
  }
102
127
  /** Drops the cached runtime of one connection (on `channel.changed`). */
103
128
  invalidate(connectionId) {
@@ -112,13 +137,13 @@ export class ChannelWebhooks {
112
137
  return secure(await this.respond(connectionId, request, signal));
113
138
  }
114
139
  async runtime(connectionId, deadline) {
115
- const ttl = this.deps.runtimeCacheMs ?? WEBHOOK_RUNTIME_CACHE_MS;
140
+ const ttl = this.runtimeCacheMs;
116
141
  const now = Date.now();
117
142
  const hit = this.runtimes.get(connectionId);
118
143
  if (hit && hit.expiresAt > now)
119
144
  return hit.value;
120
145
  const generation = this.generation;
121
- const value = await raceAbort(this.deps.connections.runtime(connectionId), deadline);
146
+ const value = await raceAbort(this.connections.runtime(connectionId), deadline);
122
147
  // A plugin instance changed while fetching: use the value once, keep no stale instance
123
148
  if (ttl > 0 && generation === this.generation) {
124
149
  this.runtimes.delete(connectionId);
@@ -137,22 +162,19 @@ export class ChannelWebhooks {
137
162
  return notFound();
138
163
  // One deadline for the whole request (DB lookups, handle, onEvent); also aborts when the
139
164
  // platform hangs up
140
- const deadline = AbortSignal.any([
141
- signal,
142
- AbortSignal.timeout(this.deps.handleTimeoutMs ?? WEBHOOK_HANDLE_TIMEOUT_MS),
143
- ]);
165
+ const deadline = AbortSignal.any([signal, AbortSignal.timeout(this.handleTimeoutMs)]);
144
166
  try {
145
167
  return await this.respondBefore(connectionId, request, deadline);
146
168
  }
147
169
  catch (err) {
148
170
  if (!(err instanceof WebhookDeadline))
149
171
  throw err;
150
- this.deps.log.warn("channel webhook timed out; the platform will retry", { connectionId });
172
+ this.log.warn("channel webhook timed out; the platform will retry", { connectionId });
151
173
  return retryLater();
152
174
  }
153
175
  }
154
176
  async respondBefore(connectionId, request, deadline) {
155
- const row = await raceAbort(this.deps.connections.row(connectionId), deadline);
177
+ const row = await raceAbort(this.connections.row(connectionId), deadline);
156
178
  if (row === undefined ||
157
179
  row.inboundMode !== "webhook" ||
158
180
  row.status !== "active" ||
@@ -171,7 +193,7 @@ export class ChannelWebhooks {
171
193
  (err.code === "channel.not_found" || err.code === "extension.not_enabled")) {
172
194
  return notFound();
173
195
  }
174
- this.deps.log.warn("channel webhook cannot load its connection", {
196
+ this.log.warn("channel webhook cannot load its connection", {
175
197
  connectionId,
176
198
  code: err instanceof ApiError ? err.code : undefined,
177
199
  });
@@ -200,13 +222,13 @@ export class ChannelWebhooks {
200
222
  }
201
223
  catch (err) {
202
224
  if (err instanceof WebhookDeadline) {
203
- this.deps.log.warn("channel webhook handler timed out; the platform will retry", {
225
+ this.log.warn("channel webhook handler timed out; the platform will retry", {
204
226
  connectionId,
205
227
  });
206
228
  return retryLater();
207
229
  }
208
230
  // The kernel log redacts the connection's secrets (runtime() registered them)
209
- this.deps.log.warn("channel webhook handler failed", { connectionId, err });
231
+ this.log.warn("channel webhook handler failed", { connectionId, err });
210
232
  return jsonError(500, "internal", "Internal error");
211
233
  }
212
234
  finally {
@@ -223,10 +245,10 @@ export class ChannelWebhooks {
223
245
  break;
224
246
  for (const e of events) {
225
247
  try {
226
- await raceAbort(this.deps.inbound.onEvent(connectionId, e), deadline);
248
+ await raceAbort(this.inbound.onEvent(connectionId, e), deadline);
227
249
  }
228
250
  catch (err) {
229
- this.deps.log.warn("channel webhook event not accepted; the platform will retry", {
251
+ this.log.warn("channel webhook event not accepted; the platform will retry", {
230
252
  connectionId,
231
253
  ...(err instanceof WebhookDeadline ? { timedOut: true } : { err }),
232
254
  });
@@ -236,10 +258,19 @@ export class ChannelWebhooks {
236
258
  return sanitize(result.ack);
237
259
  }
238
260
  }
239
- this.deps.log.warn("channel webhook handler returned an invalid result", { connectionId });
261
+ this.log.warn("channel webhook handler returned an invalid result", { connectionId });
240
262
  return jsonError(500, "internal", "Internal error");
241
263
  }
242
- }
264
+ };
265
+ ChannelWebhooks = __decorate([
266
+ Injectable(),
267
+ __param(0, Inject(ChannelConnections)),
268
+ __param(1, Inject(ChannelInbound)),
269
+ __param(2, Inject(KERNEL_LOGGER)),
270
+ __param(3, Optional()),
271
+ __param(3, Inject(CHANNEL_WEBHOOK_TIMINGS))
272
+ ], ChannelWebhooks);
273
+ export { ChannelWebhooks };
243
274
  /** Generic codes for the statuses a plugin may reject with (same as the HTTP error filter's). */
244
275
  const REJECT_CODES = { 400: "validation_failed", 401: "auth.required", 403: "forbidden" };
245
276
  function rejected(status) {
@@ -11,8 +11,9 @@ export declare function resolveConfig(raw: unknown, env: NodeJS.ProcessEnv): Ker
11
11
  /** 选来源 → 深合并环境变量覆盖(优先级最高)→ 校验。 */
12
12
  export declare function loadConfig(env: NodeJS.ProcessEnv): Promise<KernelConfig>;
13
13
  /**
14
- * 与 {@link loadConfig} 相同,另给出各插件部署配置字段的来源(文件 / Nacos / 环境变量,见
15
- * {@link extensionConfigSources}):传给 `createKernel` 的 `extensionConfigSources`,后台据此把这些字段标为只读(D8)。
14
+ * Like {@link loadConfig}, and also where each extension deployment config field comes from (file
15
+ * / Nacos / environment, see {@link extensionConfigSources}): the `extensionConfigSources` option of
16
+ * `startKernelApp` / `createKernelApp`, by which the admin console marks these fields read-only (D8).
16
17
  */
17
18
  export declare function loadConfigWithSources(env: NodeJS.ProcessEnv): Promise<{
18
19
  config: KernelConfig;
@@ -85,8 +85,9 @@ export async function loadConfig(env) {
85
85
  return resolveConfig(await selectConfigSource(env).load(), env);
86
86
  }
87
87
  /**
88
- * 与 {@link loadConfig} 相同,另给出各插件部署配置字段的来源(文件 / Nacos / 环境变量,见
89
- * {@link extensionConfigSources}):传给 `createKernel` 的 `extensionConfigSources`,后台据此把这些字段标为只读(D8)。
88
+ * Like {@link loadConfig}, and also where each extension deployment config field comes from (file
89
+ * / Nacos / environment, see {@link extensionConfigSources}): the `extensionConfigSources` option of
90
+ * `startKernelApp` / `createKernelApp`, by which the admin console marks these fields read-only (D8).
90
91
  */
91
92
  export async function loadConfigWithSources(env) {
92
93
  const raw = await selectConfigSource(env).load();
@@ -101,7 +101,14 @@ export function createNacosSource(opts) {
101
101
  return doFetch(withToken(fresh), init);
102
102
  }
103
103
  async function fetchText(signal) {
104
- const qs = new URLSearchParams({ dataId: opts.dataId, group, namespaceId: opts.namespace });
104
+ // `tenant` too: Nacos 2.3 authorizes a namespace-scoped user by `tenant` only, and treats a
105
+ // request without it as the public namespace (403 for a user granted just this namespace)
106
+ const qs = new URLSearchParams({
107
+ dataId: opts.dataId,
108
+ group,
109
+ namespaceId: opts.namespace,
110
+ tenant: opts.namespace,
111
+ });
105
112
  const timeout = AbortSignal.timeout(timeoutMs);
106
113
  const combined = signal ? AbortSignal.any([signal, timeout]) : timeout;
107
114
  let res;
@@ -150,7 +157,9 @@ export function createNacosSource(opts) {
150
157
  const body = new URLSearchParams({ "Listening-Configs": `${entry}\u0001` });
151
158
  let res;
152
159
  try {
153
- res = await authedFetch(`${server}/nacos/v1/cs/configs/listener`, {
160
+ // The namespace in the body is not what Nacos authorizes; `tenant` is (see fetchText)
161
+ const qs = new URLSearchParams({ tenant: opts.namespace });
162
+ res = await authedFetch(`${server}/nacos/v1/cs/configs/listener?${qs}`, {
154
163
  method: "POST",
155
164
  headers: {
156
165
  "Long-Pulling-Timeout": String(LONG_POLL_MS),
@@ -72,6 +72,9 @@ export declare const KernelConfigSchema: z.ZodObject<{
72
72
  npmToken: z.ZodOptional<z.ZodString>;
73
73
  maxBytes: z.ZodDefault<z.ZodNumber>;
74
74
  }, z.core.$strip>>;
75
+ bootstrap: z.ZodPrefault<z.ZodObject<{
76
+ dir: z.ZodDefault<z.ZodString>;
77
+ }, z.core.$strip>>;
75
78
  catalog: z.ZodPrefault<z.ZodObject<{
76
79
  staleInstallMinutes: z.ZodDefault<z.ZodNumber>;
77
80
  }, z.core.$strip>>;
@@ -98,6 +101,7 @@ export declare const KernelConfigSchema: z.ZodObject<{
98
101
  port: z.ZodDefault<z.ZodNumber>;
99
102
  trustProxy: z.ZodDefault<z.ZodPreprocess<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodArray<z.ZodString>]>, unknown>>;
100
103
  replicaId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
104
+ swagger: z.ZodDefault<z.ZodBoolean>;
101
105
  publicUrl: z.ZodOptional<z.ZodURL>;
102
106
  }, z.core.$strip>>;
103
107
  roles: z.ZodDefault<z.ZodPreprocess<z.ZodArray<z.ZodEnum<{
@@ -211,13 +215,24 @@ export declare const KernelConfigSchema: z.ZodObject<{
211
215
  usageReportConcurrency: z.ZodDefault<z.ZodNumber>;
212
216
  usageReportKeepHours: z.ZodDefault<z.ZodNumber>;
213
217
  }, z.core.$strip>>;
214
- log: z.ZodDefault<z.ZodObject<{
218
+ log: z.ZodPrefault<z.ZodObject<{
215
219
  level: z.ZodDefault<z.ZodEnum<{
216
220
  debug: "debug";
217
221
  error: "error";
218
222
  info: "info";
219
223
  warn: "warn";
220
224
  }>>;
225
+ format: z.ZodDefault<z.ZodEnum<{
226
+ auto: "auto";
227
+ json: "json";
228
+ pretty: "pretty";
229
+ }>>;
230
+ loki: z.ZodPrefault<z.ZodObject<{
231
+ url: z.ZodOptional<z.ZodURL>;
232
+ username: z.ZodOptional<z.ZodString>;
233
+ password: z.ZodOptional<z.ZodString>;
234
+ labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
235
+ }, z.core.$strip>>;
221
236
  }, z.core.$strip>>;
222
237
  }, z.core.$strip>;
223
238
  export type KernelConfig = z.infer<typeof KernelConfigSchema>;
@@ -1,7 +1,7 @@
1
1
  import { isIP } from "node:net";
2
2
  import { DOCUMENT_MEDIA_TYPES, IMAGE_MEDIA_TYPES, validateAllowHost, } from "@capybara-hq/plugin-sdk";
3
3
  import { z } from "zod";
4
- import { LOG_LEVELS } from "../log.js";
4
+ import { LOG_FORMATS, LOG_LEVELS } from "../log.js";
5
5
  import { noProxyEntryProblem, proxyUrlProblem } from "../net/proxy.js";
6
6
  import { privateHostEntryProblem } from "../net/public-address.js";
7
7
  /**
@@ -207,9 +207,9 @@ export const KernelConfigSchema = z.object({
207
207
  dir: z
208
208
  .string()
209
209
  .min(1)
210
- .default("/var/lib/capybara/plugins")
210
+ .default(".capybara/plugins")
211
211
  .meta(meta({
212
- description: "Local directory where each replica unpacks installed extension packages (<dir>/<name>/<first 16 hex of sha256>/); safe to wipe, replicas re-download from the package store",
212
+ description: "Local directory where each replica unpacks installed extension packages (<dir>/<name>/<first 16 hex of sha256>/), relative to the working directory unless absolute (the image sets /var/lib/capybara/plugins); safe to wipe, replicas re-download from the package store",
213
213
  })),
214
214
  drainSeconds: z
215
215
  .number()
@@ -277,6 +277,17 @@ export const KernelConfigSchema = z.object({
277
277
  })),
278
278
  })
279
279
  .prefault({}),
280
+ bootstrap: z
281
+ .object({
282
+ dir: z
283
+ .string()
284
+ .min(1)
285
+ .default("bootstrap")
286
+ .meta(meta({
287
+ description: "Offline directory for the bootstrap plugins, resolved against the working directory (/app/bootstrap in the image): a .tgz file here whose sha512 matches a pinned plugin is installed instead of downloading it from packages.npmRegistry",
288
+ })),
289
+ })
290
+ .prefault({}),
280
291
  catalog: z
281
292
  .object({
282
293
  staleInstallMinutes: z
@@ -325,7 +336,7 @@ export const KernelConfigSchema = z.object({
325
336
  .min(1)
326
337
  .default(360)
327
338
  .meta(meta({
328
- description: "Minutes between periodic refreshes of every enabled marketplace (one maintenance job for all replicas)",
339
+ description: "Minutes between periodic refreshes of every enabled marketplace (one run per period across all replicas)",
329
340
  })),
330
341
  maxIndexBytes: z
331
342
  .number()
@@ -461,6 +472,12 @@ export const KernelConfigSchema = z.object({
461
472
  .meta(meta({
462
473
  description: "Optional replica identifier; when set, every HTTP response carries an x-capybara-replica header with this value (used by the dual-replica test harness and for debugging load balancers)",
463
474
  })),
475
+ swagger: z
476
+ .boolean()
477
+ .default(false)
478
+ .meta(meta({
479
+ description: "Serve the OpenAPI document and swagger UI at /docs (JSON at /docs-json). The routes are not authenticated, so enable it in development and trials only",
480
+ })),
464
481
  publicUrl: z
465
482
  .url()
466
483
  .optional()
@@ -468,7 +485,7 @@ export const KernelConfigSchema = z.object({
468
485
  description: "Externally reachable origin of the web app (apps/web, which proxies /api to the kernel), not the kernel's own address; required for OAuth connectors: the redirect URI is <publicUrl>/api/v1/oauth/callback (served through the web /api proxy, which also carries the OAuth binding cookie) and the callback redirects to web pages under it, e.g. https://capybara.example.com",
469
486
  })),
470
487
  })
471
- .default({ port: 8080, trustProxy: false }),
488
+ .default({ port: 8080, trustProxy: false, swagger: false }),
472
489
  roles: z
473
490
  .preprocess(
474
491
  // Also accept a comma-separated string (CAPYBARA_ROLES=api,worker; env values that are not
@@ -936,7 +953,7 @@ export const KernelConfigSchema = z.object({
936
953
  .min(1)
937
954
  .default("capybara-sandbox:latest")
938
955
  .meta(meta({
939
- description: "Image for conversation sandboxes, used by the Docker sandbox extension (built from plugins/sandbox-docker/image/Dockerfile; pre-pull it on every Docker node). The E2B extension ignores it and uses its own template setting",
956
+ description: "Image for conversation sandboxes, used by the Docker sandbox extension (built from plugins/sandbox-docker/image of capybara-hq/plugins, e.g. by the compose sandbox profile; pre-pull it on every Docker node). The E2B extension ignores it and uses its own template setting",
940
957
  })),
941
958
  lockWaitSeconds: z
942
959
  .number()
@@ -1146,6 +1163,36 @@ export const KernelConfigSchema = z.object({
1146
1163
  .enum(LOG_LEVELS)
1147
1164
  .default("info")
1148
1165
  .meta(meta({ hot: true, description: "Log level" })),
1166
+ format: z
1167
+ .enum(LOG_FORMATS)
1168
+ .default("auto")
1169
+ .meta(meta({
1170
+ description: "Console log format: pretty (one readable line per record, colored on a terminal), json (one JSON line per record) or auto (pretty when stdout is a terminal, else json, so containers log JSON)",
1171
+ })),
1172
+ loki: z
1173
+ .object({
1174
+ url: z
1175
+ .url({ protocol: /^https?$/ })
1176
+ .optional()
1177
+ .meta(meta({
1178
+ description: "Loki base URL (e.g. http://loki:3100) or its full push URL; when set, every log record is also pushed there (batched, JSON lines). Unset: nothing is sent",
1179
+ })),
1180
+ username: z
1181
+ .string()
1182
+ .optional()
1183
+ .meta(meta({ description: "Loki basic auth user name" })),
1184
+ password: z
1185
+ .string()
1186
+ .optional()
1187
+ .meta(meta({ secret: true, description: "Loki basic auth password" })),
1188
+ labels: z
1189
+ .record(z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/), z.string())
1190
+ .default({})
1191
+ .meta(meta({
1192
+ description: 'Extra Loki stream labels, e.g. {"env":"prod"}; every stream also has job (capybara unless set here), role (the process\'s roles) and level',
1193
+ })),
1194
+ })
1195
+ .prefault({}),
1149
1196
  })
1150
- .default({ level: "info" }),
1197
+ .prefault({}),
1151
1198
  });
@@ -0,0 +1,29 @@
1
+ import { type ExpressionBuilder } from "kysely";
2
+ import type { KernelDatabase } from "../db/kernel-schema.js";
3
+ import { KernelDb } from "../infra/database/kernel-db.js";
4
+ /**
5
+ * A sub-agent's conversation is reached through its parent (sub-agents spec §6.1, review m6, the
6
+ * same rule as its trajectory): the parent is a chat conversation of the same owner whose agent is
7
+ * not deleted and still visible to the viewer. Any other kind passes. The child's own `agent_id`
8
+ * (the dispatched agent for an org agent, §5.5) is checked on top by the callers.
9
+ */
10
+ export declare const parentReachable: (viewerAccountId: string) => (eb: ExpressionBuilder<KernelDatabase, "conversations">) => import("kysely").ExpressionWrapper<KernelDatabase, "conversations", import("kysely").SqlBool>;
11
+ /**
12
+ * Whether a person may still see a conversation (one query, no agent view): what the event stream,
13
+ * attachment downloads, file and output reads and the extension UI check. `ConversationsService`
14
+ * delegates to it; it depends on the database only, so the attachments (which the skills and tools
15
+ * use) can check access without the conversations module.
16
+ */
17
+ export declare class ConversationAccess {
18
+ private readonly db;
19
+ constructor(db: KernelDb);
20
+ /**
21
+ * 轻量的可见性判定(一条查询,不加载 agent 视图),供长连接(SSE)建立时与定期复核用:
22
+ * 会话属于该组织且归 viewer 所有、viewer 账号仍为 active、agent 未删除且对 viewer 仍可见
23
+ * (`visibleTo` 已含「组织未删除、viewer 仍是成员」)。
24
+ */
25
+ isAccessible(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
26
+ }
27
+ /** The one {@link ConversationAccess} (database only). */
28
+ export declare class ConversationAccessModule {
29
+ }