@wardby/cli 0.6.0 → 0.8.0

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 (740) hide show
  1. package/.env.example +5 -5
  2. package/README.md +6 -1
  3. package/deploy/local/docker-compose.quickstart-coding.yml +19 -0
  4. package/dist/claude-coding-worker/driver.d.ts +33 -3
  5. package/dist/claude-coding-worker/driver.js +151 -21
  6. package/dist/claude-coding-worker/main.js +38 -6
  7. package/dist/claude-coding-worker/sdk.js +29 -2
  8. package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
  9. package/dist/claude-coding-worker/tool-socket.js +111 -0
  10. package/dist/claude-coding-worker/transcript.d.ts +18 -0
  11. package/dist/claude-coding-worker/transcript.js +77 -0
  12. package/dist/claude-plugin/command.d.ts +61 -0
  13. package/dist/claude-plugin/command.js +376 -0
  14. package/dist/cli-help.d.ts +1 -1
  15. package/dist/cli-help.js +3 -1
  16. package/dist/cli.js +71 -13
  17. package/dist/coding/code-host.d.ts +16 -0
  18. package/dist/coding/code-host.js +60 -0
  19. package/dist/coding/continuation-wording.d.ts +35 -0
  20. package/dist/coding/continuation-wording.js +73 -0
  21. package/dist/coding/linked-issue-note.d.ts +23 -0
  22. package/dist/coding/linked-issue-note.js +47 -0
  23. package/dist/coding/mcp-token.d.ts +12 -0
  24. package/dist/coding/mcp-token.js +26 -0
  25. package/dist/coding/merge-wording.d.ts +28 -0
  26. package/dist/coding/merge-wording.js +78 -0
  27. package/dist/coding/pr-description-note.d.ts +9 -0
  28. package/dist/coding/pr-description-note.js +32 -0
  29. package/dist/coding/profile.d.ts +46 -126
  30. package/dist/coding/profile.js +45 -4
  31. package/dist/coding/protected-path-wording.d.ts +8 -0
  32. package/dist/coding/protected-path-wording.js +1 -1
  33. package/dist/coding/protocol.d.ts +264 -346
  34. package/dist/coding/protocol.js +237 -12
  35. package/dist/coding/redact.d.ts +3 -0
  36. package/dist/coding/redact.js +17 -0
  37. package/dist/coding/registry/allowlist.d.ts +12 -0
  38. package/dist/coding/registry/allowlist.js +14 -1
  39. package/dist/coding/registry/audit-mode.d.ts +153 -0
  40. package/dist/coding/registry/audit-mode.js +304 -0
  41. package/dist/coding/registry/lockfile-shared.d.ts +36 -0
  42. package/dist/coding/registry/lockfile-shared.js +128 -0
  43. package/dist/coding/registry/lockfiles.js +1 -1
  44. package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
  45. package/dist/coding/registry/npm-lockfile-formats.js +41 -0
  46. package/dist/coding/registry/npm-lockfile.d.ts +8 -4
  47. package/dist/coding/registry/npm-lockfile.js +4 -6
  48. package/dist/coding/registry/npm.js +78 -8
  49. package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
  50. package/dist/coding/registry/pnpm-lockfile.js +189 -0
  51. package/dist/coding/registry/pypi-plan.d.ts +50 -0
  52. package/dist/coding/registry/pypi-plan.js +406 -0
  53. package/dist/coding/registry/pypi-requirements.d.ts +58 -0
  54. package/dist/coding/registry/pypi-requirements.js +155 -0
  55. package/dist/coding/registry/pypi.d.ts +3 -27
  56. package/dist/coding/registry/pypi.js +40 -154
  57. package/dist/coding/registry/refusal-hints.d.ts +20 -0
  58. package/dist/coding/registry/refusal-hints.js +61 -0
  59. package/dist/coding/registry/refusal-wording.d.ts +11 -0
  60. package/dist/coding/registry/refusal-wording.js +56 -0
  61. package/dist/coding/registry/report.d.ts +70 -8
  62. package/dist/coding/registry/report.js +112 -5
  63. package/dist/coding/registry/types.d.ts +58 -8
  64. package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
  65. package/dist/coding/registry/yarn-lockfile.js +367 -0
  66. package/dist/coding/services/catalog.d.ts +37 -351
  67. package/dist/coding/transcript/claude-code.d.ts +13 -0
  68. package/dist/coding/transcript/claude-code.js +273 -0
  69. package/dist/coding/transcript/download-protocol.d.ts +30 -0
  70. package/dist/coding/transcript/download-protocol.js +18 -0
  71. package/dist/coding/transcript/format.d.ts +20 -0
  72. package/dist/coding/transcript/format.js +32 -0
  73. package/dist/coding/transcript/recorder.d.ts +52 -0
  74. package/dist/coding/transcript/recorder.js +225 -0
  75. package/dist/coding/transcript/resume/checkout.d.ts +31 -0
  76. package/dist/coding/transcript/resume/checkout.js +203 -0
  77. package/dist/coding/transcript/resume/command.d.ts +17 -0
  78. package/dist/coding/transcript/resume/command.js +176 -0
  79. package/dist/coding/transcript/resume/download.d.ts +20 -0
  80. package/dist/coding/transcript/resume/download.js +153 -0
  81. package/dist/coding/transcript/resume/launch.d.ts +38 -0
  82. package/dist/coding/transcript/resume/launch.js +128 -0
  83. package/dist/coding/transcript/resume/session-file.d.ts +13 -0
  84. package/dist/coding/transcript/resume/session-file.js +79 -0
  85. package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
  86. package/dist/coding/transcript/resume/stand-in.js +49 -0
  87. package/dist/coding-worker/artifact.d.ts +8 -3
  88. package/dist/coding-worker/artifact.js +3 -1
  89. package/dist/coding-worker/debug-trace.d.ts +9 -6
  90. package/dist/coding-worker/debug-trace.js +16 -19
  91. package/dist/coding-worker/dependency-cache.d.mts +229 -0
  92. package/dist/coding-worker/dependency-cache.mjs +2123 -0
  93. package/dist/coding-worker/driver.d.ts +4 -3
  94. package/dist/coding-worker/driver.js +124 -39
  95. package/dist/coding-worker/errors.d.ts +1 -0
  96. package/dist/coding-worker/errors.js +32 -0
  97. package/dist/coding-worker/main.js +5 -1
  98. package/dist/coding-worker/mcp-config.d.ts +27 -0
  99. package/dist/coding-worker/mcp-config.js +32 -0
  100. package/dist/coding-worker/sdk.d.ts +36 -0
  101. package/dist/coding-worker/sdk.js +28 -1
  102. package/dist/coding-worker/task-note.d.ts +11 -0
  103. package/dist/coding-worker/task-note.js +13 -0
  104. package/dist/coding-worker/types.d.ts +15 -0
  105. package/dist/config/dependency-cache.d.ts +23 -0
  106. package/dist/config/dependency-cache.js +32 -0
  107. package/dist/config/mcp-call-limit.d.ts +8 -0
  108. package/dist/config/mcp-call-limit.js +18 -0
  109. package/dist/config/mcp-servers.d.ts +8 -0
  110. package/dist/config/mcp-servers.js +12 -0
  111. package/dist/config/providers.d.ts +12 -3
  112. package/dist/config/providers.js +55 -5
  113. package/dist/config/test-simulators.d.ts +92 -0
  114. package/dist/config/test-simulators.js +333 -0
  115. package/dist/config/tool-timeout.d.ts +1 -0
  116. package/dist/config/tool-timeout.js +18 -0
  117. package/dist/core/async-context.d.ts +2 -0
  118. package/dist/core/async-context.js +12 -0
  119. package/dist/core/budget-events.d.ts +108 -0
  120. package/dist/core/budget-events.js +346 -0
  121. package/dist/core/budget-groups.d.ts +50 -1
  122. package/dist/core/budget-groups.js +236 -27
  123. package/dist/core/budget-stopped-head.d.ts +46 -0
  124. package/dist/core/budget-stopped-head.js +81 -0
  125. package/dist/core/budget-topup.d.ts +51 -0
  126. package/dist/core/budget-topup.js +156 -0
  127. package/dist/core/budget-wording.d.ts +16 -2
  128. package/dist/core/budget-wording.js +40 -2
  129. package/dist/core/coding-mcp.d.ts +36 -0
  130. package/dist/core/coding-mcp.js +253 -0
  131. package/dist/core/coding-queue.d.ts +2 -1
  132. package/dist/core/coding-queue.js +7 -0
  133. package/dist/core/coding-repository.d.ts +46 -0
  134. package/dist/core/coding-repository.js +92 -0
  135. package/dist/core/cron.d.ts +19 -1
  136. package/dist/core/cron.js +17 -0
  137. package/dist/core/datastores.js +1 -1
  138. package/dist/core/deferred-coding.d.ts +14 -0
  139. package/dist/core/deferred-coding.js +62 -0
  140. package/dist/core/delegation-child.d.ts +25 -0
  141. package/dist/core/delegation-child.js +37 -0
  142. package/dist/core/delegation-slots.d.ts +27 -0
  143. package/dist/core/delegation-slots.js +44 -0
  144. package/dist/core/dispatch.d.ts +48 -2
  145. package/dist/core/dispatch.js +166 -66
  146. package/dist/core/engine-native.js +1 -1
  147. package/dist/core/error-code.d.ts +38 -0
  148. package/dist/core/error-code.js +169 -0
  149. package/dist/core/grants.d.ts +46 -8
  150. package/dist/core/grants.js +99 -8
  151. package/dist/core/host-events.d.ts +18 -2
  152. package/dist/core/host-events.js +291 -27
  153. package/dist/core/host-status.d.ts +85 -3
  154. package/dist/core/host-status.js +300 -22
  155. package/dist/core/issue-bridge.d.ts +50 -6
  156. package/dist/core/issue-bridge.js +124 -33
  157. package/dist/core/issue-events.d.ts +1 -1
  158. package/dist/core/issue-events.js +4 -10
  159. package/dist/core/issue-status.d.ts +1 -1
  160. package/dist/core/issue-status.js +58 -29
  161. package/dist/core/logger.d.ts +5 -0
  162. package/dist/core/logger.js +14 -1
  163. package/dist/core/lost-run-children.d.ts +6 -0
  164. package/dist/core/lost-run-children.js +32 -0
  165. package/dist/core/mark-ready.d.ts +34 -0
  166. package/dist/core/mark-ready.js +152 -0
  167. package/dist/core/markdown-code.d.ts +8 -0
  168. package/dist/core/markdown-code.js +107 -0
  169. package/dist/core/mcp-client/client.d.ts +47 -0
  170. package/dist/core/mcp-client/client.js +141 -0
  171. package/dist/core/mcp-client/jsonrpc.d.ts +15 -0
  172. package/dist/core/mcp-client/jsonrpc.js +54 -0
  173. package/dist/core/mcp-client/results.d.ts +13 -0
  174. package/dist/core/mcp-client/results.js +42 -0
  175. package/dist/core/mcp-servers.d.ts +90 -0
  176. package/dist/core/mcp-servers.js +230 -0
  177. package/dist/core/mcp-tools.d.ts +108 -0
  178. package/dist/core/mcp-tools.js +287 -0
  179. package/dist/core/memory-tools.js +7 -0
  180. package/dist/core/merge-order-check.d.ts +2 -1
  181. package/dist/core/merge-order-check.js +44 -18
  182. package/dist/core/notification-dispatcher.js +2 -1
  183. package/dist/core/notification-templates.d.ts +1 -7
  184. package/dist/core/notification-templates.js +36 -2
  185. package/dist/core/pull-request-state-sync.js +2 -2
  186. package/dist/core/reconciler.d.ts +4 -3
  187. package/dist/core/reconciler.js +8 -1
  188. package/dist/core/related-pull-requests.d.ts +11 -3
  189. package/dist/core/related-pull-requests.js +49 -20
  190. package/dist/core/reply-parts.d.ts +21 -0
  191. package/dist/core/reply-parts.js +73 -0
  192. package/dist/core/review-fix.d.ts +1 -1
  193. package/dist/core/review-fix.js +4 -3
  194. package/dist/core/review-host-checks.d.ts +1 -1
  195. package/dist/core/review-host-tools.d.ts +3 -0
  196. package/dist/core/review-host-tools.js +102 -14
  197. package/dist/core/review-reads.d.ts +55 -0
  198. package/dist/core/review-reads.js +233 -0
  199. package/dist/core/run-status.d.ts +12 -0
  200. package/dist/core/run-status.js +12 -0
  201. package/dist/core/runner.d.ts +145 -49
  202. package/dist/core/runner.js +719 -216
  203. package/dist/core/schedule-start.d.ts +12 -0
  204. package/dist/core/schedule-start.js +14 -0
  205. package/dist/core/secret-broker-config.d.ts +12 -74
  206. package/dist/core/secret-broker-config.js +1 -1
  207. package/dist/core/secret-guard.d.ts +49 -0
  208. package/dist/core/secret-guard.js +119 -0
  209. package/dist/core/secret-guarded-stores.d.ts +12 -0
  210. package/dist/core/secret-guarded-stores.js +41 -0
  211. package/dist/core/secret-spans.d.ts +50 -0
  212. package/dist/core/secret-spans.js +94 -0
  213. package/dist/core/secrets.d.ts +11 -1
  214. package/dist/core/secrets.js +27 -1
  215. package/dist/core/serializable-retry.d.ts +18 -0
  216. package/dist/core/serializable-retry.js +43 -0
  217. package/dist/core/stop-run.d.ts +46 -0
  218. package/dist/core/stop-run.js +61 -0
  219. package/dist/core/tool-admin.d.ts +5 -1
  220. package/dist/core/tool-admin.js +7 -2
  221. package/dist/core/tool-names.d.ts +13 -0
  222. package/dist/core/tool-names.js +20 -0
  223. package/dist/core/webhooks.d.ts +4 -0
  224. package/dist/core/webhooks.js +68 -49
  225. package/dist/core/workflow-events.d.ts +14 -2
  226. package/dist/core/workflow-events.js +4 -0
  227. package/dist/core/workflow-run-events.d.ts +5 -3
  228. package/dist/core/workflow-run-events.js +45 -9
  229. package/dist/core/zod-json-schema.d.ts +4 -0
  230. package/dist/core/zod-json-schema.js +39 -0
  231. package/dist/core/zod3-window.d.ts +35 -0
  232. package/dist/core/zod3-window.js +124 -0
  233. package/dist/generated/prisma/browser.d.ts +65 -3
  234. package/dist/generated/prisma/client.d.ts +65 -3
  235. package/dist/generated/prisma/commonInputTypes.d.ts +266 -106
  236. package/dist/generated/prisma/enums.d.ts +10 -0
  237. package/dist/generated/prisma/enums.js +8 -0
  238. package/dist/generated/prisma/internal/class.d.ts +110 -0
  239. package/dist/generated/prisma/internal/class.js +4 -4
  240. package/dist/generated/prisma/internal/prismaNamespace.d.ts +957 -9
  241. package/dist/generated/prisma/internal/prismaNamespace.js +166 -2
  242. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +174 -0
  243. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +166 -2
  244. package/dist/generated/prisma/models/Agent.d.ts +377 -8
  245. package/dist/generated/prisma/models/AgentMcpServer.d.ts +1412 -0
  246. package/dist/generated/prisma/models/AgentMcpServer.js +1 -0
  247. package/dist/generated/prisma/models/AgentRepository.d.ts +81 -1
  248. package/dist/generated/prisma/models/AuthUser.d.ts +1 -1
  249. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +228 -7
  250. package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
  251. package/dist/generated/prisma/models/CodingProxySession.d.ts +232 -2
  252. package/dist/generated/prisma/models/CodingRun.d.ts +1712 -1
  253. package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
  254. package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
  255. package/dist/generated/prisma/models/HostProvider.d.ts +2176 -0
  256. package/dist/generated/prisma/models/HostProvider.js +1 -0
  257. package/dist/generated/prisma/models/HostProviderCredential.d.ts +1285 -0
  258. package/dist/generated/prisma/models/HostProviderCredential.js +1 -0
  259. package/dist/generated/prisma/models/HostProviderOperation.d.ts +1470 -0
  260. package/dist/generated/prisma/models/HostProviderOperation.js +1 -0
  261. package/dist/generated/prisma/models/HostProviderTrustedAccount.d.ts +1145 -0
  262. package/dist/generated/prisma/models/HostProviderTrustedAccount.js +1 -0
  263. package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
  264. package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
  265. package/dist/generated/prisma/models/McpServer.d.ts +1500 -0
  266. package/dist/generated/prisma/models/McpServer.js +1 -0
  267. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +77 -1
  268. package/dist/generated/prisma/models/NativeGatewaySession.d.ts +35 -1
  269. package/dist/generated/prisma/models/Principal.d.ts +167 -0
  270. package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
  271. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
  272. package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
  273. package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
  274. package/dist/generated/prisma/models/ResourceGrant.d.ts +1 -1
  275. package/dist/generated/prisma/models/Run.d.ts +738 -2
  276. package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
  277. package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
  278. package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
  279. package/dist/generated/prisma/models/RunTranscript.js +1 -0
  280. package/dist/generated/prisma/models/Secret.d.ts +387 -0
  281. package/dist/generated/prisma/models/Tool.d.ts +223 -1
  282. package/dist/generated/prisma/models.d.ts +10 -0
  283. package/dist/help/search.js +12 -3
  284. package/dist/help-index.json +2033 -110
  285. package/dist/import/create.js +48 -4
  286. package/dist/import/neutral-schema.d.ts +51 -281
  287. package/dist/import/neutral-schema.js +7 -4
  288. package/dist/knowledge/check.d.ts +1 -1
  289. package/dist/knowledge/cli.d.ts +11 -1
  290. package/dist/knowledge/cli.js +37 -4
  291. package/dist/knowledge/concept.d.ts +3 -19
  292. package/dist/knowledge/location.d.ts +31 -0
  293. package/dist/knowledge/location.js +78 -0
  294. package/dist/mcp/auth/access.d.ts +10 -2
  295. package/dist/mcp/auth/access.js +15 -1
  296. package/dist/mcp/auth/grants-cli.d.ts +6 -4
  297. package/dist/mcp/auth/grants-cli.js +42 -3
  298. package/dist/mcp/auth/ownership.d.ts +7 -7
  299. package/dist/mcp/auth/resource-server.d.ts +3 -1
  300. package/dist/mcp/auth/resource-server.js +17 -2
  301. package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
  302. package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
  303. package/dist/mcp/context.d.ts +3 -0
  304. package/dist/mcp/host-events/github-ingress.d.ts +2 -0
  305. package/dist/mcp/host-events/github-ingress.js +2 -1
  306. package/dist/mcp/index.d.ts +6 -0
  307. package/dist/mcp/index.js +69 -10
  308. package/dist/mcp/server.d.ts +13 -0
  309. package/dist/mcp/server.js +33 -14
  310. package/dist/mcp/tools/agents.d.ts +4 -0
  311. package/dist/mcp/tools/agents.js +295 -28
  312. package/dist/mcp/tools/datastore.js +17 -8
  313. package/dist/mcp/tools/grants.js +73 -29
  314. package/dist/mcp/tools/host-providers.d.ts +2 -0
  315. package/dist/mcp/tools/host-providers.js +215 -0
  316. package/dist/mcp/tools/mcp-servers.d.ts +26 -0
  317. package/dist/mcp/tools/mcp-servers.js +481 -0
  318. package/dist/mcp/tools/memory.js +11 -1
  319. package/dist/mcp/tools/notification-channels.js +2 -2
  320. package/dist/mcp/tools/packages.d.ts +2 -0
  321. package/dist/mcp/tools/packages.js +195 -0
  322. package/dist/mcp/tools/repositories.js +65 -12
  323. package/dist/mcp/tools/run-access.d.ts +16 -0
  324. package/dist/mcp/tools/run-access.js +25 -0
  325. package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
  326. package/dist/mcp/tools/run-transcript-download.js +129 -0
  327. package/dist/mcp/tools/run-transcript.d.ts +19 -0
  328. package/dist/mcp/tools/run-transcript.js +70 -0
  329. package/dist/mcp/tools/runs.js +209 -27
  330. package/dist/mcp/tools/scheduling.js +3 -1
  331. package/dist/mcp/tools/secret-elicitation-form.js +5 -0
  332. package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
  333. package/dist/mcp/tools/secret-elicitation-server.js +10 -61
  334. package/dist/mcp/tools/secret-elicitation.d.ts +2 -0
  335. package/dist/mcp/tools/secret-elicitation.js +25 -2
  336. package/dist/mcp/tools/secrets.js +40 -6
  337. package/dist/mcp/tools/stop-run.d.ts +2 -0
  338. package/dist/mcp/tools/stop-run.js +82 -0
  339. package/dist/mcp/tools/subagents.js +2 -2
  340. package/dist/mcp/tools/tools.d.ts +7 -5
  341. package/dist/mcp/tools/tools.js +64 -16
  342. package/dist/mcp/tools/trigger.js +28 -6
  343. package/dist/mcp/transport/http-limits.d.ts +2 -0
  344. package/dist/mcp/transport/http-limits.js +6 -2
  345. package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
  346. package/dist/mcp/transport/stdio-link-host.js +67 -0
  347. package/dist/mcp/transport/streamable-http.d.ts +13 -0
  348. package/dist/mcp/transport/streamable-http.js +41 -1
  349. package/dist/mcp/webhooks/ingress.js +10 -0
  350. package/dist/native-worker/docker-launcher.d.ts +38 -2
  351. package/dist/native-worker/docker-launcher.js +65 -5
  352. package/dist/native-worker/gateway-server.d.ts +55 -3
  353. package/dist/native-worker/gateway-server.js +152 -34
  354. package/dist/native-worker/gateway.d.ts +29 -1
  355. package/dist/native-worker/gateway.js +74 -4
  356. package/dist/native-worker/http-server.d.ts +7 -1
  357. package/dist/native-worker/http-server.js +62 -7
  358. package/dist/native-worker/http-transport.js +1 -1
  359. package/dist/native-worker/kubernetes-launcher.d.ts +7 -3
  360. package/dist/native-worker/kubernetes-launcher.js +43 -3
  361. package/dist/native-worker/launch.d.ts +18 -1
  362. package/dist/native-worker/launch.js +6 -1
  363. package/dist/native-worker/ledger.d.ts +24 -4
  364. package/dist/native-worker/ledger.js +62 -8
  365. package/dist/native-worker/loopback.js +3 -8
  366. package/dist/native-worker/main.d.ts +2 -1
  367. package/dist/native-worker/main.js +14 -3
  368. package/dist/native-worker/protocol.d.ts +130 -577
  369. package/dist/native-worker/protocol.js +51 -2
  370. package/dist/native-worker/sandbox-executor.d.ts +17 -2
  371. package/dist/native-worker/sandbox-executor.js +78 -4
  372. package/dist/native-worker/stderr-redaction.d.ts +77 -0
  373. package/dist/native-worker/stderr-redaction.js +237 -0
  374. package/dist/native-worker/stdio.d.ts +1 -1
  375. package/dist/native-worker/stdio.js +6 -5
  376. package/dist/native-worker/warm-pool.d.ts +2 -2
  377. package/dist/native-worker/warm-pool.js +4 -4
  378. package/dist/native-worker/worker.js +28 -2
  379. package/dist/observability/metrics.js +6 -1
  380. package/dist/providers/auth/self-hosted.d.ts +1 -1
  381. package/dist/providers/coding-proxy/capability-hash.d.ts +2 -0
  382. package/dist/providers/coding-proxy/capability-hash.js +5 -0
  383. package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
  384. package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
  385. package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
  386. package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
  387. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
  388. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
  389. package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
  390. package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
  391. package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
  392. package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
  393. package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
  394. package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
  395. package/dist/providers/coding-proxy/hold.d.ts +32 -0
  396. package/dist/providers/coding-proxy/hold.js +86 -0
  397. package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
  398. package/dist/providers/coding-proxy/interrupted.js +104 -0
  399. package/dist/providers/coding-proxy/mcp-route.d.ts +34 -0
  400. package/dist/providers/coding-proxy/mcp-route.js +166 -0
  401. package/dist/providers/coding-proxy/memory-ledger.d.ts +17 -2
  402. package/dist/providers/coding-proxy/memory-ledger.js +99 -8
  403. package/dist/providers/coding-proxy/metering.d.ts +16 -0
  404. package/dist/providers/coding-proxy/metering.js +27 -4
  405. package/dist/providers/coding-proxy/prisma-ledger.d.ts +16 -2
  406. package/dist/providers/coding-proxy/prisma-ledger.js +209 -69
  407. package/dist/providers/coding-proxy/proxy.d.ts +21 -2
  408. package/dist/providers/coding-proxy/proxy.js +300 -48
  409. package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
  410. package/dist/providers/coding-proxy/registry/audit.js +94 -17
  411. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
  412. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
  413. package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
  414. package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
  415. package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
  416. package/dist/providers/coding-proxy/registry/plan.js +201 -48
  417. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
  418. package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
  419. package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
  420. package/dist/providers/coding-proxy/registry/service.js +579 -112
  421. package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
  422. package/dist/providers/coding-proxy/registry/store.js +54 -1
  423. package/dist/providers/coding-proxy/runtime.d.ts +10 -0
  424. package/dist/providers/coding-proxy/runtime.js +109 -16
  425. package/dist/providers/coding-proxy/server.d.ts +9 -1
  426. package/dist/providers/coding-proxy/server.js +55 -1
  427. package/dist/providers/coding-proxy/types.d.ts +78 -1
  428. package/dist/providers/datastore/types.d.ts +5 -0
  429. package/dist/providers/engine/types.d.ts +17 -2
  430. package/dist/providers/engine/types.js +17 -0
  431. package/dist/providers/executor/composition.d.ts +10 -3
  432. package/dist/providers/executor/composition.js +52 -7
  433. package/dist/providers/executor/container.d.ts +394 -9
  434. package/dist/providers/executor/container.js +1210 -96
  435. package/dist/providers/executor/dbos-status.d.ts +31 -0
  436. package/dist/providers/executor/dbos-status.js +64 -0
  437. package/dist/providers/executor/dbos.d.ts +50 -1
  438. package/dist/providers/executor/dbos.js +207 -20
  439. package/dist/providers/executor/deferred.d.ts +12 -24
  440. package/dist/providers/executor/deferred.js +10 -29
  441. package/dist/providers/executor/in-process.d.ts +9 -1
  442. package/dist/providers/executor/in-process.js +14 -4
  443. package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
  444. package/dist/providers/executor/linked-issue-reader.js +30 -0
  445. package/dist/providers/executor/routing.d.ts +2 -0
  446. package/dist/providers/executor/routing.js +4 -0
  447. package/dist/providers/executor/types.d.ts +13 -0
  448. package/dist/providers/host-tools/invoke.d.ts +37 -0
  449. package/dist/providers/host-tools/invoke.js +117 -0
  450. package/dist/providers/host-tools/operations.d.ts +65 -0
  451. package/dist/providers/host-tools/operations.js +149 -0
  452. package/dist/providers/host-tools/registry.d.ts +79 -0
  453. package/dist/providers/host-tools/registry.js +362 -0
  454. package/dist/providers/host-tools/request-guard.d.ts +17 -0
  455. package/dist/providers/host-tools/request-guard.js +99 -0
  456. package/dist/providers/host-tools/self-test.d.ts +64 -0
  457. package/dist/providers/host-tools/self-test.js +142 -0
  458. package/dist/providers/index.d.ts +2 -1
  459. package/dist/providers/issue-tracker/types.d.ts +17 -0
  460. package/dist/providers/issue-tracker/types.js +39 -1
  461. package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
  462. package/dist/providers/jobs/claude-tool-setup.js +5 -2
  463. package/dist/providers/jobs/docker-isolation.d.ts +10 -2
  464. package/dist/providers/jobs/docker-isolation.js +47 -8
  465. package/dist/providers/jobs/docker.d.ts +9 -0
  466. package/dist/providers/jobs/docker.js +60 -11
  467. package/dist/providers/jobs/fake-kubernetes-api.d.ts +2 -0
  468. package/dist/providers/jobs/fake-kubernetes-api.js +3 -0
  469. package/dist/providers/jobs/kubernetes-api.d.ts +8 -0
  470. package/dist/providers/jobs/kubernetes-api.js +10 -0
  471. package/dist/providers/jobs/kubernetes-client.js +10 -1
  472. package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
  473. package/dist/providers/jobs/kubernetes-isolation.js +32 -3
  474. package/dist/providers/jobs/kubernetes.d.ts +11 -1
  475. package/dist/providers/jobs/kubernetes.js +111 -17
  476. package/dist/providers/jobs/types.d.ts +39 -0
  477. package/dist/providers/jobs/types.js +13 -1
  478. package/dist/providers/llm/anthropic.js +5 -1
  479. package/dist/providers/llm/bedrock.d.ts +0 -12
  480. package/dist/providers/llm/bedrock.js +4 -0
  481. package/dist/providers/llm/claude-messages.d.ts +3 -1
  482. package/dist/providers/llm/claude-messages.js +4 -1
  483. package/dist/providers/llm/claude-provider.d.ts +2 -2
  484. package/dist/providers/llm/claude-provider.js +2 -2
  485. package/dist/providers/llm/openai.d.ts +2 -2
  486. package/dist/providers/llm/openai.js +6 -2
  487. package/dist/providers/llm/routing.d.ts +2 -2
  488. package/dist/providers/llm/routing.js +2 -2
  489. package/dist/providers/llm/types.d.ts +12 -2
  490. package/dist/providers/review-host/github-events.d.ts +9 -1
  491. package/dist/providers/review-host/github-events.js +34 -12
  492. package/dist/providers/review-host/github.d.ts +29 -2
  493. package/dist/providers/review-host/github.js +224 -29
  494. package/dist/providers/review-host/local.d.ts +8 -4
  495. package/dist/providers/review-host/local.js +49 -31
  496. package/dist/providers/review-host/patch-pages.d.ts +41 -0
  497. package/dist/providers/review-host/patch-pages.js +176 -0
  498. package/dist/providers/review-host/review-format.d.ts +19 -1
  499. package/dist/providers/review-host/review-format.js +38 -7
  500. package/dist/providers/review-host/types.d.ts +140 -6
  501. package/dist/providers/review-host/types.js +9 -1
  502. package/dist/providers/storage/gcs.d.ts +63 -0
  503. package/dist/providers/storage/gcs.js +69 -0
  504. package/dist/providers/storage/index.d.ts +15 -0
  505. package/dist/providers/storage/index.js +14 -0
  506. package/dist/providers/storage/local.d.ts +24 -0
  507. package/dist/providers/storage/local.js +92 -0
  508. package/dist/providers/storage/meter.d.ts +14 -0
  509. package/dist/providers/storage/meter.js +34 -0
  510. package/dist/providers/storage/s3.d.ts +41 -0
  511. package/dist/providers/storage/s3.js +107 -0
  512. package/dist/providers/storage/types.d.ts +37 -3
  513. package/dist/providers/storage/types.js +21 -4
  514. package/dist/providers/vcs/git.d.ts +39 -4
  515. package/dist/providers/vcs/git.js +339 -26
  516. package/dist/providers/vcs/github-remote.d.ts +26 -3
  517. package/dist/providers/vcs/github-remote.js +124 -14
  518. package/dist/providers/vcs/github.d.ts +183 -44
  519. package/dist/providers/vcs/github.js +455 -56
  520. package/dist/providers/vcs/index.d.ts +1 -1
  521. package/dist/providers/vcs/index.js +9 -2
  522. package/dist/providers/vcs/pr-description.d.ts +127 -0
  523. package/dist/providers/vcs/pr-description.js +270 -0
  524. package/dist/providers/vcs/remote.d.ts +37 -1
  525. package/dist/providers/vcs/remote.js +7 -1
  526. package/dist/providers/vcs/routing.d.ts +16 -8
  527. package/dist/providers/vcs/routing.js +27 -6
  528. package/dist/providers/vcs/types.d.ts +150 -5
  529. package/dist/quickstart/coding-seed.d.ts +14 -3
  530. package/dist/quickstart/coding-seed.js +213 -4
  531. package/dist/quickstart/index.d.ts +5 -0
  532. package/dist/quickstart/index.js +21 -0
  533. package/dist/quickstart/reviewer-prompt.d.ts +1 -1
  534. package/dist/quickstart/reviewer-prompt.js +6 -6
  535. package/dist/quickstart-images.json +1 -1
  536. package/dist/sandbox/eval-core.d.ts +12 -2
  537. package/dist/sandbox/eval-core.js +20 -4
  538. package/dist/sandbox/generated/zod.bundle.js +62 -1
  539. package/dist/sandbox/generated/zod3.bundle.js +5 -0
  540. package/dist/sandbox/host-functions.d.ts +5 -0
  541. package/dist/sandbox/host-functions.js +13 -13
  542. package/dist/sandbox/limits.d.ts +4 -1
  543. package/dist/sandbox/limits.js +4 -1
  544. package/dist/sandbox/run-in-sandbox.d.ts +6 -0
  545. package/dist/sandbox/run-in-sandbox.js +14 -2
  546. package/dist/sandbox/safe-fetch.d.ts +2 -0
  547. package/dist/sandbox/safe-fetch.js +1 -1
  548. package/dist/sandbox/secret-broker.d.ts +1 -0
  549. package/dist/sandbox/secret-broker.js +4 -5
  550. package/dist/sandbox/tool-capabilities.d.ts +10 -30
  551. package/dist/sandbox/tool-timeout.d.ts +32 -0
  552. package/dist/sandbox/tool-timeout.js +52 -0
  553. package/dist/sandbox/user-tool.d.ts +8 -1
  554. package/dist/sandbox/user-tool.js +9 -3
  555. package/dist/sandbox/zod-params.d.ts +37 -5
  556. package/dist/sandbox/zod-params.js +181 -26
  557. package/dist/serve.js +8 -1
  558. package/dist/viewer/api-schema.d.ts +349 -2627
  559. package/dist/viewer/api-schema.js +7 -0
  560. package/dist/viewer/build-schemas.js +6 -2
  561. package/dist/viewer/graph.js +2 -1
  562. package/dist/viewer/openapi.js +2 -4
  563. package/dist/wardby-bin.js +15 -0
  564. package/docs/README.md +11 -1
  565. package/docs/agent-recipes.md +95 -24
  566. package/docs/architecture-runtime.md +1 -1
  567. package/docs/claude-code-plugin.md +164 -0
  568. package/docs/code-review-agents.md +557 -41
  569. package/docs/coding-agent-setup.md +566 -8
  570. package/docs/coding-packages.md +1033 -90
  571. package/docs/coding-services.md +27 -12
  572. package/docs/coding-worker-byo-images.md +24 -2
  573. package/docs/coding-worker-isolation.md +183 -37
  574. package/docs/debugging-agent-runs.md +242 -0
  575. package/docs/getting-started-gke.md +129 -141
  576. package/docs/getting-started-identity-provider.md +53 -38
  577. package/docs/getting-started.md +17 -0
  578. package/docs/host-providers.md +294 -0
  579. package/docs/jira-agents.md +17 -8
  580. package/docs/knowledge/blob-not-found-semantics.md +41 -0
  581. package/docs/knowledge/bounded-file-descriptor.md +52 -0
  582. package/docs/knowledge/delegation-admission-slots.md +52 -0
  583. package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
  584. package/docs/knowledge/import-rename-target.md +52 -0
  585. package/docs/knowledge/index.md +57 -0
  586. package/docs/knowledge/log.md +9 -0
  587. package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
  588. package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
  589. package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
  590. package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
  591. package/docs/knowledge/overview-cli.md +74 -0
  592. package/docs/knowledge/overview-coding-proxy.md +72 -0
  593. package/docs/knowledge/overview-coding.md +72 -0
  594. package/docs/knowledge/overview-config.md +60 -0
  595. package/docs/knowledge/overview-core.md +72 -0
  596. package/docs/knowledge/overview-deploy.md +83 -0
  597. package/docs/knowledge/overview-mcp.md +61 -0
  598. package/docs/knowledge/overview-prisma.md +72 -0
  599. package/docs/knowledge/overview-providers.md +89 -0
  600. package/docs/knowledge/overview-sandbox.md +83 -0
  601. package/docs/knowledge/overview-surfaces.md +83 -0
  602. package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
  603. package/docs/knowledge/proxy-settlement-projections.md +41 -0
  604. package/docs/knowledge/run-pricing-first-writer.md +43 -0
  605. package/docs/knowledge/schedule-claim-transaction.md +41 -0
  606. package/docs/knowledge/secret-entry-replica-contract.md +52 -0
  607. package/docs/knowledge/terminal-run-first-writer.md +41 -0
  608. package/docs/knowledge/transactional-agent-authorization.md +52 -0
  609. package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
  610. package/docs/knowledge/warm-input-publication.md +30 -0
  611. package/docs/knowledge/workspace-staging-failure.md +54 -0
  612. package/docs/knowledge.md +54 -14
  613. package/docs/mcp-servers.md +254 -0
  614. package/docs/native-sandbox.md +143 -31
  615. package/docs/observability.md +4 -0
  616. package/docs/security-deployment.md +139 -29
  617. package/docs/slack-notifications.md +35 -19
  618. package/docs/tool-secrets.md +45 -10
  619. package/docs/viewer-api.md +6 -0
  620. package/docs/viewer-api.openapi.yml +1 -1
  621. package/help/admin-viewer.md +28 -2
  622. package/help/agent-recipes.md +33 -2
  623. package/help/architecture-agent.md +11 -6
  624. package/help/brokered-secrets.md +3 -0
  625. package/help/build-claude-code-image.md +1 -1
  626. package/help/build-worker-image.md +3 -1
  627. package/help/builder-agent.md +19 -6
  628. package/help/claude-code-run-pane.md +40 -0
  629. package/help/code-review-agents.md +177 -6
  630. package/help/coding-packages.md +156 -6
  631. package/help/cost-attribution.md +9 -5
  632. package/help/creating-agents.md +14 -1
  633. package/help/dependency-cache.md +143 -0
  634. package/help/deploy-gke.md +15 -8
  635. package/help/errors/budget-exhausted.md +187 -0
  636. package/help/errors/budget-group-exhausted.md +5 -1
  637. package/help/errors/coding-mcp-pins-unavailable.md +35 -0
  638. package/help/errors/coding-stream-quota-exceeded.md +33 -0
  639. package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
  640. package/help/errors/continuation-closed.md +9 -12
  641. package/help/errors/database-auth-invalid.md +1 -1
  642. package/help/errors/delegation-conflict.md +24 -0
  643. package/help/errors/file-list-truncated.md +45 -0
  644. package/help/errors/full-read-required.md +49 -0
  645. package/help/errors/github-account-not-allowed.md +4 -0
  646. package/help/errors/graph-incomplete.md +43 -0
  647. package/help/errors/graph-limit.md +43 -0
  648. package/help/errors/host-provider-error.md +40 -0
  649. package/help/errors/host-tool-failed.md +36 -0
  650. package/help/errors/mcp-call-limit.md +22 -0
  651. package/help/errors/mcp-call-timeout.md +22 -0
  652. package/help/errors/mcp-server-auth-failed.md +22 -0
  653. package/help/errors/mcp-server-credentials-unavailable.md +45 -0
  654. package/help/errors/mcp-server-error.md +28 -0
  655. package/help/errors/mcp-server-unreachable.md +22 -0
  656. package/help/errors/mcp-servers-off.md +21 -0
  657. package/help/errors/mcp-tool-not-allowed.md +26 -0
  658. package/help/errors/mcp-tool-removed.md +22 -0
  659. package/help/errors/mcp-unavailable.md +25 -0
  660. package/help/errors/merge-conflict.md +49 -0
  661. package/help/errors/native-sandbox-capacity.md +1 -1
  662. package/help/errors/native-sandbox-deadline-exceeded.md +1 -1
  663. package/help/errors/native-sandbox-docker-failed.md +1 -1
  664. package/help/errors/native-sandbox-gateway-error.md +20 -0
  665. package/help/errors/native-sandbox-gateway-unavailable.md +1 -1
  666. package/help/errors/native-sandbox-image-not-pinned.md +1 -1
  667. package/help/errors/native-sandbox-isolation-mismatch.md +1 -1
  668. package/help/errors/native-sandbox-launch-abandoned.md +21 -0
  669. package/help/errors/native-sandbox-network-unenforced.md +1 -1
  670. package/help/errors/native-sandbox-requires-catalog.md +1 -1
  671. package/help/errors/native-sandbox-unavailable.md +1 -1
  672. package/help/errors/native-sandbox-warm-delivery-failed.md +1 -1
  673. package/help/errors/native-sandbox-worker-exited.md +4 -3
  674. package/help/errors/native-sandbox-worker-lost.md +1 -1
  675. package/help/errors/native-sandbox-worker-unready.md +1 -1
  676. package/help/errors/package-not-allowed-pending.md +52 -0
  677. package/help/errors/package-not-allowed.md +51 -0
  678. package/help/errors/package-refusals.md +43 -0
  679. package/help/errors/patch-cursor-malformed.md +31 -0
  680. package/help/errors/repository-not-listed.md +36 -0
  681. package/help/errors/repository-required.md +36 -0
  682. package/help/errors/run-lost.md +39 -0
  683. package/help/errors/run-transcript-download.md +44 -0
  684. package/help/errors/secret-in-value.md +69 -0
  685. package/help/errors/target-merge.md +40 -0
  686. package/help/errors/tool-timeout.md +38 -0
  687. package/help/fix-merge-conflicts.md +73 -0
  688. package/help/github-app-setup.md +132 -0
  689. package/help/github.md +22 -0
  690. package/help/host-providers.md +40 -0
  691. package/help/identity-and-access.md +6 -1
  692. package/help/jira.md +23 -6
  693. package/help/knowledge.md +16 -7
  694. package/help/local-repositories.md +1 -1
  695. package/help/low-power-mode.md +7 -1
  696. package/help/mcp-servers.md +73 -0
  697. package/help/mcp.md +7 -2
  698. package/help/merge-order-check.md +5 -0
  699. package/help/native-capabilities.md +55 -1
  700. package/help/native-sandbox.md +16 -2
  701. package/help/operating-agents.md +21 -0
  702. package/help/package-audit-mode.md +91 -0
  703. package/help/related-pull-requests.md +17 -10
  704. package/help/repo-instructions-and-skills.md +3 -1
  705. package/help/resume-runs-locally.md +134 -0
  706. package/help/review-fix-rounds.md +33 -1
  707. package/help/sharing-agents.md +59 -0
  708. package/help/slack-notifications.md +19 -5
  709. package/help/status-comments.md +31 -0
  710. package/help/stop-run.md +58 -0
  711. package/help/troubleshooting/budgets.md +28 -0
  712. package/help/troubleshooting/coding-workers.md +86 -7
  713. package/help/troubleshooting/debugging-agent-runs.md +29 -0
  714. package/package.json +18 -10
  715. package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
  716. package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
  717. package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
  718. package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
  719. package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
  720. package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
  721. package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
  722. package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
  723. package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
  724. package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
  725. package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
  726. package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
  727. package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
  728. package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
  729. package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
  730. package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
  731. package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
  732. package/prisma/migrations/20261102000000_host_providers/migration.sql +56 -0
  733. package/prisma/migrations/20261104000000_coding_agent_repository_list/migration.sql +5 -0
  734. package/prisma/migrations/20261106000000_tool_timeout/migration.sql +4 -0
  735. package/prisma/migrations/20261107000000_mcp_servers/migration.sql +33 -0
  736. package/prisma/migrations/20261108000000_coding_mcp/migration.sql +5 -0
  737. package/prisma/migrations/20261109000000_task_run_index/migration.sql +3 -0
  738. package/prisma/schema.prisma +468 -109
  739. package/scripts/git-askpass.sh +1 -1
  740. package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
