@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
@@ -31,6 +31,15 @@ Once an agent is linked to a repository with the `pull_request` trigger:
31
31
  runs. When the cause is budget, the check says so ("Review could not run:
32
32
  out of budget") and names the budget that was used up; use **Re-run** after
33
33
  raising the budget or once it resets.
34
+ - A pull request that is still a **draft**, whose latest commit was pushed by a
35
+ coding run that stopped at its budget, is not reviewed automatically: the
36
+ check completes as `neutral` with the title "Skipped: stopped at its
37
+ budget". This is deliberate and is not the dispatch failure above: a draft
38
+ is not merged, and the review would only repeat findings the continuation
39
+ addresses. Marking the pull request ready for review or pushing a new
40
+ commit starts a normal review, and so does re-running the check or a
41
+ review mention. See
42
+ [Stopped for budget](coding-agent-setup.md#stopped-for-budget-the-work-so-far-is-kept).
34
43
  - On a later review, the agent sees its own unresolved inline threads and
35
44
  can **resolve the ones the new head fixes**, so fixed findings collapse on
36
45
  the PR page. Only threads that agent started are resolved; people's
@@ -61,9 +70,30 @@ thread) right after the reaction. When the run ends, the App edits that
61
70
  comment with the outcome:
62
71
 
63
72
  - the pull requests the run's coding sub-runs opened or pushed to;
73
+ - ⛔ **Blocked by the package registry: no changes were made.** when coding
74
+ sub-runs recorded package refusals and no pull request or pushed changes
75
+ resulted. The comment lists up to ten distinct refusals, with reasons,
76
+ registry codes and fixes; use `get_run` for the full list. An approver updates
77
+ `codingProfile.packageAllowlist` or `codingProfile.packagePolicy` with
78
+ `update_agent` (needs `packages:approve` or `agents:admin`), then the
79
+ requester mentions `@wardby` again. See [Package policy](coding-packages.md)
80
+ and [Status comments help](../help/status-comments.md). Jira status comments
81
+ and Slack notifications use the same blocked guidance;
82
+ - a ⚠️ dependency install warning listing refusals when changes were pushed,
83
+ while keeping the pull request link. Without refusals, the usual ✅ / ❌
84
+ wording remains;
64
85
  - the agent's final reply, quoted, when no pull request came out (for
65
86
  example, a question back to the requester). `@`-mentions in the reply are
66
87
  defused so nobody is pinged;
88
+ - when that reply is longer than about 2,000 characters, the comment says
89
+ "✅ Finished without opening a pull request. The full reply follows in the
90
+ next comment(s)." (in a review thread: "...follows in this pull request's
91
+ conversation."), and the reply follows in up to four numbered comments
92
+ ("Reply, part i of n") of about 60,000 characters each, split at headings,
93
+ paragraphs or lines. Anything beyond four parts is cut with a note that the
94
+ full text is on the run (`get_run`, `finalText`); each part is posted once,
95
+ and if one cannot be posted the rest are skipped. Runs that opened a pull
96
+ request or had a failed sub-run keep the quoted excerpt;
67
97
  - a failure when a coding sub-run it started did not succeed, even though
