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

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 (1039) hide show
  1. package/bootstrap.json +85 -5
  2. package/dist/admin/admin-agents.controller.d.ts +28 -0
  3. package/dist/admin/admin-agents.controller.js +79 -0
  4. package/dist/admin/admin-connectors.controller.d.ts +29 -0
  5. package/dist/admin/admin-connectors.controller.js +79 -0
  6. package/dist/admin/admin-items.schemas.d.ts +42 -0
  7. package/dist/admin/admin-items.schemas.js +48 -0
  8. package/dist/admin/admin.controller.d.ts +52 -80
  9. package/dist/admin/admin.controller.js +112 -81
  10. package/dist/admin/admin.module.d.ts +4 -1
  11. package/dist/admin/admin.module.js +50 -4
  12. package/dist/admin/admin.schemas.d.ts +69 -0
  13. package/dist/admin/admin.schemas.js +53 -0
  14. package/dist/admin/audit.controller.d.ts +14 -0
  15. package/dist/admin/audit.controller.js +42 -0
  16. package/dist/admin/audit.schemas.d.ts +8 -0
  17. package/dist/admin/audit.schemas.js +17 -0
  18. package/dist/admin/extensions.controller.d.ts +34 -3
  19. package/dist/admin/extensions.controller.js +66 -8
  20. package/dist/admin/extensions.schemas.d.ts +7 -0
  21. package/dist/admin/extensions.schemas.js +10 -0
  22. package/dist/admin/health.service.d.ts +104 -0
  23. package/dist/admin/health.service.js +246 -0
  24. package/dist/admin/limit-defaults.d.ts +20 -0
  25. package/dist/admin/limit-defaults.js +10 -0
  26. package/dist/admin/overview.controller.d.ts +31 -0
  27. package/dist/admin/overview.controller.js +78 -0
  28. package/dist/admin/overview.schemas.d.ts +8 -0
  29. package/dist/admin/overview.schemas.js +13 -0
  30. package/dist/admin/overview.service.d.ts +112 -0
  31. package/dist/admin/overview.service.js +223 -0
  32. package/dist/admin/platform-audit.service.d.ts +41 -0
  33. package/dist/admin/platform-audit.service.js +70 -0
  34. package/dist/admin/setup-lock.d.ts +1 -1
  35. package/dist/admin/setup-lock.js +1 -1
  36. package/dist/admin/setup.controller.d.ts +1 -1
  37. package/dist/admin/setup.controller.js +1 -1
  38. package/dist/admin/setup.service.d.ts +4 -4
  39. package/dist/admin/setup.service.js +8 -8
  40. package/dist/admin/usage.service.d.ts +149 -0
  41. package/dist/admin/usage.service.js +321 -0
  42. package/dist/agents/admin-agents.d.ts +92 -0
  43. package/dist/agents/admin-agents.js +170 -0
  44. package/dist/agents/agent-lookup.d.ts +24 -0
  45. package/dist/agents/agent-lookup.js +46 -2
  46. package/dist/agents/agent-profile.service.d.ts +31 -0
  47. package/dist/agents/agent-profile.service.js +122 -0
  48. package/dist/agents/agents.controller.d.ts +53 -168
  49. package/dist/agents/agents.controller.js +163 -34
  50. package/dist/agents/agents.module.d.ts +6 -2
  51. package/dist/agents/agents.module.js +41 -7
  52. package/dist/agents/agents.schemas.d.ts +392 -0
  53. package/dist/agents/agents.schemas.js +126 -0
  54. package/dist/agents/agents.service.d.ts +121 -36
  55. package/dist/agents/agents.service.js +411 -121
  56. package/dist/agents/definition.d.ts +142 -21
  57. package/dist/agents/definition.js +389 -43
  58. package/dist/agents/from-template.d.ts +106 -0
  59. package/dist/agents/from-template.js +680 -0
  60. package/dist/agents/from-template.service.d.ts +72 -0
  61. package/dist/agents/from-template.service.js +178 -0
  62. package/dist/agents/instruction-files.d.ts +60 -0
  63. package/dist/agents/instruction-files.js +111 -0
  64. package/dist/agents/models.controller.d.ts +44 -6
  65. package/dist/agents/models.controller.js +84 -8
  66. package/dist/agents/org-templates.d.ts +186 -0
  67. package/dist/agents/org-templates.js +876 -0
  68. package/dist/agents/pending-connector-requests.d.ts +79 -0
  69. package/dist/agents/pending-connector-requests.js +215 -0
  70. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  71. package/dist/agents/pending-connectors.controller.js +91 -0
  72. package/dist/agents/pending-connectors.service.d.ts +62 -0
  73. package/dist/agents/pending-connectors.service.js +282 -0
  74. package/dist/agents/profile.d.ts +114 -0
  75. package/dist/agents/profile.js +55 -0
  76. package/dist/agents/readiness.controller.d.ts +26 -0
  77. package/dist/agents/readiness.controller.js +56 -0
  78. package/dist/agents/templates.controller.d.ts +77 -5
  79. package/dist/agents/templates.controller.js +153 -7
  80. package/dist/agents/templates.d.ts +127 -23
  81. package/dist/agents/templates.js +482 -44
  82. package/dist/agents/templates.schemas.d.ts +20 -0
  83. package/dist/agents/templates.schemas.js +45 -0
  84. package/dist/background/background.controller.d.ts +38 -0
  85. package/dist/background/background.controller.js +88 -0
  86. package/dist/background/background.module.d.ts +10 -0
  87. package/dist/background/background.module.js +39 -0
  88. package/dist/background/background.schemas.d.ts +10 -0
  89. package/dist/background/background.schemas.js +16 -0
  90. package/dist/background/finish.d.ts +44 -0
  91. package/dist/background/finish.js +95 -0
  92. package/dist/background/launch-lock.d.ts +15 -0
  93. package/dist/background/launch-lock.js +40 -0
  94. package/dist/background/launch.d.ts +42 -0
  95. package/dist/background/launch.js +77 -0
  96. package/dist/background/poll.job.d.ts +56 -0
  97. package/dist/background/poll.job.js +195 -0
  98. package/dist/background/render.d.ts +23 -0
  99. package/dist/background/render.js +48 -0
  100. package/dist/background/session.d.ts +48 -0
  101. package/dist/background/session.js +80 -0
  102. package/dist/background/status.d.ts +35 -0
  103. package/dist/background/status.js +57 -0
  104. package/dist/background/stop.d.ts +68 -0
  105. package/dist/background/stop.js +244 -0
  106. package/dist/background/store.d.ts +167 -0
  107. package/dist/background/store.js +361 -0
  108. package/dist/background/store.module.d.ts +6 -0
  109. package/dist/background/store.module.js +22 -0
  110. package/dist/background/tasks.service.d.ts +109 -0
  111. package/dist/background/tasks.service.js +271 -0
  112. package/dist/background/wake-rules.d.ts +66 -0
  113. package/dist/background/wake-rules.js +113 -0
  114. package/dist/background/wake.d.ts +30 -0
  115. package/dist/background/wake.js +63 -0
  116. package/dist/catalog/admin-catalog.controller.d.ts +136 -52
  117. package/dist/catalog/admin-catalog.controller.js +275 -65
  118. package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
  119. package/dist/catalog/admin-catalog.schemas.js +99 -0
  120. package/dist/catalog/appearance.schemas.d.ts +10 -0
  121. package/dist/catalog/appearance.schemas.js +20 -0
  122. package/dist/catalog/appearance.service.d.ts +105 -0
  123. package/dist/catalog/appearance.service.js +306 -0
  124. package/dist/catalog/catalog-content.d.ts +122 -35
  125. package/dist/catalog/catalog-content.js +122 -14
  126. package/dist/catalog/catalog-files.d.ts +42 -0
  127. package/dist/catalog/catalog-files.js +89 -0
  128. package/dist/catalog/catalog-import.module.d.ts +7 -0
  129. package/dist/catalog/catalog-import.module.js +63 -0
  130. package/dist/catalog/catalog-items.d.ts +122 -7
  131. package/dist/catalog/catalog-items.js +301 -13
  132. package/dist/catalog/catalog-scope.service.d.ts +293 -0
  133. package/dist/catalog/catalog-scope.service.js +1236 -0
  134. package/dist/catalog/catalog.module.d.ts +7 -9
  135. package/dist/catalog/catalog.module.js +47 -31
  136. package/dist/catalog/catalog.service.d.ts +122 -31
  137. package/dist/catalog/catalog.service.js +177 -105
  138. package/dist/catalog/claude/agents.js +15 -10
  139. package/dist/catalog/claude/translate.js +3 -0
  140. package/dist/catalog/cli.d.ts +11 -1
  141. package/dist/catalog/cli.js +29 -1
  142. package/dist/catalog/component-promotion.d.ts +96 -0
  143. package/dist/catalog/component-promotion.js +395 -0
  144. package/dist/catalog/component-scope.controller.d.ts +102 -0
  145. package/dist/catalog/component-scope.controller.js +257 -0
  146. package/dist/catalog/component-scope.schemas.d.ts +118 -0
  147. package/dist/catalog/component-scope.schemas.js +97 -0
  148. package/dist/catalog/component-scope.service.d.ts +394 -0
  149. package/dist/catalog/component-scope.service.js +1133 -0
  150. package/dist/catalog/component-state.d.ts +207 -0
  151. package/dist/catalog/component-state.js +484 -0
  152. package/dist/catalog/git-source.d.ts +9 -1
  153. package/dist/catalog/git-source.js +29 -2
  154. package/dist/catalog/job-ids.d.ts +30 -0
  155. package/dist/catalog/job-ids.js +25 -0
  156. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  157. package/dist/catalog/marketplace-icons.d.ts +64 -0
  158. package/dist/catalog/marketplace-icons.js +131 -0
  159. package/dist/catalog/marketplaces.controller.d.ts +50 -41
  160. package/dist/catalog/marketplaces.controller.js +130 -46
  161. package/dist/catalog/marketplaces.schemas.d.ts +48 -0
  162. package/dist/catalog/marketplaces.schemas.js +53 -0
  163. package/dist/catalog/marketplaces.service.d.ts +110 -17
  164. package/dist/catalog/marketplaces.service.js +337 -29
  165. package/dist/catalog/org-catalog.controller.d.ts +114 -62
  166. package/dist/catalog/org-catalog.controller.js +191 -98
  167. package/dist/catalog/org-catalog.schemas.d.ts +104 -0
  168. package/dist/catalog/org-catalog.schemas.js +107 -0
  169. package/dist/catalog/org-catalog.service.d.ts +72 -33
  170. package/dist/catalog/org-catalog.service.js +367 -158
  171. package/dist/catalog/org-extension-switch.d.ts +41 -0
  172. package/dist/catalog/org-extension-switch.js +115 -0
  173. package/dist/catalog/org-extension.controller.d.ts +133 -0
  174. package/dist/catalog/org-extension.controller.js +313 -0
  175. package/dist/catalog/org-extension.schemas.d.ts +15 -0
  176. package/dist/catalog/org-extension.schemas.js +22 -0
  177. package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
  178. package/dist/catalog/org-plugin-uploads.controller.js +200 -0
  179. package/dist/catalog/org-plugin-uploads.d.ts +71 -0
  180. package/dist/catalog/org-plugin-uploads.js +122 -0
  181. package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
  182. package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
  183. package/dist/catalog/owned-items.d.ts +188 -0
  184. package/dist/catalog/owned-items.js +808 -0
  185. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  186. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  187. package/dist/catalog/ownership.d.ts +172 -0
  188. package/dist/catalog/ownership.js +326 -0
  189. package/dist/catalog/platform-components.d.ts +243 -0
  190. package/dist/catalog/platform-components.js +872 -0
  191. package/dist/catalog/platform-migration.d.ts +115 -0
  192. package/dist/catalog/platform-migration.js +583 -0
  193. package/dist/catalog/plugin-import.d.ts +254 -47
  194. package/dist/catalog/plugin-import.js +810 -112
  195. package/dist/catalog/plugin-install.d.ts +205 -42
  196. package/dist/catalog/plugin-install.js +828 -126
  197. package/dist/catalog/plugin-package.d.ts +43 -4
  198. package/dist/catalog/plugin-package.js +194 -7
  199. package/dist/catalog/plugin-upgrade.d.ts +308 -225
  200. package/dist/catalog/plugin-upgrade.js +1325 -1131
  201. package/dist/catalog/request-rules.d.ts +65 -0
  202. package/dist/catalog/request-rules.js +217 -0
  203. package/dist/catalog/requests.service.d.ts +194 -118
  204. package/dist/catalog/requests.service.js +530 -343
  205. package/dist/catalog/reserved-names.d.ts +8 -0
  206. package/dist/catalog/reserved-names.js +42 -0
  207. package/dist/catalog/scope-orgs.d.ts +21 -0
  208. package/dist/catalog/scope-orgs.js +67 -0
  209. package/dist/catalog/scope-state.d.ts +35 -0
  210. package/dist/catalog/scope-state.js +87 -0
  211. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  212. package/dist/catalog/scope-sync-workers.js +29 -0
  213. package/dist/catalog/scope-sync.d.ts +176 -0
  214. package/dist/catalog/scope-sync.js +576 -0
  215. package/dist/catalog/scope.d.ts +42 -0
  216. package/dist/catalog/scope.js +42 -0
  217. package/dist/catalog/unshare.d.ts +22 -0
  218. package/dist/catalog/unshare.js +119 -0
  219. package/dist/channels/actions.js +10 -3
  220. package/dist/channels/cards.d.ts +36 -10
  221. package/dist/channels/cards.js +100 -25
  222. package/dist/channels/channels.module.js +13 -2
  223. package/dist/channels/channels.schemas.d.ts +41 -0
  224. package/dist/channels/channels.schemas.js +40 -0
  225. package/dist/channels/connections.controller.d.ts +46 -37
  226. package/dist/channels/connections.controller.js +76 -34
  227. package/dist/channels/connections.service.d.ts +102 -10
  228. package/dist/channels/connections.service.js +271 -24
  229. package/dist/channels/inbound.d.ts +11 -1
  230. package/dist/channels/inbound.js +87 -7
  231. package/dist/channels/outbound.d.ts +14 -1
  232. package/dist/channels/outbound.js +64 -15
  233. package/dist/channels/phrases.d.ts +33 -2
  234. package/dist/channels/phrases.js +29 -1
  235. package/dist/channels/supervisor.d.ts +2 -0
  236. package/dist/channels/supervisor.js +4 -0
  237. package/dist/channels/threads.d.ts +5 -0
  238. package/dist/channels/threads.js +8 -0
  239. package/dist/channels/webhook.d.ts +21 -1
  240. package/dist/channels/webhook.js +39 -4
  241. package/dist/client/client-access.service.d.ts +102 -0
  242. package/dist/client/client-access.service.js +303 -0
  243. package/dist/client/client-builds.service.d.ts +109 -0
  244. package/dist/client/client-builds.service.js +229 -0
  245. package/dist/client/client-delivery.controller.d.ts +25 -0
  246. package/dist/client/client-delivery.controller.js +66 -0
  247. package/dist/client/client-files.d.ts +48 -0
  248. package/dist/client/client-files.js +136 -0
  249. package/dist/client/client-reports.cron.d.ts +13 -0
  250. package/dist/client/client-reports.cron.js +42 -0
  251. package/dist/client/client-reports.service.d.ts +30 -0
  252. package/dist/client/client-reports.service.js +102 -0
  253. package/dist/client/client-sign-in.service.d.ts +21 -0
  254. package/dist/client/client-sign-in.service.js +49 -0
  255. package/dist/client/client.controller.d.ts +49 -0
  256. package/dist/client/client.controller.js +129 -0
  257. package/dist/client/client.module.d.ts +8 -0
  258. package/dist/client/client.module.js +28 -0
  259. package/dist/client/client.schemas.d.ts +61 -0
  260. package/dist/client/client.schemas.js +27 -0
  261. package/dist/config/docs.js +5 -1
  262. package/dist/config/schema.d.ts +35 -2
  263. package/dist/config/schema.js +216 -21
  264. package/dist/conversations/access.d.ts +6 -4
  265. package/dist/conversations/access.js +29 -5
  266. package/dist/conversations/agent-tree.d.ts +46 -0
  267. package/dist/conversations/agent-tree.js +92 -0
  268. package/dist/conversations/artifacts.d.ts +1 -1
  269. package/dist/conversations/artifacts.js +1 -1
  270. package/dist/conversations/attachments.service.d.ts +30 -0
  271. package/dist/conversations/attachments.service.js +130 -5
  272. package/dist/conversations/conversations.controller.d.ts +79 -44
  273. package/dist/conversations/conversations.controller.js +133 -82
  274. package/dist/conversations/conversations.module.d.ts +1 -1
  275. package/dist/conversations/conversations.module.js +10 -7
  276. package/dist/conversations/conversations.schemas.d.ts +52 -0
  277. package/dist/conversations/conversations.schemas.js +79 -0
  278. package/dist/conversations/conversations.service.d.ts +161 -13
  279. package/dist/conversations/conversations.service.js +329 -57
  280. package/dist/conversations/device-status.d.ts +24 -0
  281. package/dist/conversations/device-status.js +71 -0
  282. package/dist/conversations/event-log.d.ts +45 -9
  283. package/dist/conversations/event-log.js +113 -6
  284. package/dist/conversations/events.d.ts +255 -9
  285. package/dist/conversations/events.js +250 -34
  286. package/dist/conversations/message-context.d.ts +79 -0
  287. package/dist/conversations/message-context.js +145 -0
  288. package/dist/conversations/queue.d.ts +5 -2
  289. package/dist/conversations/queue.js +24 -4
  290. package/dist/conversations/queue.service.d.ts +2 -2
  291. package/dist/conversations/queue.service.js +21 -3
  292. package/dist/conversations/titles.d.ts +12 -3
  293. package/dist/conversations/titles.js +40 -16
  294. package/dist/conversations/tree.d.ts +17 -0
  295. package/dist/conversations/tree.js +42 -0
  296. package/dist/ctx/create-ctx.d.ts +48 -5
  297. package/dist/ctx/create-ctx.js +174 -34
  298. package/dist/db/kernel-schema.d.ts +668 -27
  299. package/dist/db/pool.d.ts +5 -0
  300. package/dist/db/pool.js +3 -0
  301. package/dist/devices/access.d.ts +66 -0
  302. package/dist/devices/access.js +113 -0
  303. package/dist/devices/conversation-devices.d.ts +75 -0
  304. package/dist/devices/conversation-devices.js +230 -0
  305. package/dist/devices/devices.controller.d.ts +36 -0
  306. package/dist/devices/devices.controller.js +124 -0
  307. package/dist/devices/devices.module.d.ts +8 -0
  308. package/dist/devices/devices.module.js +34 -0
  309. package/dist/devices/devices.schemas.d.ts +3 -0
  310. package/dist/devices/devices.schemas.js +14 -0
  311. package/dist/devices/devices.service.d.ts +251 -0
  312. package/dist/devices/devices.service.js +791 -0
  313. package/dist/devices/dto.d.ts +25 -0
  314. package/dist/devices/dto.js +12 -0
  315. package/dist/devices/label.d.ts +11 -0
  316. package/dist/devices/label.js +25 -0
  317. package/dist/devices/legacy-cleanup.job.d.ts +34 -0
  318. package/dist/devices/legacy-cleanup.job.js +141 -0
  319. package/dist/errors.d.ts +215 -3
  320. package/dist/errors.js +215 -3
  321. package/dist/evals/evals.module.js +11 -2
  322. package/dist/evals/evals.schemas.d.ts +110 -0
  323. package/dist/evals/evals.schemas.js +107 -0
  324. package/dist/evals/reconstruct.d.ts +18 -9
  325. package/dist/evals/reconstruct.js +36 -10
  326. package/dist/evals/recorded-tools.d.ts +37 -1
  327. package/dist/evals/recorded-tools.js +120 -10
  328. package/dist/evals/run-replay.d.ts +20 -3
  329. package/dist/evals/run-replay.js +78 -14
  330. package/dist/evals/runs.controller.d.ts +2 -57
  331. package/dist/evals/runs.controller.js +1 -42
  332. package/dist/evals/runs.service.d.ts +8 -7
  333. package/dist/evals/runs.service.js +45 -30
  334. package/dist/evals/sets.controller.d.ts +2 -28
  335. package/dist/evals/sets.controller.js +1 -31
  336. package/dist/evals/sets.service.d.ts +7 -7
  337. package/dist/evals/sets.service.js +23 -17
  338. package/dist/evals/snapshot.d.ts +3 -2
  339. package/dist/evals/snapshot.js +17 -4
  340. package/dist/evals/step-replay.d.ts +4 -6
  341. package/dist/evals/step-replay.js +16 -9
  342. package/dist/evals/trajectory.d.ts +5 -3
  343. package/dist/evals/trajectory.js +4 -1
  344. package/dist/evals/trajectory.service.d.ts +8 -3
  345. package/dist/evals/trajectory.service.js +26 -14
  346. package/dist/evals/worker.d.ts +5 -5
  347. package/dist/evals/worker.js +9 -3
  348. package/dist/extensions/admin-ops.d.ts +81 -14
  349. package/dist/extensions/admin-ops.js +181 -47
  350. package/dist/extensions/admin-view.d.ts +57 -10
  351. package/dist/extensions/admin-view.js +249 -27
  352. package/dist/extensions/approvals.d.ts +12 -2
  353. package/dist/extensions/blobs.d.ts +14 -1
  354. package/dist/extensions/blobs.js +49 -5
  355. package/dist/extensions/bootstrap.d.ts +41 -5
  356. package/dist/extensions/bootstrap.js +121 -19
  357. package/dist/extensions/cli.d.ts +12 -0
  358. package/dist/extensions/cli.js +11 -2
  359. package/dist/extensions/config-hash.d.ts +10 -0
  360. package/dist/extensions/config-hash.js +38 -0
  361. package/dist/extensions/config-issues.d.ts +13 -1
  362. package/dist/extensions/config-issues.js +22 -5
  363. package/dist/extensions/config-json-schema.d.ts +43 -7
  364. package/dist/extensions/config-json-schema.js +124 -58
  365. package/dist/extensions/deployment-config-store.d.ts +6 -0
  366. package/dist/extensions/deployment-config.d.ts +94 -9
  367. package/dist/extensions/deployment-config.js +255 -34
  368. package/dist/extensions/display-name.d.ts +22 -0
  369. package/dist/extensions/display-name.js +77 -0
  370. package/dist/extensions/effective-config.d.ts +133 -0
  371. package/dist/extensions/effective-config.js +379 -0
  372. package/dist/extensions/extensions.module.js +31 -12
  373. package/dist/extensions/guide-places.d.ts +68 -0
  374. package/dist/extensions/guide-places.js +152 -0
  375. package/dist/extensions/hooks.d.ts +37 -4
  376. package/dist/extensions/hooks.js +82 -16
  377. package/dist/extensions/host.d.ts +105 -12
  378. package/dist/extensions/host.js +372 -87
  379. package/dist/extensions/installs.d.ts +30 -9
  380. package/dist/extensions/installs.js +57 -16
  381. package/dist/extensions/instance.d.ts +17 -2
  382. package/dist/extensions/instance.js +21 -0
  383. package/dist/extensions/ledger.d.ts +1 -1
  384. package/dist/extensions/locks.d.ts +12 -0
  385. package/dist/extensions/locks.js +26 -0
  386. package/dist/extensions/org-config.d.ts +97 -7
  387. package/dist/extensions/org-config.js +215 -45
  388. package/dist/extensions/org-levels.d.ts +37 -0
  389. package/dist/extensions/org-levels.js +71 -0
  390. package/dist/extensions/org-overrides.d.ts +151 -0
  391. package/dist/extensions/org-overrides.js +524 -0
  392. package/dist/extensions/package.d.ts +18 -4
  393. package/dist/extensions/package.js +56 -3
  394. package/dist/extensions/permission-set.d.ts +35 -5
  395. package/dist/extensions/permission-set.js +36 -5
  396. package/dist/extensions/permission-view.d.ts +106 -13
  397. package/dist/extensions/permission-view.js +33 -15
  398. package/dist/extensions/plugin-guides.d.ts +282 -0
  399. package/dist/extensions/plugin-guides.js +554 -0
  400. package/dist/extensions/plugin-icons.d.ts +54 -0
  401. package/dist/extensions/plugin-icons.js +125 -0
  402. package/dist/extensions/plugin-items.d.ts +21 -0
  403. package/dist/extensions/plugin-items.js +42 -0
  404. package/dist/extensions/point-defaults.controller.d.ts +28 -0
  405. package/dist/extensions/point-defaults.controller.js +69 -0
  406. package/dist/extensions/point-defaults.d.ts +73 -0
  407. package/dist/extensions/point-defaults.js +236 -0
  408. package/dist/extensions/point-defaults.schemas.d.ts +9 -0
  409. package/dist/extensions/point-defaults.schemas.js +14 -0
  410. package/dist/extensions/registry.d.ts +1 -1
  411. package/dist/extensions/registry.js +2 -0
  412. package/dist/extensions/resolve.d.ts +51 -1
  413. package/dist/extensions/resolve.js +85 -3
  414. package/dist/extensions/single-provider.d.ts +92 -0
  415. package/dist/extensions/single-provider.js +180 -0
  416. package/dist/extensions/sources.d.ts +13 -2
  417. package/dist/extensions/sources.js +2 -0
  418. package/dist/extensions/state.module.d.ts +9 -0
  419. package/dist/extensions/state.module.js +46 -0
  420. package/dist/extensions/unavailable.d.ts +50 -0
  421. package/dist/extensions/unavailable.js +115 -0
  422. package/dist/files/previewers.controller.js +2 -3
  423. package/dist/files/previewers.d.ts +10 -3
  424. package/dist/files/previewers.js +40 -11
  425. package/dist/files/previewers.schemas.d.ts +10 -0
  426. package/dist/files/previewers.schemas.js +9 -0
  427. package/dist/http/api.module.js +76 -4
  428. package/dist/http/app.d.ts +11 -2
  429. package/dist/http/app.js +31 -5
  430. package/dist/http/gateway-routes.d.ts +7 -3
  431. package/dist/http/gateway-routes.js +6 -3
  432. package/dist/http/nest-logger.d.ts +6 -5
  433. package/dist/http/nest-logger.js +24 -10
  434. package/dist/http/plugin-dispatch.d.ts +4 -1
  435. package/dist/http/plugin-dispatch.js +14 -2
  436. package/dist/identity/accounts.d.ts +77 -31
  437. package/dist/identity/accounts.js +133 -52
  438. package/dist/identity/audit.d.ts +2 -1
  439. package/dist/identity/auth.controller.js +9 -5
  440. package/dist/identity/auth.guard.d.ts +13 -5
  441. package/dist/identity/auth.guard.js +35 -9
  442. package/dist/identity/cookies.d.ts +26 -5
  443. package/dist/identity/cookies.js +58 -6
  444. package/dist/identity/identity.module.d.ts +1 -1
  445. package/dist/identity/identity.module.js +7 -4
  446. package/dist/identity/initial-passwords.controller.d.ts +22 -0
  447. package/dist/identity/initial-passwords.controller.js +49 -0
  448. package/dist/identity/initial-passwords.d.ts +61 -0
  449. package/dist/identity/initial-passwords.job.d.ts +16 -0
  450. package/dist/identity/initial-passwords.job.js +46 -0
  451. package/dist/identity/initial-passwords.js +159 -0
  452. package/dist/identity/me.controller.d.ts +17 -1
  453. package/dist/identity/me.controller.js +45 -4
  454. package/dist/identity/me.schemas.d.ts +24 -0
  455. package/dist/identity/me.schemas.js +25 -0
  456. package/dist/identity/principal.d.ts +11 -3
  457. package/dist/identity/principal.js +11 -3
  458. package/dist/identity/sessions.d.ts +12 -0
  459. package/dist/identity/sessions.js +45 -0
  460. package/dist/identity/settings.d.ts +99 -12
  461. package/dist/identity/settings.js +234 -25
  462. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  463. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  464. package/dist/identity/write-actor.d.ts +11 -0
  465. package/dist/identity/write-actor.js +7 -0
  466. package/dist/inbox/inbox.module.d.ts +4 -1
  467. package/dist/inbox/inbox.module.js +7 -3
  468. package/dist/inbox/inbox.schemas.d.ts +8 -0
  469. package/dist/inbox/inbox.schemas.js +11 -0
  470. package/dist/inbox/inbox.service.d.ts +64 -4
  471. package/dist/inbox/inbox.service.js +74 -4
  472. package/dist/inbox/org-notices.d.ts +63 -0
  473. package/dist/inbox/org-notices.js +91 -0
  474. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  475. package/dist/inbox/platform-inbox.controller.js +58 -0
  476. package/dist/inbox/platform-inbox.service.d.ts +157 -0
  477. package/dist/inbox/platform-inbox.service.js +281 -0
  478. package/dist/inbox/platform-notices.d.ts +19 -0
  479. package/dist/inbox/platform-notices.js +9 -0
  480. package/dist/index.d.ts +6 -2
  481. package/dist/index.js +7 -1
  482. package/dist/infra/cli/kernel-cli.module.js +9 -1
  483. package/dist/infra/config/kernel-config.service.js +32 -1
  484. package/dist/infra/database/database.module.js +1 -0
  485. package/dist/infra/database/xact-lock.d.ts +1 -1
  486. package/dist/infra/database/xact-lock.js +1 -1
  487. package/dist/infra/events/kernel-events.d.ts +31 -3
  488. package/dist/infra/lifecycle/process-guards.js +4 -0
  489. package/dist/infra/lock/lock.service.d.ts +8 -0
  490. package/dist/infra/lock/lock.service.js +27 -0
  491. package/dist/infra/logging/logging.module.d.ts +4 -2
  492. package/dist/infra/logging/logging.module.js +24 -6
  493. package/dist/infra/presence/presence.module.d.ts +6 -0
  494. package/dist/infra/presence/presence.module.js +22 -0
  495. package/dist/infra/presence/replica-presence.d.ts +87 -0
  496. package/dist/infra/presence/replica-presence.js +189 -0
  497. package/dist/infra/queue/add-job-once.d.ts +14 -0
  498. package/dist/infra/queue/add-job-once.js +16 -0
  499. package/dist/infra/queue/redis-connection.d.ts +6 -0
  500. package/dist/infra/queue/redis-connection.js +7 -0
  501. package/dist/infra/redis/redis.module.js +6 -2
  502. package/dist/infra/throttler/named-throttlers.d.ts +12 -0
  503. package/dist/infra/throttler/named-throttlers.js +67 -0
  504. package/dist/infra/throttler/throttler.guard.js +1 -1
  505. package/dist/infra/tokens.d.ts +6 -1
  506. package/dist/infra/tokens.js +6 -1
  507. package/dist/kernel.module.js +15 -0
  508. package/dist/lifecycle/kernel-lifecycle.d.ts +4 -2
  509. package/dist/lifecycle/kernel-lifecycle.js +35 -7
  510. package/dist/local-devices/device-auth.controller.d.ts +42 -0
  511. package/dist/local-devices/device-auth.controller.js +116 -0
  512. package/dist/local-devices/device-auth.d.ts +119 -0
  513. package/dist/local-devices/device-auth.js +401 -0
  514. package/dist/local-devices/device-auth.module.d.ts +7 -0
  515. package/dist/local-devices/device-auth.module.js +25 -0
  516. package/dist/local-devices/device-routes.d.ts +36 -0
  517. package/dist/local-devices/device-routes.js +90 -0
  518. package/dist/local-devices/dto.d.ts +66 -0
  519. package/dist/local-devices/dto.js +44 -0
  520. package/dist/local-devices/keys.d.ts +25 -0
  521. package/dist/local-devices/keys.js +25 -0
  522. package/dist/local-devices/local-device-gateway.d.ts +134 -0
  523. package/dist/local-devices/local-device-gateway.js +542 -0
  524. package/dist/local-devices/local-device-provider.d.ts +89 -0
  525. package/dist/local-devices/local-device-provider.js +151 -0
  526. package/dist/local-devices/local-devices.module.d.ts +16 -0
  527. package/dist/local-devices/local-devices.module.js +44 -0
  528. package/dist/local-devices/machines.d.ts +118 -0
  529. package/dist/local-devices/machines.js +366 -0
  530. package/dist/local-devices/relay.d.ts +100 -0
  531. package/dist/local-devices/relay.js +373 -0
  532. package/dist/local-devices/targets.d.ts +28 -0
  533. package/dist/local-devices/targets.js +73 -0
  534. package/dist/log.d.ts +13 -1
  535. package/dist/log.js +93 -17
  536. package/dist/models/embeddings.d.ts +82 -0
  537. package/dist/models/embeddings.js +326 -0
  538. package/dist/models/enablement.controller.d.ts +40 -0
  539. package/dist/models/enablement.controller.js +74 -0
  540. package/dist/models/enablement.d.ts +101 -0
  541. package/dist/models/enablement.js +264 -0
  542. package/dist/models/models.module.d.ts +5 -1
  543. package/dist/models/models.module.js +16 -4
  544. package/dist/models/org-models.schemas.d.ts +8 -0
  545. package/dist/models/org-models.schemas.js +22 -0
  546. package/dist/models/prices.d.ts +8 -6
  547. package/dist/models/prices.js +11 -9
  548. package/dist/models/purposes.controller.d.ts +6 -4
  549. package/dist/models/purposes.controller.js +13 -7
  550. package/dist/models/purposes.d.ts +72 -14
  551. package/dist/models/purposes.js +115 -34
  552. package/dist/orgs/directory-sync.d.ts +14 -5
  553. package/dist/orgs/directory-sync.js +41 -17
  554. package/dist/orgs/offboarding.d.ts +12 -8
  555. package/dist/orgs/offboarding.js +54 -33
  556. package/dist/orgs/org-lock.d.ts +5 -0
  557. package/dist/orgs/org-lock.js +13 -0
  558. package/dist/orgs/org.guard.d.ts +10 -0
  559. package/dist/orgs/org.guard.js +43 -32
  560. package/dist/orgs/orgs.controller.d.ts +2 -5
  561. package/dist/orgs/orgs.controller.js +3 -6
  562. package/dist/orgs/orgs.module.js +3 -0
  563. package/dist/orgs/orgs.schemas.d.ts +8 -0
  564. package/dist/orgs/orgs.schemas.js +16 -0
  565. package/dist/orgs/orgs.service.d.ts +23 -8
  566. package/dist/orgs/orgs.service.js +38 -16
  567. package/dist/orgs/roles.d.ts +1 -1
  568. package/dist/orgs/roles.js +5 -1
  569. package/dist/orgs/settings.controller.d.ts +1 -1
  570. package/dist/orgs/settings.service.d.ts +66 -6
  571. package/dist/orgs/settings.service.js +89 -10
  572. package/dist/overrides.d.ts +16 -1
  573. package/dist/overrides.js +10 -0
  574. package/dist/platform/actor.d.ts +48 -0
  575. package/dist/platform/actor.js +100 -0
  576. package/dist/platform/agent-docs.d.ts +18 -0
  577. package/dist/platform/agent-docs.js +59 -0
  578. package/dist/platform/availability.d.ts +14 -0
  579. package/dist/platform/availability.js +43 -0
  580. package/dist/platform/errors.d.ts +28 -0
  581. package/dist/platform/errors.js +65 -0
  582. package/dist/platform/exclusions.d.ts +11 -0
  583. package/dist/platform/exclusions.js +774 -0
  584. package/dist/platform/method.d.ts +6 -0
  585. package/dist/platform/method.js +15 -0
  586. package/dist/platform/operation.d.ts +169 -0
  587. package/dist/platform/operation.js +102 -0
  588. package/dist/platform/ops/accounts.ops.d.ts +32 -0
  589. package/dist/platform/ops/accounts.ops.js +291 -0
  590. package/dist/platform/ops/admin-items.ops.d.ts +37 -0
  591. package/dist/platform/ops/admin-items.ops.js +278 -0
  592. package/dist/platform/ops/admin.ops.d.ts +38 -0
  593. package/dist/platform/ops/admin.ops.js +497 -0
  594. package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
  595. package/dist/platform/ops/agent-skills.ops.js +509 -0
  596. package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
  597. package/dist/platform/ops/agent-templates.ops.js +272 -0
  598. package/dist/platform/ops/agents.ops.d.ts +37 -0
  599. package/dist/platform/ops/agents.ops.js +730 -0
  600. package/dist/platform/ops/approvals.ops.d.ts +30 -0
  601. package/dist/platform/ops/approvals.ops.js +116 -0
  602. package/dist/platform/ops/background.ops.d.ts +14 -0
  603. package/dist/platform/ops/background.ops.js +134 -0
  604. package/dist/platform/ops/catalog-admin.ops.d.ts +92 -0
  605. package/dist/platform/ops/catalog-admin.ops.js +682 -0
  606. package/dist/platform/ops/channels.ops.d.ts +16 -0
  607. package/dist/platform/ops/channels.ops.js +195 -0
  608. package/dist/platform/ops/components.ops.d.ts +46 -0
  609. package/dist/platform/ops/components.ops.js +854 -0
  610. package/dist/platform/ops/connectors.ops.d.ts +17 -0
  611. package/dist/platform/ops/connectors.ops.js +190 -0
  612. package/dist/platform/ops/conversations.ops.d.ts +30 -0
  613. package/dist/platform/ops/conversations.ops.js +470 -0
  614. package/dist/platform/ops/devices.ops.d.ts +26 -0
  615. package/dist/platform/ops/devices.ops.js +311 -0
  616. package/dist/platform/ops/errors.d.ts +16 -0
  617. package/dist/platform/ops/errors.js +30 -0
  618. package/dist/platform/ops/evals.ops.d.ts +28 -0
  619. package/dist/platform/ops/evals.ops.js +783 -0
  620. package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
  621. package/dist/platform/ops/extensions-admin.ops.js +372 -0
  622. package/dist/platform/ops/extensions.ops.d.ts +25 -0
  623. package/dist/platform/ops/extensions.ops.js +347 -0
  624. package/dist/platform/ops/inbox.ops.d.ts +25 -0
  625. package/dist/platform/ops/inbox.ops.js +381 -0
  626. package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
  627. package/dist/platform/ops/marketplaces.ops.js +466 -0
  628. package/dist/platform/ops/models.ops.d.ts +25 -0
  629. package/dist/platform/ops/models.ops.js +232 -0
  630. package/dist/platform/ops/org-plugins.ops.d.ts +35 -0
  631. package/dist/platform/ops/org-plugins.ops.js +388 -0
  632. package/dist/platform/ops/org-settings.ops.d.ts +18 -0
  633. package/dist/platform/ops/org-settings.ops.js +127 -0
  634. package/dist/platform/ops/orgs.ops.d.ts +28 -0
  635. package/dist/platform/ops/orgs.ops.js +298 -0
  636. package/dist/platform/ops/other-orgs.d.ts +20 -0
  637. package/dist/platform/ops/other-orgs.js +72 -0
  638. package/dist/platform/ops/paging.d.ts +14 -0
  639. package/dist/platform/ops/paging.js +20 -0
  640. package/dist/platform/ops/platform.ops.d.ts +30 -0
  641. package/dist/platform/ops/platform.ops.js +231 -0
  642. package/dist/platform/ops/plugins.ops.d.ts +35 -0
  643. package/dist/platform/ops/plugins.ops.js +476 -0
  644. package/dist/platform/ops/previewers.ops.d.ts +14 -0
  645. package/dist/platform/ops/previewers.ops.js +109 -0
  646. package/dist/platform/ops/requests.ops.d.ts +14 -0
  647. package/dist/platform/ops/requests.ops.js +191 -0
  648. package/dist/platform/ops/role.d.ts +4 -0
  649. package/dist/platform/ops/role.js +10 -0
  650. package/dist/platform/ops/setup.ops.d.ts +24 -0
  651. package/dist/platform/ops/setup.ops.js +212 -0
  652. package/dist/platform/ops/skills.ops.d.ts +17 -0
  653. package/dist/platform/ops/skills.ops.js +160 -0
  654. package/dist/platform/ops/summary.d.ts +10 -0
  655. package/dist/platform/ops/summary.js +18 -0
  656. package/dist/platform/ops/themes.ops.d.ts +14 -0
  657. package/dist/platform/ops/themes.ops.js +47 -0
  658. package/dist/platform/ops/ui.ops.d.ts +8 -0
  659. package/dist/platform/ops/ui.ops.js +41 -0
  660. package/dist/platform/ops/unavailable.d.ts +23 -0
  661. package/dist/platform/ops/unavailable.js +118 -0
  662. package/dist/platform/parity.d.ts +33 -0
  663. package/dist/platform/parity.js +272 -0
  664. package/dist/platform/platform-ops.module.d.ts +43 -0
  665. package/dist/platform/platform-ops.module.js +142 -0
  666. package/dist/platform/platform.module.d.ts +8 -0
  667. package/dist/platform/platform.module.js +25 -0
  668. package/dist/platform/registry.d.ts +30 -0
  669. package/dist/platform/registry.js +111 -0
  670. package/dist/platform/route-schemas.d.ts +18 -0
  671. package/dist/platform/route-schemas.js +85 -0
  672. package/dist/roles/gateway-role.d.ts +18 -3
  673. package/dist/roles/gateway-role.js +33 -5
  674. package/dist/roles/gateway.module.d.ts +2 -1
  675. package/dist/roles/gateway.module.js +6 -3
  676. package/dist/roles/worker-role.d.ts +6 -4
  677. package/dist/roles/worker-role.js +14 -7
  678. package/dist/roles/worker.module.d.ts +1 -1
  679. package/dist/roles/worker.module.js +21 -1
  680. package/dist/runtime/context/build.d.ts +21 -13
  681. package/dist/runtime/context/build.js +106 -29
  682. package/dist/runtime/context/claude-tools.d.ts +4 -1
  683. package/dist/runtime/context/claude-tools.js +13 -12
  684. package/dist/runtime/context/compaction.js +24 -1
  685. package/dist/runtime/context/device-paths.d.ts +40 -0
  686. package/dist/runtime/context/device-paths.js +48 -0
  687. package/dist/runtime/context/legacy-text.d.ts +22 -0
  688. package/dist/runtime/context/legacy-text.js +37 -0
  689. package/dist/runtime/context/reminders.d.ts +2 -0
  690. package/dist/runtime/context/reminders.js +2 -0
  691. package/dist/runtime/context/run-context.d.ts +65 -0
  692. package/dist/runtime/context/run-context.js +215 -0
  693. package/dist/runtime/context/skills.d.ts +29 -11
  694. package/dist/runtime/context/skills.js +46 -32
  695. package/dist/runtime/context/tool-changes.d.ts +27 -0
  696. package/dist/runtime/context/tool-changes.js +60 -0
  697. package/dist/runtime/hook-calls.d.ts +8 -1
  698. package/dist/runtime/hook-calls.js +40 -7
  699. package/dist/runtime/langgraph-loop.d.ts +3 -1
  700. package/dist/runtime/langgraph-loop.js +36 -17
  701. package/dist/runtime/loop.d.ts +35 -6
  702. package/dist/runtime/maintenance.d.ts +9 -4
  703. package/dist/runtime/maintenance.js +35 -8
  704. package/dist/runtime/model-call.d.ts +54 -11
  705. package/dist/runtime/model-call.js +105 -28
  706. package/dist/runtime/providers.d.ts +149 -29
  707. package/dist/runtime/providers.js +332 -63
  708. package/dist/runtime/run-context.service.d.ts +65 -0
  709. package/dist/runtime/run-context.service.js +236 -0
  710. package/dist/runtime/run-control.d.ts +11 -1
  711. package/dist/runtime/run-control.js +12 -0
  712. package/dist/runtime/run-drafts.d.ts +85 -0
  713. package/dist/runtime/run-drafts.js +230 -0
  714. package/dist/runtime/run-finish.d.ts +1 -1
  715. package/dist/runtime/run-jobs.d.ts +3 -5
  716. package/dist/runtime/run-jobs.js +7 -9
  717. package/dist/runtime/run-queue.d.ts +62 -5
  718. package/dist/runtime/run-queue.js +313 -40
  719. package/dist/runtime/run-worker.d.ts +19 -8
  720. package/dist/runtime/run-worker.js +105 -44
  721. package/dist/runtime/runtime.module.js +13 -3
  722. package/dist/runtime/step-log.d.ts +15 -4
  723. package/dist/runtime/step-log.js +24 -7
  724. package/dist/runtime/stream.controller.d.ts +23 -1
  725. package/dist/runtime/stream.controller.js +60 -3
  726. package/dist/runtime/stream.d.ts +4 -1
  727. package/dist/runtime/stream.js +27 -3
  728. package/dist/runtime/subagents/child.d.ts +55 -7
  729. package/dist/runtime/subagents/child.js +105 -7
  730. package/dist/runtime/subagents/definition.d.ts +31 -26
  731. package/dist/runtime/subagents/definition.js +89 -142
  732. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  733. package/dist/runtime/subagents/deliveries.js +228 -0
  734. package/dist/runtime/subagents/dispatch.d.ts +116 -27
  735. package/dist/runtime/subagents/dispatch.js +213 -142
  736. package/dist/runtime/subagents/limits.d.ts +24 -5
  737. package/dist/runtime/subagents/limits.js +40 -6
  738. package/dist/runtime/subagents/messages.d.ts +95 -0
  739. package/dist/runtime/subagents/messages.js +328 -0
  740. package/dist/runtime/subagents/org-agents.js +2 -1
  741. package/dist/runtime/subagents/preamble.d.ts +4 -4
  742. package/dist/runtime/subagents/preamble.js +9 -7
  743. package/dist/runtime/subagents/progress.d.ts +8 -6
  744. package/dist/runtime/subagents/progress.js +11 -6
  745. package/dist/runtime/subagents/render.d.ts +30 -0
  746. package/dist/runtime/subagents/render.js +53 -0
  747. package/dist/runtime/subagents/roster.d.ts +25 -8
  748. package/dist/runtime/subagents/roster.js +48 -12
  749. package/dist/runtime/subagents/skill-fork.d.ts +4 -3
  750. package/dist/runtime/subagents/skill-fork.js +9 -5
  751. package/dist/runtime/subagents/status.d.ts +14 -0
  752. package/dist/runtime/subagents/status.js +23 -0
  753. package/dist/runtime/subagents/subagents.service.d.ts +9 -6
  754. package/dist/runtime/subagents/subagents.service.js +13 -8
  755. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  756. package/dist/runtime/usage-report-jobs.js +158 -0
  757. package/dist/runtime/usage-report.d.ts +35 -39
  758. package/dist/runtime/usage-report.js +171 -97
  759. package/dist/runtime/waits.d.ts +148 -39
  760. package/dist/runtime/waits.js +426 -112
  761. package/dist/sandbox/jobs.d.ts +40 -13
  762. package/dist/sandbox/jobs.js +57 -20
  763. package/dist/sandbox/leases.d.ts +37 -54
  764. package/dist/sandbox/leases.js +71 -115
  765. package/dist/sandbox/providers.d.ts +34 -7
  766. package/dist/sandbox/providers.js +54 -9
  767. package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
  768. package/dist/sandbox/sandbox-file-reader.js +98 -0
  769. package/dist/sandbox/sandbox.module.d.ts +3 -2
  770. package/dist/sandbox/sandbox.module.js +10 -4
  771. package/dist/sandbox/sandbox.service.d.ts +345 -132
  772. package/dist/sandbox/sandbox.service.js +883 -399
  773. package/dist/sandbox/unreachable.d.ts +30 -0
  774. package/dist/sandbox/unreachable.js +108 -0
  775. package/dist/setup/kernel-checks.d.ts +91 -0
  776. package/dist/setup/kernel-checks.js +295 -0
  777. package/dist/setup/oauth-token-probe.d.ts +47 -0
  778. package/dist/setup/oauth-token-probe.js +108 -0
  779. package/dist/setup/redact-check.d.ts +18 -0
  780. package/dist/setup/redact-check.js +46 -0
  781. package/dist/setup/setup-check-registry.d.ts +86 -0
  782. package/dist/setup/setup-check-registry.js +75 -0
  783. package/dist/setup/setup-checks.controller.d.ts +28 -0
  784. package/dist/setup/setup-checks.controller.js +78 -0
  785. package/dist/setup/setup-checks.schemas.d.ts +38 -0
  786. package/dist/setup/setup-checks.schemas.js +43 -0
  787. package/dist/setup/setup-checks.service.d.ts +144 -0
  788. package/dist/setup/setup-checks.service.js +683 -0
  789. package/dist/setup/setup-guides.controller.d.ts +18 -0
  790. package/dist/setup/setup-guides.controller.js +48 -0
  791. package/dist/setup/setup-guides.schemas.d.ts +10 -0
  792. package/dist/setup/setup-guides.schemas.js +6 -0
  793. package/dist/setup/setup-guides.service.d.ts +126 -0
  794. package/dist/setup/setup-guides.service.js +315 -0
  795. package/dist/setup/setup.module.d.ts +8 -0
  796. package/dist/setup/setup.module.js +31 -0
  797. package/dist/skills/agent-skills.controller.d.ts +48 -0
  798. package/dist/skills/agent-skills.controller.js +131 -0
  799. package/dist/skills/agent-skills.service.d.ts +262 -0
  800. package/dist/skills/agent-skills.service.js +996 -0
  801. package/dist/skills/catalog.d.ts +14 -11
  802. package/dist/skills/catalog.js +32 -50
  803. package/dist/skills/changes.controller.d.ts +12 -22
  804. package/dist/skills/changes.controller.js +27 -56
  805. package/dist/skills/changes.service.d.ts +69 -115
  806. package/dist/skills/changes.service.js +249 -598
  807. package/dist/skills/conversation-catalog.d.ts +53 -0
  808. package/dist/skills/conversation-catalog.js +149 -0
  809. package/dist/skills/invocable.controller.d.ts +1 -1
  810. package/dist/skills/invocable.controller.js +2 -2
  811. package/dist/skills/invocation-keys.d.ts +1 -1
  812. package/dist/skills/invocation-keys.js +1 -1
  813. package/dist/skills/invoke.d.ts +3 -3
  814. package/dist/skills/invoke.js +21 -8
  815. package/dist/skills/package.d.ts +15 -1
  816. package/dist/skills/package.js +14 -1
  817. package/dist/skills/skills.controller.d.ts +32 -6
  818. package/dist/skills/skills.controller.js +64 -11
  819. package/dist/skills/skills.module.js +25 -3
  820. package/dist/skills/skills.schemas.d.ts +44 -0
  821. package/dist/skills/skills.schemas.js +68 -0
  822. package/dist/skills/skills.service.d.ts +123 -26
  823. package/dist/skills/skills.service.js +493 -76
  824. package/dist/skills/usable.d.ts +82 -0
  825. package/dist/skills/usable.js +388 -0
  826. package/dist/themes/render-css.d.ts +13 -0
  827. package/dist/themes/render-css.js +135 -0
  828. package/dist/themes/theme-delivery.service.d.ts +36 -0
  829. package/dist/themes/theme-delivery.service.js +116 -0
  830. package/dist/themes/theme-state.d.ts +116 -0
  831. package/dist/themes/theme-state.js +221 -0
  832. package/dist/themes/theme-usage.d.ts +61 -0
  833. package/dist/themes/theme-usage.js +98 -0
  834. package/dist/themes/themes-public.controller.d.ts +33 -0
  835. package/dist/themes/themes-public.controller.js +98 -0
  836. package/dist/themes/themes.controller.d.ts +13 -0
  837. package/dist/themes/themes.controller.js +38 -0
  838. package/dist/themes/themes.module.d.ts +3 -0
  839. package/dist/themes/themes.module.js +21 -0
  840. package/dist/themes/themes.schemas.d.ts +3 -0
  841. package/dist/themes/themes.schemas.js +2 -0
  842. package/dist/themes/themes.service.d.ts +50 -0
  843. package/dist/themes/themes.service.js +99 -0
  844. package/dist/time-zone.d.ts +5 -0
  845. package/dist/time-zone.js +19 -0
  846. package/dist/tools/admin-connectors.d.ts +69 -0
  847. package/dist/tools/admin-connectors.js +135 -0
  848. package/dist/tools/approvals.controller.js +2 -3
  849. package/dist/tools/approvals.schemas.d.ts +21 -0
  850. package/dist/tools/approvals.schemas.js +15 -0
  851. package/dist/tools/approvals.service.d.ts +26 -2
  852. package/dist/tools/approvals.service.js +44 -5
  853. package/dist/tools/builtin-names.d.ts +104 -0
  854. package/dist/tools/builtin-names.js +164 -0
  855. package/dist/tools/builtins/agent.d.ts +27 -25
  856. package/dist/tools/builtins/agent.js +66 -63
  857. package/dist/tools/builtins/ask-user.d.ts +1 -1
  858. package/dist/tools/builtins/ask-user.js +5 -4
  859. package/dist/tools/builtins/builtin-tools.d.ts +23 -4
  860. package/dist/tools/builtins/builtin-tools.js +78 -12
  861. package/dist/tools/builtins/current-time.d.ts +26 -0
  862. package/dist/tools/builtins/current-time.js +99 -0
  863. package/dist/tools/builtins/handback.d.ts +28 -0
  864. package/dist/tools/builtins/handback.js +53 -0
  865. package/dist/tools/builtins/platform.d.ts +51 -0
  866. package/dist/tools/builtins/platform.js +451 -0
  867. package/dist/tools/builtins/read-tool-output.d.ts +1 -1
  868. package/dist/tools/builtins/read-tool-output.js +2 -2
  869. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  870. package/dist/tools/builtins/sandbox/bash.js +291 -39
  871. package/dist/tools/builtins/sandbox/common.d.ts +135 -36
  872. package/dist/tools/builtins/sandbox/common.js +222 -62
  873. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  874. package/dist/tools/builtins/sandbox/deliver.js +19 -16
  875. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  876. package/dist/tools/builtins/sandbox/edit.js +64 -50
  877. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  878. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  879. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  880. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  881. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  882. package/dist/tools/builtins/sandbox/glob.js +17 -12
  883. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  884. package/dist/tools/builtins/sandbox/grep.js +153 -34
  885. package/dist/tools/builtins/sandbox/index.d.ts +9 -5
  886. package/dist/tools/builtins/sandbox/index.js +13 -5
  887. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  888. package/dist/tools/builtins/sandbox/read.js +29 -19
  889. package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
  890. package/dist/tools/builtins/sandbox/task-output.js +334 -0
  891. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  892. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  893. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  894. package/dist/tools/builtins/sandbox/write.js +51 -44
  895. package/dist/tools/builtins/send-message.d.ts +56 -0
  896. package/dist/tools/builtins/send-message.js +100 -0
  897. package/dist/tools/builtins/skill-load.d.ts +29 -18
  898. package/dist/tools/builtins/skill-load.js +125 -73
  899. package/dist/tools/builtins/tool-search.d.ts +13 -9
  900. package/dist/tools/builtins/tool-search.js +25 -14
  901. package/dist/tools/builtins/web/errors.d.ts +8 -0
  902. package/dist/tools/builtins/web/errors.js +53 -0
  903. package/dist/tools/builtins/web/extract.d.ts +62 -0
  904. package/dist/tools/builtins/web/extract.js +271 -0
  905. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  906. package/dist/tools/builtins/web/fetch.js +175 -0
  907. package/dist/tools/builtins/web/index.d.ts +13 -0
  908. package/dist/tools/builtins/web/index.js +12 -0
  909. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  910. package/dist/tools/builtins/web/page-cache.js +77 -0
  911. package/dist/tools/builtins/web/search.d.ts +25 -0
  912. package/dist/tools/builtins/web/search.js +210 -0
  913. package/dist/tools/builtins/web/url.d.ts +17 -0
  914. package/dist/tools/builtins/web/url.js +43 -0
  915. package/dist/tools/connector-account-policies.d.ts +51 -0
  916. package/dist/tools/connector-account-policies.js +165 -0
  917. package/dist/tools/connectors.controller.d.ts +74 -9
  918. package/dist/tools/connectors.controller.js +133 -16
  919. package/dist/tools/connectors.schemas.d.ts +27 -0
  920. package/dist/tools/connectors.schemas.js +34 -0
  921. package/dist/tools/connectors.service.d.ts +101 -8
  922. package/dist/tools/connectors.service.js +266 -28
  923. package/dist/tools/credentials.d.ts +23 -0
  924. package/dist/tools/credentials.js +90 -1
  925. package/dist/tools/display-names.d.ts +9 -0
  926. package/dist/tools/display-names.js +24 -0
  927. package/dist/tools/drift.js +5 -5
  928. package/dist/tools/elicitation.js +1 -1
  929. package/dist/tools/extension-tools.controller.d.ts +14 -0
  930. package/dist/tools/extension-tools.controller.js +37 -0
  931. package/dist/tools/info.d.ts +61 -4
  932. package/dist/tools/info.js +119 -33
  933. package/dist/tools/legacy-data.d.ts +34 -0
  934. package/dist/tools/legacy-data.js +76 -0
  935. package/dist/tools/legacy-keys.d.ts +51 -0
  936. package/dist/tools/legacy-keys.js +114 -0
  937. package/dist/tools/naming.d.ts +1 -5
  938. package/dist/tools/naming.js +1 -7
  939. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  940. package/dist/tools/oauth/flow-paths.js +1 -1
  941. package/dist/tools/oauth/flow.js +1 -1
  942. package/dist/tools/oauth/tokens.d.ts +54 -7
  943. package/dist/tools/oauth/tokens.js +87 -17
  944. package/dist/tools/org-tool-switches.d.ts +89 -0
  945. package/dist/tools/org-tool-switches.js +201 -0
  946. package/dist/tools/outputs.js +1 -1
  947. package/dist/tools/pipeline.d.ts +67 -47
  948. package/dist/tools/pipeline.js +319 -380
  949. package/dist/tools/policy.d.ts +30 -23
  950. package/dist/tools/policy.js +142 -64
  951. package/dist/tools/questions.controller.d.ts +1 -1
  952. package/dist/tools/questions.controller.js +1 -1
  953. package/dist/tools/questions.service.d.ts +23 -2
  954. package/dist/tools/questions.service.js +104 -2
  955. package/dist/tools/registry.d.ts +189 -68
  956. package/dist/tools/registry.js +318 -236
  957. package/dist/tools/resources.d.ts +1 -1
  958. package/dist/tools/resources.js +1 -1
  959. package/dist/tools/tools.module.js +31 -3
  960. package/dist/tools/validate.js +1 -1
  961. package/dist/ui/admin-ui.controller.d.ts +56 -0
  962. package/dist/ui/admin-ui.controller.js +192 -0
  963. package/dist/ui/arrangement.d.ts +65 -0
  964. package/dist/ui/arrangement.js +171 -0
  965. package/dist/ui/embed-token.d.ts +2 -2
  966. package/dist/ui/embed-token.js +30 -5
  967. package/dist/ui/registry.d.ts +42 -17
  968. package/dist/ui/registry.js +46 -14
  969. package/dist/ui/slots.controller.d.ts +11 -0
  970. package/dist/ui/slots.controller.js +25 -0
  971. package/dist/ui/ui-stream.d.ts +20 -3
  972. package/dist/ui/ui-stream.js +25 -7
  973. package/dist/ui/ui.schemas.d.ts +70 -0
  974. package/dist/ui/ui.schemas.js +65 -0
  975. package/dist/ui/views.controller.d.ts +35 -49
  976. package/dist/ui/views.controller.js +48 -70
  977. package/dist/ui/views.d.ts +112 -18
  978. package/dist/ui/views.js +254 -47
  979. package/package.json +6 -3
  980. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  981. package/src/migrations/0064_account_last_org.sql +7 -0
  982. package/src/migrations/0065_conversation_archive.sql +8 -0
  983. package/src/migrations/0066_extension_display_name.sql +4 -0
  984. package/src/migrations/0067_agent_profiles.sql +20 -0
  985. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  986. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  987. package/src/migrations/0070_background_tasks.sql +37 -0
  988. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  989. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  990. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  991. package/src/migrations/0074_subagent_tree.sql +50 -0
  992. package/src/migrations/0075_plugin_scope.sql +61 -0
  993. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  994. package/src/migrations/0077_scope_requests.sql +52 -0
  995. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  996. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  997. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  998. package/src/migrations/0081_platform_components.sql +129 -0
  999. package/src/migrations/0082_platform_migration.sql +33 -0
  1000. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  1001. package/src/migrations/0084_org_owned_items.sql +85 -0
  1002. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  1003. package/src/migrations/0086_org_layering.sql +30 -0
  1004. package/src/migrations/0087_approval_summary.sql +6 -0
  1005. package/src/migrations/0088_environments.sql +80 -0
  1006. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  1007. package/src/migrations/0090_initial_passwords.sql +27 -0
  1008. package/src/migrations/0091_account_time_zone.sql +4 -0
  1009. package/src/migrations/0092_tools_default_on.sql +27 -0
  1010. package/src/migrations/0093_connected_environments.sql +37 -0
  1011. package/src/migrations/0094_environment_paths_idx.sql +7 -0
  1012. package/src/migrations/0095_environment_files_resets.sql +5 -0
  1013. package/src/migrations/0096_environment_demoted_default.sql +18 -0
  1014. package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
  1015. package/src/migrations/0098_single_provider_running_first.sql +41 -0
  1016. package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
  1017. package/src/migrations/0100_catalog_files.sql +13 -0
  1018. package/src/migrations/0101_marketplace_icons.sql +32 -0
  1019. package/src/migrations/0102_themes.sql +64 -0
  1020. package/src/migrations/0103_ui_theme_setting.sql +7 -0
  1021. package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
  1022. package/src/migrations/0105_devices_rename.sql +136 -0
  1023. package/src/migrations/0106_setup_guides_v2.sql +10 -0
  1024. package/src/migrations/0107_extension_client_builds.sql +50 -0
  1025. package/src/migrations/0108_question_skipped.sql +6 -0
  1026. package/src/migrations/0109_audit_platform_idx.sql +5 -0
  1027. package/src/migrations/0110_usage_time_idx.sql +8 -0
  1028. package/src/migrations/0111_agent_skill_sharing.sql +22 -0
  1029. package/src/migrations/0112_skill_share_requests.sql +4 -0
  1030. package/dist/catalog/upgrade-targets.d.ts +0 -56
  1031. package/dist/catalog/upgrade-targets.js +0 -90
  1032. package/dist/conversations/sandbox-status.d.ts +0 -24
  1033. package/dist/conversations/sandbox-status.js +0 -52
  1034. package/dist/extensions/org-config.controller.d.ts +0 -24
  1035. package/dist/extensions/org-config.controller.js +0 -62
  1036. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  1037. package/dist/tools/builtins/sandbox/names.js +0 -20
  1038. package/dist/tools/builtins/skill-write.d.ts +0 -59
  1039. package/dist/tools/builtins/skill-write.js +0 -244
