@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.1

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 (637) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +2 -0
  3. package/README.md +20 -2
  4. package/bootstrap.json +26 -0
  5. package/dist/admin/admin.controller.d.ts +139 -0
  6. package/dist/admin/admin.controller.js +238 -0
  7. package/dist/admin/extensions.controller.d.ts +100 -0
  8. package/dist/admin/extensions.controller.js +226 -0
  9. package/dist/admin/setup.controller.d.ts +36 -0
  10. package/dist/admin/setup.controller.js +106 -0
  11. package/dist/admin/setup.service.d.ts +47 -0
  12. package/dist/admin/setup.service.js +90 -0
  13. package/dist/agents/agents.controller.d.ts +205 -0
  14. package/dist/agents/agents.controller.js +144 -0
  15. package/dist/agents/agents.service.d.ts +177 -0
  16. package/dist/agents/agents.service.js +677 -0
  17. package/dist/agents/definition.d.ts +198 -0
  18. package/dist/agents/definition.js +152 -0
  19. package/dist/agents/models.controller.d.ts +13 -0
  20. package/dist/agents/models.controller.js +31 -0
  21. package/dist/agents/templates.controller.d.ts +15 -0
  22. package/dist/agents/templates.controller.js +37 -0
  23. package/dist/agents/templates.d.ts +83 -0
  24. package/dist/agents/templates.js +173 -0
  25. package/dist/catalog/admin-catalog.controller.d.ts +143 -0
  26. package/dist/catalog/admin-catalog.controller.js +245 -0
  27. package/dist/catalog/catalog.service.d.ts +430 -0
  28. package/dist/catalog/catalog.service.js +882 -0
  29. package/dist/catalog/claude/agents.d.ts +27 -0
  30. package/dist/catalog/claude/agents.js +270 -0
  31. package/dist/catalog/claude/commands.d.ts +50 -0
  32. package/dist/catalog/claude/commands.js +179 -0
  33. package/dist/catalog/claude/manifest.d.ts +69 -0
  34. package/dist/catalog/claude/manifest.js +134 -0
  35. package/dist/catalog/claude/marketplace.d.ts +35 -0
  36. package/dist/catalog/claude/marketplace.js +194 -0
  37. package/dist/catalog/claude/mcp.d.ts +33 -0
  38. package/dist/catalog/claude/mcp.js +226 -0
  39. package/dist/catalog/claude/report.d.ts +86 -0
  40. package/dist/catalog/claude/report.js +121 -0
  41. package/dist/catalog/claude/translate.d.ts +56 -0
  42. package/dist/catalog/claude/translate.js +857 -0
  43. package/dist/catalog/cli.d.ts +46 -0
  44. package/dist/catalog/cli.js +211 -0
  45. package/dist/catalog/git-source.d.ts +127 -0
  46. package/dist/catalog/git-source.js +520 -0
  47. package/dist/catalog/marketplace-fetch.d.ts +99 -0
  48. package/dist/catalog/marketplace-fetch.js +203 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +97 -0
  50. package/dist/catalog/marketplaces.controller.js +197 -0
  51. package/dist/catalog/marketplaces.service.d.ts +340 -0
  52. package/dist/catalog/marketplaces.service.js +1217 -0
  53. package/dist/catalog/org-catalog.controller.d.ts +128 -0
  54. package/dist/catalog/org-catalog.controller.js +277 -0
  55. package/dist/catalog/org-catalog.service.d.ts +246 -0
  56. package/dist/catalog/org-catalog.service.js +625 -0
  57. package/dist/catalog/plugin-import.d.ts +436 -0
  58. package/dist/catalog/plugin-import.js +1069 -0
  59. package/dist/catalog/plugin-install.d.ts +447 -0
  60. package/dist/catalog/plugin-install.js +1333 -0
  61. package/dist/catalog/plugin-package.d.ts +143 -0
  62. package/dist/catalog/plugin-package.js +382 -0
  63. package/dist/catalog/plugin-upgrade.d.ts +222 -0
  64. package/dist/catalog/plugin-upgrade.js +1219 -0
  65. package/dist/catalog/requests.service.d.ts +162 -0
  66. package/dist/catalog/requests.service.js +504 -0
  67. package/dist/catalog/schema-path.d.ts +7 -0
  68. package/dist/catalog/schema-path.js +63 -0
  69. package/dist/catalog/upgrade-targets.d.ts +59 -0
  70. package/dist/catalog/upgrade-targets.js +90 -0
  71. package/dist/catalog/versions.d.ts +31 -0
  72. package/dist/catalog/versions.js +44 -0
  73. package/dist/channels/actions.d.ts +37 -0
  74. package/dist/channels/actions.js +121 -0
  75. package/dist/channels/cards.d.ts +44 -0
  76. package/dist/channels/cards.js +156 -0
  77. package/dist/channels/connections.controller.d.ts +59 -0
  78. package/dist/channels/connections.controller.js +115 -0
  79. package/dist/channels/connections.service.d.ts +187 -0
  80. package/dist/channels/connections.service.js +534 -0
  81. package/dist/channels/features.d.ts +12 -0
  82. package/dist/channels/features.js +22 -0
  83. package/dist/channels/inbound.d.ts +120 -0
  84. package/dist/channels/inbound.js +332 -0
  85. package/dist/channels/outbound.d.ts +140 -0
  86. package/dist/channels/outbound.js +1126 -0
  87. package/dist/channels/phrases.d.ts +100 -0
  88. package/dist/channels/phrases.js +81 -0
  89. package/dist/channels/supervisor.d.ts +182 -0
  90. package/dist/channels/supervisor.js +625 -0
  91. package/dist/channels/threads.d.ts +29 -0
  92. package/dist/channels/threads.js +104 -0
  93. package/dist/channels/webhook-url.d.ts +16 -0
  94. package/dist/channels/webhook-url.js +34 -0
  95. package/dist/channels/webhook.controller.d.ts +19 -0
  96. package/dist/channels/webhook.controller.js +72 -0
  97. package/dist/channels/webhook.d.ts +73 -0
  98. package/dist/channels/webhook.js +274 -0
  99. package/dist/config/docs.d.ts +9 -0
  100. package/dist/config/docs.js +85 -0
  101. package/dist/config/env.d.ts +6 -0
  102. package/dist/config/env.js +73 -0
  103. package/dist/config/fields.d.ts +42 -0
  104. package/dist/config/fields.js +214 -0
  105. package/dist/config/file-source.d.ts +3 -0
  106. package/dist/config/file-source.js +31 -0
  107. package/dist/config/load.d.ts +20 -0
  108. package/dist/config/load.js +98 -0
  109. package/dist/config/nacos-source.d.ts +31 -0
  110. package/dist/config/nacos-source.js +229 -0
  111. package/dist/config/schema.d.ts +237 -0
  112. package/dist/config/schema.js +1192 -0
  113. package/dist/config/sources.d.ts +18 -0
  114. package/dist/config/sources.js +59 -0
  115. package/dist/config/types.d.ts +9 -0
  116. package/dist/config/types.js +7 -0
  117. package/dist/conversations/artifacts.d.ts +52 -0
  118. package/dist/conversations/artifacts.js +137 -0
  119. package/dist/conversations/attachments.controller.d.ts +28 -0
  120. package/dist/conversations/attachments.controller.js +96 -0
  121. package/dist/conversations/attachments.service.d.ts +180 -0
  122. package/dist/conversations/attachments.service.js +578 -0
  123. package/dist/conversations/conversations.controller.d.ts +288 -0
  124. package/dist/conversations/conversations.controller.js +607 -0
  125. package/dist/conversations/conversations.service.d.ts +321 -0
  126. package/dist/conversations/conversations.service.js +754 -0
  127. package/dist/conversations/event-log.d.ts +122 -0
  128. package/dist/conversations/event-log.js +259 -0
  129. package/dist/conversations/events.d.ts +856 -0
  130. package/dist/conversations/events.js +639 -0
  131. package/dist/conversations/files.d.ts +92 -0
  132. package/dist/conversations/files.js +213 -0
  133. package/dist/conversations/outputs-read.d.ts +34 -0
  134. package/dist/conversations/outputs-read.js +37 -0
  135. package/dist/conversations/queue.d.ts +169 -0
  136. package/dist/conversations/queue.js +527 -0
  137. package/dist/conversations/sandbox-status.d.ts +21 -0
  138. package/dist/conversations/sandbox-status.js +24 -0
  139. package/dist/conversations/selection.d.ts +46 -0
  140. package/dist/conversations/selection.js +75 -0
  141. package/dist/conversations/titles.d.ts +93 -0
  142. package/dist/conversations/titles.js +423 -0
  143. package/dist/ctx/bus.d.ts +16 -0
  144. package/dist/ctx/bus.js +101 -0
  145. package/dist/ctx/create-ctx.d.ts +109 -0
  146. package/dist/ctx/create-ctx.js +592 -0
  147. package/dist/ctx/kv.d.ts +4 -0
  148. package/dist/ctx/kv.js +31 -0
  149. package/dist/ctx/lock.d.ts +4 -0
  150. package/dist/ctx/lock.js +39 -0
  151. package/dist/ctx/namespace.d.ts +6 -0
  152. package/dist/ctx/namespace.js +12 -0
  153. package/dist/ctx/queue.d.ts +25 -0
  154. package/dist/ctx/queue.js +151 -0
  155. package/dist/ctx/secrets.d.ts +45 -0
  156. package/dist/ctx/secrets.js +175 -0
  157. package/dist/db/kernel-schema.d.ts +1122 -0
  158. package/dist/db/kernel-schema.js +5 -0
  159. package/dist/db/migrator.d.ts +28 -0
  160. package/dist/db/migrator.js +140 -0
  161. package/dist/db/pool.d.ts +21 -0
  162. package/dist/db/pool.js +28 -0
  163. package/dist/db/sql-statements.d.ts +34 -0
  164. package/dist/db/sql-statements.js +168 -0
  165. package/dist/errors.d.ts +211 -0
  166. package/dist/errors.js +213 -0
  167. package/dist/evals/budget.d.ts +61 -0
  168. package/dist/evals/budget.js +181 -0
  169. package/dist/evals/diff.d.ts +55 -0
  170. package/dist/evals/diff.js +133 -0
  171. package/dist/evals/judge.d.ts +53 -0
  172. package/dist/evals/judge.js +149 -0
  173. package/dist/evals/plan.d.ts +47 -0
  174. package/dist/evals/plan.js +77 -0
  175. package/dist/evals/reconstruct.d.ts +137 -0
  176. package/dist/evals/reconstruct.js +322 -0
  177. package/dist/evals/recorded-tools.d.ts +54 -0
  178. package/dist/evals/recorded-tools.js +167 -0
  179. package/dist/evals/run-replay.d.ts +86 -0
  180. package/dist/evals/run-replay.js +502 -0
  181. package/dist/evals/runs.controller.d.ts +100 -0
  182. package/dist/evals/runs.controller.js +199 -0
  183. package/dist/evals/runs.service.d.ts +275 -0
  184. package/dist/evals/runs.service.js +836 -0
  185. package/dist/evals/sets.controller.d.ts +61 -0
  186. package/dist/evals/sets.controller.js +183 -0
  187. package/dist/evals/sets.service.d.ts +128 -0
  188. package/dist/evals/sets.service.js +558 -0
  189. package/dist/evals/snapshot.d.ts +76 -0
  190. package/dist/evals/snapshot.js +207 -0
  191. package/dist/evals/step-replay.d.ts +113 -0
  192. package/dist/evals/step-replay.js +181 -0
  193. package/dist/evals/trajectory.controller.d.ts +41 -0
  194. package/dist/evals/trajectory.controller.js +88 -0
  195. package/dist/evals/trajectory.d.ts +144 -0
  196. package/dist/evals/trajectory.js +338 -0
  197. package/dist/evals/trajectory.service.d.ts +108 -0
  198. package/dist/evals/trajectory.service.js +323 -0
  199. package/dist/evals/worker.d.ts +101 -0
  200. package/dist/evals/worker.js +790 -0
  201. package/dist/extensions/admin-ops.d.ts +105 -0
  202. package/dist/extensions/admin-ops.js +353 -0
  203. package/dist/extensions/admin-view.d.ts +79 -0
  204. package/dist/extensions/admin-view.js +327 -0
  205. package/dist/extensions/approvals.d.ts +119 -0
  206. package/dist/extensions/approvals.js +205 -0
  207. package/dist/extensions/blobs.d.ts +45 -0
  208. package/dist/extensions/blobs.js +160 -0
  209. package/dist/extensions/bootstrap.d.ts +176 -0
  210. package/dist/extensions/bootstrap.js +535 -0
  211. package/dist/extensions/cli.d.ts +61 -0
  212. package/dist/extensions/cli.js +165 -0
  213. package/dist/extensions/config-json-schema.d.ts +9 -0
  214. package/dist/extensions/config-json-schema.js +73 -0
  215. package/dist/extensions/deployment-config.d.ts +138 -0
  216. package/dist/extensions/deployment-config.js +394 -0
  217. package/dist/extensions/enabled.d.ts +31 -0
  218. package/dist/extensions/enabled.js +55 -0
  219. package/dist/extensions/hooks.d.ts +161 -0
  220. package/dist/extensions/hooks.js +425 -0
  221. package/dist/extensions/host.d.ts +577 -0
  222. package/dist/extensions/host.js +2071 -0
  223. package/dist/extensions/inflight.d.ts +69 -0
  224. package/dist/extensions/inflight.js +277 -0
  225. package/dist/extensions/installs.d.ts +166 -0
  226. package/dist/extensions/installs.js +253 -0
  227. package/dist/extensions/instance.d.ts +167 -0
  228. package/dist/extensions/instance.js +329 -0
  229. package/dist/extensions/ledger.d.ts +30 -0
  230. package/dist/extensions/ledger.js +50 -0
  231. package/dist/extensions/lifecycle.d.ts +80 -0
  232. package/dist/extensions/lifecycle.js +152 -0
  233. package/dist/extensions/migrate-lock.d.ts +51 -0
  234. package/dist/extensions/migrate-lock.js +100 -0
  235. package/dist/extensions/org-config.controller.d.ts +24 -0
  236. package/dist/extensions/org-config.controller.js +59 -0
  237. package/dist/extensions/org-config.d.ts +169 -0
  238. package/dist/extensions/org-config.js +520 -0
  239. package/dist/extensions/package.d.ts +115 -0
  240. package/dist/extensions/package.js +246 -0
  241. package/dist/extensions/permission-set.d.ts +117 -0
  242. package/dist/extensions/permission-set.js +184 -0
  243. package/dist/extensions/permission-view.d.ts +194 -0
  244. package/dist/extensions/permission-view.js +284 -0
  245. package/dist/extensions/registry.d.ts +24 -0
  246. package/dist/extensions/registry.js +56 -0
  247. package/dist/extensions/resolve.d.ts +12 -0
  248. package/dist/extensions/resolve.js +71 -0
  249. package/dist/extensions/sources.d.ts +69 -0
  250. package/dist/extensions/sources.js +120 -0
  251. package/dist/extensions/sync.d.ts +40 -0
  252. package/dist/extensions/sync.js +242 -0
  253. package/dist/files/previewers.controller.d.ts +46 -0
  254. package/dist/files/previewers.controller.js +105 -0
  255. package/dist/files/previewers.d.ts +100 -0
  256. package/dist/files/previewers.js +250 -0
  257. package/dist/http/api.module.d.ts +114 -0
  258. package/dist/http/api.module.js +448 -0
  259. package/dist/http/app.d.ts +77 -0
  260. package/dist/http/app.js +220 -0
  261. package/dist/http/error.filter.d.ts +21 -0
  262. package/dist/http/error.filter.js +85 -0
  263. package/dist/http/gateway.module.d.ts +15 -0
  264. package/dist/http/gateway.module.js +13 -0
  265. package/dist/http/health.controller.d.ts +26 -0
  266. package/dist/http/health.controller.js +79 -0
  267. package/dist/http/nest-logger.d.ts +20 -0
  268. package/dist/http/nest-logger.js +28 -0
  269. package/dist/http/plugin-dispatch.d.ts +68 -0
  270. package/dist/http/plugin-dispatch.js +200 -0
  271. package/dist/http/tokens.d.ts +131 -0
  272. package/dist/http/tokens.js +131 -0
  273. package/dist/http/zod.pipe.d.ts +8 -0
  274. package/dist/http/zod.pipe.js +14 -0
  275. package/dist/identity/accounts.d.ts +93 -0
  276. package/dist/identity/accounts.js +367 -0
  277. package/dist/identity/api-tokens.d.ts +73 -0
  278. package/dist/identity/api-tokens.js +197 -0
  279. package/dist/identity/audit.d.ts +23 -0
  280. package/dist/identity/audit.js +41 -0
  281. package/dist/identity/auth.controller.d.ts +40 -0
  282. package/dist/identity/auth.controller.js +130 -0
  283. package/dist/identity/auth.guard.d.ts +41 -0
  284. package/dist/identity/auth.guard.js +162 -0
  285. package/dist/identity/binding.d.ts +47 -0
  286. package/dist/identity/binding.js +84 -0
  287. package/dist/identity/cookies.d.ts +16 -0
  288. package/dist/identity/cookies.js +32 -0
  289. package/dist/identity/credential-check.d.ts +17 -0
  290. package/dist/identity/credential-check.js +24 -0
  291. package/dist/identity/enterprise-admin.d.ts +14 -0
  292. package/dist/identity/enterprise-admin.js +27 -0
  293. package/dist/identity/external.d.ts +106 -0
  294. package/dist/identity/external.js +337 -0
  295. package/dist/identity/hash.d.ts +2 -0
  296. package/dist/identity/hash.js +3 -0
  297. package/dist/identity/login.d.ts +6 -0
  298. package/dist/identity/login.js +20 -0
  299. package/dist/identity/me.controller.d.ts +61 -0
  300. package/dist/identity/me.controller.js +159 -0
  301. package/dist/identity/passwords.d.ts +6 -0
  302. package/dist/identity/passwords.js +37 -0
  303. package/dist/identity/principal.d.ts +56 -0
  304. package/dist/identity/principal.js +38 -0
  305. package/dist/identity/rate-limit.d.ts +55 -0
  306. package/dist/identity/rate-limit.js +121 -0
  307. package/dist/identity/sessions.d.ts +84 -0
  308. package/dist/identity/sessions.js +306 -0
  309. package/dist/identity/settings.d.ts +121 -0
  310. package/dist/identity/settings.js +248 -0
  311. package/dist/identity/sso.controller.d.ts +59 -0
  312. package/dist/identity/sso.controller.js +192 -0
  313. package/dist/identity/sso.d.ts +83 -0
  314. package/dist/identity/sso.js +202 -0
  315. package/dist/inbox/inbox.service.d.ts +43 -0
  316. package/dist/inbox/inbox.service.js +57 -0
  317. package/dist/index.d.ts +69 -0
  318. package/dist/index.js +67 -0
  319. package/dist/kernel.d.ts +259 -0
  320. package/dist/kernel.js +1326 -0
  321. package/dist/log-config.d.ts +9 -0
  322. package/dist/log-config.js +27 -0
  323. package/dist/log-context.d.ts +32 -0
  324. package/dist/log-context.js +40 -0
  325. package/dist/log-loki.d.ts +34 -0
  326. package/dist/log-loki.js +145 -0
  327. package/dist/log.d.ts +79 -0
  328. package/dist/log.js +303 -0
  329. package/dist/models/prices.d.ts +53 -0
  330. package/dist/models/prices.js +121 -0
  331. package/dist/models/purposes.controller.d.ts +19 -0
  332. package/dist/models/purposes.controller.js +56 -0
  333. package/dist/models/purposes.d.ts +140 -0
  334. package/dist/models/purposes.js +267 -0
  335. package/dist/net/proxy.d.ts +44 -0
  336. package/dist/net/proxy.js +162 -0
  337. package/dist/net/public-address.d.ts +60 -0
  338. package/dist/net/public-address.js +272 -0
  339. package/dist/net/safe-fetch.d.ts +38 -0
  340. package/dist/net/safe-fetch.js +140 -0
  341. package/dist/orgs/directory-sync.controller.d.ts +14 -0
  342. package/dist/orgs/directory-sync.controller.js +40 -0
  343. package/dist/orgs/directory-sync.d.ts +166 -0
  344. package/dist/orgs/directory-sync.js +558 -0
  345. package/dist/orgs/invitations.controller.d.ts +58 -0
  346. package/dist/orgs/invitations.controller.js +137 -0
  347. package/dist/orgs/invitations.service.d.ts +80 -0
  348. package/dist/orgs/invitations.service.js +217 -0
  349. package/dist/orgs/members.service.d.ts +63 -0
  350. package/dist/orgs/members.service.js +234 -0
  351. package/dist/orgs/offboarding.d.ts +141 -0
  352. package/dist/orgs/offboarding.js +398 -0
  353. package/dist/orgs/org-lock.d.ts +32 -0
  354. package/dist/orgs/org-lock.js +46 -0
  355. package/dist/orgs/org.guard.d.ts +35 -0
  356. package/dist/orgs/org.guard.js +95 -0
  357. package/dist/orgs/orgs.controller.d.ts +78 -0
  358. package/dist/orgs/orgs.controller.js +192 -0
  359. package/dist/orgs/orgs.service.d.ts +61 -0
  360. package/dist/orgs/orgs.service.js +209 -0
  361. package/dist/orgs/roles.d.ts +13 -0
  362. package/dist/orgs/roles.js +58 -0
  363. package/dist/orgs/settings.controller.d.ts +20 -0
  364. package/dist/orgs/settings.controller.js +53 -0
  365. package/dist/orgs/settings.service.d.ts +120 -0
  366. package/dist/orgs/settings.service.js +178 -0
  367. package/dist/packages/npm.d.ts +50 -0
  368. package/dist/packages/npm.js +218 -0
  369. package/dist/packages/provenance.d.ts +47 -0
  370. package/dist/packages/provenance.js +147 -0
  371. package/dist/packages/tgz.d.ts +76 -0
  372. package/dist/packages/tgz.js +225 -0
  373. package/dist/runtime/abort.d.ts +32 -0
  374. package/dist/runtime/abort.js +71 -0
  375. package/dist/runtime/checkpointer.d.ts +32 -0
  376. package/dist/runtime/checkpointer.js +243 -0
  377. package/dist/runtime/context/build.d.ts +254 -0
  378. package/dist/runtime/context/build.js +693 -0
  379. package/dist/runtime/context/claude-tools.d.ts +11 -0
  380. package/dist/runtime/context/claude-tools.js +24 -0
  381. package/dist/runtime/context/compaction.d.ts +26 -0
  382. package/dist/runtime/context/compaction.js +195 -0
  383. package/dist/runtime/context/pairing.d.ts +11 -0
  384. package/dist/runtime/context/pairing.js +82 -0
  385. package/dist/runtime/context/reminders.d.ts +5 -0
  386. package/dist/runtime/context/reminders.js +11 -0
  387. package/dist/runtime/context/skills.d.ts +105 -0
  388. package/dist/runtime/context/skills.js +283 -0
  389. package/dist/runtime/context/tokens.d.ts +19 -0
  390. package/dist/runtime/context/tokens.js +104 -0
  391. package/dist/runtime/conversation-lock.d.ts +40 -0
  392. package/dist/runtime/conversation-lock.js +97 -0
  393. package/dist/runtime/hook-calls.d.ts +84 -0
  394. package/dist/runtime/hook-calls.js +136 -0
  395. package/dist/runtime/langgraph-loop.d.ts +52 -0
  396. package/dist/runtime/langgraph-loop.js +247 -0
  397. package/dist/runtime/loop.d.ts +93 -0
  398. package/dist/runtime/loop.js +7 -0
  399. package/dist/runtime/maintenance.d.ts +80 -0
  400. package/dist/runtime/maintenance.js +148 -0
  401. package/dist/runtime/media-cache.d.ts +21 -0
  402. package/dist/runtime/media-cache.js +51 -0
  403. package/dist/runtime/model-call.d.ts +176 -0
  404. package/dist/runtime/model-call.js +1049 -0
  405. package/dist/runtime/providers.d.ts +86 -0
  406. package/dist/runtime/providers.js +224 -0
  407. package/dist/runtime/quota.d.ts +29 -0
  408. package/dist/runtime/quota.js +70 -0
  409. package/dist/runtime/run-finish.d.ts +45 -0
  410. package/dist/runtime/run-finish.js +69 -0
  411. package/dist/runtime/run-queue.d.ts +121 -0
  412. package/dist/runtime/run-queue.js +493 -0
  413. package/dist/runtime/run-worker.d.ts +138 -0
  414. package/dist/runtime/run-worker.js +806 -0
  415. package/dist/runtime/stream.controller.d.ts +34 -0
  416. package/dist/runtime/stream.controller.js +122 -0
  417. package/dist/runtime/stream.d.ts +63 -0
  418. package/dist/runtime/stream.js +262 -0
  419. package/dist/runtime/subagents/child.d.ts +80 -0
  420. package/dist/runtime/subagents/child.js +225 -0
  421. package/dist/runtime/subagents/definition.d.ts +103 -0
  422. package/dist/runtime/subagents/definition.js +392 -0
  423. package/dist/runtime/subagents/dispatch.d.ts +69 -0
  424. package/dist/runtime/subagents/dispatch.js +502 -0
  425. package/dist/runtime/subagents/limits.d.ts +23 -0
  426. package/dist/runtime/subagents/limits.js +34 -0
  427. package/dist/runtime/subagents/org-agents.d.ts +50 -0
  428. package/dist/runtime/subagents/org-agents.js +70 -0
  429. package/dist/runtime/subagents/preamble.d.ts +7 -0
  430. package/dist/runtime/subagents/preamble.js +11 -0
  431. package/dist/runtime/subagents/progress.d.ts +26 -0
  432. package/dist/runtime/subagents/progress.js +36 -0
  433. package/dist/runtime/subagents/roster.d.ts +55 -0
  434. package/dist/runtime/subagents/roster.js +111 -0
  435. package/dist/runtime/subagents/skill-fork.d.ts +123 -0
  436. package/dist/runtime/subagents/skill-fork.js +259 -0
  437. package/dist/runtime/usage-report.d.ts +163 -0
  438. package/dist/runtime/usage-report.js +551 -0
  439. package/dist/runtime/waits.d.ts +233 -0
  440. package/dist/runtime/waits.js +883 -0
  441. package/dist/sandbox/leases.d.ts +169 -0
  442. package/dist/sandbox/leases.js +515 -0
  443. package/dist/sandbox/lifecycle.d.ts +21 -0
  444. package/dist/sandbox/lifecycle.js +68 -0
  445. package/dist/sandbox/sandbox.service.d.ts +249 -0
  446. package/dist/sandbox/sandbox.service.js +908 -0
  447. package/dist/skills/catalog.d.ts +149 -0
  448. package/dist/skills/catalog.js +405 -0
  449. package/dist/skills/changes.controller.d.ts +56 -0
  450. package/dist/skills/changes.controller.js +136 -0
  451. package/dist/skills/changes.service.d.ts +175 -0
  452. package/dist/skills/changes.service.js +805 -0
  453. package/dist/skills/invocable.controller.d.ts +23 -0
  454. package/dist/skills/invocable.controller.js +50 -0
  455. package/dist/skills/invocation-keys.d.ts +23 -0
  456. package/dist/skills/invocation-keys.js +44 -0
  457. package/dist/skills/invoke.d.ts +135 -0
  458. package/dist/skills/invoke.js +286 -0
  459. package/dist/skills/package.d.ts +87 -0
  460. package/dist/skills/package.js +227 -0
  461. package/dist/skills/skills.controller.d.ts +40 -0
  462. package/dist/skills/skills.controller.js +110 -0
  463. package/dist/skills/skills.service.d.ts +192 -0
  464. package/dist/skills/skills.service.js +567 -0
  465. package/dist/storage/prefix.d.ts +36 -0
  466. package/dist/storage/prefix.js +104 -0
  467. package/dist/storage/purge.d.ts +27 -0
  468. package/dist/storage/purge.js +75 -0
  469. package/dist/storage/storage.service.d.ts +44 -0
  470. package/dist/storage/storage.service.js +145 -0
  471. package/dist/text.d.ts +13 -0
  472. package/dist/text.js +13 -0
  473. package/dist/tools/approvals.controller.d.ts +53 -0
  474. package/dist/tools/approvals.controller.js +128 -0
  475. package/dist/tools/approvals.service.d.ts +172 -0
  476. package/dist/tools/approvals.service.js +568 -0
  477. package/dist/tools/breaker.d.ts +28 -0
  478. package/dist/tools/breaker.js +72 -0
  479. package/dist/tools/builtins/agent.d.ts +81 -0
  480. package/dist/tools/builtins/agent.js +223 -0
  481. package/dist/tools/builtins/ask-user.d.ts +28 -0
  482. package/dist/tools/builtins/ask-user.js +139 -0
  483. package/dist/tools/builtins/read-tool-output.d.ts +18 -0
  484. package/dist/tools/builtins/read-tool-output.js +108 -0
  485. package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
  486. package/dist/tools/builtins/sandbox/bash.js +137 -0
  487. package/dist/tools/builtins/sandbox/common.d.ts +116 -0
  488. package/dist/tools/builtins/sandbox/common.js +306 -0
  489. package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
  490. package/dist/tools/builtins/sandbox/deliver.js +180 -0
  491. package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
  492. package/dist/tools/builtins/sandbox/edit.js +98 -0
  493. package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
  494. package/dist/tools/builtins/sandbox/glob-match.js +240 -0
  495. package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
  496. package/dist/tools/builtins/sandbox/glob.js +104 -0
  497. package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
  498. package/dist/tools/builtins/sandbox/grep.js +133 -0
  499. package/dist/tools/builtins/sandbox/index.d.ts +12 -0
  500. package/dist/tools/builtins/sandbox/index.js +27 -0
  501. package/dist/tools/builtins/sandbox/names.d.ts +7 -0
  502. package/dist/tools/builtins/sandbox/names.js +20 -0
  503. package/dist/tools/builtins/sandbox/read.d.ts +8 -0
  504. package/dist/tools/builtins/sandbox/read.js +121 -0
  505. package/dist/tools/builtins/sandbox/write.d.ts +4 -0
  506. package/dist/tools/builtins/sandbox/write.js +88 -0
  507. package/dist/tools/builtins/skill-load.d.ts +53 -0
  508. package/dist/tools/builtins/skill-load.js +446 -0
  509. package/dist/tools/builtins/skill-write.d.ts +59 -0
  510. package/dist/tools/builtins/skill-write.js +244 -0
  511. package/dist/tools/builtins/tool-search.d.ts +31 -0
  512. package/dist/tools/builtins/tool-search.js +171 -0
  513. package/dist/tools/connector-content.controller.d.ts +34 -0
  514. package/dist/tools/connector-content.controller.js +78 -0
  515. package/dist/tools/connector-content.d.ts +104 -0
  516. package/dist/tools/connector-content.js +267 -0
  517. package/dist/tools/connectors.controller.d.ts +210 -0
  518. package/dist/tools/connectors.controller.js +234 -0
  519. package/dist/tools/connectors.service.d.ts +303 -0
  520. package/dist/tools/connectors.service.js +1102 -0
  521. package/dist/tools/credentials.d.ts +139 -0
  522. package/dist/tools/credentials.js +351 -0
  523. package/dist/tools/drift.d.ts +141 -0
  524. package/dist/tools/drift.js +539 -0
  525. package/dist/tools/elicitation.d.ts +81 -0
  526. package/dist/tools/elicitation.js +266 -0
  527. package/dist/tools/endpoint.d.ts +18 -0
  528. package/dist/tools/endpoint.js +115 -0
  529. package/dist/tools/info.d.ts +67 -0
  530. package/dist/tools/info.js +113 -0
  531. package/dist/tools/naming.d.ts +27 -0
  532. package/dist/tools/naming.js +47 -0
  533. package/dist/tools/oauth/discovery.d.ts +65 -0
  534. package/dist/tools/oauth/discovery.js +307 -0
  535. package/dist/tools/oauth/flow.d.ts +63 -0
  536. package/dist/tools/oauth/flow.js +237 -0
  537. package/dist/tools/oauth/oauth.controller.d.ts +31 -0
  538. package/dist/tools/oauth/oauth.controller.js +95 -0
  539. package/dist/tools/oauth/tokens.d.ts +111 -0
  540. package/dist/tools/oauth/tokens.js +258 -0
  541. package/dist/tools/outputs.d.ts +61 -0
  542. package/dist/tools/outputs.js +156 -0
  543. package/dist/tools/pipeline.d.ts +322 -0
  544. package/dist/tools/pipeline.js +1236 -0
  545. package/dist/tools/policy.d.ts +60 -0
  546. package/dist/tools/policy.js +236 -0
  547. package/dist/tools/questions.controller.d.ts +24 -0
  548. package/dist/tools/questions.controller.js +58 -0
  549. package/dist/tools/questions.service.d.ts +103 -0
  550. package/dist/tools/questions.service.js +295 -0
  551. package/dist/tools/redact.d.ts +20 -0
  552. package/dist/tools/redact.js +60 -0
  553. package/dist/tools/registry.d.ts +246 -0
  554. package/dist/tools/registry.js +481 -0
  555. package/dist/tools/resources.d.ts +16 -0
  556. package/dist/tools/resources.js +76 -0
  557. package/dist/tools/specs.d.ts +14 -0
  558. package/dist/tools/specs.js +31 -0
  559. package/dist/tools/validate.d.ts +20 -0
  560. package/dist/tools/validate.js +183 -0
  561. package/dist/tools/view.d.ts +43 -0
  562. package/dist/tools/view.js +225 -0
  563. package/dist/ui/embed-token.d.ts +31 -0
  564. package/dist/ui/embed-token.js +132 -0
  565. package/dist/ui/registry.d.ts +58 -0
  566. package/dist/ui/registry.js +90 -0
  567. package/dist/ui/ui-stream.d.ts +37 -0
  568. package/dist/ui/ui-stream.js +162 -0
  569. package/dist/ui/views.controller.d.ts +81 -0
  570. package/dist/ui/views.controller.js +261 -0
  571. package/dist/ui/views.d.ts +155 -0
  572. package/dist/ui/views.js +306 -0
  573. package/dist/version.d.ts +5 -0
  574. package/dist/version.js +6 -0
  575. package/package.json +69 -3
  576. package/src/migrations/0001_init.sql +8 -0
  577. package/src/migrations/0002_secrets.sql +8 -0
  578. package/src/migrations/0003_identity.sql +117 -0
  579. package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
  580. package/src/migrations/0005_agents.sql +27 -0
  581. package/src/migrations/0006_conversations.sql +37 -0
  582. package/src/migrations/0007_checkpoints.sql +26 -0
  583. package/src/migrations/0008_runs_trigger_seq.sql +3 -0
  584. package/src/migrations/0009_runs_active_unique.sql +4 -0
  585. package/src/migrations/0010_tools.sql +125 -0
  586. package/src/migrations/0011_approvals_spec.sql +10 -0
  587. package/src/migrations/0012_run_waits.sql +24 -0
  588. package/src/migrations/0013_app_tools_source.sql +4 -0
  589. package/src/migrations/0014_tool_specs.sql +8 -0
  590. package/src/migrations/0015_tool_drift.sql +20 -0
  591. package/src/migrations/0016_plugin_permissions.sql +11 -0
  592. package/src/migrations/0017_identity_sources.sql +6 -0
  593. package/src/migrations/0018_channels.sql +74 -0
  594. package/src/migrations/0019_identity_trust.sql +17 -0
  595. package/src/migrations/0020_channel_card_lookup.sql +10 -0
  596. package/src/migrations/0021_org_storage_purge.sql +9 -0
  597. package/src/migrations/0022_attachments.sql +29 -0
  598. package/src/migrations/0023_sandboxes.sql +37 -0
  599. package/src/migrations/0024_skills.sql +46 -0
  600. package/src/migrations/0025_skills_catalog_idx.sql +6 -0
  601. package/src/migrations/0026_skill_changes.sql +34 -0
  602. package/src/migrations/0027_model_prices.sql +18 -0
  603. package/src/migrations/0028_evals.sql +105 -0
  604. package/src/migrations/0029_model_purposes.sql +18 -0
  605. package/src/migrations/0030_plugin_installs.sql +73 -0
  606. package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
  607. package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
  608. package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
  609. package/src/migrations/0034_directory.sql +49 -0
  610. package/src/migrations/0035_catalogs.sql +40 -0
  611. package/src/migrations/0036_app_import_staging.sql +17 -0
  612. package/src/migrations/0037_directory_installs.sql +92 -0
  613. package/src/migrations/0038_channel_inbound_mode.sql +6 -0
  614. package/src/migrations/0039_channel_card_pending.sql +8 -0
  615. package/src/migrations/0040_usage_report_sweep.sql +10 -0
  616. package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
  617. package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
  618. package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
  619. package/src/migrations/0044_catalog_one_kind.sql +90 -0
  620. package/src/migrations/0045_plugin_dependencies.sql +9 -0
  621. package/src/migrations/0046_git_sources.sql +25 -0
  622. package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
  623. package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
  624. package/src/migrations/0049_plugin_upgrades.sql +37 -0
  625. package/src/migrations/0050_bootstrap.sql +53 -0
  626. package/src/migrations/0051_claude_compat.sql +26 -0
  627. package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
  628. package/src/migrations/0053_subagents.sql +73 -0
  629. package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
  630. package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
  631. package/src/migrations/0056_approval_reason.sql +3 -0
  632. package/src/migrations/0057_conversation_titles.sql +11 -0
  633. package/src/migrations/0058_conversation_selection.sql +4 -0
  634. package/src/migrations/0059_conversation_queue.sql +22 -0
  635. package/src/migrations/0060_file_previewers.sql +10 -0
  636. package/src/migrations/0061_queue_selection.sql +5 -0
  637. package/src/migrations/0062_queued_skill.sql +8 -0
