@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.6

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 (534) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +51 -14
  3. package/dist/admin/admin.controller.js +60 -19
  4. package/dist/admin/extensions.controller.d.ts +16 -2
  5. package/dist/admin/extensions.controller.js +26 -6
  6. package/dist/admin/setup-lock.d.ts +1 -1
  7. package/dist/admin/setup-lock.js +1 -1
  8. package/dist/admin/setup.controller.d.ts +1 -1
  9. package/dist/admin/setup.controller.js +1 -1
  10. package/dist/admin/setup.service.d.ts +4 -4
  11. package/dist/admin/setup.service.js +8 -8
  12. package/dist/agents/agent-lookup.d.ts +16 -0
  13. package/dist/agents/agent-lookup.js +11 -0
  14. package/dist/agents/agents.controller.d.ts +76 -1
  15. package/dist/agents/agents.controller.js +90 -11
  16. package/dist/agents/agents.module.d.ts +4 -1
  17. package/dist/agents/agents.module.js +32 -6
  18. package/dist/agents/agents.service.d.ts +54 -23
  19. package/dist/agents/agents.service.js +180 -76
  20. package/dist/agents/definition.d.ts +49 -0
  21. package/dist/agents/definition.js +45 -0
  22. package/dist/agents/from-template.d.ts +106 -0
  23. package/dist/agents/from-template.js +649 -0
  24. package/dist/agents/from-template.service.d.ts +60 -0
  25. package/dist/agents/from-template.service.js +161 -0
  26. package/dist/agents/models.controller.d.ts +34 -5
  27. package/dist/agents/models.controller.js +50 -6
  28. package/dist/agents/org-templates.d.ts +176 -0
  29. package/dist/agents/org-templates.js +827 -0
  30. package/dist/agents/pending-connector-requests.d.ts +77 -0
  31. package/dist/agents/pending-connector-requests.js +215 -0
  32. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  33. package/dist/agents/pending-connectors.controller.js +91 -0
  34. package/dist/agents/pending-connectors.service.d.ts +62 -0
  35. package/dist/agents/pending-connectors.service.js +282 -0
  36. package/dist/agents/readiness.controller.d.ts +5 -5
  37. package/dist/agents/readiness.controller.js +6 -6
  38. package/dist/agents/templates.controller.d.ts +86 -5
  39. package/dist/agents/templates.controller.js +171 -7
  40. package/dist/agents/templates.d.ts +127 -23
  41. package/dist/agents/templates.js +475 -52
  42. package/dist/background/background.module.js +8 -1
  43. package/dist/background/finish.d.ts +3 -2
  44. package/dist/background/launch-lock.d.ts +4 -3
  45. package/dist/background/launch-lock.js +4 -3
  46. package/dist/background/poll.job.d.ts +9 -6
  47. package/dist/background/poll.job.js +30 -22
  48. package/dist/background/session.d.ts +13 -2
  49. package/dist/background/session.js +13 -0
  50. package/dist/background/stop.d.ts +12 -6
  51. package/dist/background/stop.js +57 -39
  52. package/dist/background/store.d.ts +18 -6
  53. package/dist/background/store.js +12 -6
  54. package/dist/background/tasks.service.d.ts +15 -5
  55. package/dist/background/tasks.service.js +42 -17
  56. package/dist/background/wake-rules.d.ts +27 -18
  57. package/dist/background/wake-rules.js +52 -22
  58. package/dist/background/wake.d.ts +13 -11
  59. package/dist/background/wake.js +20 -14
  60. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  61. package/dist/catalog/admin-catalog.controller.js +213 -42
  62. package/dist/catalog/catalog-content.d.ts +58 -32
  63. package/dist/catalog/catalog-content.js +34 -8
  64. package/dist/catalog/catalog-import.module.d.ts +7 -0
  65. package/dist/catalog/catalog-import.module.js +60 -0
  66. package/dist/catalog/catalog-items.d.ts +111 -7
  67. package/dist/catalog/catalog-items.js +279 -13
  68. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  69. package/dist/catalog/catalog-scope.service.js +1116 -0
  70. package/dist/catalog/catalog.module.d.ts +7 -9
  71. package/dist/catalog/catalog.module.js +41 -31
  72. package/dist/catalog/catalog.service.d.ts +101 -29
  73. package/dist/catalog/catalog.service.js +104 -106
  74. package/dist/catalog/cli.d.ts +11 -1
  75. package/dist/catalog/cli.js +26 -1
  76. package/dist/catalog/component-promotion.d.ts +96 -0
  77. package/dist/catalog/component-promotion.js +395 -0
  78. package/dist/catalog/component-scope.controller.d.ts +152 -0
  79. package/dist/catalog/component-scope.controller.js +287 -0
  80. package/dist/catalog/component-scope.service.d.ts +303 -0
  81. package/dist/catalog/component-scope.service.js +936 -0
  82. package/dist/catalog/component-state.d.ts +174 -0
  83. package/dist/catalog/component-state.js +437 -0
  84. package/dist/catalog/job-ids.d.ts +30 -0
  85. package/dist/catalog/job-ids.js +25 -0
  86. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  87. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  88. package/dist/catalog/marketplaces.controller.js +56 -7
  89. package/dist/catalog/marketplaces.service.d.ts +54 -14
  90. package/dist/catalog/marketplaces.service.js +71 -22
  91. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  92. package/dist/catalog/org-catalog.controller.js +181 -65
  93. package/dist/catalog/org-catalog.service.d.ts +65 -33
  94. package/dist/catalog/org-catalog.service.js +324 -157
  95. package/dist/catalog/org-extension-switch.d.ts +41 -0
  96. package/dist/catalog/org-extension-switch.js +115 -0
  97. package/dist/catalog/org-extension.controller.d.ts +119 -0
  98. package/dist/catalog/org-extension.controller.js +266 -0
  99. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  100. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  101. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  102. package/dist/catalog/org-plugin-uploads.js +116 -0
  103. package/dist/catalog/owned-items.d.ts +184 -0
  104. package/dist/catalog/owned-items.js +789 -0
  105. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  106. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  107. package/dist/catalog/ownership.d.ts +172 -0
  108. package/dist/catalog/ownership.js +326 -0
  109. package/dist/catalog/platform-components.d.ts +221 -0
  110. package/dist/catalog/platform-components.js +761 -0
  111. package/dist/catalog/platform-migration.d.ts +115 -0
  112. package/dist/catalog/platform-migration.js +582 -0
  113. package/dist/catalog/plugin-import.d.ts +178 -34
  114. package/dist/catalog/plugin-import.js +622 -82
  115. package/dist/catalog/plugin-install.d.ts +185 -41
  116. package/dist/catalog/plugin-install.js +758 -126
  117. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  118. package/dist/catalog/plugin-upgrade.js +1147 -1136
  119. package/dist/catalog/request-rules.d.ts +65 -0
  120. package/dist/catalog/request-rules.js +217 -0
  121. package/dist/catalog/requests.service.d.ts +193 -118
  122. package/dist/catalog/requests.service.js +526 -343
  123. package/dist/catalog/reserved-names.d.ts +8 -0
  124. package/dist/catalog/reserved-names.js +42 -0
  125. package/dist/catalog/scope-orgs.d.ts +21 -0
  126. package/dist/catalog/scope-orgs.js +67 -0
  127. package/dist/catalog/scope-state.d.ts +35 -0
  128. package/dist/catalog/scope-state.js +87 -0
  129. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  130. package/dist/catalog/scope-sync-workers.js +29 -0
  131. package/dist/catalog/scope-sync.d.ts +176 -0
  132. package/dist/catalog/scope-sync.js +576 -0
  133. package/dist/catalog/scope.d.ts +42 -0
  134. package/dist/catalog/scope.js +42 -0
  135. package/dist/catalog/unshare.d.ts +22 -0
  136. package/dist/catalog/unshare.js +118 -0
  137. package/dist/channels/actions.js +1 -0
  138. package/dist/channels/cards.js +20 -2
  139. package/dist/channels/channels.module.js +2 -0
  140. package/dist/channels/inbound.d.ts +9 -1
  141. package/dist/channels/inbound.js +67 -5
  142. package/dist/channels/phrases.d.ts +35 -0
  143. package/dist/channels/phrases.js +29 -0
  144. package/dist/config/docs.js +3 -1
  145. package/dist/config/schema.d.ts +10 -2
  146. package/dist/config/schema.js +70 -22
  147. package/dist/conversations/access.d.ts +6 -4
  148. package/dist/conversations/access.js +27 -5
  149. package/dist/conversations/agent-tree.d.ts +46 -0
  150. package/dist/conversations/agent-tree.js +92 -0
  151. package/dist/conversations/conversations.controller.d.ts +43 -18
  152. package/dist/conversations/conversations.controller.js +79 -38
  153. package/dist/conversations/conversations.module.d.ts +1 -1
  154. package/dist/conversations/conversations.module.js +7 -7
  155. package/dist/conversations/conversations.service.d.ts +73 -15
  156. package/dist/conversations/conversations.service.js +115 -35
  157. package/dist/conversations/environment-status.d.ts +24 -0
  158. package/dist/conversations/environment-status.js +71 -0
  159. package/dist/conversations/event-log.d.ts +20 -5
  160. package/dist/conversations/event-log.js +60 -0
  161. package/dist/conversations/events.d.ts +84 -2
  162. package/dist/conversations/events.js +91 -17
  163. package/dist/conversations/queue.service.d.ts +1 -1
  164. package/dist/conversations/queue.service.js +5 -0
  165. package/dist/conversations/titles.d.ts +5 -3
  166. package/dist/conversations/titles.js +21 -8
  167. package/dist/conversations/tree.d.ts +17 -0
  168. package/dist/conversations/tree.js +42 -0
  169. package/dist/ctx/create-ctx.d.ts +20 -1
  170. package/dist/ctx/create-ctx.js +38 -7
  171. package/dist/db/kernel-schema.d.ts +386 -18
  172. package/dist/environments/access.d.ts +41 -0
  173. package/dist/environments/access.js +77 -0
  174. package/dist/environments/conversation-environments.d.ts +61 -0
  175. package/dist/environments/conversation-environments.js +170 -0
  176. package/dist/environments/dto.d.ts +25 -0
  177. package/dist/environments/dto.js +12 -0
  178. package/dist/environments/environments.controller.d.ts +33 -0
  179. package/dist/environments/environments.controller.js +110 -0
  180. package/dist/environments/environments.module.d.ts +8 -0
  181. package/dist/environments/environments.module.js +27 -0
  182. package/dist/environments/environments.service.d.ts +153 -0
  183. package/dist/environments/environments.service.js +541 -0
  184. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  185. package/dist/environments/legacy-cleanup.job.js +141 -0
  186. package/dist/errors.d.ts +85 -2
  187. package/dist/errors.js +85 -2
  188. package/dist/evals/reconstruct.d.ts +18 -9
  189. package/dist/evals/reconstruct.js +26 -7
  190. package/dist/evals/run-replay.d.ts +4 -2
  191. package/dist/evals/run-replay.js +20 -6
  192. package/dist/evals/runs.service.d.ts +2 -1
  193. package/dist/evals/runs.service.js +13 -12
  194. package/dist/evals/step-replay.d.ts +4 -6
  195. package/dist/evals/step-replay.js +4 -3
  196. package/dist/evals/trajectory.service.d.ts +8 -3
  197. package/dist/evals/trajectory.service.js +26 -14
  198. package/dist/evals/worker.d.ts +5 -5
  199. package/dist/evals/worker.js +9 -3
  200. package/dist/extensions/admin-ops.d.ts +36 -10
  201. package/dist/extensions/admin-ops.js +65 -42
  202. package/dist/extensions/admin-view.d.ts +37 -10
  203. package/dist/extensions/admin-view.js +103 -20
  204. package/dist/extensions/bootstrap.d.ts +17 -4
  205. package/dist/extensions/bootstrap.js +70 -9
  206. package/dist/extensions/cli.d.ts +12 -0
  207. package/dist/extensions/cli.js +11 -2
  208. package/dist/extensions/config-hash.d.ts +10 -0
  209. package/dist/extensions/config-hash.js +38 -0
  210. package/dist/extensions/deployment-config.d.ts +28 -5
  211. package/dist/extensions/deployment-config.js +48 -7
  212. package/dist/extensions/effective-config.d.ts +127 -0
  213. package/dist/extensions/effective-config.js +368 -0
  214. package/dist/extensions/extensions.module.js +11 -11
  215. package/dist/extensions/hooks.d.ts +37 -4
  216. package/dist/extensions/hooks.js +82 -16
  217. package/dist/extensions/host.d.ts +24 -10
  218. package/dist/extensions/host.js +49 -54
  219. package/dist/extensions/installs.d.ts +20 -8
  220. package/dist/extensions/installs.js +37 -15
  221. package/dist/extensions/org-config.d.ts +75 -6
  222. package/dist/extensions/org-config.js +184 -32
  223. package/dist/extensions/org-levels.d.ts +37 -0
  224. package/dist/extensions/org-levels.js +71 -0
  225. package/dist/extensions/org-overrides.d.ts +151 -0
  226. package/dist/extensions/org-overrides.js +524 -0
  227. package/dist/extensions/permission-view.d.ts +16 -4
  228. package/dist/extensions/permission-view.js +4 -4
  229. package/dist/extensions/plugin-items.d.ts +21 -0
  230. package/dist/extensions/plugin-items.js +42 -0
  231. package/dist/extensions/point-defaults.d.ts +12 -5
  232. package/dist/extensions/point-defaults.js +37 -9
  233. package/dist/extensions/resolve.d.ts +5 -1
  234. package/dist/extensions/resolve.js +15 -2
  235. package/dist/extensions/state.module.d.ts +9 -0
  236. package/dist/extensions/state.module.js +38 -0
  237. package/dist/files/previewers.d.ts +8 -1
  238. package/dist/files/previewers.js +35 -6
  239. package/dist/http/api.module.js +25 -3
  240. package/dist/http/app.d.ts +11 -2
  241. package/dist/http/app.js +31 -5
  242. package/dist/http/plugin-dispatch.d.ts +4 -1
  243. package/dist/http/plugin-dispatch.js +14 -2
  244. package/dist/identity/accounts.d.ts +29 -29
  245. package/dist/identity/accounts.js +47 -47
  246. package/dist/identity/audit.d.ts +2 -1
  247. package/dist/identity/auth.guard.d.ts +13 -5
  248. package/dist/identity/auth.guard.js +26 -9
  249. package/dist/identity/identity.module.d.ts +1 -1
  250. package/dist/identity/identity.module.js +4 -4
  251. package/dist/identity/me.controller.js +1 -1
  252. package/dist/identity/principal.d.ts +3 -3
  253. package/dist/identity/principal.js +3 -3
  254. package/dist/identity/settings.d.ts +22 -11
  255. package/dist/identity/settings.js +53 -18
  256. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  257. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  258. package/dist/inbox/inbox.module.d.ts +4 -1
  259. package/dist/inbox/inbox.module.js +7 -3
  260. package/dist/inbox/inbox.service.d.ts +62 -3
  261. package/dist/inbox/inbox.service.js +74 -4
  262. package/dist/inbox/org-notices.d.ts +63 -0
  263. package/dist/inbox/org-notices.js +91 -0
  264. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  265. package/dist/inbox/platform-inbox.controller.js +58 -0
  266. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  267. package/dist/inbox/platform-inbox.service.js +263 -0
  268. package/dist/inbox/platform-notices.d.ts +19 -0
  269. package/dist/inbox/platform-notices.js +9 -0
  270. package/dist/index.d.ts +1 -1
  271. package/dist/index.js +1 -1
  272. package/dist/infra/cli/kernel-cli.module.js +9 -1
  273. package/dist/infra/config/kernel-config.service.js +24 -1
  274. package/dist/infra/database/xact-lock.d.ts +1 -1
  275. package/dist/infra/database/xact-lock.js +1 -1
  276. package/dist/infra/events/kernel-events.d.ts +19 -2
  277. package/dist/infra/queue/add-job-once.d.ts +14 -0
  278. package/dist/infra/queue/add-job-once.js +16 -0
  279. package/dist/kernel.module.js +6 -0
  280. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  281. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  282. package/dist/models/embeddings.d.ts +82 -0
  283. package/dist/models/embeddings.js +326 -0
  284. package/dist/models/enablement.controller.d.ts +40 -0
  285. package/dist/models/enablement.controller.js +74 -0
  286. package/dist/models/enablement.d.ts +99 -0
  287. package/dist/models/enablement.js +263 -0
  288. package/dist/models/models.module.d.ts +5 -1
  289. package/dist/models/models.module.js +16 -4
  290. package/dist/models/prices.d.ts +5 -5
  291. package/dist/models/prices.js +4 -4
  292. package/dist/models/purposes.controller.d.ts +6 -4
  293. package/dist/models/purposes.controller.js +13 -7
  294. package/dist/models/purposes.d.ts +37 -12
  295. package/dist/models/purposes.js +63 -17
  296. package/dist/orgs/directory-sync.d.ts +14 -5
  297. package/dist/orgs/directory-sync.js +41 -17
  298. package/dist/orgs/offboarding.d.ts +9 -7
  299. package/dist/orgs/offboarding.js +28 -17
  300. package/dist/orgs/org-lock.d.ts +5 -0
  301. package/dist/orgs/org-lock.js +13 -0
  302. package/dist/orgs/org.guard.d.ts +10 -0
  303. package/dist/orgs/org.guard.js +43 -32
  304. package/dist/orgs/orgs.module.js +3 -0
  305. package/dist/orgs/orgs.service.d.ts +20 -7
  306. package/dist/orgs/orgs.service.js +32 -12
  307. package/dist/orgs/roles.d.ts +1 -1
  308. package/dist/orgs/roles.js +5 -1
  309. package/dist/orgs/settings.controller.d.ts +1 -1
  310. package/dist/orgs/settings.service.d.ts +15 -3
  311. package/dist/orgs/settings.service.js +6 -2
  312. package/dist/overrides.d.ts +3 -0
  313. package/dist/overrides.js +2 -0
  314. package/dist/platform/actor.d.ts +48 -0
  315. package/dist/platform/actor.js +100 -0
  316. package/dist/platform/agent-docs.d.ts +18 -0
  317. package/dist/platform/agent-docs.js +59 -0
  318. package/dist/platform/availability.d.ts +14 -0
  319. package/dist/platform/availability.js +43 -0
  320. package/dist/platform/errors.d.ts +11 -0
  321. package/dist/platform/errors.js +26 -0
  322. package/dist/platform/exclusions.d.ts +12 -0
  323. package/dist/platform/exclusions.js +1405 -0
  324. package/dist/platform/method.d.ts +6 -0
  325. package/dist/platform/method.js +15 -0
  326. package/dist/platform/operation.d.ts +92 -0
  327. package/dist/platform/operation.js +35 -0
  328. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  329. package/dist/platform/ops/agent-templates.ops.js +92 -0
  330. package/dist/platform/ops/agents.ops.d.ts +19 -0
  331. package/dist/platform/ops/agents.ops.js +294 -0
  332. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  333. package/dist/platform/ops/connectors.ops.js +126 -0
  334. package/dist/platform/ops/errors.d.ts +11 -0
  335. package/dist/platform/ops/errors.js +22 -0
  336. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  337. package/dist/platform/ops/extensions.ops.js +116 -0
  338. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  339. package/dist/platform/ops/marketplaces.ops.js +157 -0
  340. package/dist/platform/ops/paging.d.ts +14 -0
  341. package/dist/platform/ops/paging.js +20 -0
  342. package/dist/platform/ops/platform.ops.d.ts +23 -0
  343. package/dist/platform/ops/platform.ops.js +158 -0
  344. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  345. package/dist/platform/ops/plugins.ops.js +377 -0
  346. package/dist/platform/ops/requests.ops.d.ts +14 -0
  347. package/dist/platform/ops/requests.ops.js +153 -0
  348. package/dist/platform/ops/role.d.ts +4 -0
  349. package/dist/platform/ops/role.js +10 -0
  350. package/dist/platform/ops/skills.ops.d.ts +13 -0
  351. package/dist/platform/ops/skills.ops.js +98 -0
  352. package/dist/platform/ops/summary.d.ts +10 -0
  353. package/dist/platform/ops/summary.js +18 -0
  354. package/dist/platform/platform-ops.module.d.ts +7 -0
  355. package/dist/platform/platform-ops.module.js +55 -0
  356. package/dist/platform/platform.module.d.ts +8 -0
  357. package/dist/platform/platform.module.js +25 -0
  358. package/dist/platform/redact-orgs.d.ts +7 -0
  359. package/dist/platform/redact-orgs.js +52 -0
  360. package/dist/platform/registry.d.ts +30 -0
  361. package/dist/platform/registry.js +111 -0
  362. package/dist/roles/worker-role.d.ts +6 -4
  363. package/dist/roles/worker-role.js +14 -7
  364. package/dist/roles/worker.module.d.ts +1 -1
  365. package/dist/roles/worker.module.js +9 -1
  366. package/dist/runtime/context/build.d.ts +6 -4
  367. package/dist/runtime/context/build.js +26 -7
  368. package/dist/runtime/context/claude-tools.d.ts +2 -1
  369. package/dist/runtime/context/claude-tools.js +5 -4
  370. package/dist/runtime/context/compaction.js +9 -0
  371. package/dist/runtime/context/reminders.d.ts +2 -0
  372. package/dist/runtime/context/reminders.js +2 -0
  373. package/dist/runtime/context/skills.js +9 -2
  374. package/dist/runtime/context/tool-changes.d.ts +27 -0
  375. package/dist/runtime/context/tool-changes.js +60 -0
  376. package/dist/runtime/hook-calls.d.ts +8 -1
  377. package/dist/runtime/hook-calls.js +40 -7
  378. package/dist/runtime/langgraph-loop.d.ts +3 -1
  379. package/dist/runtime/langgraph-loop.js +35 -17
  380. package/dist/runtime/loop.d.ts +32 -4
  381. package/dist/runtime/maintenance.d.ts +7 -4
  382. package/dist/runtime/maintenance.js +23 -8
  383. package/dist/runtime/model-call.d.ts +38 -11
  384. package/dist/runtime/model-call.js +97 -24
  385. package/dist/runtime/providers.d.ts +146 -32
  386. package/dist/runtime/providers.js +321 -67
  387. package/dist/runtime/run-control.d.ts +11 -1
  388. package/dist/runtime/run-control.js +12 -0
  389. package/dist/runtime/run-drafts.d.ts +85 -0
  390. package/dist/runtime/run-drafts.js +230 -0
  391. package/dist/runtime/run-jobs.d.ts +3 -5
  392. package/dist/runtime/run-jobs.js +3 -7
  393. package/dist/runtime/run-queue.d.ts +37 -3
  394. package/dist/runtime/run-queue.js +188 -11
  395. package/dist/runtime/run-worker.d.ts +12 -6
  396. package/dist/runtime/run-worker.js +58 -35
  397. package/dist/runtime/runtime.module.js +3 -0
  398. package/dist/runtime/step-log.d.ts +9 -4
  399. package/dist/runtime/step-log.js +8 -5
  400. package/dist/runtime/stream.controller.d.ts +23 -1
  401. package/dist/runtime/stream.controller.js +60 -3
  402. package/dist/runtime/stream.d.ts +4 -1
  403. package/dist/runtime/stream.js +27 -3
  404. package/dist/runtime/subagents/child.d.ts +55 -7
  405. package/dist/runtime/subagents/child.js +105 -7
  406. package/dist/runtime/subagents/definition.d.ts +12 -3
  407. package/dist/runtime/subagents/definition.js +46 -32
  408. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  409. package/dist/runtime/subagents/deliveries.js +228 -0
  410. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  411. package/dist/runtime/subagents/dispatch.js +212 -141
  412. package/dist/runtime/subagents/limits.d.ts +24 -5
  413. package/dist/runtime/subagents/limits.js +40 -6
  414. package/dist/runtime/subagents/messages.d.ts +95 -0
  415. package/dist/runtime/subagents/messages.js +328 -0
  416. package/dist/runtime/subagents/preamble.d.ts +4 -4
  417. package/dist/runtime/subagents/preamble.js +9 -7
  418. package/dist/runtime/subagents/progress.d.ts +8 -6
  419. package/dist/runtime/subagents/progress.js +11 -6
  420. package/dist/runtime/subagents/render.d.ts +30 -0
  421. package/dist/runtime/subagents/render.js +53 -0
  422. package/dist/runtime/subagents/roster.d.ts +24 -7
  423. package/dist/runtime/subagents/roster.js +47 -11
  424. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  425. package/dist/runtime/subagents/skill-fork.js +8 -4
  426. package/dist/runtime/subagents/status.d.ts +14 -0
  427. package/dist/runtime/subagents/status.js +23 -0
  428. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  429. package/dist/runtime/subagents/subagents.service.js +11 -6
  430. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  431. package/dist/runtime/usage-report-jobs.js +158 -0
  432. package/dist/runtime/usage-report.d.ts +33 -38
  433. package/dist/runtime/usage-report.js +169 -96
  434. package/dist/runtime/waits.d.ts +140 -37
  435. package/dist/runtime/waits.js +394 -106
  436. package/dist/sandbox/jobs.d.ts +40 -13
  437. package/dist/sandbox/jobs.js +57 -20
  438. package/dist/sandbox/leases.d.ts +37 -54
  439. package/dist/sandbox/leases.js +71 -115
  440. package/dist/sandbox/providers.d.ts +2 -2
  441. package/dist/sandbox/providers.js +1 -1
  442. package/dist/sandbox/sandbox.module.d.ts +3 -2
  443. package/dist/sandbox/sandbox.module.js +4 -3
  444. package/dist/sandbox/sandbox.service.d.ts +229 -134
  445. package/dist/sandbox/sandbox.service.js +630 -409
  446. package/dist/skills/catalog.d.ts +3 -2
  447. package/dist/skills/catalog.js +21 -43
  448. package/dist/skills/changes.controller.d.ts +7 -0
  449. package/dist/skills/changes.controller.js +19 -1
  450. package/dist/skills/invoke.js +8 -3
  451. package/dist/skills/package.d.ts +20 -1
  452. package/dist/skills/package.js +28 -1
  453. package/dist/skills/skills.controller.d.ts +39 -4
  454. package/dist/skills/skills.controller.js +88 -10
  455. package/dist/skills/skills.module.js +10 -1
  456. package/dist/skills/skills.service.d.ts +106 -26
  457. package/dist/skills/skills.service.js +421 -75
  458. package/dist/skills/usable.d.ts +81 -0
  459. package/dist/skills/usable.js +379 -0
  460. package/dist/tools/approvals.service.d.ts +20 -2
  461. package/dist/tools/approvals.service.js +23 -4
  462. package/dist/tools/builtin-names.d.ts +21 -5
  463. package/dist/tools/builtin-names.js +30 -5
  464. package/dist/tools/builtins/agent.d.ts +23 -21
  465. package/dist/tools/builtins/agent.js +62 -55
  466. package/dist/tools/builtins/builtin-tools.d.ts +6 -2
  467. package/dist/tools/builtins/builtin-tools.js +37 -12
  468. package/dist/tools/builtins/handback.d.ts +28 -0
  469. package/dist/tools/builtins/handback.js +53 -0
  470. package/dist/tools/builtins/platform.d.ts +34 -0
  471. package/dist/tools/builtins/platform.js +362 -0
  472. package/dist/tools/builtins/sandbox/bash.js +13 -3
  473. package/dist/tools/builtins/sandbox/common.d.ts +43 -24
  474. package/dist/tools/builtins/sandbox/common.js +80 -45
  475. package/dist/tools/builtins/sandbox/edit.js +2 -2
  476. package/dist/tools/builtins/sandbox/glob.js +2 -2
  477. package/dist/tools/builtins/sandbox/grep.js +2 -4
  478. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  479. package/dist/tools/builtins/sandbox/index.js +1 -1
  480. package/dist/tools/builtins/sandbox/read.js +1 -1
  481. package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
  482. package/dist/tools/builtins/sandbox/task-output.js +30 -5
  483. package/dist/tools/builtins/sandbox/task-stop.js +2 -1
  484. package/dist/tools/builtins/sandbox/write.js +2 -2
  485. package/dist/tools/builtins/send-message.d.ts +56 -0
  486. package/dist/tools/builtins/send-message.js +100 -0
  487. package/dist/tools/builtins/skill-load.d.ts +22 -14
  488. package/dist/tools/builtins/skill-load.js +86 -57
  489. package/dist/tools/builtins/skill-write.js +1 -1
  490. package/dist/tools/builtins/web/extract.js +5 -1
  491. package/dist/tools/builtins/web/fetch.js +1 -0
  492. package/dist/tools/builtins/web/search.js +1 -0
  493. package/dist/tools/connectors.controller.d.ts +10 -0
  494. package/dist/tools/connectors.controller.js +12 -0
  495. package/dist/tools/connectors.service.d.ts +46 -5
  496. package/dist/tools/connectors.service.js +94 -15
  497. package/dist/tools/extension-tools.controller.d.ts +14 -0
  498. package/dist/tools/extension-tools.controller.js +37 -0
  499. package/dist/tools/info.d.ts +42 -1
  500. package/dist/tools/info.js +64 -1
  501. package/dist/tools/org-tool-switches.d.ts +74 -0
  502. package/dist/tools/org-tool-switches.js +184 -0
  503. package/dist/tools/pipeline.d.ts +46 -40
  504. package/dist/tools/pipeline.js +193 -364
  505. package/dist/tools/policy.d.ts +1 -1
  506. package/dist/tools/policy.js +36 -16
  507. package/dist/tools/registry.d.ts +98 -5
  508. package/dist/tools/registry.js +87 -9
  509. package/dist/tools/tools.module.js +12 -2
  510. package/dist/ui/views.d.ts +2 -1
  511. package/dist/ui/views.js +17 -3
  512. package/package.json +3 -3
  513. package/src/migrations/0074_subagent_tree.sql +50 -0
  514. package/src/migrations/0075_plugin_scope.sql +61 -0
  515. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  516. package/src/migrations/0077_scope_requests.sql +52 -0
  517. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  518. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  519. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  520. package/src/migrations/0081_platform_components.sql +129 -0
  521. package/src/migrations/0082_platform_migration.sql +33 -0
  522. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  523. package/src/migrations/0084_org_owned_items.sql +85 -0
  524. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  525. package/src/migrations/0086_org_layering.sql +30 -0
  526. package/src/migrations/0087_approval_summary.sql +6 -0
  527. package/src/migrations/0088_environments.sql +80 -0
  528. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  529. package/dist/catalog/upgrade-targets.d.ts +0 -56
  530. package/dist/catalog/upgrade-targets.js +0 -90
  531. package/dist/conversations/sandbox-status.d.ts +0 -24
  532. package/dist/conversations/sandbox-status.js +0 -52
  533. package/dist/extensions/org-config.controller.d.ts +0 -32
  534. package/dist/extensions/org-config.controller.js +0 -70
