@wardby/cli 0.6.0 → 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 (576) hide show
  1. package/deploy/local/docker-compose.quickstart-coding.yml +13 -0
  2. package/dist/claude-coding-worker/driver.d.ts +21 -3
  3. package/dist/claude-coding-worker/driver.js +125 -17
  4. package/dist/claude-coding-worker/main.js +34 -6
  5. package/dist/claude-coding-worker/sdk.js +12 -1
  6. package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
  7. package/dist/claude-coding-worker/tool-socket.js +111 -0
  8. package/dist/claude-coding-worker/transcript.d.ts +18 -0
  9. package/dist/claude-coding-worker/transcript.js +77 -0
  10. package/dist/cli-help.d.ts +1 -1
  11. package/dist/cli-help.js +1 -0
  12. package/dist/cli.js +24 -10
  13. package/dist/coding/continuation-wording.d.ts +35 -0
  14. package/dist/coding/continuation-wording.js +73 -0
  15. package/dist/coding/linked-issue-note.d.ts +23 -0
  16. package/dist/coding/linked-issue-note.js +47 -0
  17. package/dist/coding/merge-wording.d.ts +28 -0
  18. package/dist/coding/merge-wording.js +78 -0
  19. package/dist/coding/pr-description-note.d.ts +9 -0
  20. package/dist/coding/pr-description-note.js +32 -0
  21. package/dist/coding/profile.d.ts +46 -126
  22. package/dist/coding/profile.js +45 -4
  23. package/dist/coding/protected-path-wording.d.ts +8 -0
  24. package/dist/coding/protected-path-wording.js +1 -1
  25. package/dist/coding/protocol.d.ts +264 -346
  26. package/dist/coding/protocol.js +235 -12
  27. package/dist/coding/redact.d.ts +3 -0
  28. package/dist/coding/redact.js +12 -0
  29. package/dist/coding/registry/allowlist.d.ts +12 -0
  30. package/dist/coding/registry/allowlist.js +14 -1
  31. package/dist/coding/registry/audit-mode.d.ts +153 -0
  32. package/dist/coding/registry/audit-mode.js +304 -0
  33. package/dist/coding/registry/lockfile-shared.d.ts +36 -0
  34. package/dist/coding/registry/lockfile-shared.js +128 -0
  35. package/dist/coding/registry/lockfiles.js +1 -1
  36. package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
  37. package/dist/coding/registry/npm-lockfile-formats.js +41 -0
  38. package/dist/coding/registry/npm-lockfile.d.ts +8 -4
  39. package/dist/coding/registry/npm-lockfile.js +4 -6
  40. package/dist/coding/registry/npm.js +78 -8
  41. package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
  42. package/dist/coding/registry/pnpm-lockfile.js +189 -0
  43. package/dist/coding/registry/pypi-plan.d.ts +50 -0
  44. package/dist/coding/registry/pypi-plan.js +406 -0
  45. package/dist/coding/registry/pypi-requirements.d.ts +58 -0
  46. package/dist/coding/registry/pypi-requirements.js +155 -0
  47. package/dist/coding/registry/pypi.d.ts +3 -27
  48. package/dist/coding/registry/pypi.js +40 -154
  49. package/dist/coding/registry/refusal-hints.d.ts +20 -0
  50. package/dist/coding/registry/refusal-hints.js +61 -0
  51. package/dist/coding/registry/refusal-wording.d.ts +11 -0
  52. package/dist/coding/registry/refusal-wording.js +56 -0
  53. package/dist/coding/registry/report.d.ts +70 -8
  54. package/dist/coding/registry/report.js +112 -5
  55. package/dist/coding/registry/types.d.ts +58 -8
  56. package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
  57. package/dist/coding/registry/yarn-lockfile.js +367 -0
  58. package/dist/coding/services/catalog.d.ts +37 -351
  59. package/dist/coding/transcript/claude-code.d.ts +13 -0
  60. package/dist/coding/transcript/claude-code.js +273 -0
  61. package/dist/coding/transcript/download-protocol.d.ts +30 -0
  62. package/dist/coding/transcript/download-protocol.js +18 -0
  63. package/dist/coding/transcript/format.d.ts +20 -0
  64. package/dist/coding/transcript/format.js +32 -0
  65. package/dist/coding/transcript/recorder.d.ts +51 -0
  66. package/dist/coding/transcript/recorder.js +225 -0
  67. package/dist/coding/transcript/resume/checkout.d.ts +31 -0
  68. package/dist/coding/transcript/resume/checkout.js +203 -0
  69. package/dist/coding/transcript/resume/command.d.ts +17 -0
  70. package/dist/coding/transcript/resume/command.js +176 -0
  71. package/dist/coding/transcript/resume/download.d.ts +20 -0
  72. package/dist/coding/transcript/resume/download.js +153 -0
  73. package/dist/coding/transcript/resume/launch.d.ts +38 -0
  74. package/dist/coding/transcript/resume/launch.js +128 -0
  75. package/dist/coding/transcript/resume/session-file.d.ts +13 -0
  76. package/dist/coding/transcript/resume/session-file.js +79 -0
  77. package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
  78. package/dist/coding/transcript/resume/stand-in.js +49 -0
  79. package/dist/coding-worker/artifact.d.ts +8 -3
  80. package/dist/coding-worker/artifact.js +3 -1
  81. package/dist/coding-worker/debug-trace.d.ts +6 -5
  82. package/dist/coding-worker/debug-trace.js +13 -18
  83. package/dist/coding-worker/dependency-cache.d.mts +229 -0
  84. package/dist/coding-worker/dependency-cache.mjs +2123 -0
  85. package/dist/coding-worker/driver.d.ts +4 -3
  86. package/dist/coding-worker/driver.js +116 -38
  87. package/dist/coding-worker/errors.d.ts +1 -0
  88. package/dist/coding-worker/errors.js +32 -0
  89. package/dist/coding-worker/task-note.d.ts +11 -0
  90. package/dist/coding-worker/task-note.js +13 -0
  91. package/dist/coding-worker/types.d.ts +11 -0
  92. package/dist/config/dependency-cache.d.ts +23 -0
  93. package/dist/config/dependency-cache.js +32 -0
  94. package/dist/config/providers.d.ts +12 -3
  95. package/dist/config/providers.js +55 -5
  96. package/dist/config/test-simulators.d.ts +82 -0
  97. package/dist/config/test-simulators.js +305 -0
  98. package/dist/core/async-context.d.ts +2 -0
  99. package/dist/core/async-context.js +12 -0
  100. package/dist/core/budget-events.d.ts +108 -0
  101. package/dist/core/budget-events.js +346 -0
  102. package/dist/core/budget-groups.d.ts +50 -1
  103. package/dist/core/budget-groups.js +236 -27
  104. package/dist/core/budget-stopped-head.d.ts +46 -0
  105. package/dist/core/budget-stopped-head.js +81 -0
  106. package/dist/core/budget-topup.d.ts +51 -0
  107. package/dist/core/budget-topup.js +156 -0
  108. package/dist/core/budget-wording.d.ts +16 -2
  109. package/dist/core/budget-wording.js +40 -2
  110. package/dist/core/coding-queue.d.ts +2 -1
  111. package/dist/core/coding-queue.js +7 -0
  112. package/dist/core/cron.d.ts +19 -1
  113. package/dist/core/cron.js +17 -0
  114. package/dist/core/datastores.js +1 -1
  115. package/dist/core/deferred-coding.d.ts +14 -0
  116. package/dist/core/deferred-coding.js +62 -0
  117. package/dist/core/delegation-child.d.ts +25 -0
  118. package/dist/core/delegation-child.js +37 -0
  119. package/dist/core/dispatch.d.ts +42 -0
  120. package/dist/core/dispatch.js +131 -56
  121. package/dist/core/engine-native.js +1 -1
  122. package/dist/core/error-code.d.ts +38 -0
  123. package/dist/core/error-code.js +168 -0
  124. package/dist/core/grants.d.ts +19 -6
  125. package/dist/core/grants.js +55 -6
  126. package/dist/core/host-events.d.ts +18 -2
  127. package/dist/core/host-events.js +284 -24
  128. package/dist/core/host-status.d.ts +85 -3
  129. package/dist/core/host-status.js +298 -20
  130. package/dist/core/issue-bridge.d.ts +50 -6
  131. package/dist/core/issue-bridge.js +124 -33
  132. package/dist/core/issue-events.d.ts +1 -1
  133. package/dist/core/issue-events.js +4 -10
  134. package/dist/core/issue-status.d.ts +1 -1
  135. package/dist/core/issue-status.js +54 -26
  136. package/dist/core/logger.d.ts +5 -0
  137. package/dist/core/logger.js +14 -1
  138. package/dist/core/lost-run-children.d.ts +6 -0
  139. package/dist/core/lost-run-children.js +32 -0
  140. package/dist/core/mark-ready.d.ts +34 -0
  141. package/dist/core/mark-ready.js +152 -0
  142. package/dist/core/markdown-code.d.ts +8 -0
  143. package/dist/core/markdown-code.js +107 -0
  144. package/dist/core/memory-tools.js +7 -0
  145. package/dist/core/merge-order-check.d.ts +2 -1
  146. package/dist/core/merge-order-check.js +8 -1
  147. package/dist/core/notification-templates.d.ts +1 -7
  148. package/dist/core/notification-templates.js +36 -2
  149. package/dist/core/pull-request-state-sync.js +2 -2
  150. package/dist/core/reconciler.d.ts +4 -3
  151. package/dist/core/reconciler.js +8 -1
  152. package/dist/core/related-pull-requests.d.ts +11 -3
  153. package/dist/core/related-pull-requests.js +27 -14
  154. package/dist/core/reply-parts.d.ts +21 -0
  155. package/dist/core/reply-parts.js +73 -0
  156. package/dist/core/review-fix.d.ts +1 -1
  157. package/dist/core/review-fix.js +2 -1
  158. package/dist/core/review-host-checks.d.ts +1 -1
  159. package/dist/core/review-host-tools.d.ts +3 -0
  160. package/dist/core/review-host-tools.js +99 -13
  161. package/dist/core/review-reads.d.ts +55 -0
  162. package/dist/core/review-reads.js +233 -0
  163. package/dist/core/run-status.d.ts +12 -0
  164. package/dist/core/run-status.js +12 -0
  165. package/dist/core/runner.d.ts +80 -34
  166. package/dist/core/runner.js +439 -144
  167. package/dist/core/schedule-start.d.ts +12 -0
  168. package/dist/core/schedule-start.js +14 -0
  169. package/dist/core/secret-broker-config.d.ts +10 -74
  170. package/dist/core/secret-guard.d.ts +46 -0
  171. package/dist/core/secret-guard.js +104 -0
  172. package/dist/core/secret-guarded-stores.d.ts +12 -0
  173. package/dist/core/secret-guarded-stores.js +41 -0
  174. package/dist/core/secret-spans.d.ts +50 -0
  175. package/dist/core/secret-spans.js +94 -0
  176. package/dist/core/stop-run.d.ts +46 -0
  177. package/dist/core/stop-run.js +61 -0
  178. package/dist/core/workflow-events.d.ts +14 -2
  179. package/dist/core/workflow-events.js +4 -0
  180. package/dist/core/workflow-run-events.d.ts +5 -3
  181. package/dist/core/workflow-run-events.js +43 -8
  182. package/dist/core/zod-json-schema.d.ts +4 -0
  183. package/dist/core/zod-json-schema.js +39 -0
  184. package/dist/core/zod3-window.d.ts +35 -0
  185. package/dist/core/zod3-window.js +124 -0
  186. package/dist/generated/prisma/browser.d.ts +34 -3
  187. package/dist/generated/prisma/client.d.ts +34 -3
  188. package/dist/generated/prisma/commonInputTypes.d.ts +220 -60
  189. package/dist/generated/prisma/enums.d.ts +10 -0
  190. package/dist/generated/prisma/enums.js +8 -0
  191. package/dist/generated/prisma/internal/class.d.ts +44 -0
  192. package/dist/generated/prisma/internal/class.js +4 -4
  193. package/dist/generated/prisma/internal/prismaNamespace.d.ts +428 -9
  194. package/dist/generated/prisma/internal/prismaNamespace.js +92 -1
  195. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +95 -0
  196. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +92 -1
  197. package/dist/generated/prisma/models/Agent.d.ts +106 -8
  198. package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
  199. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +229 -1
  200. package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
  201. package/dist/generated/prisma/models/CodingProxySession.d.ts +114 -1
  202. package/dist/generated/prisma/models/CodingRun.d.ts +1637 -1
  203. package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
  204. package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
  205. package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
  206. package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
  207. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +39 -1
  208. package/dist/generated/prisma/models/NativeGatewaySession.d.ts +35 -1
  209. package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
  210. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
  211. package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
  212. package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
  213. package/dist/generated/prisma/models/Run.d.ts +738 -2
  214. package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
  215. package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
  216. package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
  217. package/dist/generated/prisma/models/RunTranscript.js +1 -0
  218. package/dist/generated/prisma/models.d.ts +4 -0
  219. package/dist/help-index.json +1320 -69
  220. package/dist/import/create.js +32 -3
  221. package/dist/import/neutral-schema.d.ts +50 -281
  222. package/dist/import/neutral-schema.js +5 -4
  223. package/dist/knowledge/check.d.ts +1 -1
  224. package/dist/knowledge/cli.d.ts +11 -1
  225. package/dist/knowledge/cli.js +37 -4
  226. package/dist/knowledge/concept.d.ts +3 -19
  227. package/dist/knowledge/location.d.ts +31 -0
  228. package/dist/knowledge/location.js +78 -0
  229. package/dist/mcp/auth/access.d.ts +10 -2
  230. package/dist/mcp/auth/access.js +15 -1
  231. package/dist/mcp/auth/ownership.d.ts +7 -7
  232. package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
  233. package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
  234. package/dist/mcp/host-events/github-ingress.d.ts +2 -0
  235. package/dist/mcp/host-events/github-ingress.js +2 -1
  236. package/dist/mcp/index.d.ts +6 -0
  237. package/dist/mcp/index.js +58 -10
  238. package/dist/mcp/server.d.ts +13 -0
  239. package/dist/mcp/server.js +33 -14
  240. package/dist/mcp/tools/agents.d.ts +4 -0
  241. package/dist/mcp/tools/agents.js +198 -16
  242. package/dist/mcp/tools/datastore.js +17 -8
  243. package/dist/mcp/tools/grants.js +9 -3
  244. package/dist/mcp/tools/memory.js +11 -1
  245. package/dist/mcp/tools/notification-channels.js +2 -2
  246. package/dist/mcp/tools/packages.d.ts +2 -0
  247. package/dist/mcp/tools/packages.js +195 -0
  248. package/dist/mcp/tools/repositories.js +18 -5
  249. package/dist/mcp/tools/run-access.d.ts +16 -0
  250. package/dist/mcp/tools/run-access.js +25 -0
  251. package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
  252. package/dist/mcp/tools/run-transcript-download.js +129 -0
  253. package/dist/mcp/tools/run-transcript.d.ts +19 -0
  254. package/dist/mcp/tools/run-transcript.js +70 -0
  255. package/dist/mcp/tools/runs.js +34 -12
  256. package/dist/mcp/tools/scheduling.js +3 -1
  257. package/dist/mcp/tools/secret-elicitation-form.js +5 -0
  258. package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
  259. package/dist/mcp/tools/secret-elicitation-server.js +10 -61
  260. package/dist/mcp/tools/secrets.js +2 -2
  261. package/dist/mcp/tools/stop-run.d.ts +2 -0
  262. package/dist/mcp/tools/stop-run.js +82 -0
  263. package/dist/mcp/tools/subagents.js +2 -2
  264. package/dist/mcp/tools/tools.d.ts +1 -1
  265. package/dist/mcp/tools/tools.js +25 -9
  266. package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
  267. package/dist/mcp/transport/stdio-link-host.js +67 -0
  268. package/dist/mcp/transport/streamable-http.d.ts +13 -0
  269. package/dist/mcp/transport/streamable-http.js +41 -1
  270. package/dist/native-worker/docker-launcher.d.ts +38 -2
  271. package/dist/native-worker/docker-launcher.js +65 -5
  272. package/dist/native-worker/gateway-server.d.ts +41 -3
  273. package/dist/native-worker/gateway-server.js +124 -27
  274. package/dist/native-worker/gateway.d.ts +27 -1
  275. package/dist/native-worker/gateway.js +70 -4
  276. package/dist/native-worker/http-server.d.ts +3 -1
  277. package/dist/native-worker/http-server.js +11 -7
  278. package/dist/native-worker/http-transport.js +1 -1
  279. package/dist/native-worker/kubernetes-launcher.d.ts +7 -3
  280. package/dist/native-worker/kubernetes-launcher.js +43 -3
  281. package/dist/native-worker/launch.d.ts +18 -1
  282. package/dist/native-worker/launch.js +6 -1
  283. package/dist/native-worker/ledger.d.ts +18 -2
  284. package/dist/native-worker/ledger.js +57 -4
  285. package/dist/native-worker/loopback.js +3 -8
  286. package/dist/native-worker/main.d.ts +2 -1
  287. package/dist/native-worker/main.js +14 -3
  288. package/dist/native-worker/protocol.d.ts +129 -577
  289. package/dist/native-worker/protocol.js +47 -1
  290. package/dist/native-worker/sandbox-executor.d.ts +17 -2
  291. package/dist/native-worker/sandbox-executor.js +78 -4
  292. package/dist/native-worker/stderr-redaction.d.ts +77 -0
  293. package/dist/native-worker/stderr-redaction.js +237 -0
  294. package/dist/native-worker/stdio.d.ts +1 -1
  295. package/dist/native-worker/stdio.js +6 -5
  296. package/dist/native-worker/warm-pool.d.ts +2 -2
  297. package/dist/native-worker/warm-pool.js +4 -4
  298. package/dist/native-worker/worker.js +28 -2
  299. package/dist/observability/metrics.js +6 -1
  300. package/dist/providers/auth/self-hosted.d.ts +1 -1
  301. package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
  302. package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
  303. package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
  304. package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
  305. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
  306. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
  307. package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
  308. package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
  309. package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
  310. package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
  311. package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
  312. package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
  313. package/dist/providers/coding-proxy/hold.d.ts +32 -0
  314. package/dist/providers/coding-proxy/hold.js +86 -0
  315. package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
  316. package/dist/providers/coding-proxy/interrupted.js +104 -0
  317. package/dist/providers/coding-proxy/memory-ledger.d.ts +15 -2
  318. package/dist/providers/coding-proxy/memory-ledger.js +84 -8
  319. package/dist/providers/coding-proxy/metering.d.ts +16 -0
  320. package/dist/providers/coding-proxy/metering.js +27 -4
  321. package/dist/providers/coding-proxy/prisma-ledger.d.ts +15 -2
  322. package/dist/providers/coding-proxy/prisma-ledger.js +179 -67
  323. package/dist/providers/coding-proxy/proxy.d.ts +14 -1
  324. package/dist/providers/coding-proxy/proxy.js +166 -14
  325. package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
  326. package/dist/providers/coding-proxy/registry/audit.js +94 -17
  327. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
  328. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
  329. package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
  330. package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
  331. package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
  332. package/dist/providers/coding-proxy/registry/plan.js +201 -48
  333. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
  334. package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
  335. package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
  336. package/dist/providers/coding-proxy/registry/service.js +579 -112
  337. package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
  338. package/dist/providers/coding-proxy/registry/store.js +54 -1
  339. package/dist/providers/coding-proxy/runtime.d.ts +4 -0
  340. package/dist/providers/coding-proxy/runtime.js +78 -16
  341. package/dist/providers/coding-proxy/server.d.ts +6 -1
  342. package/dist/providers/coding-proxy/server.js +45 -1
  343. package/dist/providers/coding-proxy/types.d.ts +65 -1
  344. package/dist/providers/datastore/types.d.ts +5 -0
  345. package/dist/providers/engine/types.d.ts +17 -2
  346. package/dist/providers/engine/types.js +17 -0
  347. package/dist/providers/executor/composition.d.ts +10 -3
  348. package/dist/providers/executor/composition.js +47 -7
  349. package/dist/providers/executor/container.d.ts +361 -8
  350. package/dist/providers/executor/container.js +1136 -91
  351. package/dist/providers/executor/dbos-status.d.ts +31 -0
  352. package/dist/providers/executor/dbos-status.js +64 -0
  353. package/dist/providers/executor/dbos.d.ts +50 -1
  354. package/dist/providers/executor/dbos.js +207 -20
  355. package/dist/providers/executor/deferred.d.ts +12 -24
  356. package/dist/providers/executor/deferred.js +10 -29
  357. package/dist/providers/executor/in-process.d.ts +9 -1
  358. package/dist/providers/executor/in-process.js +14 -4
  359. package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
  360. package/dist/providers/executor/linked-issue-reader.js +30 -0
  361. package/dist/providers/executor/routing.d.ts +2 -0
  362. package/dist/providers/executor/routing.js +4 -0
  363. package/dist/providers/executor/types.d.ts +13 -0
  364. package/dist/providers/index.d.ts +2 -1
  365. package/dist/providers/issue-tracker/types.d.ts +17 -0
  366. package/dist/providers/issue-tracker/types.js +39 -1
  367. package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
  368. package/dist/providers/jobs/claude-tool-setup.js +5 -2
  369. package/dist/providers/jobs/docker-isolation.d.ts +8 -0
  370. package/dist/providers/jobs/docker-isolation.js +17 -0
  371. package/dist/providers/jobs/docker.d.ts +1 -0
  372. package/dist/providers/jobs/docker.js +27 -2
  373. package/dist/providers/jobs/fake-kubernetes-api.d.ts +2 -0
  374. package/dist/providers/jobs/fake-kubernetes-api.js +3 -0
  375. package/dist/providers/jobs/kubernetes-api.d.ts +8 -0
  376. package/dist/providers/jobs/kubernetes-api.js +10 -0
  377. package/dist/providers/jobs/kubernetes-client.js +10 -1
  378. package/dist/providers/jobs/kubernetes-isolation.d.ts +2 -0
  379. package/dist/providers/jobs/kubernetes-isolation.js +17 -1
  380. package/dist/providers/jobs/kubernetes.d.ts +6 -1
  381. package/dist/providers/jobs/kubernetes.js +105 -16
  382. package/dist/providers/jobs/types.d.ts +33 -0
  383. package/dist/providers/jobs/types.js +13 -1
  384. package/dist/providers/llm/anthropic.js +5 -1
  385. package/dist/providers/llm/bedrock.d.ts +0 -12
  386. package/dist/providers/llm/bedrock.js +4 -0
  387. package/dist/providers/llm/claude-messages.d.ts +3 -1
  388. package/dist/providers/llm/claude-messages.js +4 -1
  389. package/dist/providers/llm/claude-provider.d.ts +2 -2
  390. package/dist/providers/llm/claude-provider.js +2 -2
  391. package/dist/providers/llm/openai.d.ts +2 -2
  392. package/dist/providers/llm/openai.js +6 -2
  393. package/dist/providers/llm/routing.d.ts +2 -2
  394. package/dist/providers/llm/routing.js +2 -2
  395. package/dist/providers/llm/types.d.ts +12 -2
  396. package/dist/providers/review-host/github-events.d.ts +9 -1
  397. package/dist/providers/review-host/github-events.js +34 -12
  398. package/dist/providers/review-host/github.d.ts +29 -2
  399. package/dist/providers/review-host/github.js +224 -29
  400. package/dist/providers/review-host/local.d.ts +8 -4
  401. package/dist/providers/review-host/local.js +49 -31
  402. package/dist/providers/review-host/patch-pages.d.ts +41 -0
  403. package/dist/providers/review-host/patch-pages.js +176 -0
  404. package/dist/providers/review-host/review-format.d.ts +19 -1
  405. package/dist/providers/review-host/review-format.js +38 -7
  406. package/dist/providers/review-host/types.d.ts +134 -2
  407. package/dist/providers/review-host/types.js +8 -0
  408. package/dist/providers/storage/gcs.d.ts +63 -0
  409. package/dist/providers/storage/gcs.js +69 -0
  410. package/dist/providers/storage/index.d.ts +15 -0
  411. package/dist/providers/storage/index.js +14 -0
  412. package/dist/providers/storage/local.d.ts +24 -0
  413. package/dist/providers/storage/local.js +92 -0
  414. package/dist/providers/storage/meter.d.ts +14 -0
  415. package/dist/providers/storage/meter.js +34 -0
  416. package/dist/providers/storage/s3.d.ts +41 -0
  417. package/dist/providers/storage/s3.js +107 -0
  418. package/dist/providers/storage/types.d.ts +37 -3
  419. package/dist/providers/storage/types.js +21 -4
  420. package/dist/providers/vcs/git.d.ts +33 -2
  421. package/dist/providers/vcs/git.js +324 -22
  422. package/dist/providers/vcs/github-remote.d.ts +26 -3
  423. package/dist/providers/vcs/github-remote.js +124 -14
  424. package/dist/providers/vcs/github.d.ts +214 -6
  425. package/dist/providers/vcs/github.js +447 -45
  426. package/dist/providers/vcs/index.js +8 -1
  427. package/dist/providers/vcs/pr-description.d.ts +127 -0
  428. package/dist/providers/vcs/pr-description.js +270 -0
  429. package/dist/providers/vcs/remote.d.ts +33 -1
  430. package/dist/providers/vcs/routing.d.ts +4 -2
  431. package/dist/providers/vcs/routing.js +6 -0
  432. package/dist/providers/vcs/types.d.ts +80 -3
  433. package/dist/quickstart/coding-seed.d.ts +14 -3
  434. package/dist/quickstart/coding-seed.js +213 -4
  435. package/dist/quickstart/reviewer-prompt.d.ts +1 -1
  436. package/dist/quickstart/reviewer-prompt.js +6 -6
  437. package/dist/quickstart-images.json +1 -1
  438. package/dist/sandbox/generated/zod.bundle.js +62 -1
  439. package/dist/sandbox/generated/zod3.bundle.js +5 -0
  440. package/dist/sandbox/host-functions.d.ts +1 -0
  441. package/dist/sandbox/host-functions.js +6 -11
  442. package/dist/sandbox/secret-broker.js +3 -4
  443. package/dist/sandbox/tool-capabilities.d.ts +10 -30
  444. package/dist/sandbox/zod-params.d.ts +37 -5
  445. package/dist/sandbox/zod-params.js +181 -26
  446. package/dist/serve.js +8 -1
  447. package/dist/viewer/api-schema.d.ts +349 -2627
  448. package/dist/viewer/api-schema.js +7 -0
  449. package/dist/viewer/build-schemas.js +6 -2
  450. package/dist/viewer/openapi.js +2 -4
  451. package/dist/wardby-bin.js +10 -0
  452. package/docs/agent-recipes.md +58 -20
  453. package/docs/code-review-agents.md +551 -41
  454. package/docs/coding-agent-setup.md +489 -7
  455. package/docs/coding-packages.md +1033 -90
  456. package/docs/coding-services.md +27 -12
  457. package/docs/coding-worker-byo-images.md +20 -0
  458. package/docs/coding-worker-isolation.md +105 -30
  459. package/docs/getting-started-gke.md +124 -137
  460. package/docs/getting-started-identity-provider.md +10 -1
  461. package/docs/getting-started.md +9 -0
  462. package/docs/jira-agents.md +17 -8
  463. package/docs/knowledge/blob-not-found-semantics.md +41 -0
  464. package/docs/knowledge/bounded-file-descriptor.md +52 -0
  465. package/docs/knowledge/delegation-admission-slots.md +52 -0
  466. package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
  467. package/docs/knowledge/import-rename-target.md +52 -0
  468. package/docs/knowledge/index.md +57 -0
  469. package/docs/knowledge/log.md +9 -0
  470. package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
  471. package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
  472. package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
  473. package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
  474. package/docs/knowledge/overview-cli.md +74 -0
  475. package/docs/knowledge/overview-coding-proxy.md +72 -0
  476. package/docs/knowledge/overview-coding.md +72 -0
  477. package/docs/knowledge/overview-config.md +60 -0
  478. package/docs/knowledge/overview-core.md +72 -0
  479. package/docs/knowledge/overview-deploy.md +83 -0
  480. package/docs/knowledge/overview-mcp.md +61 -0
  481. package/docs/knowledge/overview-prisma.md +72 -0
  482. package/docs/knowledge/overview-providers.md +89 -0
  483. package/docs/knowledge/overview-sandbox.md +83 -0
  484. package/docs/knowledge/overview-surfaces.md +83 -0
  485. package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
  486. package/docs/knowledge/proxy-settlement-projections.md +41 -0
  487. package/docs/knowledge/run-pricing-first-writer.md +43 -0
  488. package/docs/knowledge/schedule-claim-transaction.md +41 -0
  489. package/docs/knowledge/secret-entry-replica-contract.md +52 -0
  490. package/docs/knowledge/terminal-run-first-writer.md +41 -0
  491. package/docs/knowledge/transactional-agent-authorization.md +52 -0
  492. package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
  493. package/docs/knowledge/warm-input-publication.md +30 -0
  494. package/docs/knowledge/workspace-staging-failure.md +54 -0
  495. package/docs/knowledge.md +54 -14
  496. package/docs/native-sandbox.md +119 -23
  497. package/docs/observability.md +4 -0
  498. package/docs/security-deployment.md +33 -2
  499. package/docs/slack-notifications.md +35 -19
  500. package/docs/tool-secrets.md +42 -10
  501. package/docs/viewer-api.openapi.yml +1 -1
  502. package/help/admin-viewer.md +24 -2
  503. package/help/architecture-agent.md +11 -6
  504. package/help/build-worker-image.md +3 -1
  505. package/help/builder-agent.md +19 -6
  506. package/help/code-review-agents.md +177 -6
  507. package/help/coding-packages.md +156 -6
  508. package/help/cost-attribution.md +9 -5
  509. package/help/creating-agents.md +14 -1
  510. package/help/dependency-cache.md +143 -0
  511. package/help/deploy-gke.md +15 -8
  512. package/help/errors/budget-exhausted.md +187 -0
  513. package/help/errors/budget-group-exhausted.md +5 -1
  514. package/help/errors/coding-stream-quota-exceeded.md +33 -0
  515. package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
  516. package/help/errors/continuation-closed.md +9 -12
  517. package/help/errors/delegation-conflict.md +24 -0
  518. package/help/errors/file-list-truncated.md +45 -0
  519. package/help/errors/full-read-required.md +49 -0
  520. package/help/errors/github-account-not-allowed.md +4 -0
  521. package/help/errors/graph-incomplete.md +43 -0
  522. package/help/errors/graph-limit.md +43 -0
  523. package/help/errors/merge-conflict.md +49 -0
  524. package/help/errors/native-sandbox-gateway-error.md +20 -0
  525. package/help/errors/native-sandbox-launch-abandoned.md +21 -0
  526. package/help/errors/native-sandbox-worker-exited.md +3 -2
  527. package/help/errors/package-not-allowed-pending.md +52 -0
  528. package/help/errors/package-not-allowed.md +51 -0
  529. package/help/errors/package-refusals.md +43 -0
  530. package/help/errors/patch-cursor-malformed.md +31 -0
  531. package/help/errors/run-lost.md +39 -0
  532. package/help/errors/run-transcript-download.md +44 -0
  533. package/help/errors/secret-in-value.md +69 -0
  534. package/help/errors/target-merge.md +40 -0
  535. package/help/fix-merge-conflicts.md +73 -0
  536. package/help/github-app-setup.md +132 -0
  537. package/help/github.md +22 -0
  538. package/help/identity-and-access.md +2 -0
  539. package/help/jira.md +23 -6
  540. package/help/knowledge.md +16 -7
  541. package/help/local-repositories.md +1 -1
  542. package/help/low-power-mode.md +7 -1
  543. package/help/merge-order-check.md +5 -0
  544. package/help/native-capabilities.md +29 -1
  545. package/help/native-sandbox.md +15 -1
  546. package/help/operating-agents.md +5 -0
  547. package/help/package-audit-mode.md +91 -0
  548. package/help/related-pull-requests.md +10 -7
  549. package/help/resume-runs-locally.md +131 -0
  550. package/help/review-fix-rounds.md +33 -1
  551. package/help/sharing-agents.md +59 -0
  552. package/help/slack-notifications.md +19 -5
  553. package/help/status-comments.md +31 -0
  554. package/help/stop-run.md +58 -0
  555. package/help/troubleshooting/budgets.md +28 -0
  556. package/help/troubleshooting/coding-workers.md +78 -7
  557. package/package.json +17 -10
  558. package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
  559. package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
  560. package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
  561. package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
  562. package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
  563. package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
  564. package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
  565. package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
  566. package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
  567. package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
  568. package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
  569. package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
  570. package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
  571. package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
  572. package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
  573. package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
  574. package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
  575. package/prisma/schema.prisma +311 -97
  576. package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
