@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5

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 (604) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +47 -16
  3. package/dist/admin/admin.controller.js +44 -19
  4. package/dist/admin/extensions.controller.d.ts +24 -3
  5. package/dist/admin/extensions.controller.js +48 -8
  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 +19 -0
  13. package/dist/agents/agent-lookup.js +21 -0
  14. package/dist/agents/agent-profile.service.d.ts +29 -0
  15. package/dist/agents/agent-profile.service.js +117 -0
  16. package/dist/agents/agents.controller.d.ts +168 -3
  17. package/dist/agents/agents.controller.js +201 -12
  18. package/dist/agents/agents.module.d.ts +4 -1
  19. package/dist/agents/agents.module.js +36 -6
  20. package/dist/agents/agents.service.d.ts +64 -27
  21. package/dist/agents/agents.service.js +199 -74
  22. package/dist/agents/definition.d.ts +53 -0
  23. package/dist/agents/definition.js +55 -0
  24. package/dist/agents/from-template.d.ts +106 -0
  25. package/dist/agents/from-template.js +649 -0
  26. package/dist/agents/from-template.service.d.ts +60 -0
  27. package/dist/agents/from-template.service.js +161 -0
  28. package/dist/agents/instruction-files.d.ts +60 -0
  29. package/dist/agents/instruction-files.js +111 -0
  30. package/dist/agents/models.controller.d.ts +9 -3
  31. package/dist/agents/models.controller.js +19 -4
  32. package/dist/agents/org-templates.d.ts +176 -0
  33. package/dist/agents/org-templates.js +827 -0
  34. package/dist/agents/pending-connector-requests.d.ts +77 -0
  35. package/dist/agents/pending-connector-requests.js +215 -0
  36. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  37. package/dist/agents/pending-connectors.controller.js +91 -0
  38. package/dist/agents/pending-connectors.service.d.ts +62 -0
  39. package/dist/agents/pending-connectors.service.js +282 -0
  40. package/dist/agents/profile.d.ts +96 -0
  41. package/dist/agents/profile.js +51 -0
  42. package/dist/agents/readiness.controller.d.ts +26 -0
  43. package/dist/agents/readiness.controller.js +56 -0
  44. package/dist/agents/templates.controller.d.ts +86 -5
  45. package/dist/agents/templates.controller.js +171 -7
  46. package/dist/agents/templates.d.ts +127 -23
  47. package/dist/agents/templates.js +476 -53
  48. package/dist/background/background.controller.d.ts +38 -0
  49. package/dist/background/background.controller.js +87 -0
  50. package/dist/background/background.module.d.ts +10 -0
  51. package/dist/background/background.module.js +39 -0
  52. package/dist/background/finish.d.ts +44 -0
  53. package/dist/background/finish.js +94 -0
  54. package/dist/background/launch-lock.d.ts +15 -0
  55. package/dist/background/launch-lock.js +40 -0
  56. package/dist/background/launch.d.ts +36 -0
  57. package/dist/background/launch.js +70 -0
  58. package/dist/background/poll.job.d.ts +56 -0
  59. package/dist/background/poll.job.js +190 -0
  60. package/dist/background/render.d.ts +23 -0
  61. package/dist/background/render.js +48 -0
  62. package/dist/background/session.d.ts +48 -0
  63. package/dist/background/session.js +79 -0
  64. package/dist/background/status.d.ts +35 -0
  65. package/dist/background/status.js +57 -0
  66. package/dist/background/stop.d.ts +68 -0
  67. package/dist/background/stop.js +243 -0
  68. package/dist/background/store.d.ts +162 -0
  69. package/dist/background/store.js +357 -0
  70. package/dist/background/store.module.d.ts +6 -0
  71. package/dist/background/store.module.js +22 -0
  72. package/dist/background/tasks.service.d.ts +77 -0
  73. package/dist/background/tasks.service.js +211 -0
  74. package/dist/background/wake-rules.d.ts +66 -0
  75. package/dist/background/wake-rules.js +113 -0
  76. package/dist/background/wake.d.ts +30 -0
  77. package/dist/background/wake.js +63 -0
  78. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  79. package/dist/catalog/admin-catalog.controller.js +213 -42
  80. package/dist/catalog/catalog-content.d.ts +58 -32
  81. package/dist/catalog/catalog-content.js +34 -8
  82. package/dist/catalog/catalog-import.module.d.ts +7 -0
  83. package/dist/catalog/catalog-import.module.js +60 -0
  84. package/dist/catalog/catalog-items.d.ts +111 -7
  85. package/dist/catalog/catalog-items.js +279 -13
  86. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  87. package/dist/catalog/catalog-scope.service.js +1116 -0
  88. package/dist/catalog/catalog.module.d.ts +7 -9
  89. package/dist/catalog/catalog.module.js +41 -31
  90. package/dist/catalog/catalog.service.d.ts +101 -29
  91. package/dist/catalog/catalog.service.js +104 -106
  92. package/dist/catalog/claude/agents.js +2 -0
  93. package/dist/catalog/cli.d.ts +11 -1
  94. package/dist/catalog/cli.js +26 -1
  95. package/dist/catalog/component-promotion.d.ts +96 -0
  96. package/dist/catalog/component-promotion.js +395 -0
  97. package/dist/catalog/component-scope.controller.d.ts +152 -0
  98. package/dist/catalog/component-scope.controller.js +287 -0
  99. package/dist/catalog/component-scope.service.d.ts +303 -0
  100. package/dist/catalog/component-scope.service.js +936 -0
  101. package/dist/catalog/component-state.d.ts +174 -0
  102. package/dist/catalog/component-state.js +437 -0
  103. package/dist/catalog/job-ids.d.ts +30 -0
  104. package/dist/catalog/job-ids.js +25 -0
  105. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  106. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  107. package/dist/catalog/marketplaces.controller.js +56 -7
  108. package/dist/catalog/marketplaces.service.d.ts +54 -14
  109. package/dist/catalog/marketplaces.service.js +71 -22
  110. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  111. package/dist/catalog/org-catalog.controller.js +181 -65
  112. package/dist/catalog/org-catalog.service.d.ts +65 -33
  113. package/dist/catalog/org-catalog.service.js +324 -157
  114. package/dist/catalog/org-extension-switch.d.ts +41 -0
  115. package/dist/catalog/org-extension-switch.js +115 -0
  116. package/dist/catalog/org-extension.controller.d.ts +119 -0
  117. package/dist/catalog/org-extension.controller.js +266 -0
  118. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  119. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  120. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  121. package/dist/catalog/org-plugin-uploads.js +116 -0
  122. package/dist/catalog/owned-items.d.ts +184 -0
  123. package/dist/catalog/owned-items.js +789 -0
  124. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  125. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  126. package/dist/catalog/ownership.d.ts +172 -0
  127. package/dist/catalog/ownership.js +326 -0
  128. package/dist/catalog/platform-components.d.ts +221 -0
  129. package/dist/catalog/platform-components.js +761 -0
  130. package/dist/catalog/platform-migration.d.ts +115 -0
  131. package/dist/catalog/platform-migration.js +582 -0
  132. package/dist/catalog/plugin-import.d.ts +178 -34
  133. package/dist/catalog/plugin-import.js +623 -83
  134. package/dist/catalog/plugin-install.d.ts +185 -41
  135. package/dist/catalog/plugin-install.js +758 -126
  136. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  137. package/dist/catalog/plugin-upgrade.js +1148 -1137
  138. package/dist/catalog/request-rules.d.ts +65 -0
  139. package/dist/catalog/request-rules.js +217 -0
  140. package/dist/catalog/requests.service.d.ts +193 -118
  141. package/dist/catalog/requests.service.js +526 -343
  142. package/dist/catalog/reserved-names.d.ts +8 -0
  143. package/dist/catalog/reserved-names.js +42 -0
  144. package/dist/catalog/scope-orgs.d.ts +21 -0
  145. package/dist/catalog/scope-orgs.js +67 -0
  146. package/dist/catalog/scope-state.d.ts +35 -0
  147. package/dist/catalog/scope-state.js +87 -0
  148. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  149. package/dist/catalog/scope-sync-workers.js +29 -0
  150. package/dist/catalog/scope-sync.d.ts +176 -0
  151. package/dist/catalog/scope-sync.js +576 -0
  152. package/dist/catalog/scope.d.ts +42 -0
  153. package/dist/catalog/scope.js +42 -0
  154. package/dist/catalog/unshare.d.ts +22 -0
  155. package/dist/catalog/unshare.js +118 -0
  156. package/dist/channels/actions.js +1 -0
  157. package/dist/channels/cards.js +21 -3
  158. package/dist/channels/channels.module.js +2 -0
  159. package/dist/channels/connections.service.d.ts +16 -1
  160. package/dist/channels/connections.service.js +38 -4
  161. package/dist/channels/inbound.d.ts +9 -1
  162. package/dist/channels/inbound.js +67 -5
  163. package/dist/channels/phrases.d.ts +35 -0
  164. package/dist/channels/phrases.js +29 -0
  165. package/dist/channels/threads.d.ts +5 -0
  166. package/dist/channels/threads.js +8 -0
  167. package/dist/config/docs.js +3 -1
  168. package/dist/config/schema.d.ts +24 -2
  169. package/dist/config/schema.js +145 -19
  170. package/dist/conversations/access.d.ts +6 -4
  171. package/dist/conversations/access.js +29 -5
  172. package/dist/conversations/agent-tree.d.ts +46 -0
  173. package/dist/conversations/agent-tree.js +92 -0
  174. package/dist/conversations/attachments.service.d.ts +30 -0
  175. package/dist/conversations/attachments.service.js +130 -5
  176. package/dist/conversations/conversations.controller.d.ts +79 -23
  177. package/dist/conversations/conversations.controller.js +141 -50
  178. package/dist/conversations/conversations.module.d.ts +1 -1
  179. package/dist/conversations/conversations.module.js +10 -7
  180. package/dist/conversations/conversations.service.d.ts +108 -9
  181. package/dist/conversations/conversations.service.js +237 -30
  182. package/dist/conversations/environment-status.d.ts +24 -0
  183. package/dist/conversations/environment-status.js +71 -0
  184. package/dist/conversations/event-log.d.ts +21 -6
  185. package/dist/conversations/event-log.js +70 -1
  186. package/dist/conversations/events.d.ts +140 -0
  187. package/dist/conversations/events.js +142 -13
  188. package/dist/conversations/queue.d.ts +3 -1
  189. package/dist/conversations/queue.js +13 -2
  190. package/dist/conversations/queue.service.d.ts +1 -1
  191. package/dist/conversations/queue.service.js +8 -1
  192. package/dist/conversations/titles.d.ts +12 -3
  193. package/dist/conversations/titles.js +36 -8
  194. package/dist/conversations/tree.d.ts +17 -0
  195. package/dist/conversations/tree.js +42 -0
  196. package/dist/ctx/create-ctx.d.ts +5 -0
  197. package/dist/ctx/create-ctx.js +15 -5
  198. package/dist/db/kernel-schema.d.ts +420 -20
  199. package/dist/db/pool.d.ts +5 -0
  200. package/dist/db/pool.js +3 -0
  201. package/dist/environments/access.d.ts +41 -0
  202. package/dist/environments/access.js +77 -0
  203. package/dist/environments/conversation-environments.d.ts +61 -0
  204. package/dist/environments/conversation-environments.js +170 -0
  205. package/dist/environments/dto.d.ts +25 -0
  206. package/dist/environments/dto.js +12 -0
  207. package/dist/environments/environments.controller.d.ts +33 -0
  208. package/dist/environments/environments.controller.js +110 -0
  209. package/dist/environments/environments.module.d.ts +8 -0
  210. package/dist/environments/environments.module.js +27 -0
  211. package/dist/environments/environments.service.d.ts +153 -0
  212. package/dist/environments/environments.service.js +541 -0
  213. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  214. package/dist/environments/legacy-cleanup.job.js +141 -0
  215. package/dist/errors.d.ts +90 -2
  216. package/dist/errors.js +90 -2
  217. package/dist/evals/reconstruct.d.ts +18 -9
  218. package/dist/evals/reconstruct.js +26 -7
  219. package/dist/evals/run-replay.d.ts +7 -2
  220. package/dist/evals/run-replay.js +42 -7
  221. package/dist/evals/step-replay.d.ts +2 -5
  222. package/dist/evals/step-replay.js +13 -7
  223. package/dist/evals/trajectory.js +1 -1
  224. package/dist/evals/trajectory.service.d.ts +8 -3
  225. package/dist/evals/trajectory.service.js +26 -14
  226. package/dist/evals/worker.d.ts +5 -5
  227. package/dist/evals/worker.js +9 -3
  228. package/dist/extensions/admin-ops.d.ts +36 -10
  229. package/dist/extensions/admin-ops.js +67 -42
  230. package/dist/extensions/admin-view.d.ts +39 -10
  231. package/dist/extensions/admin-view.js +111 -20
  232. package/dist/extensions/blobs.js +1 -0
  233. package/dist/extensions/bootstrap.d.ts +17 -4
  234. package/dist/extensions/bootstrap.js +70 -9
  235. package/dist/extensions/cli.d.ts +12 -0
  236. package/dist/extensions/cli.js +11 -2
  237. package/dist/extensions/config-issues.d.ts +13 -1
  238. package/dist/extensions/config-issues.js +22 -5
  239. package/dist/extensions/config-json-schema.d.ts +43 -7
  240. package/dist/extensions/config-json-schema.js +124 -58
  241. package/dist/extensions/deployment-config-store.d.ts +6 -0
  242. package/dist/extensions/deployment-config.d.ts +78 -8
  243. package/dist/extensions/deployment-config.js +172 -34
  244. package/dist/extensions/display-name.d.ts +22 -0
  245. package/dist/extensions/display-name.js +77 -0
  246. package/dist/extensions/effective-config.d.ts +127 -0
  247. package/dist/extensions/effective-config.js +368 -0
  248. package/dist/extensions/extensions.module.js +14 -2
  249. package/dist/extensions/hooks.d.ts +37 -4
  250. package/dist/extensions/hooks.js +82 -16
  251. package/dist/extensions/host.d.ts +45 -2
  252. package/dist/extensions/host.js +112 -16
  253. package/dist/extensions/installs.d.ts +20 -8
  254. package/dist/extensions/installs.js +37 -15
  255. package/dist/extensions/org-config.d.ts +81 -6
  256. package/dist/extensions/org-config.js +195 -44
  257. package/dist/extensions/org-levels.d.ts +37 -0
  258. package/dist/extensions/org-levels.js +71 -0
  259. package/dist/extensions/org-overrides.d.ts +151 -0
  260. package/dist/extensions/org-overrides.js +524 -0
  261. package/dist/extensions/package.d.ts +14 -1
  262. package/dist/extensions/package.js +51 -2
  263. package/dist/extensions/permission-view.d.ts +19 -4
  264. package/dist/extensions/permission-view.js +4 -4
  265. package/dist/extensions/plugin-items.d.ts +21 -0
  266. package/dist/extensions/plugin-items.js +42 -0
  267. package/dist/extensions/point-defaults.controller.d.ts +34 -0
  268. package/dist/extensions/point-defaults.controller.js +71 -0
  269. package/dist/extensions/point-defaults.d.ts +71 -0
  270. package/dist/extensions/point-defaults.js +234 -0
  271. package/dist/extensions/registry.d.ts +1 -1
  272. package/dist/extensions/registry.js +2 -0
  273. package/dist/extensions/resolve.d.ts +5 -1
  274. package/dist/extensions/resolve.js +15 -2
  275. package/dist/files/previewers.d.ts +8 -1
  276. package/dist/files/previewers.js +35 -6
  277. package/dist/http/api.module.js +31 -3
  278. package/dist/http/app.d.ts +11 -2
  279. package/dist/http/app.js +31 -5
  280. package/dist/http/nest-logger.d.ts +6 -5
  281. package/dist/http/nest-logger.js +24 -10
  282. package/dist/identity/accounts.d.ts +29 -29
  283. package/dist/identity/accounts.js +47 -47
  284. package/dist/identity/audit.d.ts +2 -1
  285. package/dist/identity/auth.controller.js +9 -5
  286. package/dist/identity/auth.guard.d.ts +13 -5
  287. package/dist/identity/auth.guard.js +26 -9
  288. package/dist/identity/cookies.d.ts +20 -5
  289. package/dist/identity/cookies.js +44 -6
  290. package/dist/identity/identity.module.d.ts +1 -1
  291. package/dist/identity/identity.module.js +4 -4
  292. package/dist/identity/me.controller.d.ts +5 -1
  293. package/dist/identity/me.controller.js +12 -3
  294. package/dist/identity/principal.d.ts +3 -3
  295. package/dist/identity/principal.js +3 -3
  296. package/dist/identity/sessions.d.ts +12 -0
  297. package/dist/identity/sessions.js +45 -0
  298. package/dist/identity/settings.d.ts +22 -11
  299. package/dist/identity/settings.js +53 -18
  300. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  301. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  302. package/dist/inbox/inbox.module.d.ts +4 -1
  303. package/dist/inbox/inbox.module.js +7 -3
  304. package/dist/inbox/inbox.service.d.ts +62 -3
  305. package/dist/inbox/inbox.service.js +74 -4
  306. package/dist/inbox/org-notices.d.ts +63 -0
  307. package/dist/inbox/org-notices.js +91 -0
  308. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  309. package/dist/inbox/platform-inbox.controller.js +58 -0
  310. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  311. package/dist/inbox/platform-inbox.service.js +263 -0
  312. package/dist/inbox/platform-notices.d.ts +19 -0
  313. package/dist/inbox/platform-notices.js +9 -0
  314. package/dist/index.d.ts +2 -2
  315. package/dist/index.js +1 -1
  316. package/dist/infra/cli/kernel-cli.module.js +9 -1
  317. package/dist/infra/config/kernel-config.service.js +27 -1
  318. package/dist/infra/database/database.module.js +1 -0
  319. package/dist/infra/database/xact-lock.d.ts +1 -1
  320. package/dist/infra/database/xact-lock.js +1 -1
  321. package/dist/infra/events/kernel-events.d.ts +19 -2
  322. package/dist/infra/lifecycle/process-guards.js +4 -0
  323. package/dist/infra/logging/logging.module.d.ts +4 -2
  324. package/dist/infra/logging/logging.module.js +24 -6
  325. package/dist/infra/queue/add-job-once.d.ts +14 -0
  326. package/dist/infra/queue/add-job-once.js +16 -0
  327. package/dist/infra/queue/redis-connection.d.ts +6 -0
  328. package/dist/infra/queue/redis-connection.js +7 -0
  329. package/dist/infra/redis/redis.module.js +6 -2
  330. package/dist/infra/tokens.d.ts +6 -1
  331. package/dist/infra/tokens.js +6 -1
  332. package/dist/kernel.module.js +6 -0
  333. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  334. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  335. package/dist/log.d.ts +13 -1
  336. package/dist/log.js +93 -17
  337. package/dist/models/prices.d.ts +5 -5
  338. package/dist/models/prices.js +4 -4
  339. package/dist/models/purposes.controller.d.ts +6 -4
  340. package/dist/models/purposes.controller.js +13 -7
  341. package/dist/models/purposes.d.ts +43 -9
  342. package/dist/models/purposes.js +48 -18
  343. package/dist/orgs/directory-sync.d.ts +14 -5
  344. package/dist/orgs/directory-sync.js +41 -17
  345. package/dist/orgs/offboarding.d.ts +12 -8
  346. package/dist/orgs/offboarding.js +54 -33
  347. package/dist/orgs/org-lock.d.ts +5 -0
  348. package/dist/orgs/org-lock.js +13 -0
  349. package/dist/orgs/org.guard.d.ts +10 -0
  350. package/dist/orgs/org.guard.js +43 -32
  351. package/dist/orgs/orgs.module.js +3 -0
  352. package/dist/orgs/orgs.service.d.ts +20 -7
  353. package/dist/orgs/orgs.service.js +32 -12
  354. package/dist/orgs/roles.d.ts +1 -1
  355. package/dist/orgs/roles.js +5 -1
  356. package/dist/orgs/settings.controller.d.ts +1 -1
  357. package/dist/orgs/settings.service.d.ts +20 -3
  358. package/dist/orgs/settings.service.js +19 -4
  359. package/dist/overrides.d.ts +3 -0
  360. package/dist/overrides.js +2 -0
  361. package/dist/platform/actor.d.ts +48 -0
  362. package/dist/platform/actor.js +100 -0
  363. package/dist/platform/agent-docs.d.ts +18 -0
  364. package/dist/platform/agent-docs.js +59 -0
  365. package/dist/platform/availability.d.ts +14 -0
  366. package/dist/platform/availability.js +43 -0
  367. package/dist/platform/errors.d.ts +11 -0
  368. package/dist/platform/errors.js +26 -0
  369. package/dist/platform/exclusions.d.ts +12 -0
  370. package/dist/platform/exclusions.js +1387 -0
  371. package/dist/platform/method.d.ts +6 -0
  372. package/dist/platform/method.js +15 -0
  373. package/dist/platform/operation.d.ts +92 -0
  374. package/dist/platform/operation.js +35 -0
  375. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  376. package/dist/platform/ops/agent-templates.ops.js +92 -0
  377. package/dist/platform/ops/agents.ops.d.ts +19 -0
  378. package/dist/platform/ops/agents.ops.js +294 -0
  379. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  380. package/dist/platform/ops/connectors.ops.js +126 -0
  381. package/dist/platform/ops/errors.d.ts +11 -0
  382. package/dist/platform/ops/errors.js +22 -0
  383. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  384. package/dist/platform/ops/extensions.ops.js +116 -0
  385. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  386. package/dist/platform/ops/marketplaces.ops.js +157 -0
  387. package/dist/platform/ops/paging.d.ts +14 -0
  388. package/dist/platform/ops/paging.js +20 -0
  389. package/dist/platform/ops/platform.ops.d.ts +23 -0
  390. package/dist/platform/ops/platform.ops.js +158 -0
  391. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  392. package/dist/platform/ops/plugins.ops.js +377 -0
  393. package/dist/platform/ops/requests.ops.d.ts +14 -0
  394. package/dist/platform/ops/requests.ops.js +153 -0
  395. package/dist/platform/ops/role.d.ts +4 -0
  396. package/dist/platform/ops/role.js +10 -0
  397. package/dist/platform/ops/skills.ops.d.ts +13 -0
  398. package/dist/platform/ops/skills.ops.js +98 -0
  399. package/dist/platform/ops/summary.d.ts +10 -0
  400. package/dist/platform/ops/summary.js +18 -0
  401. package/dist/platform/platform-ops.module.d.ts +7 -0
  402. package/dist/platform/platform-ops.module.js +55 -0
  403. package/dist/platform/platform.module.d.ts +8 -0
  404. package/dist/platform/platform.module.js +25 -0
  405. package/dist/platform/redact-orgs.d.ts +7 -0
  406. package/dist/platform/redact-orgs.js +52 -0
  407. package/dist/platform/registry.d.ts +30 -0
  408. package/dist/platform/registry.js +111 -0
  409. package/dist/roles/worker-role.d.ts +6 -4
  410. package/dist/roles/worker-role.js +14 -7
  411. package/dist/roles/worker.module.d.ts +1 -1
  412. package/dist/roles/worker.module.js +15 -1
  413. package/dist/runtime/context/build.d.ts +11 -7
  414. package/dist/runtime/context/build.js +46 -19
  415. package/dist/runtime/context/claude-tools.d.ts +3 -1
  416. package/dist/runtime/context/claude-tools.js +8 -6
  417. package/dist/runtime/context/compaction.js +13 -0
  418. package/dist/runtime/context/reminders.d.ts +2 -0
  419. package/dist/runtime/context/reminders.js +2 -0
  420. package/dist/runtime/context/skills.js +9 -2
  421. package/dist/runtime/context/tool-changes.d.ts +27 -0
  422. package/dist/runtime/context/tool-changes.js +60 -0
  423. package/dist/runtime/hook-calls.js +2 -0
  424. package/dist/runtime/langgraph-loop.d.ts +3 -1
  425. package/dist/runtime/langgraph-loop.js +36 -17
  426. package/dist/runtime/loop.d.ts +34 -5
  427. package/dist/runtime/maintenance.d.ts +9 -4
  428. package/dist/runtime/maintenance.js +35 -8
  429. package/dist/runtime/model-call.d.ts +46 -8
  430. package/dist/runtime/model-call.js +72 -21
  431. package/dist/runtime/providers.d.ts +6 -0
  432. package/dist/runtime/providers.js +8 -0
  433. package/dist/runtime/run-control.d.ts +11 -1
  434. package/dist/runtime/run-control.js +12 -0
  435. package/dist/runtime/run-drafts.d.ts +85 -0
  436. package/dist/runtime/run-drafts.js +230 -0
  437. package/dist/runtime/run-jobs.d.ts +3 -5
  438. package/dist/runtime/run-jobs.js +3 -7
  439. package/dist/runtime/run-queue.d.ts +59 -2
  440. package/dist/runtime/run-queue.js +311 -38
  441. package/dist/runtime/run-worker.d.ts +11 -5
  442. package/dist/runtime/run-worker.js +69 -33
  443. package/dist/runtime/runtime.module.js +11 -3
  444. package/dist/runtime/step-log.d.ts +15 -4
  445. package/dist/runtime/step-log.js +24 -7
  446. package/dist/runtime/stream.controller.d.ts +23 -1
  447. package/dist/runtime/stream.controller.js +60 -3
  448. package/dist/runtime/stream.d.ts +4 -1
  449. package/dist/runtime/stream.js +27 -3
  450. package/dist/runtime/subagents/child.d.ts +55 -7
  451. package/dist/runtime/subagents/child.js +105 -7
  452. package/dist/runtime/subagents/definition.d.ts +12 -3
  453. package/dist/runtime/subagents/definition.js +44 -28
  454. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  455. package/dist/runtime/subagents/deliveries.js +228 -0
  456. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  457. package/dist/runtime/subagents/dispatch.js +212 -141
  458. package/dist/runtime/subagents/limits.d.ts +24 -5
  459. package/dist/runtime/subagents/limits.js +40 -6
  460. package/dist/runtime/subagents/messages.d.ts +95 -0
  461. package/dist/runtime/subagents/messages.js +328 -0
  462. package/dist/runtime/subagents/preamble.d.ts +4 -4
  463. package/dist/runtime/subagents/preamble.js +9 -7
  464. package/dist/runtime/subagents/progress.d.ts +8 -6
  465. package/dist/runtime/subagents/progress.js +11 -6
  466. package/dist/runtime/subagents/render.d.ts +30 -0
  467. package/dist/runtime/subagents/render.js +53 -0
  468. package/dist/runtime/subagents/roster.d.ts +24 -7
  469. package/dist/runtime/subagents/roster.js +47 -11
  470. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  471. package/dist/runtime/subagents/skill-fork.js +8 -4
  472. package/dist/runtime/subagents/status.d.ts +14 -0
  473. package/dist/runtime/subagents/status.js +23 -0
  474. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  475. package/dist/runtime/subagents/subagents.service.js +11 -6
  476. package/dist/runtime/usage-report.d.ts +2 -1
  477. package/dist/runtime/usage-report.js +19 -13
  478. package/dist/runtime/waits.d.ts +145 -36
  479. package/dist/runtime/waits.js +423 -109
  480. package/dist/sandbox/jobs.d.ts +40 -13
  481. package/dist/sandbox/jobs.js +57 -20
  482. package/dist/sandbox/leases.d.ts +37 -54
  483. package/dist/sandbox/leases.js +71 -115
  484. package/dist/sandbox/providers.d.ts +2 -2
  485. package/dist/sandbox/providers.js +1 -1
  486. package/dist/sandbox/sandbox.module.d.ts +3 -2
  487. package/dist/sandbox/sandbox.module.js +10 -4
  488. package/dist/sandbox/sandbox.service.d.ts +282 -129
  489. package/dist/sandbox/sandbox.service.js +736 -381
  490. package/dist/skills/catalog.d.ts +3 -2
  491. package/dist/skills/catalog.js +21 -43
  492. package/dist/skills/changes.controller.d.ts +7 -0
  493. package/dist/skills/changes.controller.js +19 -1
  494. package/dist/skills/invoke.js +8 -3
  495. package/dist/skills/package.d.ts +20 -1
  496. package/dist/skills/package.js +28 -1
  497. package/dist/skills/skills.controller.d.ts +39 -4
  498. package/dist/skills/skills.controller.js +88 -10
  499. package/dist/skills/skills.module.js +10 -1
  500. package/dist/skills/skills.service.d.ts +106 -26
  501. package/dist/skills/skills.service.js +421 -75
  502. package/dist/skills/usable.d.ts +81 -0
  503. package/dist/skills/usable.js +379 -0
  504. package/dist/tools/approvals.service.d.ts +20 -2
  505. package/dist/tools/approvals.service.js +25 -4
  506. package/dist/tools/builtin-names.d.ts +41 -7
  507. package/dist/tools/builtin-names.js +59 -7
  508. package/dist/tools/builtins/agent.d.ts +23 -21
  509. package/dist/tools/builtins/agent.js +62 -55
  510. package/dist/tools/builtins/builtin-tools.d.ts +19 -1
  511. package/dist/tools/builtins/builtin-tools.js +59 -2
  512. package/dist/tools/builtins/handback.d.ts +28 -0
  513. package/dist/tools/builtins/handback.js +53 -0
  514. package/dist/tools/builtins/platform.d.ts +34 -0
  515. package/dist/tools/builtins/platform.js +362 -0
  516. package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
  517. package/dist/tools/builtins/sandbox/bash.js +241 -4
  518. package/dist/tools/builtins/sandbox/common.d.ts +69 -27
  519. package/dist/tools/builtins/sandbox/common.js +87 -48
  520. package/dist/tools/builtins/sandbox/deliver.js +1 -1
  521. package/dist/tools/builtins/sandbox/edit.js +2 -2
  522. package/dist/tools/builtins/sandbox/glob.js +2 -2
  523. package/dist/tools/builtins/sandbox/grep.js +2 -4
  524. package/dist/tools/builtins/sandbox/index.d.ts +3 -1
  525. package/dist/tools/builtins/sandbox/index.js +7 -1
  526. package/dist/tools/builtins/sandbox/read.js +1 -1
  527. package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
  528. package/dist/tools/builtins/sandbox/task-output.js +329 -0
  529. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  530. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  531. package/dist/tools/builtins/sandbox/write.js +2 -2
  532. package/dist/tools/builtins/send-message.d.ts +56 -0
  533. package/dist/tools/builtins/send-message.js +100 -0
  534. package/dist/tools/builtins/skill-load.d.ts +22 -14
  535. package/dist/tools/builtins/skill-load.js +86 -57
  536. package/dist/tools/builtins/skill-write.js +1 -1
  537. package/dist/tools/builtins/web/errors.d.ts +8 -0
  538. package/dist/tools/builtins/web/errors.js +53 -0
  539. package/dist/tools/builtins/web/extract.d.ts +62 -0
  540. package/dist/tools/builtins/web/extract.js +271 -0
  541. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  542. package/dist/tools/builtins/web/fetch.js +175 -0
  543. package/dist/tools/builtins/web/index.d.ts +13 -0
  544. package/dist/tools/builtins/web/index.js +12 -0
  545. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  546. package/dist/tools/builtins/web/page-cache.js +77 -0
  547. package/dist/tools/builtins/web/search.d.ts +25 -0
  548. package/dist/tools/builtins/web/search.js +210 -0
  549. package/dist/tools/builtins/web/url.d.ts +17 -0
  550. package/dist/tools/builtins/web/url.js +43 -0
  551. package/dist/tools/connectors.controller.d.ts +10 -0
  552. package/dist/tools/connectors.controller.js +12 -0
  553. package/dist/tools/connectors.service.d.ts +46 -5
  554. package/dist/tools/connectors.service.js +94 -15
  555. package/dist/tools/extension-tools.controller.d.ts +14 -0
  556. package/dist/tools/extension-tools.controller.js +37 -0
  557. package/dist/tools/info.d.ts +42 -1
  558. package/dist/tools/info.js +64 -1
  559. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  560. package/dist/tools/oauth/flow-paths.js +1 -1
  561. package/dist/tools/org-tool-switches.d.ts +74 -0
  562. package/dist/tools/org-tool-switches.js +184 -0
  563. package/dist/tools/pipeline.d.ts +46 -40
  564. package/dist/tools/pipeline.js +202 -364
  565. package/dist/tools/policy.d.ts +1 -1
  566. package/dist/tools/policy.js +36 -16
  567. package/dist/tools/registry.d.ts +120 -8
  568. package/dist/tools/registry.js +112 -19
  569. package/dist/tools/tools.module.js +24 -2
  570. package/dist/tools/validate.js +1 -1
  571. package/dist/ui/views.d.ts +2 -1
  572. package/dist/ui/views.js +17 -3
  573. package/package.json +3 -3
  574. package/src/migrations/0064_account_last_org.sql +7 -0
  575. package/src/migrations/0065_conversation_archive.sql +8 -0
  576. package/src/migrations/0066_extension_display_name.sql +4 -0
  577. package/src/migrations/0067_agent_profiles.sql +20 -0
  578. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  579. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  580. package/src/migrations/0070_background_tasks.sql +37 -0
  581. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  582. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  583. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  584. package/src/migrations/0074_subagent_tree.sql +50 -0
  585. package/src/migrations/0075_plugin_scope.sql +61 -0
  586. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  587. package/src/migrations/0077_scope_requests.sql +52 -0
  588. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  589. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  590. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  591. package/src/migrations/0081_platform_components.sql +129 -0
  592. package/src/migrations/0082_platform_migration.sql +33 -0
  593. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  594. package/src/migrations/0084_org_owned_items.sql +85 -0
  595. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  596. package/src/migrations/0086_org_layering.sql +30 -0
  597. package/src/migrations/0087_approval_summary.sql +6 -0
  598. package/src/migrations/0088_environments.sql +80 -0
  599. package/dist/catalog/upgrade-targets.d.ts +0 -56
  600. package/dist/catalog/upgrade-targets.js +0 -90
  601. package/dist/conversations/sandbox-status.d.ts +0 -24
  602. package/dist/conversations/sandbox-status.js +0 -52
  603. package/dist/extensions/org-config.controller.d.ts +0 -24
  604. package/dist/extensions/org-config.controller.js +0 -62
