@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
@@ -105,18 +105,18 @@ caller's principal id).
105
105
 
106
106
  An entry has:
107
107
 
108
- | Field | Meaning |
109
- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
110
- | `name`, `version` | What a repository declares. Unique together. |
111
- | `kind` | `sidecar`: a fresh instance next to each run. |
112
- | `image` | The image, pinned by digest. |
113
- | `port` | The port it listens on. |
114
- | `serviceEnv` | Environment for the service container. Per-run throwaway values only; never put a secret here. |
115
- | `testEnv` | Variables the agent's shells receive. Upper-case names; names wardby uses itself (`PATH`, `HOME`, `PIP_*`, `WARDBY_*`, proxy settings, ...) are refused. |
116
- | `readiness` | A command in the image that succeeds once the service accepts connections on `127.0.0.1`, with its period, timeout and failure threshold. |
117
- | `resources` | CPU (millicores), memory (MiB) and disk (MiB). Requests equal limits. |
118
- | `dataPath` | The directory the service writes its data to; an empty volume in every run (memory-backed on Docker). |
119
- | `writablePaths` | Other directories the image writes to (a socket directory, `/tmp`). The service's root filesystem is read-only. |
108
+ | Field | Meaning |
109
+ | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
110
+ | `name`, `version` | What a repository declares. Unique together. |
111
+ | `kind` | `sidecar`: a fresh instance next to each run. |
112
+ | `image` | The image, pinned by digest. |
113
+ | `port` | The port it listens on. |
114
+ | `serviceEnv` | Environment for the service container. Per-run throwaway values only; never put a secret here. |
115
+ | `testEnv` | Variables the agent's shells receive. Upper-case names. Names wardby uses itself are refused: `HOME`, `LANG`, `LC_ALL`, `PATH`, `SHELL`, `TMPDIR`, `USER`, `LD_PRELOAD`, `LD_LIBRARY_PATH`, `NODE_OPTIONS`, `NODE_PATH`, `PYTHONPATH`, `PYTHONHOME`, the proxy settings (`HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY`, `ALL_PROXY`), `SSL_CERT_FILE`, `SSL_CERT_DIR`, and anything starting `WARDBY_`, `CODEX_`, `OPENAI_`, `ANTHROPIC_`, `PIP_`, `NPM_CONFIG_`, `UV_`, `GIT_`, `YARN_`, `PNPM_` or `COREPACK_`. |
116
+ | `readiness` | A command in the image that succeeds once the service accepts connections on `127.0.0.1`, with its period, timeout and failure threshold. |
117
+ | `resources` | CPU (millicores), memory (MiB) and disk (MiB). Requests equal limits. |
118
+ | `dataPath` | The directory the service writes its data to; an empty volume in every run (memory-backed on Docker). |
119
+ | `writablePaths` | Other directories the image writes to (a socket directory, `/tmp`). The service's root filesystem is read-only. |
120
120
 
121
121
  ### Built-in services
122
122
 
@@ -233,6 +233,8 @@ Protected-path entries also accept a leading `!` for your own exceptions:
233
233
  | A service never became ready | Launch | failed, category `service_unready` | "The `<name>` service didn't become ready, so the run couldn't start." |
234
234
  | The run's changes touched a protected path | Collect | failed, category `protected_path` | "its changes include `<path>`, which this agent may not edit, so none of its changes were kept. Ask again without changing that file, or have the repository owner make that change." |
235
235
 
236
+ For a coding sub-agent of a sandboxed run, these refusals appear when the run starts instead of at dispatch, and the parent's delegation call receives the result.
237
+
236
238
  A refused run's `error` (from `get_run`) is the code followed by that sentence.
237
239
  The sentence reaches the requester on the run's status comment and, for a
238
240
  coding run started by another agent, in that agent's tool result. A
@@ -303,3 +305,16 @@ who maintain the catalog; see
303
305
  Existing agents are allowed no services until their owners add
304
306
  `codingProfile.services`, and every existing agent gets the `.wardby/`
305
307
  protected-path baseline without any change to its settings.