@@ -25,6 +25,8 @@ model Agent {
25
25
  systemPrompt String
26
26
  model String
27
27
  budgetUsd Decimal @db.Decimal(10, 4)
28
+ /// Percent above budgetUsd a run may spend: each coding run's limit, or (on a lead agent) its run tree's ceiling for coding sub-agents; native model calls are unaffected; group caps still apply.
29
+ allowedOverrunPercent Int @default(0)
28
30
  createdAt DateTime @default(now())
29
31
  updatedAt DateTime @updatedAt
30
32
  runs Run[]
@@ -361,17 +363,22 @@ model Run {
361
363
  /// in-process runs. The reconciler consults the backend before declaring a
362
364
  /// stale run lost, and can adopt one orphaned by a dead instance.
363
365
  executionBackend String?
366
+ /// The DBOS workflow that currently holds this run, when it is not the run id: set when
367
+ /// recover() forks the run's workflow under a new application version. Null = the run id.
368
+ executionWorkflowId String?
364
369
  /// The agent's nativeExecutionMode when this run was created, fixed for the
365
370
  /// run's life and what the executor routes on. Null for coding runs and for
366
371
  /// native runs from before the field existed, which run in the control plane.
367
372
  nativeExecutionMode NativeExecutionMode?
368
373
  codingRun CodingRun?
374
+ transcript RunTranscript?
369
375
  hostCheck RunHostCheck?
370
376
  hostStatus RunHostStatus?
371
377
  issueStatus RunIssueStatus?
372
378
  attribution RunAttribution?
373
379
  modelUsage RunModelUsage[]
374
380
  serviceStatuses CodingRunServiceStatus[]
381
+ budgetEvents RunBudgetEvent[]
375
382
  /// A manual review of a local branch: this run is the review run dispatched for it.
376
383
  localPullRequest LocalPullRequest?
377
384
  /// A sandbox-mode native run's gateway session (native sandbox phase 3).
@@ -396,6 +403,9 @@ model Run {
396
403
  parentRunId String?
397
404
  parentRun Run? @relation("RunTree", fields: [parentRunId], references: [id])
398
405
  childRuns Run[] @relation("RunTree")
406
+ /// The parent's delegation call (the model's tool-call id) that created this child, so a
407
+ /// re-executed delegate step finds the same child instead of starting another.
408
+ parentCallId String?
399
409
  /// Ephemeral, per-dispatch grant: exactly the parent-memory keys this
400
410
  /// one child run was handed permission to read via parent_memory_get.
401
411
  /// Never a standing allowlist — re-granted on every dispatch call.
@@ -423,45 +433,60 @@ model Run {
423
433
  @@index([parentRunId])
424
434
  @@index([startDeferredAt])
425
435
  @@index([stopRequestedAt])
436
+ @@unique([parentRunId, parentCallId])
426
437
  }
427
438
 
428
439
  /// Phase 5: owner-configured coding behavior. Runtime credentials and opaque
429
440
  /// launcher handles never live on the reusable profile.
430
441
  model CodingAgentProfile {
431
- agentId String @id
432
- agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
433
- provider String @default("codex")
442
+ agentId String @id
443
+ agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
444
+ provider String @default("codex")
434
445
  repository String
435
- baseRef String @default("main")
446
+ baseRef String @default("main")
436
447
  defaultTask String?
437
- allowWebhookTaskOverride Boolean @default(false)
438
- timeoutSec Int @default(1800)
448
+ allowWebhookTaskOverride Boolean @default(false)
449
+ timeoutSec Int @default(1800)
439
450
  /// Claude Code runs only: the most agent turns a run may take. Null = the worker default (200).
440
451
  maxTurns Int?
452
+ /// Claude Code runs only: the most output tokens per model reply (1024-128000). Null = the worker default (32000).
453
+ maxOutputTokens Int?
441
454
  /// Unused; dropped after rollout (see the package-registry plan, Task 14).
442
- allowedEgress Json @default("[]")
455
+ allowedEgress Json @default("[]")
443
456
  protectedPaths Json
444
- collectExclude Json @default("[]")
445
- toolchain String @default("node")
457
+ collectExclude Json @default("[]")
458
+ toolchain String @default("node")
446
459
  toolchainVersion String?
447
460
  workerImageRef String?
448
461
  /// Per-agent workspace size in MiB; null = CODING_DISK_MB.
449
462
  workspaceDiskMb Int?
450
- packageAllowlist Json @default("{}")
451
- packagePolicy Json @default("{}")
463
+ packageAllowlist Json @default("{}")
464
+ packagePolicy Json @default("{}")
452
465
  /// Admin-requested debug trace: while now < debugTraceUntil, every coding
453
466
  /// run of this agent is dispatched with CodingRun.debugTrace set. Null = off.
454
467
  debugTraceUntil DateTime?
468
+ /// Admin-set cap on one traced run's trace output, in MiB; null = the worker default (2).
469
+ debugTraceMaxMb Int?
455
470
  /// Coding-run services (docs/coding-services.md): the catalog names
456
471
  /// (CodingService.name) this agent's runs may start, any version the catalog
457
472
  /// has. Empty = none. Owner-set through update_agent.
458
- services Json @default("[]")
473
+ services Json @default("[]")
459
474
  /// Load the repository's agent skills into coding runs (Codex: .agents/skills, .codex/skills;
460
475
  /// Claude Code: .claude/skills). Repo instructions (AGENTS.md / CLAUDE.md) load regardless.
461
- repoSkills Boolean @default(true)
476
+ repoSkills Boolean @default(true)
462
477
  /// Claude Code runs only: keep Claude Code's bare mode (CLAUDE_CODE_SIMPLE=1); wardby injects
463
478
  /// repo instructions and the skill list into the system prompt. False = Claude Code's native loading.
464
- claudeBareMode Boolean @default(true)
479
+ claudeBareMode Boolean @default(true)
480
+ /// Restore node_modules from a cached snapshot (written only by trusted wardby code before the
481
+ /// agent starts) instead of a full install. Owner-set; off by default.
482
+ dependencyCache Boolean @default(false)
483
+ /// Keep each Claude Code run's session transcript so it can be resumed in a local CLI
484
+ /// (docs/coding-agent-setup.md#resume-a-run-locally). Owner-set; off by default.
485
+ sessionResume Boolean @default(false)
486
+ /// Owner-set package audit mode (docs/coding-packages.md#package-audit-mode); active while now < packageAuditUntil.
487
+ packageAuditMode PackageAuditMode?
488
+ /// End of the audit window; null = off.
489
+ packageAuditUntil DateTime?
465
490
 
466
491
  /// How `repository` was authorized for this agent (see AgentRepository.authorizedVia):
467
492
  /// "host_permission", "admin", or "grandfathered". Null = never authorized; runs are refused.
@@ -474,64 +499,103 @@ model CodingAgentProfile {
474
499
  /// Phase 5: immutable dispatch inputs plus opaque execution/result state for
475
500
  /// one coding run. Policy is copied from the profile before work starts.
476
501
  model CodingRun {
477
- runId String @id
478
- run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
479
- task String
480
- repository String
481
- baseRef String
482
- headRef String
483
- provider String
484
- model String
485
- timeoutSec Int
502
+ runId String @id
503
+ run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
504
+ task String
505
+ /// The run's own request (the trigger's task or the agent's default task), without the agent's standing instructions. Null on older runs.
506
+ request String? @db.Text
507
+ repository String
508
+ baseRef String
509
+ headRef String
510
+ provider String
511
+ model String
512
+ timeoutSec Int
486
513
  /// Unused; dropped after rollout (see the package-registry plan, Task 14).
487
- allowedEgress Json @default("[]")
488
- protectedPaths Json
489
- collectExclude Json @default("[]")
490
- jobBackend String?
491
- jobHandle String?
492
- result Json?
493
- resultSchema Int @default(1)
514
+ allowedEgress Json @default("[]")
515
+ protectedPaths Json
516
+ collectExclude Json @default("[]")
517
+ jobBackend String?
518
+ jobHandle String?
519
+ result Json?
520
+ resultSchema Int @default(1)
494
521
  /// Sanitized terminal classification and an opaque log correlation reference.
495
522
  /// Neither field may contain task, repository, environment, or credential data.
496
- failureCategory String?
497
- diagnosticId String?
498
- workerImage String?
523
+ failureCategory String?
524
+ diagnosticId String?
525
+ workerImage String?
499
526
  /// Claude Code's tool-runner image, resolved from the agent's toolchain at dispatch; null for Codex runs.
500
- toolImage String?
501
- budgetReservedUsd Decimal @db.Decimal(10, 6)
527
+ toolImage String?
528
+ /// What the run may spend now: its base, plus every overrun top-up granted so
529
+ /// far (on runs with budgetLimitUsd). Budget groups and run trees hold it.
530
+ budgetReservedUsd Decimal @db.Decimal(10, 6)
531
+ /// The budget before the agent's allowed overrun. Null on older runs.
532
+ budgetBaseUsd Decimal? @db.Decimal(10, 6)
533
+ /// The most the run may spend: its base budget raised by the agent's allowed
534
+ /// overrun, never reserved up front; top-ups raise budgetReservedUsd toward it
535
+ /// only from room its group and run tree have left. Null = no top-ups (older
536
+ /// runs, or no allowed overrun): budgetReservedUsd is the limit.
537
+ budgetLimitUsd Decimal? @db.Decimal(10, 6)
538
+ /// What set budgetReservedUsd below the agent's own budget at dispatch:
539
+ /// run-tree, day, week or month. Null = the agent's own budget.
540
+ budgetLimitedBy String?
502
541
  /// Phase 12 concurrency queue: set when start() found every coding slot
503
542
  /// taken (CODING_MAX_CONCURRENT), cleared when the run claims a slot. A
504
543
  /// pending run with queuedAt set is waiting, not orphaned.
505
- queuedAt DateTime?
544
+ queuedAt DateTime?
506
545
  /// Per-agent workspace size in MiB; null = CODING_DISK_MB.
507
- workspaceDiskMb Int?
508
- packageAllowlist Json @default("{}")
509
- packagePolicy Json @default("{}")
546
+ workspaceDiskMb Int?
547
+ packageAllowlist Json @default("{}")
548
+ packagePolicy Json @default("{}")
510
549
  /// Fixed at dispatch from the profile's debugTraceUntil: the worker writes a
511
550
  /// full stream trace to its own pod log (never to the database).
512
- debugTrace Boolean @default(false)
551
+ debugTrace Boolean @default(false)
552
+ /// Fixed at dispatch from the profile's debugTraceMaxMb, only on a traced run. Null = the worker default.
553
+ debugTraceMaxMb Int?
513
554
  /// Fixed at dispatch from the profile's maxTurns: the Claude Code worker's turn limit. Null = the worker default.
514
- maxTurns Int?
555
+ maxTurns Int?
556
+ /// Fixed at dispatch from the profile's maxOutputTokens: Claude Code's output tokens per reply. Null = the worker default.
557
+ maxOutputTokens Int?
515
558
  /// Fixed at dispatch from the profile's repoSkills.
516
- repoSkills Boolean @default(true)
559
+ repoSkills Boolean @default(true)
517
560
  /// Fixed at dispatch from the profile's claudeBareMode.
518
- claudeBareMode Boolean @default(true)
561
+ claudeBareMode Boolean @default(true)
519
562
  /// Coding-run services resolved at dispatch from the base branch's
520
563
  /// .wardby/services.yaml: one snapshot per service (the catalog entry minus
521
564
  /// kind), fixed for the run's lifetime. Empty = none.
522
- services Json @default("[]")
565
+ services Json @default("[]")
523
566
  /// The originating tracker issue ("jira" + key), set by the control plane from the run tree, never from model output.
524
- issueProvider String?
525
- issueKey String?
567
+ issueProvider String?
568
+ issueKey String?
526
569
  /// The branch a run pushed to a local repository (no pull request exists); null otherwise.
527
- resultBranch String?
570
+ resultBranch String?
528
571
  /// The commit the run started from (the base ref's tip when the workspace was prepared).
529
- baseSha String?
572
+ baseSha String?
530
573
  /// Step in the request's merge order set by the delegating agent (1 = first); null = no order.
531
- mergeOrder Int?
532
- createdAt DateTime @default(now())
533
- updatedAt DateTime @updatedAt
534
- proxySession CodingProxySession?
574
+ mergeOrder Int?
575
+ /// When Wardby marked this run's pull request ready for review (at most once;
576
+ /// a person moving it back to draft is final). Only set on a root coding run.
577
+ markedReadyAt DateTime?
578
+ /// Root coding run only: SHA-256 (hex) of the pull request description Wardby last wrote,
579
+ /// normalized (CRLF→LF, Related pull requests section removed, blank lines collapsed, trimmed).
580
+ /// Null = never recorded (pull requests opened before this column, or a lost first write).
581
+ prDescriptionSha256 String?
582
+ /// Root coding run only: the coding run whose final message is that description's agent-written part.
583
+ prDescriptionRunId String?
584
+ /// This run's description update: written | replaced | refreshed:<reason> | unchanged |
585
+ /// edited_by_hand | skipped:<reason>. Null = not attempted.
586
+ prDescriptionOutcome String?
587
+ /// Fixed at dispatch from the profile's dependencyCache.
588
+ dependencyCache Boolean @default(false)
589
+ /// Fixed at dispatch from the profile's sessionResume.
590
+ sessionResume Boolean @default(false)
591
+ /// What the run's dependency cache did, written by the control plane when it collects the run:
592
+ /// { result, key?, sizeBytes?, restoreMs?, installMs?, reason? }. Null = not used or not reported.
593
+ dependencyCacheResult Json?
594
+ /// Fixed at dispatch: the profile's packageAuditMode when its window was open, else null.
595
+ packageAuditMode PackageAuditMode?
596
+ createdAt DateTime @default(now())
597
+ updatedAt DateTime @updatedAt
598
+ proxySession CodingProxySession?
535
599
 
536
600
  /// Revision-in-place for continuing an existing coding pull request.
537
601
  /// Points directly at the ROOT CodingRun that actually owns the branch/PR
@@ -547,6 +611,8 @@ model CodingRun {
547
611
  registryFetches RegistryFetch[]
548
612
  registryApprovedVersions RegistryApprovedVersion[]
549
613
  registryPlanRefusals RegistryPlanRefusal[]
614
+ registryAuditRecords RegistryAuditRecord[]
615
+ dependencySnapshots DependencySnapshot[]
550
616
 
551
617
  @@index([jobBackend, jobHandle])
552
618
  @@index([failureCategory])
@@ -555,6 +621,27 @@ model CodingRun {
555
621
  @@index([mergeOrder])
556
622
  }
557
623
 
624
+ /// A coding run's session transcript for local resume: metadata only. The redacted content lives in
625
+ /// the blob store under blobKey; the unredacted transcript is never stored.
626
+ model RunTranscript {
627
+ runId String @id
628
+ run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
629
+ /// "claude-code" (Codex later).
630
+ provider String
631
+ /// stored | too_large | not_captured | failed
632
+ status String
633
+ /// Fixed code for a status other than stored (e.g. missing, no_blob_store, secrets_unavailable); never content.
634
+ reason String?
635
+ sessionId String?
636
+ blobKey String?
637
+ sizeBytes Int?
638
+ sha256 String?
639
+ createdAt DateTime @default(now())
640
+ expiresAt DateTime
641
+
642
+ @@index([expiresAt])
643
+ }
644
+
558
645
  /// Coding-run services (docs/coding-services.md): the catalog a repository's
559
646
  /// .wardby/services.yaml names entries from. Admin-managed over MCP
560
647
  /// (list/get_service: agents:read; create/update/delete_service:
@@ -634,6 +721,28 @@ enum CodingProxyRequestStatus {
634
721
  uncertain
635
722
  }
636
723
 
724
+ enum RunBudgetEventKind {
725
+ refused
726
+ /// A coding run's overrun top-up found no room in its budget group or run tree.
727
+ overrun_unavailable
728
+ }
729
+
730
+ /// One budget decision about a run: a refusal by the coding proxy or at
731
+ /// dispatch, or an overrun top-up with no room, with the numbers behind it.
732
+ /// `limit` names what refused it: run, run-tree, day, week or month. `details`
733
+ /// holds amounts, the model and the turn; never secrets or message text.
734
+ model RunBudgetEvent {
735
+ id String @id @default(cuid())
736
+ runId String
737
+ run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
738
+ kind RunBudgetEventKind
739
+ limit String
740
+ at DateTime @default(now())
741
+ details Json
742
+
743
+ @@index([runId, at])
744
+ }
745
+
637
746
  enum NativeGatewaySessionStatus {
638
747
  active
639
748
  finished
@@ -677,6 +786,9 @@ model NativeGatewaySession {
677
786
  /// probe; a Docker run's network exists before its container). The gateway
678
787
  /// serves nothing before this is set.
679
788
  networkReadyAt DateTime?
789
+ /// What the run's review tools have read (ReviewReadsState), saved between gateway requests
790
+ /// for repo_publish_review's unread_files check. Null until the run reads a pull request.
791
+ reviewReads Json?
680
792
  createdAt DateTime @default(now())
681
793
  updatedAt DateTime @updatedAt
682
794
  calls NativeGatewayCall[]
@@ -723,6 +835,8 @@ model NativeGatewayCall {
723
835
  status NativeGatewayCallStatus
724
836
  reservationUsd Decimal? @db.Decimal(18, 10)
725
837
  actualCostUsd Decimal? @db.Decimal(18, 10)
838
+ /// actualCostUsd is an estimate for an interrupted call, not provider usage.
839
+ costEstimated Boolean @default(false)
726
840
  inputTokens Int?
727
841
  outputTokens Int?
728
842
  cachedInputTokens Int?
@@ -743,41 +857,49 @@ model NativeGatewayCall {
743
857
  /// Trusted-boundary state for one coding run. Only a capability digest and an
744
858
  /// upstream credential reference are persisted; neither secret value enters the DB.
745
859
  model CodingProxySession {
746
- id String @id @default(cuid())
747
- runId String @unique
748
- run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
749
- capabilityHash String @unique
750
- credentialRef String
751
- protocol String @default("openai-responses")
752
- allowedModels Json
753
- deadlineAt DateTime
754
- budgetUsd Decimal @db.Decimal(18, 10)
755
- status CodingProxySessionStatus @default(active)
756
- createdAt DateTime @default(now())
757
- updatedAt DateTime @updatedAt
758
- requests CodingProxyRequest[]
860
+ id String @id @default(cuid())
861
+ runId String @unique
862
+ run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
863
+ capabilityHash String @unique
864
+ credentialRef String
865
+ protocol String @default("openai-responses")
866
+ allowedModels Json
867
+ deadlineAt DateTime
868
+ budgetUsd Decimal @db.Decimal(18, 10)
869
+ status CodingProxySessionStatus @default(active)
870
+ createdAt DateTime @default(now())
871
+ updatedAt DateTime @updatedAt
872
+ requests CodingProxyRequest[]
759
873
  /// Hash of the derived registry-only token (see deriveRegistryToken); the
760
874
  /// token itself is never persisted.
761
- registryTokenHash String? @unique
875
+ registryTokenHash String? @unique
762
876
  /// Set the first time the proxy refuses a request of this session for
763
877
  /// budget; lets the executor report the run as out of budget.
764
- budgetExhaustedAt DateTime?
878
+ budgetExhaustedAt DateTime?
879
+ /// The numbers behind the first budget refusal of this session (budget, spent, holds, refused hold, model, turn); the control plane copies them into RunBudgetEvent. Never secrets.
880
+ budgetRefusal Json?
765
881
  /// The upstream error code (a fixed identifier, never a message) of the
766
882
  /// first provider failure the proxy relayed for this session; lets the
767
883
  /// executor say the model provider refused the run.
768
- upstreamFailure String?
884
+ upstreamFailure String?
769
885
  /// The run's catalog entry, copied from Run.pricingSnapshot when the session
770
886
  /// is created; the proxy prices and shapes requests from it. Null on
771
887
  /// sessions from before the model catalog (the proxy falls back to the
772
888
  /// shipped catalog).
773
- pricingVersion String?
774
- catalogEntry Json?
889
+ pricingVersion String?
890
+ catalogEntry Json?
891
+ /// Dependency cache: every lockfile hash this session's plans approved (with
892
+ /// no refusals) while unsealed, at most 8. Only these may be restored or uploaded.
893
+ dependencyCacheLockHashes String[] @default([])
894
+ /// Set when the run's dependency step is over; after it the cache refuses this session.
895
+ dependencyCacheSealedAt DateTime?
775
896
 
776
897
  @@index([deadlineAt])
777
898
  }
778
899
 
779
- /// Monotonic per-upstream-call ledger. Uncertain reservations remain held so a
780
- /// crash or truncated provider stream can never create new spendable budget.
900
+ /// Monotonic per-upstream-call ledger. An uncertain request without an
901
+ /// estimate stays held in full; one the proxy estimated (costEstimated) counts
902
+ /// at that estimate.
781
903
  model CodingProxyRequest {
782
904
  id String @id @default(cuid())
783
905
  sessionId String
@@ -788,6 +910,17 @@ model CodingProxyRequest {
788
910
  status CodingProxyRequestStatus @default(reserved)
789
911
  reservationUsd Decimal @db.Decimal(18, 10)
790
912
  actualCostUsd Decimal? @db.Decimal(18, 10)
913
+ /// actualCostUsd is the proxy's estimate for an interrupted (uncertain)
914
+ /// reply, not provider-reported usage.
915
+ costEstimated Boolean @default(false)
916
+ /// UTF-8 bytes of the forwarded request body; the next request's hold compares against it.
917
+ requestBytes Int?
918
+ /// The worst-case hold (whole body as uncached input); a reply costing more cancels the session.
919
+ ceilingUsd Decimal? @db.Decimal(18, 10)
920
+ /// "cached" (priced from the conversation's previous reply) or "full" (= ceilingUsd).
921
+ reservationBasis String?
922
+ /// sha256 of what identifies the conversation (first message, or OpenAI prompt_cache_key).
923
+ conversationKey String?
791
924
  pricingVersion String
792
925
  pricingSnapshot Json
793
926
  inputTokens Int?
@@ -802,6 +935,33 @@ model CodingProxyRequest {
802
935
 
803
936
  @@unique([sessionId, requestKey])
804
937
  @@index([sessionId, status])
938
+ @@index([sessionId, conversationKey])
939
+ }
940
+
941
+ /// Package audit mode (docs/coding-packages.md#package-audit-mode).
942
+ enum PackageAuditMode {
943
+ audit
944
+ full
945
+ }
946
+
947
+ /// One package version a run's registry served only because of package audit mode (or, in full mode,
948
+ /// served despite blocking advisories). Insert-only for the proxy.
949
+ model RegistryAuditRecord {
950
+ runId String
951
+ ecosystem String
952
+ name String
953
+ version String
954
+ /// "top-level" | "transitive" | "unknown" | "allowed" (allowed = on the allowlist graph, recorded only for advisories)
955
+ relation String
956
+ /// The top-level audited package that pulled it in (transitive only).
957
+ via String?
958
+ sizeBytes Int?
959
+ /// Full mode: [{ id, severity, summary }] served past; [] otherwise.
960
+ advisories Json @default("[]")
961
+ createdAt DateTime @default(now())
962
+ run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
963
+
964
+ @@id([runId, ecosystem, name, version])
805
965
  }
806
966
 
807
967
  enum RegistryFetchOutcome {
@@ -813,11 +973,15 @@ enum RegistryFetchOutcome {
813
973
  /// once at dispatch (see CodingRun.packageAllowlist) and used to gate every
814
974
  /// proxy fetch for the run's lifetime.
815
975
  model RegistryAllowance {
816
- runId String
817
- ecosystem String
818
- name String
819
- createdAt DateTime @default(now())
820
- run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
976
+ runId String
977
+ ecosystem String
978
+ name String
979
+ /// Set only in an audit-mode run: the top-level audited package whose metadata or file declared this
980
+ /// name (its own name for a top-level audited package; empty when a lockfile plan could not tell). Null = a
981
+ /// normal allowance.
982
+ auditedVia String?
983
+ createdAt DateTime @default(now())
984
+ run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
821
985
 
822
986
  @@id([runId, ecosystem, name])
823
987
  }
@@ -863,13 +1027,20 @@ model RegistryVersionFact {
863
1027
  /// /registry/<ecosystem>/-/plan) verified and approved: a download of it is
864
1028
  /// served directly, integrity-checked against this value.
865
1029
  model RegistryApprovedVersion {
866
- runId String
867
- ecosystem String
868
- name String
869
- version String
870
- integrity String
871
- createdAt DateTime @default(now())
872
- run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
1030
+ runId String
1031
+ ecosystem String
1032
+ name String
1033
+ version String
1034
+ integrity String
1035
+ /// Blocking advisories this run's packagePolicy.acceptedAdvisories waived
1036
+ /// for this version: empty unless the plan kept it only by that waiver. A
1037
+ /// download of it records them on its served RegistryFetch row.
1038
+ acceptedAdvisories String[] @default([])
1039
+ /// Audit-mode plans only: { relation, via?, advisories? } for an approval outside the allowlist, or
1040
+ /// one kept past advisories in full mode. Null = a normal approval.
1041
+ audit Json?
1042
+ createdAt DateTime @default(now())
1043
+ run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
873
1044
 
874
1045
  @@id([runId, ecosystem, name, version])
875
1046
  }
@@ -894,6 +1065,39 @@ model RegistryPlanRefusal {
894
1065
  @@id([runId, ecosystem, name, version])
895
1066
  }
896
1067
 
1068
+ /// A cached node_modules snapshot for one npm project of a repository, keyed
1069
+ /// server-side by the coding proxy. The archive lives in the blob store under
1070
+ /// blobKey; only trusted wardby code writes it, before a run's agent starts.
1071
+ /// Outlives the run that created it (createdByRunId is cleared when that run is
1072
+ /// deleted); evicted least-recently-used.
1073
+ model DependencySnapshot {
1074
+ id String @id @default(cuid())
1075
+ ecosystem String
1076
+ repository String
1077
+ /// The project's folder relative to the repository root; "." = the root.
1078
+ projectPath String @default(".")
1079
+ lockHash String
1080
+ workerImage String
1081
+ policyHash String
1082
+ blobKey String @unique
1083
+ sha256 String
1084
+ sizeBytes BigInt
1085
+ /// The format/version and bounds trusted worker code verified before upload.
1086
+ /// Null on snapshots made before validation metadata was introduced.
1087
+ archiveScanVersion Int?
1088
+ archiveEntries Int?
1089
+ unpackedBytes BigInt?
1090
+ createdAt DateTime @default(now())
1091
+ lastUsedAt DateTime @default(now())
1092
+ createdByRunId String?
1093
+ createdByRun CodingRun? @relation(fields: [createdByRunId], references: [runId], onDelete: SetNull)
1094
+
1095
+ @@unique([ecosystem, repository, projectPath, lockHash, workerImage, policyHash])
1096
+ @@index([ecosystem, repository, projectPath, workerImage, policyHash, createdAt])
1097
+ @@index([lastUsedAt])
1098
+ @@index([createdByRunId, projectPath])
1099
+ }
1100
+
897
1101
  /// Phase 2: single-row-per-scope lease so exactly one scheduler process
898
1102
  /// ticks at a time. `holder` is a process instance id (crypto.randomUUID()).
899
1103
  model SchedulerLease {
@@ -1235,29 +1439,34 @@ model AuthRateLimit {
1235
1439
  /// and which host events trigger it. See
1236
1440
  /// docs/private/2026-09-25-code-review-host-design.md §4.1.
1237
1441
  model AgentRepository {
1238
- id String @id @default(cuid())
1239
- agentId String
1240
- agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
1442
+ id String @id @default(cuid())
1443
+ agentId String
1444
+ agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
1241
1445
  /// "github" today; validated in code so adding a host needs no enum migration.
1242
- provider String
1446
+ provider String
1243
1447
  /// Canonical lower-case owner/name for the provider.
1244
- repository String
1448
+ repository String
1245
1449
  /// "read" or "write".
1246
- access String
1450
+ access String
1247
1451
  /// Subset of "pull_request", "mention", "push", "review_fix".
1248
- triggers String[] @default([])
1452
+ triggers String[] @default([])
1249
1453
  /// Only with the "pull_request" trigger (required there); names the agent's
1250
1454
  /// check. Unique per repository across all links (NULLs are distinct).
1251
- checkName String?
1455
+ checkName String?
1252
1456
  /// Only with the "review_fix" trigger: how many automatic fix rounds a
1253
1457
  /// pull request gets before wardby stops. Null = the default (2).
1254
- reviewFixMaxRounds Int?
1458
+ reviewFixMaxRounds Int?
1255
1459
  /// Only with the "pull_request" trigger: holds this agent's review on a
1256
1460
  /// pushed head until that head's own CI finishes (see DeferredReview),
1257
1461
  /// instead of racing it. Default off: existing links review immediately,
1258
1462
  /// exactly as today.
1259
- waitForCi Boolean @default(false)
1260
- createdAt DateTime @default(now())
1463
+ waitForCi Boolean @default(false)
1464
+ /// Only on a write (builder) link: Wardby marks the draft pull requests this
1465
+ /// agent opened in the repository ready for review, once, after every Wardby
1466
+ /// review check passed, CI is green and the merge order check (if any) is
1467
+ /// success. Default off.
1468
+ markReadyWhenPassing Boolean @default(false)
1469
+ createdAt DateTime @default(now())
1261
1470
 
1262
1471
  /// How this link was authorized: "host_permission" (the agent owner's
1263
1472
  /// verified host identity had enough access), "admin" (a wardby admin
@@ -1481,12 +1690,14 @@ model IssueFingerprint {
1481
1690
  @@index([createdByRunId])
1482
1691
  }
1483
1692
 
1484
- /// A pull request wardby opened for a tracker issue (the Jira -> code bridge). Provider-neutral on both sides.
1693
+ /// A pull request wardby opened for an issue (a Jira issue, a GitHub issue): one shape for every issue
1694
+ /// provider. Provider-neutral on both sides.
1485
1695
  /// Deliberately no foreign keys to Agent or Run: audit-style rows that survive agent/run deletion.
1486
1696
  model IssuePullRequest {
1487
1697
  id String @id @default(cuid())
1488
- /// "jira"
1698
+ /// "jira" or "github" (an issue on a repository).
1489
1699
  issueProvider String
1700
+ /// A Jira key ("PROJ-7"), or a GitHub issue's "<owner>/<repo>#<number>" (githubIssueKey).
1490
1701
  issueKey String
1491
1702
  /// "github" today; "bitbucket" next.
1492
1703
  codeProvider String
@@ -1636,6 +1847,9 @@ model LocalReview {
1636
1847
  pullRequest LocalPullRequest @relation(fields: [pullRequestId], references: [id], onDelete: Cascade)
1637
1848
  agentId String
1638
1849
  headSha String
1850
+ /// headSha when this review read every file of it (null otherwise): the head a later
1851
+ /// re-review may compare from and still APPROVE (repo_pr_read's lastCoveredSha).
1852
+ coveredSha String?
1639
1853
  /// APPROVE | CHANGES_REQUESTED | COMMENT
1640
1854
  verdict String
1641
1855
  summary String