@@ -0,0 +1,60 @@
1
+ import type { KernelDb } from "../db/kernel-schema.js";
2
+ import type { DecidePolicy } from "./pipeline.js";
3
+ import type { ResolvedTool, ToolPolicy } from "./registry.js";
4
+ /**
5
+ * spec 3.6 R3「有权 ≠ 已确认」固定清单上的工具 key:策略至少为 `ask`,记住的授权也不放行。
6
+ *
7
+ * R3 清单:发布到公共市场、安装连接器、提插件申请、改角色与成员、删除、改共享技能、改自己的指令。
8
+ * M3 的内置工具(`ask_user`、`read_tool_output`、`tool_search`)与连接器工具都不在清单上;M5 T15 加入
9
+ * `skill_write`(改共享技能)。后续实现上述动作的内置工具时把 key 登记在这里。连接器 / 插件工具由
10
+ * `annotations.requiresUserInteraction` 表达同一约束。
11
+ */
12
+ export declare const R3_FIXED_ASK_TOOL_KEYS: ReadonlySet<string>;
13
+ /**
14
+ * R3 清单里只对共享 agent 生效的 key(窄口子):R3 的条目是「改共享技能」,私有 agent(`visibility = private`,
15
+ * 只有负责人本人能用)的技能不是共享的,`skill_write` 直接生效、不询问(R4)。其余 R3 条目不论可见性一律固定 ask。
16
+ */
17
+ export declare const R3_SHARED_AGENT_ONLY_TOOL_KEYS: ReadonlySet<string>;
18
+ /** 取更严的策略(`allow < ask < deny`)。 */
19
+ export declare function stricter(a: ToolPolicy, b: ToolPolicy | undefined): ToolPolicy;
20
+ export interface PolicyInput {
21
+ /** 组织默认:`connector_tools.default_policy`,插件 / 内置工具为其声明(或注解推导)的默认。 */
22
+ connectorDefault: ToolPolicy;
23
+ /** agent 负责人的收紧(`definition.toolPolicies[key]`)。 */
24
+ agentOverride?: "ask" | "deny";
25
+ /** R3 清单或 `requiresUserInteraction`。 */
26
+ fixedAsk: boolean;
27
+ /** 已记住且 specHash 与当前一致的授权。 */
28
+ grant: "session" | "always" | null;
29
+ }
30
+ /**
31
+ * 策略判定(纯函数):取组织默认、agent 收紧、R3 固定询问三者中最严者;
32
+ * 记住的授权只能把 `ask` 放行为 `allow`,不能越过 `deny`,对 R3 / `requiresUserInteraction` 的工具无效。
33
+ */
34
+ export declare function decide(input: PolicyInput): ToolPolicy;
35
+ /**
36
+ * 是否属于 R3 固定询问(清单或工具声明需要用户交互)。`visibility` 为 agent 当前的可见性:
37
+ * {@link R3_SHARED_AGENT_ONLY_TOOL_KEYS} 里的内置工具在私有 agent 上不算固定询问,
38
+ * 除非 agent 当前版本的 `skills.writePolicy` 为 `ask`(`skillWritePolicy`);不知道可见性时按共享处理(更严)。
39
+ */
40
+ export declare function isFixedAsk(tool: ResolvedTool, visibility?: "private" | "org" | "members" | undefined, skillWritePolicy?: "allow" | "ask" | undefined): boolean;
41
+ /**
42
+ * 执行时的策略判定(spec 3.6 R5:在动作执行那一刻判定)。每次调用都实时读取:
43
+ * - 沙箱工具(bash / write / edit / deliver)的组织设置 `sandboxToolPolicy`(为 ask 时组织默认至少 ask);
44
+ * - 连接器工具的 `connector_tools.default_policy` / 状态 / 指纹(连接器或工具已不存在、停用、删除、待审核 →
45
+ * `{ unavailable: 原因 }`,管线写「工具不可用」的事实说明,而非策略拒绝);
46
+ * - agent 当前版本的 `toolPolicies`,与运行所用版本取更严者(负责人运行中收紧立即生效;放宽不影响已在跑的运行);
47
+ * - a sub-agent (template or general-purpose): `agentDef` is its frozen effective definition (the
48
+ * parent's policies with the template's on top) and `ctx.agentId` is the parent's agent, so the
49
+ * parent's current version still tightens it (sub-agents spec §5.3, §9); its "this conversation"
50
+ * grants are the parent conversation's; an org agent sub-agent (§5.5): `ctx.agentId` is the
51
+ * dispatched agent (its current version, its "always" grants) and the parent agent's current
52
+ * policies apply on top ({@link parentAgentOverride});
53
+ * - 授权表(`conversation_tool_grants` / `tool_grants`),`spec_hash` 与当前定义不一致视为无效(D8),
54
+ * `connector_id` 与工具的来源连接器不一致也无效(删除后用同一 slug 重新安装的连接器不继承旧授权);
55
+ * - 工具声明了 `requiredRole`(R1)时,发起人在组织中的当前角色:不是成员 → 拒绝;角色不足 → 按角色升级的审批
56
+ * (`approverRole` = 所需角色、`requestedFor` = null),此时记住的授权不放行。
57
+ *
58
+ * 结果为 `ask` 时返回审批请求,默认指向发起人本人;记住的授权把 `ask` 放行时返回 `{ grant }`(按 allow 执行)。
59
+ */
60
+ export declare function createDecidePolicy(db: KernelDb): DecidePolicy;
@@ -0,0 +1,236 @@
1
+ import { sql } from "kysely";
2
+ import { roleAtLeast } from "../orgs/roles.js";
3
+ import { readOrgSettings } from "../orgs/settings.service.js";
4
+ import { SANDBOX_ASK_TOOL_NAMES } from "./builtins/sandbox/names.js";
5
+ /**
6
+ * spec 3.6 R3「有权 ≠ 已确认」固定清单上的工具 key:策略至少为 `ask`,记住的授权也不放行。
7
+ *
8
+ * R3 清单:发布到公共市场、安装连接器、提插件申请、改角色与成员、删除、改共享技能、改自己的指令。
9
+ * M3 的内置工具(`ask_user`、`read_tool_output`、`tool_search`)与连接器工具都不在清单上;M5 T15 加入
10
+ * `skill_write`(改共享技能)。后续实现上述动作的内置工具时把 key 登记在这里。连接器 / 插件工具由
11
+ * `annotations.requiresUserInteraction` 表达同一约束。
12
+ */
13
+ export const R3_FIXED_ASK_TOOL_KEYS = new Set(["skill_write"]);
14
+ /**
15
+ * R3 清单里只对共享 agent 生效的 key(窄口子):R3 的条目是「改共享技能」,私有 agent(`visibility = private`,
16
+ * 只有负责人本人能用)的技能不是共享的,`skill_write` 直接生效、不询问(R4)。其余 R3 条目不论可见性一律固定 ask。
17
+ */
18
+ export const R3_SHARED_AGENT_ONLY_TOOL_KEYS = new Set(["skill_write"]);
19
+ const RANK = { allow: 0, ask: 1, deny: 2 };
20
+ /** 取更严的策略(`allow < ask < deny`)。 */
21
+ export function stricter(a, b) {
22
+ return b !== undefined && RANK[b] > RANK[a] ? b : a;
23
+ }
24
+ /**
25
+ * 策略判定(纯函数):取组织默认、agent 收紧、R3 固定询问三者中最严者;
26
+ * 记住的授权只能把 `ask` 放行为 `allow`,不能越过 `deny`,对 R3 / `requiresUserInteraction` 的工具无效。
27
+ */
28
+ export function decide(input) {
29
+ let p = stricter(input.connectorDefault, input.agentOverride);
30
+ if (input.fixedAsk)
31
+ p = stricter(p, "ask");
32
+ if (p === "ask" && input.grant !== null && !input.fixedAsk)
33
+ return "allow";
34
+ return p;
35
+ }
36
+ /**
37
+ * 是否属于 R3 固定询问(清单或工具声明需要用户交互)。`visibility` 为 agent 当前的可见性:
38
+ * {@link R3_SHARED_AGENT_ONLY_TOOL_KEYS} 里的内置工具在私有 agent 上不算固定询问,
39
+ * 除非 agent 当前版本的 `skills.writePolicy` 为 `ask`(`skillWritePolicy`);不知道可见性时按共享处理(更严)。
40
+ */
41
+ export function isFixedAsk(tool, visibility, skillWritePolicy) {
42
+ if (tool.spec.annotations?.requiresUserInteraction === true)
43
+ return true;
44
+ if (!R3_FIXED_ASK_TOOL_KEYS.has(tool.key))
45
+ return false;
46
+ const builtinOnly = tool.source.kind === "builtin" && R3_SHARED_AGENT_ONLY_TOOL_KEYS.has(tool.key);
47
+ // 私有 agent:缺省 / allow 不问(R4),负责人设为 ask(D10)时与共享 agent 一样固定询问
48
+ return !(builtinOnly && visibility === "private" && skillWritePolicy !== "ask");
49
+ }
50
+ const asOverride = (v) => v === "ask" || v === "deny" ? v : undefined;
51
+ /**
52
+ * 执行时的策略判定(spec 3.6 R5:在动作执行那一刻判定)。每次调用都实时读取:
53
+ * - 沙箱工具(bash / write / edit / deliver)的组织设置 `sandboxToolPolicy`(为 ask 时组织默认至少 ask);
54
+ * - 连接器工具的 `connector_tools.default_policy` / 状态 / 指纹(连接器或工具已不存在、停用、删除、待审核 →
55
+ * `{ unavailable: 原因 }`,管线写「工具不可用」的事实说明,而非策略拒绝);
56
+ * - agent 当前版本的 `toolPolicies`,与运行所用版本取更严者(负责人运行中收紧立即生效;放宽不影响已在跑的运行);
57
+ * - a sub-agent (template or general-purpose): `agentDef` is its frozen effective definition (the
58
+ * parent's policies with the template's on top) and `ctx.agentId` is the parent's agent, so the
59
+ * parent's current version still tightens it (sub-agents spec §5.3, §9); its "this conversation"
60
+ * grants are the parent conversation's; an org agent sub-agent (§5.5): `ctx.agentId` is the
61
+ * dispatched agent (its current version, its "always" grants) and the parent agent's current
62
+ * policies apply on top ({@link parentAgentOverride});
63
+ * - 授权表(`conversation_tool_grants` / `tool_grants`),`spec_hash` 与当前定义不一致视为无效(D8),
64
+ * `connector_id` 与工具的来源连接器不一致也无效(删除后用同一 slug 重新安装的连接器不继承旧授权);
65
+ * - 工具声明了 `requiredRole`(R1)时,发起人在组织中的当前角色:不是成员 → 拒绝;角色不足 → 按角色升级的审批
66
+ * (`approverRole` = 所需角色、`requestedFor` = null),此时记住的授权不放行。
67
+ *
68
+ * 结果为 `ask` 时返回审批请求,默认指向发起人本人;记住的授权把 `ask` 放行时返回 `{ grant }`(按 allow 执行)。
69
+ */
70
+ export function createDecidePolicy(db) {
71
+ return async (tool, agentDef, ctx) => {
72
+ let connectorDefault = tool.defaultPolicy;
73
+ let connectorId = null;
74
+ let hashCurrent = true;
75
+ if (tool.source.kind === "connector") {
76
+ connectorId = tool.source.connectorId;
77
+ const app = await db
78
+ .selectFrom("connectors")
79
+ .select(["slug", "status", "deleted_at"])
80
+ .where("id", "=", tool.source.connectorId)
81
+ .where("org_id", "=", ctx.orgId)
82
+ .executeTakeFirst();
83
+ // 调用那一刻连接器 / 工具已不可用:给事实原因(与注册表的不可用说明一致),不说成「策略拒绝」
84
+ if (!app)
85
+ return { unavailable: "App does not exist" };
86
+ if (app.deleted_at !== null)
87
+ return { unavailable: `App ${app.slug} was deleted` };
88
+ if (app.status !== "active")
89
+ return { unavailable: `App ${app.slug} is disabled` };
90
+ const row = await db
91
+ .selectFrom("connector_tools")
92
+ .select(["default_policy", "spec_hash", "status", "missing_since"])
93
+ .where("connector_id", "=", tool.source.connectorId)
94
+ .where("name", "=", tool.source.name)
95
+ .executeTakeFirst();
96
+ if (!row || row.missing_since !== null) {
97
+ return { unavailable: `Tool no longer exists in app ${app.slug}` };
98
+ }
99
+ if (row.status === "disabled")
100
+ return { unavailable: "Tool is disabled" };
101
+ if (row.status !== "enabled")
102
+ return { unavailable: "Tool is pending review" };
103
+ connectorDefault = row.default_policy;
104
+ hashCurrent = row.spec_hash === tool.specHash;
105
+ }
106
+ // 沙箱工具的组织默认(M5 T8):组织设置 sandboxToolPolicy 为 ask 时,有副作用的沙箱工具至少 ask
107
+ // `orgAsk`: the org setting, not the tool's own default, is what makes it ask
108
+ let orgAsk = false;
109
+ if (tool.source.kind === "builtin" && SANDBOX_ASK_TOOL_NAMES.has(tool.source.name)) {
110
+ if ((await readOrgSettings(db, ctx.orgId)).sandboxToolPolicy === "ask") {
111
+ orgAsk = connectorDefault === "allow";
112
+ connectorDefault = stricter(connectorDefault, "ask");
113
+ }
114
+ }
115
+ // 运行所用版本可能是加 toolPolicies 字段之前保存的:缺省为空
116
+ const runOverride = asOverride(agentDef.toolPolicies?.[tool.key]);
117
+ const current = await db
118
+ .selectFrom("agents")
119
+ .innerJoin("agent_versions", (j) => j
120
+ .onRef("agent_versions.agent_id", "=", "agents.id")
121
+ .onRef("agent_versions.version", "=", "agents.current_version"))
122
+ .select(["agent_versions.definition", "agents.visibility"])
123
+ .where("agents.id", "=", ctx.agentId)
124
+ .executeTakeFirst();
125
+ const currentPolicies = current?.definition?.toolPolicies;
126
+ const currentOverride = asOverride(currentPolicies?.[tool.key]);
127
+ let strictest = stricter(runOverride ?? "allow", currentOverride);
128
+ if (ctx.parentConversationId !== undefined && ctx.parentAgentDiffers !== false) {
129
+ strictest = stricter(strictest, await parentAgentOverride(db, tool.key, ctx));
130
+ }
131
+ const agentOverride = strictest === "allow" ? undefined : strictest;
132
+ let escalateTo = null;
133
+ if (tool.requiredRole !== undefined) {
134
+ const m = await db
135
+ .selectFrom("memberships")
136
+ .select("role")
137
+ .where("org_id", "=", ctx.orgId)
138
+ .where("account_id", "=", ctx.accountId)
139
+ .executeTakeFirst();
140
+ if (!m)
141
+ return "deny";
142
+ if (!roleAtLeast(m.role, tool.requiredRole))
143
+ escalateTo = tool.requiredRole;
144
+ }
145
+ // 可见性实时读(R5):共享 agent 的 skill_write 固定 ask,私有 agent 不问(见 R3_SHARED_AGENT_ONLY_TOOL_KEYS)
146
+ // 当前版本的 skills.writePolicy 同样实时读(R5):运行中改为 ask,下一次调用即生效;固定 ask 时授权不放行
147
+ const writePolicy = current?.definition?.skills?.writePolicy;
148
+ const fixedAsk = isFixedAsk(tool, current?.visibility, writePolicy);
149
+ const input = {
150
+ connectorDefault,
151
+ ...(agentOverride !== undefined && { agentOverride }),
152
+ fixedAsk,
153
+ grant: null,
154
+ };
155
+ const pre = decide(input);
156
+ if (pre === "deny")
157
+ return "deny";
158
+ if (pre === "ask" && !fixedAsk && escalateTo === null && hashCurrent) {
159
+ input.grant = await findGrant(db, tool, connectorId, ctx);
160
+ }
161
+ const result = decide(input);
162
+ if (result === "allow" && escalateTo === null) {
163
+ // 记住的授权把 ask 放行:返回授权种类(审计链记录凭什么放行)
164
+ return pre === "ask" && input.grant !== null ? { grant: input.grant } : "allow";
165
+ }
166
+ const ask = {
167
+ toolKey: tool.key,
168
+ specHash: tool.specHash,
169
+ connectorId,
170
+ requestedFor: escalateTo === null ? ctx.accountId : null,
171
+ approverRole: escalateTo,
172
+ // the most specific rule that asked: role escalation, the agent's tightening, the connector,
173
+ // a fixed ask (R3, requiresUserInteraction), the org's sandboxToolPolicy, else the tool's own
174
+ // default
175
+ policy: escalateTo !== null
176
+ ? "role"
177
+ : agentOverride === "ask"
178
+ ? "agent"
179
+ : tool.source.kind === "connector" && connectorDefault === "ask"
180
+ ? "connector"
181
+ : fixedAsk
182
+ ? "fixed"
183
+ : orgAsk
184
+ ? "org"
185
+ : "default",
186
+ };
187
+ return { ask };
188
+ };
189
+ }
190
+ /**
191
+ * An org agent sub-agent (sub-agents spec §5.5, §9): its conversation's agent is the dispatched
192
+ * agent, so `ctx.agentId`'s current version above is that agent's; the parent agent's current
193
+ * policy for the same key applies on top, so the parent's owner can tighten a running child too.
194
+ * For a template or general-purpose child the parent conversation has the same agent, already read.
195
+ */
196
+ async function parentAgentOverride(db, toolKey, ctx) {
197
+ const row = await db
198
+ .selectFrom("conversations as c")
199
+ .innerJoin("agents as a", "a.id", "c.agent_id")
200
+ .innerJoin("agent_versions as v", (j) => j.onRef("v.agent_id", "=", "a.id").onRef("v.version", "=", "a.current_version"))
201
+ .select(["a.id", "v.definition"])
202
+ .where("c.id", "=", ctx.parentConversationId ?? "")
203
+ .executeTakeFirst();
204
+ if (!row || row.id === ctx.agentId)
205
+ return undefined;
206
+ const policies = row.definition.toolPolicies;
207
+ return asOverride(policies?.[toolKey]);
208
+ }
209
+ /**
210
+ * A grant matching the current definition hash and source connector: this conversation's first,
211
+ * then "always". `connectorId` is the tool's source connector (null for plugin and builtin tools,
212
+ * which match only grants without a connector). A sub-agent's "this conversation" grants live on
213
+ * its parent conversation (sub-agents spec §9), so parallel children are approved once.
214
+ */
215
+ async function findGrant(db, tool, connectorId, ctx) {
216
+ const sameConnector = sql `connector_id IS NOT DISTINCT FROM ${connectorId}`;
217
+ const session = await db
218
+ .selectFrom("conversation_tool_grants")
219
+ .select("spec_hash")
220
+ .where("conversation_id", "=", ctx.parentConversationId ?? ctx.conversationId)
221
+ .where("tool_key", "=", tool.key)
222
+ .where(sameConnector)
223
+ .executeTakeFirst();
224
+ if (session?.spec_hash === tool.specHash)
225
+ return "session";
226
+ const always = await db
227
+ .selectFrom("tool_grants")
228
+ .select("spec_hash")
229
+ .where("org_id", "=", ctx.orgId)
230
+ .where("account_id", "=", ctx.accountId)
231
+ .where("agent_id", "=", ctx.agentId)
232
+ .where("tool_key", "=", tool.key)
233
+ .where(sameConnector)
234
+ .executeTakeFirst();
235
+ return always?.spec_hash === tool.specHash ? "always" : null;
236
+ }
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { type Principal } from "../identity/principal.js";
3
+ import { type OrgContext } from "../orgs/org.guard.js";
4
+ import type { QuestionsService, QuestionView } from "./questions.service.js";
5
+ /** 回答体:`answer` 的形状由服务按表单校验(`validateAnswer`,不符 → `validation_failed`)。 */
6
+ declare const AnswerBody: z.ZodObject<{
7
+ answer: z.ZodRecord<z.ZodString, z.ZodUnknown>;
8
+ }, z.core.$strict>;
9
+ /**
10
+ * 输入请求(`ask_user`、插件工具的 `input_required`):`/api/v1/orgs/:orgId/questions`。
11
+ * 动作用 `approvals.decide`(访客起、仅限用户主体):回答必须由人做出,agent / 服务令牌不能代答;
12
+ * 具体是否允许由服务判定——只有该运行的发起人能读取与回答,其他成员 403。
13
+ */
14
+ export declare class QuestionsController {
15
+ private readonly questions;
16
+ constructor(questions: QuestionsService);
17
+ get(principal: Principal, org: OrgContext, id: string): Promise<{
18
+ question: QuestionView;
19
+ }>;
20
+ answer(principal: Principal, org: OrgContext, id: string, body: z.infer<typeof AnswerBody>): Promise<{
21
+ question: QuestionView;
22
+ }>;
23
+ }
24
+ export {};
@@ -0,0 +1,58 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Body, Controller, Get, HttpCode, Inject, Param, Post } from "@nestjs/common";
11
+ import { z } from "zod";
12
+ import { QUESTIONS } from "../http/tokens.js";
13
+ import { ZodPipe } from "../http/zod.pipe.js";
14
+ import { CurrentPrincipal, requireUser } from "../identity/principal.js";
15
+ import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
16
+ /** 回答体:`answer` 的形状由服务按表单校验(`validateAnswer`,不符 → `validation_failed`)。 */
17
+ const AnswerBody = z.object({ answer: z.record(z.string().max(200), z.unknown()) }).strict();
18
+ /**
19
+ * 输入请求(`ask_user`、插件工具的 `input_required`):`/api/v1/orgs/:orgId/questions`。
20
+ * 动作用 `approvals.decide`(访客起、仅限用户主体):回答必须由人做出,agent / 服务令牌不能代答;
21
+ * 具体是否允许由服务判定——只有该运行的发起人能读取与回答,其他成员 403。
22
+ */
23
+ let QuestionsController = class QuestionsController {
24
+ questions;
25
+ constructor(questions) {
26
+ this.questions = questions;
27
+ }
28
+ async get(principal, org, id) {
29
+ const p = requireUser(principal);
30
+ return { question: await this.questions.get(org.orgId, id, p.account.id) };
31
+ }
32
+ async answer(principal, org, id, body) {
33
+ const p = requireUser(principal);
34
+ const { state: _state, ...view } = await this.questions.answer(id, p.account.id, body.answer, org.orgId);
35
+ return { question: view };
36
+ }
37
+ };
38
+ __decorate([
39
+ Get(":id"),
40
+ OrgAction("approvals.decide"),
41
+ __param(0, CurrentPrincipal()),
42
+ __param(1, CurrentOrg()),
43
+ __param(2, Param("id"))
44
+ ], QuestionsController.prototype, "get", null);
45
+ __decorate([
46
+ Post(":id/answer"),
47
+ HttpCode(200),
48
+ OrgAction("approvals.decide"),
49
+ __param(0, CurrentPrincipal()),
50
+ __param(1, CurrentOrg()),
51
+ __param(2, Param("id")),
52
+ __param(3, Body(new ZodPipe(AnswerBody)))
53
+ ], QuestionsController.prototype, "answer", null);
54
+ QuestionsController = __decorate([
55
+ Controller("api/v1/orgs/:orgId/questions"),
56
+ __param(0, Inject(QUESTIONS))
57
+ ], QuestionsController);
58
+ export { QuestionsController };
@@ -0,0 +1,103 @@
1
+ import { type FormAnswer, type InputForm, type Logger } from "@capybara-hq/plugin-sdk";
2
+ import { type Transaction } from "kysely";
3
+ import type { KernelConfig } from "../config/schema.js";
4
+ import type { EventLog } from "../conversations/event-log.js";
5
+ import type { KernelDatabase, KernelDb } from "../db/kernel-schema.js";
6
+ type Trx = Transaction<KernelDatabase>;
7
+ export type QuestionStatus = "pending" | "answered" | "expired" | "cancelled";
8
+ /** 一条输入请求(`ask_user`、插件工具的 `input_required`、MCP elicitation 共用)。 */
9
+ export interface QuestionRecord {
10
+ id: string;
11
+ orgId: string;
12
+ conversationId: string;
13
+ runId: string;
14
+ callId: string;
15
+ /** 同一调用的第几轮(从 1 起,最多 3 轮)。 */
16
+ attempt: number;
17
+ toolKey: string;
18
+ step: number;
19
+ form: InputForm;
20
+ state: unknown;
21
+ status: QuestionStatus;
22
+ answer: FormAnswer | null;
23
+ answeredBy: string | null;
24
+ answeredAt: string | null;
25
+ expiresAt: string;
26
+ createdAt: string;
27
+ }
28
+ /** 新建输入请求(tools 节点在处理函数返回 `input_required` 时调用)。 */
29
+ export interface QuestionAskInput {
30
+ orgId: string;
31
+ conversationId: string;
32
+ runId: string;
33
+ step: number;
34
+ callId: string;
35
+ attempt: number;
36
+ toolKey: string;
37
+ form: InputForm;
38
+ state: unknown;
39
+ }
40
+ export interface QuestionsServiceDeps {
41
+ db: KernelDb;
42
+ eventLog: EventLog;
43
+ config: () => KernelConfig;
44
+ log: Pick<Logger, "warn">;
45
+ /**
46
+ * 回答提交之后调用(恰好一次:只有把 pending 改掉的那次回答会调用),用于续跑。失败只记日志(回答已生效)。
47
+ */
48
+ onAnswered?: (question: QuestionRecord) => Promise<void>;
49
+ }
50
+ /** 网页读取输入请求的视图(不含插件 state:那是工具内部的续跑数据)。 */
51
+ export type QuestionView = Omit<QuestionRecord, "state">;
52
+ /**
53
+ * 输入请求:新建(tools 节点)、回答(只有对话发起人)、超时与取消(等待机制)。
54
+ * 状态全部在 PG:回答 / 超时 / 取消都在事务里 `SELECT … FOR UPDATE` 该行,多副本并发时恰好一个生效,
55
+ * 只有生效的那次写 `question_answered`。HTTP 接口见 questions.controller.ts。
56
+ */
57
+ export declare class QuestionsService {
58
+ private readonly deps;
59
+ constructor(deps: QuestionsServiceDeps);
60
+ /**
61
+ * 新建 pending 输入请求(`expires_at` = 现在 + `tools.approvalTimeoutHours`)并写 `question_asked`,同一事务。
62
+ * 按 (run_id, call_id, attempt) 幂等:已存在则返回已有记录,事件按 `question_asked:<id>` 幂等。
63
+ */
64
+ ask(input: QuestionAskInput): Promise<QuestionRecord>;
65
+ /**
66
+ * 读一条输入请求(网页展示表单用):只有该运行的发起人(其他人 → 403 `forbidden`);
67
+ * 不属于该组织 / 不存在 → `question.not_found`。
68
+ */
69
+ get(orgId: string, questionId: string, accountId: string): Promise<QuestionView>;
70
+ /** 某个调用的全部输入请求(按轮次升序)。 */
71
+ forCall(runId: string, callId: string): Promise<QuestionRecord[]>;
72
+ /**
73
+ * 回答:只有该运行的发起人(其他人 → 403 `forbidden`;传 `orgId` 时别的组织的输入请求 → `question.not_found`);非 pending 或已到期 →
74
+ * `question.already_answered`;答案不符合表单(`validateAnswer`)→ `validation_failed`。
75
+ * 同一事务写状态与 `question_answered`(幂等键 `question_answered:<id>`);提交后发布事件并调用 `onAnswered`(续跑)。
76
+ * 传 `orgId` 时还要求输入请求属于该组织(HTTP 接口用)。
77
+ */
78
+ answer(questionId: string, accountId: string, answer: unknown, orgId?: string): Promise<QuestionRecord>;
79
+ /**
80
+ * 超时(等待机制的超时任务调用):仍 pending 且已到期 → 置 expired、写 `question_answered{expired}`。
81
+ * 返回 `expired`(本次生效)/ `not_due`(尚未到期)/ `settled`(已回答、已取消或不存在)。
82
+ */
83
+ expire(questionId: string): Promise<{
84
+ outcome: "expired" | "not_due" | "settled";
85
+ record?: QuestionRecord;
86
+ }>;
87
+ /**
88
+ * 在事务 `t` 内取消运行的全部 pending 输入请求(运行在等待中被中止),各写 `question_answered{cancelled}`。
89
+ * 返回被取消的记录;调用方提交后发布事件。
90
+ */
91
+ cancelPendingIn(t: Trx, runId: string): Promise<QuestionRecord[]>;
92
+ /**
93
+ * 在事务 `t` 内取消某组织里由 `accountId` 发起的运行上的全部 pending 输入请求(只有运行发起人能回答,
94
+ * 即「其作为处理人」的提问;成员离职时调用),走与 {@link cancelPendingIn} 相同的取消路径:置 cancelled、
95
+ * 写 `question_answered{cancelled}`。返回被取消的记录与各会话写到的最大 seq;调用方提交后发布事件。
96
+ */
97
+ cancelPendingFor(t: Trx, orgId: string, accountId: string): Promise<{
98
+ records: QuestionRecord[];
99
+ seqs: Map<string, number>;
100
+ }>;
101
+ private answeredEvent;
102
+ }
103
+ export {};