@@ -1,23 +1,42 @@
1
1
  import { isSandboxGoneError, ToolError, validateSandboxPath, } from "@capybara-hq/plugin-sdk";
2
+ import { ANONYMOUS_NO_ENVIRONMENT, } from "../../../environments/conversation-environments.js";
2
3
  import { ApiError } from "../../../errors.js";
3
4
  import { SandboxPathBusyError } from "../../../sandbox/leases.js";
4
- import { SandboxLockLostError } from "../../../sandbox/sandbox.service.js";
5
+ import { SandboxLockLostError, } from "../../../sandbox/sandbox.service.js";
5
6
  // ---- 模型可见文案(英文) ----
6
7
  /** 没有沙箱提供方时「工具不可用」的原因(进提醒与调用结果)。 */
7
- /** 本对话第一次用沙箱。 */
8
- export const SANDBOX_STARTED_NOTICE = "Sandbox started for this conversation (first use); the working directory is /workspace.";
9
- /** 沙箱被重建(之前的实例已销毁或不在了)。 */
10
- export const SANDBOX_RECREATED_NOTICE = "Sandbox was recreated; previous files are gone.";
11
- const BUSY_TEXT = "The sandbox is busy with another command in this conversation; wait for it to finish and retry.";
8
+ /** This conversation's first use of its environment. */
9
+ export const SANDBOX_STARTED_NOTICE = "Environment started (first use in this conversation); the working directory is /workspace, shared with the environment's other conversations.";
10
+ /** A new instance came up on the environment's kept files. */
11
+ export const SANDBOX_RESTARTED_NOTICE = "The environment's instance was restarted; files are kept, running processes and /tmp are gone.";
12
+ const BUSY_TEXT = "The environment is busy: all its command slots are taken by commands of this or another conversation sharing it; wait for one to finish and retry.";
12
13
  const NO_SANDBOX_TEXT = "No sandbox is configured in this deployment; ask an administrator to install a sandbox plugin, or do the task without the sandbox.";