@@ -1,5 +1,7 @@
1
- import { CODING_PROTOCOL_VERSION, CodingTaskInputSchema, normalizeGitHubRepository, normalizeGitRef, publicCodingRunResult, composeCodingTask, } from "../coding/protocol.js";
1
+ import { normalizeHostedRepository } from "../coding/code-host.js";
2
+ import { CODING_PROTOCOL_VERSION, CodingTaskInputSchema, normalizeGitRef, publicCodingRunResult, composeCodingTask, } from "../coding/protocol.js";
2
3
  import { assertCodingProvider, assertCodingProviderModel } from "../coding/provider.js";
4
+ import { isPackageAuditActive } from "../coding/registry/audit-mode.js";
3
5
  import { ModelUnavailableError, entryOf } from "../providers/llm/catalog-types.js";
4
6
  import { parseAllowedServiceNames, workerServices } from "../coding/services/catalog.js";
5
7
  import { MAX_SERVICE_DECLARATION_BYTES, ServiceDeclarationError, parseServiceDeclaration, } from "../coding/services/declaration.js";
@@ -7,11 +9,12 @@ import { servicesInstructionNote } from "../coding/services/note.js";
7
9
  import { resolveRunServices } from "../coding/services/resolve.js";
8
10
  import { DECLARATION_UNAVAILABLE_SENTENCE, LAUNCHER_UNSUPPORTED_SENTENCE, invalidDeclarationSentence, serviceRefusal, } from "../coding/services/wording.js";
