@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,242 @@
1
+ # Debugging an agent run
2
+
3
+ You can triage most agent problems yourself with the Wardby MCP and GitHub. Only
4
+ some failures need someone with server logs.
5
+
6
+ ## Start here
7
+
8
+ Find the run with `list_runs`, then read it with `get_run`. Then go to the section
9
+ for what you see.
10
+
11
+ ```mermaid
12
+ flowchart TD
13
+ start["Find the run: list_runs, then get_run"]
14
+ start --> none["No run started<br/>Check the repo links and triggers"]
15
+ start --> failed["Failed or refused<br/>Read failureCategory and the final text"]
16
+ start --> nopr["Succeeded, no PR<br/>Read outcome in codingResult"]
17
+ start --> missed["PR, but it missed<br/>Read the diff and the review"]
18
+ none --> nopull["See: No pull request appeared"]
19
+ nopr --> nopull
20
+ failed --> runfailed["See: The run failed"]
21
+ missed --> didntfix["See: The agent didn't fix what you expected"]
22
+ runfailed -- still unexplained --> operator["See: When you need an operator"]
23
+ nopr -- why it decided that --> transcript["See: Run transcripts"]
24
+ missed -- why it decided that --> transcript
25
+ ```
26
+
27
+ ## What you can use without server access
28
+
29
+ These all work through the Wardby MCP or GitHub, and you only see runs you have
30
+ access to.
31
+
32
+ | Tool | What it tells you |
33
+ | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
34
+ | `list_runs` (agent id, optional `status`) | An agent's recent runs: status, trigger, cost, turns, final text, and which run started it |
35
+ | `list_runs` without an agent id (from 0.8.0) | Your runs across every agent, each with `agentName`; no final text. `active: true` or `since` (ISO time) narrow it |
36
+ | `get_run` (run id) | One run in full, adding `failureCategory`, `diagnosticId`, `codingResult.outcome`, `request`, budget events and package refusals |
37
+ | `triggerInfo`, `outcomes`, `serviceReadiness` (from 0.8.0, on `get_run` and on `list_runs` without an agent id) | What started the run (the pull request and whether it was a review or a mention, the issue, the schedule or the lead), what it produced (pull requests opened, comments, checks) and each service's state, in the admin viewer API's shapes. Follow a pull request from the run that opened it through its review and fix rounds by matching one run's outcome to the next run's trigger |
38
+ | `get_agent`, `list_repositories`, `list_subagents` | How the agent is set up: prompt, model, budget, repo links and triggers, sub-agents |
39
+ | `search_help`, `get_help_article` | Help for an error code or failure category |
40
+ | `cost_report` | What runs cost, when spend is the question |
41
+ | `get_run_transcript` | The run's conversation, for Claude Code runs with `sessionResume` on |
42
+ | `stop_run` | Stops a run that's stuck |
43
+ | The PR, issue or Jira ticket | The diff, CI, the review, and the comment the run posted |
44
+
45
+ From Wardby 0.8.0, `list_agents` with `summary: true` returns each agent's id,
46
+ name, kind, model, coding provider, budget, owner and your access, without the
47
+ prompt and coding profile. Admins (the `admin` role, `admin:view` scope) can add
48
+ `all: true` to `list_agents` or `list_runs` to see every agent or run in the
49
+ deployment.
50
+
51
+ Admins can also use the [Wardby Viewer](viewer-api.md), a desktop app showing runs,
52
+ sub-agent trees, triggers and outcomes for every owner.
53
+
54
+ ## The run failed
55
+
56
+ Call `get_run` and read `status`, `error`, `failureCategory` and the final text. A
57
+ failed coding run's `error` looks like
58
+ `coding_failure_repo_access:coding_diag_…`: the middle part is the stage that
59
+ failed, and the ID is what an operator searches for.
60
+
61
+ | What you see | Likely cause | What to do |
62
+ | ------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------- |
63
+ | `repo_access` | The agent's owner lost access, or a repo link was removed | Check `list_repositories` and the owner's GitHub access |
64
+ | `repo_access_unavailable` | GitHub couldn't be reached reliably | Try again later |
65
+ | `workspace` | Often a workspace disk size above the server's limit | Lower `workspaceDiskMb`, or ask an operator to raise the limit |
66
+ | `executor` while running checks | The run may have run out of memory, among other causes | Reduce what the checks run; send the ID to an operator if it repeats |
67
+ | `merge_conflict` | The branch conflicts with its target | Read the `merge-conflict` help article |
68
+ | `service_unready` | A service the run needs, such as Postgres, didn't start | Check `.wardby/services.yaml` and the agent's `services` |
69
+ | `coding_turn_limit` | The run used all its turns | Raise `maxTurns` or narrow the task |
70
+ | `budgetEvents`, or `refused` | The run, run tree or budget group ran out of money | Raise the budget or check spend with `cost_report` |
71
+ | `packageRefusals` | A package isn't allowed or is too new | Add it to `packageAllowlist`, or wait out the release age limit |
72
+
73
+ For anything else, call `search_help` with the code or category. If that doesn't
74
+ explain it, see [When you need an operator](#when-you-need-an-operator).
75
+
76
+ **Prompt for Claude Code:**
77
+
78
+ ```
79
+ Wardby run <run id> failed. Why, and what can I do about it?
80
+ If it needs server logs, give me the diagnosticId.
81
+ ```
82
+
83
+ ## No pull request appeared
84
+
85
+ First find out whether a run started, using `list_runs` on the lead or router,
86
+ then on the coding agent.
87
+
88
+ | What `list_runs` shows | What it means | What to do |
89
+ | -------------------------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
90
+ | No new run | The request never started anything: nothing is linked with that trigger, or the person doesn't have access | Check `list_repositories` on the router. Only one agent per repo can hold the `mention` trigger |
91
+ | Lead ran, no coding run under it | The lead chose not to delegate | Read the lead's final text, which should say why |
92
+ | Coding run failed or was refused | See [The run failed](#the-run-failed) | |
93
+ | Coding run succeeded, with no PR | Check `codingResult.outcome` in `get_run` | See below |
94
+
95
+ | `outcome` | Meaning |
96
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
97
+ | `no_changes` | The agent changed nothing. Its final text should say why: the request may be vague or already done. On Claude Code, the transcript shows how it decided |
98
+ | `budget_exhausted` | It ran out of money before finishing. Raise the budget or narrow the task |
99
+ | `branch_pushed` | A local repo: there's a branch, and no PR by design |
100
+
101
+ A mention can also get no reply at all. If a server sets
102
+ `WARDBY_MENTION_EXPLANATIONS=false`, a mention that starts nothing stays silent. An
103
+ operator can look for `mention ignored` or `mention declined` in the server log.
104
+
105
+ **Prompt for Claude Code:**
106
+
107
+ ```
108
+ I asked Wardby agent <agent name> to <request> in <your-org/your-repo>,
109
+ and no pull request appeared. Why?
110
+ ```
111
+
112
+ ## The agent didn't fix what you expected
113
+
114
+ The run succeeded, so most of what you need is on the PR and the run, with no
115
+ server logs involved. Check these in order:
116
+
117
+ 1. **The diff:** what actually changed.
118
+ 2. **The PR description:** the run's final text, including what it says it tested.
119
+ If it says the tests weren't run, trust CI.
120
+ 3. **The review:** whether your review check caught the miss.
121
+ 4. **The request:** whether the issue or mention said what you meant.
122
+ 5. **The task the agent received:** `request` in `get_run` (from Wardby 0.8.0). On a
123
+ delegated run, this shows what the lead told the coding agent.
124
+ 6. **The transcript:** why it decided that. This is only for Claude Code runs with
125
+ `sessionResume` on.
126
+
127
+ The usual causes are a vague request, a lead that dropped something when it rewrote
128
+ the request, a repo rule missing from `AGENTS.md`, or a fix aimed at the symptom it
129
+ was told about.
130
+
131
+ **To fix it,** comment on the PR, mentioning the App, with what's wrong. The
132
+ follow-up pushes to the same branch and PR, so you don't start again. If the same
133
+ miss keeps happening, add the rule to `AGENTS.md` so future runs follow it.
134
+
135
+ **Prompt for Claude Code:**
136
+
137
+ ```
138
+ PR <PR URL> from Wardby didn't do what I expected: <what you expected>.
139
+ Where did it go wrong? Draft a follow-up comment, but don't post it.
140
+ ```
141
+
142
+ ## Run transcripts
143
+
144
+ A transcript is the run's conversation: the messages, the tool calls and their
145
+ results, and the files and skills the agent loaded. You can get it yourself,
146
+ without server access, on Claude Code agents.
147
+
148
+ **To turn it on,** set `codingProfile.sessionResume` to `true` with `update_agent`.
149
+ It's off by default and has to be turned on for each agent. It only applies to runs
150
+ started afterward, so an earlier failure has no transcript. The server also needs a
151
+ blob store, set in the environment of the process that launches coding runs:
152
+ `BLOB_STORE` set to `local`, `gcs` or `s3`, plus `BLOB_STORE_LOCAL_DIR`,
153
+ `BLOB_STORE_GCS_BUCKET`, or `BLOB_STORE_S3_BUCKET` and `BLOB_STORE_S3_REGION`.
154
+ Without `BLOB_STORE`, no transcript is stored.
155
+
156
+ **To read one,** call `get_run_transcript` with the run ID. It returns a download
157
+ link that works for 10 minutes and a command. Run `npx @wardby/cli@latest resume -`
158
+ in a clone of the repo and paste the link, which also lets you continue the session
159
+ on your machine.
160
+
161
+ | Transcripts | |
162
+ | ------------------ | ------------------------------------------------------------------------------ |
163
+ | **Who can read** | Anyone who can read the run: the person who triggered it and the agent's owner |
164
+ | **Stored for** | Runs that finish, fail, or stop at their budget |
165
+ | **Not stored for** | Runs stopped with `stop_run` or ended by their timeout |
166
+ | **Removed** | Thinking blocks, the system prompt, the worker's environment, account details |
167
+ | **Redacted** | The agent's attached secrets and the run's own tokens |
168
+ | **Not available** | On Codex agents |
169
+
170
+ Redaction removes secret values, not other sensitive text, so a transcript includes
171
+ what the agent saw in the repo and in command output. Turn this on only for agents
172
+ whose runs you're comfortable sharing with everyone who can read them.
173
+
174
+ **Prompts for Claude Code:**
175
+
176
+ To turn it on:
177
+
178
+ ```
179
+ Turn on transcripts for Wardby agent <agent name>.
180
+ ```
181
+
182
+ To get one:
183
+
184
+ ```
185
+ Get me the transcript for Wardby run <run id>.
186
+ ```
187
+
188
+ See [Resume Claude Code runs locally](../help/resume-runs-locally.md) for more.
189
+
190
+ ## When you need an operator
191
+
192
+ Ask someone with server access when `get_run` and help don't explain a failure. The
193
+ specific reason for a failed coding run is written only to the server log, under
194
+ its `diagnosticId`.
195
+
196
+ **Send them:** the run ID, the `diagnosticId`, the repo, and what you expected to
197
+ happen.
198
+
199
+ **What the operator can do:**
200
+
201
+ 1. Search the control-plane log for the `diagnosticId`, which holds the real reason.
202
+ 2. If that isn't enough, turn on the
203
+ [debug trace](coding-worker-isolation.md#debug-trace) with `debugTraceMinutes`
204
+ and reproduce the failure.
205
+
206
+ The debug trace won't help you directly. Only admins can turn it on, it only covers
207
+ runs started afterward, and its output goes to the run's worker log, which you can't
208
+ read. It can include prompts and repo content, so it isn't exposed through MCP.
209
+
210
+ **What the trace holds:** the agent's whole stream, the commands it ran with their
211
+ output (Claude Code), final usage and duration, and stream failures in full.
212
+ Token-shaped values are redacted. It stops at 2 MiB per run by default.
213
+
214
+ **What MCP gives you:** the trace itself isn't available through MCP. You can only
215
+ turn it on or off with `update_agent` (admin role), see when it expires with
216
+ `get_agent` (`debugTraceUntil`), and see whether a run was traced with `get_run`
217
+ (`debugTrace: true`).
218
+
219
+ **Prompt to try first.** Paste this into any client connected to the Wardby MCP:
220
+
221
+ ```
222
+ Wardby run <run id> didn't do what I expected. What happened, and what can I do?
223
+ If it needs server logs, give me the diagnosticId.
224
+ ```
225
+
226
+ ## Known gaps
227
+
228
+ Two things can't be answered without server access yet.
229
+
230
+ | Gap | Why it matters | What you can do |
231
+ | --------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------- |
232
+ | The specific reason a coding run failed | You get the stage, such as `executor`, but not why | Send the `diagnosticId` to an operator |
233
+ | Why a mention got no reply | With explanations off, a declined mention leaves no reply and no run | Turn explanations on where that's acceptable: `true` is the default |
234
+
235
+ **To turn explanations on,** an operator removes
236
+ `WARDBY_MENTION_EXPLANATIONS=false` from the server's settings, or sets it to
237
+ `true`, then redeploys. Once on, the GitHub App replies to say why a mention started
238
+ nothing. On a public repo, anyone who can read that comment can see what is or isn't
239
+ linked there.
240
+
241
+ Run transcripts are limited to Claude Code runs with `sessionResume` on, so they
242
+ don't help on Codex agents.
@@ -50,6 +50,7 @@ Install and authenticate:
50
50
  - `kubectl`
51
51
  - Helm 3 or later (installs External Secrets Operator)
52
52
  - Node.js 24 and npm
53
+ - `curl`, `openssl` and `base64` (the database grants step uses them)
53
54
 
54
55
  You also need:
55
56
 
@@ -200,7 +201,9 @@ refuses to start with either one set and no token.
200
201
  `WARDBY_GITHUB_ALLOWED_ACCOUNTS` (optional, not a secret) adds GitHub accounts
201
202
  the App serves besides its owner. Pass it to `up.sh` on every run, for example
202
203
  `WARDBY_GITHUB_ALLOWED_ACCOUNTS=acme-labs WARDBY_HOSTNAME=app.example.com deploy/gke/up.sh`;
203
- a run without it serves only the App's owner. See
204
+ a run without it serves only the App's owner. `up.sh` gives the same value to
205
+ the control plane and to the native sandbox gateway, which runs sandboxed
206
+ agents' repository tools. See
204
207
  [Which accounts the App serves](code-review-agents.md#which-accounts-the-app-serves-wardby_github_allowed_accounts).
205
208
 
206
209
  `WARDBY_MOBILE_ENABLED=true` (optional, not a secret) lets the Wardby mobile app
@@ -210,6 +213,11 @@ sign-in off. It works for normal and low-power deploys. White-label builds that
210
213
  use their own redirect URI add `WARDBY_MOBILE_REDIRECT_URI` to the control
211
214
  plane's `env` themselves. See the help article `mobile-app`.
212
215
 
216
+ `WARDBY_MENTION_EXPLANATIONS=false` (optional, not a secret) stops the GitHub
217
+ App replying to say why a mention started nothing; pass it to `up.sh` on every
218
+ run, the same way. See
219
+ [What a linked review agent does](code-review-agents.md#what-a-linked-review-agent-does).
220
+
213
221
  Generate `SECRET_APP_KEY` with:
214
222
 
215
223
  ```sh
@@ -315,10 +323,9 @@ Allow DNS and the managed certificate to converge before treating an HTTPS
315
323
  failure as an application failure.
316
324
 
317
325
  On a brand-new project, run `terraform apply` and then
318
- `bootstrap-database-iam.sh` before `up.sh`: the bootstrap has to grant the
319
- migrator before any migration can run. See "Database login" below for the
320
- exact order, including the database check `up.sh` doesn't pass until a second
321
- bootstrap run has granted the coding proxy too.
326
+ `bootstrap-database-iam.sh` once before the first `up.sh`: the bootstrap has to
327
+ grant the migrator before any migration can run. See "Database login" below
328
+ for the exact order.
322
329
 
323
330
  ### Database login
324
331
 
@@ -327,20 +334,19 @@ through the Cloud SQL Auth Proxy, via Workload Identity from one Kubernetes
327
334
  service account. What each may do inside the database comes from a `NOLOGIN`
328
335
  group role in `deploy/gke/database-grants.sql`:
329
336
 
330
- | Workload | Google service account | Kubernetes service account | May do |
331
- | -------------- | ------------------------ | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
332
- | Control plane | `<name_prefix>-app` | `wardby-control-plane` | `wardby_app`: read/write every table, including the durable executor's in schema `dbos`; never change a schema |
333
- | Coding proxy | `<name_prefix>-proxy` | `wardby-coding-proxy` | `wardby_proxy`: only its budget ledger — `CodingProxySession`/`CodingProxyRequest`/`RunModelUsage`, plus update `tokensIn`, `tokensOut`, `costUsd` and `turns` on `Run`, and read only its `id` |
334
- | Native gateway | `<name_prefix>-gateway` | `wardby-native-gateway` | Member of `wardby_app`: the same data access as the control plane, under its own login (see [Native sandbox](#native-sandbox)) |
335
- | Migrations | `<name_prefix>-migrator` | `wardby-migrator` | Acts as the table owner (`SET ROLE`), so `prisma migrate deploy` and `dbos schema` can alter and create tables |
337
+ | Workload | Google service account | Kubernetes service account | May do |
338
+ | -------------- | ------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
339
+ | Control plane | `<name_prefix>-app` | `wardby-control-plane` | `wardby_app`: read/write every table, including the durable executor's in schema `dbos`; never change a schema |
340
+ | Coding proxy | `<name_prefix>-proxy` | `wardby-coding-proxy` | `wardby_proxy`: its budget ledger (`CodingProxySession`/`CodingProxyRequest`/`RunModelUsage`: read, insert, update), the package registry's tables (`RegistryAllowance`, `RegistryFetch`, `RegistryAuditRecord`, `RegistryVersionFact`, `RegistryApprovedVersion`, `RegistryPlanRefusal`: read and insert only), the dependency cache's `DependencySnapshot` (read, insert, update, delete), update `tokensIn`, `tokensOut`, `costUsd` and `turns` on `Run` and read only its `id`, and read only the `runId`, `packageAllowlist`, `packagePolicy`, `repository`, `workerImage`, `toolImage`, `dependencyCache` and `packageAuditMode` columns of `CodingRun` |
341
+ | Native gateway | `<name_prefix>-gateway` | `wardby-native-gateway` | Member of `wardby_app`: the same data access as the control plane, under its own login (see [Native sandbox](#native-sandbox)) |
342
+ | Migrations | `<name_prefix>-migrator` | `wardby-migrator` | Acts as the table owner (`SET ROLE`), so `prisma migrate deploy` and `dbos schema` can alter and create tables |
336
343
 
337
344
  `deploy/gke/bootstrap-database-iam.sh` applies the grants as the built-in
338
- owner, from a short-lived Job inside the cluster. Run it whenever
339
- `database-grants.sql` changes, before deploying the release that needs the new
340
- grants (`bootstrap-database-iam.sh --check`, then `bootstrap-database-iam.sh`,
341
- then `up.sh`), and as part of the orders below. A release deployed ahead of its
342
- grants fails with "permission denied" wherever it uses one it doesn't have yet.
343
- The grants run in one transaction, so a statement the database refuses leaves
345
+ owner, from a short-lived Job inside the cluster. `up.sh` runs it on every
346
+ deploy, after the migrations and before the rollout (see
347
+ [Upgrading an existing deployment](#upgrading-an-existing-deployment)); you
348
+ run it by hand only on a brand-new project, below, or with `--check`. The
349
+ grants run in one transaction, so a statement the database refuses leaves
344
350
  nothing applied.
345
351
 
346
352
  The built-in owner is not a Terraform resource: `bootstrap-database-iam.sh`
@@ -349,119 +355,28 @@ SQL Admin API, uses that password once to apply the grants, and resets it to
349
355
  a value nobody holds on every exit, including a failed grant. No password is
350
356
  ever stored, printed, or passed as a process argument.
351
357
 
352
- A deployment that already runs and then gains the native gateway identity from
353
- `terraform apply` runs `deploy/gke/bootstrap-database-iam.sh` once, so the
354
- gateway's user gets its `wardby_app` membership, and then `deploy/gke/up.sh`.
355
- `up.sh`'s database check also tests the native gateway and says so if the
356
- grant is missing.
357
-
358
358
  A brand-new project runs, in this order:
359
359
 
360
360
  1. `terraform -chdir=deploy/gke apply` — creates the cluster, the instance
361
361
  and the four IAM database users. Run it yourself rather than through
362
362
  `up.sh`, which would go on to the migrations before the migrator has its
363
363
  grants.
364
- 2. `deploy/gke/bootstrap-database-iam.sh` (default mode) — fetches the
365
- cluster's kubectl credentials if you don't have them yet, creates the
366
- owner, and applies the migrator's (and the app's) grants. The coding
367
- proxy's ledger tables don't exist yet, so its grants are skipped: expected.
368
- 3. `deploy/gke/up.sh` — applies the migrations and rolls out, then stops at
369
- the database check: the coding proxy's grants are on tables that did not
370
- exist in step 2.
371
- 4. `deploy/gke/bootstrap-database-iam.sh` again — now that the tables exist,
372
- also applies the coding proxy's ledger grants.
373
- 5. `deploy/gke/up.sh` — rolls out again and passes every check.
374
-
375
- Two bootstrap runs, not one: a grant on a named table can't apply before the
376
- migration that creates that table has run.
377
-
378
- The same applies to every later release that adds a table the coding proxy
379
- uses: run `bootstrap-database-iam.sh` again after its migration. `up.sh`
380
- checks this for you. After the rollout it asks the database, as the proxy's
381
- own role, for every privilege `database-grants.sql` gives `wardby_proxy`
382
- (`deploy/gke/proxy-grant-checks.mjs`), and stops with the list of missing
383
- grants instead of letting the proxy fail registry requests with "permission
384
- denied".
385
-
386
- After upgrading an existing deployment to a release with cost attribution,
387
- re-run `bootstrap-database-iam.sh` so the coding proxy can record per-model
388
- usage for coding runs (used by the `cost_report` tool's `model` grouping).
389
- Until then coding runs still work, but their per-model breakdown isn't
390
- recorded.
364
+ 2. `deploy/gke/bootstrap-database-iam.sh` — fetches the cluster's kubectl
365
+ credentials if you don't have them yet, creates the owner, and applies the
366
+ migrator's (and the app's) grants. Grants on tables that don't exist yet
367
+ are skipped: expected.
368
+ 3. `deploy/gke/up.sh` — applies the migrations, then the grants again (now
369
+ that every table exists), then rolls out and passes every check.
391
370
 
392
371
  `bootstrap-database-iam.sh --check` runs the grants inside a transaction that
393
372
  is then rolled back, and reports success or the exact statement the database
394
- refused, without changing anything. Run it before the real run on a live
395
- deployment.
373
+ refused, without changing any grant. Use it to see why a grants step failed.
396
374
 
397
375
  `connector_enforcement` (the Cloud SQL instance setting) defaults to
398
376
  `REQUIRED`: it refuses any connection that does not come through the Auth
399
377
  Proxy or a Cloud SQL connector, and with port 5432 to the instance closed in
400
378
  every NetworkPolicy, there's no route left for a plain Postgres connection to
401
- even attempt. Leave it at the default; an older deployment still on password
402
- login moves off it on an earlier revision of this module, below.
403
-
404
- ### Moving an older deployment
405
-
406
- A deployment still on password login — from before this module retired it —
407
- can't adopt this revision directly: this revision no longer syncs the
408
- password `DATABASE_URL`, closes port 5432 and refuses non-Auth-Proxy
409
- connections, which would cut off pods still logging in with the password.
410
- It moves over in stages, because real pods are already serving traffic
411
- throughout.
412
-
413
- **1–2. Cut the running pods to IAM login, on the revision before this one.**
414
- Check out the revision of this module that added IAM login, before the
415
- password was retired: the merge of pull request #83 into `main`.
416
- `git log --oneline --first-parent main -- deploy/gke` lists the merges that
417
- changed this module, newest first; it's the one titled
418
- `Merge pull request #83 ...`, just below the merge that retired the password
419
- (`git log --oneline --merges --grep='#83' main` finds it directly). Then
420
- `git checkout <that commit>` and follow that revision's own
421
- `docs/getting-started-gke.md`, "Database login", and its order for "an
422
- existing deployment still on password login": `bootstrap-database-iam.sh
423
- --password-from-stdin --check`, the same without `--check`, then `up.sh`.
424
- That rolls out password-less pods while the password still works as a
425
- fallback, and proves the control plane and the coding proxy each read the
426
- database through their own IAM login. That revision's
427
- `connector_enforcement` default is still `NOT_REQUIRED`, so nothing that
428
- still uses the password is cut off. Then return to this revision
429
- (`git checkout main`) for the last stage.
430
-
431
- **3. Retire the password**, once every pod speaks IAM login and this change
432
- has merged to `main`:
433
-
434
- 1. Confirm nothing still uses the password: both Deployments' pods log in as
435
- IAM users, and no pod has a password `DATABASE_URL` in its effective env.
436
- 2. Delete the `database-url` Secret Manager secret:
437
- `gcloud secrets delete <name_prefix>-database-url --quiet` — this module no
438
- longer creates or reads it. Deleting it by hand first, before the next
439
- step, is what lets Terraform drop it from state instead of trying to
440
- destroy it.
441
- 3. Remove any `connector_enforcement` line from `terraform.tfvars` (or set
442
- it to `REQUIRED`), so the new default takes effect. Then `terraform plan`:
443
- expect the generated password destroyed, the `database-url` secret and
444
- its IAM binding gone from state (already deleted by hand), the old
445
- password-login user forgotten (not destroyed), `connector_enforcement`
446
- moving to `REQUIRED` on the instance (updated in place, not replaced),
447
- and no other destroy. Review
448
- the plan, then apply only once it matches that. If apply still fails
449
- trying to destroy the `database-url` secret, the secret wasn't actually
450
- deleted in step 2 — delete it and re-apply. Never turn off
451
- `secrets_deletion_protection` to get past that error: it unprotects every
452
- other secret in the same set, including `SECRET_APP_KEY` and the auth
453
- keys, and losing `SECRET_APP_KEY` makes every credential already stored
454
- in the database unreadable.
455
- 4. `deploy/gke/up.sh` — new ExternalSecrets carry no `DATABASE_URL`,
456
- NetworkPolicies no longer allow 5432, migrations, rollout, and the
457
- database and endpoint checks.
458
- 5. `deploy/gke/bootstrap-database-iam.sh` (default mode) — the guard now
459
- passes, since the Secret no longer has a `DATABASE_URL`: it sets a
460
- one-time owner password, reapplies the grants, and resets the password to
461
- a value nobody holds.
462
- 6. Verify: a direct password connection is refused (NetworkPolicy blocks
463
- 5432, and the instance refuses it too), the pods still log in through
464
- IAM, and the Terraform state holds no database password.
379
+ even attempt. Leave it at the default.
465
380
 
466
381
  ## 7. Verify
467
382
 
@@ -486,9 +401,10 @@ server answers `415`, because it checks the content type before the token.
486
401
  Create the first self-hosted login credential. It is printed once.
487
402
  `--role admin` makes this operator account an admin. Only admins can use all
488
403
  the privileged operations: `make_owner`, BYO `workerImageRef`, package
489
- approval, service catalog changes, and model catalog changes. A
490
- `package-approver` can approve packages only, a `service-manager` can change
491
- the service catalog only, and a `model-manager` can change the model catalog
404
+ approval, service catalog changes, model catalog changes, and host providers
405
+ (`hosts:admin`). A `package-approver` can approve packages only, a
406
+ `service-manager` can change the service catalog only, a `model-manager` can
407
+ change the model catalog only, and a `host-manager` can manage host providers
492
408
  only. Users created without `--role` have no roles. See
493
409
  [roles and privileged operations](security-deployment.md#roles-and-privileged-operations).
494
410
 
@@ -552,6 +468,38 @@ roll; if it fails, `up.sh` prints the `migrate` and `cloud-sql-proxy` container
552
468
  logs (and, if those are empty or the Job timed out, the Job's and pod's
553
469
  events), then stops.
554
470
 
471
+ ### Upgrading an existing deployment
472
+
473
+ To upgrade, check out the new release and re-run `deploy/gke/up.sh`. No
474
+ manual database step is needed: `up.sh` applies the migrations, then the
475
+ database grants (`deploy/gke/bootstrap-database-iam.sh`, which applies
476
+ `deploy/gke/database-grants.sql`), and only then rolls out the new pods. A
477
+ release that adds a table, a column, or a workload that needs a new grant
478
+ therefore never runs without it.
479
+
480
+ - **If the migrations fail**, `up.sh` stops before the grants and the
481
+ rollout; the running version is untouched.
482
+ - **If the grants fail**, `up.sh` stops before the rollout with a non-zero
483
+ exit; the running version keeps serving. The migrations already applied
484
+ are additive, so the running version tolerates them. Run
485
+ `deploy/gke/bootstrap-database-iam.sh --check` to see the exact statement
486
+ the database refused without changing anything, fix the cause, and re-run
487
+ `up.sh`.
488
+ - **After the rollout**, `up.sh` checks that each new pod can read the
489
+ database, and asks the database, as the coding proxy's own role, for every
490
+ privilege `database-grants.sql` gives it
491
+ (`deploy/gke/proxy-grant-checks.mjs`). A missing grant stops the deploy
492
+ with a non-zero exit and the list of what's missing, rather than letting
493
+ the proxy fail registry requests with "permission denied".
494
+
495
+ Never run two `up.sh` deploys against the same project at once: both would
496
+ run migrations, set and reset the database owner's password, and roll out
497
+ over each other. Nothing locks against it, so wait for one to finish.
498
+
499
+ You run `bootstrap-database-iam.sh` by hand only on a brand-new project,
500
+ between `terraform apply` and the first `up.sh` (see
501
+ [Database login](#database-login)), or as `--check` for a dry run.
502
+
555
503
  ### Durable executor
556
504
 
557
505
  The control plane runs native runs on the durable executor (`EXECUTOR=dbos`):
@@ -576,24 +524,33 @@ the step that was in flight runs again. Coding runs are Kubernetes Jobs and are
576
524
  `up.sh` re-run whose source did not change, runs continue. When you deploy
577
525
  new code, the old pod first **drains**: after its 30-second `preStop` it
578
526
  stops the scheduler and waits for the runs it is executing to finish, up to
579
- `SHUTDOWN_DRAIN_SECONDS` (default 600), while the new pod serves traffic.
580
- An idle pod exits at once. A run still going after that limit is marked
581
- `lost`; if an `@`-mention started it, its status comment on GitHub says the
582
- request was interrupted and should be repeated. The manifest's
583
- `terminationGracePeriodSeconds` (720) must stay above the drain limit plus
584
- the `preStop` delay.
527
+ `SHUTDOWN_DRAIN_SECONDS` (540 in the GKE manifest), while the new pod
528
+ serves traffic. Open HTTP connections, such as a connected MCP client's
529
+ stream, get 10 seconds to finish and are then closed; clients reconnect to
530
+ the new pod.
531
+ An idle pod exits at once. A native run that is waiting in a `delegate_to_*`
532
+ call on a coding sub-agent or a sandbox-mode native sub-agent is taken over
533
+ by the new version: it continues when the sub-agent finishes, without
534
+ repeating the turns it already took. A run that was mid-turn, waiting on
535
+ another tool, or waiting on a control-plane native sub-agent is marked
536
+ `lost` rather than taken over, as is a taken-over run whose recorded steps
537
+ no longer match the new code, and a run still going after the drain limit.
538
+ The sub-agent runs a lost run started are stopped (reason
539
+ `parent run lost`). If an `@`-mention started a lost run, its status comment
540
+ on GitHub says the request was interrupted and should be repeated. The
541
+ manifest's `terminationGracePeriodSeconds` (600) must stay above the drain
542
+ limit plus the `preStop` delay. Autopilot does not allow more than 600: a
543
+ larger value is lowered to 600, so to change the budget, lower
544
+ `SHUTDOWN_DRAIN_SECONDS` rather than raising the grace period.
585
545
  - **Data at rest and retention.** `dbos.operation_outputs` holds every step's
586
546
  output — prompts, model responses and full tool results — with no retention
587
547
  limit. Pruning finished workflows is the operator's job; see
588
548
  [Durable executor](security-deployment.md#durable-executor) for what is
589
549
  stored and how to prune it with `DBOS.deleteWorkflow`.
590
550
 
591
- **Enabling it on an existing deployment.** The grants changed, so apply them
592
- before deploying: run `deploy/gke/bootstrap-database-iam.sh --check`, then
593
- `deploy/gke/bootstrap-database-iam.sh`, then `deploy/gke/up.sh`. Without the
594
- grants the new control-plane pod crash-loops with "permission denied" while
595
- the old one keeps serving, and `up.sh` stops at the rollout. On a brand-new
596
- project the order under "Database login" already covers it.
551
+ **Enabling it on an existing deployment.** Re-run `deploy/gke/up.sh`: it
552
+ applies the durable executor's grants before the rollout (see
553
+ [Upgrading an existing deployment](#upgrading-an-existing-deployment)).
597
554
 
598
555
  **Switching back** to the in-process executor: set `EXECUTOR` to `in-process`
599
556
  in `deploy/kind-coding/manifests/overlays/gke-autopilot/control-plane.yaml`
@@ -629,7 +586,7 @@ delete the class and re-run `up.sh` to change them.
629
586
 
630
587
  ### Native sandbox
631
588
 
632
- Native sandbox requires Wardby 0.5.4 or later.
589
+ Native sandbox requires Wardby 0.6.0 or later.
633
590
 
634
591
  `up.sh` deploys everything the [native sandbox](native-sandbox.md) needs on
635
592
  this cluster. It builds and pushes the `native-worker` image, checks it (Node is
@@ -643,10 +600,10 @@ control plane is configured with `NATIVE_SANDBOX_LAUNCHER=kubernetes`,
643
600
  `NATIVE_SANDBOX_ENFORCEMENT_TIMEOUT_MS=60000`. Worker pods use the gVisor runtime
644
601
  class, `KUBERNETES_PLATFORM=gke-autopilot`, and the run priority class.
645
602
 
646
- - **One-time bootstrap.** The gateway has its own database login. After
647
- `terraform apply` adds its identity to an existing deployment, run
648
- `deploy/gke/bootstrap-database-iam.sh` once, then `deploy/gke/up.sh`; see
649
- [Database login](#database-login).
603
+ - **Database login.** The gateway has its own database login. `up.sh`
604
+ applies its `wardby_app` membership before the rollout, so adding its
605
+ identity to an existing deployment needs no manual step; see
606
+ [Upgrading an existing deployment](#upgrading-an-existing-deployment).
650
607
  - **Enable per agent.** Nothing runs in the sandbox until you opt an agent in:
651
608
  set its `nativeExecutionMode` to `sandbox` with the `update_agent` MCP tool
652
609
  (native agents only).
@@ -723,6 +680,13 @@ low-power mode until its rollout ends, and the mark stops it scaling them back
723
680
  down. With the mode on they stay up through the deploy (its database checks
724
681
  need them) and sleep one idle window later if nothing uses them.
725
682
 
683
+ **Failed replicas.** Without the headroom placeholder, a rollout is more likely
684
+ to hit Autopilot's admission race: the node rejects a new pod with `OutOfcpu`
685
+ and the Deployment starts a replacement. The rejected pod stays behind as a
686
+ Failed pod. After the rollouts, `up.sh` deletes Failed pods of the control
687
+ plane, coding proxy and native gateway (never coding-run or sandbox pods), and
688
+ the Viewer shows any such leftover as an old replica rather than a failure.
689
+
726
690
  **Sleeping now.** To skip the idle window (for example right after a test), an
727
691
  admin calls the MCP tool `power_sleep`, optionally with `target` set to `proxy`
728
692
  or `gateway` (default both). It scales the target to 0 at once, but never stops
@@ -792,6 +756,32 @@ that schedules onto a fresh node — one that has never pulled the image before
792
756
  cached. Raise `KUBERNETES_READY_TIMEOUT_MS` if you see runs fail
793
757
  `service_unready` only on new nodes.
794
758
 
759
+ ### Run dependency cache
760
+
761
+ Off by default. To keep npm `node_modules` snapshots for coding runs
762
+ (see [Dependency cache](coding-packages.md#dependency-cache)), set
763
+ `dependency_cache_enabled = true` and a unique `dependency_cache_bucket_name` in
764
+ `terraform.tfvars`, and deploy with `WARDBY_DEPENDENCY_CACHE=true
765
+ deploy/gke/up.sh` (it grants the coding proxy's role the `DependencySnapshot`
766
+ table before the rollout; see
767
+ [Upgrading an existing deployment](#upgrading-an-existing-deployment)). Keep
768
+ `dependency_cache_max_age_days` equal to the proxy's
769
+ `WARDBY_DEPENDENCY_CACHE_MAX_AGE_DAYS` (default 14). Details:
770
+ [`deploy/gke/README.md`](../deploy/gke/README.md#run-dependency-cache).
771
+
772
+ ### Session transcripts
773
+
774
+ Off by default. To keep the transcripts of Claude Code agents with
775
+ `sessionResume` on (see
776
+ [Resume a run locally](coding-agent-setup.md#resume-a-run-locally)), set
777
+ `session_transcripts_enabled = true` and a unique
778
+ `session_transcripts_bucket_name` in `terraform.tfvars`, and deploy with
779
+ `WARDBY_SESSION_TRANSCRIPTS=true deploy/gke/up.sh`. The bucket is separate from
780
+ the dependency cache bucket and only the control plane can use it; its
781
+ lifecycle rule and the control plane's `RUN_TRANSCRIPT_RETENTION_DAYS` both
782
+ come from `session_transcripts_retention_days` (default 30). Details:
783
+ [`deploy/gke/README.md`](../deploy/gke/README.md#session-transcripts).
784
+
795
785
  ### Roll back
796
786
 
797
787
  Images are pinned by digest, so undoing a rollout restores exactly what ran
@@ -803,11 +793,9 @@ kubectl -n wardby-coding rollout undo deploy/wardby-coding-proxy
803
793
  kubectl -n wardby-coding rollout undo deploy/wardby-native-gateway
804
794
  ```
805
795
 
806
- `rollout undo` restores only the Deployments' images and pod templates — there
807
- is no password path to fall back to any more, so a rollback is safe only for
808
- a version that still speaks IAM login. It does not touch any NetworkPolicy: a
809
- change to the database egress rules themselves is not undone by `rollout
810
- undo`.
796
+ `rollout undo` restores only the Deployments' images and pod templates. It
797
+ does not touch the database grants or any NetworkPolicy: a change to the
798
+ database egress rules themselves is not undone by `rollout undo`.
811
799
 
812
800
  Database migrations only go forward: a rollback does not undo a schema change.
813
801
  That is safe while every migration is additive (new tables, nullable columns,