@wardby/cli 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (740) hide show
  1. package/.env.example +5 -5
  2. package/README.md +6 -1
  3. package/deploy/local/docker-compose.quickstart-coding.yml +19 -0
  4. package/dist/claude-coding-worker/driver.d.ts +33 -3
  5. package/dist/claude-coding-worker/driver.js +151 -21
  6. package/dist/claude-coding-worker/main.js +38 -6
  7. package/dist/claude-coding-worker/sdk.js +29 -2
  8. package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
  9. package/dist/claude-coding-worker/tool-socket.js +111 -0
  10. package/dist/claude-coding-worker/transcript.d.ts +18 -0
  11. package/dist/claude-coding-worker/transcript.js +77 -0
  12. package/dist/claude-plugin/command.d.ts +61 -0
  13. package/dist/claude-plugin/command.js +376 -0
  14. package/dist/cli-help.d.ts +1 -1
  15. package/dist/cli-help.js +3 -1
  16. package/dist/cli.js +71 -13
  17. package/dist/coding/code-host.d.ts +16 -0
  18. package/dist/coding/code-host.js +60 -0
  19. package/dist/coding/continuation-wording.d.ts +35 -0
  20. package/dist/coding/continuation-wording.js +73 -0
  21. package/dist/coding/linked-issue-note.d.ts +23 -0
  22. package/dist/coding/linked-issue-note.js +47 -0
  23. package/dist/coding/mcp-token.d.ts +12 -0
  24. package/dist/coding/mcp-token.js +26 -0
  25. package/dist/coding/merge-wording.d.ts +28 -0
  26. package/dist/coding/merge-wording.js +78 -0
  27. package/dist/coding/pr-description-note.d.ts +9 -0
  28. package/dist/coding/pr-description-note.js +32 -0
  29. package/dist/coding/profile.d.ts +46 -126
  30. package/dist/coding/profile.js +45 -4
  31. package/dist/coding/protected-path-wording.d.ts +8 -0
  32. package/dist/coding/protected-path-wording.js +1 -1
  33. package/dist/coding/protocol.d.ts +264 -346
  34. package/dist/coding/protocol.js +237 -12
  35. package/dist/coding/redact.d.ts +3 -0
  36. package/dist/coding/redact.js +17 -0
  37. package/dist/coding/registry/allowlist.d.ts +12 -0
  38. package/dist/coding/registry/allowlist.js +14 -1
  39. package/dist/coding/registry/audit-mode.d.ts +153 -0
  40. package/dist/coding/registry/audit-mode.js +304 -0
  41. package/dist/coding/registry/lockfile-shared.d.ts +36 -0
  42. package/dist/coding/registry/lockfile-shared.js +128 -0
  43. package/dist/coding/registry/lockfiles.js +1 -1
  44. package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
  45. package/dist/coding/registry/npm-lockfile-formats.js +41 -0
  46. package/dist/coding/registry/npm-lockfile.d.ts +8 -4
  47. package/dist/coding/registry/npm-lockfile.js +4 -6
  48. package/dist/coding/registry/npm.js +78 -8
  49. package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
  50. package/dist/coding/registry/pnpm-lockfile.js +189 -0
  51. package/dist/coding/registry/pypi-plan.d.ts +50 -0
  52. package/dist/coding/registry/pypi-plan.js +406 -0
  53. package/dist/coding/registry/pypi-requirements.d.ts +58 -0
  54. package/dist/coding/registry/pypi-requirements.js +155 -0
  55. package/dist/coding/registry/pypi.d.ts +3 -27
  56. package/dist/coding/registry/pypi.js +40 -154
  57. package/dist/coding/registry/refusal-hints.d.ts +20 -0
  58. package/dist/coding/registry/refusal-hints.js +61 -0
  59. package/dist/coding/registry/refusal-wording.d.ts +11 -0
  60. package/dist/coding/registry/refusal-wording.js +56 -0
  61. package/dist/coding/registry/report.d.ts +70 -8
  62. package/dist/coding/registry/report.js +112 -5
  63. package/dist/coding/registry/types.d.ts +58 -8
  64. package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
  65. package/dist/coding/registry/yarn-lockfile.js +367 -0
  66. package/dist/coding/services/catalog.d.ts +37 -351
  67. package/dist/coding/transcript/claude-code.d.ts +13 -0
  68. package/dist/coding/transcript/claude-code.js +273 -0
  69. package/dist/coding/transcript/download-protocol.d.ts +30 -0
  70. package/dist/coding/transcript/download-protocol.js +18 -0
  71. package/dist/coding/transcript/format.d.ts +20 -0
  72. package/dist/coding/transcript/format.js +32 -0
  73. package/dist/coding/transcript/recorder.d.ts +52 -0
  74. package/dist/coding/transcript/recorder.js +225 -0
  75. package/dist/coding/transcript/resume/checkout.d.ts +31 -0
  76. package/dist/coding/transcript/resume/checkout.js +203 -0
  77. package/dist/coding/transcript/resume/command.d.ts +17 -0
  78. package/dist/coding/transcript/resume/command.js +176 -0
  79. package/dist/coding/transcript/resume/download.d.ts +20 -0
  80. package/dist/coding/transcript/resume/download.js +153 -0
  81. package/dist/coding/transcript/resume/launch.d.ts +38 -0
  82. package/dist/coding/transcript/resume/launch.js +128 -0
  83. package/dist/coding/transcript/resume/session-file.d.ts +13 -0
  84. package/dist/coding/transcript/resume/session-file.js +79 -0
  85. package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
  86. package/dist/coding/transcript/resume/stand-in.js +49 -0
  87. package/dist/coding-worker/artifact.d.ts +8 -3
  88. package/dist/coding-worker/artifact.js +3 -1
  89. package/dist/coding-worker/debug-trace.d.ts +9 -6
  90. package/dist/coding-worker/debug-trace.js +16 -19
  91. package/dist/coding-worker/dependency-cache.d.mts +229 -0
  92. package/dist/coding-worker/dependency-cache.mjs +2123 -0
  93. package/dist/coding-worker/driver.d.ts +4 -3
  94. package/dist/coding-worker/driver.js +124 -39
  95. package/dist/coding-worker/errors.d.ts +1 -0
  96. package/dist/coding-worker/errors.js +32 -0
  97. package/dist/coding-worker/main.js +5 -1
  98. package/dist/coding-worker/mcp-config.d.ts +27 -0
  99. package/dist/coding-worker/mcp-config.js +32 -0
  100. package/dist/coding-worker/sdk.d.ts +36 -0
  101. package/dist/coding-worker/sdk.js +28 -1
  102. package/dist/coding-worker/task-note.d.ts +11 -0
  103. package/dist/coding-worker/task-note.js +13 -0
  104. package/dist/coding-worker/types.d.ts +15 -0
  105. package/dist/config/dependency-cache.d.ts +23 -0
  106. package/dist/config/dependency-cache.js +32 -0
  107. package/dist/config/mcp-call-limit.d.ts +8 -0
  108. package/dist/config/mcp-call-limit.js +18 -0
  109. package/dist/config/mcp-servers.d.ts +8 -0
  110. package/dist/config/mcp-servers.js +12 -0
  111. package/dist/config/providers.d.ts +12 -3
  112. package/dist/config/providers.js +55 -5
  113. package/dist/config/test-simulators.d.ts +92 -0
  114. package/dist/config/test-simulators.js +333 -0
  115. package/dist/config/tool-timeout.d.ts +1 -0
  116. package/dist/config/tool-timeout.js +18 -0
  117. package/dist/core/async-context.d.ts +2 -0
  118. package/dist/core/async-context.js +12 -0
  119. package/dist/core/budget-events.d.ts +108 -0
  120. package/dist/core/budget-events.js +346 -0
  121. package/dist/core/budget-groups.d.ts +50 -1
  122. package/dist/core/budget-groups.js +236 -27
  123. package/dist/core/budget-stopped-head.d.ts +46 -0
  124. package/dist/core/budget-stopped-head.js +81 -0
  125. package/dist/core/budget-topup.d.ts +51 -0
  126. package/dist/core/budget-topup.js +156 -0
  127. package/dist/core/budget-wording.d.ts +16 -2
  128. package/dist/core/budget-wording.js +40 -2
  129. package/dist/core/coding-mcp.d.ts +36 -0
  130. package/dist/core/coding-mcp.js +253 -0
  131. package/dist/core/coding-queue.d.ts +2 -1
  132. package/dist/core/coding-queue.js +7 -0
  133. package/dist/core/coding-repository.d.ts +46 -0
  134. package/dist/core/coding-repository.js +92 -0
  135. package/dist/core/cron.d.ts +19 -1
  136. package/dist/core/cron.js +17 -0
  137. package/dist/core/datastores.js +1 -1
  138. package/dist/core/deferred-coding.d.ts +14 -0
  139. package/dist/core/deferred-coding.js +62 -0
  140. package/dist/core/delegation-child.d.ts +25 -0
  141. package/dist/core/delegation-child.js +37 -0
  142. package/dist/core/delegation-slots.d.ts +27 -0
  143. package/dist/core/delegation-slots.js +44 -0
  144. package/dist/core/dispatch.d.ts +48 -2
  145. package/dist/core/dispatch.js +166 -66
  146. package/dist/core/engine-native.js +1 -1
  147. package/dist/core/error-code.d.ts +38 -0
  148. package/dist/core/error-code.js +169 -0
  149. package/dist/core/grants.d.ts +46 -8
  150. package/dist/core/grants.js +99 -8
  151. package/dist/core/host-events.d.ts +18 -2
  152. package/dist/core/host-events.js +291 -27
  153. package/dist/core/host-status.d.ts +85 -3
  154. package/dist/core/host-status.js +300 -22
  155. package/dist/core/issue-bridge.d.ts +50 -6
  156. package/dist/core/issue-bridge.js +124 -33
  157. package/dist/core/issue-events.d.ts +1 -1
  158. package/dist/core/issue-events.js +4 -10
  159. package/dist/core/issue-status.d.ts +1 -1
  160. package/dist/core/issue-status.js +58 -29
  161. package/dist/core/logger.d.ts +5 -0
  162. package/dist/core/logger.js +14 -1
  163. package/dist/core/lost-run-children.d.ts +6 -0
  164. package/dist/core/lost-run-children.js +32 -0
  165. package/dist/core/mark-ready.d.ts +34 -0
  166. package/dist/core/mark-ready.js +152 -0
  167. package/dist/core/markdown-code.d.ts +8 -0
  168. package/dist/core/markdown-code.js +107 -0
  169. package/dist/core/mcp-client/client.d.ts +47 -0
  170. package/dist/core/mcp-client/client.js +141 -0
  171. package/dist/core/mcp-client/jsonrpc.d.ts +15 -0
  172. package/dist/core/mcp-client/jsonrpc.js +54 -0
  173. package/dist/core/mcp-client/results.d.ts +13 -0
  174. package/dist/core/mcp-client/results.js +42 -0
  175. package/dist/core/mcp-servers.d.ts +90 -0
  176. package/dist/core/mcp-servers.js +230 -0
  177. package/dist/core/mcp-tools.d.ts +108 -0
  178. package/dist/core/mcp-tools.js +287 -0
  179. package/dist/core/memory-tools.js +7 -0
  180. package/dist/core/merge-order-check.d.ts +2 -1
  181. package/dist/core/merge-order-check.js +44 -18
  182. package/dist/core/notification-dispatcher.js +2 -1
  183. package/dist/core/notification-templates.d.ts +1 -7
  184. package/dist/core/notification-templates.js +36 -2
  185. package/dist/core/pull-request-state-sync.js +2 -2
  186. package/dist/core/reconciler.d.ts +4 -3
  187. package/dist/core/reconciler.js +8 -1
  188. package/dist/core/related-pull-requests.d.ts +11 -3
  189. package/dist/core/related-pull-requests.js +49 -20
  190. package/dist/core/reply-parts.d.ts +21 -0
  191. package/dist/core/reply-parts.js +73 -0
  192. package/dist/core/review-fix.d.ts +1 -1
  193. package/dist/core/review-fix.js +4 -3
  194. package/dist/core/review-host-checks.d.ts +1 -1
  195. package/dist/core/review-host-tools.d.ts +3 -0
  196. package/dist/core/review-host-tools.js +102 -14
  197. package/dist/core/review-reads.d.ts +55 -0
  198. package/dist/core/review-reads.js +233 -0
  199. package/dist/core/run-status.d.ts +12 -0
  200. package/dist/core/run-status.js +12 -0
  201. package/dist/core/runner.d.ts +145 -49
  202. package/dist/core/runner.js +719 -216
  203. package/dist/core/schedule-start.d.ts +12 -0
  204. package/dist/core/schedule-start.js +14 -0
  205. package/dist/core/secret-broker-config.d.ts +12 -74
  206. package/dist/core/secret-broker-config.js +1 -1
  207. package/dist/core/secret-guard.d.ts +49 -0
  208. package/dist/core/secret-guard.js +119 -0
  209. package/dist/core/secret-guarded-stores.d.ts +12 -0
  210. package/dist/core/secret-guarded-stores.js +41 -0
  211. package/dist/core/secret-spans.d.ts +50 -0
  212. package/dist/core/secret-spans.js +94 -0
  213. package/dist/core/secrets.d.ts +11 -1
  214. package/dist/core/secrets.js +27 -1
  215. package/dist/core/serializable-retry.d.ts +18 -0
  216. package/dist/core/serializable-retry.js +43 -0
  217. package/dist/core/stop-run.d.ts +46 -0
  218. package/dist/core/stop-run.js +61 -0
  219. package/dist/core/tool-admin.d.ts +5 -1
  220. package/dist/core/tool-admin.js +7 -2
  221. package/dist/core/tool-names.d.ts +13 -0
  222. package/dist/core/tool-names.js +20 -0
  223. package/dist/core/webhooks.d.ts +4 -0
  224. package/dist/core/webhooks.js +68 -49
  225. package/dist/core/workflow-events.d.ts +14 -2
  226. package/dist/core/workflow-events.js +4 -0
  227. package/dist/core/workflow-run-events.d.ts +5 -3
  228. package/dist/core/workflow-run-events.js +45 -9
  229. package/dist/core/zod-json-schema.d.ts +4 -0
  230. package/dist/core/zod-json-schema.js +39 -0
  231. package/dist/core/zod3-window.d.ts +35 -0
  232. package/dist/core/zod3-window.js +124 -0
  233. package/dist/generated/prisma/browser.d.ts +65 -3
  234. package/dist/generated/prisma/client.d.ts +65 -3
  235. package/dist/generated/prisma/commonInputTypes.d.ts +266 -106
  236. package/dist/generated/prisma/enums.d.ts +10 -0
  237. package/dist/generated/prisma/enums.js +8 -0
  238. package/dist/generated/prisma/internal/class.d.ts +110 -0
  239. package/dist/generated/prisma/internal/class.js +4 -4
  240. package/dist/generated/prisma/internal/prismaNamespace.d.ts +957 -9
  241. package/dist/generated/prisma/internal/prismaNamespace.js +166 -2
  242. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +174 -0
  243. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +166 -2
  244. package/dist/generated/prisma/models/Agent.d.ts +377 -8
  245. package/dist/generated/prisma/models/AgentMcpServer.d.ts +1412 -0
  246. package/dist/generated/prisma/models/AgentMcpServer.js +1 -0
  247. package/dist/generated/prisma/models/AgentRepository.d.ts +81 -1
  248. package/dist/generated/prisma/models/AuthUser.d.ts +1 -1
  249. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +228 -7
  250. package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
  251. package/dist/generated/prisma/models/CodingProxySession.d.ts +232 -2
  252. package/dist/generated/prisma/models/CodingRun.d.ts +1712 -1
  253. package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
  254. package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
  255. package/dist/generated/prisma/models/HostProvider.d.ts +2176 -0
  256. package/dist/generated/prisma/models/HostProvider.js +1 -0
  257. package/dist/generated/prisma/models/HostProviderCredential.d.ts +1285 -0
  258. package/dist/generated/prisma/models/HostProviderCredential.js +1 -0
  259. package/dist/generated/prisma/models/HostProviderOperation.d.ts +1470 -0
  260. package/dist/generated/prisma/models/HostProviderOperation.js +1 -0
  261. package/dist/generated/prisma/models/HostProviderTrustedAccount.d.ts +1145 -0
  262. package/dist/generated/prisma/models/HostProviderTrustedAccount.js +1 -0
  263. package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
  264. package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
  265. package/dist/generated/prisma/models/McpServer.d.ts +1500 -0
  266. package/dist/generated/prisma/models/McpServer.js +1 -0
  267. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +77 -1
  268. package/dist/generated/prisma/models/NativeGatewaySession.d.ts +35 -1
  269. package/dist/generated/prisma/models/Principal.d.ts +167 -0
  270. package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
  271. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
  272. package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
  273. package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
  274. package/dist/generated/prisma/models/ResourceGrant.d.ts +1 -1
  275. package/dist/generated/prisma/models/Run.d.ts +738 -2
  276. package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
  277. package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
  278. package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
  279. package/dist/generated/prisma/models/RunTranscript.js +1 -0
  280. package/dist/generated/prisma/models/Secret.d.ts +387 -0
  281. package/dist/generated/prisma/models/Tool.d.ts +223 -1
  282. package/dist/generated/prisma/models.d.ts +10 -0
  283. package/dist/help/search.js +12 -3
  284. package/dist/help-index.json +2033 -110
  285. package/dist/import/create.js +48 -4
  286. package/dist/import/neutral-schema.d.ts +51 -281
  287. package/dist/import/neutral-schema.js +7 -4
  288. package/dist/knowledge/check.d.ts +1 -1
  289. package/dist/knowledge/cli.d.ts +11 -1
  290. package/dist/knowledge/cli.js +37 -4
  291. package/dist/knowledge/concept.d.ts +3 -19
  292. package/dist/knowledge/location.d.ts +31 -0
  293. package/dist/knowledge/location.js +78 -0
  294. package/dist/mcp/auth/access.d.ts +10 -2
  295. package/dist/mcp/auth/access.js +15 -1
  296. package/dist/mcp/auth/grants-cli.d.ts +6 -4
  297. package/dist/mcp/auth/grants-cli.js +42 -3
  298. package/dist/mcp/auth/ownership.d.ts +7 -7
  299. package/dist/mcp/auth/resource-server.d.ts +3 -1
  300. package/dist/mcp/auth/resource-server.js +17 -2
  301. package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
  302. package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
  303. package/dist/mcp/context.d.ts +3 -0
  304. package/dist/mcp/host-events/github-ingress.d.ts +2 -0
  305. package/dist/mcp/host-events/github-ingress.js +2 -1
  306. package/dist/mcp/index.d.ts +6 -0
  307. package/dist/mcp/index.js +69 -10
  308. package/dist/mcp/server.d.ts +13 -0
  309. package/dist/mcp/server.js +33 -14
  310. package/dist/mcp/tools/agents.d.ts +4 -0
  311. package/dist/mcp/tools/agents.js +295 -28
  312. package/dist/mcp/tools/datastore.js +17 -8
  313. package/dist/mcp/tools/grants.js +73 -29
  314. package/dist/mcp/tools/host-providers.d.ts +2 -0
  315. package/dist/mcp/tools/host-providers.js +215 -0
  316. package/dist/mcp/tools/mcp-servers.d.ts +26 -0
  317. package/dist/mcp/tools/mcp-servers.js +481 -0
  318. package/dist/mcp/tools/memory.js +11 -1
  319. package/dist/mcp/tools/notification-channels.js +2 -2
  320. package/dist/mcp/tools/packages.d.ts +2 -0
  321. package/dist/mcp/tools/packages.js +195 -0
  322. package/dist/mcp/tools/repositories.js +65 -12
  323. package/dist/mcp/tools/run-access.d.ts +16 -0
  324. package/dist/mcp/tools/run-access.js +25 -0
  325. package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
  326. package/dist/mcp/tools/run-transcript-download.js +129 -0
  327. package/dist/mcp/tools/run-transcript.d.ts +19 -0
  328. package/dist/mcp/tools/run-transcript.js +70 -0
  329. package/dist/mcp/tools/runs.js +209 -27
  330. package/dist/mcp/tools/scheduling.js +3 -1
  331. package/dist/mcp/tools/secret-elicitation-form.js +5 -0
  332. package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
  333. package/dist/mcp/tools/secret-elicitation-server.js +10 -61
  334. package/dist/mcp/tools/secret-elicitation.d.ts +2 -0
  335. package/dist/mcp/tools/secret-elicitation.js +25 -2
  336. package/dist/mcp/tools/secrets.js +40 -6
  337. package/dist/mcp/tools/stop-run.d.ts +2 -0
  338. package/dist/mcp/tools/stop-run.js +82 -0
  339. package/dist/mcp/tools/subagents.js +2 -2
  340. package/dist/mcp/tools/tools.d.ts +7 -5
  341. package/dist/mcp/tools/tools.js +64 -16
  342. package/dist/mcp/tools/trigger.js +28 -6
  343. package/dist/mcp/transport/http-limits.d.ts +2 -0
  344. package/dist/mcp/transport/http-limits.js +6 -2
  345. package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
  346. package/dist/mcp/transport/stdio-link-host.js +67 -0
  347. package/dist/mcp/transport/streamable-http.d.ts +13 -0
  348. package/dist/mcp/transport/streamable-http.js +41 -1
  349. package/dist/mcp/webhooks/ingress.js +10 -0
  350. package/dist/native-worker/docker-launcher.d.ts +38 -2
  351. package/dist/native-worker/docker-launcher.js +65 -5
  352. package/dist/native-worker/gateway-server.d.ts +55 -3
  353. package/dist/native-worker/gateway-server.js +152 -34
  354. package/dist/native-worker/gateway.d.ts +29 -1
  355. package/dist/native-worker/gateway.js +74 -4
  356. package/dist/native-worker/http-server.d.ts +7 -1
  357. package/dist/native-worker/http-server.js +62 -7
  358. package/dist/native-worker/http-transport.js +1 -1
  359. package/dist/native-worker/kubernetes-launcher.d.ts +7 -3
  360. package/dist/native-worker/kubernetes-launcher.js +43 -3
  361. package/dist/native-worker/launch.d.ts +18 -1
  362. package/dist/native-worker/launch.js +6 -1
  363. package/dist/native-worker/ledger.d.ts +24 -4
  364. package/dist/native-worker/ledger.js +62 -8
  365. package/dist/native-worker/loopback.js +3 -8
  366. package/dist/native-worker/main.d.ts +2 -1
  367. package/dist/native-worker/main.js +14 -3
  368. package/dist/native-worker/protocol.d.ts +130 -577
  369. package/dist/native-worker/protocol.js +51 -2
  370. package/dist/native-worker/sandbox-executor.d.ts +17 -2
  371. package/dist/native-worker/sandbox-executor.js +78 -4
  372. package/dist/native-worker/stderr-redaction.d.ts +77 -0
  373. package/dist/native-worker/stderr-redaction.js +237 -0
  374. package/dist/native-worker/stdio.d.ts +1 -1
  375. package/dist/native-worker/stdio.js +6 -5
  376. package/dist/native-worker/warm-pool.d.ts +2 -2
  377. package/dist/native-worker/warm-pool.js +4 -4
  378. package/dist/native-worker/worker.js +28 -2
  379. package/dist/observability/metrics.js +6 -1
  380. package/dist/providers/auth/self-hosted.d.ts +1 -1
  381. package/dist/providers/coding-proxy/capability-hash.d.ts +2 -0
  382. package/dist/providers/coding-proxy/capability-hash.js +5 -0
  383. package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
  384. package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
  385. package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
  386. package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
  387. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
  388. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
  389. package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
  390. package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
  391. package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
  392. package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
  393. package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
  394. package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
  395. package/dist/providers/coding-proxy/hold.d.ts +32 -0
  396. package/dist/providers/coding-proxy/hold.js +86 -0
  397. package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
  398. package/dist/providers/coding-proxy/interrupted.js +104 -0
  399. package/dist/providers/coding-proxy/mcp-route.d.ts +34 -0
  400. package/dist/providers/coding-proxy/mcp-route.js +166 -0
  401. package/dist/providers/coding-proxy/memory-ledger.d.ts +17 -2
  402. package/dist/providers/coding-proxy/memory-ledger.js +99 -8
  403. package/dist/providers/coding-proxy/metering.d.ts +16 -0
  404. package/dist/providers/coding-proxy/metering.js +27 -4
  405. package/dist/providers/coding-proxy/prisma-ledger.d.ts +16 -2
  406. package/dist/providers/coding-proxy/prisma-ledger.js +209 -69
  407. package/dist/providers/coding-proxy/proxy.d.ts +21 -2
  408. package/dist/providers/coding-proxy/proxy.js +300 -48
  409. package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
  410. package/dist/providers/coding-proxy/registry/audit.js +94 -17
  411. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
  412. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
  413. package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
  414. package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
  415. package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
  416. package/dist/providers/coding-proxy/registry/plan.js +201 -48
  417. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
  418. package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
  419. package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
  420. package/dist/providers/coding-proxy/registry/service.js +579 -112
  421. package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
  422. package/dist/providers/coding-proxy/registry/store.js +54 -1
  423. package/dist/providers/coding-proxy/runtime.d.ts +10 -0
  424. package/dist/providers/coding-proxy/runtime.js +109 -16
  425. package/dist/providers/coding-proxy/server.d.ts +9 -1
  426. package/dist/providers/coding-proxy/server.js +55 -1
  427. package/dist/providers/coding-proxy/types.d.ts +78 -1
  428. package/dist/providers/datastore/types.d.ts +5 -0
  429. package/dist/providers/engine/types.d.ts +17 -2
  430. package/dist/providers/engine/types.js +17 -0
  431. package/dist/providers/executor/composition.d.ts +10 -3
  432. package/dist/providers/executor/composition.js +52 -7
  433. package/dist/providers/executor/container.d.ts +394 -9
  434. package/dist/providers/executor/container.js +1210 -96
  435. package/dist/providers/executor/dbos-status.d.ts +31 -0
  436. package/dist/providers/executor/dbos-status.js +64 -0
  437. package/dist/providers/executor/dbos.d.ts +50 -1
  438. package/dist/providers/executor/dbos.js +207 -20
  439. package/dist/providers/executor/deferred.d.ts +12 -24
  440. package/dist/providers/executor/deferred.js +10 -29
  441. package/dist/providers/executor/in-process.d.ts +9 -1
  442. package/dist/providers/executor/in-process.js +14 -4
  443. package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
  444. package/dist/providers/executor/linked-issue-reader.js +30 -0
  445. package/dist/providers/executor/routing.d.ts +2 -0
  446. package/dist/providers/executor/routing.js +4 -0
  447. package/dist/providers/executor/types.d.ts +13 -0
  448. package/dist/providers/host-tools/invoke.d.ts +37 -0
  449. package/dist/providers/host-tools/invoke.js +117 -0
  450. package/dist/providers/host-tools/operations.d.ts +65 -0
  451. package/dist/providers/host-tools/operations.js +149 -0
  452. package/dist/providers/host-tools/registry.d.ts +79 -0
  453. package/dist/providers/host-tools/registry.js +362 -0
  454. package/dist/providers/host-tools/request-guard.d.ts +17 -0
  455. package/dist/providers/host-tools/request-guard.js +99 -0
  456. package/dist/providers/host-tools/self-test.d.ts +64 -0
  457. package/dist/providers/host-tools/self-test.js +142 -0
  458. package/dist/providers/index.d.ts +2 -1
  459. package/dist/providers/issue-tracker/types.d.ts +17 -0
  460. package/dist/providers/issue-tracker/types.js +39 -1
  461. package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
  462. package/dist/providers/jobs/claude-tool-setup.js +5 -2
  463. package/dist/providers/jobs/docker-isolation.d.ts +10 -2
  464. package/dist/providers/jobs/docker-isolation.js +47 -8
  465. package/dist/providers/jobs/docker.d.ts +9 -0
  466. package/dist/providers/jobs/docker.js +60 -11
  467. package/dist/providers/jobs/fake-kubernetes-api.d.ts +2 -0
  468. package/dist/providers/jobs/fake-kubernetes-api.js +3 -0
  469. package/dist/providers/jobs/kubernetes-api.d.ts +8 -0
  470. package/dist/providers/jobs/kubernetes-api.js +10 -0
  471. package/dist/providers/jobs/kubernetes-client.js +10 -1
  472. package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
  473. package/dist/providers/jobs/kubernetes-isolation.js +32 -3
  474. package/dist/providers/jobs/kubernetes.d.ts +11 -1
  475. package/dist/providers/jobs/kubernetes.js +111 -17
  476. package/dist/providers/jobs/types.d.ts +39 -0
  477. package/dist/providers/jobs/types.js +13 -1
  478. package/dist/providers/llm/anthropic.js +5 -1
  479. package/dist/providers/llm/bedrock.d.ts +0 -12
  480. package/dist/providers/llm/bedrock.js +4 -0
  481. package/dist/providers/llm/claude-messages.d.ts +3 -1
  482. package/dist/providers/llm/claude-messages.js +4 -1
  483. package/dist/providers/llm/claude-provider.d.ts +2 -2
  484. package/dist/providers/llm/claude-provider.js +2 -2
  485. package/dist/providers/llm/openai.d.ts +2 -2
  486. package/dist/providers/llm/openai.js +6 -2
  487. package/dist/providers/llm/routing.d.ts +2 -2
  488. package/dist/providers/llm/routing.js +2 -2
  489. package/dist/providers/llm/types.d.ts +12 -2
  490. package/dist/providers/review-host/github-events.d.ts +9 -1
  491. package/dist/providers/review-host/github-events.js +34 -12
  492. package/dist/providers/review-host/github.d.ts +29 -2
  493. package/dist/providers/review-host/github.js +224 -29
  494. package/dist/providers/review-host/local.d.ts +8 -4
  495. package/dist/providers/review-host/local.js +49 -31
  496. package/dist/providers/review-host/patch-pages.d.ts +41 -0
  497. package/dist/providers/review-host/patch-pages.js +176 -0
  498. package/dist/providers/review-host/review-format.d.ts +19 -1
  499. package/dist/providers/review-host/review-format.js +38 -7
  500. package/dist/providers/review-host/types.d.ts +140 -6
  501. package/dist/providers/review-host/types.js +9 -1
  502. package/dist/providers/storage/gcs.d.ts +63 -0
  503. package/dist/providers/storage/gcs.js +69 -0
  504. package/dist/providers/storage/index.d.ts +15 -0
  505. package/dist/providers/storage/index.js +14 -0
  506. package/dist/providers/storage/local.d.ts +24 -0
  507. package/dist/providers/storage/local.js +92 -0
  508. package/dist/providers/storage/meter.d.ts +14 -0
  509. package/dist/providers/storage/meter.js +34 -0
  510. package/dist/providers/storage/s3.d.ts +41 -0
  511. package/dist/providers/storage/s3.js +107 -0
  512. package/dist/providers/storage/types.d.ts +37 -3
  513. package/dist/providers/storage/types.js +21 -4
  514. package/dist/providers/vcs/git.d.ts +39 -4
  515. package/dist/providers/vcs/git.js +339 -26
  516. package/dist/providers/vcs/github-remote.d.ts +26 -3
  517. package/dist/providers/vcs/github-remote.js +124 -14
  518. package/dist/providers/vcs/github.d.ts +183 -44
  519. package/dist/providers/vcs/github.js +455 -56
  520. package/dist/providers/vcs/index.d.ts +1 -1
  521. package/dist/providers/vcs/index.js +9 -2
  522. package/dist/providers/vcs/pr-description.d.ts +127 -0
  523. package/dist/providers/vcs/pr-description.js +270 -0
  524. package/dist/providers/vcs/remote.d.ts +37 -1
  525. package/dist/providers/vcs/remote.js +7 -1
  526. package/dist/providers/vcs/routing.d.ts +16 -8
  527. package/dist/providers/vcs/routing.js +27 -6
  528. package/dist/providers/vcs/types.d.ts +150 -5
  529. package/dist/quickstart/coding-seed.d.ts +14 -3
  530. package/dist/quickstart/coding-seed.js +213 -4
  531. package/dist/quickstart/index.d.ts +5 -0
  532. package/dist/quickstart/index.js +21 -0
  533. package/dist/quickstart/reviewer-prompt.d.ts +1 -1
  534. package/dist/quickstart/reviewer-prompt.js +6 -6
  535. package/dist/quickstart-images.json +1 -1
  536. package/dist/sandbox/eval-core.d.ts +12 -2
  537. package/dist/sandbox/eval-core.js +20 -4
  538. package/dist/sandbox/generated/zod.bundle.js +62 -1
  539. package/dist/sandbox/generated/zod3.bundle.js +5 -0
  540. package/dist/sandbox/host-functions.d.ts +5 -0
  541. package/dist/sandbox/host-functions.js +13 -13
  542. package/dist/sandbox/limits.d.ts +4 -1
  543. package/dist/sandbox/limits.js +4 -1
  544. package/dist/sandbox/run-in-sandbox.d.ts +6 -0
  545. package/dist/sandbox/run-in-sandbox.js +14 -2
  546. package/dist/sandbox/safe-fetch.d.ts +2 -0
  547. package/dist/sandbox/safe-fetch.js +1 -1
  548. package/dist/sandbox/secret-broker.d.ts +1 -0
  549. package/dist/sandbox/secret-broker.js +4 -5
  550. package/dist/sandbox/tool-capabilities.d.ts +10 -30
  551. package/dist/sandbox/tool-timeout.d.ts +32 -0
  552. package/dist/sandbox/tool-timeout.js +52 -0
  553. package/dist/sandbox/user-tool.d.ts +8 -1
  554. package/dist/sandbox/user-tool.js +9 -3
  555. package/dist/sandbox/zod-params.d.ts +37 -5
  556. package/dist/sandbox/zod-params.js +181 -26
  557. package/dist/serve.js +8 -1
  558. package/dist/viewer/api-schema.d.ts +349 -2627
  559. package/dist/viewer/api-schema.js +7 -0
  560. package/dist/viewer/build-schemas.js +6 -2
  561. package/dist/viewer/graph.js +2 -1
  562. package/dist/viewer/openapi.js +2 -4
  563. package/dist/wardby-bin.js +15 -0
  564. package/docs/README.md +11 -1
  565. package/docs/agent-recipes.md +95 -24
  566. package/docs/architecture-runtime.md +1 -1
  567. package/docs/claude-code-plugin.md +164 -0
  568. package/docs/code-review-agents.md +557 -41
  569. package/docs/coding-agent-setup.md +566 -8
  570. package/docs/coding-packages.md +1033 -90
  571. package/docs/coding-services.md +27 -12
  572. package/docs/coding-worker-byo-images.md +24 -2
  573. package/docs/coding-worker-isolation.md +183 -37
  574. package/docs/debugging-agent-runs.md +242 -0
  575. package/docs/getting-started-gke.md +129 -141
  576. package/docs/getting-started-identity-provider.md +53 -38
  577. package/docs/getting-started.md +17 -0
  578. package/docs/host-providers.md +294 -0
  579. package/docs/jira-agents.md +17 -8
  580. package/docs/knowledge/blob-not-found-semantics.md +41 -0
  581. package/docs/knowledge/bounded-file-descriptor.md +52 -0
  582. package/docs/knowledge/delegation-admission-slots.md +52 -0
  583. package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
  584. package/docs/knowledge/import-rename-target.md +52 -0
  585. package/docs/knowledge/index.md +57 -0
  586. package/docs/knowledge/log.md +9 -0
  587. package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
  588. package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
  589. package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
  590. package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
  591. package/docs/knowledge/overview-cli.md +74 -0
  592. package/docs/knowledge/overview-coding-proxy.md +72 -0
  593. package/docs/knowledge/overview-coding.md +72 -0
  594. package/docs/knowledge/overview-config.md +60 -0
  595. package/docs/knowledge/overview-core.md +72 -0
  596. package/docs/knowledge/overview-deploy.md +83 -0
  597. package/docs/knowledge/overview-mcp.md +61 -0
  598. package/docs/knowledge/overview-prisma.md +72 -0
  599. package/docs/knowledge/overview-providers.md +89 -0
  600. package/docs/knowledge/overview-sandbox.md +83 -0
  601. package/docs/knowledge/overview-surfaces.md +83 -0
  602. package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
  603. package/docs/knowledge/proxy-settlement-projections.md +41 -0
  604. package/docs/knowledge/run-pricing-first-writer.md +43 -0
  605. package/docs/knowledge/schedule-claim-transaction.md +41 -0
  606. package/docs/knowledge/secret-entry-replica-contract.md +52 -0
  607. package/docs/knowledge/terminal-run-first-writer.md +41 -0
  608. package/docs/knowledge/transactional-agent-authorization.md +52 -0
  609. package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
  610. package/docs/knowledge/warm-input-publication.md +30 -0
  611. package/docs/knowledge/workspace-staging-failure.md +54 -0
  612. package/docs/knowledge.md +54 -14
  613. package/docs/mcp-servers.md +254 -0
  614. package/docs/native-sandbox.md +143 -31
  615. package/docs/observability.md +4 -0
  616. package/docs/security-deployment.md +139 -29
  617. package/docs/slack-notifications.md +35 -19
  618. package/docs/tool-secrets.md +45 -10
  619. package/docs/viewer-api.md +6 -0
  620. package/docs/viewer-api.openapi.yml +1 -1
  621. package/help/admin-viewer.md +28 -2
  622. package/help/agent-recipes.md +33 -2
  623. package/help/architecture-agent.md +11 -6
  624. package/help/brokered-secrets.md +3 -0
  625. package/help/build-claude-code-image.md +1 -1
  626. package/help/build-worker-image.md +3 -1
  627. package/help/builder-agent.md +19 -6
  628. package/help/claude-code-run-pane.md +40 -0
  629. package/help/code-review-agents.md +177 -6
  630. package/help/coding-packages.md +156 -6
  631. package/help/cost-attribution.md +9 -5
  632. package/help/creating-agents.md +14 -1
  633. package/help/dependency-cache.md +143 -0
  634. package/help/deploy-gke.md +15 -8
  635. package/help/errors/budget-exhausted.md +187 -0
  636. package/help/errors/budget-group-exhausted.md +5 -1
  637. package/help/errors/coding-mcp-pins-unavailable.md +35 -0
  638. package/help/errors/coding-stream-quota-exceeded.md +33 -0
  639. package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
  640. package/help/errors/continuation-closed.md +9 -12
  641. package/help/errors/database-auth-invalid.md +1 -1
  642. package/help/errors/delegation-conflict.md +24 -0
  643. package/help/errors/file-list-truncated.md +45 -0
  644. package/help/errors/full-read-required.md +49 -0
  645. package/help/errors/github-account-not-allowed.md +4 -0
  646. package/help/errors/graph-incomplete.md +43 -0
  647. package/help/errors/graph-limit.md +43 -0
  648. package/help/errors/host-provider-error.md +40 -0
  649. package/help/errors/host-tool-failed.md +36 -0
  650. package/help/errors/mcp-call-limit.md +22 -0
  651. package/help/errors/mcp-call-timeout.md +22 -0
  652. package/help/errors/mcp-server-auth-failed.md +22 -0
  653. package/help/errors/mcp-server-credentials-unavailable.md +45 -0
  654. package/help/errors/mcp-server-error.md +28 -0
  655. package/help/errors/mcp-server-unreachable.md +22 -0
  656. package/help/errors/mcp-servers-off.md +21 -0
  657. package/help/errors/mcp-tool-not-allowed.md +26 -0
  658. package/help/errors/mcp-tool-removed.md +22 -0
  659. package/help/errors/mcp-unavailable.md +25 -0
  660. package/help/errors/merge-conflict.md +49 -0
  661. package/help/errors/native-sandbox-capacity.md +1 -1
  662. package/help/errors/native-sandbox-deadline-exceeded.md +1 -1
  663. package/help/errors/native-sandbox-docker-failed.md +1 -1
  664. package/help/errors/native-sandbox-gateway-error.md +20 -0
  665. package/help/errors/native-sandbox-gateway-unavailable.md +1 -1
  666. package/help/errors/native-sandbox-image-not-pinned.md +1 -1
  667. package/help/errors/native-sandbox-isolation-mismatch.md +1 -1
  668. package/help/errors/native-sandbox-launch-abandoned.md +21 -0
  669. package/help/errors/native-sandbox-network-unenforced.md +1 -1
  670. package/help/errors/native-sandbox-requires-catalog.md +1 -1
  671. package/help/errors/native-sandbox-unavailable.md +1 -1
  672. package/help/errors/native-sandbox-warm-delivery-failed.md +1 -1
  673. package/help/errors/native-sandbox-worker-exited.md +4 -3
  674. package/help/errors/native-sandbox-worker-lost.md +1 -1
  675. package/help/errors/native-sandbox-worker-unready.md +1 -1
  676. package/help/errors/package-not-allowed-pending.md +52 -0
  677. package/help/errors/package-not-allowed.md +51 -0
  678. package/help/errors/package-refusals.md +43 -0
  679. package/help/errors/patch-cursor-malformed.md +31 -0
  680. package/help/errors/repository-not-listed.md +36 -0
  681. package/help/errors/repository-required.md +36 -0
  682. package/help/errors/run-lost.md +39 -0
  683. package/help/errors/run-transcript-download.md +44 -0
  684. package/help/errors/secret-in-value.md +69 -0
  685. package/help/errors/target-merge.md +40 -0
  686. package/help/errors/tool-timeout.md +38 -0
  687. package/help/fix-merge-conflicts.md +73 -0
  688. package/help/github-app-setup.md +132 -0
  689. package/help/github.md +22 -0
  690. package/help/host-providers.md +40 -0
  691. package/help/identity-and-access.md +6 -1
  692. package/help/jira.md +23 -6
  693. package/help/knowledge.md +16 -7
  694. package/help/local-repositories.md +1 -1
  695. package/help/low-power-mode.md +7 -1
  696. package/help/mcp-servers.md +73 -0
  697. package/help/mcp.md +7 -2
  698. package/help/merge-order-check.md +5 -0
  699. package/help/native-capabilities.md +55 -1
  700. package/help/native-sandbox.md +16 -2
  701. package/help/operating-agents.md +21 -0
  702. package/help/package-audit-mode.md +91 -0
  703. package/help/related-pull-requests.md +17 -10
  704. package/help/repo-instructions-and-skills.md +3 -1
  705. package/help/resume-runs-locally.md +134 -0
  706. package/help/review-fix-rounds.md +33 -1
  707. package/help/sharing-agents.md +59 -0
  708. package/help/slack-notifications.md +19 -5
  709. package/help/status-comments.md +31 -0
  710. package/help/stop-run.md +58 -0
  711. package/help/troubleshooting/budgets.md +28 -0
  712. package/help/troubleshooting/coding-workers.md +86 -7
  713. package/help/troubleshooting/debugging-agent-runs.md +29 -0
  714. package/package.json +18 -10
  715. package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
  716. package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
  717. package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
  718. package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
  719. package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
  720. package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
  721. package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
  722. package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
  723. package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
  724. package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
  725. package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
  726. package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
  727. package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
  728. package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
  729. package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
  730. package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
  731. package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
  732. package/prisma/migrations/20261102000000_host_providers/migration.sql +56 -0
  733. package/prisma/migrations/20261104000000_coding_agent_repository_list/migration.sql +5 -0
  734. package/prisma/migrations/20261106000000_tool_timeout/migration.sql +4 -0
  735. package/prisma/migrations/20261107000000_mcp_servers/migration.sql +33 -0
  736. package/prisma/migrations/20261108000000_coding_mcp/migration.sql +5 -0
  737. package/prisma/migrations/20261109000000_task_run_index/migration.sql +3 -0
  738. package/prisma/schema.prisma +468 -109
  739. package/scripts/git-askpass.sh +1 -1
  740. package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