68
98
  the mention agent itself finished (with the agent's reply quoted);
69
99
  - that the request was **interrupted** and should be repeated, when the run
@@ -90,10 +120,78 @@ repository can trigger a run. wardby asks GitHub for the author's real
90
120
  permission on the repository (by their numeric user id) before either path
91
121
  runs; `read` and `triage` are not enough, because a mention drives an agent
92
122
  that holds its owner's tools, secrets, and write access. GitHub's
93
- `author_association` (owner, member, collaborator) is only a first filter:
94
- it would admit any organization member, or a read-only collaborator. Mentions
95
- by bots, and mentions from anyone without write access, are ignored silently
96
- (no run, no reaction).
123
+ `author_association` is only a first filter: it drops first-time authors
124
+ (`FIRST_TIME_CONTRIBUTOR`, `FIRST_TIMER`) and mannequins, and lets every
125
+ other association through to the permission check. That includes
126
+ `CONTRIBUTOR` and `NONE`, which GitHub reports for an organization member
127
+ whose membership is private. Mentions by bots, and mentions from anyone
128
+ without access to the repository, are ignored silently (no run, no reaction).
129
+ The server logs an info line for each one, naming the event, repository and
130
+ association, never the text.
131
+
132
+ Someone who holds a role on the repository but lacks write access can see it
133
+ but cannot start a run. Their mention gets a 😕 reaction and a one-line reply
134
+ saying a mention needs write access, so they know to ask someone who has it.
135
+ No run starts. That applies to anyone with `triage` access, and to anyone with
136
+ `read` access on a private repository, or whose `author_association` is
137
+ `OWNER`, `MEMBER` or `COLLABORATOR`. GitHub reports `read` for every account
138
+ on a public repository, so a stranger there (association `NONE`,
139
+ `CONTRIBUTOR` or unknown) is refused silently and learns nothing about the App.
140
+
141
+ A mention inside Markdown code is not a request. Text in an inline code span
142
+ (`` `@<app-slug>` ``), a fenced code block, or an indented code block is
143
+ skipped, so you can document the App's commands in an issue, pull request or
144
+ comment without starting a run. This applies to `@<app-slug> review` too.
145
+
146
+ When someone with write access mentions the App and nothing starts, the App
147
+ replies on the issue or pull request (in the review thread, if the mention was
148
+ in one) instead of leaving the mention unanswered. It says which of these applies, with no 👀
149
+ reaction:
150
+
151
+ - **No agent answers mentions on the repository** — no agent is linked with
152
+ the `mention` trigger. Link one (see [Linking an
153
+ agent](#linking-an-agent-to-a-repository)).
154
+ - **No reviewer is linked** — `@<app-slug> review` was used, but no agent is
155
+ linked with the `pull_request` trigger and a `checkName`.
156
+ - **The linked agent can no longer use the repository** — the agent owner's
157
+ GitHub account lost access, or its authorization lapsed. The owner
158
+ re-authorizes or re-links the agent.
159
+ - **The pull request is closed or comes from a fork** — wardby reviews only
160
+ open pull requests from branches of the repository.
161
+
162
+ The reply never names the App, so it cannot be read as a mention of itself.
163
+
164
+ The reply is a comment that anyone who can see the repository reads, so on a
165
+ public repository it shows what is (or isn't) linked there. To keep that to
166
+ yourself, set `WARDBY_MENTION_EXPLANATIONS=false` on the server: a mention that
167
+ starts nothing then gets no reply at all. The default is `true`.
168
+
169
+ If a mention from someone with write access gets no reaction or reply, check
170
+ the server log for `mention ignored` or `mention declined`. Older versions dropped `CONTRIBUTOR` and
171
+ `NONE` authors before the permission check. On those versions, make the
172
+ organization membership public or post the mention as a comment.
173
+
174
+ ### Follow-ups on an issue
175
+
176
+ If a mention lands on a GitHub **issue** that already has an open pull request
177
+ wardby opened, the run message includes that pull request and the exact run id
178
+ to pass as `continuePriorRun`, so the agent pushes to the same branch instead
179
+ of opening a second pull request. This is the same behaviour, and the same
180
+ sentence, as [follow-ups on a Jira issue](jira-agents.md): GitHub and Jira
181
+ issues record the pull requests opened for them alike. The message lists up to
182
+ ten open pull requests recorded for the issue, each with its own run id. A
183
+ stopped-for-budget draft is continued this way too (see
184
+ [Stopped for budget](coding-agent-setup.md#stopped-for-budget-the-work-so-far-is-kept)).
185
+ A pull request opened from a mention on a GitHub issue starts its description
186
+ with `From issue #N` for that issue when the issue is in the same repository,
187
+ the same place a Jira issue's pull request has its `Resolves Jira issue …`
188
+ line; follow-ups keep the line. The line only links the issue: whether merging
189
+ closes it is up to the agent. Have the delivery or builder prompt end the
190
+ summary with `Resolves #N` to close the issue on merge, or `Refs #N` to leave
191
+ it open (for a plan, or one ticket of an epic). A follow-up keeps whichever
192
+ line the previous description had. The help article
193
+ [Run GitHub code-review agents](../help/code-review-agents.md#follow-ups-on-an-issue)
194
+ says the same in short.
97
195
 
98
196
  ### What the mention agent receives
99
197
 
@@ -188,6 +286,52 @@ PR description:
188
286
  agent can reach only the tools and access you would give that outsider's
189
287
  text.
190
288
 
289
+ ## Follow-ups bring the pull request up to date
290
+
291
+ Every follow-up run on a pull request a wardby coding run opened (a mention on
292
+ the pull request, a delegated `continuePriorRun`, a review fix round) first
293
+ merges the branch the pull request **currently** targets into its branch:
294
+
295
+ - **The target is read from GitHub when the run starts**, so a pull request
296
+ retargeted since it opened (a stacked pull request whose parent merged, a
297
+ release branch) merges its new base. Retargeting does not make wardby treat
298
+ the pull request as closed.
299
+ - **The merge happens before the agent starts**, in trusted wardby code. The
300
+ target branch is fetched from the same repository with the App's access;
301
+ a fork is never fetched. A branch that already contains its target is left
302
+ exactly as it was, and the run behaves as it always has.
303
+ - **Conflicts are the agent's to resolve.** The conflicted files keep standard
304
+ conflict markers, and the agent's task lists them, says which side is the
305
+ pull request and which is the target, and asks it to resolve every conflict
306
+ keeping both sides' intent, fix the tests the combination broke, and run the
307
+ repository's checks. A conflicted file that still holds markers when the run
308
+ ends stops the push: the run fails with category `merge_conflict`
309
+ ([help](../help/errors/merge-conflict.md)) and nothing is pushed. A
310
+ conflicted file with no markers (a binary file, or one deleted on one side
311
+ and changed on the other) holds one side's version, or the changed version,
312
+ and the agent is asked to check it.
313
+ - **The push is one merge commit authored by Wardby**, whose parents are the
314
+ head the run started from and the target. It is pushed even when the agent
315
+ changed nothing else, so "please update this PR" or "please fix the merge
316
+ conflicts" in a mention is enough. The run's status comment says what was
317
+ merged ("Merged `main` @ `1a2b3c4` into this branch; resolved conflicts in 2
318
+ files.").
319
+ - **Checks apply to the agent's own changes**, measured against the automatic
320
+ merge: the target branch's changes, including to protected paths, merge as
321
+ they are, while an agent edit to a protected path (resolving a conflict in
322
+ one, or reverting the target's change to one) is refused as usual, so a
323
+ conflict in a protected path has to be resolved by hand. The
324
+ changed-file and diff-size limits count only the agent's changes, so merging
325
+ a busy target branch does not exhaust them.
326
+ - **The push stays a fast-forward** of the head the run started from: a push
327
+ by anyone else in the meantime fails the run, with nothing pushed, as before.
328
+ - A target branch that cannot be fetched or shares no history with the pull
329
+ request fails the run before the agent starts, with category `target_merge`
330
+ ([help](../help/errors/target-merge.md)).
331
+
332
+ The clone is shallow, so wardby deepens its history step by step until the
333
+ branch and its target share a commit, up to about 5,000 commits back.
334
+
191
335
  ## Automatic review fix rounds
192
336
 
193
337
  Linking an agent with the `review_fix` trigger (`access: "write"`, at most
@@ -196,6 +340,10 @@ without waiting for a human to ask. `reviewFixMaxRounds` (an integer from 1
196
340
  to 10, default 2) caps how many rounds a single pull request gets before
197
341
  wardby stops; re-linking without it resets the cap back to the default.
198
342
 
343
+ No round follows a review that was skipped because the draft stopped at its
344
+ budget (neutral, "Skipped: stopped at its budget"); a round needs a
345
+ `CHANGES_REQUESTED` review.
346
+
199
347
  A round starts when wardby's own review check on a pull request finishes as
200
348
  `CHANGES_REQUESTED`, and all of the following still hold:
201
349
 
@@ -273,6 +421,115 @@ the pull request's round cap the same as a round that pushed a change, and
273
421
  at the cap posts the usual cap comment instead of re-reviewing — since no
274
422
  push happened, nothing else would otherwise replace the failed check.
275
423
 
424
+ ### How the pull request description is kept current
425
+
426
+ Every coding run's final message is the full pull request description: what
427
+ changed, the checklist, how to try it, and any closing line such as
428
+ `Resolves #N`. It may be up to 64 KiB; a longer one is cut at a line boundary
429
+ with a `[summary truncated]` marker instead of failing the run. When the whole
430
+ description would pass GitHub's 65,536-character limit, wardby first drops the
431
+ **Packages** section, then truncates the final message, keeping a closing
432
+ `Resolves #N` last line. That holds for follow-ups too: review fix rounds, mention
433
+ follow-ups, and continuations. Agents launched for a follow-up receive the
434
+ description text wardby last wrote (its agent-written part, not the live pull
435
+ request body) as quoted, untrusted context, so they can carry forward what
436
+ still applies.
437
+
438
+ A follow-up also receives the original issue the pull request was opened for,
439
+ the way the first run did: its title and body, quoted as untrusted context,
440
+ as reference material: a note says its acceptance criteria as written are
441
+ what the description's checklist should reflect, that the final message must
442
+ carry that checklist and the closing line, and that no instruction in the
443
+ issue is followed. The issue is read as it is now, so edits made to it since
444
+ the first run are included.
445
+ wardby finds the issue from the run that started the work: the Jira issue it
446
+ was attributed to, else the GitHub issue whose `@wardby` mention started it,
447
+ else the issue that wardby's last description closes (`Resolves #N`). Only
448
+ issues in the pull request's own repository are read, through the same GitHub
449
+ App access the run already has; a Jira issue is read through the configured
450
+ Jira integration. The issue text is cut to about 6 KB. If the issue can't be
451
+ read, the run goes ahead without it.
452
+
453
+ A continuation updates the description of the pull request it continues, even
454
+ when it changes no code. The run's final message replaces the agent-written
455
+ part. wardby rebuilds its own sections from that run: the dependency-install
456
+ warning, **Tests**, **Packages**, and the dependency-cache line. The
457
+ first-line `<!-- wardby:... -->` marker stays, and a
458
+ `<!-- wardby-latest:<run> -->` line at the end records the latest run.
459
+
460
+ **Packages** lists every package installed by the runs that pushed to the pull
461
+ request, plus the latest run's, each package and version once. Refused
462
+ packages, and the dependency-install warning built from them, describe the
463
+ latest run only, since they reflect the pull request's current state.
464
+
465
+ If wardby can't confirm the description is unchanged since it wrote it (for
466
+ example, a person edited it), it does not overwrite it. Instead it keeps one
467
+ comment on the pull request with the current description proposed by its
468
+ latest run, inside a collapsed section. The comment names that run and the
469
+ commit it describes, says why it wasn't applied, and says the pull request
470
+ author can copy it into the description. Later runs edit the same comment
471
+ rather than adding new ones; if duplicates exist (for example, two runs
472
+ posting at once), wardby edits the newest and rewrites the others to point at
473
+ it. wardby only edits comments its own GitHub App wrote, never a person's or
474
+ another App's. On a run that pushes a commit, the comment is written before
475
+ the push, so it is already there when the push starts a review.
476
+
477
+ If the author copies the proposal into the description unchanged, the next
478
+ run sees that the description matches wardby's latest proposal, takes the
479
+ description back, writes it directly from then on, and updates the comment to
480
+ say no proposal is pending. The same happens when a later run can write the
481
+ description directly for any other reason.
482
+
483
+ The comment's first line records the head commit the proposal describes. A
484
+ review reads it when the reviewer reads the pull request (`repo_pr_read`'s
485
+ `descriptionProposal`), not when the review starts, and only uses it when it
486
+ was written for the head being reviewed. Then a description requirement
487
+ (closing line, acceptance checklist, how to try it, test results) is met if
488
+ either the live description or the proposal meets it. If the latest proposal
489
+ is for another commit, the reviewer is told no proposal for this head exists
490
+ yet and reviews the live description. The proposal reaches the reviewer as
491
+ untrusted data, cut to 16 KB.
492
+
493
+ Pull requests opened by an earlier wardby version have no record of what
494
+ wardby wrote. For those, wardby rebuilds the description its first run would
495
+ have written, from that run's stored final message, tests, packages,
496
+ dependency-cache line and issue link, and compares it with the live
497
+ description (ignoring the **Related pull requests** section, line endings and
498
+ blank lines). If they match, nobody edited it: wardby replaces it and records
499
+ it from then on. If anything differs, including any text a person added, or
500
+ the stored records can't rebuild it, the description counts as edited and gets
501
+ the comment.
502
+
503
+ If the final message is empty, very short (fewer than 80 non-whitespace
504
+ characters), or drops a
505
+ closing keyword (such as `Resolves #N`) that the previous description had,
506
+ wardby keeps the previous agent text and refreshes only its own sections.
507
+
508
+ A description update does not start a separate review: it stays one review per
509
+ pushed commit.
510
+
511
+ `get_run` shows the result as `prDescriptionOutcome`:
512
+
513
+ - `written`: the first description of a new pull request.
514
+ - `replaced`: a continuation replaced the agent-written part.
515
+ - `refreshed:<reason>`: the final message was invalid, so the previous agent
516
+ text was kept and only wardby's sections were refreshed. The reason is
517
+ `empty`, `too_short` (fewer than 80 non-whitespace characters), or
518
+ `missing_closing_keyword`.
519
+ - `unchanged`: nothing needed to change.
520
+ - `edited_by_hand`: wardby couldn't confirm the description is its own: a
521
+ person edited it, it no longer starts with wardby's marker, or (for pull
522
+ requests opened by an earlier version) it doesn't match the description
523
+ rebuilt from wardby's records. wardby posts or updates the proposal comment
524
+ when it can.
525
+ - `skipped:<reason>`: the description was not updated. The reason is
526
+ `not_open` (the pull request is not open or was not found), `too_long` (the
527
+ description is still over 65,536 characters after dropping **Packages** and
528
+ truncating the final message), or
529
+ `error` (any failure, including a failed update request, a failed load of
530
+ wardby's last-written text, a failed hash record or access re-check, or the
531
+ 60-second timeout; the update may still have landed).
532
+
276
533
  If a repository already forwards wardby's reviews to a webhook through a
277
534
  hand-written CI workflow to fix them automatically, replace that workflow
278
535
  with `review_fix`: link the trigger, then delete the workflow and its
@@ -317,6 +574,12 @@ requires more than owning the agent:
317
574
  - **A repository is the owner's binding.** Principals the agent is shared
318
575
  with (`grant_access`) can't link, unlink or change its repository, even at
319
576
  `write`.
577
+ - **A coding agent's extra repositories follow the same rules.** A
578
+ `link_repository` call with `access: "write"` and no triggers on a coding
579
+ agent adds a repository its runs may work in; it needs the same GitHub write
580
+ access or admin approval as the default repository. Unlinking it
581
+ refuses queued runs for that repository when they start, and a run already under way is refused at
582
+ its final push check (`repo_access`), so nothing is pushed.
320
583
 
321
584
  The authorization is stamped on the link (`authorizedVia`: `host_permission`,
322
585
  `admin`, or `grandfathered`) and **checked again every time it is used**: on
@@ -394,26 +657,29 @@ with:
394
657
  endpoint answers 404 until this is set.
395
658
  - **Subscribe to events**: Pull request, Issue comment, Pull request review
396
659
  comment, Check run, Check suite (re-runs a review that was waiting for CI
397
- once CI finishes, and starts a `waitForCi` reviewer's held review once CI
398
- finishes), Issues (needed for mentions in a newly opened or
399
- edited issue; without it only comment mentions are seen), and Push (needed
660
+ once CI finishes, starts a `waitForCi` reviewer's held review once CI
661
+ finishes, and lets [`markReadyWhenPassing`](#mark-ready-when-passing) mark a
662
+ draft ready once CI goes green; without it, those drafts stay drafts),
663
+ Issues (needed for mentions in a newly opened or edited issue; without it
664
+ only comment mentions are seen), and Push (needed
400
665
  for the `push` trigger, which starts merge-watcher agents; it is its own
401
666
  checkbox, separate from the others, and must be ticked explicitly).
402
667
  - **Repository permissions**:
403
668
 
404
- | Permission | Access |
405
- | --------------- | --------------- |
406
- | Contents | Read |
407
- | Pull requests | Read and write |
408
- | Checks | Read and write |
409
- | Issues | Read and write |
410
- | Commit statuses | Read (optional) |
411
-
412
- To let review agents resolve their own fixed threads, set **Contents** to
413
- **Read and write**: GitHub gates resolving a review thread on that
414
- permission, although it changes no repository content. wardby asks for it
415
- only for the resolve call itself. An App that also opens coding pull
416
- requests already has it.
669
+ | Permission | Access |
670
+ | --------------- | -------------------------------------------------- |
671
+ | Contents | Read and write (Read for an App that only reviews) |
672
+ | Pull requests | Read and write |
673
+ | Checks | Read and write |
674
+ | Issues | Read and write |
675
+ | Commit statuses | Read (optional) |
676
+
677
+ **Contents: Read and write** is required for coding agents, which push a
678
+ branch for each pull request they open. An App used only for review agents
679
+ can have **Read**, except that review agents then can't resolve their own
680
+ fixed threads: GitHub gates resolving a review thread on **Contents: Read
681
+ and write**, although it changes no repository content. wardby asks for it
682
+ only for the resolve call itself.
417
683
 
418
684
  **Issues: Read and write** is also what lets wardby add and remove the
419
685
  `wardby-autofix-*` labels used by [automatic review fix
@@ -540,9 +806,9 @@ linking stays disabled there.
540
806
  First link your GitHub account (`link_host_account`, above). Then use the
541
807
  `link_repository` tool (agents:write) on a native agent you own. Calling it
542
808
  again for an already-linked repository replaces that link's `access`,
543
- `triggers`, `checkName`, `reviewFixMaxRounds`, and `waitForCi` — omitted
544
- fields are cleared, not kept — and checks your access again, so always send
545
- the full desired state. Two common shapes:
809
+ `triggers`, `checkName`, `reviewFixMaxRounds`, `waitForCi`, and
810
+ `markReadyWhenPassing` — omitted fields are cleared, not kept — and checks
811
+ your access again, so always send the full desired state. Two common shapes:
546
812
 
547
813
  **A reviewer**, which starts a check on every PR push:
548
814
 
@@ -670,6 +936,12 @@ yet.
670
936
  again: the request that opened it has already finished. A push that
671
937
  continues the pull request inside the same, still-running request is held
672
938
  like the first one.
939
+ - From Wardby 0.7.0, a push to a pull request that is still a **draft** is
940
+ held while the coding run that pushed it may still be pushing (its result
941
+ is not recorded yet), so a run that stopped at its budget is never
942
+ reviewed mid-way. When that coding run was delegated by a lead that is
943
+ still running, as for a follow-up request, the review is held until that
944
+ lead finishes, the same as for the first request.
673
945
  - As with the CI fallback below, a hold here does not depend on the
674
946
  instance that started it still running when the lead run finishes:
675
947
  Wardby's reconciliation sweep reconsiders every review held for at least
@@ -757,13 +1029,203 @@ Turning `waitForCi` off (re-linking without it, or with it set to `false`)
757
1029
  only changes how future pushes are handled; it never retroactively starts or
758
1030
  drops a review already being held.
759
1031
 
1032
+ ### Large pull requests
1033
+
1034
+ From Wardby 0.7.0, `repo_pr_read` returns a large pull request's diff in pages.
1035
+ All changed files share one character budget per call (`maxPatchChars`,
1036
+ default 60,000, at most 200,000). Source, test and configuration files get it
1037
+ first. Everything else follows: the repository root's `docs/`, `doc/` and
1038
+ `help/` folders; lockfiles; anything under a `generated/`, `__generated__/`,
1039
+ `dist/`, `vendor/`, `fixtures/`, `__fixtures__/`, `__snapshots__/` or
1040
+ `testdata/` folder at any depth; minified `.min.js` and `.min.css` files; and
1041
+ documents and images (`.md`, `.mdx`, `.rst`, `.adoc`, `.txt`, `.snap`, `.svg`,
1042
+ `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.ico`, `.pdf`, `.lock`).
1043
+ `requirements*.txt` and `CMakeLists.txt` count as code. A page that includes source, test or config files stops before the first doc, help, lockfile or generated file, so those come on later pages and a reviewer can skip them. Patches are split on line boundaries, and a file that does not fit on
1044
+ the page after other content moves to the next page. Each file has a
1045
+ `patchStatus`: `complete`, `partial`, `later_page`, `earlier_page`,
1046
+ `unavailable` (the host has no patch, for example a very large file; read it
1047
+ with `repo_read_file`) or `empty`. A `partial` file also reports
1048
+ `patchOffset`, where its part starts, and `patchContinues`, which is `true`
1049
+ when the next page carries more of the same file.
1050
+
1051
+ When `patchesComplete` is `false`, the result lists `truncatedFiles`, gives
1052
+ `nextPatchCursor`, and estimates the files still to come in
1053
+ `remainingPatchFiles`. Call `repo_pr_read` again with the same arguments plus
1054
+ `patchCursor` to get the next page. Because code is filled first, a reviewer
1055
+ only has to page while a source, test or config file is still in
1056
+ `truncatedFiles`: the pages after that hold documentation, lockfiles and
1057
+ generated files, which the `unread_files` refusal never requires, so the
1058
+ reviewer can skim or skip them and spend less of its budget. A file the host found `unavailable` stays
1059
+ reported as such on later pages, and `patchesComplete` stays `false`. A cursor
1060
+ only works for the head and compare it was issued for: after a new push,
1061
+ `patch_cursor_stale` says to call again without it, and a damaged or oversized
1062
+ cursor returns `patch_cursor_malformed` (see
1063
+ [Patch cursor is malformed](../help/errors/patch-cursor-malformed.md)).
1064
+
1065
+ `repo_publish_review` refuses `APPROVE` with
1066
+ `unread_files` while a source, test or config file of that head that
1067
+ `repo_pr_read` listed in the run is neither fully delivered nor read with
1068
+ `repo_read_file` at the head (one read of the path at the head counts).
1069
+ Every file any `repo_pr_read` of the head listed in the run stays gated: a
1070
+ later read with `sinceSha` lists fewer files but never takes any off.
1071
+ Removed files, documentation, lockfiles, generated files and fixtures are not
1072
+ gated, `CHANGES_REQUESTED` and `COMMENT` are always allowed, and the refusal
1073
+ changes nothing, so the agent can read the files and publish again. A file read in parts counts only
1074
+ when its parts join up from the start of its patch to its last part. The guard
1075
+ is per run attempt: a head is gated only when the attempt itself read its first
1076
+ page (a `repo_pr_read` without `patchCursor`), so an attempt resumed after a
1077
+ restart is not refused for pages an earlier attempt read. A reviewer that
1078
+ cannot read everything should publish `CHANGES_REQUESTED` and list the files it
1079
+ did not review. Not `COMMENT`: it completes the check as neutral, which GitHub
1080
+ branch protection treats as passing, so an unfinished review would let the pull
1081
+ request merge.
1082
+
1083
+ The `unread_files` refusal applies in both execution modes. In `sandbox` mode
1084
+ (see [Native agent sandbox](native-sandbox.md)) the gateway saves what the run
1085
+ has read on its session after each `repo_pr_read` and `repo_read_file` call, so
1086
+ `repo_publish_review` checks the same reads as in `control-plane` mode.
1087
+ Reviewer prompts written before 0.7.0 still work, because the refusal tells
1088
+ the agent what to do; update them with the paging step from the shipped
1089
+ reviewer prompt.
1090
+
1091
+ The file list itself has an upper bound: `repo_pr_read` lists at most 1,000
1092
+ changed files of a pull request, on GitHub and on a local repository alike,
1093
+ and on GitHub a `sinceSha` compare lists at most 300 (GitHub's own compare
1094
+ limit). When the pull request has more changed files than that, the result
1095
+ has `fileListComplete: false` and the files past the cut are not shown. Once
1096
+ a `repo_pr_read` of a head in the run is cut, `repo_publish_review` refuses
1097
+ `APPROVE` of that head with `file_list_truncated`, even when every listed file
1098
+ was read: an approval would cover files the agent never saw.
1099
+ `CHANGES_REQUESTED` and `COMMENT` still publish. Only a complete read of the
1100
+ whole pull request (without `sinceSha`) in the same run lifts the refusal, so
1101
+ an agent that passed `sinceSha` can call `repo_pr_read` again without it; a
1102
+ complete `sinceSha` read does not. A later run cannot approve the head through a
1103
+ `sinceSha` delta either, because a review whose list was cut never becomes a
1104
+ covered head (below). Otherwise `repo_publish_review` refuses the agent's
1105
+ `APPROVE` of that pull request: split it, or have a person review it. See
1106
+ [`file_list_truncated`](../help/errors/file-list-truncated.md).
1107
+
1108
+ `sinceSha` accepts any earlier commit of the branch, so a read with it only
1109
+ narrows the review to the changes since that commit. `repo_pr_read` therefore
1110
+ also returns `lastCoveredSha`: the latest head this agent reviewed after
1111
+ reading every file, whatever the verdict. A review counts as covering its head
1112
+ when, in that run, no file list of the head was left cut, every source, test
1113
+ and config file it listed was read, and the run either read the whole pull
1114
+ request (no `sinceSha`) or compared only from the `lastCoveredSha` its reads
1115
+ returned. A review that does not cover its head keeps the earlier covered head.
1116
+ On GitHub the covered head is kept in the agent's summary comment marker (a
1117
+ summary comment written by a version before 0.7.0 has none, so the next review
1118
+ reads the whole pull request); on a local repository it is kept with each
1119
+ review. Only a marker at the very start of the App's own summary comment
1120
+ counts. In text an agent or a run supplies and the App posts (`repo_comment`,
1121
+ the summary, body and inline comments of `repo_publish_review`, and a mention
1122
+ run's status and reply), wardby escapes `<!--` as `&lt;!--` wherever it comes
1123
+ right before a wardby marker name, so such text shows as plain text and can
1124
+ never form a wardby marker. Any other HTML comment, such as one in a code
1125
+ block or a one-click suggestion, is posted as written. Text is escaped before
1126
+ its length limit is checked, and wardby adds its own markers after that. The coding-run status comment and the description comment are
1127
+ written by wardby and start with wardby's own marker. So an agent cannot be
1128
+ talked into vouching for a head it never read.
1129
+
1130
+ `repo_publish_review` refuses `APPROVE` with `full_read_required` while the
1131
+ run has no `repo_pr_read` of the head without `sinceSha` and one of its reads
1132
+ compared from a commit other than the `lastCoveredSha` that read returned. A
1133
+ commit named in the pull request's own text, or `lastReviewedSha` when it
1134
+ differs from `lastCoveredSha`, is not a safe base. The agent reads the whole
1135
+ pull request (no `sinceSha`) or passes `lastCoveredSha`; the shipped reviewer
1136
+ prompt does this. See
1137
+ [`full_read_required`](../help/errors/full-read-required.md).
1138
+
1139
+ Reviewer prompts written before 0.7.0 pass `lastReviewedSha` as `sinceSha`.
1140
+ They still work, because the refusal tells the agent to read the whole pull
1141
+ request, but update their re-review step from the shipped reviewer prompt to
1142
+ avoid the extra read. Owners of agents whose prompt is stored with the agent
1143
+ update it with `update_agent`.
1144
+
1145
+ ### Mark ready when passing (`markReadyWhenPassing`)
1146
+
1147
+ With Wardby 0.7.0 or later, `markReadyWhenPassing` (boolean, default
1148
+ `false`, only on a write link — 400 on a read link) has wardby mark its own
1149
+ draft pull requests ready for review once they pass, instead of leaving
1150
+ that to a person. Set it with `link_repository` on the write link of the
1151
+ agent that the repository event triggers: a builder that opens the pull
1152
+ request itself, or — for a lead that delegates to a coding builder sub-agent
1153
+ — the lead's link. The coding builder needs no repository link of its own
1154
+ (coding agents can't have one). The setting counts for a pull request
1155
+ opened by that agent's own coding run or by a coding run anywhere below it
1156
+ in its run tree (up to 10 delegation levels); an opted-in agent that is not the
1157
+ opener or one of its ancestors in the run tree never counts. Re-linking that
1158
+ repository without it clears it, like every other link setting (see
1159
+ above); `list_repositories` shows its current value.
1160
+
1161
+ Wardby marks a pull request ready for review once all of these hold, read
1162
+ fresh from GitHub on its current head:
1163
+
1164
+ - the pull request is open and a draft;
1165
+ - Wardby's own GitHub App opened it, and its head is not in a fork;
1166
+ - the agent whose coding run opened it, or an agent that delegated to it
1167
+ (directly or through other sub-agents), has `markReadyWhenPassing` set
1168
+ on an authorized write link to this repository;
1169
+ - at least one authorized reviewer link with the `pull_request` trigger
1170
+ exists on the repository, and every one of those reviewers' own checks on
1171
+ the head completed with conclusion `success`;
1172
+ - CI is green: every check run and commit status on the head that is not
1173
+ one of Wardby's own checks has completed with `success`, `neutral`, or
1174
+ `skipped`, with at least one `success` — or the repository reports no CI
1175
+ at all. All-neutral or all-skipped CI counts as inconclusive and waits. A
1176
+ pull request with more checks and statuses than Wardby reads (about 50) is
1177
+ truncated and never marked ready automatically. CI still pending, failing,
1178
+ truncated, or unreadable leaves the pull request in draft; see the
1179
+ re-evaluation triggers below for when Wardby checks again.
1180
+ - the `wardby merge order` check (see [The wardby merge order
1181
+ check](../help/merge-order-check.md)) is `success`, or is not posted on
1182
+ this pull request at all.
1183
+
1184
+ A commit status only counts toward CI being green if the App can read it:
1185
+ grant **Commit statuses: Read** (see [Registering the GitHub
1186
+ App](#registering-the-github-app) above) if your CI reports commit statuses
1187
+ rather than check runs; without it, wardby judges CI from check runs alone.
1188
+
1189
+ Wardby marks a given pull request ready at most once. If a person moves it
1190
+ back to draft afterward, wardby leaves it there — it never re-marks a pull
1191
+ request once it has done so.
1192
+
1193
+ Wardby re-checks whether a pull request is ready to mark on any of these
1194
+ events:
1195
+
1196
+ - a reviewer run finishing;
1197
+ - a CI check suite completing on its head;
1198
+ - its `wardby merge order` check turning `success` — for example, right
1199
+ after an earlier step in its set merges;
1200
+ - and, as a fallback for any of the above missed, wardby's own merge-order
1201
+ reconciliation sweep, for a pull request that is part of a merge-ordered
1202
+ set (see [The reconciliation sweep](../help/merge-order-check.md#the-reconciliation-sweep)).
1203
+
1204
+ CI that reports only commit statuses (no check suite) is not re-checked when
1205
+ it finishes — GitHub does not raise a check-suite event for a status-only
1206
+ commit. Such a pull request is marked ready the next time one of the events
1207
+ above fires, or stays in draft until then.
1208
+
1209
+ With a merge-ordered set of delegated pull requests (see [Fanning out to
1210
+ several builders](agent-recipes.md#fanning-out-to-several-builders)), a
1211
+ later step only becomes ready for review once the steps it depends on have
1212
+ merged — it stays a draft until the `wardby merge order` check on it reports
1213
+ `success`.
1214
+
1215
+ `markReadyWhenPassing` never approves, merges, or converts a pull request
1216
+ back to draft — a person's own approval stays the gate wherever branch
1217
+ protection requires one. It needs the App's **Pull requests: Read and
1218
+ write** permission, which an App that opens pull requests already has (see
1219
+ [Registering the GitHub App](#registering-the-github-app) above).
1220
+
760
1221
  ## The `repo_*` tools
761
1222
 
762
1223
  A linked agent gets these built-in tools automatically — they are not
763
1224
  attached like ordinary tools, and never expose a token, check id, or
764
1225
  internal marker to the model:
765
1226
 
766
- - `repo_pr_read` — a pull request's metadata, per-file diff patches, the
1227
+ - `repo_pr_read` — a pull request's metadata, per-file diff patches (paged; see
1228
+ [Large pull requests](#large-pull-requests)), the
767
1229
  agent's own unresolved inline threads (`openThreads`), and `ci`: the head
768
1230
  commit's check runs and commit statuses, excluding every check the wardby
769
1231
  App itself reported (review checks, `wardby/continuation`), with `state`
@@ -787,6 +1249,13 @@ internal marker to the model:
787
1249
  live state. The list of pull requests is current; the PR body's **Related
788
1250
  pull requests** section can be stale (see
789
1251
  [Related pull requests across repositories](../help/related-pull-requests.md)).
1252
+ On a Wardby pull request whose description Wardby couldn't confirm as its
1253
+ own text, it also returns `descriptionProposal`: `state: "current"` with
1254
+ `forHead`, `runId`, `text` (Wardby's latest proposed description for this
1255
+ head, cut to 16 KB, `truncated`) and a `note`, or
1256
+ `state: "not_for_this_head"` with a `note` when the latest proposal is for
1257
+ another commit. See
1258
+ [How the pull request description is kept current](#how-the-pull-request-description-is-kept-current).
790
1259
  - **Re-review when CI finishes.** When a review publishes `COMMENT` on its
791
1260
  own check while CI on that head is `pending` or `none`, Wardby records it.
792
1261
  When a CI check suite (not Wardby's own) completes on that head and no CI
@@ -801,6 +1270,24 @@ internal marker to the model:
801
1270
  cases.
802
1271
  - `repo_read_file` / `repo_list_files` — read a file or list a directory at
803
1272
  a ref.
1273
+ - `repo_issue_read` (Wardby 0.7.0 or later) — read one issue, read-only:
1274
+ `number`, `title`, `state` (`open` or `closed`), `body`, `labels`,
1275
+ `author`, `url`, `createdAt`, `updatedAt`, and its 30 most recent comments
1276
+ (`author`, `body`, `createdAt`), oldest first, with `totalComments`. The
1277
+ body is capped at 32,000 characters and each comment at 4,000;
1278
+ `truncated` is true when anything was cut (`bodyTruncated` and each
1279
+ comment's `truncated` say where). A reviewer uses it to read the issue a
1280
+ pull request says it resolves (`Resolves #N`) and check the change against
1281
+ that issue's own acceptance criteria rather than the description's
1282
+ restatement of them. It works on read and write links alike and needs the
1283
+ App's **Issues: Read** permission. Issue text is written by whoever can
1284
+ open or comment on issues: the tool description tells the agent to treat it
1285
+ as data, never instructions. A pull request number is refused with
1286
+ `is_pull_request` (use `repo_pr_read`), and a local repository has no
1287
+ issues (`issues_unavailable`). For a pull request that resolves a Jira
1288
+ issue, link the reviewer to that Jira project as well (`link_issue_project`,
1289
+ read access is enough) so it can read the ticket with `jira_get_issue`; see
1290
+ [Jira agents](jira-agents.md).
804
1291
  - `repo_publish_review` — publish inline comments, a summary, and the check
805
1292
  verdict for one PR head, in one call. A check is completed or created
806
1293
  **only on the pull request the run was dispatched for** (by a push, a
@@ -818,22 +1305,30 @@ internal marker to the model:
818
1305
  Every call names the `repository` explicitly; it must resolve to one of the
819
1306
  agent's links. Failures are always a JSON result, never a thrown error:
820
1307
 
821
- | `error` code | Meaning |
822
- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
823
- | `invalid_arguments_json` | The tool call's arguments were not valid JSON. |
824
- | `invalid_arguments` | Arguments failed schema validation (missing/malformed field). |
825
- | `repository_not_linked` | `repository` does not match one of this agent's links, or matches more than one and needs a `host/owner/name` prefix to disambiguate. |
826
- | `write_access_required` | A write tool (`repo_publish_review`, `repo_comment`) was called on a read-only link. |
827
- | `repository_access_denied` | The link is no longer authorized: the agent has no owner, the owner's GitHub account is unlinked or lost access, or it could not be checked. |
828
- | `repository_access_unavailable` | GitHub could not be reached (or rate-limited wardby) while re-checking access, even after one retry; the call was refused for safety. Try again later. |
829
- | `host_not_configured` | No host provider is configured for this link on this deployment. |
830
- | `unknown_tool` | Not a recognized `repo_*` tool name. |
831
- | `host_not_installed` | The GitHub App is not installed on this repository. |
832
- | `host_permission_missing` | The App installation is missing a required permission. |
833
- | `host_invalid_response` | The host returned something the client could not parse. |
834
- | `host_api_error` | The request to GitHub failed (body-free: `github_api_error:<status>[:<request-id>]`). |
835
- | `ci_failing` | `repo_publish_review` called with verdict `APPROVE`, on a `waitForCi` link's own check, while CI on the head is failing. See [Review after CI](#review-after-ci-waitforci) above. |
836
- | `ci_pending` | Same, but CI on the head is still running. |
1308
+ | `error` code | Meaning |
1309
+ | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1310
+ | `invalid_arguments_json` | The tool call's arguments were not valid JSON. |
1311
+ | `invalid_arguments` | Arguments failed schema validation (missing/malformed field). |
1312
+ | `repository_not_linked` | `repository` does not match one of this agent's links, or matches more than one and needs a `host/owner/name` prefix to disambiguate. |
1313
+ | `write_access_required` | A write tool (`repo_publish_review`, `repo_comment`) was called on a read-only link. |
1314
+ | `repository_access_denied` | The link is no longer authorized: the agent has no owner, the owner's GitHub account is unlinked or lost access, or it could not be checked. |
1315
+ | `repository_access_unavailable` | GitHub could not be reached (or rate-limited wardby) while re-checking access, even after one retry; the call was refused for safety. Try again later. |
1316
+ | `host_not_configured` | No host provider is configured for this link on this deployment. |
1317
+ | `unknown_tool` | Not a recognized `repo_*` tool name. |
1318
+ | `issue_not_found` | `repo_issue_read`: no issue with that number in the repository (or the repository has issues turned off). |
1319
+ | `is_pull_request` | `repo_issue_read`: the number is a pull request; read it with `repo_pr_read`. |
1320
+ | `issues_unavailable` | `repo_issue_read` on a local repository, which has no issues. |
1321
+ | `host_not_installed` | The GitHub App is not installed on this repository. |
1322
+ | `host_permission_missing` | The App installation is missing a required permission. |
1323
+ | `host_invalid_response` | The host returned something the client could not parse. |
1324
+ | `host_api_error` | The request to GitHub failed (body-free: `github_api_error:<status>[:<request-id>]`). |
1325
+ | `ci_failing` | `repo_publish_review` called with verdict `APPROVE`, on a `waitForCi` link's own check, while CI on the head is failing. See [Review after CI](#review-after-ci-waitforci) above. |
1326
+ | `ci_pending` | Same, but CI on the head is still running. |
1327
+ | `patch_cursor_stale` | `repo_pr_read` with a `patchCursor` issued for another head or compare (the pull request moved on). Call again without `patchCursor`. |
1328
+ | `patch_cursor_malformed` | `repo_pr_read` with a `patchCursor` it never issued (damaged, edited or over-long). Pass `nextPatchCursor` exactly as returned. |
1329
+ | `unread_files` | `repo_publish_review` with `APPROVE` while a source, test or config file of the head was listed by `repo_pr_read` but never fully read (all pages via `patchCursor`, or `repo_read_file` at `headSha`). Read the files, or publish `CHANGES_REQUESTED` naming the files not reviewed. |
1330
+ | `full_read_required` | `repo_publish_review` with `APPROVE` when the run read the head only with a `sinceSha` other than the `lastCoveredSha` that read returned. Call `repo_pr_read` without `sinceSha` (or with `lastCoveredSha`), or publish `CHANGES_REQUESTED`. See [Large pull requests](#large-pull-requests). |
1331
+ | `file_list_truncated` | `repo_publish_review` with `APPROVE` after a `repo_pr_read` of the head in the run had `fileListComplete: false` (more changed files than the host lists) and no complete read without `sinceSha` followed. Call `repo_pr_read` without `sinceSha` if it was passed; otherwise publish `CHANGES_REQUESTED` or `COMMENT`. See [Large pull requests](#large-pull-requests). |
837
1332
 
838
1333
  `repo_publish_review` also returns
839
1334
  `{ "published": false, "reason": "stale_head", ... }` instead of an error when
@@ -861,6 +1356,23 @@ step.
861
1356
  Check names and the description are repository content: treat them as data,
862
1357
  as for every `repo_*` result.
863
1358
 
1359
+ ### Reviewer step: package audit mode
1360
+
1361
+ From Wardby 0.7.0, a pull request whose coding run had
1362
+ [package audit mode](coding-packages.md#package-audit-mode) on opens with a
1363
+ `[!CAUTION]` banner. **Packages outside the allowlist** names what the
1364
+ registry installed that the agent's allowlist doesn't cover, and in `full`
1365
+ mode **Served despite advisories** lists versions with high or critical
1366
+ advisories. Wardby writes both from the registry's records, not from the
1367
+ agent. Add this to a reviewer's system prompt:
1368
+
1369
+ Reviewer step (package audit mode). If the description has a "Package
1370
+ audit mode" caution banner, check every package under "Packages outside
1371
+ the allowlist" (is it the package the change needs, spelled as its
1372
+ upstream publishes it, and is it used?) and every row under "Served
1373
+ despite advisories" (is the vulnerable code reachable?). Name any you
1374
+ can't justify in your review.
1375
+
864
1376
  ## Branch protection
865
1377
 
866
1378
  To require a passing review before merge, add the link's `checkName` (e.g.
@@ -883,7 +1395,11 @@ of any reviewer link, tracking whether the pull requests it depends on have
883
1395
  merged yet. Require it the same way — add `wardby merge order` as a
884
1396
  required status check, with its expected source set to the wardby GitHub
885
1397
  App — to block a merge until they have. See
886
- [The wardby merge order check](../help/merge-order-check.md).
1398
+ [The wardby merge order check](../help/merge-order-check.md). With Wardby
1399
+ 0.7.0 or later, a builder opted into [Mark ready when passing
1400
+ (`markReadyWhenPassing`)](#mark-ready-when-passing-markreadywhenpassing)
1401
+ relies on this same check: a later step in the set is only marked ready for
1402
+ review once it reports `success`.
887
1403
 
888
1404
  ## Accepted gap: a run that fails outside its normal finish path leaves its check open
889
1405