@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
@@ -0,0 +1,254 @@
1
+ # Remote MCP servers for native and coding agents
2
+
3
+ A native, Claude Code or Codex agent can call the tools of a remote MCP server. You register the
4
+ server once (its HTTPS URL plus your brokered secrets), Wardby saves the
5
+ server's tool list, and you attach an allowlisted subset of those tools to
6
+ an agent. A native agent sees each tool as `<server name>__<tool name>`; coding agents see
7
+ them as described in [Coding agents](#coding-agents).
8
+
9
+ `WARDBY_MCP_SERVERS` decides who may register servers: `owners` (the
10
+ default, anyone), `admins` (registering, updating and refreshing need
11
+ `hosts:admin`) or `off` (every tool below is refused except
12
+ `detach_mcp_server` and `delete_mcp_server`, so cleanup stays possible, and
13
+ attached servers' tools are left out of runs).
14
+
15
+ The tools below need the `tools:write` scope to change servers and
16
+ attachments and `agents:read` to list and get them.
17
+
18
+ ## Tools
19
+
20
+ | Tool | Who | What it does |
21
+ | --------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------ |
22
+ | `register_mcp_server` | anyone (see mode) | Registers a server from `name`, `url` (e.g. `https://mcp.example.com/mcp`) and `secretNames`; saves its tool list. |
23
+ | `update_mcp_server` | the server's owner | Changes the URL or secret names, saves a fresh tool list and returns what changed. |
24
+ | `refresh_mcp_server` | the server's owner | Saves a fresh tool list straight away; returns added, removed and changed tools and the agents left missing tools. |
25
+ | `list_mcp_servers` | anyone | Your servers and those shared with you: id, name, host, tool count, saved-at, `yours`. |
26
+ | `get_mcp_server` | owner, or `read`+ | One server with its full saved tool list (secret names and URL only for the owner). |
27
+ | `delete_mcp_server` | the server's owner | Deletes a server and detaches it from every agent. Works when the mode is `off`. |
28
+ | `attach_mcp_server` | agent's owner; `use`+ | Lets a native or coding agent call the named tools (`allowedTools`, exact names) with an optional `callTimeoutMs`. |
29
+ | `detach_mcp_server` | the agent's owner | Removes a server's tools from an agent. Works when the mode is `off`. |
30
+
31
+ `get_agent` shows each attached server under `mcpServers`: the server's `serverId`
32
+ and name, the allowed tools, `callTimeoutMs`, the exposed tool names and any allowed tools the server no
33
+ longer lists (`missingTools`). Anyone with read access on the agent sees this.
34
+ It never includes URLs, secret names or values, or saved tool lists.
35
+
36
+ ## Create a secret for the server
37
+
38
+ Servers are authenticated with [brokered secrets](tool-secrets.md): Wardby adds
39
+ the value to every request to the server's host and nobody, including the
40
+ model, can read it back. Create the secret, then set its broker config with
41
+ `set_secret_broker` so it is limited to the server's host. For a bearer token:
42
+
43
+ ```json
44
+ {
45
+ "hosts": ["mcp.example.com"],
46
+ "placement": { "kind": "header", "name": "Authorization", "format": "Bearer {value}" }
47
+ }
48
+ ```
49
+
50
+ A server that wants two headers needs two secrets, each with its own
51
+ placement (for example `X-Api-Key` with `format: "{value}"`, and
52
+ `X-Workspace` the same way); name both in `secretNames` (at most 8 names, each up to 1024 characters). The URL itself can't
53
+ carry credentials: a username, password or fragment is refused.
54
+
55
+ ## Register, read the tool list, attach
56
+
57
+ 1. `register_mcp_server` with `name` (1-32 characters: lower-case letters,
58
+ digits, `_` or `-`), `url` (`https://mcp.example.com/mcp`: HTTPS only,
59
+ default port) and `secretNames`. Wardby calls the server's `tools/list`
60
+ and saves the result. A secret that is missing, not brokered, or not
61
+ brokered to the URL's host is refused.
62
+ 2. `get_mcp_server` shows the saved tools: name, description, input schema and
63
+ the server's annotations.
64
+ 3. `attach_mcp_server` with the agent, the server and `allowedTools`: exact
65
+ tool names from the saved list, at least one, no wildcards. Attaching
66
+ replaces the agent's earlier allowlist and time limit for that server.
67
+ Native, Claude Code and Codex agents can attach a server (see [Coding agents](#coding-agents)).
68
+
69
+ The agent sees each tool as `<server name>__<tool name>`, with any character
70
+ outside letters, digits, `_` and `-` changed to `_`; the result must be at
71
+ most 64 characters. The description starts with `From MCP server <server name>: `.
72
+ Attaching is refused if the name clashes with another tool on the agent
73
+ (attached, another MCP tool, or a built-in name).
74
+
75
+ ## Coding agents
76
+
77
+ A Claude Code or Codex agent can use attached servers too. Attach them the same way, with
78
+ `attach_mcp_server`. The tools reach the run like this:
79
+
80
+ 1. The worker calls the coding proxy's `/mcp` route with a per-run MCP token (`rmt_…`, in the
81
+ worker's `WARDBY_MCP_TOKEN`). Workers still reach only the proxy.
82
+ 2. The proxy forwards the request to the native gateway's `/coding-mcp` route. The proxy never sees
83
+ a server's URL or secrets. The gateway checks the token again, checks the live attachment and
84
+ runs the call, and removes secret values from the result before it leaves.
85
+
86
+ The token belongs to one run: it works only on `/mcp`, only while the run is active and before its
87
+ deadline, and only its hash is stored.
88
+
89
+ - **Claude Code agents** see each tool as `mcp__wardby_mcp__<server name>__<tool name>` and may use
90
+ any allowed tool. The 64-character limit on `<server name>__<tool name>` is the same as for
91
+ native agents; the prefix adds no other limit.
92
+ - **Codex agents may use only tools the server marks `readOnlyHint: true`.** Wardby enforces this
93
+ when you attach (an allowlist with another tool is refused), when a run loads its tools (a tool
94
+ whose saved annotations no longer say read-only, for example after `refresh_mcp_server`, is left
95
+ out) and on every call. The reason is that repository code running in a Codex run can read the
96
+ run's MCP token, so only tools that don't change anything are safe to give it. `readOnlyHint` is
97
+ the server's own claim, which Wardby can't verify. The allowlist stays your control: allow only
98
+ tools you trust to be read-only.
99
+
100
+ A run follows the provider it was started with, even if the agent's provider changes before the
101
+ run launches. A coding agent with no coding profile is treated as Codex when you attach.
102
+
103
+ - **Switching an agent to Codex.** When `update_agent` makes an agent a Codex agent (changing
104
+ `codingProfile.provider` to `codex`, or making a native agent a coding agent, which uses Codex by
105
+ default) and some of its attached tools aren't marked read-only, the change still goes ahead and
106
+ the result's `warnings` names those tools: "These MCP tools aren't read-only and won't be
107
+ available to Codex runs: …". They stay attached but Codex runs don't get them. Detach them, or
108
+ re-attach the server with only read-only tools, to remove the warning's cause.
109
+ - **Call limit.** A run may make `WARDBY_MCP_MAX_CALLS_PER_RUN` calls (default `100`). Every call
110
+ counts, whatever its outcome. Past the limit a call returns
111
+ [`mcp_call_limit`](../help/errors/mcp-call-limit.md); the run goes on.
112
+ - **Proxy setting.** The coding proxy needs `WARDBY_MCP_GATEWAY_URL`, the native gateway's base URL
113
+ (the kind and GKE manifests set it). Without it `/mcp` answers `503` with
114
+ [`mcp_unavailable`](../help/errors/mcp-unavailable.md) and coding agents get no MCP tools. See
115
+ [Remote MCP servers](security-deployment.md#remote-mcp-servers) for the variables.
116
+ - **Worker images.** MCP for coding agents needs this release's Claude worker image and a new Codex
117
+ driver image. An older image ignores the token and the agent gets no MCP tools; the run does not
118
+ fail. Update the images together with the server.
119
+ - **Repository configuration.** A repository's own MCP configuration (such as `.mcp.json`) is still
120
+ never loaded; the attached servers are the only MCP tools a coding run has.
121
+ - **Codex models that use tool search** load MCP tools on demand: Codex sends a client-side
122
+ `tool_search` tool and adds the matching MCP tools to the conversation when the model searches.
123
+ This needs this release's coding proxy; an older proxy refuses those models' requests with
124
+ `openai_tool_not_allowed:tool_search`, MCP or not.
125
+
126
+ Time limits and the other rules in this guide apply to coding agents too. See
127
+ [Coding worker isolation](coding-worker-isolation.md#remote-mcp-tools) for the security notes.
128
+
129
+ ## Time limits
130
+
131
+ Each call has `callTimeoutMs` (default `30000`, set on `attach_mcp_server`).
132
+ It must be at least `1000` and can't exceed `WARDBY_TOOL_MAX_TIMEOUT_MS`; a call runs with the lower of
133
+ the two, and never past the run's own deadline. `stop_run` aborts a call in
134
+ flight. A call that runs out of time returns `mcp_call_timeout` to the model
135
+ and the run goes on.
136
+
137
+ A coding agent's calls have one more limit: the coding proxy gives up on a forwarded call after 5
138
+ minutes, whatever `WARDBY_TOOL_MAX_TIMEOUT_MS` and `callTimeoutMs` say. The call then fails with
139
+ [`mcp_unavailable`](../help/errors/mcp-unavailable.md) (`502`), the gateway stops the call, and it
140
+ still counts against the run's call limit. A run that has been stopped or cancelled can't start new
141
+ calls: its token is refused with `401`.
142
+
143
+ ## Refreshing and changes
144
+
145
+ `refresh_mcp_server` (and `update_mcp_server`) fetch the tool list again and
146
+ apply it at once. The reply lists tools added, removed and changed
147
+ (description or schema). A removed tool that an agent allows is dropped from
148
+ that agent's runs and shows under `missingTools` in `get_agent`; nothing
149
+ needs re-attaching if the server brings it back and you refresh again. A
150
+ tool the server newly adds is not available to any agent until you attach it.
151
+
152
+ ## What a call does
153
+
154
+ Each call opens its own session: `initialize`, `notifications/initialized`,
155
+ `tools/call`, then a `DELETE` to end it. Because every call gets a fresh
156
+ session, a server that keeps state between calls in one session won't see
157
+ that state on the next call. Wardby checks on every call that the tool is
158
+ still attached and still in the saved list, and that the agent's owner still
159
+ owns the server or holds `use` on it; the call uses the server's current URL
160
+ and secrets. Arguments that aren't a JSON object return `invalid_arguments`
161
+ without calling the server. Text returned to the model is cut at 100,000
162
+ characters, with a note.
163
+
164
+ Wardby answers none of a server's own requests (sampling, elicitation,
165
+ roots). Notifications in a reply are ignored. A reply that carries only a
166
+ request from the server, and no answer to Wardby's request, fails the call
167
+ with `mcp_server_error`.
168
+
169
+ One log line per call records the run id, agent id, server id, tool,
170
+ outcome, duration and result size, never the arguments, the response or the
171
+ URL. Secret values are removed from results, errors and logs.
172
+
173
+ ## Not supported
174
+
175
+ stdio servers, OAuth to a server (use a header secret), MCP resources,
176
+ prompts and sampling.
177
+
178
+ ## Trust
179
+
180
+ A server's results are untrusted input to the model, like any tool result. The
181
+ allowlist is the control: attach only the tools an agent needs. A server's
182
+ annotations (read-only, destructive and so on) are hints from the server, not
183
+ something Wardby can verify. The one place Wardby acts on a hint is Codex coding
184
+ agents, which may use only tools marked `readOnlyHint: true` (see
185
+ [Coding agents](#coding-agents)).
186
+
187
+ ## Sharing a server
188
+
189
+ Share a server you own with `grant_access` (`resourceType: "mcp_server"`, a
190
+ principal or `everyone`, level `read`, `use` or `write`; `everyone` is capped
191
+ at `use`). `read` lets the grantee see the server and its tool list; `use`
192
+ also lets them attach it to their own agents. The server's tools then run with
193
+ your brokered secrets, so grant `use` only to people you trust with them.
194
+ `write` allows nothing beyond `use`: only the owner updates, refreshes,
195
+ deletes or re-grants a server.
196
+
197
+ Sharing uses `grant_access` and `revoke_access`, which need the
198
+ `agents:write` scope; registering and attaching need `tools:write`.
199
+
200
+ An agent may use a server only while its owner owns the server or holds `use`
201
+ (or `write`) on it. `revoke_access`, and `grant_access` lowering a grant to
202
+ `read` (for a principal, or `everyone` from `use` to `read`), detach the
203
+ server at once from every agent whose owner can no longer use it; the reply
204
+ counts them under `attachmentsRemoved`. Your own agents, and agents whose
205
+ owner still holds `use` through another grant, keep it. Runs already going
206
+ lose the tools on their next call, which returns `mcp_tool_not_allowed`.
207
+
208
+ `delete_mcp_server` removes the server's tools from every agent attached to
209
+ it, including other owners' agents that use it through a grant, and removes
210
+ its grants.
211
+
212
+ When the server's secrets can't be loaded (a secret was deleted, or its
213
+ broker config no longer lists the server's host), the owner's own agents get
214
+ an `mcp_server_error` that names the secret. An agent using the server through
215
+ a grant gets only "The MCP server's credentials can't be used; ask its owner
216
+ to check it.", never the owner's secret names.
217
+
218
+ When a secret exists but the Wardby process making the call can't decrypt its
219
+ stored value, the call returns `mcp_server_credentials_unavailable`, and
220
+ `register_mcp_server`, `update_mcp_server` and `refresh_mcp_server` fail with
221
+ it as an HTTP 500 error. Every process that decrypts secrets (control plane,
222
+ scheduler, native gateway) must use the same `SECRET_APP_KEY`; if the key
223
+ changed, set the secret again. The owner's agents get that advice; an agent
224
+ using the server through a grant gets the generic message above. Each failure
225
+ also writes one operator `warn` log line with
226
+ `reason: "mcp_secret_decrypt_failed"`, the server and the secret name.
227
+
228
+ An attachment acts with the server owner's secrets. When `make_owner` gives an
229
+ agent a new owner, servers the new owner neither owns nor holds `use` on are
230
+ detached and listed under `bindingsRemoved` with `kind: "mcp_server"`.
231
+ `wardby grants adopt-public` and `wardby grants prune-bindings` remove them the
232
+ same way. An agent that holds an MCP server can't be made writable by
233
+ everyone.
234
+
235
+ ## Troubleshooting
236
+
237
+ A failed call returns `{"error": "<code>", "message": "..."}` to the model;
238
+ the run goes on.
239
+
240
+ | Code | Meaning |
241
+ | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
242
+ | [`mcp_servers_off`](../help/errors/mcp-servers-off.md) | `WARDBY_MCP_SERVERS=off`. |
243
+ | [`mcp_server_unreachable`](../help/errors/mcp-server-unreachable.md) | Wardby couldn't connect to the server. |
244
+ | [`mcp_server_auth_failed`](../help/errors/mcp-server-auth-failed.md) | The server answered 401 or 403. |
245
+ | [`mcp_server_credentials_unavailable`](../help/errors/mcp-server-credentials-unavailable.md) | A secret can't be decrypted: check every process's `SECRET_APP_KEY`. |
246
+ | [`mcp_server_error`](../help/errors/mcp-server-error.md) | Another HTTP error, a malformed reply, or the tool reported an error. |
247
+ | [`mcp_tool_not_allowed`](../help/errors/mcp-tool-not-allowed.md) | Detached, off the allowlist, or the owner lost `use` on the server. |
248
+ | [`mcp_tool_removed`](../help/errors/mcp-tool-removed.md) | The server no longer lists the tool. |
249
+ | [`mcp_call_timeout`](../help/errors/mcp-call-timeout.md) | The call hit its time limit or the run was stopped. |
250
+ | [`mcp_call_limit`](../help/errors/mcp-call-limit.md) | A coding run made more calls than `WARDBY_MCP_MAX_CALLS_PER_RUN`. |
251
+ | [`mcp_unavailable`](../help/errors/mcp-unavailable.md) | The coding proxy has no gateway to forward MCP calls to. |
252
+
253
+ See also [Secrets and tools](tool-secrets.md) and
254
+ [Remote MCP servers](security-deployment.md#remote-mcp-servers).
@@ -1,6 +1,6 @@
1
1
  # Native sandbox
2
2
 
3
- > **Requires Wardby 0.5.4 or later.**
3
+ > **Requires Wardby 0.6.0 or later.**
4
4
 
5
5
  By default a native agent runs inside the Wardby server process: its turn loop
6
6
  and any user tool code you attach execute next to the database connection, the
@@ -78,6 +78,13 @@ container to it under the alias `wardby-native-gateway`, and starts the worker
78
78
  on it. When the run ends the worker, the network, and the gateway's membership
79
79
  of it are removed.
80
80
 
81
+ The gateway also serves coding agents' remote MCP tools: the coding proxy
82
+ forwards a coding run's `/mcp` requests to the gateway's HTTP port, on the
83
+ `/coding-mcp` route, where the run's MCP token is checked again. Set
84
+ `WARDBY_MCP_GATEWAY_URL` on the coding proxy to the gateway's base URL
85
+ ([details](security-deployment.md#remote-mcp-servers)). The proxy holds no
86
+ gateway credentials, and each route authenticates separately.
87
+
81
88
  The gateway is stateless: all state is in Postgres. You can restart it while
82
89
  runs are in flight; workers retry their calls. It must not be given the Docker
83
90
  socket, because workers can reach it.
@@ -131,17 +138,15 @@ The gateway is the same Wardby build as the server, started with the
131
138
  `native-gateway` command. It needs the server's database, LLM, secrets, and
132
139
  integration settings, and **no Docker access**.
133
140
 
134
- | Gateway variable | Purpose |
135
- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
136
- | `NATIVE_GATEWAY_LISTEN` | `host:port` to listen on. Default `0.0.0.0:8790`. |
137
- | `DATABASE_URL` | The same database the server uses. With `DATABASE_AUTH=rds-iam` the gateway also needs `DATABASE_AUTH`, `AWS_REGION` (or `DATABASE_AWS_REGION`) and the CA bundle file named by `sslrootcert` ([details](security-deployment.md#database-authentication)). |
138
- | LLM provider keys | The same provider settings as the server (for example `OPENAI_API_KEY`). |
139
- | `SECRET_APP_KEY` | Same value as the server, so tools can read their bound secrets or send brokered ones ([details](tool-secrets.md)). |
140
- | Integration settings | The same repository-host and issue-tracker settings as the server. |
141
-
142
- If sandboxed agents delegate to coding agents, give the gateway the same
143
- coding image settings as the server (for example `CODING_WORKER_IMAGE`); the
144
- gateway only resolves them, it never starts coding workers.
141
+ | Gateway variable | Purpose |
142
+ | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
143
+ | `NATIVE_GATEWAY_LISTEN` | `host:port` to listen on. Default `0.0.0.0:8790`. |
144
+ | `DATABASE_URL` | The same database the server uses. With `DATABASE_AUTH=rds-iam` the gateway also needs `DATABASE_AUTH`, `AWS_REGION` (or `DATABASE_AWS_REGION`) and the CA bundle file named by `sslrootcert` ([details](security-deployment.md#database-authentication)). |
145
+ | LLM provider keys | The same provider settings as the server (for example `OPENAI_API_KEY`). |
146
+ | `SECRET_APP_KEY` | Same value as the server, so tools can read their bound secrets or send brokered ones ([details](tool-secrets.md)). |
147
+ | Integration settings | The same repository-host and issue-tracker settings as the server. |
148
+ | `WARDBY_TOOL_MAX_TIMEOUT_MS` | Same value as the server, if you set it: the longest time limit a tool may use ([details](security-deployment.md#tool-time-limits)). |
149
+ | `WARDBY_MCP_MAX_CALLS_PER_RUN` | Same value as the server, if you set it: the most remote MCP tool calls one coding run may make (default `100`; [details](security-deployment.md#remote-mcp-servers)). |
145
150
 
146
151
  For local development, the repository ships a compose overlay
147
152
  (`deploy/local/docker-compose.native-sandbox.yml`) that runs the gateway next to
@@ -249,7 +254,7 @@ same Wardby image as the server. Requirements:
249
254
  - **Environment:** the server's `DATABASE_URL`, `SECRET_APP_KEY` (so tools can
250
255
  read their bound secrets or send brokered ones; see
251
256
  [tool-secrets.md](tool-secrets.md)), the LLM provider keys, and any integration or
252
- coding image settings the server has (see the gateway table in the Docker
257
+ other settings the server has (see the gateway table in the Docker
253
258
  setup above). Also `NATIVE_GATEWAY_LISTEN` (default `0.0.0.0:8790`) and
254
259
  `NATIVE_GATEWAY_DENY_PORT` (default `8791`). Keep these in a Secret.
255
260
  - **No Kubernetes access:** `automountServiceAccountToken: false` and no Role
@@ -287,13 +292,16 @@ namespace that allows:
287
292
  | ----------------------------------- | --------------------------------- |
288
293
  | `pods` | `create`, `get`, `delete`, `list` |
289
294
  | `pods/exec` | `create`, `get` |
295
+ | `pods/log` | `get` |
290
296
  | `secrets` | `create`, `delete` |
291
297
  | `networking.k8s.io/networkpolicies` | `create`, `get`, `delete` |
292
298
  | `services` | `get` |
293
299
 
294
300
  `list` on pods lets the startup sweep find leftover worker pods by label;
295
- `pods/exec` is how the server proves isolation from inside the pod; `services`
296
- is read once to find the gateway's ClusterIP. Coding runs on Kubernetes use a
301
+ `pods/exec` is how the server proves isolation from inside the pod; `pods/log`
302
+ is read only when a worker exits non-zero, for the redacted tail it logs (without
303
+ it the server logs the exit with no tail); `services` is read once to find the
304
+ gateway's ClusterIP. Coding runs on Kubernetes use a
297
305
  largely overlapping Role (`deploy/kind-coding/manifests/base/launcher-role.yaml`).
298
306
 
299
307
  ### 4. Configure the server
@@ -382,6 +390,22 @@ sandboxing runtime: with this platform the server refuses to start unless
382
390
  two minutes to come up, so raise `NATIVE_SANDBOX_READY_TIMEOUT_MS` (for example
383
391
  to `600000`).
384
392
 
393
+ A run's worker launch (in low-power mode, the gateway wake first, then the pod
394
+ start and the isolation probe) can take several minutes on cold nodes. The
395
+ control plane keeps the run's heartbeat fresh for the whole launch, so the run
396
+ shows as running and the reconciler does not reap it as orphaned. The launch
397
+ is bounded by its own limits instead: the gateway wake
398
+ ([`low_power_wake_timeout`](../help/errors/low-power-wake-timeout.md)),
399
+ `NATIVE_SANDBOX_READY_TIMEOUT_MS`
400
+ ([`native_sandbox_worker_unready`](../help/errors/native-sandbox-worker-unready.md))
401
+ and the isolation probe
402
+ ([`native_sandbox_network_unenforced`](../help/errors/native-sandbox-network-unenforced.md)).
403
+ If the run is stopped during the launch, no worker pod is created
404
+ ([`native_sandbox_launch_abandoned`](../help/errors/native-sandbox-launch-abandoned.md)).
405
+ If the control-plane process running the launch exits partway, the run is
406
+ reported [`native_sandbox_worker_lost`](../help/errors/native-sandbox-worker-lost.md)
407
+ and is not relaunched.
408
+
385
409
  ### Capacity
386
410
 
387
411
  `NATIVE_SANDBOX_MAX_CONCURRENT` caps how many sandbox runs may be active at
@@ -534,6 +558,30 @@ set on the gateway, not the server.
534
558
  - A sandbox run has a maximum lifetime of 60 minutes. Past it the worker is
535
559
  stopped and the run fails with `native_sandbox_deadline_exceeded`.
536
560
  - The agent's own turn and budget limits still apply as for any native agent.
561
+ - Each tool call has the tool's own time limit (`timeoutMs`, default 10
562
+ seconds, capped by `WARDBY_TOOL_MAX_TIMEOUT_MS`). The worker enforces it; the
563
+ gateway gives each host call the limit plus 20 seconds, never past the run's
564
+ deadline. Update the worker image with the server: an older image refuses a
565
+ run whose agent has a tool with `timeoutMs`
566
+ ([details](security-deployment.md#tool-time-limits)).
567
+
568
+ ## Stopping a run
569
+
570
+ `stop_run` (or cancelling the MCP task that started the run) stops a sandboxed
571
+ run whether it is still waiting for a worker or already running:
572
+
573
+ 1. The run is recorded `cancelled` with the caller's reason, unless it already
574
+ finished (the first terminal state wins; a finished run is not changed).
575
+ 2. Its gateway session ends. The worker's next call (a model turn, a tool, or
576
+ its result) is refused, and the worker exits on its own. A tool's host call
577
+ still running on the gateway is aborted within a few seconds.
578
+ 3. A worker still running 5 seconds later is killed. Either way the worker is
579
+ then removed; a worker claimed from the warm pool is discarded with its pool
580
+ row and never returned to the pool.
581
+ 4. Sub-agent runs it delegated that are still open are stopped too.
582
+
583
+ A run stopped before its worker started never starts one. See
584
+ [Stop or cancel a run](../help/stop-run.md).
537
585
 
538
586
  ## Sub-agents
539
587
 
@@ -548,6 +596,32 @@ A child runs in its own configured mode (a `control-plane` child runs in the
548
596
  server, a `sandbox` child in its own worker). Cancelling a parent run stops its
549
597
  open children.
550
598
 
599
+ A coding agent (Codex or Claude Code) can be a child too. The gateway only
600
+ records the delegation. When the server's scheduler leader starts the child, the
601
+ server resolves its worker image (and the Claude Code tool-runner image), reads
602
+ `.wardby/services.yaml` and resolves its services, reads the knowledge bundle
603
+ index, and composes the final task. The gateway therefore needs no `CODING_*`
604
+ settings, and a gateway that sets them can drop them.
605
+
606
+ A problem with those, such as a `workerImageRef` that is not pinned by digest,
607
+ a toolchain with no image, an invalid or unavailable services declaration, an
608
+ unknown service, or a launcher that cannot run services, shows as the child run
609
+ ending `failed` or `refused` when it starts, with the same error code as at
610
+ dispatch. The parent's `delegate_to_*` call receives the child's result: for a
611
+ failed child `status: "failed"` with the `errorCode`, for a refused child the
612
+ refusal sentence. The full error is on the child run (see it with `get_run`). For agents not
613
+ in sandbox mode these errors still appear at dispatch. If creating a sub-agent
614
+ run fails unexpectedly during a sandboxed run's delegation, the delegating agent
615
+ receives a tool result `{"error":"dispatch_failed","message":"The sub-agent run
616
+ could not be created (<code>)."}` instead of the run failing.
617
+
618
+ **Upgrading:** upgrade `wardby serve` and `wardby scheduler` before or together
619
+ with the gateway. An older server starts such a child without resolving it: a Codex child
620
+ then runs on the deployment's default Codex image (ignoring its toolchain and
621
+ `workerImageRef`) and without its standing instructions, services, or knowledge
622
+ note, and a Claude Code child fails to start with
623
+ `coding_provider_not_configured:claude-code`.
624
+
551
625
  ## Budget behavior
552
626
 
553
627
  The gateway is the budget authority for sandboxed runs. Before each model call
@@ -555,28 +629,48 @@ it reserves that call's worst-case cost against the run's budget (and any
555
629
  budget group), calls the provider, then settles at the actual usage. A call the
556
630
  remaining budget cannot cover is refused and the run ends `budget_exhausted`
557
631
  instead of overspending. The worker cannot raise or bypass its budget because it
558
- never talks to the provider directly.
632
+ never talks to the provider directly. A call that breaks off before its final
633
+ usage is settled at an estimate (never more than its reservation) and
634
+ included in the run's cost. The estimate is the call's input plus the output
635
+ streamed so far (text and tool calls), counted high. If the provider's response
636
+ had started but no output had arrived yet (for example while the model was
637
+ thinking or reasoning), the run's median completed reply is used, or no output
638
+ if there is none yet. A call that failed before the provider's response started is released,
639
+ because nothing was generated.
559
640
 
560
641
  ## Failure modes
561
642
 
562
- | Error code | Meaning | What to do |
563
- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
564
- | [`native_sandbox_unavailable`](../help/errors/native-sandbox-unavailable.md) | Agent is in `sandbox` mode but the server has no native sandbox. Fails before any spend. | Configure the sandbox (steps above) or set the agent back to `control-plane`. |
565
- | [`native_sandbox_worker_exited`](../help/errors/native-sandbox-worker-exited.md) | The worker ended without producing a result. | Check the tool code and the worker's memory and PID limits; run again. |
566
- | [`native_sandbox_deadline_exceeded`](../help/errors/native-sandbox-deadline-exceeded.md) | The run passed its 60-minute maximum; the worker was stopped. | Split the work into smaller runs or sub-agents. |
567
- | [`native_sandbox_worker_lost`](../help/errors/native-sandbox-worker-lost.md) | The worker container or pod disappeared (for example its host or node restarted). It is never relaunched. | Trigger the run again; check the Docker host or node stability. |
568
- | [`native_sandbox_image_not_pinned`](../help/errors/native-sandbox-image-not-pinned.md) | `NATIVE_SANDBOX_WORKER_IMAGE` is a mutable tag. | Use a `repo@sha256:...` digest or a local image id. |
569
- | [`native_sandbox_docker_failed`](../help/errors/native-sandbox-docker-failed.md) | A Docker command (pull, network create, connect, run) failed. | Read the message, then check the Docker daemon, image availability, and gateway name. |
570
- | [`native_sandbox_network_unenforced`](../help/errors/native-sandbox-network-unenforced.md) | Kubernetes: the pod's egress isolation could not be proven in time; the pod was removed. | Check that the CNI enforces NetworkPolicy and the gateway Service exposes 8790 and 8791. |
571
- | [`native_sandbox_isolation_mismatch`](../help/errors/native-sandbox-isolation-mismatch.md) | Kubernetes: the stored pod or NetworkPolicy differs from what Wardby built (an admission change). | Exempt the run namespace's native-run pods from mutating policies. |
572
- | [`native_sandbox_gateway_unavailable`](../help/errors/native-sandbox-gateway-unavailable.md) | Kubernetes: the gateway Service is missing or has no ClusterIP. | Create the Service (ClusterIP, not headless) or fix `NATIVE_GATEWAY_SERVICE`. |
573
- | [`native_sandbox_worker_unready`](../help/errors/native-sandbox-worker-unready.md) | Kubernetes: the worker pod did not reach Running in time. | Check image pull, quotas, and scheduling with `kubectl describe pod`. |
574
- | [`native_sandbox_capacity`](../help/errors/native-sandbox-capacity.md) | `NATIVE_SANDBOX_MAX_CONCURRENT` runs are already active, or the namespace ResourceQuota is full. Not queued. | Wait and retry, or raise the cap together with the ResourceQuota. |
575
- | [`native_sandbox_warm_delivery_failed`](../help/errors/native-sandbox-warm-delivery-failed.md) | A claimed warm worker could not receive the run's input and could not be confirmed stopped within 30 seconds. | Trigger the run again; check the node or Docker host and pod exec access. |
576
- | [`native_sandbox_requires_catalog`](../help/errors/native-sandbox-requires-catalog.md) | No model catalog entry was recorded for the run: the process running it does not use the catalog-backed model router. | Run it on a standard `wardby serve`/`scheduler`/`mcp` process, or keep the agent on `control-plane`. |
643
+ | Error code | Meaning | What to do |
644
+ | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
645
+ | [`native_sandbox_unavailable`](../help/errors/native-sandbox-unavailable.md) | Agent is in `sandbox` mode but the server has no native sandbox. Fails before any spend. | Configure the sandbox (steps above) or set the agent back to `control-plane`. |
646
+ | [`native_sandbox_worker_exited`](../help/errors/native-sandbox-worker-exited.md) | The worker ended without producing a result. | Check the tool code and the worker's memory and PID limits; run again. |
647
+ | [`native_sandbox_deadline_exceeded`](../help/errors/native-sandbox-deadline-exceeded.md) | The run passed its 60-minute maximum; the worker was stopped. | Split the work into smaller runs or sub-agents. |
648
+ | [`native_sandbox_worker_lost`](../help/errors/native-sandbox-worker-lost.md) | The worker container or pod disappeared (for example its host or node restarted). It is never relaunched. | Trigger the run again; check the Docker host or node stability. |
649
+ | [`native_sandbox_image_not_pinned`](../help/errors/native-sandbox-image-not-pinned.md) | `NATIVE_SANDBOX_WORKER_IMAGE` is a mutable tag. | Use a `repo@sha256:...` digest or a local image id. |
650
+ | [`native_sandbox_docker_failed`](../help/errors/native-sandbox-docker-failed.md) | A Docker command (pull, network create, connect, run) failed. | Read the message, then check the Docker daemon, image availability, and gateway name. |
651
+ | [`native_sandbox_network_unenforced`](../help/errors/native-sandbox-network-unenforced.md) | Kubernetes: the pod's egress isolation could not be proven in time; the pod was removed. | Check that the CNI enforces NetworkPolicy and the gateway Service exposes 8790 and 8791. |
652
+ | [`native_sandbox_isolation_mismatch`](../help/errors/native-sandbox-isolation-mismatch.md) | Kubernetes: the stored pod or NetworkPolicy differs from what Wardby built (an admission change). | Exempt the run namespace's native-run pods from mutating policies. |
653
+ | [`native_sandbox_gateway_unavailable`](../help/errors/native-sandbox-gateway-unavailable.md) | Kubernetes: the gateway Service is missing or has no ClusterIP. | Create the Service (ClusterIP, not headless) or fix `NATIVE_GATEWAY_SERVICE`. |
654
+ | [`native_sandbox_worker_unready`](../help/errors/native-sandbox-worker-unready.md) | Kubernetes: the worker pod did not reach Running in time. | Check image pull, quotas, and scheduling with `kubectl describe pod`. |
655
+ | [`native_sandbox_capacity`](../help/errors/native-sandbox-capacity.md) | `NATIVE_SANDBOX_MAX_CONCURRENT` runs are already active, or the namespace ResourceQuota is full. Not queued. | Wait and retry, or raise the cap together with the ResourceQuota. |
656
+ | [`native_sandbox_warm_delivery_failed`](../help/errors/native-sandbox-warm-delivery-failed.md) | A claimed warm worker could not receive the run's input and could not be confirmed stopped within 30 seconds. | Trigger the run again; check the node or Docker host and pod exec access. |
657
+ | [`native_sandbox_requires_catalog`](../help/errors/native-sandbox-requires-catalog.md) | No model catalog entry was recorded for the run: the process running it does not use the catalog-backed model router. | Run it on a standard `wardby serve`/`scheduler`/`mcp` process, or keep the agent on `control-plane`. |
658
+ | [`native_sandbox_gateway_error`](../help/errors/native-sandbox-gateway-error.md) | The worker's call to the gateway failed with an error the run could not continue from (`native_sandbox_gateway_error: <code>: <message>`; for `internal`, only `native_sandbox_gateway_error: internal: <cause code>`, never the message; the cause code is one of wardby's declared codes and never one that matches a secret value the run can read). | Read the code and message; for `internal` (`internal: <cause code>` when the gateway named one), read the gateway's logs. Trigger the run again. |
577
659
 
578
660
  A run's error appears in its `error` field in `get_run` and `list_runs`.
579
661
 
662
+ For the gateway's `internal` code, the run's error carries a `causeCode` only
663
+ when the failing error's message led with one of wardby's own declared codes,
664
+ the gateway could read the run's secret values, and that code does not match
665
+ any of them; it is shown as `native_sandbox_gateway_error: internal: <causeCode>`.
666
+ Otherwise the error is just `native_sandbox_gateway_error: internal`. The
667
+ gateway's own log line (`native gateway request failed`) carries the error with
668
+ its message and stack, the run's secret values replaced by `[REDACTED]`, so the
669
+ message itself starts with the code; it has no separate `causeCode` field. Only
670
+ when the gateway could not read the run's secret values does the line carry just
671
+ the error's name (`errName`) and a `causeCode` field, with no message.
672
+ See [Native sandbox gateway error](../help/errors/native-sandbox-gateway-error.md).
673
+
580
674
  ## Roll back
581
675
 
582
676
  Set the agent back to `control-plane` with `update_agent` or
@@ -622,11 +716,29 @@ skipped unless its script sets its flag:
622
716
  the Service must list ports 8790 and 8791 and have ready endpoints.
623
717
  - **Check a run.** Call `get_run` for the run's status and error code, then use
624
718
  the matching error article from `search_help` or `get_help_article`.
719
+ - **A worker exited non-zero.** The server logs `native worker exited non-zero`
720
+ with the exit code and `stderrTail`, the last 2,000 characters of the worker's
721
+ output. Before logging it, the server masks the run's gateway capability and
722
+ every secret value the agent's tools can read as `[REDACTED]`. Encoded forms
723
+ of a value (URL-encoded, base64) are not matched. Instead of a tail, the line
724
+ may carry `stderrTailOmitted`: `secrets_unavailable` means one of those
725
+ secrets could not be read within 10 seconds, so the tail could not be
726
+ redacted; `log_read_failed` (Kubernetes) means the worker pod's log could not
727
+ be read within 10 seconds. Either way the run's failure is still recorded. On
728
+ Kubernetes the tail comes from the last 100 lines of the worker pod's log (the
729
+ launcher needs `get` on `pods/log`). That read may begin partway through a
730
+ line (the kubelet splits very long lines, and logs rotate), so its first few
731
+ dozen characters are always masked, more when an attached secret is long.
625
732
  - **Workers cannot reach the gateway.** Confirm `NATIVE_GATEWAY_CONTAINER`
626
733
  matches the running container's name exactly and that the gateway listens on
627
734
  the port in `NATIVE_GATEWAY_URL` (default 8790).
628
735
  - **Sub-agents never start.** Confirm `wardby serve` or `wardby scheduler` is
629
736
  running; the scheduler leader starts them.
737
+ - **A tool's console output is missing.** If the gateway logs
738
+ `sandbox tool console line withheld: the tool's secret values could not be read`,
739
+ reading one of the tool's attached secrets failed. Without every value it
740
+ cannot redact the line, so it logs none of it. The tool call itself still
741
+ succeeds. Check the secret store and the tool's attached secrets.
630
742
  - **Tool code fails inside the sandbox.** The worker has no network except the
631
743
  gateway and a read-only filesystem apart from `/tmp`; tools must use the
632
744
  provided fetch, datastore, and secret functions.
@@ -49,5 +49,9 @@ the coding-proxy coverage, so verify required signals before production use.
49
49
  - Alert on request failures, budget cutoffs, cleanup failures, stalled runs,
50
50
  and sustained latency or memory growth.
51
51
  - Confirm alerts reach an owned channel and rehearse one response path.
52
+ - Watch the logs for package audit mode: the control plane logs
53
+ `coding.package_audit.set` when an owner turns it on, off or extends it, and
54
+ the coding proxy logs `registry.audited` for each package it installs
55
+ because of it (see [Package audit mode](coding-packages.md#package-audit-mode)).
52
56
  - Treat telemetry as operational evidence, not as a replacement for Wardby's
53
57
  accounting database.