@@ -10,6 +10,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
10
10
  import { randomUUID } from "node:crypto";
11
11
  import { Inject, Injectable } from "@nestjs/common";
12
12
  import { ConversationsService } from "../conversations/conversations.service.js";
13
+ import { imSenderContext, recipientLocale, } from "../conversations/message-context.js";
14
+ import { DevicesService } from "../devices/devices.service.js";
15
+ import { DEFAULT_DEVICE_ALIASES, deviceLabel } from "../devices/label.js";
13
16
  import { ApiError } from "../errors.js";
14
17
  import { IdentityBinding } from "../identity/binding.js";
15
18
  import { ExternalIdentities } from "../identity/external.js";
@@ -17,7 +20,6 @@ import { KernelDb } from "../infra/database/kernel-db.js";
17
20
  import { LockService } from "../infra/lock/lock.service.js";
18
21
  import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
19
22
  import { DirectorySync } from "../orgs/directory-sync.js";
20
- import { readOrgSettings } from "../orgs/settings.service.js";
21
23
  import { parseSlashCommand } from "../skills/invoke.js";
22
24
  import { ApprovalsService } from "../tools/approvals.service.js";
23
25
  import { QuestionsService } from "../tools/questions.service.js";
@@ -73,6 +75,7 @@ let ChannelInbound = class ChannelInbound {
73
75
  directorySync;
74
76
  jobs;
75
77
  guests;
78
+ devices;
76
79
  log;
77
80
  actions;
78
81
  constructor(kdb, redis,
@@ -83,7 +86,7 @@ let ChannelInbound = class ChannelInbound {
83
86
  /** The channel queue: inbound jobs (`onEvent` only dedupes and enqueues) and deliveries. */
84
87
  jobs,
85
88
  /** 卡片操作:审批决定与提问回答(授权由这两个服务按点击者映射到的账号判定)。 */
86
- approvals, questions, guests, log) {
89
+ approvals, questions, guests, devices, log) {
87
90
  this.kdb = kdb;
88
91
  this.redis = redis;
89
92
  this.locks = locks;
@@ -94,6 +97,7 @@ let ChannelInbound = class ChannelInbound {
94
97
  this.directorySync = directorySync;
95
98
  this.jobs = jobs;
96
99
  this.guests = guests;
100
+ this.devices = devices;
97
101
  this.log = log;
98
102
  this.actions = new ChannelCardActions({
99
103
  get db() {
@@ -182,16 +186,25 @@ let ChannelInbound = class ChannelInbound {
182
186
  const threadKey = threadKeyOf(e.target, e.sender.externalId, e.messageId);
183
187
  // 群里回在话题里(新话题以这条消息为根)
184
188
  const replyTarget = isGroup ? { ...e.target, threadId: threadKey } : e.target;
185
- const { locale } = await readOrgSettings(db, row.orgId);
189
+ // the sender's zone and language as the platform gives them (run context spec §3.4)
190
+ const im = imSenderContext(e.sender);
191
+ // kernel text speaks the person's language (maintainer decision 2026-11-08): before the
192
+ // speaker is known, the platform's language, else the org's
193
+ let locale = await recipientLocale(db, { orgId: row.orgId, im: im.locale });
186
194
  // 回复带幂等键:任务重试时平台不会重复显示(一条消息至多一句回复)
187
195
  const replyKey = idempotencyKey(`${connectionId}-${e.messageId}-reply`);
188
- const reply = async (key, cards) => {
189
- await connections.send(connectionId, replyTarget, { text: phrase(key, locale), ...(cards !== undefined && { cards }) }, replyKey);
196
+ const replyText = async (text, cards) => {
197
+ await connections.send(connectionId, replyTarget, { text, ...(cards !== undefined && { cards }) }, replyKey, locale);
190
198
  };
199
+ const reply = (key, cards) => replyText(phrase(key, locale), cards);
191
200
  const speaker = await this.resolveSpeaker(connectionId, row, e.sender, isGroup, locale, reply);
192
201
  if (speaker === undefined)
193
202
  return;
194
203
  const { accountId, threadAccount } = speaker;
204
+ // a bound person without a platform language: their latest web message's, else the org's
205
+ if (im.locale === undefined && threadAccount !== null) {
206
+ locale = await recipientLocale(db, { orgId: row.orgId, accountId: threadAccount });
207
+ }
195
208
  const k = {
196
209
  connectionId,
197
210
  chatId: e.target.chatId,
@@ -203,11 +216,19 @@ let ChannelInbound = class ChannelInbound {
203
216
  await reply("newConversation");
204
217
  return;
205
218
  }
219
+ const deviceCommand = !isGroup && threadAccount !== null ? parseDeviceCommand(e.text) : null;
220
+ if (deviceCommand !== null) {
221
+ await this.deviceCommand(row.orgId, accountId, deviceCommand.name, locale, replyText);
222
+ return;
223
+ }
206
224
  let conversationId = await findThread(db, k);
207
225
  if (conversationId === undefined) {
208
226
  let created;
209
227
  try {
210
- created = (await this.conversations.create(row.orgId, accountId, row.agentId)).id;
228
+ // bound to the person's IM default device, else their default (environments spec
229
+ // §4.2 item 8); an anonymous sender's stays unbound (no sandbox)
230
+ created = (await this.conversations.create(row.orgId, accountId, row.agentId, { im: true }))
231
+ .id;
211
232
  }
212
233
  catch (err) {
213
234
  if (err instanceof ApiError && err.code === "agent.not_found") {
@@ -231,6 +252,11 @@ let ChannelInbound = class ChannelInbound {
231
252
  const posted = await this.post(row.orgId, conversationId, accountId, {
232
253
  text: e.text,
233
254
  clientMessageId: `${connectionId}:${e.messageId}`,
255
+ // run context spec §7: an anonymous guest is named by their IM profile name; a bound
256
+ // person by their account's name (the kernel reads it)
257
+ ...(threadAccount === null &&
258
+ e.sender.displayName !== undefined && { senderName: e.sender.displayName }),
259
+ im,
234
260
  });
235
261
  seq = posted.event.seq;
236
262
  // best-effort (batch 5 review m4): a failed note must not fail the job before the thread
@@ -267,6 +293,51 @@ let ChannelInbound = class ChannelInbound {
267
293
  .execute();
268
294
  await this.jobs.enqueue(conversationId);
269
295
  }
296
+ /**
297
+ * Direct-message `/device` (environments spec §4.2 item 8): lists the person's usable devices,
298
+ * or with a name sets the IM default their next new conversation is bound to. The name matches
299
+ * case-insensitively against each label (`deviceLabel`: a former default demoted by a
300
+ * provider switch answers to e.g. "Personal (Docker sandbox)"); the default device also
301
+ * answers to 个人设备 / Personal.
302
+ */
303
+ async deviceCommand(orgId, accountId, name, locale, replyText) {
304
+ const { items, defaultId } = await this.devices.list(orgId, accountId);
305
+ const usable = items.filter((v) => v.available);
306
+ const labelOf = (v) => deviceLabel(v, locale);
307
+ const current = (await this.devices.imDefault(orgId, accountId)) ?? defaultId;
308
+ const list = usable
309
+ .map((v) => `- ${labelOf(v)}${v.id === current ? phrase("deviceCurrent", locale) : ""}`)
310
+ .join("\n");
311
+ const fill = (key, vars) => phrase(key, locale).replace(/\{(\w+)\}/g, (m, k) => vars[k] ?? m);
312
+ if (usable.length === 0)
313
+ return replyText(phrase("deviceNone", locale));
314
+ if (name === null)
315
+ return replyText(fill("deviceList", { list }));
316
+ const wanted = name.toLowerCase();
317
+ const is = (v) => labelOf(v).toLowerCase() === wanted;
318
+ // a name the person gave wins over a generated label, and both over the default's aliases
319
+ const hit = usable.find((v) => v.name !== null && is(v)) ??
320
+ usable.find(is) ??
321
+ usable.find((v) => v.isDefault && DEFAULT_DEVICE_ALIASES.includes(wanted));
322
+ if (hit === undefined) {
323
+ const unavailable = items.find((v) => !v.available && is(v));
324
+ if (unavailable !== undefined) {
325
+ return replyText(fill("deviceUnavailable", { name: labelOf(unavailable), list }));
326
+ }
327
+ return replyText(fill("deviceUnknown", { name, list }));
328
+ }
329
+ try {
330
+ await this.devices.setImDefault(orgId, accountId, hit.id);
331
+ }
332
+ catch (err) {
333
+ // deleted or made unusable since the list was read
334
+ if (err instanceof ApiError && err.code.startsWith("device.")) {
335
+ return replyText(fill("deviceUnknown", { name, list }));
336
+ }
337
+ throw err;
338
+ }
339
+ return replyText(fill("deviceSwitched", { name: labelOf(hit) }));
340
+ }
270
341
  /**
271
342
  * Posts the person's message: `/name args` as a skill invocation when the kernel accepts it, else
272
343
  * as typed (phase D spec §9). A retry of the job finds the first write by `clientMessageId`
@@ -393,6 +464,15 @@ ChannelInbound = __decorate([
393
464
  __param(9, Inject(ApprovalsService)),
394
465
  __param(10, Inject(QuestionsService)),
395
466
  __param(11, Inject(AnonymousGuests)),
396
- __param(12, Inject(KERNEL_LOGGER))
467
+ __param(12, Inject(DevicesService)),
468
+ __param(13, Inject(KERNEL_LOGGER))
397
469
  ], ChannelInbound);
398
470
  export { ChannelInbound };
471
+ /** `/device` or `/device <name>` (the exact command word, case-insensitive); anything else is null. */
472
+ function parseDeviceCommand(text) {
473
+ const m = /^\/device(?:\s+([\s\S]*))?$/i.exec(text.trim());
474
+ if (m === null)
475
+ return null;
476
+ const name = m[1]?.trim();
477
+ return { name: name ? name : null };
478
+ }
@@ -1,6 +1,7 @@
1
1
  import { type ChannelTarget, type Logger } from "@capybara-hq/plugin-sdk";
2
2
  import { type Job, type Worker } from "bullmq";
3
3
  import { EventLog } from "../conversations/event-log.js";
4
+ import type { KernelSchemaDb } from "../db/kernel-schema.js";
4
5
  import { KernelConfigService } from "../infra/config/kernel-config.service.js";
5
6
  import { KernelDb } from "../infra/database/kernel-db.js";
6
7
  import { TransactionHost } from "../infra/database/transaction-host.js";
@@ -8,6 +9,7 @@ import { ConversationLock } from "../runtime/conversation-lock.js";
8
9
  import type { StreamBus } from "../runtime/stream.js";
9
10
  import { ApprovalsService } from "../tools/approvals.service.js";
10
11
  import { QuestionsService } from "../tools/questions.service.js";
12
+ import { ToolRegistry } from "../tools/registry.js";
11
13
  import { ChannelConnections } from "./connections.service.js";
12
14
  import { ChannelInbound } from "./inbound.js";
13
15
  import { type ChannelJobData, ChannelJobs } from "./jobs.js";
@@ -31,6 +33,17 @@ export declare const DELIVER_LOCK_PREFIX = "capk:channel-deliver:";
31
33
  export declare const DRAFT_INTERVAL_MS = 1000;
32
34
  /** 同一事件不可重试地失败这么多次后跳过它(Ruling A14)。 */
33
35
  export declare const POISON_FAILURES = 3;
36
+ /**
37
+ * The language of the kernel text a conversation's IM thread gets (cards, notices; maintainer
38
+ * decision 2026-11-08: in IM, language is per person). The person who triggered the run speaks:
39
+ * the `locale` recorded on the conversation's latest `user_message` at or before `uptoSeq`, which
40
+ * already follows the order IM language, latest web message language, org language
41
+ * (`readMessageContext`). In a group thread that is whoever wrote last, i.e. the requester of the
42
+ * approvals and questions that follow. A message from an older log without one: its author's
43
+ * language by {@link recipientLocale}; no user message at all: the conversation owner's.
44
+ * Read from PG, so any replica derives the same value.
45
+ */
46
+ export declare function conversationLocale(db: KernelSchemaDb, orgId: string, conversationId: string, uptoSeq: number): Promise<ChannelLocale>;
34
47
  /** BullMQ 退避:平台给了等待时长就用它,否则指数退避。 */
35
48
  export declare function deliverBackoff(attemptsMade: number, err?: Error): number;
36
49
  /** One `last_seq` advance of a delivery (see {@link ChannelOutbound.advanceIn}). */
@@ -79,7 +92,7 @@ export declare class ChannelOutbound {
79
92
  private readonly d;
80
93
  constructor(kdb: KernelDb, bus: StreamBus, eventLog: Pick<EventLog, "readAfter">,
81
94
  /** The conversation lock provider; delivery takes it under its own key prefix. */
82
- lock: Pick<ConversationLock, "scoped">, connections: Pick<ChannelConnections, "outbound">, approvals: Pick<ApprovalsService, "describe">, questions: Pick<QuestionsService, "forCall">,
95
+ lock: Pick<ConversationLock, "scoped">, connections: Pick<ChannelConnections, "outbound">, approvals: Pick<ApprovalsService, "describe">, questions: Pick<QuestionsService, "forCall">, registry: Pick<ToolRegistry, "builtinSpecs" | "extensionToolSpecs">,
83
96
  /** 入站任务的处理(worker 上执行 `ChannelInbound.handle`);失败抛错由 BullMQ 重试。 */
84
97
  inbound: Pick<ChannelInbound, "handle">, jobs: Pick<ChannelJobs, "enqueue">, config: Pick<KernelConfigService, "get">, log: Pick<Logger, "error" | "warn" | "info">, txHost: TransactionHost);
85
98
  /**
@@ -13,16 +13,17 @@ import { Inject, Injectable } from "@nestjs/common";
13
13
  import { DelayedError, UnrecoverableError } from "bullmq";
14
14
  import { sql } from "kysely";
15
15
  import { conversationTopic, EventLog, } from "../conversations/event-log.js";
16
+ import { recipientLocale } from "../conversations/message-context.js";
16
17
  import { ApiError } from "../errors.js";
17
18
  import { KernelConfigService } from "../infra/config/kernel-config.service.js";
18
19
  import { KernelDb } from "../infra/database/kernel-db.js";
19
20
  import { TransactionHost } from "../infra/database/transaction-host.js";
20
21
  import { Transactional } from "../infra/database/transactional.decorator.js";
21
22
  import { KERNEL_BUS, KERNEL_LOGGER } from "../infra/tokens.js";
22
- import { readOrgSettings } from "../orgs/settings.service.js";
23
23
  import { ConversationLock, } from "../runtime/conversation-lock.js";
24
24
  import { ApprovalsService } from "../tools/approvals.service.js";
25
25
  import { QuestionsService } from "../tools/questions.service.js";
26
+ import { ToolRegistry } from "../tools/registry.js";
26
27
  import { approvalCard, cardMessage, connectUrl, conversationUrl, questionCard, webBase, } from "./cards.js";
27
28
  import { ChannelConnections } from "./connections.service.js";
28
29
  import { ChannelInbound } from "./inbound.js";
@@ -96,6 +97,42 @@ function isBusMessage(m) {
96
97
  return typeof m.toSeq === "number";
97
98
  return k === "delta" && typeof m.runId === "string";
98
99
  }
100
+ /**
101
+ * The language of the kernel text a conversation's IM thread gets (cards, notices; maintainer
102
+ * decision 2026-11-08: in IM, language is per person). The person who triggered the run speaks:
103
+ * the `locale` recorded on the conversation's latest `user_message` at or before `uptoSeq`, which
104
+ * already follows the order IM language, latest web message language, org language
105
+ * (`readMessageContext`). In a group thread that is whoever wrote last, i.e. the requester of the
106
+ * approvals and questions that follow. A message from an older log without one: its author's
107
+ * language by {@link recipientLocale}; no user message at all: the conversation owner's.
108
+ * Read from PG, so any replica derives the same value.
109
+ */
110
+ export async function conversationLocale(db, orgId, conversationId, uptoSeq) {
111
+ const m = await db
112
+ .selectFrom("conversation_events")
113
+ .select([
114
+ sql `payload->>'locale'`.as("locale"),
115
+ sql `payload->>'authorAccountId'`.as("author"),
116
+ ])
117
+ .where("conversation_id", "=", conversationId)
118
+ .where("type", "=", "user_message")
119
+ .where("seq", "<=", String(uptoSeq))
120
+ .orderBy("seq", "desc")
121
+ .limit(1)
122
+ .executeTakeFirst();
123
+ if (m?.locale === "zh" || m?.locale === "en")
124
+ return m.locale;
125
+ let accountId = m?.author ?? null;
126
+ if (accountId === null) {
127
+ const c = await db
128
+ .selectFrom("conversations")
129
+ .select("account_id")
130
+ .where("id", "=", conversationId)
131
+ .executeTakeFirst();
132
+ accountId = c?.account_id ?? null;
133
+ }
134
+ return recipientLocale(db, { orgId, accountId });
135
+ }
99
136
  /** BullMQ 退避:平台给了等待时长就用它,否则指数退避。 */
100
137
  export function deliverBackoff(attemptsMade, err) {
101
138
  if (err instanceof RetryableDeliveryError && err.retryAfterMs !== undefined) {
@@ -133,7 +170,7 @@ let ChannelOutbound = class ChannelOutbound {
133
170
  d;
134
171
  constructor(kdb, bus, eventLog,
135
172
  /** The conversation lock provider; delivery takes it under its own key prefix. */
136
- lock, connections, approvals, questions,
173
+ lock, connections, approvals, questions, registry,
137
174
  /** 入站任务的处理(worker 上执行 `ChannelInbound.handle`);失败抛错由 BullMQ 重试。 */
138
175
  inbound, jobs, config, log, txHost) {
139
176
  this.kdb = kdb;
@@ -151,6 +188,7 @@ let ChannelOutbound = class ChannelOutbound {
151
188
  eventLog,
152
189
  connections,
153
190
  approvals,
191
+ registry,
154
192
  questions,
155
193
  config,
156
194
  log,
@@ -383,11 +421,12 @@ ChannelOutbound = __decorate([
383
421
  __param(4, Inject(ChannelConnections)),
384
422
  __param(5, Inject(ApprovalsService)),
385
423
  __param(6, Inject(QuestionsService)),
386
- __param(7, Inject(ChannelInbound)),
387
- __param(8, Inject(ChannelJobs)),
388
- __param(9, Inject(KernelConfigService)),
389
- __param(10, Inject(KERNEL_LOGGER)),
390
- __param(11, Inject(TransactionHost))
424
+ __param(7, Inject(ToolRegistry)),
425
+ __param(8, Inject(ChannelInbound)),
426
+ __param(9, Inject(ChannelJobs)),
427
+ __param(10, Inject(KernelConfigService)),
428
+ __param(11, Inject(KERNEL_LOGGER)),
429
+ __param(12, Inject(TransactionHost))
391
430
  ], ChannelOutbound);
392
431
  export { ChannelOutbound };
393
432
  /** 一次投递任务(本进程持有):订阅、补读、草稿节流。 */
@@ -478,7 +517,7 @@ class Delivery {
478
517
  this.seen = Number(row.last_seq);
479
518
  this.persisted = this.seen;
480
519
  this.draftId = row.draft_message_id;
481
- this.locale = (await readOrgSettings(this.d.db, this.s.row.orgId)).locale;
520
+ this.locale = await conversationLocale(this.d.db, this.s.row.orgId, this.conversationId, this.seen);
482
521
  this.base = webBase(this.d.config.get().http.publicUrl);
483
522
  return await this.loop();
484
523
  }
@@ -734,10 +773,17 @@ class Delivery {
734
773
  .execute();
735
774
  }
736
775
  send(message, idempotencyKey) {
737
- return this.s.send(this.target, message, idempotencyKey);
776
+ return this.s.send(this.target, message, idempotencyKey, this.locale);
738
777
  }
739
778
  async handle(e) {
740
779
  switch (e.type) {
780
+ case "user_message": {
781
+ // a new message: what follows speaks its author's language (see conversationLocale)
782
+ const l = e.payload.locale;
783
+ if (l === "zh" || l === "en")
784
+ this.locale = l;
785
+ return;
786
+ }
741
787
  case "assistant_message":
742
788
  return this.finalize(e.runId, e.payload.step, e.payload.content, e.seq);
743
789
  case "approval_requested":
@@ -848,7 +894,10 @@ class Delivery {
848
894
  await this.send({ text: phrase("handleOnWeb", this.locale) }, this.key(seq));
849
895
  return this.advance(seq);
850
896
  }
851
- const card = questionCard(questionId, form, "pending", this.questionUrl(this.base, child));
897
+ // the person can skip the conversation's own question by replying; a sub-agent's question
898
+ // stays answerable on its card only (reply-while-question spec §4.3)
899
+ const textReply = child === undefined ? (this.target.chatType === "dm" ? "plain" : "mention") : undefined;
900
+ const card = questionCard(questionId, form, "pending", this.questionUrl(this.base, child), null, textReply);
852
901
  await this.recordCard("question", card.id);
853
902
  const { messageId } = await this.send(cardMessage(phrase("questionTitle", this.locale), card), this.key(seq));
854
903
  return this.advance(seq, { card: { kind: "question", id: card.id, messageId } });
@@ -926,7 +975,7 @@ class Delivery {
926
975
  await this.send({ text: marker }, this.key(seq, `-close-${how}`));
927
976
  }
928
977
  else {
929
- await this.s.update(this.target, this.draftId, { text }, this.key(seq, `-close-${how}`));
978
+ await this.s.update(this.target, this.draftId, { text }, this.key(seq, `-close-${how}`), this.locale);
930
979
  }
931
980
  }
932
981
  return true;
@@ -974,10 +1023,10 @@ class Delivery {
974
1023
  */
975
1024
  async replaceCard(at, message, idempotencyKey) {
976
1025
  if (this.s.features.edit) {
977
- await this.s.update(at.target, at.messageId, message, idempotencyKey);
1026
+ await this.s.update(at.target, at.messageId, message, idempotencyKey, this.locale);
978
1027
  }
979
1028
  else {
980
- await this.s.send(at.target, message, idempotencyKey);
1029
+ await this.s.send(at.target, message, idempotencyKey, this.locale);
981
1030
  }
982
1031
  }
983
1032
  /** `assistant_message`:以完整文本定稿(更新草稿或新发);不发送 thinking。 */
@@ -1003,7 +1052,7 @@ class Delivery {
1003
1052
  }
1004
1053
  if (useDraft && !this.draftBroken) {
1005
1054
  try {
1006
- await this.s.update(this.target, this.draftId, { text }, this.key(seq));
1055
+ await this.s.update(this.target, this.draftId, { text }, this.key(seq), this.locale);
1007
1056
  }
1008
1057
  catch (err) {
1009
1058
  if (!editRejected(err))
@@ -1078,7 +1127,7 @@ class Delivery {
1078
1127
  if (now - this.lastDraftAt < interval)
1079
1128
  return;
1080
1129
  try {
1081
- await this.s.update(this.target, this.draftId, { text: cur.text });
1130
+ await this.s.update(this.target, this.draftId, { text: cur.text }, undefined, this.locale);
1082
1131
  }
1083
1132
  catch (err) {
1084
1133
  if (!editRejected(err))
@@ -1,7 +1,8 @@
1
- /** 组织默认语言(`orgs.settings.locale`)。 */
1
+ /** The language of kernel IM text: the recipient's, else the org's (`orgs.settings.locale`). */
2
2
  export type ChannelLocale = "zh" | "en";
3
3
  /**
4
- * 机器人在 IM 里说的固定话术(全部集中在这里,zh / en 同步):按连接所属组织的默认语言选择。
4
+ * 机器人在 IM 里说的固定话术(全部集中在这里,zh / en 同步). Chosen per recipient (run context spec
5
+ * §3.4): the sender's platform language, else their latest web language, else the org's.
5
6
  * 模型回复不经过这里,原样转换为 IM 富文本、不翻译。
6
7
  */
7
8
  export declare const CHANNEL_PHRASES: {
@@ -10,6 +11,36 @@ export declare const CHANNEL_PHRASES: {
10
11
  readonly zh: "已开始新对话";
11
12
  readonly en: "Started a new conversation.";
12
13
  };
14
+ /** Direct message `/device`: lists the usable devices (`{list}` one per line, the current one marked). */
15
+ readonly deviceList: {
16
+ readonly zh: "你的设备:\n{list}\n发送 /device <名称> 选择下一个新对话使用的设备。";
17
+ readonly en: "Your devices:\n{list}\nSend /device <name> to choose the one your next new conversation uses.";
18
+ };
19
+ /** After a direct message `/device <name>` (`{name}` is the device's name). */
20
+ readonly deviceSwitched: {
21
+ readonly zh: "下一个新对话将使用设备「{name}」,发送 /new 开始。";
22
+ readonly en: "Your next new conversation will use the device “{name}”; send /new to start one.";
23
+ };
24
+ /** `/device <name>` matches no usable device (`{list}` as in deviceList). */
25
+ readonly deviceUnknown: {
26
+ readonly zh: "没有找到名为「{name}」的设备。你的设备:\n{list}";
27
+ readonly en: "No device named “{name}”. Your devices:\n{list}";
28
+ };
29
+ /** `/device <name>` names an existing device that is unavailable now (`{list}` as in deviceList). */
30
+ readonly deviceUnavailable: {
31
+ readonly zh: "设备「{name}」当前不可用(它的文件由未启用的沙箱提供方保存)。你的设备:\n{list}";
32
+ readonly en: "The device “{name}” is unavailable: its files are kept by a sandbox provider that is not active. Your devices:\n{list}";
33
+ };
34
+ /** Direct message `/device` when the person has no usable device (no cloud sandbox in the deployment). */
35
+ readonly deviceNone: {
36
+ readonly zh: "你目前没有可用的设备。";
37
+ readonly en: "You have no usable devices.";
38
+ };
39
+ /** The mark of the current IM default device in the device list. */
40
+ readonly deviceCurrent: {
41
+ readonly zh: "(当前)";
42
+ readonly en: " (current)";
43
+ };
13
44
  /** 未绑定的人在私聊里发消息:附绑定卡片。 */
14
45
  readonly bindPrompt: {
15
46
  readonly zh: "请先绑定你的 Capybara 账号,再与我对话。";
@@ -1,10 +1,38 @@
1
1
  /**
2
- * 机器人在 IM 里说的固定话术(全部集中在这里,zh / en 同步):按连接所属组织的默认语言选择。
2
+ * 机器人在 IM 里说的固定话术(全部集中在这里,zh / en 同步). Chosen per recipient (run context spec
3
+ * §3.4): the sender's platform language, else their latest web language, else the org's.
3
4
  * 模型回复不经过这里,原样转换为 IM 富文本、不翻译。
4
5
  */
5
6
  export const CHANNEL_PHRASES = {
6
7
  /** 私聊 `/new` 之后。 */
7
8
  newConversation: { zh: "已开始新对话", en: "Started a new conversation." },
9
+ /** Direct message `/device`: lists the usable devices (`{list}` one per line, the current one marked). */
10
+ deviceList: {
11
+ zh: "你的设备:\n{list}\n发送 /device <名称> 选择下一个新对话使用的设备。",
12
+ en: "Your devices:\n{list}\nSend /device <name> to choose the one your next new conversation uses.",
13
+ },
14
+ /** After a direct message `/device <name>` (`{name}` is the device's name). */
15
+ deviceSwitched: {
16
+ zh: "下一个新对话将使用设备「{name}」,发送 /new 开始。",
17
+ en: "Your next new conversation will use the device \u201c{name}\u201d; send /new to start one.",
18
+ },
19
+ /** `/device <name>` matches no usable device (`{list}` as in deviceList). */
20
+ deviceUnknown: {
21
+ zh: "没有找到名为「{name}」的设备。你的设备:\n{list}",
22
+ en: "No device named \u201c{name}\u201d. Your devices:\n{list}",
23
+ },
24
+ /** `/device <name>` names an existing device that is unavailable now (`{list}` as in deviceList). */
25
+ deviceUnavailable: {
26
+ zh: "设备「{name}」当前不可用(它的文件由未启用的沙箱提供方保存)。你的设备:\n{list}",
27
+ en: "The device \u201c{name}\u201d is unavailable: its files are kept by a sandbox provider that is not active. Your devices:\n{list}",
28
+ },
29
+ /** Direct message `/device` when the person has no usable device (no cloud sandbox in the deployment). */
30
+ deviceNone: {
31
+ zh: "你目前没有可用的设备。",
32
+ en: "You have no usable devices.",
33
+ },
34
+ /** The mark of the current IM default device in the device list. */
35
+ deviceCurrent: { zh: "(当前)", en: " (current)" },
8
36
  /** 未绑定的人在私聊里发消息:附绑定卡片。 */
9
37
  bindPrompt: {
10
38
  zh: "请先绑定你的 Capybara 账号,再与我对话。",
@@ -127,6 +127,8 @@ export declare class ChannelSupervisor {
127
127
  * written yet on the first round).
128
128
  */
129
129
  private targets;
130
+ /** How many long connections this process holds now (replica presence reports it). */
131
+ heldCount(): number;
130
132
  private heldOf;
131
133
  /**
132
134
  * Gives back the most recently connected connection of `plugin`, leaving a handoff marker first;
@@ -305,6 +305,10 @@ let ChannelSupervisor = class ChannelSupervisor {
305
305
  }
306
306
  return out;
307
307
  }
308
+ /** How many long connections this process holds now (replica presence reports it). */
309
+ heldCount() {
310
+ return this.held.size;
311
+ }
308
312
  heldOf(plugin) {
309
313
  let n = 0;
310
314
  for (const h of this.held.values())
@@ -48,3 +48,8 @@ export declare function findThread(db: KernelSchemaDb, k: ThreadKey): Promise<st
48
48
  export declare function insertThread(db: KernelSchemaDb, k: ThreadKey, conversationId: string): Promise<string>;
49
49
  /** 私聊 `/new`:归档当前话题行(下一条消息新建对话)。返回是否归档了一行。 */
50
50
  export declare function archiveThread(db: KernelSchemaDb, k: ThreadKey): Promise<boolean>;
51
+ /**
52
+ * Drops a conversation's channel bindings (its thread rows and its delivery target), so a deleted
53
+ * conversation neither receives inbound messages nor posts to the chat any more.
54
+ */
55
+ export declare function unbindConversation(db: KernelSchemaDb, conversationId: string): Promise<void>;
@@ -160,3 +160,11 @@ export async function archiveThread(db, k) {
160
160
  .executeTakeFirst();
161
161
  return r.numUpdatedRows > 0n;
162
162
  }
163
+ /**
164
+ * Drops a conversation's channel bindings (its thread rows and its delivery target), so a deleted
165
+ * conversation neither receives inbound messages nor posts to the chat any more.
166
+ */
167
+ export async function unbindConversation(db, conversationId) {
168
+ await db.deleteFrom("channel_threads").where("conversation_id", "=", conversationId).execute();
169
+ await db.deleteFrom("channel_deliveries").where("conversation_id", "=", conversationId).execute();
170
+ }
@@ -1,4 +1,6 @@
1
1
  import type { ChannelWebhookRequest, ChannelWebhookResponse, Logger } from "@capybara-hq/plugin-sdk";
2
+ import type { Redis } from "ioredis";
3
+ import { LockService } from "../infra/lock/lock.service.js";
2
4
  import { ChannelConnections } from "./connections.service.js";
3
5
  import { ChannelInbound } from "./inbound.js";
4
6
  /**
@@ -19,6 +21,10 @@ export interface ChannelWebhookTimings {
19
21
  export declare const CHANNEL_WEBHOOK_TIMINGS: unique symbol;
20
22
  /** Most connections whose runtime is cached in one process. */
21
23
  export declare const WEBHOOK_RUNTIME_CACHE_MAX = 1000;
24
+ /** How long a connection's last accepted webhook is remembered (`capybara:webhook-received`). */
25
+ export declare const WEBHOOK_SEEN_TTL_SECONDS: number;
26
+ /** When the gateway last accepted a verified webhook for the connection (ISO time, TTL 7 days). */
27
+ export declare const webhookSeenKey: (connectionId: string) => string;
22
28
  /**
23
29
  * Headers every webhook response carries; a plugin cannot override them (the body is never meant to
24
30
  * be rendered or sniffed by a browser).
@@ -49,6 +55,10 @@ export declare const WEBHOOK_SECURITY_HEADERS: Readonly<Record<string, string>>;
49
55
  * for it (`extensionHost.drainSeconds`) before `dispose`; past that the call is aborted → 503
50
56
  * `channel.webhook_retry`.
51
57
  * Every response carries {@link WEBHOOK_SECURITY_HEADERS}.
58
+ * - An accepted `events` result (every event handed to `onEvent`) sets the marker
59
+ * {@link webhookSeenKey} (the setup check `capybara:webhook-received`), at most once a minute per
60
+ * connection (`LockService.lease`, `SET NX` with a 60 s TTL, on a minute key), in Redis with a TTL, never in PG; a Redis error
61
+ * never fails the request.
52
62
  *
53
63
  * The decrypted runtime (plugin implementation + config) is cached per connection for a few seconds
54
64
  * (bounded, process local), so unauthenticated requests stay cheap before the signature check. It is
@@ -60,6 +70,9 @@ export declare class ChannelWebhooks {
60
70
  private readonly connections;
61
71
  private readonly inbound;
62
72
  private readonly log;
73
+ /** The minute gate of the seen marker (`SET NX` with a TTL). */
74
+ private readonly locks;
75
+ private readonly redis;
63
76
  private readonly runtimes;
64
77
  /** Bumped by {@link invalidateAll}: a fetch started before the bump is not stored. */
65
78
  private generation;
@@ -67,12 +80,19 @@ export declare class ChannelWebhooks {
67
80
  private readonly handleTimeoutMs;
68
81
  /** How long a connection's runtime is reused; 0 disables the cache. */
69
82
  private readonly runtimeCacheMs;
70
- constructor(connections: Pick<ChannelConnections, "row" | "runtime">, inbound: Pick<ChannelInbound, "onEvent">, log: Pick<Logger, "warn">, timings?: Partial<ChannelWebhookTimings>);
83
+ constructor(connections: Pick<ChannelConnections, "row" | "runtime">, inbound: Pick<ChannelInbound, "onEvent">, log: Pick<Logger, "warn">,
84
+ /** The minute gate of the seen marker (`SET NX` with a TTL). */
85
+ locks: Pick<LockService, "lease">, redis: Pick<Redis, "set">, timings?: Partial<ChannelWebhookTimings>);
71
86
  /** Drops the cached runtime of one connection (on `channel.changed`). */
72
87
  invalidate(connectionId: string): void;
73
88
  /** Drops every cached runtime (a plugin was replaced, revoked or reloaded). */
74
89
  invalidateAll(): void;
75
90
  handle(connectionId: string, request: ChannelWebhookRequest, signal: AbortSignal): Promise<ChannelWebhookResponse>;
91
+ /**
92
+ * Records that a verified webhook arrived for the connection: the minute gate first (`NX`), then
93
+ * the marker, both with a TTL. Failures are logged and swallowed (the platform got its ack).
94
+ */
95
+ private markSeen;
76
96
  private runtime;
77
97
  private respond;
78
98
  private respondBefore;