13
14
  /** 没有沙箱提供方时「工具不可用」的原因(进提醒,内核在后面补句号):与调用时的错误同一句话。 */
14
15
  export const SANDBOX_UNAVAILABLE_REASON = NO_SANDBOX_TEXT.slice(0, -1);
15
- const PATH_BUSY_TEXT = "Another sub-agent is writing this file; wait a moment and retry.";
16
+ /** The error of a sandbox call in a deployment without a sandbox provider. */
17
+ export function noSandboxError() {
18
+ return new ToolError(NO_SANDBOX_TEXT);
19
+ }
20
+ const PATH_BUSY_TEXT = "Another sub-agent or another conversation in this environment is writing this file; wait a moment and retry.";
21
+ const ANONYMOUS_TEXT = "The sandbox is not available to anonymous IM senders; do the task without the sandbox, or ask the person to link their account and start a new conversation.";
22
+ const ENV_NOT_FOUND_TEXT = "This conversation's environment was deleted or its owner can no longer use it; ask the user to start a new conversation in another environment.";
23
+ const ENV_FORBIDDEN_TEXT = "This conversation's owner may no longer use its environment; ask the user to start a new conversation in an environment they can use.";
24
+ const ENV_UNAVAILABLE_TEXT = "This conversation's environment is kept by a sandbox provider that is not active in this deployment; ask the user to start a new conversation in another environment, or an administrator to re-enable that provider.";
25
+ const ENV_FILES_LOST_TEXT = "This environment's files are gone. Ask the user to reset its files on the environments page, then retry.";
16
26
  const LOCK_LOST_TEXT = "The sandbox operation was interrupted because the sandbox lock was lost; check the sandbox state and retry.";