9
11
  import { attributeRun } from "./attribution.js";
10
- import { effectiveBudgetForRun, MIN_RESERVATION_USD } from "./budget-groups.js";
11
- import { DEFAULT_KNOWLEDGE_BUNDLE_PATH } from "../knowledge/concept.js";
12
+ import { effectiveBudgetForRun, MIN_RESERVATION_USD, } from "./budget-groups.js";
13
+ import { KNOWLEDGE_CONFIG_MAX_BYTES, KNOWLEDGE_CONFIG_PATH, resolveKnowledgeLocation } from "../knowledge/location.js";
12
14
  import { KNOWLEDGE_INDEX_READ_MAX_BYTES, knowledgeSection } from "../knowledge/note.js";
13
15
  import { logger } from "./logger.js";
14
16
  import { CodingModelProviderMismatchError, resolveCodingEntry } from "./run-pricing.js";
17
+ import { resolveCodingRepository, } from "./coding-repository.js";
15
18
  import { CONTENDED_TX_MAX_WAIT_MS } from "./timing.js";
16
19
  import { fileSelfDefectForRun } from "./self-defects.js";
17
20
  const dispatchLog = logger.child({ module: "dispatch" });
@@ -107,21 +110,45 @@ export function budgetExhaustedError(constraint) {
107
110
  * agents to groups is not blocked. It serializes grouped coding dispatches
108
111
  * across all groups; each holds it only for one short transaction.
109
112
  */
110
- const GROUP_DISPATCH_LOCK_SQL = 'LOCK TABLE "BudgetGroup" IN SHARE ROW EXCLUSIVE MODE';
113
+ export const GROUP_DISPATCH_LOCK_SQL = 'LOCK TABLE "BudgetGroup" IN SHARE ROW EXCLUSIVE MODE';
114
+ /** Rounded down to CodingRun's 6 decimal places. */
115
+ function floorToMicroUsd(usd) {
116
+ return Math.floor(usd / MIN_RESERVATION_USD) * MIN_RESERVATION_USD;
117
+ }
111
118
  /**
112
- * A coding run's budget reservation: the requested ceiling (override or the
119
+ * A coding run's budget reservation: the requested base (override or the
113
120
  * agent's budgetUsd) tightened by its budget group and run tree, where every
114
- * live in-flight run's unspent hold already counts as spent. Rounded down to
115
- * CodingRun.budgetReservedUsd's 6 decimal places; less than that is refused.
121
+ * live in-flight run's unspent hold already counts as spent. Only the base is
122
+ * reserved (CodingRun.budgetReservedUsd, and budgetBaseUsd beside it). The
123
+ * agent's allowedOverrunPercent raises the requested base to the run's limit
124
+ * (CodingRun.budgetLimitUsd), which is never reserved: the run may spend past
125
+ * its base only through top-ups its group and run tree have room for when it
126
+ * needs them (budget-topup.ts). Rounded down to 6 decimal places; a base less
127
+ * than that is refused.
116
128
  */
117
129
  async function reserveCodingBudget(tx, agent, now, options) {
130
+ const overrunPercent = agent.allowedOverrunPercent;
118
131
  const effective = await effectiveBudgetForRun(tx, agent, now, options.parentRunId);
119
132
  const requested = options.budgetUsdOverride ?? Number(agent.budgetUsd);
120
- const budgetUsd = Math.floor(Math.min(requested, effective.effectiveBudgetUsd) / MIN_RESERVATION_USD) * MIN_RESERVATION_USD;
121
- if (budgetUsd < MIN_RESERVATION_USD && effective.exhaustedBy) {
122
- return { budgetUsd: 0, refusal: budgetExhaustedError(effective.exhaustedBy) };
133
+ const baseBudgetUsd = floorToMicroUsd(Math.min(requested, effective.effectiveBudgetUsd));
134
+ if (baseBudgetUsd < MIN_RESERVATION_USD && effective.exhaustedBy) {
135
+ return {
136
+ budgetUsd: 0,
137
+ baseBudgetUsd: 0,
138
+ limitUsd: null,
139
+ refusal: budgetExhaustedError(effective.exhaustedBy),
140
+ ...(effective.exhaustedDetail
141
+ ? { refusalDetail: { limit: effective.exhaustedBy, detail: effective.exhaustedDetail } }
142
+ : {}),
143
+ };
123
144
  }
124
- return { budgetUsd };
145
+ const limitUsd = overrunPercent > 0 ? floorToMicroUsd((requested * (100 + overrunPercent)) / 100) : null;
146
+ return {
147
+ budgetUsd: baseBudgetUsd,
148
+ baseBudgetUsd,
149
+ limitUsd: limitUsd !== null && limitUsd > baseBudgetUsd ? limitUsd : null,
150
+ ...(effective.limitedBy ? { limitedBy: effective.limitedBy } : {}),
151
+ };
125
152
  }
126
153
  /**
127
154
  * Attempts for the persist transaction, and the jittered backoff between
@@ -180,7 +207,7 @@ export async function checkContinuation(reader, runId, repository, dispatchingOw
180
207
  : candidate;
181
208
  if (!root)
182
209
  return { ok: false, reason: "unknown_run" };
183
- if (normalizeGitHubRepository(root.repository) !== normalizeGitHubRepository(repository)) {
210
+ if (normalizeHostedRepository(root.repository) !== normalizeHostedRepository(repository)) {
184
211
  return { ok: false, reason: "other_repository" };
185
212
  }
186
213
  const rootResult = publicCodingRunResult(root.result);
@@ -206,6 +233,15 @@ export async function checkContinuation(reader, runId, repository, dispatchingOw
206
233
  },
207
234
  };
208
235
  }
236
+ function codingTarget(reader, options, profile) {
237
+ return resolveCodingRepository(reader, {
238
+ agentId: options.agentId,
239
+ profile,
240
+ requested: options.codingRepository,
241
+ continuesCodingRunId: options.continuesCodingRunId,
242
+ requireExplicit: options.requireExplicitRepository,
243
+ });
244
+ }
209
245
  /**
210
246
  * Resolves a coding run's branch: an override, else a continuation root's
211
247
  * (see checkContinuation), else the profile's base.
@@ -269,30 +305,49 @@ const UNREADABLE_DECLARATION = {
269
305
  };
270
306
  /**
271
307
  * The knowledge note's input (docs/knowledge.md): the repository's bundle
272
- * index at the run's base, read before the transaction like the services
308
+ * index at the run's base (in the folder .wardby/knowledge.yaml names, else
309
+ * docs/knowledge/), read before the transaction like the services
273
310
  * declaration. Any failure means no note, never a failed dispatch.
274
311
  */
275
312
  async function readKnowledgeIndex(options, profile, resolvedBranch, ownerId) {
276
- const executor = options.executor;
277
- if (!executor.readCodingRepositoryFile)
313
+ if (!options.executor.readCodingRepositoryFile)
278
314
  return undefined;
315
+ let baseRef;
279
316
  try {
280
317
  // Resolved here, inside the try: a branch problem is the transaction's to report, not the note's.
281
- const branch = resolvedBranch ?? (await resolveCodingBranch(options.db, options, profile, ownerId));
282
- const indexText = await executor.readCodingRepositoryFile({
283
- repository: profile.repository,
284
- baseRef: normalizeGitRef(branch.baseRef),
285
- path: `${DEFAULT_KNOWLEDGE_BUNDLE_PATH}/index.md`,
318
+ baseRef = (resolvedBranch ?? (await resolveCodingBranch(options.db, options, profile, ownerId))).baseRef;
319
+ }
320
+ catch (err) {
321
+ dispatchLog.warn({ err, repository: profile.repository }, "knowledge index read failed; dispatching without it");
322
+ return undefined;
323
+ }
324
+ return readKnowledgeIndexAt(options.executor, profile.repository, baseRef);
325
+ }
326
+ /** The bundle index at a known base ref; also how a deferred coding run reads it when it starts. */
327
+ export async function readKnowledgeIndexAt(executor, repository, baseRef) {
328
+ const readFile = executor.readCodingRepositoryFile?.bind(executor);
329
+ if (!readFile)
330
+ return undefined;
331
+ const ref = normalizeGitRef(baseRef);
332
+ // The repository may name its bundle folder in .wardby/knowledge.yaml; anything wrong with that file falls back to the default.
333
+ const { bundlePath, warning } = await resolveKnowledgeLocation(() => readFile({ repository, baseRef: ref, path: KNOWLEDGE_CONFIG_PATH, maxBytes: KNOWLEDGE_CONFIG_MAX_BYTES }));
334
+ if (warning)
335
+ dispatchLog.warn({ repository, baseRef: ref }, warning);
336
+ try {
337
+ const indexText = await readFile({
338
+ repository,
339
+ baseRef: ref,
340
+ path: `${bundlePath}/index.md`,
286
341
  maxBytes: KNOWLEDGE_INDEX_READ_MAX_BYTES,
287
342
  });
288
- return indexText ? { bundlePath: DEFAULT_KNOWLEDGE_BUNDLE_PATH, indexText } : undefined;
343
+ return indexText ? { bundlePath, indexText } : undefined;
289
344
  }
290
345
  catch (err) {
291
346
  if (err instanceof Error && err.message in UNREADABLE_DECLARATION) {
292
- dispatchLog.info({ repository: profile.repository, reason: err.message }, "knowledge index unreadable; dispatching without it");
347
+ dispatchLog.info({ repository, reason: err.message }, "knowledge index unreadable; dispatching without it");
293
348
  return undefined;
294
349
  }
295
- dispatchLog.warn({ err, repository: profile.repository }, "knowledge index read failed; dispatching without it");
350
+ dispatchLog.warn({ err, repository }, "knowledge index read failed; dispatching without it");
296
351
  return undefined;
297
352
  }
298
353
  }
@@ -304,56 +359,54 @@ async function readKnowledgeIndex(options, profile, resolvedBranch, ownerId) {
304
359
  */
305
360
  async function readServiceDeclaration(options, profile, ownerId) {
306
361
  const branch = await resolveCodingBranch(options.db, options, profile, ownerId);
307
- const read = { repository: profile.repository, profileBaseRef: profile.baseRef, branch };
308
- const executor = options.executor;
362
+ return {
363
+ repository: profile.repository,
364
+ profileBaseRef: profile.baseRef,
365
+ branch,
366
+ outcome: await readServiceDeclarationAt(options.executor, profile.repository, branch.baseRef),
367
+ };
368
+ }
369
+ /** The declaration at a known base ref, parsed; also how a deferred coding run reads it when it starts. */
370
+ export async function readServiceDeclarationAt(executor, repository, baseRef) {
309
371
  if (!executor.readCodingServiceDeclaration)
310
- return { ...read, outcome: { kind: "none" } };
372
+ return { kind: "none" };
311
373
  let text;
312
374
  try {
313
- text = await executor.readCodingServiceDeclaration({
314
- repository: profile.repository,
315
- baseRef: normalizeGitRef(branch.baseRef),
316
- });
375
+ text = await executor.readCodingServiceDeclaration({ repository, baseRef: normalizeGitRef(baseRef) });
317
376
  }
318
377
  catch (err) {
319
378
  const reason = UNREADABLE_DECLARATION[err instanceof Error ? err.message : ""];
320
379
  if (reason) {
321
380
  return {
322
- ...read,
323
- outcome: {
324
- kind: "refused",
325
- refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(reason)),
326
- },
381
+ kind: "refused",
382
+ refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(reason)),
327
383
  };
328
384
  }
329
- dispatchLog.warn({ err, agentId: options.agentId }, "could not read the repository's service declaration");
385
+ dispatchLog.warn({ err, repository }, "could not read the repository's service declaration");
330
386
  return {
331
- ...read,
332
- outcome: {
333
- kind: "refused",
334
- refusal: serviceRefusal("service_declaration_unavailable", DECLARATION_UNAVAILABLE_SENTENCE),
335
- },
387
+ kind: "refused",
388
+ refusal: serviceRefusal("service_declaration_unavailable", DECLARATION_UNAVAILABLE_SENTENCE),
336
389
  };
337
390
  }
338
391
  if (text === null)
339
- return { ...read, outcome: { kind: "none" } };
392
+ return { kind: "none" };
340
393
  try {
341
- return { ...read, outcome: { kind: "declared", services: parseServiceDeclaration(text) } };
394
+ return { kind: "declared", services: parseServiceDeclaration(text) };
342
395
  }
343
396
  catch (err) {
344
397
  if (!(err instanceof ServiceDeclarationError))
345
398
  throw err;
346
399
  return {
347
- ...read,
348
- outcome: {
349
- kind: "refused",
350
- refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(err.reason)),
351
- },
400
+ kind: "refused",
401
+ refusal: serviceRefusal("service_declaration_invalid", invalidDeclarationSentence(err.reason)),
352
402
  };
353
403
  }
354
404
  }
355
- /** Inside the transaction: the run's services, or the refusal that stops it. */
356
- async function resolveDispatchServices(tx, outcome, allowed, executor, provider, request, instructions) {
405
+ /**
406
+ * Inside the transaction: the run's services, or the refusal that stops it. Takes only the
407
+ * catalog, so a deferred coding run's start resolves them the same way with a plain client.
408
+ */
409
+ export async function resolveDispatchServices(tx, outcome, allowed, executor, provider, request, instructions) {
357
410
  if (outcome.kind === "refused")
358
411
  return { refusal: outcome.refusal };
359
412
  if (outcome.kind === "none" || outcome.services.length === 0)
@@ -385,16 +438,30 @@ export async function dispatchRun(options) {
385
438
  },
386
439
  });
387
440
  const lockGroups = preview?.kind === "coding" && preview.budgetGroupId != null;
441
+ // The native gateway's executor has no coding configuration: the run is recorded
442
+ // unresolved and the process that starts it reads and resolves (resolveDeferredCodingRun).
443
+ const deferCoding = options.executor.defersCodingResolution === true;
444
+ // The repository this run works in, resolved from the agent's list before any network read. A
445
+ // refusal propagates: nothing has been written, and it is not a retryable conflict.
446
+ const previewTarget = !deferCoding && preview?.kind === "coding" && preview.codingProfile
447
+ ? await codingTarget(options.db, options, preview.codingProfile)
448
+ : undefined;
388
449
  // Only an agent allowed some service reads the repository's declaration; any
389
450
  // other coding agent never calls the host for it and gets no services.
390
- const declarationRead = preview?.kind === "coding" &&
451
+ const declarationRead = !deferCoding &&
452
+ preview?.kind === "coding" &&
391
453
  preview.codingProfile &&
454
+ previewTarget &&
392
455
  parseAllowedServiceNames(preview.codingProfile.services).length > 0
393
- ? await readServiceDeclaration(options, preview.codingProfile, preview.ownerId ?? null)
456
+ ? await readServiceDeclaration(options, previewTarget, preview.ownerId ?? null)
394
457
  : undefined;
395
458
  // The knowledge note's input: the repository's bundle index at the run's base (a network call).
396
- const knowledgeIndex = preview?.kind === "coding" && preview.codingProfile && options.executor.readCodingRepositoryFile
397
- ? await readKnowledgeIndex(options, preview.codingProfile, declarationRead?.branch, preview.ownerId ?? null)
459
+ const knowledgeIndex = !deferCoding &&
460
+ preview?.kind === "coding" &&
461
+ preview.codingProfile &&
462
+ previewTarget &&
463
+ options.executor.readCodingRepositoryFile
464
+ ? await readKnowledgeIndex(options, previewTarget, declarationRead?.branch, preview.ownerId ?? null)
398
465
  : undefined;
399
466
  const persistOnce = () => options.db.$transaction(async (tx) => {
400
467
  if (lockGroups)
@@ -426,11 +493,14 @@ export async function dispatchRun(options) {
426
493
  let modelFailure;
427
494
  let services = [];
428
495
  let servicesRefusal;
496
+ let target;
429
497
  if (agent.kind === "coding") {
430
498
  if (!agent.codingProfile)
431
499
  throw new Error(`Coding agent "${agent.id}" has no coding profile.`);
432
500
  // An unknown coding provider is a broken profile, not a catalog state: still thrown.
433
501
  assertCodingProvider(agent.codingProfile.provider);
502
+ // Resolved again inside the transaction: an unlink since the preview refuses the run here.
503
+ target = await codingTarget(tx, options, agent.codingProfile);
434
504
  // Recorded on the run row below: the run is billed at this entry for its whole life.
435
505
  // A model the catalog cannot run (missing, disabled, or another provider's) fails
436
506
  // the run here instead of throwing: the run row commits with the reason, so the
@@ -446,8 +516,7 @@ export async function dispatchRun(options) {
446
516
  modelFailure = err.message;
447
517
  }
448
518
  if (!modelFailure && declarationRead) {
449
- if (declarationRead.repository !== agent.codingProfile.repository ||
450
- declarationRead.profileBaseRef !== agent.codingProfile.baseRef) {
519
+ if (declarationRead.repository !== target.repository || declarationRead.profileBaseRef !== target.baseRef) {
451
520
  // The declaration was read for a profile that changed before this transaction.
452
521
  throw new Error("The coding agent's repository or base branch changed during dispatch; try again.");
453
522
  }
@@ -471,6 +540,7 @@ export async function dispatchRun(options) {
471
540
  // Fixed for the run's life: the executor routes on this, never on the agent's current setting.
472
541
  nativeExecutionMode: agent.kind === "native" ? agent.nativeExecutionMode : null,
473
542
  parentRunId: options.parentRunId,
543
+ parentCallId: options.parentCallId,
474
544
  grantedParentMemoryKeys: options.grantedParentMemoryKeys ?? [],
475
545
  taskOverride: options.taskOverride,
476
546
  triggeredById: options.triggeredById ?? null,
@@ -490,6 +560,13 @@ export async function dispatchRun(options) {
490
560
  : {}),
491
561
  },
492
562
  });
563
+ if (refusal && codingBudget?.refusalDetail && refusal === codingBudget.refusal) {
564
+ const { limit, detail } = codingBudget.refusalDetail;
565
+ // Group and lead names are filled at read time.
566
+ await tx.runBudgetEvent.create({
567
+ data: { runId: run.id, kind: "refused", limit, details: { source: "dispatch", ...detail } },
568
+ });
569
+ }
493
570
  if (options.afterPersist)
494
571
  await options.afterPersist(tx, run);
495
572
  const attributed = await attributeRun(tx, run.id, {
@@ -497,25 +574,30 @@ export async function dispatchRun(options) {
497
574
  continuesCodingRunId: options.continuesCodingRunId,
498
575
  intent: options.attribution,
499
576
  }, now);
500
- if (agent.kind === "coding" && agent.codingProfile && codingBudget && !refusal) {
577
+ if (agent.kind === "coding" && agent.codingProfile && target && codingBudget && !refusal) {
501
578
  // Checked above too; repeated so the provider type narrows here.
502
579
  assertCodingProviderModel(agent.codingProfile.provider, agent.model);
503
580
  const request = options.codingTask ?? agent.codingProfile.defaultTask;
504
581
  if (!request)
505
582
  throw new Error(`Coding agent "${agent.id}" requires a task.`);
506
583
  // The worker sees only the task text, so the agent's own instructions, and the
507
- // services note, ride in it.
508
- const task = composeCodingTask(agent.systemPrompt, request, servicesInstructionNote(services), knowledgeIndex ? knowledgeSection(knowledgeIndex) : undefined);
584
+ // services note, ride in it. Deferred, the task is stored raw and composed when the
585
+ // run starts; composing here only checks its size, so it throws exactly as today.
586
+ if (deferCoding)
587
+ composeCodingTask(agent.systemPrompt, request);
588
+ const task = deferCoding
589
+ ? request
590
+ : composeCodingTask(agent.systemPrompt, request, servicesInstructionNote(services), knowledgeIndex ? knowledgeSection(knowledgeIndex) : undefined);
509
591
  const budgetUsd = codingBudget.budgetUsd;
510
592
  // Resolved once: before the transaction when the declaration was read from it.
511
- const branch = declarationRead?.branch ?? (await resolveCodingBranch(tx, options, agent.codingProfile, agent.ownerId));
593
+ const branch = declarationRead?.branch ?? (await resolveCodingBranch(tx, options, target, agent.ownerId));
512
594
  const { baseRef, continuationOf, rootCodingRunId, mergeOrder: inheritedMergeOrder } = branch;
513
595
  const headRef = branch.headRef ?? `wardby/run-${run.id}`;
514
596
  const mergeOrder = resolveMergeOrder(options, inheritedMergeOrder);
515
597
  const input = CodingTaskInputSchema.parse({
516
598
  schemaVersion: CODING_PROTOCOL_VERSION,
517
599
  runId: run.id,
518
- repository: agent.codingProfile.repository,
600
+ repository: target.repository,
519
601
  baseRef,
520
602
  headRef,
521
603
  task,
@@ -531,18 +613,25 @@ export async function dispatchRun(options) {
531
613
  toolchainVersion: agent.codingProfile.toolchainVersion,
532
614
  workerImageRef: agent.codingProfile.workerImageRef,
533
615
  };
534
- const workerImage = options.executor.resolveCodingWorkerImage?.(imageSelector);
616
+ // Deferred, both stay null until the starting process resolves them.
617
+ const workerImage = deferCoding ? null : options.executor.resolveCodingWorkerImage?.(imageSelector);
535
618
  // Claude Code's commands run in its tool runner, so the toolchain picks that image too; fixed
536
619
  // here with the worker image so the run keeps both however the deployment changes later.
537
- const toolImage = options.executor.resolveCodingToolImage?.(imageSelector) ?? null;
620
+ const toolImage = deferCoding ? null : (options.executor.resolveCodingToolImage?.(imageSelector) ?? null);
621
+ const traced = agent.codingProfile.debugTraceUntil != null &&
622
+ now.getTime() < agent.codingProfile.debugTraceUntil.getTime();
623
+ const { packageAuditMode, packageAuditUntil } = agent.codingProfile;
538
624
  await tx.codingRun.create({
539
625
  data: {
540
626
  runId: run.id,
627
+ budgetLimitedBy: codingBudget.limitedBy ?? null,
541
628
  issueProvider: attributed?.provider ?? null,
542
629
  issueKey: attributed?.key ?? null,
543
630
  task: input.task,
631
+ request,
544
632
  repository: input.repository,
545
633
  baseRef: input.baseRef,
634
+ viaRepositoryLink: target.viaRepositoryLink,
546
635
  headRef: input.headRef,
547
636
  provider: agent.codingProfile.provider,
548
637
  model: input.model,
@@ -554,15 +643,25 @@ export async function dispatchRun(options) {
554
643
  workerImage,
555
644
  toolImage,
556
645
  budgetReservedUsd: budgetUsd,
646
+ budgetBaseUsd: codingBudget.baseBudgetUsd,
647
+ budgetLimitUsd: codingBudget.limitUsd,
557
648
  rootCodingRunId,
558
649
  mergeOrder,
559
650
  workspaceDiskMb: agent.codingProfile.workspaceDiskMb,
560
651
  maxTurns: agent.codingProfile.maxTurns,
652
+ maxOutputTokens: agent.codingProfile.maxOutputTokens,
561
653
  repoSkills: agent.codingProfile.repoSkills,
562
654
  claudeBareMode: agent.codingProfile.claudeBareMode,
655
+ dependencyCache: agent.codingProfile.dependencyCache,
656
+ sessionResume: agent.codingProfile.sessionResume,
563
657
  // Fixed here so a run's tracing never changes mid-run.
564
- debugTrace: agent.codingProfile.debugTraceUntil != null &&
565
- now.getTime() < agent.codingProfile.debugTraceUntil.getTime(),
658
+ debugTrace: traced,
659
+ debugTraceMaxMb: traced ? agent.codingProfile.debugTraceMaxMb : null,
660
+ // Fixed here too: a run keeps the mode its dispatch saw for its
661
+ // whole life, however the window moves afterwards.
662
+ packageAuditMode: isPackageAuditActive(packageAuditMode, packageAuditUntil, now)
663
+ ? packageAuditMode
664
+ : null,
566
665
  services,
567
666
  },
568
667
  });
@@ -570,7 +669,8 @@ export async function dispatchRun(options) {
570
669
  else if (agent.kind !== "coding" &&
571
670
  (options.codingTask !== undefined ||
572
671
  options.codingBaseRef !== undefined ||
573
- options.continuesCodingRunId !== undefined)) {
672
+ options.continuesCodingRunId !== undefined ||
673
+ options.codingRepository !== undefined)) {
574
674
  throw new Error("Coding overrides cannot be supplied for a native agent.");
575
675
  }
576
676
  const task = options.task
@@ -178,7 +178,7 @@ export class NativeEngine {
178
178
  * once all have settled, the first rejection by call order is rethrown.
179
179
  */
180
180
  async runToolCalls(ctx, step, turn, toolCalls) {
181
- const runCall = (index) => step(`turn:${turn}:tool:${index}`, () => ctx.runSandboxTool(toolCalls[index].name, toolCalls[index].argsJson));
181
+ const runCall = (index) => step(`turn:${turn}:tool:${index}`, () => ctx.runSandboxTool(toolCalls[index].name, toolCalls[index].argsJson, toolCalls[index].id));
182
182
  const concurrent = ctx.runsConcurrently;
183
183
  const results = new Array(toolCalls.length);
184
184
  let index = 0;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The code a wardby error message leads with (`some_code` or `some_code: detail`), or undefined.
3
+ * Worker-safe: the native sandbox worker image ships this module.
4
+ */
5
+ export declare function errorCodeOf(message: string | null | undefined): string | undefined;
6
+ /** The code an unexpected error's message leads with, if it is code-shaped (has an underscore) and short enough. */
7
+ export declare function causeCodeOf(err: unknown): string | undefined;
8
+ /**
9
+ * The only codes that may be shown from an arbitrary error's text (to a worker, or to the model in a
10
+ * tool result): wardby's own codes that an unexpected error on those paths can lead with. Anything
11
+ * else, however code-shaped, could be a value from an error's text, so it never crosses.
12
+ * - coding_execution_not_configured, coding_profile_missing: a coding delegation reaching a process
13
+ * that cannot start coding runs (core/deferred-coding.ts, providers/executor/routing.ts).
14
+ * - message_too_large, message_not_json, message_invalid, unsupported_protocol_version: the native
15
+ * worker protocol's own ProtocolError codes (native-worker/protocol.ts).
16
+ * - invalid_merge_order: dispatchRun's refusal of a bad mergeOrder (core/dispatch.ts).
17
+ * - coding_worker_image_invalid: a coding worker image that is not pinned by digest
18
+ * (providers/executor/container.ts).
19
+ * - native_sandbox_unavailable: createRun/the router refusing a sandbox-mode agent with no sandbox executor
20
+ * (core/runner.ts).
21
+ * - run_tree_exhausted: dispatchRun refusing a run whose tree budget is spent (core/dispatch.ts).
22
+ * - secret_in_value, secret_check_unavailable: the datastore and memory write guard refusing a value
23
+ * that holds an attached secret's value (core/secret-guard.ts); the code carries only the name of
24
+ * the secret, never its value, across the gateway.
25
+ */
26
+ export declare const GATEWAY_CAUSE_CODES: ReadonlySet<string>;
27
+ /**
28
+ * The codes wardby itself writes as a failed coding or native child run's Run.error (read from the
29
+ * literals in core/dispatch.ts, core/coding-queue.ts, providers/executor/*, core/run-pricing.ts,
30
+ * providers/llm/catalog-types.ts and the native sandbox). A parent may be told which of these a
31
+ * child failed with; any other leading word is not shown. Includes GATEWAY_CAUSE_CODES, and the
32
+ * container executor's terminal codes: `coding_failure_<category>` for every category
33
+ * failureCategory files a failure under (providers/executor/container.ts), and
34
+ * `coding_provider_<class>` for every provider failure class (core/provider-wording.ts).
35
+ */
36
+ export declare const CHILD_RUN_FAILURE_CODES: ReadonlySet<string>;
37
+ /** The leading code of an arbitrary error or message, only when it is declared in `allowed`. */
38
+ export declare function declaredCodeOf(err: unknown, allowed?: ReadonlySet<string>): string | undefined;
@@ -0,0 +1,169 @@
1
+ /**
2
+ * The code a wardby error message leads with (`some_code` or `some_code: detail`), or undefined.
3
+ * Worker-safe: the native sandbox worker image ships this module.
4
+ */
5
+ export function errorCodeOf(message) {
6
+ return message ? /^([a-z][a-z0-9_]*)(:|$)/.exec(message)?.[1] : undefined;
7
+ }
8
+ /** The longest cause code carried; a longer leading word is not a code. */
9
+ const MAX_CAUSE_CODE_LENGTH = 64;
10
+ /** The code an unexpected error's message leads with, if it is code-shaped (has an underscore) and short enough. */
11
+ export function causeCodeOf(err) {
12
+ const code = errorCodeOf(err instanceof Error ? err.message : typeof err === "string" ? err : undefined);
13
+ // Only the code form leaves a boundary: snake_case with an underscore, so a bare word
14
+ // (which could be a token) never crosses.
15
+ return code && code.includes("_") && code.length <= MAX_CAUSE_CODE_LENGTH ? code : undefined;
16
+ }
17
+ /**
18
+ * The only codes that may be shown from an arbitrary error's text (to a worker, or to the model in a
19
+ * tool result): wardby's own codes that an unexpected error on those paths can lead with. Anything
20
+ * else, however code-shaped, could be a value from an error's text, so it never crosses.
21
+ * - coding_execution_not_configured, coding_profile_missing: a coding delegation reaching a process
22
+ * that cannot start coding runs (core/deferred-coding.ts, providers/executor/routing.ts).
23
+ * - message_too_large, message_not_json, message_invalid, unsupported_protocol_version: the native
24
+ * worker protocol's own ProtocolError codes (native-worker/protocol.ts).
25
+ * - invalid_merge_order: dispatchRun's refusal of a bad mergeOrder (core/dispatch.ts).
26
+ * - coding_worker_image_invalid: a coding worker image that is not pinned by digest
27
+ * (providers/executor/container.ts).
28
+ * - native_sandbox_unavailable: createRun/the router refusing a sandbox-mode agent with no sandbox executor
29
+ * (core/runner.ts).
30
+ * - run_tree_exhausted: dispatchRun refusing a run whose tree budget is spent (core/dispatch.ts).
31
+ * - secret_in_value, secret_check_unavailable: the datastore and memory write guard refusing a value
32
+ * that holds an attached secret's value (core/secret-guard.ts); the code carries only the name of
33
+ * the secret, never its value, across the gateway.
34
+ */
35
+ export const GATEWAY_CAUSE_CODES = new Set([
36
+ "coding_execution_not_configured",
37
+ "coding_profile_missing",
38
+ "message_too_large",
39
+ "message_not_json",
40
+ "message_invalid",
41
+ "unsupported_protocol_version",
42
+ "invalid_merge_order",
43
+ "coding_worker_image_invalid",
44
+ "native_sandbox_unavailable",
45
+ "run_tree_exhausted",
46
+ "secret_in_value",
47
+ "secret_check_unavailable",
48
+ ]);
49
+ /**
50
+ * The codes wardby itself writes as a failed coding or native child run's Run.error (read from the
51
+ * literals in core/dispatch.ts, core/coding-queue.ts, providers/executor/*, core/run-pricing.ts,
52
+ * providers/llm/catalog-types.ts and the native sandbox). A parent may be told which of these a
53
+ * child failed with; any other leading word is not shown. Includes GATEWAY_CAUSE_CODES, and the
54
+ * container executor's terminal codes: `coding_failure_<category>` for every category
55
+ * failureCategory files a failure under (providers/executor/container.ts), and
56
+ * `coding_provider_<class>` for every provider failure class (core/provider-wording.ts).
57
+ */
58
+ export const CHILD_RUN_FAILURE_CODES = new Set([
59
+ ...GATEWAY_CAUSE_CODES,
60
+ "coding_failure_turn_limit",
61
+ "coding_failure_service_unready",
62
+ "coding_failure_preflight",
63
+ "coding_failure_job",
64
+ "coding_failure_repo_access_unavailable",
65
+ "coding_failure_repo_access",
66
+ "coding_failure_github",
67
+ "coding_failure_protected_path",
68
+ "coding_failure_continuation_closed",
69
+ "coding_failure_merge_conflict",
70
+ "coding_failure_target_merge",
71
+ "coding_failure_workspace",
72
+ "coding_failure_budget",
73
+ "coding_failure_artifact",
74
+ "coding_failure_cancelled",
75
+ "coding_failure_executor",
76
+ "coding_failure_mcp_pins_unavailable",
77
+ "coding_provider_quota",
78
+ "coding_provider_rate_limited",
79
+ "coding_provider_unavailable",
80
+ "coding_provider_rejected",
81
+ "coding_ambiguous_provisioning",
82
+ "coding_artifact_duplicate_key",
83
+ "coding_artifact_invalid_json",
84
+ "coding_artifact_nesting_limit",
85
+ "coding_artifact_path_invalid",
86
+ "coding_artifact_root_invalid",
87
+ "coding_artifact_size_limit",
88
+ "coding_budget_exhausted",
89
+ "coding_capability_exists",
90
+ "coding_capability_unavailable",
91
+ "coding_credential_ref_invalid",
92
+ "coding_credential_reference_invalid",
93
+ "coding_credential_unavailable",
94
+ "coding_dispatch_unavailable",
95
+ "coding_head_ref_invalid",
96
+ "coding_input_invalid_file",
97
+ "coding_job_handle_conflict",
98
+ "coding_job_handle_mismatch",
99
+ "coding_job_status_unavailable",
100
+ "coding_output_invalid",
101
+ "coding_output_missing",
102
+ "coding_output_run_mismatch",
103
+ "coding_output_size_limit",
104
+ "coding_provider_not_configured",
105
+ "coding_provider_unsupported",
106
+ "coding_queue_timeout",
107
+ "coding_recovery_incomplete",
108
+ "coding_recovery_unavailable",
109
+ "coding_resource_limits_invalid",
110
+ "coding_result_missing",
111
+ "coding_result_run_mismatch",
112
+ "coding_run_budget_invalid",
113
+ "coding_run_no_longer_active",
114
+ "coding_run_not_active",
115
+ "coding_run_not_found",
116
+ "coding_run_ownership_invalid",
117
+ "coding_run_pricing_mismatch",
118
+ "coding_run_status_invalid",
119
+ "coding_run_terminal_conflict",
120
+ "coding_service_catalog_invalid",
121
+ "coding_service_unready",
122
+ "coding_services_unsupported",
123
+ "coding_services_unsupported_launcher",
124
+ "coding_stream_agent_exited",
125
+ "coding_stream_failed",
126
+ "coding_stream_proxy_denied",
127
+ "coding_stream_proxy_unreachable",
128
+ "coding_stream_quota_exceeded",
129
+ "coding_stream_rate_limited",
130
+ "coding_stream_timeout",
131
+ "coding_stream_upstream_error",
132
+ "coding_toolchain_unsupported",
133
+ "coding_turn_failed",
134
+ "coding_turn_limit",
135
+ "coding_workspace_disk_exceeds_limit",
136
+ "coding_workspace_lost",
137
+ "model_unavailable",
138
+ "model_not_allowed",
139
+ "executor_run_not_found",
140
+ "run_not_drivable",
141
+ "ownership_lost",
142
+ "step_replay_mismatch",
143
+ "worker_error",
144
+ "worker_tool_runner_unreachable",
145
+ "sandbox_dispatch_unavailable",
146
+ "native_sandbox_capacity",
147
+ "native_sandbox_deadline_exceeded",
148
+ "native_sandbox_docker_failed",
149
+ "native_sandbox_gateway_error",
150
+ "native_sandbox_gateway_unavailable",
151
+ "native_sandbox_image_not_pinned",
152
+ "native_sandbox_invalid_run_id",
153
+ "native_sandbox_invalid_warm_token",
154
+ "native_sandbox_isolation_mismatch",
155
+ "native_sandbox_launch_abandoned",
156
+ "native_sandbox_network_unenforced",
157
+ "native_sandbox_platform_unsupported",
158
+ "native_sandbox_recovery_unavailable",
159
+ "native_sandbox_requires_catalog",
160
+ "native_sandbox_warm_delivery_failed",
161
+ "native_sandbox_worker_exited",
162
+ "native_sandbox_worker_lost",
163
+ "native_sandbox_worker_unready",
164
+ ]);
165
+ /** The leading code of an arbitrary error or message, only when it is declared in `allowed`. */
166
+ export function declaredCodeOf(err, allowed = GATEWAY_CAUSE_CODES) {
167
+ const code = causeCodeOf(err);
168
+ return code && allowed.has(code) ? code : undefined;
169
+ }