@@ -20,16 +20,18 @@ datasource db {
20
20
  }
21
21
 
22
22
  model Agent {
23
- id String @id @default(cuid())
24
- name String @unique
25
- systemPrompt String
26
- model String
27
- budgetUsd Decimal @db.Decimal(10, 4)
28
- createdAt DateTime @default(now())
29
- updatedAt DateTime @updatedAt
30
- runs Run[]
31
- kind AgentKind @default(native)
32
- codingProfile CodingAgentProfile?
23
+ id String @id @default(cuid())
24
+ name String @unique
25
+ systemPrompt String
26
+ model String
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)
30
+ createdAt DateTime @default(now())
31
+ updatedAt DateTime @updatedAt
32
+ runs Run[]
33
+ kind AgentKind @default(native)
34
+ codingProfile CodingAgentProfile?
33
35
 
34
36
  // Phase 2: scheduling. `schedule` is a cron expression; null = manual-only.
35
37
  schedule String?
@@ -58,6 +60,7 @@ model Agent {
58
60
  repositories AgentRepository[]
59
61
  deferredReviews DeferredReview[]
60
62
  issueProjects AgentIssueProject[]
63
+ mcpServers AgentMcpServer[]
61
64
  notificationChannels NotificationChannel[]
62
65
 
63
66
  /// Self-defects opt-in: the Jira project and issue type wardby files the agent's own failures into. Both or neither.
@@ -184,6 +187,10 @@ model Tool {
184
187
  jsonSchema Json
185
188
  /// Tool body source; run inside the sandbox with the validated params.
186
189
  code String
190
+ /// The tool's own time limit per call (ms). Null = the default (10 s). A
191
+ /// run uses the lower of this and WARDBY_TOOL_MAX_TIMEOUT_MS, and pins the
192
+ /// value its load step read, like the code.
193
+ timeoutMs Int?
187
194
  createdAt DateTime @default(now())
188
195
  updatedAt DateTime @updatedAt
189
196
  agents AgentTool[]
@@ -193,6 +200,8 @@ model Tool {
193
200
  ownerId String?
194
201
  owner Principal? @relation(fields: [ownerId], references: [id])
195
202
 
203
+ hostProviderOperations HostProviderOperation[]
204
+
196
205
  @@unique([ownerId, name])
197
206
  }
198
207
 
@@ -361,17 +370,22 @@ model Run {
361
370
  /// in-process runs. The reconciler consults the backend before declaring a
362
371
  /// stale run lost, and can adopt one orphaned by a dead instance.
363
372
  executionBackend String?
373
+ /// The DBOS workflow that currently holds this run, when it is not the run id: set when
374
+ /// recover() forks the run's workflow under a new application version. Null = the run id.
375
+ executionWorkflowId String?
364
376
  /// The agent's nativeExecutionMode when this run was created, fixed for the
365
377
  /// run's life and what the executor routes on. Null for coding runs and for
366
378
  /// native runs from before the field existed, which run in the control plane.
367
379
  nativeExecutionMode NativeExecutionMode?
368
380
  codingRun CodingRun?
381
+ transcript RunTranscript?
369
382
  hostCheck RunHostCheck?
370
383
  hostStatus RunHostStatus?
371
384
  issueStatus RunIssueStatus?
372
385
  attribution RunAttribution?
373
386
  modelUsage RunModelUsage[]
374
387
  serviceStatuses CodingRunServiceStatus[]
388
+ budgetEvents RunBudgetEvent[]
375
389
  /// A manual review of a local branch: this run is the review run dispatched for it.
376
390
  localPullRequest LocalPullRequest?
377
391
  /// A sandbox-mode native run's gateway session (native sandbox phase 3).
@@ -396,6 +410,9 @@ model Run {
396
410
  parentRunId String?
397
411
  parentRun Run? @relation("RunTree", fields: [parentRunId], references: [id])
398
412
  childRuns Run[] @relation("RunTree")
413
+ /// The parent's delegation call (the model's tool-call id) that created this child, so a
414
+ /// re-executed delegate step finds the same child instead of starting another.
415
+ parentCallId String?
399
416
  /// Ephemeral, per-dispatch grant: exactly the parent-memory keys this
400
417
  /// one child run was handed permission to read via parent_memory_get.
401
418
  /// Never a standing allowlist — re-granted on every dispatch call.
@@ -415,6 +432,7 @@ model Run {
415
432
  /// text, no FK.
416
433
  triggeredById String?
417
434
 
435
+ @@unique([parentRunId, parentCallId])
418
436
  @@index([agentId, triggeredById])
419
437
  /// The admin viewer's graph window (runs started since a time, or still
420
438
  /// pending/running) and its ancestor/children walks (docs/viewer-api.md).
@@ -428,40 +446,54 @@ model Run {
428
446
  /// Phase 5: owner-configured coding behavior. Runtime credentials and opaque
429
447
  /// launcher handles never live on the reusable profile.
430
448
  model CodingAgentProfile {
431
- agentId String @id
432
- agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
433
- provider String @default("codex")
449
+ agentId String @id
450
+ agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
451
+ provider String @default("codex")
434
452
  repository String
435
- baseRef String @default("main")
453
+ baseRef String @default("main")
436
454
  defaultTask String?
437
- allowWebhookTaskOverride Boolean @default(false)
438
- timeoutSec Int @default(1800)
455
+ allowWebhookTaskOverride Boolean @default(false)
456
+ timeoutSec Int @default(1800)
439
457
  /// Claude Code runs only: the most agent turns a run may take. Null = the worker default (200).
440
458
  maxTurns Int?
459
+ /// Claude Code runs only: the most output tokens per model reply (1024-128000). Null = the worker default (32000).
460
+ maxOutputTokens Int?
441
461
  /// Unused; dropped after rollout (see the package-registry plan, Task 14).
442
- allowedEgress Json @default("[]")
462
+ allowedEgress Json @default("[]")
443
463
  protectedPaths Json
444
- collectExclude Json @default("[]")
445
- toolchain String @default("node")
464
+ collectExclude Json @default("[]")
465
+ toolchain String @default("node")
446
466
  toolchainVersion String?
447
467
  workerImageRef String?
448
468
  /// Per-agent workspace size in MiB; null = CODING_DISK_MB.
449
469
  workspaceDiskMb Int?
450
- packageAllowlist Json @default("{}")
451
- packagePolicy Json @default("{}")
470
+ packageAllowlist Json @default("{}")
471
+ packagePolicy Json @default("{}")
452
472
  /// Admin-requested debug trace: while now < debugTraceUntil, every coding
453
473
  /// run of this agent is dispatched with CodingRun.debugTrace set. Null = off.
454
474
  debugTraceUntil DateTime?
475
+ /// Admin-set cap on one traced run's trace output, in MiB; null = the worker default (2).
476
+ debugTraceMaxMb Int?
455
477
  /// Coding-run services (docs/coding-services.md): the catalog names
456
478
  /// (CodingService.name) this agent's runs may start, any version the catalog
457
479
  /// has. Empty = none. Owner-set through update_agent.
458
- services Json @default("[]")
480
+ services Json @default("[]")
459
481
  /// Load the repository's agent skills into coding runs (Codex: .agents/skills, .codex/skills;
460
482
  /// Claude Code: .claude/skills). Repo instructions (AGENTS.md / CLAUDE.md) load regardless.
461
- repoSkills Boolean @default(true)
483
+ repoSkills Boolean @default(true)
462
484
  /// Claude Code runs only: keep Claude Code's bare mode (CLAUDE_CODE_SIMPLE=1); wardby injects
463
485
  /// repo instructions and the skill list into the system prompt. False = Claude Code's native loading.
464
- claudeBareMode Boolean @default(true)
486
+ claudeBareMode Boolean @default(true)
487
+ /// Restore node_modules from a cached snapshot (written only by trusted wardby code before the
488
+ /// agent starts) instead of a full install. Owner-set; off by default.
489
+ dependencyCache Boolean @default(false)
490
+ /// Keep each Claude Code run's session transcript so it can be resumed in a local CLI
491
+ /// (docs/coding-agent-setup.md#resume-a-run-locally). Owner-set; off by default.
492
+ sessionResume Boolean @default(false)
493
+ /// Owner-set package audit mode (docs/coding-packages.md#package-audit-mode); active while now < packageAuditUntil.
494
+ packageAuditMode PackageAuditMode?
495
+ /// End of the audit window; null = off.
496
+ packageAuditUntil DateTime?
465
497
 
466
498
  /// How `repository` was authorized for this agent (see AgentRepository.authorizedVia):
467
499
  /// "host_permission", "admin", or "grandfathered". Null = never authorized; runs are refused.
@@ -474,64 +506,106 @@ model CodingAgentProfile {
474
506
  /// Phase 5: immutable dispatch inputs plus opaque execution/result state for
475
507
  /// one coding run. Policy is copied from the profile before work starts.
476
508
  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
509
+ runId String @id
510
+ run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
511
+ task String
512
+ /// 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.
513
+ request String? @db.Text
514
+ repository String
515
+ baseRef String
516
+ headRef String
517
+ provider String
518
+ model String
519
+ timeoutSec Int
486
520
  /// 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)
521
+ allowedEgress Json @default("[]")
522
+ protectedPaths Json
523
+ collectExclude Json @default("[]")
524
+ jobBackend String?
525
+ jobHandle String?
526
+ result Json?
527
+ resultSchema Int @default(1)
494
528
  /// Sanitized terminal classification and an opaque log correlation reference.
495
529
  /// Neither field may contain task, repository, environment, or credential data.
496
- failureCategory String?
497
- diagnosticId String?
498
- workerImage String?
530
+ failureCategory String?
531
+ diagnosticId String?
532
+ workerImage String?
499
533
  /// 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)
534
+ toolImage String?
535
+ /// What the run may spend now: its base, plus every overrun top-up granted so
536
+ /// far (on runs with budgetLimitUsd). Budget groups and run trees hold it.
537
+ budgetReservedUsd Decimal @db.Decimal(10, 6)
538
+ /// The budget before the agent's allowed overrun. Null on older runs.
539
+ budgetBaseUsd Decimal? @db.Decimal(10, 6)
540
+ /// The most the run may spend: its base budget raised by the agent's allowed
541
+ /// overrun, never reserved up front; top-ups raise budgetReservedUsd toward it
542
+ /// only from room its group and run tree have left. Null = no top-ups (older
543
+ /// runs, or no allowed overrun): budgetReservedUsd is the limit.
544
+ budgetLimitUsd Decimal? @db.Decimal(10, 6)
545
+ /// What set budgetReservedUsd below the agent's own budget at dispatch:
546
+ /// run-tree, day, week or month. Null = the agent's own budget.
547
+ budgetLimitedBy String?
502
548
  /// Phase 12 concurrency queue: set when start() found every coding slot
503
549
  /// taken (CODING_MAX_CONCURRENT), cleared when the run claims a slot. A
504
550
  /// pending run with queuedAt set is waiting, not orphaned.
505
- queuedAt DateTime?
551
+ queuedAt DateTime?
506
552
  /// Per-agent workspace size in MiB; null = CODING_DISK_MB.
507
- workspaceDiskMb Int?
508
- packageAllowlist Json @default("{}")
509
- packagePolicy Json @default("{}")
553
+ workspaceDiskMb Int?
554
+ packageAllowlist Json @default("{}")
555
+ packagePolicy Json @default("{}")
510
556
  /// Fixed at dispatch from the profile's debugTraceUntil: the worker writes a
511
557
  /// full stream trace to its own pod log (never to the database).
512
- debugTrace Boolean @default(false)
558
+ debugTrace Boolean @default(false)
559
+ /// Fixed at dispatch from the profile's debugTraceMaxMb, only on a traced run. Null = the worker default.
560
+ debugTraceMaxMb Int?
513
561
  /// Fixed at dispatch from the profile's maxTurns: the Claude Code worker's turn limit. Null = the worker default.
514
- maxTurns Int?
562
+ maxTurns Int?
563
+ /// Fixed at dispatch from the profile's maxOutputTokens: Claude Code's output tokens per reply. Null = the worker default.
564
+ maxOutputTokens Int?
515
565
  /// Fixed at dispatch from the profile's repoSkills.
516
- repoSkills Boolean @default(true)
566
+ repoSkills Boolean @default(true)
517
567
  /// Fixed at dispatch from the profile's claudeBareMode.
518
- claudeBareMode Boolean @default(true)
568
+ claudeBareMode Boolean @default(true)
519
569
  /// Coding-run services resolved at dispatch from the base branch's
520
570
  /// .wardby/services.yaml: one snapshot per service (the catalog entry minus
521
571
  /// kind), fixed for the run's lifetime. Empty = none.
522
- services Json @default("[]")
572
+ services Json @default("[]")
523
573
  /// 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?
574
+ issueProvider String?
575
+ issueKey String?
526
576
  /// The branch a run pushed to a local repository (no pull request exists); null otherwise.
527
- resultBranch String?
577
+ resultBranch String?
528
578
  /// The commit the run started from (the base ref's tip when the workspace was prepared).
529
- baseSha String?
579
+ baseSha String?
530
580
  /// 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?
581
+ mergeOrder Int?
582
+ /// Fixed at dispatch: this run's repository came from an AgentRepository link, not the
583
+ /// profile, so that link must still exist whenever the run uses the repository.
584
+ viaRepositoryLink Boolean @default(false)
585
+ /// When Wardby marked this run's pull request ready for review (at most once;
586
+ /// a person moving it back to draft is final). Only set on a root coding run.
587
+ markedReadyAt DateTime?
588
+ /// Root coding run only: SHA-256 (hex) of the pull request description Wardby last wrote,
589
+ /// normalized (CRLF→LF, Related pull requests section removed, blank lines collapsed, trimmed).
590
+ /// Null = never recorded (pull requests opened before this column, or a lost first write).
591
+ prDescriptionSha256 String?
592
+ /// Root coding run only: the coding run whose final message is that description's agent-written part.
593
+ prDescriptionRunId String?
594
+ /// This run's description update: written | replaced | refreshed:<reason> | unchanged |
595
+ /// edited_by_hand | skipped:<reason>. Null = not attempted.
596
+ prDescriptionOutcome String?
597
+ /// Fixed at dispatch from the profile's dependencyCache.
598
+ dependencyCache Boolean @default(false)
599
+ /// Fixed at dispatch from the profile's sessionResume.
600
+ sessionResume Boolean @default(false)
601
+ /// What the run's dependency cache did, written by the control plane when it collects the run:
602
+ /// { result, key?, sizeBytes?, restoreMs?, installMs?, reason? }. Null = not used or not reported.
603
+ dependencyCacheResult Json?
604
+ /// Fixed at dispatch: the profile's packageAuditMode when its window was open, else null.
605
+ packageAuditMode PackageAuditMode?
606
+ createdAt DateTime @default(now())
607
+ updatedAt DateTime @updatedAt
608
+ proxySession CodingProxySession?
535
609
 
536
610
  /// Revision-in-place for continuing an existing coding pull request.
537
611
  /// Points directly at the ROOT CodingRun that actually owns the branch/PR
@@ -547,6 +621,8 @@ model CodingRun {
547
621
  registryFetches RegistryFetch[]
548
622
  registryApprovedVersions RegistryApprovedVersion[]
549
623
  registryPlanRefusals RegistryPlanRefusal[]
624
+ registryAuditRecords RegistryAuditRecord[]
625
+ dependencySnapshots DependencySnapshot[]
550
626
 
551
627
  @@index([jobBackend, jobHandle])
552
628
  @@index([failureCategory])
@@ -555,6 +631,27 @@ model CodingRun {
555
631
  @@index([mergeOrder])
556
632
  }
557
633
 
634
+ /// A coding run's session transcript for local resume: metadata only. The redacted content lives in
635
+ /// the blob store under blobKey; the unredacted transcript is never stored.
636
+ model RunTranscript {
637
+ runId String @id
638
+ run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
639
+ /// "claude-code" (Codex later).
640
+ provider String
641
+ /// stored | too_large | not_captured | failed
642
+ status String
643
+ /// Fixed code for a status other than stored (e.g. missing, no_blob_store, secrets_unavailable); never content.
644
+ reason String?
645
+ sessionId String?
646
+ blobKey String?
647
+ sizeBytes Int?
648
+ sha256 String?
649
+ createdAt DateTime @default(now())
650
+ expiresAt DateTime
651
+
652
+ @@index([expiresAt])
653
+ }
654
+
558
655
  /// Coding-run services (docs/coding-services.md): the catalog a repository's
559
656
  /// .wardby/services.yaml names entries from. Admin-managed over MCP
560
657
  /// (list/get_service: agents:read; create/update/delete_service:
@@ -634,6 +731,28 @@ enum CodingProxyRequestStatus {
634
731
  uncertain
635
732
  }
636
733
 
734
+ enum RunBudgetEventKind {
735
+ refused
736
+ /// A coding run's overrun top-up found no room in its budget group or run tree.
737
+ overrun_unavailable
738
+ }
739
+
740
+ /// One budget decision about a run: a refusal by the coding proxy or at
741
+ /// dispatch, or an overrun top-up with no room, with the numbers behind it.
742
+ /// `limit` names what refused it: run, run-tree, day, week or month. `details`
743
+ /// holds amounts, the model and the turn; never secrets or message text.
744
+ model RunBudgetEvent {
745
+ id String @id @default(cuid())
746
+ runId String
747
+ run Run @relation(fields: [runId], references: [id], onDelete: Cascade)
748
+ kind RunBudgetEventKind
749
+ limit String
750
+ at DateTime @default(now())
751
+ details Json
752
+
753
+ @@index([runId, at])
754
+ }
755
+
637
756
  enum NativeGatewaySessionStatus {
638
757
  active
639
758
  finished
@@ -677,6 +796,9 @@ model NativeGatewaySession {
677
796
  /// probe; a Docker run's network exists before its container). The gateway
678
797
  /// serves nothing before this is set.
679
798
  networkReadyAt DateTime?
799
+ /// What the run's review tools have read (ReviewReadsState), saved between gateway requests
800
+ /// for repo_publish_review's unread_files check. Null until the run reads a pull request.
801
+ reviewReads Json?
680
802
  createdAt DateTime @default(now())
681
803
  updatedAt DateTime @updatedAt
682
804
  calls NativeGatewayCall[]
@@ -723,6 +845,8 @@ model NativeGatewayCall {
723
845
  status NativeGatewayCallStatus
724
846
  reservationUsd Decimal? @db.Decimal(18, 10)
725
847
  actualCostUsd Decimal? @db.Decimal(18, 10)
848
+ /// actualCostUsd is an estimate for an interrupted call, not provider usage.
849
+ costEstimated Boolean @default(false)
726
850
  inputTokens Int?
727
851
  outputTokens Int?
728
852
  cachedInputTokens Int?
@@ -732,6 +856,8 @@ model NativeGatewayCall {
732
856
  childRunId String?
733
857
  /// A delegation's sub-agent, recorded at admission (it holds a place while waiting for budget).
734
858
  childAgentId String?
859
+ /// A coding delegation's repository, recorded with childAgentId. Null = the child's default.
860
+ childRepository String?
735
861
  createdAt DateTime @default(now())
736
862
  updatedAt DateTime @updatedAt
737
863
  completedAt DateTime?
@@ -743,41 +869,55 @@ model NativeGatewayCall {
743
869
  /// Trusted-boundary state for one coding run. Only a capability digest and an
744
870
  /// upstream credential reference are persisted; neither secret value enters the DB.
745
871
  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[]
872
+ id String @id @default(cuid())
873
+ runId String @unique
874
+ run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
875
+ capabilityHash String @unique
876
+ credentialRef String
877
+ protocol String @default("openai-responses")
878
+ allowedModels Json
879
+ deadlineAt DateTime
880
+ budgetUsd Decimal @db.Decimal(18, 10)
881
+ status CodingProxySessionStatus @default(active)
882
+ createdAt DateTime @default(now())
883
+ updatedAt DateTime @updatedAt
884
+ requests CodingProxyRequest[]
759
885
  /// Hash of the derived registry-only token (see deriveRegistryToken); the
760
886
  /// token itself is never persisted.
761
- registryTokenHash String? @unique
887
+ registryTokenHash String? @unique
762
888
  /// Set the first time the proxy refuses a request of this session for
763
889
  /// budget; lets the executor report the run as out of budget.
764
- budgetExhaustedAt DateTime?
890
+ budgetExhaustedAt DateTime?
891
+ /// 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.
892
+ budgetRefusal Json?
765
893
  /// The upstream error code (a fixed identifier, never a message) of the
766
894
  /// first provider failure the proxy relayed for this session; lets the
767
895
  /// executor say the model provider refused the run.
768
- upstreamFailure String?
896
+ upstreamFailure String?
769
897
  /// The run's catalog entry, copied from Run.pricingSnapshot when the session
770
898
  /// is created; the proxy prices and shapes requests from it. Null on
771
899
  /// sessions from before the model catalog (the proxy falls back to the
772
900
  /// shipped catalog).
773
- pricingVersion String?
774
- catalogEntry Json?
901
+ pricingVersion String?
902
+ catalogEntry Json?
903
+ /// Dependency cache: every lockfile hash this session's plans approved (with
904
+ /// no refusals) while unsealed, at most 8. Only these may be restored or uploaded.
905
+ dependencyCacheLockHashes String[] @default([])
906
+ /// Set when the run's dependency step is over; after it the cache refuses this session.
907
+ dependencyCacheSealedAt DateTime?
908
+ /// Phase 2 of remote MCP servers: the run's pinned MCP tools (no URLs or secrets), or null.
909
+ mcpTools Json?
910
+ /// SHA-256 (base64url) of the run's MCP token; null when the run has no MCP tools.
911
+ mcpTokenHash String? @unique
912
+ /// MCP tools/call count for this run (capped by WARDBY_MCP_MAX_CALLS_PER_RUN).
913
+ mcpCallCount Int @default(0)
775
914
 
776
915
  @@index([deadlineAt])
777
916
  }
778
917
 
779
- /// Monotonic per-upstream-call ledger. Uncertain reservations remain held so a
780
- /// crash or truncated provider stream can never create new spendable budget.
918
+ /// Monotonic per-upstream-call ledger. An uncertain request without an
919
+ /// estimate stays held in full; one the proxy estimated (costEstimated) counts
920
+ /// at that estimate.
781
921
  model CodingProxyRequest {
782
922
  id String @id @default(cuid())
783
923
  sessionId String
@@ -788,6 +928,17 @@ model CodingProxyRequest {
788
928
  status CodingProxyRequestStatus @default(reserved)
789
929
  reservationUsd Decimal @db.Decimal(18, 10)
790
930
  actualCostUsd Decimal? @db.Decimal(18, 10)
931
+ /// actualCostUsd is the proxy's estimate for an interrupted (uncertain)
932
+ /// reply, not provider-reported usage.
933
+ costEstimated Boolean @default(false)
934
+ /// UTF-8 bytes of the forwarded request body; the next request's hold compares against it.
935
+ requestBytes Int?
936
+ /// The worst-case hold (whole body as uncached input); a reply costing more cancels the session.
937
+ ceilingUsd Decimal? @db.Decimal(18, 10)
938
+ /// "cached" (priced from the conversation's previous reply) or "full" (= ceilingUsd).
939
+ reservationBasis String?
940
+ /// sha256 of what identifies the conversation (first message, or OpenAI prompt_cache_key).
941
+ conversationKey String?
791
942
  pricingVersion String
792
943
  pricingSnapshot Json
793
944
  inputTokens Int?
@@ -802,6 +953,33 @@ model CodingProxyRequest {
802
953
 
803
954
  @@unique([sessionId, requestKey])
804
955
  @@index([sessionId, status])
956
+ @@index([sessionId, conversationKey])
957
+ }
958
+
959
+ /// Package audit mode (docs/coding-packages.md#package-audit-mode).
960
+ enum PackageAuditMode {
961
+ audit
962
+ full
963
+ }
964
+
965
+ /// One package version a run's registry served only because of package audit mode (or, in full mode,
966
+ /// served despite blocking advisories). Insert-only for the proxy.
967
+ model RegistryAuditRecord {
968
+ runId String
969
+ ecosystem String
970
+ name String
971
+ version String
972
+ /// "top-level" | "transitive" | "unknown" | "allowed" (allowed = on the allowlist graph, recorded only for advisories)
973
+ relation String
974
+ /// The top-level audited package that pulled it in (transitive only).
975
+ via String?
976
+ sizeBytes Int?
977
+ /// Full mode: [{ id, severity, summary }] served past; [] otherwise.
978
+ advisories Json @default("[]")
979
+ createdAt DateTime @default(now())
980
+ run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
981
+
982
+ @@id([runId, ecosystem, name, version])
805
983
  }
806
984
 
807
985
  enum RegistryFetchOutcome {
@@ -813,11 +991,15 @@ enum RegistryFetchOutcome {
813
991
  /// once at dispatch (see CodingRun.packageAllowlist) and used to gate every
814
992
  /// proxy fetch for the run's lifetime.
815
993
  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)
994
+ runId String
995
+ ecosystem String
996
+ name String
997
+ /// Set only in an audit-mode run: the top-level audited package whose metadata or file declared this
998
+ /// name (its own name for a top-level audited package; empty when a lockfile plan could not tell). Null = a
999
+ /// normal allowance.
1000
+ auditedVia String?
1001
+ createdAt DateTime @default(now())
1002
+ run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
821
1003
 
822
1004
  @@id([runId, ecosystem, name])
823
1005
  }
@@ -863,13 +1045,20 @@ model RegistryVersionFact {
863
1045
  /// /registry/<ecosystem>/-/plan) verified and approved: a download of it is
864
1046
  /// served directly, integrity-checked against this value.
865
1047
  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)
1048
+ runId String
1049
+ ecosystem String
1050
+ name String
1051
+ version String
1052
+ integrity String
1053
+ /// Blocking advisories this run's packagePolicy.acceptedAdvisories waived
1054
+ /// for this version: empty unless the plan kept it only by that waiver. A
1055
+ /// download of it records them on its served RegistryFetch row.
1056
+ acceptedAdvisories String[] @default([])
1057
+ /// Audit-mode plans only: { relation, via?, advisories? } for an approval outside the allowlist, or
1058
+ /// one kept past advisories in full mode. Null = a normal approval.
1059
+ audit Json?
1060
+ createdAt DateTime @default(now())
1061
+ run CodingRun @relation(fields: [runId], references: [runId], onDelete: Cascade)
873
1062
 
874
1063
  @@id([runId, ecosystem, name, version])
875
1064
  }
@@ -894,6 +1083,39 @@ model RegistryPlanRefusal {
894
1083
  @@id([runId, ecosystem, name, version])
895
1084
  }
896
1085
 
1086
+ /// A cached node_modules snapshot for one npm project of a repository, keyed
1087
+ /// server-side by the coding proxy. The archive lives in the blob store under
1088
+ /// blobKey; only trusted wardby code writes it, before a run's agent starts.
1089
+ /// Outlives the run that created it (createdByRunId is cleared when that run is
1090
+ /// deleted); evicted least-recently-used.
1091
+ model DependencySnapshot {
1092
+ id String @id @default(cuid())
1093
+ ecosystem String
1094
+ repository String
1095
+ /// The project's folder relative to the repository root; "." = the root.
1096
+ projectPath String @default(".")
1097
+ lockHash String
1098
+ workerImage String
1099
+ policyHash String
1100
+ blobKey String @unique
1101
+ sha256 String
1102
+ sizeBytes BigInt
1103
+ /// The format/version and bounds trusted worker code verified before upload.
1104
+ /// Null on snapshots made before validation metadata was introduced.
1105
+ archiveScanVersion Int?
1106
+ archiveEntries Int?
1107
+ unpackedBytes BigInt?
1108
+ createdAt DateTime @default(now())
1109
+ lastUsedAt DateTime @default(now())
1110
+ createdByRunId String?
1111
+ createdByRun CodingRun? @relation(fields: [createdByRunId], references: [runId], onDelete: SetNull)
1112
+
1113
+ @@unique([ecosystem, repository, projectPath, lockHash, workerImage, policyHash])
1114
+ @@index([ecosystem, repository, projectPath, workerImage, policyHash, createdAt])
1115
+ @@index([lastUsedAt])
1116
+ @@index([createdByRunId, projectPath])
1117
+ }
1118
+
897
1119
  /// Phase 2: single-row-per-scope lease so exactly one scheduler process
898
1120
  /// ticks at a time. `holder` is a process instance id (crypto.randomUUID()).
899
1121
  model SchedulerLease {
@@ -917,6 +1139,7 @@ model Principal {
917
1139
  webhooks Webhook[]
918
1140
  authUser AuthUser?
919
1141
  budgetGroups BudgetGroup[]
1142
+ mcpServers McpServer[]
920
1143
 
921
1144
  hostIdentities HostIdentity[]
922
1145
  hostIdentityLinkRequests HostIdentityLinkRequest[]
@@ -931,7 +1154,7 @@ model Principal {
931
1154
  /// AgentRepository.provider, so a new type or level needs no enum migration.
932
1155
  model ResourceGrant {
933
1156
  id String @id @default(cuid())
934
- /// "agent" | "tool" | "budget_group" (later "secret" | "datastore").
1157
+ /// "agent" | "tool" | "budget_group" | "mcp_server" (later "secret" | "datastore").
935
1158
  resourceType String
936
1159
  resourceId String
937
1160
  /// "principal" | "everyone" (later "group").
@@ -989,6 +1212,9 @@ model Task {
989
1212
  ttlAt DateTime
990
1213
  createdAt DateTime @default(now())
991
1214
  updatedAt DateTime @updatedAt
1215
+
1216
+ /// The run-drivability and cancelled-task lookups: findFirst({ runId, status: "cancelled" }).
1217
+ @@index([runId, status])
992
1218
  }
993
1219
 
994
1220
  /// Phase 4: a secret value, encrypted at rest via the SecretCipher seam.
@@ -1007,6 +1233,10 @@ model Secret {
1007
1233
  updatedAt DateTime @updatedAt
1008
1234
  agents AgentSecret[]
1009
1235
 
1236
+ hostProviderWebhooks HostProvider[] @relation("HostProviderWebhookSecret")
1237
+ hostProviderPermissions HostProvider[] @relation("HostProviderPermissionSecret")
1238
+ hostProviderCredentials HostProviderCredential[] @relation("HostProviderCredentialSecret")
1239
+
1010
1240
  @@unique([ownerId, name])
1011
1241
  }
1012
1242
 
@@ -1116,7 +1346,7 @@ model AuthUser {
1116
1346
  displayName String?
1117
1347
  status String @default("enabled")
1118
1348
  /// wardby roles (src/mcp/auth/resource-server.ts ROLE_PERMISSIONS: admin,
1119
- /// package-approver, service-manager, model-manager), set with `wardby auth user grant`. Empty = member.
1349
+ /// package-approver, service-manager, model-manager, host-manager), set with `wardby auth user grant`. Empty = member.
1120
1350
  /// A privileged operation needs its scope on the token AND a role here
1121
1351
  /// that grants it; unknown values grant nothing.
1122
1352
  roles String[] @default([])
@@ -1235,29 +1465,37 @@ model AuthRateLimit {
1235
1465
  /// and which host events trigger it. See
1236
1466
  /// docs/private/2026-09-25-code-review-host-design.md §4.1.
1237
1467
  model AgentRepository {
1238
- id String @id @default(cuid())
1239
- agentId String
1240
- agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
1468
+ id String @id @default(cuid())
1469
+ agentId String
1470
+ agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
1241
1471
  /// "github" today; validated in code so adding a host needs no enum migration.
1242
- provider String
1472
+ provider String
1243
1473
  /// Canonical lower-case owner/name for the provider.
1244
- repository String
1474
+ repository String
1245
1475
  /// "read" or "write".
1246
- access String
1476
+ access String
1247
1477
  /// Subset of "pull_request", "mention", "push", "review_fix".
1248
- triggers String[] @default([])
1478
+ triggers String[] @default([])
1249
1479
  /// Only with the "pull_request" trigger (required there); names the agent's
1250
1480
  /// check. Unique per repository across all links (NULLs are distinct).
1251
- checkName String?
1481
+ checkName String?
1252
1482
  /// Only with the "review_fix" trigger: how many automatic fix rounds a
1253
1483
  /// pull request gets before wardby stops. Null = the default (2).
1254
- reviewFixMaxRounds Int?
1484
+ reviewFixMaxRounds Int?
1255
1485
  /// Only with the "pull_request" trigger: holds this agent's review on a
1256
1486
  /// pushed head until that head's own CI finishes (see DeferredReview),
1257
1487
  /// instead of racing it. Default off: existing links review immediately,
1258
1488
  /// exactly as today.
1259
- waitForCi Boolean @default(false)
1260
- createdAt DateTime @default(now())
1489
+ waitForCi Boolean @default(false)
1490
+ /// Only on a write (builder) link: Wardby marks the draft pull requests this
1491
+ /// agent opened in the repository ready for review, once, after every Wardby
1492
+ /// review check passed, CI is green and the merge order check (if any) is
1493
+ /// success. Default off.
1494
+ markReadyWhenPassing Boolean @default(false)
1495
+ /// Only on a coding agent's link: the base branch for runs in this repository.
1496
+ /// Null = the coding profile's baseRef.
1497
+ baseRef String?
1498
+ createdAt DateTime @default(now())
1261
1499
 
1262
1500
  /// How this link was authorized: "host_permission" (the agent owner's
1263
1501
  /// verified host identity had enough access), "admin" (a wardby admin
@@ -1462,6 +1700,48 @@ model AgentIssueProject {
1462
1700
  @@index([provider, projectKey])
1463
1701
  }
1464
1702
 
1703
+ /// A remote MCP server an owner registered (Streamable HTTP, HTTPS only).
1704
+ model McpServer {
1705
+ id String @id @default(cuid())
1706
+ ownerId String
1707
+ owner Principal @relation(fields: [ownerId], references: [id], onDelete: Cascade)
1708
+ /// Unique per owner; the prefix of the tool names the model sees.
1709
+ name String
1710
+ /// https only; no userinfo, no fragment; the query string is kept.
1711
+ url String
1712
+ /// The owner's brokered secrets sent on every request (each brokered to the URL's host).
1713
+ secretNames String[] @default([])
1714
+ /// Last tools/list result, redacted: [{ name, description, inputSchema, annotations? }].
1715
+ toolSnapshot Json @default("[]")
1716
+ snapshotAt DateTime?
1717
+ /// From initialize: { name?, version?, protocolVersion }.
1718
+ serverInfo Json?
1719
+ createdAt DateTime @default(now())
1720
+ updatedAt DateTime @updatedAt
1721
+ agents AgentMcpServer[]
1722
+
1723
+ @@unique([ownerId, name])
1724
+ @@index([ownerId])
1725
+ }
1726
+
1727
+ /// An MCP server attached to an agent, with the server tools it may call.
1728
+ model AgentMcpServer {
1729
+ agentId String
1730
+ agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
1731
+ serverId String
1732
+ server McpServer @relation(fields: [serverId], references: [id], onDelete: Cascade)
1733
+ /// Exact tool names from the server's saved list. Never empty.
1734
+ allowedTools String[]
1735
+ /// Per call; null = 30000. Capped by WARDBY_TOOL_MAX_TIMEOUT_MS at call time.
1736
+ callTimeoutMs Int?
1737
+ attachedById String
1738
+ createdAt DateTime @default(now())
1739
+ updatedAt DateTime @updatedAt
1740
+
1741
+ @@id([agentId, serverId])
1742
+ @@index([serverId])
1743
+ }
1744
+
1465
1745
  /// Dedupe record: an issue wardby created for a fingerprint (several over time — regressions).
1466
1746
  model IssueFingerprint {
1467
1747
  id String @id @default(cuid())
@@ -1481,12 +1761,14 @@ model IssueFingerprint {
1481
1761
  @@index([createdByRunId])
1482
1762
  }
1483
1763
 
1484
- /// A pull request wardby opened for a tracker issue (the Jira -> code bridge). Provider-neutral on both sides.
1764
+ /// A pull request wardby opened for an issue (a Jira issue, a GitHub issue): one shape for every issue
1765
+ /// provider. Provider-neutral on both sides.
1485
1766
  /// Deliberately no foreign keys to Agent or Run: audit-style rows that survive agent/run deletion.
1486
1767
  model IssuePullRequest {
1487
1768
  id String @id @default(cuid())
1488
- /// "jira"
1769
+ /// "jira" or "github" (an issue on a repository).
1489
1770
  issueProvider String
1771
+ /// A Jira key ("PROJ-7"), or a GitHub issue's "<owner>/<repo>#<number>" (githubIssueKey).
1490
1772
  issueKey String
1491
1773
  /// "github" today; "bitbucket" next.
1492
1774
  codeProvider String
@@ -1636,6 +1918,9 @@ model LocalReview {
1636
1918
  pullRequest LocalPullRequest @relation(fields: [pullRequestId], references: [id], onDelete: Cascade)
1637
1919
  agentId String
1638
1920
  headSha String
1921
+ /// headSha when this review read every file of it (null otherwise): the head a later
1922
+ /// re-review may compare from and still APPROVE (repo_pr_read's lastCoveredSha).
1923
+ coveredSha String?
1639
1924
  /// APPROVE | CHANGES_REQUESTED | COMMENT
1640
1925
  verdict String
1641
1926
  summary String
@@ -1739,3 +2024,77 @@ model NotificationThread {
1739
2024
 
1740
2025
  @@unique([provider, channelId, threadKey])
1741
2026
  }
2027
+
2028
+ /// A code host implemented by operator-approved custom tools (docs/host-providers.md).
2029
+ /// `name` is the prefix of its repository ids: `<name>:<workspace>/<repo>`. Holds no secret values.
2030
+ model HostProvider {
2031
+ name String @id
2032
+ contractVersion Int
2033
+ gitHost String
2034
+ apiHosts String[]
2035
+ gitUsername String
2036
+ pullRequestUrlTemplate String
2037
+ /// Where one repository lives on the API, with `{repository}`: a repository-scoped tool's requests stay under it.
2038
+ repositoryApiPath String
2039
+ /// The effective-permission endpoint, with `{workspace}` and `{repo}`. Set with a permission secret.
2040
+ permissionApiPath String?
2041
+ /// How to verify and read a webhook: header names and algorithm, never the secret.
2042
+ webhook Json
2043
+ webhookSecretId String
2044
+ webhookSecret Secret @relation("HostProviderWebhookSecret", fields: [webhookSecretId], references: [id], onDelete: Restrict)
2045
+ /// Set: ask the host who has access. Unset: trustedAccounts decides.
2046
+ permissionSecretId String?
2047
+ permissionSecret Secret? @relation("HostProviderPermissionSecret", fields: [permissionSecretId], references: [id], onDelete: Restrict)
2048
+ createdById String
2049
+ createdAt DateTime @default(now())
2050
+ updatedAt DateTime @updatedAt
2051
+
2052
+ operations HostProviderOperation[]
2053
+ credentials HostProviderCredential[]
2054
+ trustedAccounts HostProviderTrustedAccount[]
2055
+ }
2056
+
2057
+ /// One approved snapshot: the code Wardby runs. `update_tool` changes nothing here until approved again.
2058
+ model HostProviderOperation {
2059
+ provider String
2060
+ operation String
2061
+ /// The tool it was copied from. Null once that tool is deleted; the snapshot keeps working.
2062
+ toolId String?
2063
+ code String
2064
+ paramsZod String
2065
+ /// The tool's timeoutMs when it was approved; null = the default limit.
2066
+ timeoutMs Int?
2067
+ approvedById String
2068
+ approvedAt DateTime @default(now())
2069
+
2070
+ hostProvider HostProvider @relation(fields: [provider], references: [name], onDelete: Cascade)
2071
+ tool Tool? @relation(fields: [toolId], references: [id], onDelete: SetNull)
2072
+
2073
+ @@id([provider, operation])
2074
+ }
2075
+
2076
+ /// Which brokered secret serves which repositories. `credentialKind` is `static` only in v1.
2077
+ model HostProviderCredential {
2078
+ id String @id @default(cuid())
2079
+ provider String
2080
+ repositoryPattern String
2081
+ secretId String
2082
+ credentialKind String @default("static")
2083
+
2084
+ hostProvider HostProvider @relation(fields: [provider], references: [name], onDelete: Cascade)
2085
+ secret Secret @relation("HostProviderCredentialSecret", fields: [secretId], references: [id], onDelete: Restrict)
2086
+
2087
+ @@unique([provider, repositoryPattern])
2088
+ }
2089
+
2090
+ /// Host accounts allowed to start runs when the provider has no permission secret.
2091
+ model HostProviderTrustedAccount {
2092
+ provider String
2093
+ accountId String
2094
+ addedById String
2095
+ addedAt DateTime @default(now())
2096
+
2097
+ hostProvider HostProvider @relation(fields: [provider], references: [name], onDelete: Cascade)
2098
+
2099
+ @@id([provider, accountId])
2100
+ }