17
- /** 沙箱里附件所在目录。 */
18
- export const ATTACHMENTS_DIR = "/workspace/attachments";
19
- /** 已同步附件的标记文件:`{ <附件 id>: <文件名> }`。 */
20
- export const SYNC_MARKER = `${ATTACHMENTS_DIR}/.capybara-sync.json`;
27
+ /** The directory of attachments in the environment (each conversation has a subdirectory). */
28
+ export const ATTACHMENTS_ROOT = "/workspace/attachments";
29
+ /**
30
+ * One conversation's attachment directory: the first 12 hex digits of the root conversation's
31
+ * UUID, so conversations sharing an environment do not overwrite each other's files.
32
+ */
33
+ export const attachmentsDir = (rootConversationId) => `${ATTACHMENTS_ROOT}/${rootConversationId.replaceAll("-", "").slice(0, 12)}`;
34
+ /** The conversation's marker of synced attachments: `{ <attachment id>: <file name> }`. */
35
+ export const syncMarkerPath = (rootConversationId) => `${attachmentsDir(rootConversationId)}/.capybara-sync.json`;
36
+ const SYNC_MARKER_NAME = ".capybara-sync.json";
37
+ const SYNC_MARKER_RE = new RegExp(`^${ATTACHMENTS_ROOT}/[^/]+/${SYNC_MARKER_NAME.replaceAll(".", "\\.")}(?=$|[:-])`);
38
+ /** Whether a path, or a Grep output line starting with one, belongs to a sync marker (hidden from Glob / Grep). */
39
+ export const isSyncMarkerEntry = (pathOrLine) => SYNC_MARKER_RE.test(pathOrLine);
21
40
  const MARKER_MAX_BYTES = 1024 * 1024;