308
+
309
+ ### From 0.7.0: `YARN_*`, `PNPM_*` and `COREPACK_*` are reserved
310
+
311
+ From Wardby 0.7.0 a service's `testEnv` can't set a variable starting
312
+ `YARN_`, `PNPM_` or `COREPACK_`: the worker uses them to point yarn, pnpm and
313
+ corepack at the package registry (see
314
+ [pnpm and yarn](coding-packages.md#pnpm-and-yarn)). A custom catalog entry
315
+ that sets one fails to load after the upgrade, and so does a run that
316
+ declares it. Before you upgrade, list the catalog (`list_services`) and
317
+ remove those variables from any entry's `testEnv` with `update_service`.
318
+ After the upgrade such an entry can no longer be read or updated: delete it
319
+ with `delete_service` and create it again without those variables. The
320
+ built-in services set none.
@@ -95,8 +95,10 @@ the exact command.
95
95
  On a local quickstart install with the Docker launcher, `workerImageRef` can be
96
96
  the local image ID (`docker image inspect --format '{{.Id}}' <your-tag>`).
97
97
  Otherwise, build it, push it to your own registry, and note the resulting digest —
98
- `docker inspect --format '{{index .RepoDigests 0}}' <your-tag>` after a push,
99
- or read it straight from `docker buildx build --push`'s output.
98
+ `docker inspect --format '{{range .RepoDigests}}{{println .}}{{end}}' <your-tag>`
99
+ after a push lists one digest per registry the image is in: take the one in
100
+ the registry your cluster pulls from, not simply the first. Or read it straight
101
+ from `docker buildx build --push`'s output.
100
102
 
101
103
  ## Pointing an agent at it
102
104
 
@@ -285,6 +287,11 @@ These details explain the rules above.
285
287
  `/etc/profile` and the files in `/etc/profile.d/`, so that is where your own
286
288
  settings go. `/etc/profile` resets `PATH` to Debian's default, so add any
287
289
  other folder to `PATH` in your `/etc/profile.d/` file.
290
+ `/opt/wardby/bin` holds wardby's package-manager shim, linked as `npm`,
291
+ `pnpm` and `yarn`: it verifies the project's lockfile with the registry
292
+ before an install, then runs the image's own tool (or the release the
293
+ project pins, through corepack). Keep it first on `PATH`; see
294
+ [pnpm and yarn](coding-packages.md#pnpm-and-yarn).
288
295
  - **Network.** The tool runner reaches only wardby's package registry (npm and
289
296
  PyPI).
290
297
  - **Images on the Docker launcher are never pulled.** When wardby runs coding
@@ -322,6 +329,21 @@ current driver always disables. Rebuild any `workerImageRef` image on a
322
329
  current `driver-vN` digest (see "The driver image" above) before relying on
323
330
  either behavior.
324
331
 
332
+ ## The dependency cache needs a current driver
333
+
334
+ The [dependency cache](coding-packages.md#dependency-cache) adds keys to the run
335
+ input (`dependencyCache` and the workspace size). A worker built on an older
336
+ driver base validates its input with a strict schema, so with the cache on
337
+ for its agent every run fails at input (`worker_input_failed`) before the
338
+ agent starts. For a Claude Code agent, a tool runner built on an older tool
339
+ runner image doesn't fail the run, but it has no cache: its projects report
340
+ `tool_unavailable`. Rebuild a `workerImageRef` image `FROM` the driver image
341
+ (Codex) or tool runner image (Claude Code) of the release that includes the
342
+ cache before you set `dependencyCache: true` on an agent that uses it.
343
+ `create_agent` and `update_agent` return a warning when an agent has both.
344
+ Images built `FROM` that release carry the cache module at
345
+ `/opt/wardby/coding-worker/dependency-cache.mjs`; keep that path.
346
+
325
347
  ## What this doesn't cover
326
348
 
327
349
  wardby does not re-validate the contents of your built image beyond the
@@ -74,12 +74,22 @@ again.
74
74
  If the stream still fails, the run's diagnostic (in the control-plane log,
75
75
  under the run's `coding_diag_…` id) names the cause as a fixed code, never the
76
76
  error text: `job_coding_stream_proxy_denied` (401/403 from the proxy),
77
- `job_coding_stream_rate_limited` (429), `job_coding_stream_upstream_error`
77
+ `job_coding_stream_rate_limited` (429), `job_coding_stream_quota_exceeded`
78
+ (the provider account is out of credit or over its spend limit; OpenAI answers
79
+ that with a 429 too, and retrying never helps; see
80
+ [the error article](../help/errors/coding-stream-quota-exceeded.md)),
81
+ `job_coding_stream_upstream_error`
78
82
  (5xx), `job_coding_stream_timeout`, `job_coding_stream_proxy_unreachable`
79
83
  (the worker could not connect), `job_coding_stream_agent_exited` (the agent
80
84
  process exited without an HTTP error), or `job_coding_stream_failed` when none
81
85
  of these match. A refusal because the run's budget is used up ends the run as
82
86
  out of budget instead.
87
+ Claude Code reports most API failures as a failed turn rather than a dropped
88
+ stream; the Claude worker reads the error type its SDK reports and uses the
89
+ same codes (a rate limit, an exhausted credit balance, an overloaded or
90
+ failing provider, a refused credential, a timeout or an unreachable proxy). A
91
+ failed turn with no such error, or with one none of these codes covers (for
92
+ example an invalid request), is `job_coding_turn_failed`.
83
93
 
84
94
  The proxy side of the same request is in the coding proxy's log as
85
95
  `audit.*` events (`audit.request.reserved`, `audit.response.completed`,
@@ -133,7 +143,8 @@ deeply to process is refused with `request_nesting_too_deep`.
133
143
 
134
144
  - **Anthropic Messages** (`parseAnthropicRequest`): a fixed set of keys,
135
145
  text/`tool_use`/`tool_result`/thinking blocks, exactly the two Wardby tool
136
- names, the reviewed beta values, the thinking mode the run's model catalog
146
+ names plus the run's own MCP tool names (see
147
+ [Remote MCP tools](#remote-mcp-tools)), the reviewed beta values, the thinking mode the run's model catalog
137
148
  entry names, and only effort levels that entry lists in `efforts` (top-level,
138
149
  or on an effort-only system message for models that change effort per turn).
139
150
  - **OpenAI Responses** (`parseOpenAiRequest`), built from what the pinned
@@ -147,8 +158,15 @@ deeply to process is refused with `request_nesting_too_deep`.
147
158
  `previous_response_id`, `conversation` and `metadata`, is refused with
148
159
  `openai_request_key_not_allowed:<key>`.
149
160
  - Tools: `function` and `custom` definitions, and `namespace` groups of
150
- them, either in `tools` or in Codex's `additional_tools` input item. Every
151
- other tool type, including all hosted tools (`web_search`, `mcp`,
161
+ them, either in `tools` or in Codex's `additional_tools` input item. A
162
+ `tool_search` tool is accepted only in the top-level `tools`, only with
163
+ `execution: "client"` (Codex runs the search over its own tools) and only
164
+ with `type`, `execution`, `description` and `parameters`; a
165
+ server-executed search is refused with
166
+ `openai_tool_not_allowed:tool_search`. Each tool list holds at most 512
167
+ tools, and a request at most 512 distinct tools in all; a definition
168
+ repeated in replayed tool search results counts once. Every other tool
169
+ type, including all hosted tools (`web_search`, `mcp`,
152
170
  `code_interpreter`, `image_generation`, `file_search`, `local_shell`, and
153
171
  so on), is refused with `openai_tool_not_allowed:<type>`. Tool names are
154
172
  checked for shape (`[A-Za-z0-9_-]{1,128}`) but not against a fixed list:
@@ -159,10 +177,17 @@ deeply to process is refused with `request_nesting_too_deep`.
159
177
  - Input items: `message` (`input_text`/`input_image` for user, developer
160
178
  and system; `output_text` for assistant), `reasoning`, `function_call`,
161
179
  `function_call_output`, `custom_tool_call`, `custom_tool_call_output`,
162
- `agent_message` and `additional_tools`, each with only the keys Codex
163
- sends. Anything else (`input_file`, `input_audio`, `item_reference`,
164
- replayed hosted-tool calls, `compaction`, `local_shell_call`) is refused
165
- with `openai_input_not_allowed:<type>`. An `input_image` must be an inline
180
+ `agent_message`, `additional_tools`, `tool_search_call` and
181
+ `tool_search_output`, each with only the keys Codex sends. The two tool
182
+ search items must say `execution: "client"`. A `tool_search_call` may
183
+ carry only a string `query` and a positive integer `limit` as its
184
+ arguments. Every tool a `tool_search_output` brings into the conversation
185
+ passes the same checks as a top-level tool, except another `tool_search`;
186
+ a `function` there may also carry `defer_loading: true`, which Codex sets
187
+ on the tools it loads through tool search, and nowhere else. Anything
188
+ else (`input_file`, `input_audio`, `item_reference`, replayed hosted-tool
189
+ calls, `compaction`, `local_shell_call`) is refused with
190
+ `openai_input_not_allowed:<type>`. An `input_image` must be an inline
166
191
  `data:image/{png,jpeg,gif,webp};base64,` URL, as Codex's `view_image`
167
192
  produces; a remote URL or a `file_id` is refused with
168
193
  `openai_remote_input_not_allowed`.
@@ -208,6 +233,62 @@ rather than silently widening what reaches OpenAI. Upgrading the pinned
208
233
  then widen `parseOpenAiRequest` only for what that review accepts, and
209
234
  document it in the list above.
210
235
 
236
+ ### Remote MCP tools
237
+
238
+ A coding agent can have [remote MCP server](mcp-servers.md#coding-agents) tools
239
+ attached. The worker still reaches only the proxy:
240
+
241
+ 1. When a run has MCP tools, the control plane mints a per-run MCP token
242
+ (`rmt_` plus 32 random bytes, base64url). Only its SHA-256 hash is stored
243
+ with the run's proxy session; the token reaches the worker only as
244
+ `WARDBY_MCP_TOKEN`, and is never logged. It is valid only on the proxy's
245
+ `/mcp` route, and only while the session is active and before its deadline.
246
+ It is not the run capability, and it is not accepted by the model routes.
247
+ 2. The worker (Claude Code or Codex, over HTTP) calls `POST /mcp` on the proxy
248
+ with `Authorization: Bearer <token>`. The proxy checks the token and
249
+ forwards the request to the native gateway's `/coding-mcp` route
250
+ (`WARDBY_MCP_GATEWAY_URL`). The proxy never sees an MCP server's URL or
251
+ secrets. Without `WARDBY_MCP_GATEWAY_URL`, `/mcp` answers `503`
252
+ `mcp_unavailable`. A bad or expired token gets a `401` without a
253
+ `WWW-Authenticate` header, so a client doesn't start OAuth discovery.
254
+ 3. The gateway checks the token again (the proxy is not trusted), checks the
255
+ live attachment on every call, counts the call against the run's limit
256
+ (`WARDBY_MCP_MAX_CALLS_PER_RUN`, default 100; failed calls count), runs it,
257
+ and removes the server's secret values from the result before it leaves.
258
+ Logs for the route carry the method, status and session id, never bodies,
259
+ arguments, results or the token.
260
+
261
+ The proxy can reach the gateway's HTTP port. It holds no gateway credentials,
262
+ and each route authenticates separately. The Anthropic allowlist accepts the
263
+ run's own MCP tools as plain client tools named
264
+ `mcp__wardby_mcp__<server>__<tool>`, and only those the run pinned.
265
+
266
+ Where the token is exposed:
267
+
268
+ - **Claude Code.** The agent container receives the MCP configuration, its
269
+ bearer header included, on Claude Code's command line. That container runs no
270
+ model commands and shares no PID namespace with the tool runner, so commands
271
+ the model runs can't read it.
272
+ - **Codex.** Shell commands run in the same container as Codex, and can read
273
+ the token through `/proc`. For that reason a Codex agent may use only tools
274
+ the server marks `readOnlyHint: true`: Wardby refuses any other tool when you
275
+ attach, when a run loads its tools, and on every call. `readOnlyHint` is the
276
+ server's own claim, which Wardby can't verify, so the allowlist remains the
277
+ owner's control. A leaked token is limited to this run's allowed tools, the
278
+ call limit and the run's deadline.
279
+
280
+ A repository's own MCP configuration is never loaded. MCP tools need this
281
+ release's Claude worker image and a new Codex driver image; an older image
282
+ ignores the token and gets no MCP tools, and the run does not fail. Codex
283
+ models that use tool search get their MCP tools through `tool_search_output`
284
+ items; the proxy checks every tool in them like a top-level tool (see
285
+ [Model request allowlist](#model-request-allowlist)).
286
+
287
+ The read-only rule follows the provider a run was started with
288
+ (`CodingRun.provider`), at pin time and on every call, not the agent's current
289
+ profile. At attach, a coding agent counts as Codex unless its provider is
290
+ exactly `claude-code`, so an agent without a profile is held to the rule too.
291
+
211
292
  The proxy also binds a second listener, the **deny port** (`8788`,
212
293
  `CODING_PROXY_DENY_PORT`), which serves nothing: it accepts a connection,
213
294
  sends no bytes and closes it immediately
@@ -240,21 +321,52 @@ expires on its own: each coding run dispatched before the expiry is traced for
240
321
  its whole life, and `get_run` shows `debugTrace: true` for it. Runs dispatched
241
322
  afterwards are not.
242
323
 
243
- A traced run's Codex worker writes every Codex stream event, and the full text
244
- of a stream failure (including the agent process's own error output and cause
245
- chain), to its **own log**, one JSON line each under a `debugTrace` key. On
324
+ A traced run's worker writes its whole agent stream, and the full text of a
325
+ stream failure (including the agent process's own error output and cause
326
+ chain), to its **own log**, one JSON line each under a `debugTrace` key
327
+ (`{ runId, at, kind, data }`, with `truncated: true` on a cut line). On
246
328
  Kubernetes that is the run pod's `worker` container log; on GKE, Cloud Logging
247
329
  keeps it after the pod is deleted. With the Docker launcher it is the worker
248
330
  container's log (`docker logs`), for as long as the container exists. Nothing from the trace goes to the database,
249
331
  GitHub, the run's error, or the control-plane log. Token-shaped values (the run
250
- capability, bearer tokens, API keys, GitHub tokens) are redacted, each line is
251
- capped at 16 KiB and each run at 2 MiB.
332
+ capability, the package-registry token derived from it, bearer tokens, API
333
+ keys, GitHub tokens) are redacted, and each line is capped at 16 KiB.
334
+
335
+ - **Codex** runs trace every Codex stream event (`event`), turn and error
336
+ events (`turn_failed`, `error_event`), and stream failures (`stream_error`).
337
+ - **Claude Code** runs (Wardby 0.7.0 or later) trace every Claude Agent SDK
338
+ message (`message`): the session's `system`/`init` message, each `assistant`
339
+ message, whose `tool_use` blocks carry the command given to `run_command`,
340
+ each `user` message, whose `tool_result` blocks carry that command's output
341
+ and error flag, and the final `result` message with its usage, cost and
342
+ duration. They also trace Claude Code's own error output (`sdk_stderr`) and
343
+ stream failures (`stream_error`). A command's duration is the difference
344
+ between the `at` of its `tool_use` message and that of its `tool_result`.
345
+ - Both write `worker_error` when the worker itself fails.
346
+
347
+ Each traced run's total is capped at 2 MiB by default. Once the cap is reached
348
+ the worker writes one `limit_reached` line and stops tracing that run. An admin
349
+ can raise or lower the cap for an agent, from 1 to 64 MiB, together with the
350
+ trace or separately (Wardby 0.7.0 or later):
351
+
352
+ ```
353
+ update_agent { "id": "<agent id>", "codingProfile": { "debugTraceMinutes": 30, "debugTraceMaxMb": 20 } }
354
+ ```
252
355
 
253
- The trace can contain prompts, model output and repository content. Turn it on
254
- only while diagnosing a failure, for as short a time as you can, and treat the
255
- pod logs of traced runs as sensitive. Tracing needs a worker driver image that
256
- supports it; a worker that predates it rejects a traced run's input as
257
- invalid.
356
+ `debugTraceMaxMb` needs `agents:admin` too, and `null` restores the default.
357
+ Changes are written to the same `coding.debug_trace.set` audit line. It is
358
+ fixed on each traced run at dispatch, and `get_run` shows it as
359
+ `debugTraceMaxMb` when it is not the default. A long trace can outgrow what
360
+ your log pipeline keeps: Kubernetes rotates container logs (often at about
361
+ 10 MiB per file), so `kubectl logs` may show only the newest part of a large
362
+ trace, while a log collector such as Cloud Logging on GKE keeps every line.
363
+
364
+ The trace can contain prompts, model output, commands, their output and
365
+ repository content. Turn it on only while diagnosing a failure, for as short a
366
+ time as you can, and treat the pod logs of traced runs as sensitive. Tracing
367
+ needs a worker image from a release that supports it (for Claude Code, 0.7.0
368
+ or later). A Codex worker that predates it rejects a traced run's input as
369
+ invalid; a Claude Code worker from 0.6.x runs the task but writes no trace.
258
370
 
259
371
  ## Container Policy
260
372
 
@@ -419,18 +531,20 @@ inert until an operator explicitly raises the ceiling above `CODING_DISK_MB`.
419
531
  A coding agent's profile carries an optional `workspaceDiskMb` (MiB; `null`
420
532
  means "use the deployment default `CODING_DISK_MB`"). It is snapshotted onto
421
533
  the `CodingRun` at dispatch time, so a later profile edit never changes an
422
- in-flight run's size, and it is capped by `CODING_MAX_DISK_MB`: a run whose
423
- snapshotted `workspaceDiskMb` exceeds the ceiling fails with
424
- `coding_workspace_disk_exceeds_limit`
425
- (`src/providers/executor/container.ts`, the `jobSpec()` check). This check
426
- runs after the workspace has already been cloned onto the control plane, so
427
- an over-ceiling agent still pays for a clone before failing, and the failure
428
- reaches the run record only as the sanitized `coding_failure_workspace:<id>`
429
- (the same generic bucketing every workspace/git-related failure gets) — not
430
- a distinctly labeled "refused" outcome, and not currently logged anywhere
431
- more diagnosable on the control plane. This is a known rough edge, not a
432
- security gap: no run ever exceeds the ceiling, it
433
- just fails less legibly than it could.
534
+ in-flight run's size, and it is capped by `CODING_MAX_DISK_MB`.
535
+ `create_agent` refuses a coding profile above the effective ceiling.
536
+ `update_agent` checks the ceiling when setting a numeric `workspaceDiskMb`
537
+ or changing an agent's kind to coding. Unrelated edits to an already-saved
538
+ over-cap coding agent remain allowed. The error names the requested MiB, the cap, and
539
+ `CODING_MAX_DISK_MB`, which the operator must raise to allow that size.
540
+ A value exactly at the cap is allowed; `null` restores the deployment default.
541
+
542
+ Agents already saved above the cap (including after an operator lowers it)
543
+ still fail at run time with `coding_workspace_disk_exceeds_limit`.
544
+ The run-time check runs after the workspace has been cloned onto the control
545
+ plane and before the worker starts; the run record shows the sanitized
546
+ `coding_failure_workspace:<id>`. Lower the profile's size or raise the
547
+ operator ceiling before running the agent again.
434
548
 
435
549
  `CODING_MAX_CONCURRENT` (default `4`) caps coding runs that hold a slot at
436
550
  once, across every control-plane replica: the cap is enforced in Postgres
@@ -440,6 +554,12 @@ it starts, oldest first, when a slot frees (immediately in the process whose
440
554
  run finished, or on the scheduler leader's next tick). A newly dispatched run
441
555
  never takes a free slot ahead of an older queued run. A run still queued after
442
556
  `CODING_QUEUE_TIMEOUT_SEC` (default `3600`) fails with `coding_queue_timeout`.
557
+ To end a queued run sooner, or a running one, call `stop_run` with its id: a
558
+ queued run is recorded `cancelled` and never starts; a running run is recorded
559
+ `cancelled` first, then its proxy session is cancelled and its job is stopped
560
+ and removed. The cancelled state is checked again before anything is pushed,
561
+ so a stopped run opens or updates no pull request, even when its worker had
562
+ already finished (see [Stop or cancel a run](../help/stop-run.md)).
443
563
  Slot usage is derived from run state, so a crashed replica cannot leak slots:
444
564
  its runs are reconciled to `lost`, which frees them.
445
565
 
@@ -455,13 +575,33 @@ size (a service sidecar adds to a run's CPU and memory) and other pods share the
455
575
  quota. Set `KUBERNETES_RESOURCE_QUOTA` to the quota's name and the launcher
456
576
  checks, before a run claims a slot, whether the pod it would create fits the
457
577
  quota's free room. A run that doesn't fit is queued the same way as a run over
458
- `CODING_MAX_CONCURRENT`, and is retried when a run ends and on each leader tick;
459
- without the check, the API server refuses the pod and the run fails. The check
460
- reads one ResourceQuota by name (`get` on `resourcequotas` with that
578
+ `CODING_MAX_CONCURRENT`, and is retried when a run ends and on each leader tick.
579
+ The check reads one ResourceQuota by name (`get` on `resourcequotas` with that
461
580
  `resourceName` in the launcher's Role). If the quota is missing or can't be
462
581
  read, the launcher logs `kubernetes_resource_quota_missing` or
463
- `kubernetes_resource_quota_unreadable` once and launches as before. Size
464
- `CODING_MAX_CONCURRENT` to the quota too, so slots and quota agree.
582
+ `kubernetes_resource_quota_unreadable` once and launches as before.
583
+
584
+ The check can be stale: the quota may fill up between the check and the pod
585
+ create, or `KUBERNETES_RESOURCE_QUOTA` may be unset. When the cluster still
586
+ refuses the pod, the run does not fail. It returns to the coding queue (the
587
+ control plane logs `coding run waiting for capacity: the cluster refused its
588
+ pod`), keeps its place and its original queue clock, and is retried no sooner
589
+ than about a minute later. It fails only when `CODING_QUEUE_TIMEOUT_SEC`
590
+ expires, with `coding_queue_timeout`; a follow-up run on a pull request then
591
+ also finishes the in-progress status it posted there, as failed. The queue stays first in, first out, so
592
+ runs behind a refused run wait for it, and each retry happens about once a
593
+ minute while the quota is full. A refused run shows `running` briefly, then
594
+ `pending` again while it waits. When `KUBERNETES_RESOURCE_QUOTA` is unset and a
595
+ pod is refused by a ResourceQuota, the launcher logs
596
+ `kubernetes_resource_quota_unconfigured` once per process: set
597
+ `KUBERNETES_RESOURCE_QUOTA` to that quota and grant the launcher `get` on it, so
598
+ runs wait before they start instead of being refused at creation. The Docker
599
+ launcher has no quota, so none of this applies there. In low-power mode, a run
600
+ waiting in the coding queue keeps the coding proxy awake, as any queued run
601
+ does.
602
+
603
+ Size the quota for `CODING_MAX_CONCURRENT` times the run pod's requests, so
604
+ slots and quota agree.
465
605
 
466
606
  Operating the queue across replicas:
467
607
 
@@ -521,7 +661,9 @@ the model, and a tag that breaks it is normalized to a lowercase slug (or
521
661
  dropped) instead of failing an otherwise finished run. GitHub finalization
522
662
  re-validates the tag independently. Linking an issue is not the tag's job: put
523
663
  a closing keyword such as `Resolves #37` in the task so the worker includes it
524
- in the summary, which becomes the pull request body.
664
+ in the summary, which becomes the pull request body on every run,
665
+ including follow-ups (see
666
+ [How the pull request description is kept current](code-review-agents.md#how-the-pull-request-description-is-kept-current)).
525
667
 
526
668
  Some workspace folders are never collected from a run: `node_modules`, `.venv`,
527
669
  `venv`, `__pycache__`, `.pytest_cache`, `.ruff_cache`, `.mypy_cache`, `.tox`,
@@ -683,6 +825,10 @@ One pod per run, built by the canonical, deny-by-default policy in
683
825
  that points at the workspace's `.cache/tmp` on the disk-backed `storage`
684
826
  volume instead, so it scales with `workspaceDiskMb` rather than this tiny
685
827
  in-memory scratch.
828
+ - A Claude Code run with `sessionResume` on also gives the worker's Claude
829
+ Code config directory (`/tmp/claude-config`, where the session file grows)
830
+ its own 80 MiB `medium: Memory` `emptyDir` (a tmpfs of the same size under
831
+ Docker), so a long session never fills `/tmp`. Only the worker mounts it.
686
832
  - `dnsPolicy: None` with `dnsConfig.nameservers: ["127.0.0.1"]` — **no DNS is
687
833
  configured for worker/agent pods at all.** The proxy is reached by name
688
834
  (`WARDBY_PROXY_URL=http://wardby-proxy:8787` — `CODING_PROXY_ALIAS` in
@@ -1105,7 +1251,7 @@ values. The list is kept only when every entry matches
1105
1251
  - **No end-to-end backpressure or host-side archive-size cap** once the
1106
1252
  exec WebSocket for a seed/collect transfer is connected — pre-existing,
1107
1253
  documented, not a regression of this milestone.
1108
- - **An over-ceiling `workspaceDiskMb` fails late and generically** — see
1254
+ - **An already-saved over-ceiling `workspaceDiskMb` fails at run time** — see
1109
1255
  "Control Plane Configuration" above.
1110
1256
  - **Namespace handling must remain explicit in every overlay.**
1111
1257
  `deploy/kind-coding/manifests/base/kustomization.yaml`