@wardby/cli 0.5.3 → 0.7.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 (763) hide show
  1. package/.env.example +33 -0
  2. package/README.md +25 -14
  3. package/deploy/local/docker-compose.quickstart-coding.yml +13 -0
  4. package/dist/claude-coding-worker/context.d.ts +22 -0
  5. package/dist/claude-coding-worker/context.js +92 -0
  6. package/dist/claude-coding-worker/driver.d.ts +27 -3
  7. package/dist/claude-coding-worker/driver.js +161 -20
  8. package/dist/claude-coding-worker/main.js +34 -6
  9. package/dist/claude-coding-worker/sdk.js +25 -5
  10. package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
  11. package/dist/claude-coding-worker/tool-socket.js +111 -0
  12. package/dist/claude-coding-worker/transcript.d.ts +18 -0
  13. package/dist/claude-coding-worker/transcript.js +77 -0
  14. package/dist/cli-help.d.ts +1 -1
  15. package/dist/cli-help.js +6 -2
  16. package/dist/cli-native-mode.d.ts +9 -0
  17. package/dist/cli-native-mode.js +20 -0
  18. package/dist/cli.d.ts +3 -1
  19. package/dist/cli.js +161 -11
  20. package/dist/coding/claude-context.d.ts +45 -0
  21. package/dist/coding/claude-context.js +434 -0
  22. package/dist/coding/continuation-wording.d.ts +35 -0
  23. package/dist/coding/continuation-wording.js +73 -0
  24. package/dist/coding/linked-issue-note.d.ts +23 -0
  25. package/dist/coding/linked-issue-note.js +47 -0
  26. package/dist/coding/merge-wording.d.ts +28 -0
  27. package/dist/coding/merge-wording.js +78 -0
  28. package/dist/coding/pr-description-note.d.ts +9 -0
  29. package/dist/coding/pr-description-note.js +32 -0
  30. package/dist/coding/profile.d.ts +50 -118
  31. package/dist/coding/profile.js +51 -4
  32. package/dist/coding/protected-path-wording.d.ts +8 -0
  33. package/dist/coding/protected-path-wording.js +1 -1
  34. package/dist/coding/protocol.d.ts +292 -270
  35. package/dist/coding/protocol.js +322 -15
  36. package/dist/coding/redact.d.ts +3 -0
  37. package/dist/coding/redact.js +12 -0
  38. package/dist/coding/registry/allowlist.d.ts +12 -0
  39. package/dist/coding/registry/allowlist.js +14 -1
  40. package/dist/coding/registry/audit-mode.d.ts +153 -0
  41. package/dist/coding/registry/audit-mode.js +304 -0
  42. package/dist/coding/registry/lockfile-shared.d.ts +36 -0
  43. package/dist/coding/registry/lockfile-shared.js +128 -0
  44. package/dist/coding/registry/lockfiles.js +1 -1
  45. package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
  46. package/dist/coding/registry/npm-lockfile-formats.js +41 -0
  47. package/dist/coding/registry/npm-lockfile.d.ts +8 -4
  48. package/dist/coding/registry/npm-lockfile.js +4 -6
  49. package/dist/coding/registry/npm.js +78 -8
  50. package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
  51. package/dist/coding/registry/pnpm-lockfile.js +189 -0
  52. package/dist/coding/registry/pypi-plan.d.ts +50 -0
  53. package/dist/coding/registry/pypi-plan.js +406 -0
  54. package/dist/coding/registry/pypi-requirements.d.ts +58 -0
  55. package/dist/coding/registry/pypi-requirements.js +155 -0
  56. package/dist/coding/registry/pypi.d.ts +3 -27
  57. package/dist/coding/registry/pypi.js +40 -154
  58. package/dist/coding/registry/refusal-hints.d.ts +20 -0
  59. package/dist/coding/registry/refusal-hints.js +61 -0
  60. package/dist/coding/registry/refusal-wording.d.ts +11 -0
  61. package/dist/coding/registry/refusal-wording.js +56 -0
  62. package/dist/coding/registry/report.d.ts +70 -8
  63. package/dist/coding/registry/report.js +112 -5
  64. package/dist/coding/registry/types.d.ts +58 -8
  65. package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
  66. package/dist/coding/registry/yarn-lockfile.js +367 -0
  67. package/dist/coding/services/catalog.d.ts +37 -351
  68. package/dist/coding/transcript/claude-code.d.ts +13 -0
  69. package/dist/coding/transcript/claude-code.js +273 -0
  70. package/dist/coding/transcript/download-protocol.d.ts +30 -0
  71. package/dist/coding/transcript/download-protocol.js +18 -0
  72. package/dist/coding/transcript/format.d.ts +20 -0
  73. package/dist/coding/transcript/format.js +32 -0
  74. package/dist/coding/transcript/recorder.d.ts +51 -0
  75. package/dist/coding/transcript/recorder.js +225 -0
  76. package/dist/coding/transcript/resume/checkout.d.ts +31 -0
  77. package/dist/coding/transcript/resume/checkout.js +203 -0
  78. package/dist/coding/transcript/resume/command.d.ts +17 -0
  79. package/dist/coding/transcript/resume/command.js +176 -0
  80. package/dist/coding/transcript/resume/download.d.ts +20 -0
  81. package/dist/coding/transcript/resume/download.js +153 -0
  82. package/dist/coding/transcript/resume/launch.d.ts +38 -0
  83. package/dist/coding/transcript/resume/launch.js +128 -0
  84. package/dist/coding/transcript/resume/session-file.d.ts +13 -0
  85. package/dist/coding/transcript/resume/session-file.js +79 -0
  86. package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
  87. package/dist/coding/transcript/resume/stand-in.js +49 -0
  88. package/dist/coding-worker/artifact.d.ts +16 -3
  89. package/dist/coding-worker/artifact.js +5 -3
  90. package/dist/coding-worker/debug-trace.d.ts +6 -5
  91. package/dist/coding-worker/debug-trace.js +13 -18
  92. package/dist/coding-worker/dependency-cache.d.mts +229 -0
  93. package/dist/coding-worker/dependency-cache.mjs +2123 -0
  94. package/dist/coding-worker/driver.d.ts +4 -3
  95. package/dist/coding-worker/driver.js +118 -38
  96. package/dist/coding-worker/errors.d.ts +1 -0
  97. package/dist/coding-worker/errors.js +32 -0
  98. package/dist/coding-worker/sdk.d.ts +6 -0
  99. package/dist/coding-worker/sdk.js +1 -0
  100. package/dist/coding-worker/skills.d.ts +23 -0
  101. package/dist/coding-worker/skills.js +117 -0
  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 +13 -0
  105. package/dist/config/dependency-cache.d.ts +23 -0
  106. package/dist/config/dependency-cache.js +32 -0
  107. package/dist/config/github-allowed-accounts.d.ts +15 -0
  108. package/dist/config/github-allowed-accounts.js +36 -0
  109. package/dist/config/low-power.d.ts +12 -0
  110. package/dist/config/low-power.js +18 -0
  111. package/dist/config/mobile.d.ts +12 -0
  112. package/dist/config/mobile.js +18 -0
  113. package/dist/config/providers.d.ts +65 -3
  114. package/dist/config/providers.js +147 -11
  115. package/dist/config/test-simulators.d.ts +82 -0
  116. package/dist/config/test-simulators.js +305 -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-queue.d.ts +2 -1
  130. package/dist/core/coding-queue.js +7 -0
  131. package/dist/core/cron.d.ts +19 -1
  132. package/dist/core/cron.js +17 -0
  133. package/dist/core/datastores.js +1 -1
  134. package/dist/core/db.d.ts +16 -6
  135. package/dist/core/db.js +12 -10
  136. package/dist/core/deferred-coding.d.ts +14 -0
  137. package/dist/core/deferred-coding.js +62 -0
  138. package/dist/core/delegation-child.d.ts +25 -0
  139. package/dist/core/delegation-child.js +37 -0
  140. package/dist/core/dispatch.d.ts +53 -0
  141. package/dist/core/dispatch.js +167 -57
  142. package/dist/core/engine-native.js +10 -6
  143. package/dist/core/error-code.d.ts +38 -0
  144. package/dist/core/error-code.js +168 -0
  145. package/dist/core/grants.d.ts +19 -6
  146. package/dist/core/grants.js +55 -6
  147. package/dist/core/host-events.d.ts +67 -5
  148. package/dist/core/host-events.js +571 -37
  149. package/dist/core/host-status.d.ts +85 -3
  150. package/dist/core/host-status.js +298 -20
  151. package/dist/core/issue-bridge.d.ts +50 -6
  152. package/dist/core/issue-bridge.js +151 -20
  153. package/dist/core/issue-events.d.ts +1 -1
  154. package/dist/core/issue-events.js +16 -11
  155. package/dist/core/issue-status.d.ts +1 -1
  156. package/dist/core/issue-status.js +68 -29
  157. package/dist/core/logger.d.ts +5 -0
  158. package/dist/core/logger.js +14 -1
  159. package/dist/core/lost-run-children.d.ts +6 -0
  160. package/dist/core/lost-run-children.js +32 -0
  161. package/dist/core/mark-ready.d.ts +34 -0
  162. package/dist/core/mark-ready.js +152 -0
  163. package/dist/core/markdown-code.d.ts +8 -0
  164. package/dist/core/markdown-code.js +107 -0
  165. package/dist/core/memory-tools.js +7 -0
  166. package/dist/core/merge-order-check.d.ts +130 -0
  167. package/dist/core/merge-order-check.js +343 -0
  168. package/dist/core/notification-dispatcher.d.ts +70 -0
  169. package/dist/core/notification-dispatcher.js +368 -0
  170. package/dist/core/notification-templates.d.ts +19 -0
  171. package/dist/core/notification-templates.js +139 -0
  172. package/dist/core/notifications.d.ts +10 -0
  173. package/dist/core/notifications.js +38 -0
  174. package/dist/core/pg-auth.d.ts +22 -0
  175. package/dist/core/pg-auth.js +152 -0
  176. package/dist/core/power-composition.d.ts +16 -0
  177. package/dist/core/power-composition.js +37 -0
  178. package/dist/core/power-idle.d.ts +14 -0
  179. package/dist/core/power-idle.js +30 -0
  180. package/dist/core/power.d.ts +71 -0
  181. package/dist/core/power.js +202 -0
  182. package/dist/core/pull-request-state-sync.js +2 -2
  183. package/dist/core/reconciler.d.ts +8 -5
  184. package/dist/core/reconciler.js +37 -6
  185. package/dist/core/related-pull-requests.d.ts +59 -7
  186. package/dist/core/related-pull-requests.js +140 -25
  187. package/dist/core/reply-parts.d.ts +21 -0
  188. package/dist/core/reply-parts.js +73 -0
  189. package/dist/core/repo-access.d.ts +15 -0
  190. package/dist/core/repo-access.js +66 -0
  191. package/dist/core/review-fix.d.ts +38 -1
  192. package/dist/core/review-fix.js +209 -7
  193. package/dist/core/review-host-checks.d.ts +1 -1
  194. package/dist/core/review-host-tools.d.ts +23 -0
  195. package/dist/core/review-host-tools.js +156 -14
  196. package/dist/core/review-reads.d.ts +55 -0
  197. package/dist/core/review-reads.js +233 -0
  198. package/dist/core/run-status.d.ts +12 -0
  199. package/dist/core/run-status.js +12 -0
  200. package/dist/core/runner.d.ts +384 -5
  201. package/dist/core/runner.js +1244 -372
  202. package/dist/core/schedule-start.d.ts +12 -0
  203. package/dist/core/schedule-start.js +14 -0
  204. package/dist/core/secret-broker-config.d.ts +39 -0
  205. package/dist/core/secret-broker-config.js +112 -0
  206. package/dist/core/secret-guard.d.ts +46 -0
  207. package/dist/core/secret-guard.js +104 -0
  208. package/dist/core/secret-guarded-stores.d.ts +12 -0
  209. package/dist/core/secret-guarded-stores.js +41 -0
  210. package/dist/core/secret-spans.d.ts +50 -0
  211. package/dist/core/secret-spans.js +94 -0
  212. package/dist/core/secrets.d.ts +39 -4
  213. package/dist/core/secrets.js +148 -40
  214. package/dist/core/stop-run.d.ts +46 -0
  215. package/dist/core/stop-run.js +61 -0
  216. package/dist/core/workflow-event-recorder.d.ts +14 -0
  217. package/dist/core/workflow-event-recorder.js +120 -0
  218. package/dist/core/workflow-events.d.ts +94 -0
  219. package/dist/core/workflow-events.js +48 -0
  220. package/dist/core/workflow-run-events.d.ts +18 -0
  221. package/dist/core/workflow-run-events.js +75 -0
  222. package/dist/core/zod-json-schema.d.ts +4 -0
  223. package/dist/core/zod-json-schema.js +39 -0
  224. package/dist/core/zod3-window.d.ts +35 -0
  225. package/dist/core/zod3-window.js +124 -0
  226. package/dist/generated/prisma/browser.d.ts +92 -3
  227. package/dist/generated/prisma/client.d.ts +92 -3
  228. package/dist/generated/prisma/commonInputTypes.d.ts +364 -54
  229. package/dist/generated/prisma/enums.d.ts +37 -0
  230. package/dist/generated/prisma/enums.js +31 -0
  231. package/dist/generated/prisma/internal/class.d.ts +132 -0
  232. package/dist/generated/prisma/internal/class.js +4 -4
  233. package/dist/generated/prisma/internal/prismaNamespace.d.ts +1332 -142
  234. package/dist/generated/prisma/internal/prismaNamespace.js +227 -5
  235. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +234 -0
  236. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +227 -5
  237. package/dist/generated/prisma/models/Agent.d.ts +464 -7
  238. package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
  239. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +301 -1
  240. package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
  241. package/dist/generated/prisma/models/CodingProxySession.d.ts +114 -1
  242. package/dist/generated/prisma/models/CodingRun.d.ts +1841 -1
  243. package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
  244. package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
  245. package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
  246. package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
  247. package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
  248. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1713 -0
  249. package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
  250. package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1551 -0
  251. package/dist/generated/prisma/models/NativeGatewaySession.js +1 -0
  252. package/dist/generated/prisma/models/NativeWarmWorker.d.ts +1296 -0
  253. package/dist/generated/prisma/models/NativeWarmWorker.js +1 -0
  254. package/dist/generated/prisma/models/NotificationChannel.d.ts +1543 -0
  255. package/dist/generated/prisma/models/NotificationChannel.js +1 -0
  256. package/dist/generated/prisma/models/NotificationDelivery.d.ts +1502 -0
  257. package/dist/generated/prisma/models/NotificationDelivery.js +1 -0
  258. package/dist/generated/prisma/models/NotificationThread.d.ts +1090 -0
  259. package/dist/generated/prisma/models/NotificationThread.js +1 -0
  260. package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
  261. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
  262. package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
  263. package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
  264. package/dist/generated/prisma/models/Run.d.ts +1619 -58
  265. package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
  266. package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
  267. package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
  268. package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
  269. package/dist/generated/prisma/models/RunTranscript.js +1 -0
  270. package/dist/generated/prisma/models/Secret.d.ts +37 -1
  271. package/dist/generated/prisma/models/SecretBrokerChange.d.ts +1101 -0
  272. package/dist/generated/prisma/models/SecretBrokerChange.js +1 -0
  273. package/dist/generated/prisma/models/WorkflowEvent.d.ts +1422 -0
  274. package/dist/generated/prisma/models/WorkflowEvent.js +1 -0
  275. package/dist/generated/prisma/models.d.ts +12 -0
  276. package/dist/help/build.js +4 -2
  277. package/dist/help/catalog.d.ts +1 -1
  278. package/dist/help/catalog.js +31 -6
  279. package/dist/help-index.json +2584 -146
  280. package/dist/import/create.js +49 -3
  281. package/dist/import/neutral-schema.d.ts +50 -277
  282. package/dist/import/neutral-schema.js +7 -4
  283. package/dist/knowledge/check.d.ts +1 -1
  284. package/dist/knowledge/cli.d.ts +11 -1
  285. package/dist/knowledge/cli.js +37 -4
  286. package/dist/knowledge/concept.d.ts +3 -19
  287. package/dist/knowledge/location.d.ts +31 -0
  288. package/dist/knowledge/location.js +78 -0
  289. package/dist/mcp/auth/access.d.ts +11 -2
  290. package/dist/mcp/auth/access.js +15 -1
  291. package/dist/mcp/auth/ownership.d.ts +7 -7
  292. package/dist/mcp/auth/repo-authorization.js +14 -0
  293. package/dist/mcp/auth/resource-server.d.ts +2 -1
  294. package/dist/mcp/auth/resource-server.js +7 -2
  295. package/dist/mcp/auth/self-hosted/browser.d.ts +1 -1
  296. package/dist/mcp/auth/self-hosted/browser.js +19 -6
  297. package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
  298. package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
  299. package/dist/mcp/context.d.ts +6 -0
  300. package/dist/mcp/host-events/github-ingress.d.ts +25 -1
  301. package/dist/mcp/host-events/github-ingress.js +70 -1
  302. package/dist/mcp/index.d.ts +19 -0
  303. package/dist/mcp/index.js +117 -20
  304. package/dist/mcp/server.d.ts +13 -0
  305. package/dist/mcp/server.js +33 -14
  306. package/dist/mcp/tools/agents.d.ts +4 -0
  307. package/dist/mcp/tools/agents.js +277 -24
  308. package/dist/mcp/tools/datastore.js +17 -8
  309. package/dist/mcp/tools/grants.js +9 -3
  310. package/dist/mcp/tools/memory.js +11 -1
  311. package/dist/mcp/tools/notification-channels.d.ts +2 -0
  312. package/dist/mcp/tools/notification-channels.js +293 -0
  313. package/dist/mcp/tools/packages.d.ts +2 -0
  314. package/dist/mcp/tools/packages.js +195 -0
  315. package/dist/mcp/tools/power.d.ts +2 -0
  316. package/dist/mcp/tools/power.js +77 -0
  317. package/dist/mcp/tools/repositories.js +18 -5
  318. package/dist/mcp/tools/run-access.d.ts +16 -0
  319. package/dist/mcp/tools/run-access.js +25 -0
  320. package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
  321. package/dist/mcp/tools/run-transcript-download.js +129 -0
  322. package/dist/mcp/tools/run-transcript.d.ts +19 -0
  323. package/dist/mcp/tools/run-transcript.js +70 -0
  324. package/dist/mcp/tools/runs.d.ts +0 -6
  325. package/dist/mcp/tools/runs.js +41 -14
  326. package/dist/mcp/tools/scheduling.js +3 -1
  327. package/dist/mcp/tools/secret-broker-compat.d.ts +12 -0
  328. package/dist/mcp/tools/secret-broker-compat.js +23 -0
  329. package/dist/mcp/tools/secret-elicitation-form.d.ts +22 -2
  330. package/dist/mcp/tools/secret-elicitation-form.js +205 -10
  331. package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
  332. package/dist/mcp/tools/secret-elicitation-server.js +10 -54
  333. package/dist/mcp/tools/secret-elicitation.d.ts +38 -3
  334. package/dist/mcp/tools/secret-elicitation.js +110 -12
  335. package/dist/mcp/tools/secrets.js +186 -9
  336. package/dist/mcp/tools/stop-run.d.ts +2 -0
  337. package/dist/mcp/tools/stop-run.js +82 -0
  338. package/dist/mcp/tools/subagents.js +2 -2
  339. package/dist/mcp/tools/tools.d.ts +2 -2
  340. package/dist/mcp/tools/tools.js +47 -11
  341. package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
  342. package/dist/mcp/transport/stdio-link-host.js +67 -0
  343. package/dist/mcp/transport/streamable-http.d.ts +13 -0
  344. package/dist/mcp/transport/streamable-http.js +41 -1
  345. package/dist/native-worker/composition.d.ts +23 -0
  346. package/dist/native-worker/composition.js +77 -0
  347. package/dist/native-worker/docker-isolation.d.ts +65 -0
  348. package/dist/native-worker/docker-isolation.js +183 -0
  349. package/dist/native-worker/docker-launcher.d.ts +110 -0
  350. package/dist/native-worker/docker-launcher.js +297 -0
  351. package/dist/native-worker/gateway-server.d.ts +77 -0
  352. package/dist/native-worker/gateway-server.js +412 -0
  353. package/dist/native-worker/gateway.d.ts +70 -0
  354. package/dist/native-worker/gateway.js +263 -0
  355. package/dist/native-worker/http-server.d.ts +24 -0
  356. package/dist/native-worker/http-server.js +113 -0
  357. package/dist/native-worker/http-transport.d.ts +17 -0
  358. package/dist/native-worker/http-transport.js +88 -0
  359. package/dist/native-worker/kubernetes-isolation.d.ts +90 -0
  360. package/dist/native-worker/kubernetes-isolation.js +218 -0
  361. package/dist/native-worker/kubernetes-launcher.d.ts +106 -0
  362. package/dist/native-worker/kubernetes-launcher.js +375 -0
  363. package/dist/native-worker/launch.d.ts +62 -0
  364. package/dist/native-worker/launch.js +49 -0
  365. package/dist/native-worker/ledger.d.ts +125 -0
  366. package/dist/native-worker/ledger.js +245 -0
  367. package/dist/native-worker/loopback.d.ts +12 -0
  368. package/dist/native-worker/loopback.js +44 -0
  369. package/dist/native-worker/main.d.ts +8 -0
  370. package/dist/native-worker/main.js +85 -0
  371. package/dist/native-worker/protocol.d.ts +296 -0
  372. package/dist/native-worker/protocol.js +246 -0
  373. package/dist/native-worker/sandbox-executor.d.ts +83 -0
  374. package/dist/native-worker/sandbox-executor.js +284 -0
  375. package/dist/native-worker/stderr-redaction.d.ts +77 -0
  376. package/dist/native-worker/stderr-redaction.js +237 -0
  377. package/dist/native-worker/stdio.d.ts +29 -0
  378. package/dist/native-worker/stdio.js +189 -0
  379. package/dist/native-worker/warm-delivery.d.ts +16 -0
  380. package/dist/native-worker/warm-delivery.js +33 -0
  381. package/dist/native-worker/warm-pool-ledger.d.ts +39 -0
  382. package/dist/native-worker/warm-pool-ledger.js +73 -0
  383. package/dist/native-worker/warm-pool.d.ts +107 -0
  384. package/dist/native-worker/warm-pool.js +283 -0
  385. package/dist/native-worker/worker.d.ts +17 -0
  386. package/dist/native-worker/worker.js +141 -0
  387. package/dist/observability/metrics.js +6 -1
  388. package/dist/providers/auth/authorization-server.d.ts +3 -0
  389. package/dist/providers/auth/index.js +2 -0
  390. package/dist/providers/auth/self-hosted.d.ts +14 -2
  391. package/dist/providers/auth/self-hosted.js +54 -4
  392. package/dist/providers/chat/fake.d.ts +46 -0
  393. package/dist/providers/chat/fake.js +39 -0
  394. package/dist/providers/chat/index.d.ts +4 -0
  395. package/dist/providers/chat/index.js +8 -0
  396. package/dist/providers/chat/slack.d.ts +37 -0
  397. package/dist/providers/chat/slack.js +105 -0
  398. package/dist/providers/chat/types.d.ts +42 -0
  399. package/dist/providers/chat/types.js +19 -0
  400. package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
  401. package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
  402. package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
  403. package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
  404. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
  405. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
  406. package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
  407. package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
  408. package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
  409. package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
  410. package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
  411. package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
  412. package/dist/providers/coding-proxy/hold.d.ts +32 -0
  413. package/dist/providers/coding-proxy/hold.js +86 -0
  414. package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
  415. package/dist/providers/coding-proxy/interrupted.js +104 -0
  416. package/dist/providers/coding-proxy/memory-ledger.d.ts +15 -2
  417. package/dist/providers/coding-proxy/memory-ledger.js +84 -8
  418. package/dist/providers/coding-proxy/metering.d.ts +16 -0
  419. package/dist/providers/coding-proxy/metering.js +27 -4
  420. package/dist/providers/coding-proxy/prisma-ledger.d.ts +15 -2
  421. package/dist/providers/coding-proxy/prisma-ledger.js +179 -67
  422. package/dist/providers/coding-proxy/proxy.d.ts +14 -1
  423. package/dist/providers/coding-proxy/proxy.js +166 -14
  424. package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
  425. package/dist/providers/coding-proxy/registry/audit.js +94 -17
  426. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
  427. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
  428. package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
  429. package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
  430. package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
  431. package/dist/providers/coding-proxy/registry/plan.js +201 -48
  432. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
  433. package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
  434. package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
  435. package/dist/providers/coding-proxy/registry/service.js +579 -112
  436. package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
  437. package/dist/providers/coding-proxy/registry/store.js +54 -1
  438. package/dist/providers/coding-proxy/runtime.d.ts +4 -0
  439. package/dist/providers/coding-proxy/runtime.js +78 -16
  440. package/dist/providers/coding-proxy/server.d.ts +6 -1
  441. package/dist/providers/coding-proxy/server.js +45 -1
  442. package/dist/providers/coding-proxy/types.d.ts +65 -1
  443. package/dist/providers/datastore/types.d.ts +5 -0
  444. package/dist/providers/engine/types.d.ts +36 -2
  445. package/dist/providers/engine/types.js +39 -0
  446. package/dist/providers/executor/composition.d.ts +31 -1
  447. package/dist/providers/executor/composition.js +81 -8
  448. package/dist/providers/executor/container.d.ts +385 -9
  449. package/dist/providers/executor/container.js +1234 -99
  450. package/dist/providers/executor/dbos-status.d.ts +31 -0
  451. package/dist/providers/executor/dbos-status.js +64 -0
  452. package/dist/providers/executor/dbos.d.ts +91 -0
  453. package/dist/providers/executor/dbos.js +319 -26
  454. package/dist/providers/executor/deferred.d.ts +44 -0
  455. package/dist/providers/executor/deferred.js +100 -0
  456. package/dist/providers/executor/in-process.d.ts +9 -1
  457. package/dist/providers/executor/in-process.js +14 -4
  458. package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
  459. package/dist/providers/executor/linked-issue-reader.js +30 -0
  460. package/dist/providers/executor/routing.d.ts +39 -10
  461. package/dist/providers/executor/routing.js +77 -32
  462. package/dist/providers/executor/types.d.ts +25 -0
  463. package/dist/providers/index.d.ts +2 -1
  464. package/dist/providers/issue-tracker/types.d.ts +17 -0
  465. package/dist/providers/issue-tracker/types.js +39 -1
  466. package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
  467. package/dist/providers/jobs/claude-tool-setup.js +5 -2
  468. package/dist/providers/jobs/docker-isolation.d.ts +8 -0
  469. package/dist/providers/jobs/docker-isolation.js +17 -0
  470. package/dist/providers/jobs/docker.d.ts +1 -0
  471. package/dist/providers/jobs/docker.js +29 -4
  472. package/dist/providers/jobs/fake-kubernetes-api.d.ts +23 -2
  473. package/dist/providers/jobs/fake-kubernetes-api.js +45 -1
  474. package/dist/providers/jobs/kubernetes-api.d.ts +25 -1
  475. package/dist/providers/jobs/kubernetes-api.js +17 -0
  476. package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
  477. package/dist/providers/jobs/kubernetes-client.js +61 -3
  478. package/dist/providers/jobs/kubernetes-dry-run-fixture.d.ts +6 -1
  479. package/dist/providers/jobs/kubernetes-dry-run-fixture.js +6 -3
  480. package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
  481. package/dist/providers/jobs/kubernetes-isolation.js +23 -1
  482. package/dist/providers/jobs/kubernetes-platform.d.ts +4 -1
  483. package/dist/providers/jobs/kubernetes-platform.js +38 -1
  484. package/dist/providers/jobs/kubernetes-preflight.d.ts +2 -1
  485. package/dist/providers/jobs/kubernetes-preflight.js +4 -2
  486. package/dist/providers/jobs/kubernetes.d.ts +42 -2
  487. package/dist/providers/jobs/kubernetes.js +178 -19
  488. package/dist/providers/jobs/metadata-probes.d.ts +11 -0
  489. package/dist/providers/jobs/metadata-probes.js +13 -0
  490. package/dist/providers/jobs/types.d.ts +42 -0
  491. package/dist/providers/jobs/types.js +13 -1
  492. package/dist/providers/llm/anthropic.js +5 -1
  493. package/dist/providers/llm/bedrock.d.ts +0 -12
  494. package/dist/providers/llm/bedrock.js +4 -0
  495. package/dist/providers/llm/claude-messages.d.ts +3 -1
  496. package/dist/providers/llm/claude-messages.js +4 -1
  497. package/dist/providers/llm/claude-provider.d.ts +2 -2
  498. package/dist/providers/llm/claude-provider.js +2 -2
  499. package/dist/providers/llm/openai.d.ts +2 -2
  500. package/dist/providers/llm/openai.js +6 -2
  501. package/dist/providers/llm/routing.d.ts +2 -2
  502. package/dist/providers/llm/routing.js +2 -2
  503. package/dist/providers/llm/types.d.ts +12 -2
  504. package/dist/providers/review-host/github-events.d.ts +9 -1
  505. package/dist/providers/review-host/github-events.js +34 -12
  506. package/dist/providers/review-host/github.d.ts +39 -2
  507. package/dist/providers/review-host/github.js +274 -29
  508. package/dist/providers/review-host/local.d.ts +8 -4
  509. package/dist/providers/review-host/local.js +49 -31
  510. package/dist/providers/review-host/patch-pages.d.ts +41 -0
  511. package/dist/providers/review-host/patch-pages.js +176 -0
  512. package/dist/providers/review-host/review-format.d.ts +19 -1
  513. package/dist/providers/review-host/review-format.js +38 -7
  514. package/dist/providers/review-host/types.d.ts +157 -2
  515. package/dist/providers/review-host/types.js +8 -0
  516. package/dist/providers/storage/gcs.d.ts +63 -0
  517. package/dist/providers/storage/gcs.js +69 -0
  518. package/dist/providers/storage/index.d.ts +15 -0
  519. package/dist/providers/storage/index.js +14 -0
  520. package/dist/providers/storage/local.d.ts +24 -0
  521. package/dist/providers/storage/local.js +92 -0
  522. package/dist/providers/storage/meter.d.ts +14 -0
  523. package/dist/providers/storage/meter.js +34 -0
  524. package/dist/providers/storage/s3.d.ts +41 -0
  525. package/dist/providers/storage/s3.js +107 -0
  526. package/dist/providers/storage/types.d.ts +37 -3
  527. package/dist/providers/storage/types.js +21 -4
  528. package/dist/providers/vcs/git.d.ts +33 -2
  529. package/dist/providers/vcs/git.js +324 -22
  530. package/dist/providers/vcs/github-remote.d.ts +26 -3
  531. package/dist/providers/vcs/github-remote.js +124 -14
  532. package/dist/providers/vcs/github.d.ts +246 -12
  533. package/dist/providers/vcs/github.js +521 -61
  534. package/dist/providers/vcs/index.js +8 -1
  535. package/dist/providers/vcs/pr-description.d.ts +127 -0
  536. package/dist/providers/vcs/pr-description.js +270 -0
  537. package/dist/providers/vcs/remote.d.ts +33 -1
  538. package/dist/providers/vcs/routing.d.ts +4 -2
  539. package/dist/providers/vcs/routing.js +6 -0
  540. package/dist/providers/vcs/types.d.ts +80 -3
  541. package/dist/quickstart/coding-seed.d.ts +21 -3
  542. package/dist/quickstart/coding-seed.js +283 -3
  543. package/dist/quickstart/images.d.ts +2 -0
  544. package/dist/quickstart/images.js +7 -1
  545. package/dist/quickstart/reviewer-prompt.d.ts +1 -1
  546. package/dist/quickstart/reviewer-prompt.js +6 -6
  547. package/dist/quickstart-images.json +1 -1
  548. package/dist/sandbox/brokered-fetch.d.ts +23 -0
  549. package/dist/sandbox/brokered-fetch.js +37 -0
  550. package/dist/sandbox/generated/zod.bundle.js +62 -1
  551. package/dist/sandbox/generated/zod3.bundle.js +5 -0
  552. package/dist/sandbox/host-functions.d.ts +35 -0
  553. package/dist/sandbox/host-functions.js +150 -91
  554. package/dist/sandbox/prelude.js +7 -1
  555. package/dist/sandbox/run-in-sandbox.d.ts +19 -0
  556. package/dist/sandbox/run-in-sandbox.js +28 -10
  557. package/dist/sandbox/safe-fetch.d.ts +2 -0
  558. package/dist/sandbox/safe-fetch.js +3 -1
  559. package/dist/sandbox/secret-broker-sigv4.d.ts +2 -0
  560. package/dist/sandbox/secret-broker-sigv4.js +49 -0
  561. package/dist/sandbox/secret-broker.d.ts +34 -0
  562. package/dist/sandbox/secret-broker.js +161 -0
  563. package/dist/sandbox/tool-capabilities.d.ts +10 -30
  564. package/dist/sandbox/user-tool.d.ts +14 -0
  565. package/dist/sandbox/user-tool.js +32 -0
  566. package/dist/sandbox/zod-params.d.ts +37 -5
  567. package/dist/sandbox/zod-params.js +181 -26
  568. package/dist/serve.js +25 -0
  569. package/dist/viewer/api-schema.d.ts +372 -2454
  570. package/dist/viewer/api-schema.js +29 -0
  571. package/dist/viewer/build-schemas.js +10 -3
  572. package/dist/viewer/event-bus.d.ts +6 -0
  573. package/dist/viewer/event-bus.js +16 -7
  574. package/dist/viewer/graph.d.ts +5 -2
  575. package/dist/viewer/graph.js +7 -2
  576. package/dist/viewer/http.d.ts +0 -1
  577. package/dist/viewer/http.js +2 -2
  578. package/dist/viewer/infra.js +25 -2
  579. package/dist/viewer/limits.d.ts +4 -0
  580. package/dist/viewer/limits.js +4 -0
  581. package/dist/viewer/openapi.d.ts +15 -0
  582. package/dist/viewer/openapi.js +170 -0
  583. package/dist/wardby-bin.js +10 -0
  584. package/docs/README.md +7 -0
  585. package/docs/agent-recipes.md +114 -27
  586. package/docs/architecture-runtime.md +16 -1
  587. package/docs/code-review-agents.md +689 -45
  588. package/docs/coding-agent-setup.md +602 -12
  589. package/docs/coding-packages.md +1037 -92
  590. package/docs/coding-services.md +30 -13
  591. package/docs/coding-worker-byo-images.md +218 -6
  592. package/docs/coding-worker-isolation.md +173 -44
  593. package/docs/getting-started-gke.md +332 -129
  594. package/docs/getting-started-identity-provider.md +31 -11
  595. package/docs/getting-started.md +14 -4
  596. package/docs/jira-agents.md +22 -9
  597. package/docs/knowledge/blob-not-found-semantics.md +41 -0
  598. package/docs/knowledge/bounded-file-descriptor.md +52 -0
  599. package/docs/knowledge/delegation-admission-slots.md +52 -0
  600. package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
  601. package/docs/knowledge/import-rename-target.md +52 -0
  602. package/docs/knowledge/index.md +57 -0
  603. package/docs/knowledge/log.md +9 -0
  604. package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
  605. package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
  606. package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
  607. package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
  608. package/docs/knowledge/overview-cli.md +74 -0
  609. package/docs/knowledge/overview-coding-proxy.md +72 -0
  610. package/docs/knowledge/overview-coding.md +72 -0
  611. package/docs/knowledge/overview-config.md +60 -0
  612. package/docs/knowledge/overview-core.md +72 -0
  613. package/docs/knowledge/overview-deploy.md +83 -0
  614. package/docs/knowledge/overview-mcp.md +61 -0
  615. package/docs/knowledge/overview-prisma.md +72 -0
  616. package/docs/knowledge/overview-providers.md +89 -0
  617. package/docs/knowledge/overview-sandbox.md +83 -0
  618. package/docs/knowledge/overview-surfaces.md +83 -0
  619. package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
  620. package/docs/knowledge/proxy-settlement-projections.md +41 -0
  621. package/docs/knowledge/run-pricing-first-writer.md +43 -0
  622. package/docs/knowledge/schedule-claim-transaction.md +41 -0
  623. package/docs/knowledge/secret-entry-replica-contract.md +52 -0
  624. package/docs/knowledge/terminal-run-first-writer.md +41 -0
  625. package/docs/knowledge/transactional-agent-authorization.md +52 -0
  626. package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
  627. package/docs/knowledge/warm-input-publication.md +30 -0
  628. package/docs/knowledge/workspace-staging-failure.md +54 -0
  629. package/docs/knowledge.md +54 -14
  630. package/docs/native-sandbox.md +731 -0
  631. package/docs/observability.md +4 -0
  632. package/docs/release-verification.md +9 -0
  633. package/docs/security-deployment.md +146 -14
  634. package/docs/slack-notifications.md +268 -0
  635. package/docs/tool-secrets.md +284 -0
  636. package/docs/viewer-api.md +46 -5
  637. package/docs/viewer-api.openapi.yml +1404 -0
  638. package/help/admin-viewer.md +29 -3
  639. package/help/agent-recipes.md +27 -0
  640. package/help/architecture-agent.md +11 -6
  641. package/help/brokered-secrets.md +79 -0
  642. package/help/build-claude-code-image.md +131 -0
  643. package/help/build-worker-image.md +6 -7
  644. package/help/builder-agent.md +19 -6
  645. package/help/code-review-agents.md +243 -10
  646. package/help/coding-packages.md +156 -6
  647. package/help/cost-attribution.md +9 -5
  648. package/help/creating-agents.md +14 -1
  649. package/help/dependency-cache.md +143 -0
  650. package/help/deploy-gke.md +23 -9
  651. package/help/deployment-targets.md +25 -14
  652. package/help/errors/budget-exhausted.md +187 -0
  653. package/help/errors/budget-group-exhausted.md +5 -1
  654. package/help/errors/coding-provider-not-configured.md +2 -2
  655. package/help/errors/coding-stream-quota-exceeded.md +33 -0
  656. package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
  657. package/help/errors/continuation-closed.md +9 -12
  658. package/help/errors/database-auth-invalid.md +28 -0
  659. package/help/errors/delegation-conflict.md +24 -0
  660. package/help/errors/file-list-truncated.md +45 -0
  661. package/help/errors/full-read-required.md +49 -0
  662. package/help/errors/github-account-not-allowed.md +29 -0
  663. package/help/errors/graph-incomplete.md +43 -0
  664. package/help/errors/graph-limit.md +43 -0
  665. package/help/errors/low-power-disabled.md +29 -0
  666. package/help/errors/low-power-scale-forbidden.md +35 -0
  667. package/help/errors/low-power-wake-timeout.md +30 -0
  668. package/help/errors/merge-conflict.md +49 -0
  669. package/help/errors/mobile-disabled.md +31 -0
  670. package/help/errors/native-sandbox-capacity.md +22 -0
  671. package/help/errors/native-sandbox-deadline-exceeded.md +19 -0
  672. package/help/errors/native-sandbox-docker-failed.md +20 -0
  673. package/help/errors/native-sandbox-gateway-error.md +20 -0
  674. package/help/errors/native-sandbox-gateway-unavailable.md +21 -0
  675. package/help/errors/native-sandbox-image-not-pinned.md +19 -0
  676. package/help/errors/native-sandbox-isolation-mismatch.md +20 -0
  677. package/help/errors/native-sandbox-launch-abandoned.md +21 -0
  678. package/help/errors/native-sandbox-network-unenforced.md +22 -0
  679. package/help/errors/native-sandbox-requires-catalog.md +31 -0
  680. package/help/errors/native-sandbox-unavailable.md +19 -0
  681. package/help/errors/native-sandbox-warm-delivery-failed.md +21 -0
  682. package/help/errors/native-sandbox-worker-exited.md +21 -0
  683. package/help/errors/native-sandbox-worker-lost.md +20 -0
  684. package/help/errors/native-sandbox-worker-unready.md +22 -0
  685. package/help/errors/package-not-allowed-pending.md +52 -0
  686. package/help/errors/package-not-allowed.md +51 -0
  687. package/help/errors/package-refusals.md +43 -0
  688. package/help/errors/patch-cursor-malformed.md +31 -0
  689. package/help/errors/run-lost.md +39 -0
  690. package/help/errors/run-transcript-download.md +44 -0
  691. package/help/errors/secret-broker-body-invalid.md +26 -0
  692. package/help/errors/secret-broker-changed.md +20 -0
  693. package/help/errors/secret-broker-config-invalid.md +30 -0
  694. package/help/errors/secret-broker-conflict.md +27 -0
  695. package/help/errors/secret-broker-destination-denied.md +28 -0
  696. package/help/errors/secret-broker-value-invalid.md +28 -0
  697. package/help/errors/secret-brokered.md +24 -0
  698. package/help/errors/secret-in-value.md +69 -0
  699. package/help/errors/secret-not-brokered.md +25 -0
  700. package/help/errors/slack-auth-failed.md +48 -0
  701. package/help/errors/slack-channel-unreachable.md +39 -0
  702. package/help/errors/slack-not-configured.md +33 -0
  703. package/help/errors/target-merge.md +40 -0
  704. package/help/fix-merge-conflicts.md +73 -0
  705. package/help/getting-started.md +4 -5
  706. package/help/github-app-setup.md +132 -0
  707. package/help/github.md +40 -1
  708. package/help/identity-and-access.md +7 -1
  709. package/help/jira.md +23 -6
  710. package/help/knowledge.md +16 -7
  711. package/help/local-repositories.md +3 -4
  712. package/help/low-power-mode.md +131 -0
  713. package/help/merge-order-check.md +122 -0
  714. package/help/mobile-app.md +54 -0
  715. package/help/native-capabilities.md +29 -1
  716. package/help/native-sandbox.md +150 -0
  717. package/help/observability.md +8 -0
  718. package/help/operating-agents.md +5 -0
  719. package/help/package-audit-mode.md +91 -0
  720. package/help/related-pull-requests.md +80 -16
  721. package/help/repo-instructions-and-skills.md +91 -0
  722. package/help/resume-runs-locally.md +131 -0
  723. package/help/review-fix-rounds.md +43 -1
  724. package/help/sharing-agents.md +59 -0
  725. package/help/slack-notifications.md +76 -0
  726. package/help/status-comments.md +31 -0
  727. package/help/stop-run.md +58 -0
  728. package/help/troubleshooting/budgets.md +28 -0
  729. package/help/troubleshooting/coding-workers.md +99 -7
  730. package/package.json +27 -13
  731. package/prisma/migrations/20261009000003_native_execution_mode/migration.sql +12 -0
  732. package/prisma/migrations/20261009000004_native_gateway_ledger/migration.sql +65 -0
  733. package/prisma/migrations/20261009000005_native_gateway_call_child_agent/migration.sql +5 -0
  734. package/prisma/migrations/20261009000006_run_deferred_start_stop/migration.sql +14 -0
  735. package/prisma/migrations/20261009000007_native_gateway_network_ready/migration.sql +5 -0
  736. package/prisma/migrations/20261010000001_workflow_notifications/migration.sql +99 -0
  737. package/prisma/migrations/20261011000001_native_gateway_session_status_index/migration.sql +2 -0
  738. package/prisma/migrations/20261012000001_native_warm_worker/migration.sql +32 -0
  739. package/prisma/migrations/20261013000001_coding_run_merge_order/migration.sql +2 -0
  740. package/prisma/migrations/20261013000001_secret_broker/migration.sql +17 -0
  741. package/prisma/migrations/20261013000002_deferred_review_request/migration.sql +4 -0
  742. package/prisma/migrations/20261014000000_repo_skills/migration.sql +15 -0
  743. package/prisma/migrations/20261015000001_coding_run_merge_order_index/migration.sql +2 -0
  744. package/prisma/migrations/20261015000002_no_change_rereview/migration.sql +2 -0
  745. package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
  746. package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
  747. package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
  748. package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
  749. package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
  750. package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
  751. package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
  752. package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
  753. package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
  754. package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
  755. package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
  756. package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
  757. package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
  758. package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
  759. package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
  760. package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
  761. package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
  762. package/prisma/schema.prisma +631 -146
  763. package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