@@ -8,6 +8,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
10
  import { Inject, Injectable } from "@nestjs/common";
11
+ import { PluginScopeSyncProcessor } from "../catalog/scope-sync.js";
11
12
  import { ChannelsProcessor } from "../channels/channels.module.js";
12
13
  import { ChannelOutbound } from "../channels/outbound.js";
13
14
  import { TitleQueue } from "../conversations/titles.js";
@@ -24,8 +25,8 @@ import { UsageReporter } from "../runtime/usage-report.js";
24
25
  /**
25
26
  * The worker role's parts, driven by `KernelLifecycle` at fixed points of its start order and stop
26
27
  * phases (so they stay ordered after the extension load and before the extension host closes): the
27
- * queue consumers (runs, sub-agent runs, evals, maintenance, channel deliveries, `usage.report`,
28
- * titles) and the schedulers of the `@LockedCron` / `@LockedInterval` jobs. Provided only by
28
+ * queue consumers (runs, sub-agent runs, evals, maintenance, the plugin scope sync, channel
29
+ * deliveries, `usage.report`, titles) and the schedulers of the `@LockedCron` / `@LockedInterval` jobs. Provided only by
29
30
  * `WorkerModule`, so a process without the worker role has none of them.
30
31
  */
31
32
  let WorkerRole = class WorkerRole {
@@ -44,13 +45,14 @@ let WorkerRole = class WorkerRole {
44
45
  channelsProcessor;
45
46
  evalsProcessor;
46
47
  maintenanceProcessor;
48
+ scopeProcessor;
47
49
  /** The startup config (the roles). */
48
50
  config;
49
51
  /** The run worker was started: the runs phase drains it. */
50
52
  runsStarted = false;
51
53
  /** The eval worker was started: the runs phase drains it. */
52
54
  evalsStarted = false;
53
- constructor(config, log, intervals, scheduledRuns, runWorker, evalWorker, usageReport, titles, channelOutbound, runsProcessor, subagentRunsProcessor, usageProcessor, titleProcessor, channelsProcessor, evalsProcessor, maintenanceProcessor) {
55
+ constructor(config, log, intervals, scheduledRuns, runWorker, evalWorker, usageReport, titles, channelOutbound, runsProcessor, subagentRunsProcessor, usageProcessor, titleProcessor, channelsProcessor, evalsProcessor, maintenanceProcessor, scopeProcessor) {
54
56
  this.log = log;
55
57
  this.intervals = intervals;
56
58
  this.scheduledRuns = scheduledRuns;
@@ -66,6 +68,7 @@ let WorkerRole = class WorkerRole {
66
68
  this.channelsProcessor = channelsProcessor;
67
69
  this.evalsProcessor = evalsProcessor;
68
70
  this.maintenanceProcessor = maintenanceProcessor;
71
+ this.scopeProcessor = scopeProcessor;
69
72
  this.config = config.get();
70
73
  }
71
74
  /**
@@ -92,6 +95,7 @@ let WorkerRole = class WorkerRole {
92
95
  }
93
96
  checkpoint();
94
97
  this.maintenanceProcessor.start();
98
+ this.scopeProcessor.start();
95
99
  this.channelOutbound.startWorker(this.channelsProcessor.worker);
96
100
  this.usageReport.startWorker(this.usageProcessor.worker);
97
101
  this.titles.startWorker(this.titleProcessor.worker);
@@ -101,6 +105,8 @@ let WorkerRole = class WorkerRole {
101
105
  // The gate opens: from here on ticks run; the runOnStart jobs run once now, in the background
102
106
  this.scheduledRuns.open();
103
107
  this.intervals.runStartJobs();
108
+ // Every plugin's scope converges once per worker start (a failed or lost sync is retried)
109
+ this.scopeProcessor.resync();
104
110
  }
105
111
  /**
106
112
  * Closes the start gate and stops the schedulers (no new tick; the runs in progress get the stop
@@ -117,9 +123,9 @@ let WorkerRole = class WorkerRole {
117
123
  drainEvals(budgetMs) {
118
124
  return this.evalsStarted ? this.evalWorker.close(budgetMs) : undefined;
119
125
  }
120
- /** Closes the maintenance queue's worker. */
121
- closeMaintenance() {
122
- return this.maintenanceProcessor.worker.close();
126
+ /** Closes the maintenance queue's worker and the plugin scope sync's (it stops between pairs). */
127
+ async closeMaintenance() {
128
+ await Promise.all([this.maintenanceProcessor.worker.close(), this.scopeProcessor.close()]);
123
129
  }
124
130
  };
125
131
  WorkerRole = __decorate([
@@ -139,6 +145,7 @@ WorkerRole = __decorate([
139
145
  __param(12, Inject(TitleProcessor)),
140
146
  __param(13, Inject(ChannelsProcessor)),
141
147
  __param(14, Inject(EvalsProcessor)),
142
- __param(15, Inject(MaintenanceProcessor))
148
+ __param(15, Inject(MaintenanceProcessor)),
149
+ __param(16, Inject(PluginScopeSyncProcessor))
143
150
  ], WorkerRole);
144
151
  export { WorkerRole };
@@ -5,7 +5,7 @@ import type { KernelConfig } from "../config/schema.js";
5
5
  * `worker`: the cron scheduler and the `@LockedInterval` scheduler (`KernelScheduleModule`, the one
6
6
  * place `ScheduleModule.forRoot` is imported), every fixed-period job (`@LockedCron` /
7
7
  * `@LockedInterval`, each once per tick across replicas), every queue consumer (`@Processor`: runs,
8
- * sub-agent runs, `usage.report`, titles, evals, maintenance, channel deliveries) and
8
+ * sub-agent runs, `usage.report`, titles, evals, maintenance, channel deliveries, the plugin scope sync) and
9
9
  * {@link WorkerRole}, which `KernelLifecycle` drives. A process without the worker role runs no cron
10
10
  * and no BullMQ worker (the queues' producers exist on every role).
11
11
  */
@@ -10,18 +10,22 @@ import { BackgroundModule } from "../background/background.module.js";
10
10
  import { BackgroundTaskPollJob } from "../background/poll.job.js";
11
11
  import { CatalogModule } from "../catalog/catalog.module.js";
12
12
  import { CatalogJobs } from "../catalog/jobs.js";
13
+ import { PlatformMigration } from "../catalog/platform-migration.js";
14
+ import { PluginScopeWorkersModule } from "../catalog/scope-sync-workers.js";
13
15
  import { ChannelsModule, ChannelWorkersModule } from "../channels/channels.module.js";
14
16
  import { GatewayCheckJob } from "../channels/supervisor.js";
15
17
  import { AttachmentsModule } from "../conversations/attachments.module.js";
16
18
  import { AttachmentCleanupJob } from "../conversations/attachments.service.js";
17
19
  import { EventLogModule } from "../conversations/event-log.js";
18
20
  import { TitlesModule } from "../conversations/titles.js";
21
+ import { LegacySandboxCleanupJob } from "../environments/legacy-cleanup.job.js";
19
22
  import { EvalWorkersModule } from "../evals/evals.module.js";
20
23
  import { ExtensionsModule } from "../extensions/extensions.module.js";
21
24
  import { PluginsReconcileJob } from "../extensions/lifecycle.js";
22
25
  import { KernelScheduleModule } from "../infra/schedule/schedule.module.js";
23
26
  import { DirectoryScanJob } from "../orgs/directory-sync.js";
24
27
  import { OffboardSweepJob } from "../orgs/offboarding.js";
28
+ import { OrgLockModule } from "../orgs/org-lock.js";
25
29
  import { OrgsModule } from "../orgs/orgs.module.js";
26
30
  import { MaintenanceModule } from "../runtime/maintenance.js";
27
31
  import { RuntimeWorkersModule } from "../runtime/run-processors.js";
@@ -40,7 +44,7 @@ import { WorkerRole } from "./worker-role.js";
40
44
  * `worker`: the cron scheduler and the `@LockedInterval` scheduler (`KernelScheduleModule`, the one
41
45
  * place `ScheduleModule.forRoot` is imported), every fixed-period job (`@LockedCron` /
42
46
  * `@LockedInterval`, each once per tick across replicas), every queue consumer (`@Processor`: runs,
43
- * sub-agent runs, `usage.report`, titles, evals, maintenance, channel deliveries) and
47
+ * sub-agent runs, `usage.report`, titles, evals, maintenance, channel deliveries, the plugin scope sync) and
44
48
  * {@link WorkerRole}, which `KernelLifecycle` drives. A process without the worker role runs no cron
45
49
  * and no BullMQ worker (the queues' producers exist on every role).
46
50
  */
@@ -55,6 +59,7 @@ let WorkerModule = WorkerModule_1 = class WorkerModule {
55
59
  EvalWorkersModule.forRoot(config),
56
60
  ChannelWorkersModule.forRoot(config),
57
61
  MaintenanceModule,
62
+ PluginScopeWorkersModule,
58
63
  // the domains the fixed-period jobs call
59
64
  RuntimeModule,
60
65
  UsageReportModule,
@@ -67,6 +72,7 @@ let WorkerModule = WorkerModule_1 = class WorkerModule {
67
72
  ToolsModule,
68
73
  CatalogModule,
69
74
  OrgsModule,
75
+ OrgLockModule,
70
76
  ExtensionsModule,
71
77
  ChannelsModule,
72
78
  ],
@@ -76,9 +82,11 @@ let WorkerModule = WorkerModule_1 = class WorkerModule {
76
82
  AttachmentCleanupJob,
77
83
  StoragePurgeJob,
78
84
  SandboxSweepJobs,
85
+ LegacySandboxCleanupJob,
79
86
  BackgroundTaskPollJob,
80
87
  ToolJobs,
81
88
  CatalogJobs,
89
+ PlatformMigration,
82
90
  DirectoryScanJob,
83
91
  OffboardSweepJob,
84
92
  PluginsReconcileJob,
@@ -54,8 +54,8 @@ export interface BuildModelRequestInput {
54
54
  model: ModelInfo;
55
55
  step: number;
56
56
  /**
57
- * loop 已吸收到的位置(R31):the largest seq of the absorbable events (`user_message` and
58
- * `background_task_finished`, {@link isAbsorbable}) the loop took. 提供时:
57
+ * loop 已吸收到的位置(R31):the largest seq of the absorbable events (`user_message`,
58
+ * `background_task_finished` and `subagent_delivery`, {@link isAbsorbable}) the loop took. 提供时:
59
59
  * - seq 大于它的可吸收事件不进请求(运行中途到达、尚未被吸收的插话或后台任务结束,由后续步骤吸收或触发下一轮);
60
60
  * - 每个可吸收事件放在**吸收它的那次模型调用**的位置:日志里第一个 `request.absorbedUpToSeq`
61
61
  * 不小于它的 `model_call` 之前(没有该字段的旧 model_call 视为吸收了它之前的全部消息),
@@ -232,8 +232,10 @@ export declare function summaryText(summary: string): string;
232
232
  * - messages:最近一条摘要(若有)作为首条 user 消息,其后按 seq 回放 `coversUpToSeq` 之后的
233
233
  * `user_message` / `assistant_message`(content 原样,含 opaque;aborted 的也回放;媒体引用按
234
234
  * {@link resolveMedia} 换成 base64 或文字占位)/ `reminder`
235
- * (`role: "system"`,放在它所在的位置)/ `background_task_finished`(`role: "system"`, the text of
236
- * {@link renderBackgroundFinished}, placed like a user_message);`tool_result` 事件还原为紧随其 assistant 消息之后的一条 user 消息
235
+ * (`role: "system"`,放在它所在的位置)/ `tools_changed` (`role: "system"`, the text of {@link toolsChangedText}, at its position) /
236
+ * `background_task_finished`(`role: "system"`, the text of
237
+ * {@link renderBackgroundFinished}, placed like a user_message)/ `subagent_delivery` (likewise,
238
+ * the text of {@link renderSubagentDelivery});`tool_result` 事件还原为紧随其 assistant 消息之后的一条 user 消息
237
239
  * (同一步的多个结果合并,按该 assistant 消息里 tool_call 的顺序;找不到对应调用的结果不进请求)。
238
240
  * 其他事件不进请求。提供 `absorbedUpToSeq` 时,
239
241
  * 尚未被吸收的可吸收事件不进请求,运行中途到达的放在吸收它的调用处(见 BuildModelRequestInput)。
@@ -3,8 +3,10 @@ import { MEDIA_LIMITS, } from "@capybara-hq/plugin-sdk";
3
3
  import { renderBackgroundFinished } from "../../background/render.js";
4
4
  import { isAbsorbable, } from "../../conversations/events.js";
5
5
  import { catalogText, isAlwaysLoaded } from "../../tools/builtins/tool-search.js";
6
+ import { renderSubagentDelivery } from "../subagents/render.js";
6
7
  import { LEGACY_CATALOG_HEADER, LEGACY_SKILL_TEXTS, usesLegacyToolNames } from "./legacy-text.js";
7
8
  import { invokedSkillNames, invokedSkillsText, SKILL_TEXTS, skillsCatalogEvents, snapshotChangeText, snapshotCurrentText, snapshotSystemText, systemSkillsCatalog, } from "./skills.js";
9
+ import { toolsChangedText } from "./tool-changes.js";
8
10
  /**
9
11
  * 平台行为规范(模型可见,英文)。短而通用(spec 6 原则 5);不放时间戳、会话 ID 等会变化的内容,
10
12
  * 保证同一 agent 版本在所有会话中 system 前缀一致、可命中提示词缓存。改动它会让所有缓存失效。
@@ -332,8 +334,10 @@ export function summaryText(summary) {
332
334
  * - messages:最近一条摘要(若有)作为首条 user 消息,其后按 seq 回放 `coversUpToSeq` 之后的
333
335
  * `user_message` / `assistant_message`(content 原样,含 opaque;aborted 的也回放;媒体引用按
334
336
  * {@link resolveMedia} 换成 base64 或文字占位)/ `reminder`
335
- * (`role: "system"`,放在它所在的位置)/ `background_task_finished`(`role: "system"`, the text of
336
- * {@link renderBackgroundFinished}, placed like a user_message);`tool_result` 事件还原为紧随其 assistant 消息之后的一条 user 消息
337
+ * (`role: "system"`,放在它所在的位置)/ `tools_changed` (`role: "system"`, the text of {@link toolsChangedText}, at its position) /
338
+ * `background_task_finished`(`role: "system"`, the text of
339
+ * {@link renderBackgroundFinished}, placed like a user_message)/ `subagent_delivery` (likewise,
340
+ * the text of {@link renderSubagentDelivery});`tool_result` 事件还原为紧随其 assistant 消息之后的一条 user 消息
337
341
  * (同一步的多个结果合并,按该 assistant 消息里 tool_call 的顺序;找不到对应调用的结果不进请求)。
338
342
  * 其他事件不进请求。提供 `absorbedUpToSeq` 时,
339
343
  * 尚未被吸收的可吸收事件不进请求,运行中途到达的放在吸收它的调用处(见 BuildModelRequestInput)。
@@ -381,7 +385,7 @@ export function buildModelRequest(input) {
381
385
  lastCall = absorbedBy(e);
382
386
  }
383
387
  /**
384
- * 第 i 个事件(可吸收事件:user_message / background_task_finished)的放置方式:
388
+ * 第 i 个事件(可吸收事件:user_message / background_task_finished / subagent_delivery)的放置方式:
385
389
  * - `inline`:在吸收它的调用(之后第一个 `absorbedBy ≥ seq` 的 model_call,或本次请求)之前,
386
390
  * 没有「由未吸收它的调用生成的回复」→ 按 seq 原位回放(常规情况,与不提供 absorbedUpToSeq 时一致);
387
391
  * - `deferred`:它之后有非空 assistant_message 是由一次没有吸收它的 model_call 生成的(它在那一步
@@ -467,10 +471,20 @@ export function buildModelRequest(input) {
467
471
  };
468
472
  /** 被某次模型调用跳过(运行中途到达)、尚未被吸收的可吸收事件,按 seq 升序。 */
469
473
  let deferred = [];
470
- /** An absorbable event as a request message: a user turn, or a finished task's system text. */
471
- const absorbableMessage = (e) => e.type === "user_message"
472
- ? { role: "user", content: userBlocks(e) }
473
- : { role: "system", content: renderBackgroundFinished(e.payload) };
474
+ /**
475
+ * An absorbable event as a request message: a user turn, or the system text of a finished task
476
+ * or a sub-agent's delivery.
477
+ */
478
+ const absorbableMessage = (e) => {
479
+ switch (e.type) {
480
+ case "user_message":
481
+ return { role: "user", content: userBlocks(e) };
482
+ case "background_task_finished":
483
+ return { role: "system", content: renderBackgroundFinished(e.payload) };
484
+ case "subagent_delivery":
485
+ return { role: "system", content: renderSubagentDelivery(e.payload) };
486
+ }
487
+ };
474
488
  /**
475
489
  * 把已被吸收(seq ≤ upTo)的延后消息按 seq 顺序放进 messages,插在末尾连续的 system 提醒之前
476
490
  * (若有)。这样某一步自己写在 model_call 之前的提醒(含收尾提醒)仍排在它所跟随的用户消息之后,
@@ -575,6 +589,11 @@ export function buildModelRequest(input) {
575
589
  messages.push({ role: "system", content: e.payload.text });
576
590
  reminderSeqs.push(e.seq);
577
591
  break;
592
+ // the tool set changed since the previous request (tool naming spec §9.1); one covered by
593
+ // the summary is dropped: the request's tool list is current anyway
594
+ case "tools_changed":
595
+ messages.push({ role: "system", content: toolsChangedText(e.payload) });
596
+ break;
578
597
  // hook_denied is not model-visible: the model sees only the denied tool call's tool_result
579
598
  // (and nothing for a denied model request), so request building skips it
580
599
  case "hook_denied":
@@ -8,6 +8,7 @@
8
8
  * run writes a new snapshot announcing the new map, and old snapshots keep their text (phase C
9
9
  * changed the Task / Agent line, sub-agents spec §16.5; the tool-naming change shortened it to the
10
10
  * Claude Code names, spec 2026-10-29 §6; background Bash made TaskOutput and TaskStop available,
11
- * spec 2026-11-05 §4.4; WebFetch and WebSearch joined the same-name list with the web tools).
11
+ * spec 2026-11-05 §4.4; WebFetch and WebSearch joined the same-name list with the web tools;
12
+ * SendMessage joined it when it replaced `Agent` with `resume`, agent map spec §4.2).
12
13
  */
13
14
  export declare const CLAUDE_CODE_TOOL_MAP: string;
@@ -8,17 +8,18 @@
8
8
  * run writes a new snapshot announcing the new map, and old snapshots keep their text (phase C
9
9
  * changed the Task / Agent line, sub-agents spec §16.5; the tool-naming change shortened it to the
10
10
  * Claude Code names, spec 2026-10-29 §6; background Bash made TaskOutput and TaskStop available,
11
- * spec 2026-11-05 §4.4; WebFetch and WebSearch joined the same-name list with the web tools).
11
+ * spec 2026-11-05 §4.4; WebFetch and WebSearch joined the same-name list with the web tools;
12
+ * SendMessage joined it when it replaced `Agent` with `resume`, agent map spec §4.2).
12
13
  */
13
14
  export const CLAUDE_CODE_TOOL_MAP = [
14
15
  "Some skills in this conversation were written for Claude Code. Its tools Bash, Read, Write, Edit,",
15
- "Glob, Grep, Skill, AskUserQuestion, ToolSearch, Agent, WebFetch and WebSearch have the same names here, when they are",
16
+ "Glob, Grep, Skill, AskUserQuestion, ToolSearch, Agent, SendMessage, WebFetch and WebSearch have the same names here, when they are",
16
17
  "in your tools. For the others:",
17
18
  "- MultiEdit -> several Edit calls",
18
19
  "- TodoWrite -> plugin__todo__write when it is in your tools; otherwise keep the task list in your replies",
19
- "- Task -> Agent; SendMessage to a sub-agent -> Agent with resume; model names haiku / sonnet / opus -> fast / standard / capable",
20
+ "- Task -> Agent; model names haiku / sonnet / opus -> fast / standard / capable",
20
21
  "- TaskOutput -> TaskOutput, TaskStop -> TaskStop",
21
22
  "- Any other tool a skill names (for example NotebookEdit, EnterWorktree) -> not available unless one of your tools does the same job",
22
23
  // biome-ignore lint/suspicious/noTemplateCurlyInString: the literal Claude Code variable the model reads
23
- "The sandbox tools exist only when this agent has a sandbox; without them a skill's scripts cannot run. A path such as ${CLAUDE_PLUGIN_ROOT}/skills/<name>/... means /skills/<name>/... after Skill has copied that skill into the sandbox.",
24
+ "The sandbox tools exist only when this agent has a sandbox; without them a skill's scripts cannot run. A path such as ${CLAUDE_PLUGIN_ROOT}/skills/<name>/... means /skills/<name>@<version-id>/... after Skill has copied that skill into the sandbox.",
24
25
  ].join("\n");
@@ -1,5 +1,7 @@
1
1
  import { renderBackgroundFinished } from "../../background/render.js";
2
+ import { renderSubagentDelivery } from "../subagents/render.js";
2
3
  import { latestSummary } from "./build.js";
4
+ import { toolsChangedText } from "./tool-changes.js";
3
5
  /** 压缩请求的标记:放在 system 中,便于识别(model-fake 据此返回摘要)。 */
4
6
  export const COMPACTION_MARKER = "CAPYBARA_COMPACTION";
5
7
  /** 压缩请求的输出上限。 */
@@ -112,9 +114,16 @@ function transcriptLine(e) {
112
114
  }
113
115
  case "reminder":
114
116
  return `System reminder: ${e.payload.text}`;
117
+ // a tool set change is a system message of the request (build.ts); kept in the transcript so
118
+ // the summary does not carry an earlier "I have no such tool" forward as current
119
+ case "tools_changed":
120
+ return `System reminder: ${toolsChangedText(e.payload)}`;
115
121
  // a finished background task is a system message of the request (build.ts)
116
122
  case "background_task_finished":
117
123
  return `System reminder: ${renderBackgroundFinished(e.payload)}`;
124
+ // a sub-agent's delivery is a system message of the request (build.ts)
125
+ case "subagent_delivery":
126
+ return `System reminder: ${renderSubagentDelivery(e.payload)}`;
118
127
  // phase D: a forked skill's report is user content of the request (build.ts)
119
128
  case "skill_fork_result":
120
129
  return `User: ${e.payload.text}`;
@@ -3,3 +3,5 @@
3
3
  * 调用方先把它写成 `reminder` 事件,再由 `buildModelRequest` 按事件重建进请求。
4
4
  */
5
5
  export declare function turnLimitReminder(step: number, maxSteps: number): string | null;
6
+ /** 所用模型不支持工具(`capabilities.tools` 为 false)时的提醒(模型可见,英文)。 */
7
+ export declare const TOOLS_UNSUPPORTED_REMINDER = "Tools are unavailable for this model. Answer without calling tools.";
@@ -9,3 +9,5 @@ export function turnLimitReminder(step, maxSteps) {
9
9
  return null;
10
10
  return `You are close to the step limit for this turn (step ${step} of ${maxSteps}). Wrap up and give the user your best answer now.`;
11
11
  }
12
+ /** 所用模型不支持工具(`capabilities.tools` 为 false)时的提醒(模型可见,英文)。 */
13
+ export const TOOLS_UNSUPPORTED_REMINDER = "Tools are unavailable for this model. Answer without calling tools.";
@@ -81,11 +81,18 @@ export function sameSnapshot(a, b) {
81
81
  function catalogChanges(prev, next, pinnedIds) {
82
82
  const before = new Map(prev.map((s) => [s.id, s]));
83
83
  const after = new Map(next.map((s) => [s.id, s]));
84
- const added = next.filter((s) => !before.has(s.id));
85
- const removed = prev.filter((s) => !after.has(s.id));
84
+ // A skill renamed under its id (the platform components migration renames a clashing org skill)
85
+ // reads as its old name removed and its new name added: the model calls skills by name.
86
+ const renamed = (s, other) => {
87
+ const o = other.get(s.id);
88
+ return o !== undefined && o.name !== s.name;
89
+ };
90
+ const added = next.filter((s) => !before.has(s.id) || renamed(s, before));
91
+ const removed = prev.filter((s) => !after.has(s.id) || renamed(s, after));
86
92
  const updated = next.filter((s) => {
87
93
  const p = before.get(s.id);
88
94
  return (p !== undefined &&
95
+ p.name === s.name &&
89
96
  !pinnedIds?.has(s.id) &&
90
97
  (p.version !== s.version || p.description !== s.description || p.source !== s.source));
91
98
  });
@@ -0,0 +1,27 @@
1
+ import type { ConversationEvent, EventPayload } from "../../conversations/events.js";
2
+ /**
3
+ * Tool set changes mid-conversation (tool naming spec §9.1). The kernel resolves the tools on every
4
+ * step, so an extension switched on in the org, a connector set up or a sub-agent roster added
5
+ * changes the next request's tool list; earlier answers in the history ("I have no web search")
6
+ * would still contradict it. A step whose resolved set differs from the one the previous request
7
+ * offered logs a `tools_changed` event before its request; request building renders it at its
8
+ * position as a system message ({@link toolsChangedText}).
9
+ */
10
+ export type ToolsChange = Pick<EventPayload<"tools_changed">, "added" | "removed">;
11
+ /**
12
+ * The tool set the conversation's previous model request offered, from the log alone: the last
13
+ * `model_call`'s `tools` and `catalog` keys (with `ToolSearch` the catalog holds the deferred
14
+ * tools, so the union is the whole resolved set), then any `tools_changed` logged after it (a
15
+ * step that logged its change and crashed before its request: the change is not logged twice).
16
+ * Skipped: a `model_call` without recorded tools (older logs) and a call whose tools were left out
17
+ * because its model has no tool support (empty, with that step's unsupported reminder): those say
18
+ * nothing about the resolved set. Null when no request offered a known set yet.
19
+ */
20
+ export declare function previousToolSet(events: readonly ConversationEvent[]): Set<string> | null;
21
+ /**
22
+ * The change from the previous request's tool set to `current` (sorted names), or null: before
23
+ * the conversation's first request (its list is the baseline) and when nothing changed.
24
+ */
25
+ export declare function toolSetChange(events: readonly ConversationEvent[], current: readonly string[]): ToolsChange | null;
26
+ /** The model-visible text of a `tools_changed` event (English). */
27
+ export declare function toolsChangedText(change: ToolsChange): string;
@@ -0,0 +1,60 @@
1
+ import { TOOLS_UNSUPPORTED_REMINDER } from "./reminders.js";
2
+ /**
3
+ * The tool set the conversation's previous model request offered, from the log alone: the last
4
+ * `model_call`'s `tools` and `catalog` keys (with `ToolSearch` the catalog holds the deferred
5
+ * tools, so the union is the whole resolved set), then any `tools_changed` logged after it (a
6
+ * step that logged its change and crashed before its request: the change is not logged twice).
7
+ * Skipped: a `model_call` without recorded tools (older logs) and a call whose tools were left out
8
+ * because its model has no tool support (empty, with that step's unsupported reminder): those say
9
+ * nothing about the resolved set. Null when no request offered a known set yet.
10
+ */
11
+ export function previousToolSet(events) {
12
+ const unsupported = new Set();
13
+ for (const e of events) {
14
+ if (e.type === "reminder" && e.payload.text === TOOLS_UNSUPPORTED_REMINDER) {
15
+ unsupported.add(`${e.runId ?? ""}\u0000${e.payload.step}`);
16
+ }
17
+ }
18
+ let known = null;
19
+ for (const e of events) {
20
+ if (e.type === "model_call") {
21
+ const { tools, catalog } = e.payload.request;
22
+ if (tools === undefined)
23
+ continue;
24
+ const keys = [...tools, ...(catalog ?? [])].map((t) => t.key);
25
+ if (keys.length === 0 && unsupported.has(`${e.runId ?? ""}\u0000${e.payload.step}`))
26
+ continue;
27
+ known = new Set(keys);
28
+ }
29
+ else if (e.type === "tools_changed" && known !== null) {
30
+ for (const k of e.payload.removed)
31
+ known.delete(k);
32
+ for (const k of e.payload.added)
33
+ known.add(k);
34
+ }
35
+ }
36
+ return known;
37
+ }
38
+ /**
39
+ * The change from the previous request's tool set to `current` (sorted names), or null: before
40
+ * the conversation's first request (its list is the baseline) and when nothing changed.
41
+ */
42
+ export function toolSetChange(events, current) {
43
+ const before = previousToolSet(events);
44
+ if (before === null)
45
+ return null;
46
+ const now = new Set(current);
47
+ const added = [...now].filter((k) => !before.has(k)).sort();
48
+ const removed = [...before].filter((k) => !now.has(k)).sort();
49
+ return added.length === 0 && removed.length === 0 ? null : { added, removed };
50
+ }
51
+ /** The model-visible text of a `tools_changed` event (English). */
52
+ export function toolsChangedText(change) {
53
+ const parts = ["Your tools changed."];
54
+ if (change.added.length > 0)
55
+ parts.push(`Now available: ${change.added.join(", ")}.`);
56
+ if (change.removed.length > 0)
57
+ parts.push(`No longer available: ${change.removed.join(", ")}.`);
58
+ parts.push("Use the current tool list; it replaces anything said earlier in this conversation about which tools you have.");
59
+ return parts.join(" ");
60
+ }
@@ -1,4 +1,4 @@
1
- import type { AvailableHook, HookModelRequest, HookParentScope, HookPayloads, HookScope, Logger, ModelRequest } from "@capybara-hq/plugin-sdk";
1
+ import type { AvailableHook, EmbeddingRequestHookPayload, HookModelRequest, HookParentScope, HookPayloads, HookScope, Logger, ModelRequest } from "@capybara-hq/plugin-sdk";
2
2
  import type { AppendEvent, EventLog } from "../conversations/event-log.js";
3
3
  import type { EventPayload } from "../conversations/events.js";
4
4
  import type { HookOutcome, HookRegistry } from "../extensions/hooks.js";
@@ -67,6 +67,13 @@ export declare function hookDeniedEvent(at: DenialSite, mount: Extract<Available
67
67
  * and that the named plugin is only the first policy plugin on the mount.
68
68
  */
69
69
  export declare function hookDeniedAudit(at: DenialSite, payload: EventPayload<"hook_denied">, denial: HookDenial): AuditEntry;
70
+ /**
71
+ * The `hook.denied` audit entry of a denied embedding call (`ctx.models.embed`, spec B §5.4): no
72
+ * actor and no conversation; the target is the calling extension. The detail has the same fields
73
+ * as a conversation denial's (mount, plugin, sanitized reason, cause, raw error, markers) plus the
74
+ * call's purpose, extension, embedding purpose and model.
75
+ */
76
+ export declare function embeddingDeniedAudit(call: Pick<EmbeddingRequestHookPayload, "orgId" | "extension" | "embeddingPurpose" | "provider" | "model">, denial: HookDenial): AuditEntry;
70
77
  /** Audit entry shape (the argument of `audit()`). */
71
78
  export type AuditEntry = Parameters<typeof audit>[1];
72
79
  /**
@@ -105,13 +105,46 @@ export function hookDeniedAudit(at, payload, denial) {
105
105
  conversationId: at.conversationId,
106
106
  runId: at.runId,
107
107
  ...(at.agentId !== undefined && { agentId: at.agentId }),
108
- // the raw hook error: audit only, never in the conversation event (Ruling R12)
109
- ...(denial.detail !== undefined && { error: denial.detail }),
110
- ...(denial.preflight
111
- ? { preflight: true, firstPolicyPlugin: denial.plugin, causedByPlugin: false }
112
- : {}),
113
- // M-1: the named plugin is enabled but not loaded on the replica that handled the call
114
- ...(denial.notLoaded ? { notLoaded: true } : {}),
108
+ ...denialAuditDetail(denial),
109
+ },
110
+ };
111
+ }
112
+ /** The denial's audit-only fields: the raw hook error and the R10 / M-1 / spec A §6 markers. */
113
+ function denialAuditDetail(denial) {
114
+ return {
115
+ // the raw hook error: audit only, never in the conversation event (Ruling R12)
116
+ ...(denial.detail !== undefined && { error: denial.detail }),
117
+ ...(denial.preflight
118
+ ? { preflight: true, firstPolicyPlugin: denial.plugin, causedByPlugin: false }
119
+ : {}),
120
+ // M-1: the named plugin is enabled but not loaded on the replica that handled the call
121
+ ...(denial.notLoaded ? { notLoaded: true } : {}),
122
+ // layering spec A §6: the named plugin's effective config is not valid in the organization
123
+ ...(denial.needsConfig ? { needsConfig: true } : {}),
124
+ };
125
+ }
126
+ /**
127
+ * The `hook.denied` audit entry of a denied embedding call (`ctx.models.embed`, spec B §5.4): no
128
+ * actor and no conversation; the target is the calling extension. The detail has the same fields
129
+ * as a conversation denial's (mount, plugin, sanitized reason, cause, raw error, markers) plus the
130
+ * call's purpose, extension, embedding purpose and model.
131
+ */
132
+ export function embeddingDeniedAudit(call, denial) {
133
+ return {
134
+ orgId: call.orgId,
135
+ action: "hook.denied",
136
+ target: call.extension,
137
+ detail: {
138
+ mount: "model.request",
139
+ plugin: denial.plugin,
140
+ reason: denial.reason,
141
+ cause: denial.cause,
142
+ purpose: "embedding",
143
+ extension: call.extension,
144
+ embeddingPurpose: call.embeddingPurpose,
145
+ provider: call.provider,
146
+ model: call.model,
147
+ ...denialAuditDetail(denial),
115
148
  },
116
149
  };
117
150
  }
@@ -32,7 +32,9 @@ export interface LangGraphLoopHooks {
32
32
  * worker 崩溃后由其他副本从最近的 checkpoint 续跑(spec 4.4、Review Focus 1)。
33
33
  *
34
34
  * 图:`prepare → model →(tool_use)tools → prepare …`;prepare 发现步数超过上限 → `wrapUp` → 结束;
35
- * prepare finding the deadline passed, or (a sub-agent's run) its parent's token budget used up → end;
35
+ * prepare finding the deadline passed → end; a sub-agent's run finding its tree's token budget used
36
+ * up → `wrapUp` (one tool-less call that hands back its findings) → end, or end at once when the
37
+ * run has made no step yet (nothing new to report);
36
38
  * 模型中止或正常结束 → 结束。`durability: "sync"`:每个节点的 checkpoint 在下一个节点开始前落库。
37
39
  *
38
40
  * 幂等:`runModelStep` / `runFinalWrapUp` 按 (runId, step) 幂等,续跑重新执行 model 节点时若回复已在日志里,