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

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 (670) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +187 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +39 -8
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +326 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/claude/agents.js +13 -10
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +31 -14
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,20 +1,28 @@
1
1
  import { ToolError } from "@capybara-hq/plugin-sdk";
2
2
  import { checkPath, clip, display, inSandbox, SYNC_MARKER, 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
+ /** `head_limit` when the model gives none. */
6
+ const DEFAULT_HEAD_LIMIT = 250;
5
7
  /** 每个匹配行最多显示的字符数。 */
6
8
  const MAX_LINE_CHARS = 500;
7
9
  /** grep 输出的上限(字节)。 */
8
10
  const MAX_GREP_BYTES = 4 * 1024 * 1024;
11
+ const MODES = ["content", "files_with_matches", "count"];
9
12
  const SPEC = {
10
- name: "sandbox_grep",
13
+ name: "Grep",
11
14
  // Display only (the tool row; not in the fingerprint, never sent to the model).
12
15
  keyArgs: ["pattern", "path"],
13
16
  description: "Search file contents in this conversation's sandbox with a regular expression (POSIX " +
14
17
  "extended, as grep -E). Use it to find where something is defined or mentioned. Searches path " +
15
18
  "(a file, or a directory recursively; default /workspace), skipping binary files; glob limits " +
16
- 'the files searched by name, e.g. "*.py". Returns matching lines as <path>:<line>:<text>, up ' +
17
- "to 500. To find files by name, use sandbox_glob.",
19
+ 'the files searched by name, e.g. "*.py". output_mode picks what comes back: ' +
20
+ '"files_with_matches" (default) lists the paths of files that match, "content" returns the ' +
21
+ "matching lines as <path>:<line>:<text> (with -A, -B or -C lines of context around them), " +
22
+ '"count" returns <path>:<number of matching lines> per file. -n (line numbers) and the context ' +
23
+ "options apply only to content mode. head_limit caps the entries returned (default 250; " +
24
+ "0 = up to 500); pass offset to skip entries and page through more. To find files by " +
25
+ "name, use Glob.",
18
26
  inputSchema: {
19
27
  type: "object",
20
28
  properties: {
@@ -33,24 +41,66 @@ const SPEC = {
33
41
  minLength: 1,
34
42
  description: 'Only search files whose name matches this glob, e.g. "*.md".',
35
43
  },
36
- ignoreCase: { type: "boolean", description: "Case-insensitive match. Default false." },
44
+ "-i": { type: "boolean", description: "Case-insensitive match. Default false." },
45
+ output_mode: {
46
+ type: "string",
47
+ enum: [...MODES],
48
+ description: 'What to return: "files_with_matches" (file paths, default), "content" (matching lines) or "count" (matching lines per file).',
49
+ },
50
+ "-n": {
51
+ type: "boolean",
52
+ description: "Show line numbers in content mode. Default true.",
53
+ },
54
+ "-A": {
55
+ type: "integer",
56
+ minimum: 0,
57
+ description: "Lines of context after each match (content mode).",
58
+ },
59
+ "-B": {
60
+ type: "integer",
61
+ minimum: 0,
62
+ description: "Lines of context before each match (content mode).",
63
+ },
64
+ "-C": {
65
+ type: "integer",
66
+ minimum: 0,
67
+ description: "Lines of context before and after each match (content mode).",
68
+ },
69
+ head_limit: {
70
+ type: "integer",
71
+ minimum: 0,
72
+ description: `Return at most this many entries (lines, files or counts, by mode). Default ${DEFAULT_HEAD_LIMIT}; 0 = up to ${MAX_MATCHES}.`,
73
+ },
74
+ offset: {
75
+ type: "integer",
76
+ minimum: 0,
77
+ description: "Skip this many entries before returning (for paging). Default 0.",
78
+ },
37
79
  },
38
80
  required: ["pattern"],
39
81
  additionalProperties: false,
40
82
  },
41
83
  annotations: { readOnlyHint: true },
42
84
  };
43
- const notFound = (path) => `${clip(path, 200)} does not exist; check the path with sandbox_glob.`;
85
+ const notFound = (path) => `${clip(path, 200)} does not exist; check the path with Glob.`;
44
86
  const failed = (stderr) => `grep failed: ${clip(stderr, 300)}. Check the pattern (POSIX extended regular expression) and retry.`;
45
87
  const GREP_TIMEOUT = "The search did not finish in time; pass a narrower path or a glob and retry.";
46
88
  /**
47
- * 解析 `grep -nH --null` 的输出:每条为 `<文件名>\0<行号>:<行>\n`(文件名可能含换行,行本身不含)。
48
- * 返回 `<绝对路径>:<行号>:<行>`;文件名里的换行显示为 `\n`。最后一条不完整(输出被截断)时丢掉。
89
+ * Parses the output of `grep -H --null` (with `-n` when `numbered`): each entry is
90
+ * `<file name>\0<line number>:<line>\n` (the file name may contain newlines, the line does not).
91
+ * Returns `<absolute path>:<line number>:<line>`; context lines (`<line number>-<line>`, only with
92
+ * `-A/-B/-C`) become `<absolute path>-<line number>-<line>`, and the `--` group separator is kept.
93
+ * A newline in a file name shows as `\n`. An incomplete last entry (truncated output) is dropped.
49
94
  */
50
- export function parseGrepNull(stdout, base) {
95
+ export function parseGrepNull(stdout, base, numbered = true) {
51
96
  const out = [];
52
97
  let pos = 0;
53
98
  for (;;) {
99
+ if (stdout.startsWith("--\n", pos)) {
100
+ out.push("--");
101
+ pos += 3;
102
+ continue;
103
+ }
54
104
  const nul = stdout.indexOf("\0", pos);
55
105
  if (nul === -1)
56
106
  break;
@@ -59,22 +109,58 @@ export function parseGrepNull(stdout, base) {
59
109
  break;
60
110
  const raw = stdout.slice(pos, nul);
61
111
  const name = (raw.startsWith("./") ? raw.slice(2) : raw).replace(/\n/g, "\\n");
62
- out.push(`${base}/${name}:${stdout.slice(nul + 1, nl)}`);
112
+ const rest = stdout.slice(nul + 1, nl);
113
+ out.push(numbered && /^\d+-/.test(rest) ? `${base}/${name}-${rest}` : `${base}/${name}:${rest}`);
63
114
  pos = nl + 1;
64
115
  }
65
116
  return out;
66
117
  }
67
- /** 内置工具 `sandbox_grep`:按正则搜文件内容(只读)。 */
118
+ const displayName = (raw) => (raw.startsWith("./") ? raw.slice(2) : raw).replace(/\n/g, "\\n");
119
+ /** `grep -l --null` output: the matching files, each followed by NUL. */
120
+ function parseFileList(stdout, base) {
121
+ const parts = stdout.split("\0");
122
+ // the last part is empty, or an incomplete name when the output was truncated: dropped
123
+ parts.pop();
124
+ return parts.filter((n) => n !== "").map((n) => `${base}/${displayName(n)}`);
125
+ }
126
+ /**
127
+ * `grep -c` output as `<path>:<count>` for the files with at least one matching line. GNU grep
128
+ * with `--null` writes `<file>\0<count>\n`; other implementations write `<file>:<count>`.
129
+ */
130
+ function parseCounts(stdout, base) {
131
+ const out = [];
132
+ if (stdout.includes("\0")) {
133
+ for (const l of parseGrepNull(stdout, base, false)) {
134
+ if (!l.endsWith(":0"))
135
+ out.push(l);
136
+ }
137
+ return out;
138
+ }
139
+ for (const line of stdout.split("\n")) {
140
+ const i = line.lastIndexOf(":");
141
+ if (i <= 0)
142
+ continue;
143
+ const count = line.slice(i + 1);
144
+ if (count === "0" || !/^\d+$/.test(count))
145
+ continue;
146
+ out.push(`${base}/${displayName(line.slice(0, i))}:${count}`);
147
+ }
148
+ return out;
149
+ }
150
+ /** 内置工具 `Grep`:按正则搜文件内容(只读)。 */
68
151
  export function sandboxGrepTool(deps) {
69
152
  return {
70
153
  spec: SPEC,
71
154
  defaultPolicy: "allow",
72
155
  unavailable: unavailableWhenNoSandbox(deps),
73
- timeoutMs: () => sandboxBaseTimeoutMs(deps.config()),
156
+ timeoutMs: () => sandboxBaseTimeoutMs(deps.config.get()),
74
157
  async run(input, ctx) {
75
158
  const startedAt = Date.now();
76
- const { pattern, glob, ignoreCase = false } = input;
77
- const path = checkPath(input.path ?? "/workspace");
159
+ const g = input;
160
+ const { pattern, glob } = g;
161
+ const mode = g.output_mode ?? "files_with_matches";
162
+ const numbered = g["-n"] ?? true;
163
+ const path = checkPath(g.path ?? "/workspace");
78
164
  const { value, notices } = await inSandbox(deps, ctx, async ({ h, p, signal }) => {
79
165
  const st = await p.stat(h, path, signal);
80
166
  if (st === null)
@@ -83,10 +169,22 @@ export function sandboxGrepTool(deps) {
83
169
  const slash = path.lastIndexOf("/");
84
170
  const cwd = st.isDir ? path : path.slice(0, slash) || "/";
85
171
  const target = st.isDir ? "." : path.slice(slash + 1);
172
+ const base = cwd === "/" ? "" : cwd;
173
+ // GNU grep options (`-l`, `-c`, `-n`, `-A/-B/-C`, `--null`): the sandbox images are Debian
174
+ const modeFlags = mode === "files_with_matches"
175
+ ? ["-rlIE", "--null"]
176
+ : mode === "count"
177
+ ? ["-rcHIE", "--null"]
178
+ : [numbered ? "-rnHIE" : "-rHIE", "--null"];
179
+ const context = mode === "content"
180
+ ? ["-A", "-B", "-C"].flatMap((f) => g[f] !== undefined ? [f, String(g[f])] : [])
181
+ : [];
86
182
  const command = [
87
183
  // --null:文件名后跟 NUL 而不是 `:`,文件名里有换行或冒号也能解析
88
- "grep -rnHIE --null",
89
- ...(ignoreCase ? ["-i"] : []),
184
+ "grep",
185
+ ...modeFlags,
186
+ ...(g["-i"] === true ? ["-i"] : []),
187
+ ...context,
90
188
  ...(glob !== undefined ? [`--include=${shellQuote(glob)}`] : []),
91
189
  "-e",
92
190
  shellQuote(pattern),
@@ -96,34 +194,53 @@ export function sandboxGrepTool(deps) {
96
194
  const r = await p.exec(h, {
97
195
  command,
98
196
  cwd,
99
- timeoutMs: searchTimeoutMs(deps.config(), startedAt, Date.now(), ctx.runDeadline),
197
+ timeoutMs: searchTimeoutMs(deps.config.get(), startedAt, Date.now(), ctx.runDeadline),
100
198
  maxOutputBytes: MAX_GREP_BYTES,
101
199
  signal,
102
200
  });
103
201
  if (r.timedOut || r.exitCode === null)
104
202
  throw new ToolError(GREP_TIMEOUT);
105
203
  if (r.exitCode === 1)
106
- return { lines: [], warning: null };
107
- const all = parseGrepNull(r.stdout, cwd === "/" ? "" : cwd);
108
- const lines = all.filter((l) => !l.startsWith(`${SYNC_MARKER}:`));
204
+ return { entries: [], warning: null };
205
+ const all = mode === "files_with_matches"
206
+ ? parseFileList(r.stdout, base)
207
+ : mode === "count"
208
+ ? parseCounts(r.stdout, base)
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}-`));
109
213
  // 退出码 2 = 有错误(如个别文件不可读);有输出时照常返回(可能为空:只匹配到隐藏的标记文件)并附上说明
110
214
  if (r.exitCode !== 0 && all.length === 0)
111
215
  throw new ToolError(failed(r.stderr));
112
216
  const warning = r.exitCode !== 0 ? clip(r.stderr, 300) : null;
113
- return { lines, warning };
217
+ return { entries, warning };
114
218
  });
115
- const { lines, warning } = value;
116
- const shown = lines
117
- .slice(0, MAX_MATCHES)
118
- .map((l) => (l.length > MAX_LINE_CHARS ? `${l.slice(0, MAX_LINE_CHARS)}…` : l));
219
+ const { entries, warning } = value;
220
+ const total = entries.length;
221
+ const offset = g.offset ?? 0;
222
+ const headLimit = g.head_limit === undefined ? DEFAULT_HEAD_LIMIT : g.head_limit;
223
+ const limit = headLimit === 0 ? MAX_MATCHES : Math.min(headLimit, MAX_MATCHES);
224
+ const page = entries.slice(offset, offset + limit);
225
+ const shown = page.map((l) => l.length > MAX_LINE_CHARS ? `${l.slice(0, MAX_LINE_CHARS)}…` : l);
119
226
  const note = warning !== null ? `\n[grep also reported errors: ${warning}]` : "";
120
- const text = (lines.length === 0
121
- ? `No matches for ${pattern} in ${path}.`
122
- : shown.join("\n") +
123
- (lines.length > MAX_MATCHES
124
- ? `\n[Showing the first ${MAX_MATCHES} of ${lines.length} matching lines; use a narrower pattern, path or glob.]`
125
- : "")) + note;
126
- const n = lines.length;
227
+ let text;
228
+ if (total === 0) {
229
+ text = `No matches for ${pattern} in ${path}.${note}`;
230
+ }
231
+ else if (page.length === 0) {
232
+ text = `No more results (${total} total).${note}`;
233
+ }
234
+ else {
235
+ const end = offset + page.length;
236
+ text =
237
+ shown.join("\n") +
238
+ (end < total
239
+ ? `\n[Showing entries ${offset + 1}–${end} of ${total}; pass offset=${end} to continue, or use a narrower pattern, path or glob.]`
240
+ : "") +
241
+ note;
242
+ }
243
+ const n = total;
127
244
  return {
128
245
  content: [{ type: "text", text: withNotices(notices, text) }],
129
246
  display: display(`搜索 ${clip(pattern, 120)}(${n} 处)`, `Searched for ${clip(pattern, 120)} (${n} match${n === 1 ? "" : "es"})`),
@@ -1,9 +1,9 @@
1
1
  import type { BuiltinTool } from "../../registry.js";
2
2
  import type { SandboxToolDeps } from "./common.js";
3
+ export { SANDBOX_ASK_TOOL_NAMES, SANDBOX_TOOL_NAMES } from "../../builtin-names.js";
3
4
  export { BASH_SPILL_CHARS, formatExec } from "./bash.js";
4
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
6
  export { compileGlob, GlobPatternError, MAX_GLOB_STARS } from "./glob-match.js";
6
- export { SANDBOX_ASK_TOOL_NAMES, SANDBOX_TOOL_NAMES } from "./names.js";
7
7
  /**
8
8
  * 沙箱内置工具(M5 T8):bash / read / write / edit / glob / grep / deliver,都在本对话的沙箱上执行
9
9
  * (`SandboxService.withSandbox`),执行前同步附件到 `/workspace/attachments`。没有沙箱提供方时报不可用。
@@ -5,10 +5,10 @@ import { sandboxGlobTool } from "./glob.js";
5
5
  import { sandboxGrepTool } from "./grep.js";
6
6
  import { sandboxReadTool } from "./read.js";
7
7
  import { sandboxWriteTool } from "./write.js";
8
+ export { SANDBOX_ASK_TOOL_NAMES, SANDBOX_TOOL_NAMES } from "../../builtin-names.js";
8
9
  export { BASH_SPILL_CHARS, formatExec } from "./bash.js";
9
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";
10
11
  export { compileGlob, GlobPatternError, MAX_GLOB_STARS } from "./glob-match.js";
11
- export { SANDBOX_ASK_TOOL_NAMES, SANDBOX_TOOL_NAMES } from "./names.js";
12
12
  /**
13
13
  * 沙箱内置工具(M5 T8):bash / read / write / edit / glob / grep / deliver,都在本对话的沙箱上执行
14
14
  * (`SandboxService.withSandbox`),执行前同步附件到 `/workspace/attachments`。没有沙箱提供方时报不可用。
@@ -1,8 +1,8 @@
1
1
  import type { BuiltinTool } from "../../registry.js";
2
2
  import { type SandboxToolDeps } from "./common.js";
3
- /** 最多读出的字节数(更大的文件只读开头,并说明用 sandbox_bash 读其余部分)。 */
3
+ /** 最多读出的字节数(更大的文件只读开头,并说明用 Bash 读其余部分)。 */
4
4
  export declare const READ_MAX_BYTES: number;
5
5
  /** 按行编号显示 `[offset, offset + limit)`(1 起),结尾注明还有多少行。 */
6
6
  export declare function numberLines(text: string, offset: number, limit: number): string;
7
- /** 内置工具 `sandbox_read`:读沙箱里的文本文件(只读,组织策略为 ask 时也不审批)。 */
7
+ /** 内置工具 `Read`:读沙箱里的文本文件(只读,组织策略为 ask 时也不审批)。 */
8
8
  export declare function sandboxReadTool(deps: SandboxToolDeps): BuiltinTool;
@@ -1,25 +1,27 @@
1
1
  import { ToolError } from "@capybara-hq/plugin-sdk";
2
2
  import { viewPath } from "../../view.js";
3
3
  import { checkPath, clip, display, inSandbox, looksBinary, sandboxBaseTimeoutMs, unavailableWhenNoSandbox, withNotices, } from "./common.js";
4
+ import { normalizeSandboxPath, recordedFile } from "./file-state.js";
4
5
  /** 不给 `limit` 时一次读的行数。 */
5
6
  const DEFAULT_LIMIT = 2000;
6
7
  /** 单行最多显示的字符数(更长的截断并注明)。 */
7
8
  const MAX_LINE_CHARS = 2000;
8
- /** 最多读出的字节数(更大的文件只读开头,并说明用 sandbox_bash 读其余部分)。 */
9
+ /** 最多读出的字节数(更大的文件只读开头,并说明用 Bash 读其余部分)。 */
9
10
  export const READ_MAX_BYTES = 10 * 1024 * 1024;
10
11
  const SPEC = {
11
- name: "sandbox_read",
12
+ name: "Read",
12
13
  // Display only (the tool row; not in the fingerprint, never sent to the model).
13
- keyArgs: ["path"],
14
+ keyArgs: ["file_path"],
14
15
  description: "Read a text file from this conversation's sandbox, with line numbers. Use it to look at " +
15
16
  "source code, data files, logs and files the user attached (under /workspace/attachments). " +
16
17
  "Paths are absolute, under /workspace, /skills or /tmp. Lines are numbered from 1; pass " +
17
- "offset and limit to read part of a long file. Binary files are not shown; use sandbox_bash " +
18
- "to inspect them. Do not use it to list directories; use sandbox_glob instead.",
18
+ "offset and limit to read part of a long file. Binary files are not shown; use Bash " +
19
+ "to inspect them. Do not use it to list directories; use Glob instead. Read a file before you " +
20
+ "write it: Write and Edit fail on a file you have not read, or one changed since you read it.",
19
21
  inputSchema: {
20
22
  type: "object",
21
23
  properties: {
22
- path: {
24
+ file_path: {
23
25
  type: "string",
24
26
  minLength: 1,
25
27
  description: 'Absolute path of the file, e.g. "/workspace/src/main.py".',
@@ -35,13 +37,13 @@ const SPEC = {
35
37
  description: `Maximum number of lines to read. Default ${DEFAULT_LIMIT}.`,
36
38
  },
37
39
  },
38
- required: ["path"],
40
+ required: ["file_path"],
39
41
  additionalProperties: false,
40
42
  },
41
43
  annotations: { readOnlyHint: true },
42
44
  };
43
- const notFound = (path) => `File not found: ${clip(path, 200)}. Check the path with sandbox_glob.`;
44
- const isDirectory = (path) => `${clip(path, 200)} is a directory; use sandbox_glob to list its files.`;
45
+ const notFound = (path) => `File not found: ${clip(path, 200)}. Check the path with Glob.`;
46
+ const isDirectory = (path) => `${clip(path, 200)} is a directory; use Glob to list its files.`;
45
47
  const pastEnd = (offset, total) => `offset ${offset} is past the end of the file (${total} lines); pass an offset of at most ${total}.`;
46
48
  /** The file's lines (a final newline does not start another line). */
47
49
  function fileLines(text) {
@@ -70,16 +72,16 @@ export function numberLines(text, offset, limit) {
70
72
  }
71
73
  return out.join("\n");
72
74
  }
73
- /** 内置工具 `sandbox_read`:读沙箱里的文本文件(只读,组织策略为 ask 时也不审批)。 */
75
+ /** 内置工具 `Read`:读沙箱里的文本文件(只读,组织策略为 ask 时也不审批)。 */
74
76
  export function sandboxReadTool(deps) {
75
77
  return {
76
78
  spec: SPEC,
77
79
  defaultPolicy: "allow",
78
80
  unavailable: unavailableWhenNoSandbox(deps),
79
- timeoutMs: () => sandboxBaseTimeoutMs(deps.config()),
81
+ timeoutMs: () => sandboxBaseTimeoutMs(deps.config.get()),
80
82
  async run(input, ctx) {
81
83
  const { offset = 1, limit = DEFAULT_LIMIT } = input;
82
- const path = checkPath(input.path);
84
+ const path = checkPath(input.file_path, "file_path");
83
85
  const { value, notices } = await inSandbox(deps, ctx, async ({ h, p, signal }) => {
84
86
  const st = await p.stat(h, path, signal);
85
87
  if (st === null)
@@ -95,7 +97,7 @@ export function sandboxReadTool(deps) {
95
97
  // display only: the line range shown on the row
96
98
  let range = {};
97
99
  if (looksBinary(value.data)) {
98
- text = `Binary file (${value.size} bytes); use sandbox_bash to inspect it (for example file or xxd).`;
100
+ text = `Binary file (${value.size} bytes); use Bash to inspect it (for example file or xxd).`;
99
101
  }
100
102
  else if (value.data.byteLength === 0) {
101
103
  text = "(empty file)";
@@ -108,13 +110,18 @@ export function sandboxReadTool(deps) {
108
110
  toLine: Math.min(fileLines(decoded).length, offset - 1 + limit),
109
111
  };
110
112
  if (value.truncated) {
111
- text += `\n[Only the first ${READ_MAX_BYTES} bytes of this ${value.size}-byte file were read; use sandbox_bash (e.g. sed -n or tail) for the rest.]`;
113
+ text += `\n[Only the first ${READ_MAX_BYTES} bytes of this ${value.size}-byte file were read; use Bash (e.g. sed -n or tail) for the rest.]`;
112
114
  }
113
115
  }
114
116
  return {
115
117
  content: [{ type: "text", text: withNotices(notices, text) }],
116
118
  display: display(`读取 ${clip(path, 180)}`, `Read ${clip(path, 180)}`),
117
- view: { kind: "read", path: viewPath(path), ...range },
119
+ view: {
120
+ kind: "read",
121
+ path: viewPath(path),
122
+ ...range,
123
+ file: recordedFile(normalizeSandboxPath(path), value.data, value.size),
124
+ },
118
125
  };
119
126
  },
120
127
  };
@@ -1,4 +1,4 @@
1
1
  import type { BuiltinTool } from "../../registry.js";
2
2
  import { type SandboxToolDeps } from "./common.js";
3
- /** 内置工具 `sandbox_write`:整文件写入。 */
3
+ /** 内置工具 `Write`:整文件写入。 */
4
4
  export declare function sandboxWriteTool(deps: SandboxToolDeps): BuiltinTool;
@@ -1,26 +1,29 @@
1
- import { isSandboxGoneError, ToolError } from "@capybara-hq/plugin-sdk";
1
+ import { ToolError } from "@capybara-hq/plugin-sdk";
2
2
  import { lineDiff, TOOL_VIEW_DIFF_MAX_BYTES, viewPath } from "../../view.js";
3
3
  import { checkWritable, clip, display, inSandbox, looksBinary, sandboxBaseTimeoutMs, unavailableWhenNoSandbox, withNotices, withPathLease, } from "./common.js";
4
+ import { assertReadAndUnchanged, fileStateOf, normalizeSandboxPath, recordedFile, } from "./file-state.js";
5
+ import { READ_MAX_BYTES } from "./read.js";
4
6
  const SPEC = {
5
- name: "sandbox_write",
7
+ name: "Write",
6
8
  // Display only (the tool row; not in the fingerprint, never sent to the model).
7
- keyArgs: ["path"],
9
+ keyArgs: ["file_path"],
8
10
  description: "Write a text file in this conversation's sandbox, creating parent directories as needed. " +
9
11
  "Each call replaces the whole file (it is created if missing). Use it to create scripts, " +
10
12
  "source files and data files. The path is absolute, under /workspace or /tmp (/skills is " +
11
- "read-only). To change part of an existing file, use sandbox_edit instead; to give a file to " +
12
- "the user, use sandbox_deliver.",
13
+ "read-only). Read an existing file first; overwriting a file you have not read, or one changed " +
14
+ "since you read it, fails. To change part of an existing file, use Edit instead; to give a file to " +
15
+ "the user, use Deliver.",
13
16
  inputSchema: {
14
17
  type: "object",
15
18
  properties: {
16
- path: {
19
+ file_path: {
17
20
  type: "string",
18
21
  minLength: 1,
19
22
  description: 'Absolute path of the file, e.g. "/workspace/report.md".',
20
23
  },
21
24
  content: { type: "string", description: "The complete new content of the file." },
22
25
  },
23
- required: ["path", "content"],
26
+ required: ["file_path", "content"],
24
27
  additionalProperties: false,
25
28
  },
26
29
  };
@@ -30,16 +33,17 @@ const SPEC = {
30
33
  * result carries no view.
31
34
  */
32
35
  const PREVIOUS_MAX_BYTES = TOOL_VIEW_DIFF_MAX_BYTES;
36
+ const vanished = (path) => `${clip(path, 200)} disappeared while it was being written; retry the call.`;
33
37
  const isDirectory = (path) => `${clip(path, 200)} is a directory; pass the path of a file inside it.`;
34
- /** 内置工具 `sandbox_write`:整文件写入。 */
38
+ /** 内置工具 `Write`:整文件写入。 */
35
39
  export function sandboxWriteTool(deps) {
36
40
  return {
37
41
  spec: SPEC,
38
42
  defaultPolicy: "allow",
39
43
  unavailable: unavailableWhenNoSandbox(deps),
40
- timeoutMs: () => sandboxBaseTimeoutMs(deps.config()),
44
+ timeoutMs: () => sandboxBaseTimeoutMs(deps.config.get()),
41
45
  async run(input, ctx) {
42
- const path = checkWritable(input.path);
46
+ const path = checkWritable(input.file_path);
43
47
  const data = new TextEncoder().encode(input.content);
44
48
  const { value, notices } = await inSandbox(deps, ctx, ({ h, p, signal }) =>
45
49
  // stat, read the previous content, write: one holder at a time per file
@@ -47,24 +51,21 @@ export function sandboxWriteTool(deps) {
47
51
  const st = await p.stat(h, path, signal);
48
52
  if (st?.isDir)
49
53
  throw new ToolError(isDirectory(path));
50
- // the previous content, for the diff on the row (display only: a failure here never
51
- // fails the write, the result just carries no view)
54
+ // the previous content: for the read-before-write check, and the diff on the row (display
55
+ // only: a file too large or binary to diff just leaves the view without hunks)
52
56
  let previous = "";
53
57
  if (st !== null) {
54
- try {
55
- const got = st.size <= PREVIOUS_MAX_BYTES
56
- ? await p.readFile(h, path, { maxBytes: PREVIOUS_MAX_BYTES, signal })
57
- : null;
58
- previous =
59
- got === null || got.truncated || looksBinary(got.data) || got.data.includes(0)
60
- ? null
61
- : new TextDecoder().decode(got.data);
62
- }
63
- catch (e) {
64
- if (signal.aborted || isSandboxGoneError(e))
65
- throw e;
66
- previous = null;
67
- }
58
+ const got = await p.readFile(h, path, { maxBytes: READ_MAX_BYTES, signal });
59
+ if (got === null)
60
+ throw new ToolError(vanished(path));
61
+ await assertReadAndUnchanged(deps, ctx.conversationId, path, fileStateOf(got.data, st.size));
62
+ previous =
63
+ st.size > PREVIOUS_MAX_BYTES ||
64
+ got.truncated ||
65
+ looksBinary(got.data) ||
66
+ got.data.includes(0)
67
+ ? null
68
+ : new TextDecoder().decode(got.data);
68
69
  }
69
70
  await p.writeFile(h, path, data, signal);
70
71
  return { existed: st !== null, previous };
@@ -74,14 +75,17 @@ export function sandboxWriteTool(deps) {
74
75
  return {
75
76
  content: [{ type: "text", text: withNotices(notices, text) }],
76
77
  display: display(`写入 ${clip(path, 180)}`, `Wrote ${clip(path, 180)}`),
77
- ...(previous !== null && {
78
- view: {
79
- kind: "edit",
80
- path: viewPath(path),
81
- created: !existed,
82
- ...lineDiff(previous, input.content),
83
- },
84
- }),
78
+ // the view always carries the file state: the next Write / Edit of the path needs it
79
+ view: {
80
+ kind: "edit",
81
+ path: viewPath(path),
82
+ created: !existed,
83
+ ...(previous !== null
84
+ ? lineDiff(previous, input.content)
85
+ : { added: 0, removed: 0, truncated: true, hunks: [] }),
86
+ // over the bytes the next Write / Edit reads back (Read's limit), as Read records it
87
+ file: recordedFile(normalizeSandboxPath(path), data.subarray(0, READ_MAX_BYTES), data.byteLength),
88
+ },
85
89
  };
86
90
  },
87
91
  };
@@ -1,11 +1,11 @@
1
1
  import { type ObjectStore } from "@capybara-hq/plugin-sdk";
2
2
  import type { EventLog } from "../../conversations/event-log.js";
3
- import type { KernelDb, SkillManifest } from "../../db/kernel-schema.js";
3
+ import type { KernelSchemaDb, SkillManifest } from "../../db/kernel-schema.js";
4
4
  import { type CatalogSkill } from "../../runtime/context/skills.js";
5
5
  import type { BuiltinCallContext, BuiltinTool } from "../registry.js";
6
6
  import { type SandboxToolDeps } from "./sandbox/common.js";
7
7
  /**
8
- * 内置工具 `skill_load`(M5 T14,Ruling M17):按日志里最新一份技能目录快照把名字解析为 id 与版本,返回该版本
8
+ * 内置工具 `Skill`(M5 T14,Ruling M17):按日志里最新一份技能目录快照把名字解析为 id 与版本,返回该版本
9
9
  * SKILL.md 的正文与文件清单(结果里写明版本)。技能带其他文件时把整个技能复制进本对话沙箱的 `/skills/<name>/`
10
10
  * (提供方以 root 写,命令用户只读);没有沙箱提供方时只给正文,并说明脚本不可用。
11
11
  *
@@ -27,8 +27,8 @@ export declare const SKILLS_MARKER_DIR = "/skills/.capybara";
27
27
  export declare const skillMarkerPath: (name: string) => string;
28
28
  /** 依赖:沙箱工具的依赖,加上读技能行用的库与读快照用的日志。 */
29
29
  export interface SkillLoadDeps extends SandboxToolDeps {
30
- db: KernelDb;
31
- eventLog: Pick<EventLog, "append" | "latestOfType">;
30
+ db: KernelSchemaDb;
31
+ eventLog: Pick<EventLog, "append" | "latestOfType" | "latestFileState">;
32
32
  }
33
33
  /** A stored skill file is missing or does not match its manifest entry (size, sha256). */
34
34
  export declare class SkillIntegrityError extends Error {
@@ -45,9 +45,9 @@ export declare function readSkillFile(store: ObjectStore, key: string, file: Ski
45
45
  * 没有 `skill_versions` 行,新技能连 `skills` 行都没有)。绝不按版本号解析——被拒绝的草稿与之后别人批准的同号版本
46
46
  * 内容不同。都没有 → undefined(已移除)。
47
47
  */
48
- export declare function findSkillVersion(db: KernelDb, ctx: Pick<BuiltinCallContext, "orgId" | "conversationId">, entry: Pick<CatalogSkill, "id" | "source">): Promise<{
48
+ export declare function findSkillVersion(db: KernelSchemaDb, ctx: Pick<BuiltinCallContext, "orgId" | "conversationId">, entry: Pick<CatalogSkill, "id" | "source">): Promise<{
49
49
  manifest: SkillManifest;
50
50
  object_prefix: string;
51
51
  } | undefined>;
52
- /** 内置工具 `skill_load`(见文件头)。 */
52
+ /** 内置工具 `Skill`(见文件头)。 */
53
53
  export declare function skillLoadTool(deps: SkillLoadDeps): BuiltinTool;