@@ -0,0 +1,143 @@
1
+ ---
2
+ id: dependency-cache
3
+ title: Dependency cache for coding runs
4
+ summary: Restore npm node_modules from a verified snapshot before a coding agent starts, so runs skip the install.
5
+ audience: operator
6
+ tags: [coding-agents, packages, npm, node_modules, dependency-cache, cache, npm-ci, lockfile, snapshot, restore, blob-store, workspaces, tool_unavailable, budget_too_small, snapshot_skipped, timeout, CODING_CPUS, CODING_MEMORY_MB, disk, sha_mismatch, unsafe_archive, dependencyCache, worker_input_failed, workerImageRef]
7
+ appliesTo: >=0.7.0
8
+ ---
9
+
10
+ # Dependency cache for coding runs
11
+
12
+ With the dependency cache on, a coding run's `node_modules` is prepared
13
+ **before the agent starts** from a snapshot in a blob store, so the agent
14
+ doesn't spend minutes on `npm ci`. It covers npm only. Off by default.
15
+
16
+ ## How it behaves
17
+
18
+ For each eligible project the run reports one result in `get_run`
19
+ (`dependencyCache.projects[]`):
20
+
21
+ - `hit`: a snapshot for this exact lockfile was restored; nothing was
22
+ installed. A snapshot that fails to download or verify isn't used: the
23
+ project installs `cold` instead.
24
+ - `nearest`: a snapshot for an older lockfile of the same repository and folder
25
+ was restored, then updated to the committed lockfile.
26
+ - `cold`: no snapshot, so `npm ci` ran and the result was stored (when it fit the disk).
27
+ - `skipped` or `refused`: nothing was prepared and the agent installs for
28
+ itself. A skip never fails the run; its `reason` says why.
29
+
30
+ The agent's task says dependencies are pre-installed and not to run `npm ci`
31
+ there (it would delete the prepared tree); `npm install <package>` is fine.
32
+ A pull request gets a "Dependency cache: restored `node_modules` for ..." line
33
+ for folders restored from a snapshot.
34
+
35
+ ## Why it is safe
36
+
37
+ - Snapshots are built only by Wardby, before the agent starts. Then the upload
38
+ window is sealed: the worker seals it, and the coding proxy seals it itself
39
+ on the run's first model request, so the agent can't read or write the
40
+ cache.
41
+ - A restore happens only after the coding proxy re-approves the committed
42
+ lockfile under the agent's current allowlist, release age and advisory
43
+ policy. A policy that now refuses a package means no restore.
44
+ - Agents on the same repository share snapshots (the key is the repository,
45
+ project folder, lockfile and image, not the package policy), and each
46
+ restore is still gated by that agent's own current policy.
47
+ - Keys come from the server, not the worker. Downloads are checked against the
48
+ SHA-256 and size the proxy recorded (that is the integrity check), the
49
+ archive is scanned, and the tree's recorded package versions are compared
50
+ with the lockfile before use. A damaged snapshot is deleted and rebuilt.
51
+ A restore skips re-scanning an archive whose scan result was recorded at
52
+ upload and whose digest matches; extraction still enforces every archive
53
+ rule.
54
+ - The packages are the ones the agent's policy approves; the cache doesn't vet
55
+ their contents beyond what a normal install through the registry does.
56
+ - Install scripts are not cached. Snapshots are built with `--ignore-scripts`;
57
+ `npm rebuild` runs after the seal, only when needed, with a minimal
58
+ environment.
59
+
60
+ ## When it applies
61
+
62
+ - npm with `package-lock.json` `lockfileVersion` 2 or 3, at the repository root
63
+ and/or up to 4 projects up to 3 folders deep.
64
+ - Ignored: `node_modules`, dot-folders, symlinks, folders that already have a
65
+ `node_modules`, and npm workspaces monorepos (root and members are skipped).
66
+ - The agent needs a package allowlist.
67
+ - Every worker image must come from a release that includes the cache: the
68
+ Codex worker images, the Claude Code worker image and its tool runner
69
+ images. An older Codex or Claude Code worker image fails the run at input
70
+ (`worker_input_failed`). Rebuild a `workerImageRef` image `FROM` that
71
+ release's driver image (Codex) or tool runner image (Claude Code) first;
72
+ `create_agent` and `update_agent` warn when an agent has both.
73
+
74
+ ## Turn it on
75
+
76
+ 1. On the coding proxy: `WARDBY_DEPENDENCY_CACHE=true` plus a blob store
77
+ (`BLOB_STORE=gcs|s3|local` and its bucket or directory variables). GKE:
78
+ `dependency_cache_enabled` and `dependency_cache_bucket_name` in Terraform,
79
+ then `WARDBY_DEPENDENCY_CACHE=true deploy/gke/up.sh`. AWS: the same Terraform
80
+ variables, plus the `BLOB_STORE_S3_*` proxy variables. kind:
81
+ `WARDBY_DEPENDENCY_CACHE=true bash deploy/kind-coding/up.sh` (not durable).
82
+ Docker quickstart: add `WARDBY_DEPENDENCY_CACHE=true` to `.wardby/.env`
83
+ (requires wardby 0.7.0 or later).
84
+ 2. GKE: nothing extra. `up.sh` grants the proxy the `DependencySnapshot`
85
+ table before the rollout.
86
+ 3. Per agent, once the worker images are current: `update_agent` with
87
+ `codingProfile.dependencyCache: true`. This needs `packages:approve` or
88
+ `agents:admin`.
89
+
90
+ ## Disk use
91
+
92
+ The cache works within a budget: the run's workspace disk
93
+ (`workspaceDiskMb`) less what the checkout uses and a margin. Restores and the
94
+ snapshot archive are held to it while they are written. An install is checked
95
+ only before it starts: at least 1 GiB must be left (or twice the project's
96
+ tree when a snapshot of it was seen), otherwise the project is
97
+ `budget_too_small` and the agent installs for itself. npm's writes during the
98
+ install itself aren't bounded. After its own install the worker deletes npm's
99
+ download cache (`_cacache`), then archives the tree for upload only if the
100
+ archive fits what is left. A snapshot skipped for space keeps the installed
101
+ tree and the `cold` or `nearest` result; the worker log says
102
+ `snapshot_skipped` (reason `budget`), not `get_run`.
103
+
104
+ Tuning, on the proxy: `WARDBY_DEPENDENCY_CACHE_MAX_SNAPSHOT_MB` (1024),
105
+ `_REPO_CAP_MB` (4096), `_TOTAL_CAP_MB` (20480), `_MAX_AGE_DAYS` (14, counted
106
+ from creation, so snapshots are rebuilt periodically) and `_UPLOAD_SECONDS`
107
+ (900). On GKE and AWS keep the Terraform `dependency_cache_max_age_days` equal
108
+ to `_MAX_AGE_DAYS`; the bucket also deletes objects older than that plus 7 days.
109
+
110
+ ## Troubleshooting
111
+
112
+ Read `dependencyCache` in `get_run`; then match the `reason`. A rejected `hit`
113
+ or `nearest` snapshot is not a reason: the project shows `cold`.
114
+
115
+ | Reason | What to do |
116
+ | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
117
+ | `no_lockfile`, `lockfile_unreadable`, `no_package_json`, `no_dependencies` | Nothing to cache in that folder. |
118
+ | `lockfile_version` | Regenerate the lockfile with npm 7 or later. |
119
+ | `workspaces`, `workspace_member`, `shrinkwrap_present` | Not supported; the agent installs itself. |
120
+ | `node_modules_present`, `cache_dir_unsafe` | Remove the committed `node_modules` or `.cache` (symlink) from the repository. |
121
+ | `too_many_projects` | Only 4 projects per run are prepared. |
122
+ | `no_registry`, `plan_failed`, `plan_refused` | Give the agent a package allowlist and fix refused packages; see [Approve packages for coding agents](help://coding-packages). A plan the proxy left incomplete is retried for up to 10 minutes (at most 5 attempts per project, 8 plans per run). |
123
+ | `cache_unavailable`, `plan_required`, `sealed`, `lookup_failed`, `download_failed` | Check `WARDBY_DEPENDENCY_CACHE` and `BLOB_STORE` on the proxy, the store's permissions and the proxy log. |
124
+ | `size_mismatch`, `sha_mismatch`, `unsafe_archive`, `inconsistent` | The snapshot was not trusted; the project installed `cold` instead. It is rebuilt when it ages out or is deleted. Repeats point at the blob store. |
125
+ | `too_large`, `over_budget`, `budget_unknown`, `budget_too_small` | Raise `WARDBY_DEPENDENCY_CACHE_MAX_SNAPSHOT_MB` or the agent's `workspaceDiskMb` (see [Disk use](#disk-use)). |
126
+ | `install_failed`, `timeout`, `cancelled`, `internal_error`, `worker_error`, `report_invalid` | The agent installs for itself; check the worker log. The preparation gets at most 20 minutes or half the time left before the run's deadline. On Docker a huge restore can exhaust the tmpfs inode limit before its bytes. |
127
+ | `tool_unavailable` | Claude Code tool-runner image predates the cache or is custom; rebuild it from the current tool-runner image. The proxy still seals on the run's first model request. |
128
+ | `already_started`, `invalid_deadline` | Not expected: a command ran before preparation, or the worker and tool runner images are from different releases. |
129
+ | `worker_input_failed` (the run fails) | A Codex or Claude Code worker image, or a `workerImageRef` image, older than the cache. Update the images, or rebuild the custom image `FROM` the current release, before turning the cache on. |
130
+
131
+ Every run of a large project installing `cold` again usually means its
132
+ snapshot is never stored. Check the worker log for `snapshot_skipped` with
133
+ reason `timeout`: its `limit` says which bound ran out. For `pack` or
134
+ `deadline`, give coding pods more CPU (`CODING_CPUS=2`); for `upload_window`,
135
+ raise `WARDBY_DEPENDENCY_CACHE_UPLOAD_SECONDS`. A large tree (about 1 GiB) can
136
+ also need more than the default 2048 MiB of memory to install under gVisor;
137
+ raise `CODING_MEMORY_MB`.
138
+
139
+ `rebuild` of `failed`, `timeout` or `unsealed` means native add-ons may be
140
+ unbuilt; the agent can run `npm rebuild`.
141
+
142
+ The full reference, with every limit, is
143
+ [`docs/coding-packages.md`](../docs/coding-packages.md#dependency-cache).
@@ -3,7 +3,7 @@ id: deploy-gke
3
3
  title: Deploy Wardby on GKE Autopilot
4
4
  summary: Use the supported Google Cloud path for a private database, isolated coding workers, and HTTPS ingress.
5
5
  audience: operator
6
- tags: [deployment, gke, gcp, kubernetes, production, secrets, jira]
6
+ tags: [deployment, gke, gcp, kubernetes, production, secrets, jira, upgrade, database-grants]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
@@ -25,23 +25,37 @@ The deployment process is:
25
25
  1. Install `gcloud`, Terraform, Docker with `linux/amd64` support, `kubectl`,
26
26
  Helm, Node.js 24, and authenticate to the target project.
27
27
  2. Configure `deploy/gke/terraform.tfvars`, apply Terraform, and prepare the
28
- Gateway's address, certificate map, Cloud Armor policy, and DNS record.
28
+ Gateway's address, certificate map, Cloud Armor policy, and DNS record. On
29
+ a brand-new project, run `deploy/gke/bootstrap-database-iam.sh` once after
30
+ `terraform apply`, so the migrator has its database grants before the
31
+ first migration.
29
32
  3. Put first-time values in an untracked `.env.local`; `deploy/gke/up.sh`
30
33
  seeds Secret Manager without overwriting existing production values.
31
34
  Jira settings are optional there, all or none; see [Jira](jira.md).
32
- 4. Run `HOSTNAME=wardby.example.com deploy/gke/up.sh`, then verify DNS,
33
- certificate issuance, database IAM bootstrap, and service health.
35
+ 4. Run `WARDBY_HOSTNAME=wardby.example.com deploy/gke/up.sh`, then verify DNS,
36
+ certificate issuance, and service health.
37
+ Use `WARDBY_HOSTNAME`, not `HOSTNAME` (shells set that to the machine name);
38
+ the script refuses local names such as `*.lan` or `*.local`, and asks you
39
+ to confirm (or set `WARDBY_HOSTNAME_CHANGE=<new hostname>`) before moving
40
+ a deployment to a different hostname.
34
41
 
35
- When a release changes `deploy/gke/database-grants.sql`, re-run the database
36
- grants bootstrap **before** deploying that release, so the proxy role can
37
- already write the tables and columns it adds (such as per-model usage for
38
- [cost attribution](cost-attribution.md), or a run's live turn count). Until the
39
- grants are applied, the coding proxy's writes are refused and coding runs fail.
42
+ To upgrade, re-run `deploy/gke/up.sh` from the new release. It applies the
43
+ migrations, then the database grants (`deploy/gke/database-grants.sql`), and
44
+ only then rolls out the new pods, so a release that adds tables or columns the
45
+ coding proxy uses (such as per-model usage for
46
+ [cost attribution](cost-attribution.md)) needs no manual grants step. If the
47
+ grants fail, `up.sh` stops before the rollout with a non-zero exit;
48
+ `deploy/gke/bootstrap-database-iam.sh --check` shows the refused statement
49
+ without changing anything. See
50
+ [Upgrading an existing deployment](../docs/getting-started-gke.md#upgrading-an-existing-deployment).
40
51
 
41
52
  The Kubernetes launcher runs Codex and Claude Code coding workers; a Claude
42
53
  Code pod adds a tool-runner sidecar with its own image. Configure an identity
43
54
  provider and GitHub App before allowing people to use the public endpoint.
44
55
 
56
+ To lower the idle cost of a lightly used deployment, see
57
+ [Low-power mode](../docs/getting-started-gke.md#low-power-mode) (Wardby 0.6.0 and later).
58
+
45
59
  ## Plan it with your assistant
46
60
 
47
61
  If you are an assistant connected to Wardby over MCP and the user asked to plan
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  id: deployment-targets
3
3
  title: Choose a deployment target
4
- summary: Pick the supported Wardby deployment path and understand its operational boundary.
4
+ summary: Compare local, self-hosted, and GKE deployment paths and their operational boundaries.
5
5
  audience: operator
6
6
  tags: [deployment, docker, gke, aws, production]
7
7
  appliesTo: >=0.2.1
@@ -9,31 +9,42 @@ appliesTo: >=0.2.1
9
9
 
10
10
  # Choose a deployment target
11
11
 
12
- Wardby has one local path and two production-ready deployment shapes:
12
+ Wardby has a local development path, a self-hosted container deployment
13
+ reference, and a supported GKE reference deployment. The references provide
14
+ different parts of a production environment; operators must complete the
15
+ remaining controls and verification before accepting production work.
13
16
 
14
17
  - **Local development:** `wardby quickstart` runs the control plane locally
15
18
  with its portable PostgreSQL container. It is the best place to evaluate,
16
19
  develop agents, and connect a local Codex or Claude Code client.
17
- - **Production container baseline:** run the published production image with
18
- PostgreSQL, HTTPS ingress, durable storage, backups, and an operator-owned
19
- identity provider. The Compose and Caddy configuration is a reference
20
- baseline, not a managed platform.
20
+ `deploy/kind-coding` is a local Kubernetes proof harness, not a production
21
+ deployment.
22
+ - **Self-hosted container deployment** (e.g., Docker Compose on a VM or
23
+ on-premises host): Wardby supplies runtime and migration images plus a
24
+ Compose/Caddy edge reference. The operator supplies PostgreSQL, secrets,
25
+ network and egress controls, backups and restore testing, monitoring, and a
26
+ separate coding-controller host. Configure authentication for the deployment.
21
27
  - **Google Kubernetes Engine Autopilot:** the supported Google Cloud path. It
22
- provisions GKE, private-IP Cloud SQL, Artifact Registry, isolated Codex and
23
- Claude Code workers, HTTPS Gateway, and GCP-native secret and network
24
- controls. See [Deploy on GKE](deploy-gke.md).
28
+ provisions GKE, private-IP Cloud SQL with backups and point-in-time recovery,
29
+ Artifact Registry, isolated Codex and Claude Code workers, HTTPS Gateway, and
30
+ GCP-native secret and network controls. Operators still need to choose
31
+ availability, test recovery, and configure alerts and retention. See
32
+ [Deploy on GKE](deploy-gke.md).
25
33
 
26
- AWS is supported as a portable runtime target and has a Bedrock Claude adapter,
27
- but Wardby does not ship a native AWS deployment module. Other cloud providers
34
+ AWS can run the portable runtime and has a Bedrock Claude adapter, but a native
35
+ AWS deployment module is planned and has not shipped. Other cloud providers
28
36
  can run the production container image with equivalent database, ingress,
29
37
  identity, secret, isolation, and observability controls; that infrastructure is
30
- operator-owned.
38
+ operator-owned. On Amazon EKS, set `KUBERNETES_PLATFORM=eks` (gVisor node group
39
+ required) and, for RDS, `DATABASE_AUTH=rds-iam`; see "Database
40
+ authentication" in
41
+ [`docs/security-deployment.md`](../docs/security-deployment.md).
31
42
 
32
43
  The older `deploy/gcp` Cloud Run module is deprecated. Do not choose it for a
33
44
  new installation.
34
45
 
35
- Before going live, complete the deployment security checklist and make a
36
- backup, upgrades, alerting, and incident-response plan. Read
46
+ Before going live, complete the release verification and security deployment
47
+ checks, and make plans for backups, upgrades, alerts, and incident response. Read
37
48
  [`docs/getting-started.md`](../docs/getting-started.md) for the local and
38
49
  container setup, and [`docs/security-deployment.md`](../docs/security-deployment.md)
39
50
  for the production controls.
@@ -0,0 +1,187 @@
1
+ ---
2
+ id: errors/budget-exhausted
3
+ title: Run stopped out of budget (budget_exhausted)
4
+ summary: A coding run stopped because its next model request did not fit what was left of its budget; get_run's budgetEvents says which limit and why.
5
+ audience: operator
6
+ tags: [budget, budget_exhausted, coding_budget_exhausted, overrun, allowedOverrunPercent, overrun_unavailable, draft]
7
+ appliesTo: ">=0.7.0"
8
+ ---
9
+
10
+ # Run stopped out of budget
11
+
12
+ ## What happened
13
+
14
+ Before each model request the coding proxy holds an amount against the run's
15
+ budget. The first request of a conversation (and any fallback) holds the worst
16
+ case: the whole request body as new input plus the largest reply the request
17
+ allows, priced at the model's output rate. After a mostly cached reply in the
18
+ same conversation, the cached part of the prompt is held at the cache-read
19
+ rate instead, so the hold is much smaller. A request whose hold does not fit in what is
20
+ left is refused, and the run ends `budget_exhausted` (its error reads
21
+ `coding_budget_exhausted: <sentence>`). The run stopped before a request whose
22
+ hold did not fit. A cache miss can make a settled reply cost more than its
23
+ hold, up to its worst case (see [Holds vs actual spend](#holds-vs-actual-spend)).
24
+
25
+ ## Find out why
26
+
27
+ Call `get_run` and read `budgetEvents`. Each event has:
28
+
29
+ - `kind`: `refused`, or `overrun_unavailable` for an overrun top-up its group
30
+ or run tree had no room for (see [Overrun not available](#overrun-not-available)).
31
+ - `limit`: which cap bound the run.
32
+ - `run`: the agent's own `budgetUsd`.
33
+ - `run-tree`: what the lead agent had left for its whole run tree.
34
+ - `day`, `week`, `month`: the budget group's cap for that period.
35
+ - `at`: when it was recorded.
36
+ - `details`: for a refused model request, the budget, the amount spent, the
37
+ holds of requests in flight, the refused hold, the model and the turn. For a
38
+ refusal at dispatch, the cap, the amount spent, the amount held and
39
+ `heldRuns`, the number of runs holding budget. A refused model request also
40
+ carries `refusedHoldBasis` (`cached` or `full`) and `refusedHoldCeilingUsd`
41
+ (the worst-case hold for that request). Both also carry
42
+ `groupName` (the agent's budget group, when it has one) and, for a
43
+ `run-tree` limit, `leadAgentName`. A refused model request also carries
44
+ `agentBudgetUsd`, the agent's own `budgetUsd`. An `overrun_unavailable`
45
+ event carries the full cap or tree's `capUsd`, `spentUsd`, `heldUsd` and
46
+ `leftUsd`, the run's `baseBudgetUsd`, `grantedUsd` and `limitUsd`, and
47
+ `groupName`, the group whose cap was full (which can be the lead's).
48
+
49
+ The run's error, and a lead's sub-agent result (in its `budget` field), carry
50
+ the same facts as one sentence. Pull request and issue comments and check
51
+ summaries show the amounts and the budget group's name only.
52
+
53
+ ## Holds vs actual spend
54
+
55
+ A hold is not a charge. The run is charged the reply's real cost, and the hold
56
+ is released when the reply is settled. A hold is larger than a typical reply
57
+ because it must cover the whole output allowance (`maxOutputTokens`), and
58
+ because the first request of a conversation, and any fallback, assumes the whole
59
+ body is new input. Fallbacks apply when there is no previous reply in the
60
+ conversation, the model changed, the previous reply was interrupted or mostly
61
+ uncached, the previous request in the conversation was sent more than 5 minutes
62
+ earlier, or the body got smaller.
63
+
64
+ If the cache misses, a reply can cost more than its hold. It is still settled
65
+ when it costs no more than its worst case, so a run can exceed its budget by at
66
+ most the difference between a request's worst case and its hold, for each
67
+ request in flight.
68
+
69
+ Read `refusedHoldBasis`: `full` means the hold was a fallback, so the next
70
+ request in a warm conversation would likely hold less; `cached` means it
71
+ already used the cache-read rate, so the budget is simply low for the request.
72
+ `refusedHoldCeilingUsd` is the most the request could ever hold.
73
+
74
+ ## What to do
75
+
76
+ - `run`: raise `budgetUsd` on the agent, set `allowedOverrunPercent` (see
77
+ below), or lower `codingProfile.maxOutputTokens`
78
+ so each request holds less. If the sentence says the allowed overrun wasn't
79
+ available, raising the overrun will not help: raise the full group's cap, or
80
+ the lead's `budgetUsd` for a run tree, as the sentence says.
81
+ - `run-tree`: raise `budgetUsd` on the lead agent; its sub-agents draw on it.
82
+ - `day`, `week`, `month`: raise the budget group's cap for that period, or wait
83
+ for the period to reset. See [Budget group exhausted](budget-group-exhausted.md).
84
+
85
+ A refused run is not resumed automatically; trigger a new one.
86
+
87
+ ## Allowed overrun
88
+
89
+ A coding agent's `allowedOverrunPercent` (integer 0 to 100, default 0; set with
90
+ `create_agent` or `update_agent`, same permission as `budgetUsd`) lets a run
91
+ spend up to that percent beyond `budgetUsd`. On a lead agent that delegates,
92
+ it raises its run tree's ceiling for coding sub-agents instead; native runs' own
93
+ model calls are not affected. A delegated run tree's ceiling uses the lead
94
+ agent's percent.
95
+
96
+ The overrun is permission, not a reservation. A run reserves only its base
97
+ budget (`budgetUsd`, trimmed to the room its budget group and run tree have).
98
+ While it works, it is topped up in steps toward its limit (`budgetUsd` raised
99
+ by the percent), each only from room the group and run tree still have, so
100
+ group caps and run-tree ceilings stay hard. `get_run` shows `budgetBaseUsd`
101
+ (before the overrun), `budgetLimitUsd` (the limit) and `budgetReservedUsd`
102
+ (what has been granted so far). The sentence names what the run had, for
103
+ example "this run's $1.00 budget and its 10% allowed overrun ($1.10 in all)",
104
+ or "$1.00 budget and $0.05 of its 10% allowed overrun ($1.05 in all)".
105
+
106
+ ### Overrun not available
107
+
108
+ When the group or run tree has no room left for the next top-up, `get_run`
109
+ lists an `overrun_unavailable` event (its `limit` names the full cap or
110
+ `run-tree`), and the run asks for no more, even if room frees up later. The
111
+ proxy then stops it at what it was granted, and the sentence says why, for
112
+ example "Only $0.40 of its 10% allowed overrun was available because the
113
+ "team" group had no more left of its daily cap.", or "Its 10% allowed overrun
114
+ wasn't available because the lead's run tree had nothing left of its $15.00
115
+ budget." when it got none. A top-up takes whatever room is left, so the run is
116
+ refused only once nothing is. A run whose base is smaller than its first model
117
+ request cannot use its overrun: that request is refused before any top-up.
118
+ To continue, raise that cap (or the lead's `budgetUsd`) and continue the draft
119
+ pull request. Runs dispatched before this behaviour have no `budgetLimitUsd`:
120
+ their reservation already included the overrun, and they finish as before.
121
+
122
+ A worker that finishes is delivered even when it ended over the limit: the run
123
+ is `succeeded` and its status comment says, for example, "Spent $1.04, $0.04
124
+ (4%) over its $1.00 budget, within its allowed overrun."
125
+
126
+ ## Keeping the work of a stopped run
127
+
128
+ When a run is stopped for budget and its worker ended cleanly, its changes so
129
+ far are pushed as the usual draft pull request (or added to the one it was
130
+ continuing). A new pull request's description starts "Stopped at its budget
131
+ before finishing; the changes so far are in this draft." A continuation leaves
132
+ the existing description alone. The run stays `budget_exhausted` and
133
+ keeps its `budgetEvents`. Mentioning the agent on that pull request (a
134
+ comment mentioning the App), or on the issue it came from (the App on a
135
+ GitHub issue, the service account on a Jira issue), continues the work with
136
+ a fresh budget. The pull
137
+ request is not marked ready automatically until a later continuation finishes.
138
+
139
+ A new pull request's description has a `### Task` section quoting the request
140
+ that started the run (capped at 4 KiB, mentions defused), so a continuation
141
+ knows what the draft was for. The request text is visible to anyone who can
142
+ read the pull request. While the draft's latest commit is the stopped
143
+ run's push, the automatic review is skipped with a neutral check, "Skipped:
144
+ stopped at its budget", and no fix round starts. Marking the pull request ready
145
+ or pushing a new commit gets a normal review. See
146
+ [Run GitHub code-review agents](../code-review-agents.md#drafts-stopped-at-their-budget).
147
+
148
+ If a push check refuses (protected paths, diff limits, access) or there are no
149
+ changes, the run ends as above with nothing pushed. So does a continuation of a
150
+ pull request that is no longer a draft (marked ready for review): unfinished
151
+ work is never pushed onto it. A worker that crashed, timed out or was stopped
152
+ is not kept.
153
+
154
+ ## Interrupted replies
155
+
156
+ When a reply breaks off before its final usage, the proxy settles the request
157
+ at an estimate instead of keeping its whole hold: the usage it already read,
158
+ else the input of the same conversation's previous reply on the same model plus
159
+ the body's growth since then, else the whole body as new input, plus the output
160
+ relayed so far (text, tool-call input, and thinking or reasoning text) counted
161
+ high, and never more than the request's worst case. With nothing relayed, the
162
+ run's median completed reply on that model is used, or no output if there is
163
+ none yet. The previous reply is used only if it started within the 5-minute
164
+ prompt cache window before the request and the body has not shrunk since. New
165
+ input is counted at one token per 3 bytes and priced at the higher of the
166
+ model's input and cache-write rates. A streaming request that failed before the
167
+ provider's response started books no output. The native sandbox gateway follows
168
+ the same rule: a call cut after the response started but before any output (for
169
+ example while the model was thinking) is booked at its input plus the run's
170
+ median completed reply, or its input alone if there is none yet. The request is
171
+ flagged as estimated and counted in the run's cost. If the estimate cannot be
172
+ computed or recorded, the request keeps its full hold. A run can exceed its budget by at
173
+ most the gap between the estimate and the real cost.
174
+
175
+ ## Group holds for delegated runs
176
+
177
+ A lead and the sub-agents it starts in the same budget group hold the lead's
178
+ budget once, at the lead (its reservation minus what the whole tree has spent),
179
+ decided per period. If the tree's live sub-agent runs hold more than that
180
+ (a coding run can be topped up past the lead's budget by the lead's
181
+ `allowedOverrunPercent`), the lead holds their unspent holds instead. `get_budget_group` reports `heldRuns` for each period.
182
+
183
+ See also [Troubleshoot budgets and reservations](../troubleshooting/budgets.md).
184
+
185
+ A coding run refused by the model provider itself because its account is out of
186
+ credit or over a spend limit is a different failure; see
187
+ [errors/coding-stream-quota-exceeded](coding-stream-quota-exceeded.md).
@@ -14,7 +14,9 @@ has no capacity left for that period after accounting for actual spending and
14
14
  active reservations. Wardby refuses the run before model work or a coding
15
15
  worker begins.
16
16
 
17
- 1. Inspect the budget group's `spentUsd` and `reservedUsd` values.
17
+ 1. Inspect the budget group's `spentUsd`, `reservedUsd` and `heldRuns` values.
18
+ The refused run's `get_run` output lists the cap, spend and holds in
19
+ `budgetEvents`.
18
20
  2. Inspect active and recent runs that use the group.
19
21
  3. Wait for the period to reset, cancel unneeded active work, or deliberately
20
22
  adjust the agent or group budget.
@@ -23,3 +25,5 @@ worker begins.
23
25
 
24
26
  Do not raise a limit merely to clear a refusal without confirming the intended
25
27
  owner, schedule, and overlapping work. See [Budget troubleshooting](../troubleshooting/budgets.md).
28
+
29
+ For a coding run stopped mid-run, see the help article `errors/budget-exhausted`.
@@ -26,8 +26,8 @@ runs recorded it) when `CODING_WORKER_IMAGE` has since been unset.
26
26
  a toolchain with its own image (such as `CODING_WORKER_IMAGE_NODE_PYTHON_3_12`),
27
27
  still runs without `CODING_WORKER_IMAGE`.
28
28
  - **`coding_provider_not_configured:claude-code`**: `CODING_CLAUDE_WORKER_IMAGE`
29
- or `CODING_CLAUDE_TOOL_RUNNER_IMAGE` isn't set. Claude Code needs both, and
30
- even an agent's own `workerImageRef` doesn't replace the tool runner.
29
+ or `CODING_CLAUDE_TOOL_RUNNER_IMAGE` isn't set. Claude Code needs both, even
30
+ for an agent with its own `workerImageRef`.
31
31
 
32
32
  This error is about images, not API keys. A missing or invalid model API key
33
33
  fails later, when the run calls the model.
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: errors/coding-stream-quota-exceeded
3
+ title: Coding provider out of credit or over its spend limit
4
+ summary: A coding run's model provider refused it because the account is out of credit or over its spend limit; retrying does not help until the limit is raised.
5
+ audience: operator
6
+ tags: [error, coding-agents, billing, quota, spend-limit, coding_stream_quota_exceeded]
7
+ appliesTo: ">=0.7.0"
8
+ ---
9
+
10
+ # Coding provider out of credit or over its spend limit
11
+
12
+ `job_coding_stream_quota_exceeded` in a coding run's diagnostic (the
13
+ control-plane log line under the run's `coding_diag_…` id) means the model
14
+ provider refused the run's requests because the provider account behind the
15
+ coding proxy has run out of credit or reached a spend limit. OpenAI reports
16
+ this as `insufficient_quota` or a project spend limit (with HTTP 429, like a
17
+ rate limit); Anthropic as a credit balance that is too low. It is not wardby's
18
+ own run budget: that ends the run as `budget_exhausted` (see
19
+ [errors/budget-exhausted](budget-exhausted.md)).
20
+
21
+ Retrying does not help: every coding run on that provider account fails the
22
+ same way until the limit changes.
23
+
24
+ 1. Check the provider account the coding proxy uses: the OpenAI project's
25
+ billing and limits, or the Anthropic organization's credit balance and spend
26
+ limits.
27
+ 2. Add credit or raise the limit there.
28
+ 3. Trigger the run again.
29
+
30
+ The coding proxy's log for the same request (`audit.*` events) shows the
31
+ provider's status. See
32
+ [Coding worker isolation](../../docs/coding-worker-isolation.md) for where the
33
+ diagnostic and proxy logs live.
@@ -0,0 +1,39 @@
1
+ ---
2
+ id: errors/coding-workspace-disk-exceeds-limit
3
+ title: Coding workspace larger than the deployment allows
4
+ summary: create_agent and update_agent refuse workspaceDiskMb above CODING_MAX_DISK_MB; already-saved agents above the cap fail at run start.
5
+ audience: operator
6
+ tags: [error, coding-agents, workspace, disk, workspaceDiskMb, CODING_MAX_DISK_MB, create_agent, update_agent]
7
+ appliesTo: ">=0.2.0"
8
+ ---
9
+
10
+ # Coding workspace larger than the deployment allows
11
+
12
+ `coding_workspace_disk_exceeds_limit` (on the run record as
13
+ `coding_failure_workspace:<id>`) means the agent's
14
+ `codingProfile.workspaceDiskMb` is larger than the deployment's
15
+ `CODING_MAX_DISK_MB`. The run fails before a worker starts and costs nothing.
16
+ When `CODING_MAX_DISK_MB` is unset, the limit is `CODING_DISK_MB` (2048 MiB by
17
+ default).
18
+
19
+ `create_agent` also checks this limit at save time. `update_agent` checks it
20
+ when setting a numeric `workspaceDiskMb` or changing an agent's kind to coding.
21
+ You can still make unrelated edits to an already-saved over-cap coding agent,
22
+ lower its size to within the cap, or set it to `null`.
23
+ The error names the requested size in MiB,
24
+ the effective cap in MiB, and `CODING_MAX_DISK_MB`. A size exactly at the cap
25
+ is allowed; `null` uses the deployment default. Agents already saved above
26
+ the cap still fail at run time, including if the operator lowers the cap.
27
+
28
+ Fix it one of two ways:
29
+
30
+ 1. Lower the agent's size to the limit or below with `update_agent`:
31
+ `{ "id": "<agent id>", "codingProfile": { "workspaceDiskMb": 2048 } }`.
32
+ 2. Or raise the deployment's `CODING_MAX_DISK_MB` on the control plane and
33
+ restart it. On GKE, deploy with `CODING_MAX_DISK_MB=8192 deploy/gke/up.sh`
34
+ (see the GKE deploy guide). On GKE Autopilot the value must leave room for the
35
+ worker's 1 GiB inside the 10 GiB pod ephemeral-storage ceiling.
36
+
37
+ A run that installs more than its workspace holds is evicted mid-run instead;
38
+ that needs a larger `workspaceDiskMb`, within this limit. See
39
+ [Build a worker image](../build-worker-image.md).
@@ -19,15 +19,13 @@ an open pull request carrying that run's marker for the branch. Nothing from
19
19
  the run was pushed either way, so the pull request (and anyone who merged or
20
20
  closed it) is unaffected.
21
21
 
22
- Two things besides an actual merge or close can also make the check come back
23
- "no longer found," since it looks for an **open** pull request with that
24
- exact base branch and the run's hidden marker still in its description:
25
-
26
- - the pull request's base branch was retargeted to something other than the
27
- one the run recorded;
28
- - the hidden `<!-- wardby:<run-id> -->` marker was removed or edited out of
29
- the pull request's description (wardby relies on it to find its own PR;
30
- nothing else identifies it).
22
+ One thing besides an actual merge or close can also make the check come back
23
+ "no longer found," since it looks for an **open** pull request from the run's
24
+ branch with the run's hidden marker still in its description: the hidden
25
+ `<!-- wardby:<run-id> -->` marker was removed or edited out of the pull
26
+ request's description (wardby relies on it to find its own PR; nothing else
27
+ identifies it). Retargeting the pull request to another base branch does not
28
+ close it for wardby: the follow-up continues it and merges the new base.
31
29
 
32
30
  When the pull request was merged or closed **before the run started**, the
33
31
  check before cloning catches it: the run's status is `refused`, and nothing
@@ -66,9 +64,8 @@ sub-run instead, without the error code:
66
64
  If the change is still needed, ask again without `continuePriorRun` (or
67
65
  without naming the closed pull request). The new run opens a fresh pull
68
66
  request from the repository's default branch. If the check is wrongly
69
- finding nothing when the pull request is in fact open, check that its base
70
- branch still matches what wardby recorded and that the `<!-- wardby:... -->`
71
- marker is still in its description, unedited.
67
+ finding nothing when the pull request is in fact open, check that the
68
+ `<!-- wardby:... -->` marker is still in its description, unedited.
72
69
 
73
70
  Related: [Run GitHub code-review agents](../code-review-agents.md),
74
71
  [Automatic review fix rounds](../review-fix-rounds.md),
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: errors/database-auth-invalid
3
+ title: Database authentication is misconfigured
4
+ summary: DATABASE_AUTH or the database URL does not meet the rules for the chosen authentication mode, so the process refused to start.
5
+ audience: operator
6
+ tags: [error, database, rds, iam, deploy, database_auth_invalid, rds-iam]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Database authentication is misconfigured
11
+
12
+ `database_auth_invalid` means `DATABASE_AUTH` is not valid, or `DATABASE_AUTH=rds-iam` is set and `DATABASE_URL` (or `DBOS_SYSTEM_DATABASE_URL`) does not meet its rules. Wardby checks this when the process starts, so every `wardby` command fails with it, not only the server. The message names the problem; it never includes the URL, credentials, or parameter values.
13
+
14
+ `DATABASE_AUTH` is `password` (the default; the password is in `DATABASE_URL`) or `rds-iam` (Amazon RDS IAM database authentication, where the password is a short-lived token signed with the workload's AWS credentials). Any other value is refused.
15
+
16
+ Under `rds-iam` check each of these:
17
+
18
+ 1. `DATABASE_URL` starts with `postgresql://` or `postgres://`, has a user, and has no password.
19
+ 2. `AWS_REGION` or `DATABASE_AWS_REGION` is set (`DATABASE_AWS_REGION` wins).
20
+ 3. The URL has `sslmode=verify-full` and `sslrootcert=<path to the RDS CA bundle>`, and that file exists and is readable in the container. An unreadable file is reported with its error code, such as `ENOENT` for a missing file or `EACCES` for one the process cannot read.
21
+ 4. Only supported parameters are present: `sslmode`, `sslrootcert`, `application_name`, `fallback_application_name`, `options`, `client_encoding`, `statement_timeout`, `lock_timeout`, `idle_in_transaction_session_timeout`, `query_timeout`, `connection_limit`, `pool_timeout`, `connect_timeout`, `schema`. Anything else (`sslcert`, `sslkey`, `ssl`, `host`, `pgbouncer`, ...) is refused by name; remove it.
22
+ 5. User and database names in the URL are correctly percent-encoded.
23
+
24
+ If the code is not raised but connections are rejected, the configuration is valid and the problem is on the AWS side: the workload's IAM role needs `rds-db:connect` for the database user, and that user needs the `rds_iam` role in the database.
25
+
26
+ `prisma migrate deploy` and `dbos schema` take a URL and do not follow `DATABASE_AUTH`. Mint a short-lived URL with the migration image's helper: `DATABASE_URL="$(node scripts/rds-iam-url.mjs)" && export DATABASE_URL && npm run prisma:migrate && npm run dbos:migrate`. It reports the same `database_auth_invalid` errors for the checks it shares. `wardby quickstart` does not support `rds-iam`.
27
+
28
+ See [Database authentication](../../docs/security-deployment.md#database-authentication).