22
41
  /** 附件文件名的上限(UTF-8 字节,常见文件系统单个文件名上限 255 字节,留出 `-N` 后缀的余量)。 */
23
42
  export const ATTACHMENT_NAME_MAX_BYTES = 200;
@@ -129,11 +148,11 @@ function sanitizeName(raw) {
129
148
  */
130
149
  export function assignAttachmentNames(items, used) {
131
150
  const taken = new Set(used);
132
- taken.add(SYNC_MARKER.slice(ATTACHMENTS_DIR.length + 1));
151
+ taken.add(SYNC_MARKER_NAME);
133
152
  const out = new Map();
134
153
  for (const a of items) {
135
154
  let base = sanitizeName(a.name);
136
- if (validateSandboxPath(`${ATTACHMENTS_DIR}/${base}`).length > 0) {
155
+ if (validateSandboxPath(`${ATTACHMENTS_ROOT}/${base}`).length > 0) {
137
156
  base = `attachment-${a.id.slice(0, 8)}`;
138
157
  }
139
158
  let name = base;
@@ -167,35 +186,36 @@ function copyFailureReason(e) {
167
186
  return "a temporary error occurred; it will be retried on the next sandbox call";
168
187
  }
169
188
  /**
170
- * 把本对话已 ready 的附件复制到 `/workspace/attachments/<name>`,标记文件记下已复制的(不重复复制)。
171
- * `reset`(新建 / 重建的沙箱,文件已不在)时忽略标记文件全部重新复制。对象已不在的附件跳过(下次再试)。
189
+ * 把本对话已 ready 的附件复制到 `/workspace/attachments/<conversation>/<name>`({@link attachmentsDir}),
190
+ * 标记文件记下已复制的(不重复复制)。对象已不在的附件跳过(下次再试)。
172
191
  * 每复制一个就更新标记文件:中途超时 / 中止,下次从停下的地方继续。
173
192
  * 单个附件失败(存储故障等)只跳过它并给出说明,不让工具调用失败;signal 已中止或实例已不在时照常抛出。
174
193
  * 返回本次复制的沙箱路径与失败说明。
175
194
  */
176
- async function syncAttachments(deps, ctx, s, reset) {
195
+ async function syncAttachments(deps, ctx, s) {
177
196
  const none = { copied: [], failures: [] };
178
197
  const conv = sandboxConversationOf(ctx);
179
198
  const list = await deps.attachments.listForConversation(ctx.orgId, conv);
180
199
  if (list.length === 0)
181
200
  return none;
182
201
  // nothing to copy (the usual case): no path lease, so calls do not queue on the marker
183
- if (!reset) {
184
- const marker = await readSyncMarker(s);
185
- if (list.every((a) => Object.hasOwn(marker, a.id)))
186
- return none;
187
- }
202
+ const marker = await readSyncMarker(s, conv);
203
+ if (list.every((a) => Object.hasOwn(marker, a.id)))
204
+ return none;
188
205
  // the sync marker is read, changed and written: one holder at a time
189
- return withPathLease(deps, ctx, SYNC_MARKER, s.signal, (signal) => copyAttachments(deps, ctx, { ...s, signal }, reset, conv, list));
206
+ return withPathLease(deps, s, syncMarkerPath(conv), s.signal, (signal) => copyAttachments(deps, ctx, { ...s, signal }, conv, list));
190
207
  }
191
208
  /** The sync marker's entries (`{}` when it is missing, too large or unreadable). */
192
- async function readSyncMarker(s) {
193
- const m = await s.p.readFile(s.h, SYNC_MARKER, { maxBytes: MARKER_MAX_BYTES, signal: s.signal });
209
+ async function readSyncMarker(s, conv) {
210
+ const m = await s.p.readFile(s.h, syncMarkerPath(conv), {
211
+ maxBytes: MARKER_MAX_BYTES,
212
+ signal: s.signal,
213
+ });
194
214
  return m && !m.truncated ? parseMarker(m.data) : {};
195
215
  }
196
- async function copyAttachments(deps, ctx, s, reset, conv, list) {
216
+ async function copyAttachments(deps, ctx, s, conv, list) {
197
217
  const none = { copied: [], failures: [] };
198
- let marker = reset ? {} : await readSyncMarker(s);
218
+ let marker = await readSyncMarker(s, conv);
199
219
  const pending = list.filter((a) => !Object.hasOwn(marker, a.id));
200
220
  if (pending.length === 0)
201
221
  return none;
@@ -204,7 +224,7 @@ async function copyAttachments(deps, ctx, s, reset, conv, list) {
204
224
  const failures = [];
205
225
  for (const a of pending) {
206
226
  const name = names.get(a.id);
207
- const path = `${ATTACHMENTS_DIR}/${name}`;
227
+ const path = `${attachmentsDir(conv)}/${name}`;
208
228
  try {
209
229
  const opened = await deps.attachments.openForConversation(ctx.orgId, conv, a.id);
210
230
  if (!opened)
@@ -224,7 +244,7 @@ async function copyAttachments(deps, ctx, s, reset, conv, list) {
224
244
  copied.push(path);
225
245
  const next = { ...marker, [a.id]: name };
226
246
  try {
227
- await s.p.writeFile(s.h, SYNC_MARKER, utf8.encode(JSON.stringify(next)), s.signal);
247
+ await s.p.writeFile(s.h, syncMarkerPath(conv), utf8.encode(JSON.stringify(next)), s.signal);
228
248
  marker = next;
229
249
  }
230
250
  catch (e) {
@@ -235,12 +255,24 @@ async function copyAttachments(deps, ctx, s, reset, conv, list) {
235
255
  return { copied, failures };
236
256
  }
237
257
  /** 沙箱服务的错误 → 给模型的可执行说明;其余原样抛出(管线按「工具失败」处理)。 */
238
- function mapError(e) {
258
+ export function mapSandboxError(e) {
239
259
  if (e instanceof ApiError) {
240
260
  if (e.code === "sandbox.busy")
241
261
  return new ToolError(BUSY_TEXT);
242
- if (e.code === "sandbox.unavailable")
262
+ if (e.code === "sandbox.unavailable") {
263
+ const reason = e.details?.[0]?.reason;
264
+ if (reason === ANONYMOUS_NO_ENVIRONMENT)
265
+ return new ToolError(ANONYMOUS_TEXT);
243
266
  return new ToolError(NO_SANDBOX_TEXT);
267
+ }
268
+ if (e.code === "environment.not_found")
269
+ return new ToolError(ENV_NOT_FOUND_TEXT);
270
+ if (e.code === "environment.forbidden")
271
+ return new ToolError(ENV_FORBIDDEN_TEXT);
272
+ if (e.code === "environment.unavailable")
273
+ return new ToolError(ENV_UNAVAILABLE_TEXT);
274
+ if (e.code === "environment.files_lost")
275
+ return new ToolError(ENV_FILES_LOST_TEXT);
244
276
  }
245
277
  if (e instanceof SandboxLockLostError)
246
278
  return new ToolError(LOCK_LOST_TEXT);
@@ -249,25 +281,31 @@ function mapError(e) {
249
281
  return e;
250
282
  }
251
283
  /**
252
- * 在本对话的沙箱上执行 `fn`(`SandboxService.withSandbox`:懒创建、恢复、重建):先同步附件,
253
- * 再执行;返回结果与要加在结果开头的状态说明(首次使用 / 重建 / 新复制的附件)。
254
- * `withSandbox` 遇到实例不在时会重建并再调用一次回调,说明按最后一次调用的为准。
284
+ * Runs `fn` in the environment of the call's conversation (a sub-agent: its root's): resolves and
285
+ * checks the environment for the conversation's owner (binding an unbound conversation to the
286
+ * owner's default first), then `SandboxService.withSandbox` (the instance created, resumed or
287
+ * rebuilt on the kept files as needed, every `exec` carrying the call's actor). Attachments are
288
+ * synced first. Returns the value and the notices to put before the result (first use, a new
289
+ * instance, newly copied attachments). When `withSandbox` rebuilds a gone instance and calls
290
+ * `fn` again, the notices are the last call's.
255
291
  */
256
292
  export async function inSandbox(deps, ctx, fn) {
257
293
  try {
294
+ const environmentId = await deps.environments.forTool(ctx.orgId, sandboxConversationOf(ctx));
258
295
  return await deps.sandbox.withSandbox({
259
296
  orgId: ctx.orgId,
260
- conversationId: sandboxConversationOf(ctx),
261
- // a sub-agent is told when another holder rebuilt the shared sandbox (final review m5)
297
+ environmentId,
298
+ // a sub-agent is told when another holder rebuilt the shared instance (final review m5)
262
299
  holderConversationId: ctx.conversationId,
300
+ actor: { accountId: ctx.accountId, conversationId: ctx.conversationId },
263
301
  }, async (h, p, info, signal) => {
264
- const s = { h, p, signal, reset: info.fresh || info.recreated };
302
+ const s = { environmentId, h, p, signal };
265
303
  const notices = [];
266
- if (info.recreated)
267
- notices.push(SANDBOX_RECREATED_NOTICE);
304
+ if (info.restarted)
305
+ notices.push(SANDBOX_RESTARTED_NOTICE);
268
306
  else if (info.fresh)
269
307
  notices.push(SANDBOX_STARTED_NOTICE);
270
- const { copied, failures } = await syncAttachments(deps, ctx, s, s.reset);
308
+ const { copied, failures } = await syncAttachments(deps, ctx, s);
271
309
  if (copied.length > 0) {
272
310
  notices.push(`Attachments copied into the sandbox: ${copied.join(", ")}.`);
273
311
  }
@@ -276,21 +314,22 @@ export async function inSandbox(deps, ctx, fn) {
276
314
  }, ctx.signal);
277
315
  }
278
316
  catch (e) {
279
- throw mapError(e);
317
+ throw mapSandboxError(e);
280
318
  }
281
319
  }
282
- /** The conversation whose sandbox a call uses (the parent's for a sub-agent). */
320
+ /** The conversation whose environment a call uses (the root conversation's for a sub-agent). */
283
321
  export const sandboxConversationOf = (ctx) => ctx.sandboxConversationId ?? ctx.conversationId;
284
322
  /**
285
- * Runs `fn` under the per-path lease of `path` in the call's sandbox (spec §10.4: the kernel's own
286
- * read-modify-write of one file never loses another holder's update). `fn` gets `signal` combined
287
- * with the path lease's: pass it to every provider call, so a lost path lease stops the write.
288
- * Without `pathLease` (test stubs) it just runs `fn` with `signal`.
323
+ * Runs `fn` under the per-path lease of `path` in the session's environment (spec §10.4: the
324
+ * kernel's own read-modify-write of one file never loses another holder's update, from any
325
+ * conversation sharing the environment). `fn` gets `signal` combined with the path lease's: pass
326
+ * it to every provider call, so a lost path lease stops the write. Without `pathLease` (test
327
+ * stubs) it just runs `fn` with `signal`.
289
328
  */
290
- export async function withPathLease(deps, ctx, path, signal, fn) {
329
+ export async function withPathLease(deps, s, path, signal, fn) {
291
330
  if (!deps.sandbox.pathLease)
292
331
  return fn(signal);
293
- const lease = await deps.sandbox.pathLease(sandboxConversationOf(ctx), path, signal);
332
+ const lease = await deps.sandbox.pathLease(s.environmentId, path, signal);
294
333
  try {
295
334
  return await fn(AbortSignal.any([signal, lease.signal]));
296
335
  }
@@ -299,7 +338,7 @@ export async function withPathLease(deps, ctx, path, signal, fn) {
299
338
  }
300
339
  }
301
340
  /** 本部署是否有沙箱:没有时返回「不可用」原因(注册表据此把沙箱工具报为不可用)。 */
302
- export const unavailableWhenNoSandbox = (deps) => () => deps.sandbox.available ? null : SANDBOX_UNAVAILABLE_REASON;
341
+ export const unavailableWhenNoSandbox = (deps) => (_ctx) => deps.sandbox.available ? null : SANDBOX_UNAVAILABLE_REASON;
303
342
  /** 读出的字节是否像二进制(开头 8 KB 里有 NUL)。 */
304
343
  export function looksBinary(data) {
305
344
  return data.subarray(0, 8192).includes(0);
@@ -96,7 +96,7 @@ export function sandboxDeliverTool(deps) {
96
96
  spec: SPEC,
97
97
  defaultPolicy: "allow",
98
98
  // 没有沙箱或没有对象存储都交付不了(先报沙箱的原因)
99
- unavailable: () => unavailableWhenNoSandbox(deps)() ?? (deps.storage.available ? null : NO_STORAGE_REASON),
99
+ unavailable: (ctx) => unavailableWhenNoSandbox(deps)(ctx) ?? (deps.storage.available ? null : NO_STORAGE_REASON),
100
100
  timeoutMs: () => 2 * sandboxBaseTimeoutMs(deps.config.get()),
101
101
  async run(input, ctx) {
102
102
  // 存储在调用前就核对:不为一个交付不了的文件去 stat / 读沙箱
@@ -56,9 +56,9 @@ export function sandboxEditTool(deps) {
56
56
  const path = checkWritable(input.file_path);
57
57
  if (old_string === new_string)
58
58
  throw new ToolError(SAME_TEXT);
59
- const { value: edit, notices } = await inSandbox(deps, ctx, ({ h, p, signal }) =>
59
+ const { value: edit, notices } = await inSandbox(deps, ctx, ({ environmentId, h, p, signal }) =>
60
60
  // read, replace, write: one holder at a time per file
61
- withPathLease(deps, ctx, path, signal, async (signal) => {
61
+ withPathLease(deps, { environmentId }, path, signal, async (signal) => {
62
62
  const st = await p.stat(h, path, signal);
63
63
  if (st === null)
64
64
  throw new ToolError(notFound(path));
@@ -1,5 +1,5 @@
1
1
  import { ToolError } from "@capybara-hq/plugin-sdk";
2
- import { checkPath, clip, display, inSandbox, SYNC_MARKER, sandboxBaseTimeoutMs, searchTimeoutMs, unavailableWhenNoSandbox, withNotices, } from "./common.js";
2
+ import { checkPath, clip, display, inSandbox, isSyncMarkerEntry, sandboxBaseTimeoutMs, searchTimeoutMs, unavailableWhenNoSandbox, withNotices, } from "./common.js";
3
3
  import { compileGlob, GlobPatternError } from "./glob-match.js";
4
4
  /** 最多列出的文件数。 */
5
5
  const MAX_RESULTS = 1000;
@@ -82,7 +82,7 @@ export function sandboxGlobTool(deps) {
82
82
  .map((l) => l.slice(2))
83
83
  .filter((rel) => matches(rel))
84
84
  .map((rel) => `${base}/${rel}`)
85
- .filter((abs) => abs !== SYNC_MARKER)
85
+ .filter((abs) => !isSyncMarkerEntry(abs))
86
86
  .sort()
87
87
  // 文件名里的换行显示为 `\n`(与 Grep 一致),一行一个文件
88
88
  .map((abs) => abs.replace(/\n/g, "\\n")));
@@ -1,5 +1,5 @@
1
1
  import { ToolError } from "@capybara-hq/plugin-sdk";
2
- import { checkPath, clip, display, inSandbox, SYNC_MARKER, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, unavailableWhenNoSandbox, withNotices, } from "./common.js";
2
+ import { checkPath, clip, display, inSandbox, isSyncMarkerEntry, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, unavailableWhenNoSandbox, withNotices, } from "./common.js";
3
3
  /** The most output entries (lines, files or counts) returned in one call, whatever `head_limit` says. */
4
4
  const MAX_MATCHES = 500;
5
5
  /** `head_limit` when the model gives none. */
@@ -207,9 +207,7 @@ export function sandboxGrepTool(deps) {
207
207
  : mode === "count"
208
208
  ? parseCounts(r.stdout, base)
209
209
  : parseGrepNull(r.stdout, base, numbered);
210
- const entries = all.filter((l) => l !== SYNC_MARKER &&
211
- !l.startsWith(`${SYNC_MARKER}:`) &&
212
- !l.startsWith(`${SYNC_MARKER}-`));
210
+ const entries = all.filter((l) => !isSyncMarkerEntry(l));
213
211
  // 退出码 2 = 有错误(如个别文件不可读);有输出时照常返回(可能为空:只匹配到隐藏的标记文件)并附上说明
214
212
  if (r.exitCode !== 0 && all.length === 0)
215
213
  throw new ToolError(failed(r.stderr));
@@ -2,11 +2,13 @@ import type { BuiltinTool } from "../../registry.js";
2
2
  import type { SandboxToolDeps } from "./common.js";
3
3
  export { SANDBOX_ASK_TOOL_NAMES, SANDBOX_TOOL_NAMES } from "../../builtin-names.js";
4
4
  export { BASH_SPILL_CHARS, formatExec } from "./bash.js";
5
- export { assignAttachmentNames, RUN_DEADLINE_MARGIN_MS, runTimeLeftMs, SANDBOX_RECREATED_NOTICE, SANDBOX_SETUP_MARGIN_MS, SANDBOX_STARTED_NOTICE, SANDBOX_UNAVAILABLE_REASON, type SandboxToolDeps, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, } from "./common.js";
5
+ export { assignAttachmentNames, RUN_DEADLINE_MARGIN_MS, runTimeLeftMs, SANDBOX_RESTARTED_NOTICE, SANDBOX_SETUP_MARGIN_MS, SANDBOX_STARTED_NOTICE, SANDBOX_UNAVAILABLE_REASON, type SandboxToolDeps, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, } from "./common.js";
6
6
  export { compileGlob, GlobPatternError, MAX_GLOB_STARS } from "./glob-match.js";
7
7
  /**
8
8
  * 沙箱内置工具(M5 T8):bash / read / write / edit / glob / grep / deliver,都在本对话的沙箱上执行
9
9
  * (`SandboxService.withSandbox`),执行前同步附件到 `/workspace/attachments`。没有沙箱提供方时报不可用。
10
10
  * 默认 allow;组织设置 `sandboxToolPolicy` 为 ask 时除 read / glob / grep 外需要审批(见 policy.ts)。
11
+ * `TaskOutput` and `TaskStop` read and stop background `Bash` tasks through
12
+ * `SandboxService.ifRunning` (never creating or resuming a sandbox); always allowed.
11
13
  */
12
14
  export declare function sandboxTools(deps: SandboxToolDeps): BuiltinTool[];
@@ -4,15 +4,19 @@ import { sandboxEditTool } from "./edit.js";
4
4
  import { sandboxGlobTool } from "./glob.js";
5
5
  import { sandboxGrepTool } from "./grep.js";
6
6
  import { sandboxReadTool } from "./read.js";
7
+ import { taskOutputTool } from "./task-output.js";
8
+ import { taskStopTool } from "./task-stop.js";
7
9
  import { sandboxWriteTool } from "./write.js";
8
10
  export { SANDBOX_ASK_TOOL_NAMES, SANDBOX_TOOL_NAMES } from "../../builtin-names.js";
9
11
  export { BASH_SPILL_CHARS, formatExec } from "./bash.js";
10
- export { assignAttachmentNames, RUN_DEADLINE_MARGIN_MS, runTimeLeftMs, SANDBOX_RECREATED_NOTICE, SANDBOX_SETUP_MARGIN_MS, SANDBOX_STARTED_NOTICE, SANDBOX_UNAVAILABLE_REASON, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, } from "./common.js";
12
+ export { assignAttachmentNames, RUN_DEADLINE_MARGIN_MS, runTimeLeftMs, SANDBOX_RESTARTED_NOTICE, SANDBOX_SETUP_MARGIN_MS, SANDBOX_STARTED_NOTICE, SANDBOX_UNAVAILABLE_REASON, sandboxBaseTimeoutMs, searchTimeoutMs, shellQuote, } from "./common.js";
11
13
  export { compileGlob, GlobPatternError, MAX_GLOB_STARS } from "./glob-match.js";
12
14
  /**
13
15
  * 沙箱内置工具(M5 T8):bash / read / write / edit / glob / grep / deliver,都在本对话的沙箱上执行
14
16
  * (`SandboxService.withSandbox`),执行前同步附件到 `/workspace/attachments`。没有沙箱提供方时报不可用。
15
17
  * 默认 allow;组织设置 `sandboxToolPolicy` 为 ask 时除 read / glob / grep 外需要审批(见 policy.ts)。
18
+ * `TaskOutput` and `TaskStop` read and stop background `Bash` tasks through
19
+ * `SandboxService.ifRunning` (never creating or resuming a sandbox); always allowed.
16
20
  */
17
21
  export function sandboxTools(deps) {
18
22
  return [
@@ -23,5 +27,7 @@ export function sandboxTools(deps) {
23
27
  sandboxGlobTool(deps),
24
28
  sandboxGrepTool(deps),
25
29
  sandboxDeliverTool(deps),
30
+ taskOutputTool(deps),
31
+ taskStopTool(deps),
26
32
  ];
27
33
  }
@@ -13,7 +13,7 @@ const SPEC = {
13
13
  // Display only (the tool row; not in the fingerprint, never sent to the model).
14
14
  keyArgs: ["file_path"],
15
15
  description: "Read a text file from this conversation's sandbox, with line numbers. Use it to look at " +
16
- "source code, data files, logs and files the user attached (under /workspace/attachments). " +
16
+ "source code, data files, logs and files the user attached (under /workspace/attachments/<conversation>/). " +
17
17
  "Paths are absolute, under /workspace, /skills or /tmp. Lines are numbered from 1; pass " +
18
18
  "offset and limit to read part of a long file. Binary files are not shown; use Bash " +
19
19
  "to inspect them. Do not use it to list directories; use Glob instead. Read a file before you " +
@@ -0,0 +1,74 @@
1
+ import { type SandboxHandle } from "@capybara-hq/plugin-sdk";
2
+ import type { BackgroundTaskRow } from "../../../background/store.js";
3
+ import type { HeldProvider, IfRunningResult, SandboxService } from "../../../sandbox/sandbox.service.js";
4
+ import type { BuiltinCallContext, BuiltinTool } from "../../registry.js";
5
+ import { type SandboxToolDeps } from "./common.js";
6
+ /** How long `TaskOutput` waits with `block` when `timeout` is not given (ms). */
7
+ export declare const TASK_OUTPUT_DEFAULT_TIMEOUT_MS = 30000;
8
+ /** The longest `TaskOutput` wait (ms). */
9
+ export declare const TASK_OUTPUT_MAX_TIMEOUT_MS = 600000;
10
+ /** How often a blocking `TaskOutput` checks the task (each check a short exec of its own). */
11
+ export declare const TASK_CHECK_INTERVAL_MS = 2000;
12
+ /** What `TaskOutput` and `TaskStop` work with. */
13
+ export interface TaskEnv {
14
+ store: NonNullable<SandboxToolDeps["background"]>;
15
+ tasks: NonNullable<SandboxToolDeps["tasks"]>;
16
+ ifRunning: SandboxService["ifRunning"];
17
+ environments: SandboxToolDeps["environments"];
18
+ }
19
+ /** The task tools' dependencies; throws the tool's error when they are missing. */
20
+ export declare function taskEnv(deps: SandboxToolDeps): TaskEnv;
21
+ /**
22
+ * The task `id` when it belongs to the calling conversation; a task of another conversation (a
23
+ * sub-agent's, when called from its parent) is not found, the same as an unknown id.
24
+ */
25
+ export declare function ownedTask(env: TaskEnv, ctx: BuiltinCallContext, id: string): Promise<BackgroundTaskRow>;
26
+ /**
27
+ * The per-call access re-check of every sandbox tool (`inSandbox`): the conversation's environment
28
+ * may still be used by its owner. The task tools read a task's own instance without `inSandbox`,
29
+ * so they check here first; errors become the tools' errors.
30
+ */
31
+ export declare function recheckEnvironment(env: TaskEnv, ctx: BuiltinCallContext): Promise<void>;
32
+ /**
33
+ * `ifRunning` on the task's own environment instance (its execs act for the task's trigger in its
34
+ * conversation); sandbox errors become the tools' errors. A task from before environments has no
35
+ * instance (`not_running`).
36
+ */
37
+ export declare function onTaskInstance<T>(env: TaskEnv, task: BackgroundTaskRow, fn: (p: HeldProvider, h: SandboxHandle, signal: AbortSignal) => Promise<T>, signal: AbortSignal): Promise<IfRunningResult<T>>;
38
+ /**
39
+ * The task's status line: `Status: running (2m05s)`, `Status: failed, exit code 3, after 4m12s`,
40
+ * `Status: stopped after 1m00s`, `Status: lost (the sandbox was suspended) after 3s`.
41
+ */
42
+ export declare function statusLine(task: BackgroundTaskRow, now?: Date): string;
43
+ /** The absolute path of the task's output file, as the model sees it. */
44
+ export declare const outputFile: (task: BackgroundTaskRow) => string;
45
+ /** Why the output cannot be read: the task's sandbox instance is not running. */
46
+ export declare function unavailableText(task: BackgroundTaskRow, r: IfRunningResult<unknown>): string;
47
+ /**
48
+ * The exec that checks and reads task `t` (relative to `/workspace`): for a running task first
49
+ * its status line (the poller's, {@link pollScript}: liveness, then the exit file), then
50
+ * `size <bytes>` and `out <base64>`, at most `cap` bytes of the output from byte `offset` on.
51
+ * The file is never read whole: `tail -c +<offset+1> | head -c <cap>`. Without `read` only the
52
+ * status line.
53
+ */
54
+ export declare function taskReadScript(t: {
55
+ id: string;
56
+ sid: string | null;
57
+ running: boolean;
58
+ }, offset: number, cap: number, read?: boolean): string;
59
+ /**
60
+ * The bytes of `buf` up to its last whole UTF-8 character: a character cut by the read's cap is
61
+ * left for the next read.
62
+ */
63
+ export declare function wholeUtf8Length(buf: Uint8Array): number;
64
+ /**
65
+ * Built-in `TaskOutput` (spec 2026-11-05-background-bash-design §2.2): a task's status and the
66
+ * output since this conversation's last read of it. Every check is a short exec through
67
+ * `SandboxService.ifRunning` on the task's own sandbox instance: it never creates or resumes a
68
+ * sandbox, so a suspended or rebuilt one means the task is lost (its output unavailable). With
69
+ * `block`, checks every {@link TASK_CHECK_INTERVAL_MS}, each under a lease of its own, until the
70
+ * task ends or the wait (at most `timeout` and the run's time left) is over; the checks only
71
+ * detect the end, and the one read that makes the result finishes the task (reported). The output
72
+ * read is capped at `tools.outputSpillChars` bytes; the pipeline spills the result beyond that.
73
+ */
74
+ export declare function taskOutputTool(deps: SandboxToolDeps): BuiltinTool;