@wardby/cli 0.5.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. package/.env.example +33 -0
  2. package/README.md +25 -14
  3. package/deploy/local/docker-compose.quickstart-coding.yml +13 -0
  4. package/dist/claude-coding-worker/context.d.ts +22 -0
  5. package/dist/claude-coding-worker/context.js +92 -0
  6. package/dist/claude-coding-worker/driver.d.ts +27 -3
  7. package/dist/claude-coding-worker/driver.js +161 -20
  8. package/dist/claude-coding-worker/main.js +34 -6
  9. package/dist/claude-coding-worker/sdk.js +25 -5
  10. package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
  11. package/dist/claude-coding-worker/tool-socket.js +111 -0
  12. package/dist/claude-coding-worker/transcript.d.ts +18 -0
  13. package/dist/claude-coding-worker/transcript.js +77 -0
  14. package/dist/cli-help.d.ts +1 -1
  15. package/dist/cli-help.js +6 -2
  16. package/dist/cli-native-mode.d.ts +9 -0
  17. package/dist/cli-native-mode.js +20 -0
  18. package/dist/cli.d.ts +3 -1
  19. package/dist/cli.js +161 -11
  20. package/dist/coding/claude-context.d.ts +45 -0
  21. package/dist/coding/claude-context.js +434 -0
  22. package/dist/coding/continuation-wording.d.ts +35 -0
  23. package/dist/coding/continuation-wording.js +73 -0
  24. package/dist/coding/linked-issue-note.d.ts +23 -0
  25. package/dist/coding/linked-issue-note.js +47 -0
  26. package/dist/coding/merge-wording.d.ts +28 -0
  27. package/dist/coding/merge-wording.js +78 -0
  28. package/dist/coding/pr-description-note.d.ts +9 -0
  29. package/dist/coding/pr-description-note.js +32 -0
  30. package/dist/coding/profile.d.ts +50 -118
  31. package/dist/coding/profile.js +51 -4
  32. package/dist/coding/protected-path-wording.d.ts +8 -0
  33. package/dist/coding/protected-path-wording.js +1 -1
  34. package/dist/coding/protocol.d.ts +292 -270
  35. package/dist/coding/protocol.js +322 -15
  36. package/dist/coding/redact.d.ts +3 -0
  37. package/dist/coding/redact.js +12 -0
  38. package/dist/coding/registry/allowlist.d.ts +12 -0
  39. package/dist/coding/registry/allowlist.js +14 -1
  40. package/dist/coding/registry/audit-mode.d.ts +153 -0
  41. package/dist/coding/registry/audit-mode.js +304 -0
  42. package/dist/coding/registry/lockfile-shared.d.ts +36 -0
  43. package/dist/coding/registry/lockfile-shared.js +128 -0
  44. package/dist/coding/registry/lockfiles.js +1 -1
  45. package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
  46. package/dist/coding/registry/npm-lockfile-formats.js +41 -0
  47. package/dist/coding/registry/npm-lockfile.d.ts +8 -4
  48. package/dist/coding/registry/npm-lockfile.js +4 -6
  49. package/dist/coding/registry/npm.js +78 -8
  50. package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
  51. package/dist/coding/registry/pnpm-lockfile.js +189 -0
  52. package/dist/coding/registry/pypi-plan.d.ts +50 -0
  53. package/dist/coding/registry/pypi-plan.js +406 -0
  54. package/dist/coding/registry/pypi-requirements.d.ts +58 -0
  55. package/dist/coding/registry/pypi-requirements.js +155 -0
  56. package/dist/coding/registry/pypi.d.ts +3 -27
  57. package/dist/coding/registry/pypi.js +40 -154
  58. package/dist/coding/registry/refusal-hints.d.ts +20 -0
  59. package/dist/coding/registry/refusal-hints.js +61 -0
  60. package/dist/coding/registry/refusal-wording.d.ts +11 -0
  61. package/dist/coding/registry/refusal-wording.js +56 -0
  62. package/dist/coding/registry/report.d.ts +70 -8
  63. package/dist/coding/registry/report.js +112 -5
  64. package/dist/coding/registry/types.d.ts +58 -8
  65. package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
  66. package/dist/coding/registry/yarn-lockfile.js +367 -0
  67. package/dist/coding/services/catalog.d.ts +37 -351
  68. package/dist/coding/transcript/claude-code.d.ts +13 -0
  69. package/dist/coding/transcript/claude-code.js +273 -0
  70. package/dist/coding/transcript/download-protocol.d.ts +30 -0
  71. package/dist/coding/transcript/download-protocol.js +18 -0
  72. package/dist/coding/transcript/format.d.ts +20 -0
  73. package/dist/coding/transcript/format.js +32 -0
  74. package/dist/coding/transcript/recorder.d.ts +51 -0
  75. package/dist/coding/transcript/recorder.js +225 -0
  76. package/dist/coding/transcript/resume/checkout.d.ts +31 -0
  77. package/dist/coding/transcript/resume/checkout.js +203 -0
  78. package/dist/coding/transcript/resume/command.d.ts +17 -0
  79. package/dist/coding/transcript/resume/command.js +176 -0
  80. package/dist/coding/transcript/resume/download.d.ts +20 -0
  81. package/dist/coding/transcript/resume/download.js +153 -0
  82. package/dist/coding/transcript/resume/launch.d.ts +38 -0
  83. package/dist/coding/transcript/resume/launch.js +128 -0
  84. package/dist/coding/transcript/resume/session-file.d.ts +13 -0
  85. package/dist/coding/transcript/resume/session-file.js +79 -0
  86. package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
  87. package/dist/coding/transcript/resume/stand-in.js +49 -0
  88. package/dist/coding-worker/artifact.d.ts +16 -3
  89. package/dist/coding-worker/artifact.js +5 -3
  90. package/dist/coding-worker/debug-trace.d.ts +6 -5
  91. package/dist/coding-worker/debug-trace.js +13 -18
  92. package/dist/coding-worker/dependency-cache.d.mts +229 -0
  93. package/dist/coding-worker/dependency-cache.mjs +2123 -0
  94. package/dist/coding-worker/driver.d.ts +4 -3
  95. package/dist/coding-worker/driver.js +118 -38
  96. package/dist/coding-worker/errors.d.ts +1 -0
  97. package/dist/coding-worker/errors.js +32 -0
  98. package/dist/coding-worker/sdk.d.ts +6 -0
  99. package/dist/coding-worker/sdk.js +1 -0
  100. package/dist/coding-worker/skills.d.ts +23 -0
  101. package/dist/coding-worker/skills.js +117 -0
  102. package/dist/coding-worker/task-note.d.ts +11 -0
  103. package/dist/coding-worker/task-note.js +13 -0
  104. package/dist/coding-worker/types.d.ts +13 -0
  105. package/dist/config/dependency-cache.d.ts +23 -0
  106. package/dist/config/dependency-cache.js +32 -0
  107. package/dist/config/github-allowed-accounts.d.ts +15 -0
  108. package/dist/config/github-allowed-accounts.js +36 -0
  109. package/dist/config/low-power.d.ts +12 -0
  110. package/dist/config/low-power.js +18 -0
  111. package/dist/config/mobile.d.ts +12 -0
  112. package/dist/config/mobile.js +18 -0
  113. package/dist/config/providers.d.ts +65 -3
  114. package/dist/config/providers.js +147 -11
  115. package/dist/config/test-simulators.d.ts +82 -0
  116. package/dist/config/test-simulators.js +305 -0
  117. package/dist/core/async-context.d.ts +2 -0
  118. package/dist/core/async-context.js +12 -0
  119. package/dist/core/budget-events.d.ts +108 -0
  120. package/dist/core/budget-events.js +346 -0
  121. package/dist/core/budget-groups.d.ts +50 -1
  122. package/dist/core/budget-groups.js +236 -27
  123. package/dist/core/budget-stopped-head.d.ts +46 -0
  124. package/dist/core/budget-stopped-head.js +81 -0
  125. package/dist/core/budget-topup.d.ts +51 -0
  126. package/dist/core/budget-topup.js +156 -0
  127. package/dist/core/budget-wording.d.ts +16 -2
  128. package/dist/core/budget-wording.js +40 -2
  129. package/dist/core/coding-queue.d.ts +2 -1
  130. package/dist/core/coding-queue.js +7 -0
  131. package/dist/core/cron.d.ts +19 -1
  132. package/dist/core/cron.js +17 -0
  133. package/dist/core/datastores.js +1 -1
  134. package/dist/core/db.d.ts +16 -6
  135. package/dist/core/db.js +12 -10
  136. package/dist/core/deferred-coding.d.ts +14 -0
  137. package/dist/core/deferred-coding.js +62 -0
  138. package/dist/core/delegation-child.d.ts +25 -0
  139. package/dist/core/delegation-child.js +37 -0
  140. package/dist/core/dispatch.d.ts +53 -0
  141. package/dist/core/dispatch.js +167 -57
  142. package/dist/core/engine-native.js +10 -6
  143. package/dist/core/error-code.d.ts +38 -0
  144. package/dist/core/error-code.js +168 -0
  145. package/dist/core/grants.d.ts +19 -6
  146. package/dist/core/grants.js +55 -6
  147. package/dist/core/host-events.d.ts +67 -5
  148. package/dist/core/host-events.js +571 -37
  149. package/dist/core/host-status.d.ts +85 -3
  150. package/dist/core/host-status.js +298 -20
  151. package/dist/core/issue-bridge.d.ts +50 -6
  152. package/dist/core/issue-bridge.js +151 -20
  153. package/dist/core/issue-events.d.ts +1 -1
  154. package/dist/core/issue-events.js +16 -11
  155. package/dist/core/issue-status.d.ts +1 -1
  156. package/dist/core/issue-status.js +68 -29
  157. package/dist/core/logger.d.ts +5 -0
  158. package/dist/core/logger.js +14 -1
  159. package/dist/core/lost-run-children.d.ts +6 -0
  160. package/dist/core/lost-run-children.js +32 -0
  161. package/dist/core/mark-ready.d.ts +34 -0
  162. package/dist/core/mark-ready.js +152 -0
  163. package/dist/core/markdown-code.d.ts +8 -0
  164. package/dist/core/markdown-code.js +107 -0
  165. package/dist/core/memory-tools.js +7 -0
  166. package/dist/core/merge-order-check.d.ts +130 -0
  167. package/dist/core/merge-order-check.js +343 -0
  168. package/dist/core/notification-dispatcher.d.ts +70 -0
  169. package/dist/core/notification-dispatcher.js +368 -0
  170. package/dist/core/notification-templates.d.ts +19 -0
  171. package/dist/core/notification-templates.js +139 -0
  172. package/dist/core/notifications.d.ts +10 -0
  173. package/dist/core/notifications.js +38 -0
  174. package/dist/core/pg-auth.d.ts +22 -0
  175. package/dist/core/pg-auth.js +152 -0
  176. package/dist/core/power-composition.d.ts +16 -0
  177. package/dist/core/power-composition.js +37 -0
  178. package/dist/core/power-idle.d.ts +14 -0
  179. package/dist/core/power-idle.js +30 -0
  180. package/dist/core/power.d.ts +71 -0
  181. package/dist/core/power.js +202 -0
  182. package/dist/core/pull-request-state-sync.js +2 -2
  183. package/dist/core/reconciler.d.ts +8 -5
  184. package/dist/core/reconciler.js +37 -6
  185. package/dist/core/related-pull-requests.d.ts +59 -7
  186. package/dist/core/related-pull-requests.js +140 -25
  187. package/dist/core/reply-parts.d.ts +21 -0
  188. package/dist/core/reply-parts.js +73 -0
  189. package/dist/core/repo-access.d.ts +15 -0
  190. package/dist/core/repo-access.js +66 -0
  191. package/dist/core/review-fix.d.ts +38 -1
  192. package/dist/core/review-fix.js +209 -7
  193. package/dist/core/review-host-checks.d.ts +1 -1
  194. package/dist/core/review-host-tools.d.ts +23 -0
  195. package/dist/core/review-host-tools.js +156 -14
  196. package/dist/core/review-reads.d.ts +55 -0
  197. package/dist/core/review-reads.js +233 -0
  198. package/dist/core/run-status.d.ts +12 -0
  199. package/dist/core/run-status.js +12 -0
  200. package/dist/core/runner.d.ts +384 -5
  201. package/dist/core/runner.js +1244 -372
  202. package/dist/core/schedule-start.d.ts +12 -0
  203. package/dist/core/schedule-start.js +14 -0
  204. package/dist/core/secret-broker-config.d.ts +39 -0
  205. package/dist/core/secret-broker-config.js +112 -0
  206. package/dist/core/secret-guard.d.ts +46 -0
  207. package/dist/core/secret-guard.js +104 -0
  208. package/dist/core/secret-guarded-stores.d.ts +12 -0
  209. package/dist/core/secret-guarded-stores.js +41 -0
  210. package/dist/core/secret-spans.d.ts +50 -0
  211. package/dist/core/secret-spans.js +94 -0
  212. package/dist/core/secrets.d.ts +39 -4
  213. package/dist/core/secrets.js +148 -40
  214. package/dist/core/stop-run.d.ts +46 -0
  215. package/dist/core/stop-run.js +61 -0
  216. package/dist/core/workflow-event-recorder.d.ts +14 -0
  217. package/dist/core/workflow-event-recorder.js +120 -0
  218. package/dist/core/workflow-events.d.ts +94 -0
  219. package/dist/core/workflow-events.js +48 -0
  220. package/dist/core/workflow-run-events.d.ts +18 -0
  221. package/dist/core/workflow-run-events.js +75 -0
  222. package/dist/core/zod-json-schema.d.ts +4 -0
  223. package/dist/core/zod-json-schema.js +39 -0
  224. package/dist/core/zod3-window.d.ts +35 -0
  225. package/dist/core/zod3-window.js +124 -0
  226. package/dist/generated/prisma/browser.d.ts +92 -3
  227. package/dist/generated/prisma/client.d.ts +92 -3
  228. package/dist/generated/prisma/commonInputTypes.d.ts +364 -54
  229. package/dist/generated/prisma/enums.d.ts +37 -0
  230. package/dist/generated/prisma/enums.js +31 -0
  231. package/dist/generated/prisma/internal/class.d.ts +132 -0
  232. package/dist/generated/prisma/internal/class.js +4 -4
  233. package/dist/generated/prisma/internal/prismaNamespace.d.ts +1332 -142
  234. package/dist/generated/prisma/internal/prismaNamespace.js +227 -5
  235. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +234 -0
  236. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +227 -5
  237. package/dist/generated/prisma/models/Agent.d.ts +464 -7
  238. package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
  239. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +301 -1
  240. package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
  241. package/dist/generated/prisma/models/CodingProxySession.d.ts +114 -1
  242. package/dist/generated/prisma/models/CodingRun.d.ts +1841 -1
  243. package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
  244. package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
  245. package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
  246. package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
  247. package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
  248. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1713 -0
  249. package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
  250. package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1551 -0
  251. package/dist/generated/prisma/models/NativeGatewaySession.js +1 -0
  252. package/dist/generated/prisma/models/NativeWarmWorker.d.ts +1296 -0
  253. package/dist/generated/prisma/models/NativeWarmWorker.js +1 -0
  254. package/dist/generated/prisma/models/NotificationChannel.d.ts +1543 -0
  255. package/dist/generated/prisma/models/NotificationChannel.js +1 -0
  256. package/dist/generated/prisma/models/NotificationDelivery.d.ts +1502 -0
  257. package/dist/generated/prisma/models/NotificationDelivery.js +1 -0
  258. package/dist/generated/prisma/models/NotificationThread.d.ts +1090 -0
  259. package/dist/generated/prisma/models/NotificationThread.js +1 -0
  260. package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
  261. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
  262. package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
  263. package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
  264. package/dist/generated/prisma/models/Run.d.ts +1619 -58
  265. package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
  266. package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
  267. package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
  268. package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
  269. package/dist/generated/prisma/models/RunTranscript.js +1 -0
  270. package/dist/generated/prisma/models/Secret.d.ts +37 -1
  271. package/dist/generated/prisma/models/SecretBrokerChange.d.ts +1101 -0
  272. package/dist/generated/prisma/models/SecretBrokerChange.js +1 -0
  273. package/dist/generated/prisma/models/WorkflowEvent.d.ts +1422 -0
  274. package/dist/generated/prisma/models/WorkflowEvent.js +1 -0
  275. package/dist/generated/prisma/models.d.ts +12 -0
  276. package/dist/help/build.js +4 -2
  277. package/dist/help/catalog.d.ts +1 -1
  278. package/dist/help/catalog.js +31 -6
  279. package/dist/help-index.json +2584 -146
  280. package/dist/import/create.js +49 -3
  281. package/dist/import/neutral-schema.d.ts +50 -277
  282. package/dist/import/neutral-schema.js +7 -4
  283. package/dist/knowledge/check.d.ts +1 -1
  284. package/dist/knowledge/cli.d.ts +11 -1
  285. package/dist/knowledge/cli.js +37 -4
  286. package/dist/knowledge/concept.d.ts +3 -19
  287. package/dist/knowledge/location.d.ts +31 -0
  288. package/dist/knowledge/location.js +78 -0
  289. package/dist/mcp/auth/access.d.ts +11 -2
  290. package/dist/mcp/auth/access.js +15 -1
  291. package/dist/mcp/auth/ownership.d.ts +7 -7
  292. package/dist/mcp/auth/repo-authorization.js +14 -0
  293. package/dist/mcp/auth/resource-server.d.ts +2 -1
  294. package/dist/mcp/auth/resource-server.js +7 -2
  295. package/dist/mcp/auth/self-hosted/browser.d.ts +1 -1
  296. package/dist/mcp/auth/self-hosted/browser.js +19 -6
  297. package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
  298. package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
  299. package/dist/mcp/context.d.ts +6 -0
  300. package/dist/mcp/host-events/github-ingress.d.ts +25 -1
  301. package/dist/mcp/host-events/github-ingress.js +70 -1
  302. package/dist/mcp/index.d.ts +19 -0
  303. package/dist/mcp/index.js +117 -20
  304. package/dist/mcp/server.d.ts +13 -0
  305. package/dist/mcp/server.js +33 -14
  306. package/dist/mcp/tools/agents.d.ts +4 -0
  307. package/dist/mcp/tools/agents.js +277 -24
  308. package/dist/mcp/tools/datastore.js +17 -8
  309. package/dist/mcp/tools/grants.js +9 -3
  310. package/dist/mcp/tools/memory.js +11 -1
  311. package/dist/mcp/tools/notification-channels.d.ts +2 -0
  312. package/dist/mcp/tools/notification-channels.js +293 -0
  313. package/dist/mcp/tools/packages.d.ts +2 -0
  314. package/dist/mcp/tools/packages.js +195 -0
  315. package/dist/mcp/tools/power.d.ts +2 -0
  316. package/dist/mcp/tools/power.js +77 -0
  317. package/dist/mcp/tools/repositories.js +18 -5
  318. package/dist/mcp/tools/run-access.d.ts +16 -0
  319. package/dist/mcp/tools/run-access.js +25 -0
  320. package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
  321. package/dist/mcp/tools/run-transcript-download.js +129 -0
  322. package/dist/mcp/tools/run-transcript.d.ts +19 -0
  323. package/dist/mcp/tools/run-transcript.js +70 -0
  324. package/dist/mcp/tools/runs.d.ts +0 -6
  325. package/dist/mcp/tools/runs.js +41 -14
  326. package/dist/mcp/tools/scheduling.js +3 -1
  327. package/dist/mcp/tools/secret-broker-compat.d.ts +12 -0
  328. package/dist/mcp/tools/secret-broker-compat.js +23 -0
  329. package/dist/mcp/tools/secret-elicitation-form.d.ts +22 -2
  330. package/dist/mcp/tools/secret-elicitation-form.js +205 -10
  331. package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
  332. package/dist/mcp/tools/secret-elicitation-server.js +10 -54
  333. package/dist/mcp/tools/secret-elicitation.d.ts +38 -3
  334. package/dist/mcp/tools/secret-elicitation.js +110 -12
  335. package/dist/mcp/tools/secrets.js +186 -9
  336. package/dist/mcp/tools/stop-run.d.ts +2 -0
  337. package/dist/mcp/tools/stop-run.js +82 -0
  338. package/dist/mcp/tools/subagents.js +2 -2
  339. package/dist/mcp/tools/tools.d.ts +2 -2
  340. package/dist/mcp/tools/tools.js +47 -11
  341. package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
  342. package/dist/mcp/transport/stdio-link-host.js +67 -0
  343. package/dist/mcp/transport/streamable-http.d.ts +13 -0
  344. package/dist/mcp/transport/streamable-http.js +41 -1
  345. package/dist/native-worker/composition.d.ts +23 -0
  346. package/dist/native-worker/composition.js +77 -0
  347. package/dist/native-worker/docker-isolation.d.ts +65 -0
  348. package/dist/native-worker/docker-isolation.js +183 -0
  349. package/dist/native-worker/docker-launcher.d.ts +110 -0
  350. package/dist/native-worker/docker-launcher.js +297 -0
  351. package/dist/native-worker/gateway-server.d.ts +77 -0
  352. package/dist/native-worker/gateway-server.js +412 -0
  353. package/dist/native-worker/gateway.d.ts +70 -0
  354. package/dist/native-worker/gateway.js +263 -0
  355. package/dist/native-worker/http-server.d.ts +24 -0
  356. package/dist/native-worker/http-server.js +113 -0
  357. package/dist/native-worker/http-transport.d.ts +17 -0
  358. package/dist/native-worker/http-transport.js +88 -0
  359. package/dist/native-worker/kubernetes-isolation.d.ts +90 -0
  360. package/dist/native-worker/kubernetes-isolation.js +218 -0
  361. package/dist/native-worker/kubernetes-launcher.d.ts +106 -0
  362. package/dist/native-worker/kubernetes-launcher.js +375 -0
  363. package/dist/native-worker/launch.d.ts +62 -0
  364. package/dist/native-worker/launch.js +49 -0
  365. package/dist/native-worker/ledger.d.ts +125 -0
  366. package/dist/native-worker/ledger.js +245 -0
  367. package/dist/native-worker/loopback.d.ts +12 -0
  368. package/dist/native-worker/loopback.js +44 -0
  369. package/dist/native-worker/main.d.ts +8 -0
  370. package/dist/native-worker/main.js +85 -0
  371. package/dist/native-worker/protocol.d.ts +296 -0
  372. package/dist/native-worker/protocol.js +246 -0
  373. package/dist/native-worker/sandbox-executor.d.ts +83 -0
  374. package/dist/native-worker/sandbox-executor.js +284 -0
  375. package/dist/native-worker/stderr-redaction.d.ts +77 -0
  376. package/dist/native-worker/stderr-redaction.js +237 -0
  377. package/dist/native-worker/stdio.d.ts +29 -0
  378. package/dist/native-worker/stdio.js +189 -0
  379. package/dist/native-worker/warm-delivery.d.ts +16 -0
  380. package/dist/native-worker/warm-delivery.js +33 -0
  381. package/dist/native-worker/warm-pool-ledger.d.ts +39 -0
  382. package/dist/native-worker/warm-pool-ledger.js +73 -0
  383. package/dist/native-worker/warm-pool.d.ts +107 -0
  384. package/dist/native-worker/warm-pool.js +283 -0
  385. package/dist/native-worker/worker.d.ts +17 -0
  386. package/dist/native-worker/worker.js +141 -0
  387. package/dist/observability/metrics.js +6 -1
  388. package/dist/providers/auth/authorization-server.d.ts +3 -0
  389. package/dist/providers/auth/index.js +2 -0
  390. package/dist/providers/auth/self-hosted.d.ts +14 -2
  391. package/dist/providers/auth/self-hosted.js +54 -4
  392. package/dist/providers/chat/fake.d.ts +46 -0
  393. package/dist/providers/chat/fake.js +39 -0
  394. package/dist/providers/chat/index.d.ts +4 -0
  395. package/dist/providers/chat/index.js +8 -0
  396. package/dist/providers/chat/slack.d.ts +37 -0
  397. package/dist/providers/chat/slack.js +105 -0
  398. package/dist/providers/chat/types.d.ts +42 -0
  399. package/dist/providers/chat/types.js +19 -0
  400. package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
  401. package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
  402. package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
  403. package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
  404. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
  405. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
  406. package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
  407. package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
  408. package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
  409. package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
  410. package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
  411. package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
  412. package/dist/providers/coding-proxy/hold.d.ts +32 -0
  413. package/dist/providers/coding-proxy/hold.js +86 -0
  414. package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
  415. package/dist/providers/coding-proxy/interrupted.js +104 -0
  416. package/dist/providers/coding-proxy/memory-ledger.d.ts +15 -2
  417. package/dist/providers/coding-proxy/memory-ledger.js +84 -8
  418. package/dist/providers/coding-proxy/metering.d.ts +16 -0
  419. package/dist/providers/coding-proxy/metering.js +27 -4
  420. package/dist/providers/coding-proxy/prisma-ledger.d.ts +15 -2
  421. package/dist/providers/coding-proxy/prisma-ledger.js +179 -67
  422. package/dist/providers/coding-proxy/proxy.d.ts +14 -1
  423. package/dist/providers/coding-proxy/proxy.js +166 -14
  424. package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
  425. package/dist/providers/coding-proxy/registry/audit.js +94 -17
  426. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
  427. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
  428. package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
  429. package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
  430. package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
  431. package/dist/providers/coding-proxy/registry/plan.js +201 -48
  432. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
  433. package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
  434. package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
  435. package/dist/providers/coding-proxy/registry/service.js +579 -112
  436. package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
  437. package/dist/providers/coding-proxy/registry/store.js +54 -1
  438. package/dist/providers/coding-proxy/runtime.d.ts +4 -0
  439. package/dist/providers/coding-proxy/runtime.js +78 -16
  440. package/dist/providers/coding-proxy/server.d.ts +6 -1
  441. package/dist/providers/coding-proxy/server.js +45 -1
  442. package/dist/providers/coding-proxy/types.d.ts +65 -1
  443. package/dist/providers/datastore/types.d.ts +5 -0
  444. package/dist/providers/engine/types.d.ts +36 -2
  445. package/dist/providers/engine/types.js +39 -0
  446. package/dist/providers/executor/composition.d.ts +31 -1
  447. package/dist/providers/executor/composition.js +81 -8
  448. package/dist/providers/executor/container.d.ts +385 -9
  449. package/dist/providers/executor/container.js +1234 -99
  450. package/dist/providers/executor/dbos-status.d.ts +31 -0
  451. package/dist/providers/executor/dbos-status.js +64 -0
  452. package/dist/providers/executor/dbos.d.ts +91 -0
  453. package/dist/providers/executor/dbos.js +319 -26
  454. package/dist/providers/executor/deferred.d.ts +44 -0
  455. package/dist/providers/executor/deferred.js +100 -0
  456. package/dist/providers/executor/in-process.d.ts +9 -1
  457. package/dist/providers/executor/in-process.js +14 -4
  458. package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
  459. package/dist/providers/executor/linked-issue-reader.js +30 -0
  460. package/dist/providers/executor/routing.d.ts +39 -10
  461. package/dist/providers/executor/routing.js +77 -32
  462. package/dist/providers/executor/types.d.ts +25 -0
  463. package/dist/providers/index.d.ts +2 -1
  464. package/dist/providers/issue-tracker/types.d.ts +17 -0
  465. package/dist/providers/issue-tracker/types.js +39 -1
  466. package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
  467. package/dist/providers/jobs/claude-tool-setup.js +5 -2
  468. package/dist/providers/jobs/docker-isolation.d.ts +8 -0
  469. package/dist/providers/jobs/docker-isolation.js +17 -0
  470. package/dist/providers/jobs/docker.d.ts +1 -0
  471. package/dist/providers/jobs/docker.js +29 -4
  472. package/dist/providers/jobs/fake-kubernetes-api.d.ts +23 -2
  473. package/dist/providers/jobs/fake-kubernetes-api.js +45 -1
  474. package/dist/providers/jobs/kubernetes-api.d.ts +25 -1
  475. package/dist/providers/jobs/kubernetes-api.js +17 -0
  476. package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
  477. package/dist/providers/jobs/kubernetes-client.js +61 -3
  478. package/dist/providers/jobs/kubernetes-dry-run-fixture.d.ts +6 -1
  479. package/dist/providers/jobs/kubernetes-dry-run-fixture.js +6 -3
  480. package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
  481. package/dist/providers/jobs/kubernetes-isolation.js +23 -1
  482. package/dist/providers/jobs/kubernetes-platform.d.ts +4 -1
  483. package/dist/providers/jobs/kubernetes-platform.js +38 -1
  484. package/dist/providers/jobs/kubernetes-preflight.d.ts +2 -1
  485. package/dist/providers/jobs/kubernetes-preflight.js +4 -2
  486. package/dist/providers/jobs/kubernetes.d.ts +42 -2
  487. package/dist/providers/jobs/kubernetes.js +178 -19
  488. package/dist/providers/jobs/metadata-probes.d.ts +11 -0
  489. package/dist/providers/jobs/metadata-probes.js +13 -0
  490. package/dist/providers/jobs/types.d.ts +42 -0
  491. package/dist/providers/jobs/types.js +13 -1
  492. package/dist/providers/llm/anthropic.js +5 -1
  493. package/dist/providers/llm/bedrock.d.ts +0 -12
  494. package/dist/providers/llm/bedrock.js +4 -0
  495. package/dist/providers/llm/claude-messages.d.ts +3 -1
  496. package/dist/providers/llm/claude-messages.js +4 -1
  497. package/dist/providers/llm/claude-provider.d.ts +2 -2
  498. package/dist/providers/llm/claude-provider.js +2 -2
  499. package/dist/providers/llm/openai.d.ts +2 -2
  500. package/dist/providers/llm/openai.js +6 -2
  501. package/dist/providers/llm/routing.d.ts +2 -2
  502. package/dist/providers/llm/routing.js +2 -2
  503. package/dist/providers/llm/types.d.ts +12 -2
  504. package/dist/providers/review-host/github-events.d.ts +9 -1
  505. package/dist/providers/review-host/github-events.js +34 -12
  506. package/dist/providers/review-host/github.d.ts +39 -2
  507. package/dist/providers/review-host/github.js +274 -29
  508. package/dist/providers/review-host/local.d.ts +8 -4
  509. package/dist/providers/review-host/local.js +49 -31
  510. package/dist/providers/review-host/patch-pages.d.ts +41 -0
  511. package/dist/providers/review-host/patch-pages.js +176 -0
  512. package/dist/providers/review-host/review-format.d.ts +19 -1
  513. package/dist/providers/review-host/review-format.js +38 -7
  514. package/dist/providers/review-host/types.d.ts +157 -2
  515. package/dist/providers/review-host/types.js +8 -0
  516. package/dist/providers/storage/gcs.d.ts +63 -0
  517. package/dist/providers/storage/gcs.js +69 -0
  518. package/dist/providers/storage/index.d.ts +15 -0
  519. package/dist/providers/storage/index.js +14 -0
  520. package/dist/providers/storage/local.d.ts +24 -0
  521. package/dist/providers/storage/local.js +92 -0
  522. package/dist/providers/storage/meter.d.ts +14 -0
  523. package/dist/providers/storage/meter.js +34 -0
  524. package/dist/providers/storage/s3.d.ts +41 -0
  525. package/dist/providers/storage/s3.js +107 -0
  526. package/dist/providers/storage/types.d.ts +37 -3
  527. package/dist/providers/storage/types.js +21 -4
  528. package/dist/providers/vcs/git.d.ts +33 -2
  529. package/dist/providers/vcs/git.js +324 -22
  530. package/dist/providers/vcs/github-remote.d.ts +26 -3
  531. package/dist/providers/vcs/github-remote.js +124 -14
  532. package/dist/providers/vcs/github.d.ts +246 -12
  533. package/dist/providers/vcs/github.js +521 -61
  534. package/dist/providers/vcs/index.js +8 -1
  535. package/dist/providers/vcs/pr-description.d.ts +127 -0
  536. package/dist/providers/vcs/pr-description.js +270 -0
  537. package/dist/providers/vcs/remote.d.ts +33 -1
  538. package/dist/providers/vcs/routing.d.ts +4 -2
  539. package/dist/providers/vcs/routing.js +6 -0
  540. package/dist/providers/vcs/types.d.ts +80 -3
  541. package/dist/quickstart/coding-seed.d.ts +21 -3
  542. package/dist/quickstart/coding-seed.js +283 -3
  543. package/dist/quickstart/images.d.ts +2 -0
  544. package/dist/quickstart/images.js +7 -1
  545. package/dist/quickstart/reviewer-prompt.d.ts +1 -1
  546. package/dist/quickstart/reviewer-prompt.js +6 -6
  547. package/dist/quickstart-images.json +1 -1
  548. package/dist/sandbox/brokered-fetch.d.ts +23 -0
  549. package/dist/sandbox/brokered-fetch.js +37 -0
  550. package/dist/sandbox/generated/zod.bundle.js +62 -1
  551. package/dist/sandbox/generated/zod3.bundle.js +5 -0
  552. package/dist/sandbox/host-functions.d.ts +35 -0
  553. package/dist/sandbox/host-functions.js +150 -91
  554. package/dist/sandbox/prelude.js +7 -1
  555. package/dist/sandbox/run-in-sandbox.d.ts +19 -0
  556. package/dist/sandbox/run-in-sandbox.js +28 -10
  557. package/dist/sandbox/safe-fetch.d.ts +2 -0
  558. package/dist/sandbox/safe-fetch.js +3 -1
  559. package/dist/sandbox/secret-broker-sigv4.d.ts +2 -0
  560. package/dist/sandbox/secret-broker-sigv4.js +49 -0
  561. package/dist/sandbox/secret-broker.d.ts +34 -0
  562. package/dist/sandbox/secret-broker.js +161 -0
  563. package/dist/sandbox/tool-capabilities.d.ts +10 -30
  564. package/dist/sandbox/user-tool.d.ts +14 -0
  565. package/dist/sandbox/user-tool.js +32 -0
  566. package/dist/sandbox/zod-params.d.ts +37 -5
  567. package/dist/sandbox/zod-params.js +181 -26
  568. package/dist/serve.js +25 -0
  569. package/dist/viewer/api-schema.d.ts +372 -2454
  570. package/dist/viewer/api-schema.js +29 -0
  571. package/dist/viewer/build-schemas.js +10 -3
  572. package/dist/viewer/event-bus.d.ts +6 -0
  573. package/dist/viewer/event-bus.js +16 -7
  574. package/dist/viewer/graph.d.ts +5 -2
  575. package/dist/viewer/graph.js +7 -2
  576. package/dist/viewer/http.d.ts +0 -1
  577. package/dist/viewer/http.js +2 -2
  578. package/dist/viewer/infra.js +25 -2
  579. package/dist/viewer/limits.d.ts +4 -0
  580. package/dist/viewer/limits.js +4 -0
  581. package/dist/viewer/openapi.d.ts +15 -0
  582. package/dist/viewer/openapi.js +170 -0
  583. package/dist/wardby-bin.js +10 -0
  584. package/docs/README.md +7 -0
  585. package/docs/agent-recipes.md +114 -27
  586. package/docs/architecture-runtime.md +16 -1
  587. package/docs/code-review-agents.md +689 -45
  588. package/docs/coding-agent-setup.md +602 -12
  589. package/docs/coding-packages.md +1037 -92
  590. package/docs/coding-services.md +30 -13
  591. package/docs/coding-worker-byo-images.md +218 -6
  592. package/docs/coding-worker-isolation.md +173 -44
  593. package/docs/getting-started-gke.md +332 -129
  594. package/docs/getting-started-identity-provider.md +31 -11
  595. package/docs/getting-started.md +14 -4
  596. package/docs/jira-agents.md +22 -9
  597. package/docs/knowledge/blob-not-found-semantics.md +41 -0
  598. package/docs/knowledge/bounded-file-descriptor.md +52 -0
  599. package/docs/knowledge/delegation-admission-slots.md +52 -0
  600. package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
  601. package/docs/knowledge/import-rename-target.md +52 -0
  602. package/docs/knowledge/index.md +57 -0
  603. package/docs/knowledge/log.md +9 -0
  604. package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
  605. package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
  606. package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
  607. package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
  608. package/docs/knowledge/overview-cli.md +74 -0
  609. package/docs/knowledge/overview-coding-proxy.md +72 -0
  610. package/docs/knowledge/overview-coding.md +72 -0
  611. package/docs/knowledge/overview-config.md +60 -0
  612. package/docs/knowledge/overview-core.md +72 -0
  613. package/docs/knowledge/overview-deploy.md +83 -0
  614. package/docs/knowledge/overview-mcp.md +61 -0
  615. package/docs/knowledge/overview-prisma.md +72 -0
  616. package/docs/knowledge/overview-providers.md +89 -0
  617. package/docs/knowledge/overview-sandbox.md +83 -0
  618. package/docs/knowledge/overview-surfaces.md +83 -0
  619. package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
  620. package/docs/knowledge/proxy-settlement-projections.md +41 -0
  621. package/docs/knowledge/run-pricing-first-writer.md +43 -0
  622. package/docs/knowledge/schedule-claim-transaction.md +41 -0
  623. package/docs/knowledge/secret-entry-replica-contract.md +52 -0
  624. package/docs/knowledge/terminal-run-first-writer.md +41 -0
  625. package/docs/knowledge/transactional-agent-authorization.md +52 -0
  626. package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
  627. package/docs/knowledge/warm-input-publication.md +30 -0
  628. package/docs/knowledge/workspace-staging-failure.md +54 -0
  629. package/docs/knowledge.md +54 -14
  630. package/docs/native-sandbox.md +731 -0
  631. package/docs/observability.md +4 -0
  632. package/docs/release-verification.md +9 -0
  633. package/docs/security-deployment.md +146 -14
  634. package/docs/slack-notifications.md +268 -0
  635. package/docs/tool-secrets.md +284 -0
  636. package/docs/viewer-api.md +46 -5
  637. package/docs/viewer-api.openapi.yml +1404 -0
  638. package/help/admin-viewer.md +29 -3
  639. package/help/agent-recipes.md +27 -0
  640. package/help/architecture-agent.md +11 -6
  641. package/help/brokered-secrets.md +79 -0
  642. package/help/build-claude-code-image.md +131 -0
  643. package/help/build-worker-image.md +6 -7
  644. package/help/builder-agent.md +19 -6
  645. package/help/code-review-agents.md +243 -10
  646. package/help/coding-packages.md +156 -6
  647. package/help/cost-attribution.md +9 -5
  648. package/help/creating-agents.md +14 -1
  649. package/help/dependency-cache.md +143 -0
  650. package/help/deploy-gke.md +23 -9
  651. package/help/deployment-targets.md +25 -14
  652. package/help/errors/budget-exhausted.md +187 -0
  653. package/help/errors/budget-group-exhausted.md +5 -1
  654. package/help/errors/coding-provider-not-configured.md +2 -2
  655. package/help/errors/coding-stream-quota-exceeded.md +33 -0
  656. package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
  657. package/help/errors/continuation-closed.md +9 -12
  658. package/help/errors/database-auth-invalid.md +28 -0
  659. package/help/errors/delegation-conflict.md +24 -0
  660. package/help/errors/file-list-truncated.md +45 -0
  661. package/help/errors/full-read-required.md +49 -0
  662. package/help/errors/github-account-not-allowed.md +29 -0
  663. package/help/errors/graph-incomplete.md +43 -0
  664. package/help/errors/graph-limit.md +43 -0
  665. package/help/errors/low-power-disabled.md +29 -0
  666. package/help/errors/low-power-scale-forbidden.md +35 -0
  667. package/help/errors/low-power-wake-timeout.md +30 -0
  668. package/help/errors/merge-conflict.md +49 -0
  669. package/help/errors/mobile-disabled.md +31 -0
  670. package/help/errors/native-sandbox-capacity.md +22 -0
  671. package/help/errors/native-sandbox-deadline-exceeded.md +19 -0
  672. package/help/errors/native-sandbox-docker-failed.md +20 -0
  673. package/help/errors/native-sandbox-gateway-error.md +20 -0
  674. package/help/errors/native-sandbox-gateway-unavailable.md +21 -0
  675. package/help/errors/native-sandbox-image-not-pinned.md +19 -0
  676. package/help/errors/native-sandbox-isolation-mismatch.md +20 -0
  677. package/help/errors/native-sandbox-launch-abandoned.md +21 -0
  678. package/help/errors/native-sandbox-network-unenforced.md +22 -0
  679. package/help/errors/native-sandbox-requires-catalog.md +31 -0
  680. package/help/errors/native-sandbox-unavailable.md +19 -0
  681. package/help/errors/native-sandbox-warm-delivery-failed.md +21 -0
  682. package/help/errors/native-sandbox-worker-exited.md +21 -0
  683. package/help/errors/native-sandbox-worker-lost.md +20 -0
  684. package/help/errors/native-sandbox-worker-unready.md +22 -0
  685. package/help/errors/package-not-allowed-pending.md +52 -0
  686. package/help/errors/package-not-allowed.md +51 -0
  687. package/help/errors/package-refusals.md +43 -0
  688. package/help/errors/patch-cursor-malformed.md +31 -0
  689. package/help/errors/run-lost.md +39 -0
  690. package/help/errors/run-transcript-download.md +44 -0
  691. package/help/errors/secret-broker-body-invalid.md +26 -0
  692. package/help/errors/secret-broker-changed.md +20 -0
  693. package/help/errors/secret-broker-config-invalid.md +30 -0
  694. package/help/errors/secret-broker-conflict.md +27 -0
  695. package/help/errors/secret-broker-destination-denied.md +28 -0
  696. package/help/errors/secret-broker-value-invalid.md +28 -0
  697. package/help/errors/secret-brokered.md +24 -0
  698. package/help/errors/secret-in-value.md +69 -0
  699. package/help/errors/secret-not-brokered.md +25 -0
  700. package/help/errors/slack-auth-failed.md +48 -0
  701. package/help/errors/slack-channel-unreachable.md +39 -0
  702. package/help/errors/slack-not-configured.md +33 -0
  703. package/help/errors/target-merge.md +40 -0
  704. package/help/fix-merge-conflicts.md +73 -0
  705. package/help/getting-started.md +4 -5
  706. package/help/github-app-setup.md +132 -0
  707. package/help/github.md +40 -1
  708. package/help/identity-and-access.md +7 -1
  709. package/help/jira.md +23 -6
  710. package/help/knowledge.md +16 -7
  711. package/help/local-repositories.md +3 -4
  712. package/help/low-power-mode.md +131 -0
  713. package/help/merge-order-check.md +122 -0
  714. package/help/mobile-app.md +54 -0
  715. package/help/native-capabilities.md +29 -1
  716. package/help/native-sandbox.md +150 -0
  717. package/help/observability.md +8 -0
  718. package/help/operating-agents.md +5 -0
  719. package/help/package-audit-mode.md +91 -0
  720. package/help/related-pull-requests.md +80 -16
  721. package/help/repo-instructions-and-skills.md +91 -0
  722. package/help/resume-runs-locally.md +131 -0
  723. package/help/review-fix-rounds.md +43 -1
  724. package/help/sharing-agents.md +59 -0
  725. package/help/slack-notifications.md +76 -0
  726. package/help/status-comments.md +31 -0
  727. package/help/stop-run.md +58 -0
  728. package/help/troubleshooting/budgets.md +28 -0
  729. package/help/troubleshooting/coding-workers.md +99 -7
  730. package/package.json +27 -13
  731. package/prisma/migrations/20261009000003_native_execution_mode/migration.sql +12 -0
  732. package/prisma/migrations/20261009000004_native_gateway_ledger/migration.sql +65 -0
  733. package/prisma/migrations/20261009000005_native_gateway_call_child_agent/migration.sql +5 -0
  734. package/prisma/migrations/20261009000006_run_deferred_start_stop/migration.sql +14 -0
  735. package/prisma/migrations/20261009000007_native_gateway_network_ready/migration.sql +5 -0
  736. package/prisma/migrations/20261010000001_workflow_notifications/migration.sql +99 -0
  737. package/prisma/migrations/20261011000001_native_gateway_session_status_index/migration.sql +2 -0
  738. package/prisma/migrations/20261012000001_native_warm_worker/migration.sql +32 -0
  739. package/prisma/migrations/20261013000001_coding_run_merge_order/migration.sql +2 -0
  740. package/prisma/migrations/20261013000001_secret_broker/migration.sql +17 -0
  741. package/prisma/migrations/20261013000002_deferred_review_request/migration.sql +4 -0
  742. package/prisma/migrations/20261014000000_repo_skills/migration.sql +15 -0
  743. package/prisma/migrations/20261015000001_coding_run_merge_order_index/migration.sql +2 -0
  744. package/prisma/migrations/20261015000002_no_change_rereview/migration.sql +2 -0
  745. package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
  746. package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
  747. package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
  748. package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
  749. package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
  750. package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
  751. package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
  752. package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
  753. package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
  754. package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
  755. package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
  756. package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
  757. package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
  758. package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
  759. package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
  760. package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
  761. package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
  762. package/prisma/schema.prisma +631 -146
  763. package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
@@ -3,7 +3,7 @@ id: code-review-agents
3
3
  title: Run GitHub code-review agents
4
4
  summary: Link a read-only review agent to a repository for pull-request checks and trusted mention workflows.
5
5
  audience: operator
6
- tags: [github, code-review, pull-requests, webhooks, ci, checks, waitForCi]
6
+ tags: [github, code-review, skipped-review, budget-stopped-draft, continue-draft, follow-up, pull-requests, webhooks, ci, checks, waitForCi, markReadyWhenPassing, repo_issue_read, issues, mentions, code-spans, contributor, acceptance-criteria, jira, large-pull-request, truncated, patchCursor, unread_files]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
@@ -39,9 +39,100 @@ such a pull request automatically, up to a round cap — see
39
39
  [Automatic review fix rounds](review-fix-rounds.md).
40
40
 
41
41
  Wardby skips pull requests whose head is in a fork. It also ignores mentions
42
- from bots and people without write access. Repository links require the
43
- agent owner's linked GitHub access, or an explicitly recorded administrator
44
- approval.
42
+ from bots and people without write access, checked against the author's real
43
+ repository permission. Someone with `triage` access, or with `read` access on a private repository
44
+ or as an owner, member or collaborator, gets a 😕 reaction and a reply saying
45
+ a mention needs write access; anyone else, including a stranger on a public
46
+ repository, is ignored silently. A private organization member, whom GitHub labels
47
+ `CONTRIBUTOR` or `NONE`, is still checked and can start runs. A mention inside
48
+ Markdown code (an inline code span or a code block) is not a request, so
49
+ quoting `` `@<app-slug>` `` in an issue or comment starts nothing. Repository links
50
+ require the agent owner's linked GitHub access, or an explicitly recorded
51
+ administrator approval.
52
+
53
+ ## When a mention starts nothing
54
+
55
+ When someone with write access mentions the App and no run starts, the App
56
+ replies with the reason instead of staying silent:
57
+
58
+ - no agent is linked to the repository with the `mention` trigger;
59
+ - `@<app-slug> review` was used, but no reviewer agent (`pull_request` trigger
60
+ and a `checkName`) is linked;
61
+ - the linked agent's owner lost access to the repository, or its authorization
62
+ lapsed: the owner re-authorizes or re-links the agent;
63
+ - the pull request is closed or comes from a fork.
64
+
65
+ Mentions from people without write access never get this reply. The reply is a
66
+ comment anyone who can see the repository reads; to turn it off, for example on
67
+ public repositories, set `WARDBY_MENTION_EXPLANATIONS=false` on the server.
68
+
69
+ ## When a review starts
70
+
71
+ A push normally starts a review right away, but its timing can be held back
72
+ by two independent things: from Wardby 0.6.0, the pull request's own
73
+ delegating request still running (see [Reviewing a pull request a delegated run
74
+ opened](#reviewing-a-pull-request-a-delegated-run-opened) below), and, on a
75
+ link set up for it, CI on the pushed head still running (see [Review after
76
+ CI (`waitForCi`)](#review-after-ci-waitforci) below). Either can delay the
77
+ check that reports the review's result; neither changes what the review
78
+ itself reports once it runs. A large diff is read in pages (see [Large pull
79
+ requests](#large-pull-requests)). From Wardby 0.7.0, a push to a draft is also held
80
+ while the coding run that pushed it is still running, and, when a lead
81
+ delegated that run (a follow-up request, say), until that lead finishes.
82
+
83
+ ## Large pull requests
84
+
85
+ From Wardby 0.7.0, `repo_pr_read` pages a large diff: all files share one
86
+ budget per call (`maxPatchChars`, default 60,000, at most 200,000), with
87
+ source, test and config files first. Each file has a `patchStatus`
88
+ (`complete`, `partial`, `later_page`, `earlier_page`, `unavailable` or
89
+ `empty`). While a source, test or config file is listed in `truncatedFiles`,
90
+ call `repo_pr_read` again with `patchCursor` set to `nextPatchCursor`; the pages
91
+ after that hold only docs, help, lockfiles and generated files, which are
92
+ optional for the verdict. A page that includes source, test or config files
93
+ stops before the first doc, help, lockfile or generated file, so those come on
94
+ later pages and a reviewer can skip them. Read every `unavailable` source, test or config file
95
+ with `repo_read_file` at the head. A cursor goes stale when
96
+ the branch moves (`patch_cursor_stale`): call again without it. A damaged or
97
+ rewritten cursor returns `patch_cursor_malformed`: pass `nextPatchCursor` back exactly
98
+ as returned.
99
+ `repo_publish_review` refuses `APPROVE` with
100
+ `unread_files` while a listed source, test or config file is neither fully
101
+ delivered nor read at `headSha`. A reviewer that cannot read everything should
102
+ publish `CHANGES_REQUESTED` and name what it skipped: `COMMENT` completes the
103
+ check as neutral, which branch protection treats as passing.
104
+ The shipped reviewer prompt does this; see the [full guide](../docs/code-review-agents.md#large-pull-requests).
105
+ The refusal applies in both `control-plane` and `sandbox` mode.
106
+ A pull request with more changed files than the host lists (1,000; 300 for a
107
+ `sinceSha` compare on GitHub) reads with `fileListComplete: false`, and
108
+ `APPROVE` of that head is refused with
109
+ `file_list_truncated`; `CHANGES_REQUESTED`
110
+ and `COMMENT` still publish.
111
+
112
+ ## Drafts stopped at their budget
113
+
114
+ From Wardby 0.7.0, a pull request that is still a draft, whose latest commit
115
+ came from a coding run that stopped at its budget, is not reviewed automatically. Its check
116
+ completes as neutral, "Skipped: stopped at its budget", and no automatic fix
117
+ round follows. Marking the pull request ready for review or pushing a new
118
+ commit starts a normal review, and so does re-running the check or a review
119
+ mention. The `budget-exhausted` error article describes how a stopped run keeps
120
+ its work.
121
+
122
+ ## Follow-ups on an issue
123
+
124
+ From Wardby 0.7.0, a mention on a GitHub issue that already has an open pull request Wardby
125
+ opened tells the agent that pull request and the run id to pass as
126
+ `continuePriorRun`, so the work continues on the same branch instead of
127
+ opening a second pull request. Jira issues behave the same way (see
128
+ [Run Jira agents](jira.md)). The run message lists up to ten open pull requests
129
+ recorded for the issue.
130
+
131
+ A pull request opened from a mention on a GitHub issue starts its description
132
+ with `From issue #N` for that issue (same repository), as one opened for a Jira
133
+ issue starts with `Resolves Jira issue …`. The line links the issue but doesn't
134
+ close it; to close it on merge, have the agent end its summary with
135
+ `Resolves #N` (or `Refs #N` to keep it open, for example for a plan).
45
136
 
46
137
  ## CI and sibling pull requests
47
138
 
@@ -53,6 +144,12 @@ Wardby's coding sandbox, which may have had an incomplete install (see the
53
144
  **Dependency install incomplete** warning). Checks still running are reported
54
145
  as pending.
55
146
 
147
+ From Wardby 0.7.0, a Wardby pull request whose run had package audit mode on
148
+ (the `package-audit-mode` help article) carries a caution banner: **Packages outside the allowlist** lists what the
149
+ registry installed that the agent's allowlist doesn't cover, and **Served
150
+ despite advisories** (in `full` mode) lists versions with high or critical
151
+ advisories. Reviewers should check those packages before approving.
152
+
56
153
  If a review publishes only a comment while CI on the head is still running (or
57
154
  has not reported yet), Wardby runs that review again once CI on the same head
58
155
  has finished, so it can approve or request changes against the real result.
@@ -65,6 +162,88 @@ on the review check instead.
65
162
  Commit statuses need the App's **Commit statuses: Read** permission; without
66
163
  it only check runs are shown.
67
164
 
165
+ With Wardby 0.6.0 or later, `repo_pr_read` also returns `relatedPullRequests`: this
166
+ request's pull requests (`repository`, `number`, `state`, `mergeOrder`,
167
+ `self`), computed fresh at call time; empty on a human pull request, one
168
+ with no recognized Wardby marker, or a pull request on a local repository
169
+ (no origin marker to look up there). The `self` entry (the pull request just
170
+ read) always has a `state` (`draft`, `open`, `merged`, or `closed`) from that
171
+ same read. Another entry has a `state` (`open`, `merged`, or `closed`) only
172
+ when Wardby has it stored, as it does for pull requests linked to an issue,
173
+ and omits it otherwise; call `repo_pr_read` on that pull request when you
174
+ need its live state. The list is current; the PR body's **Related pull
175
+ requests** section can be stale — see
176
+ [Related pull requests across repositories](related-pull-requests.md).
177
+
178
+ With Wardby 0.6.0 or later, once a set has more than one `mergeOrder`, each
179
+ pull request in it also gets its own check run, named `wardby merge order`,
180
+ independent of any reviewer link; search help for "merge order check" for
181
+ its states and for requiring it in branch protection.
182
+
183
+ ## Reading the issue a pull request resolves
184
+
185
+ With Wardby 0.7.0 or later, a linked agent also gets `repo_issue_read`: it
186
+ reads one issue in a linked repository (title, state, body, labels, author,
187
+ and the 30 most recent comments), read-only, so a reviewer can check a pull
188
+ request that says `Resolves #N` against the issue's own acceptance criteria
189
+ instead of the description's restatement of them. The body is capped at
190
+ 32,000 characters and each comment at 4,000, with `truncated` flags. A pull
191
+ request number is refused (`is_pull_request`; use `repo_pr_read`), a missing
192
+ issue is `issue_not_found`, and a local repository has no issues
193
+ (`issues_unavailable`). It needs the App's **Issues: Read** permission, which
194
+ an App that handles mentions already has. Issue text is untrusted: the agent
195
+ treats it as data, never as instructions.
196
+
197
+ For a pull request that resolves a Jira issue, also link the reviewer to that
198
+ Jira project with read access; it then reads the ticket with
199
+ `jira_get_issue` (see [Run Jira agents](jira.md)). The quickstart reviewer
200
+ prompt reads whichever issue the pull request resolves and says in its
201
+ summary when it could not.
202
+
203
+ ## A description wardby can't confirm as its own
204
+
205
+ With Wardby 0.7.0 or later, when a person has edited a Wardby pull request's
206
+ description, Wardby doesn't overwrite it on later runs; it keeps one comment
207
+ with the description its latest run proposed, stamped with the commit it
208
+ describes. `repo_pr_read` returns that proposal as `descriptionProposal` when
209
+ the reviewer reads the pull request, and only for the head being reviewed
210
+ (`state: "current"`, untrusted, cut to 16 KB): a description requirement,
211
+ such as `Resolves #N` or the issue's acceptance checklist, is met if either
212
+ the live description or the proposal meets it. With
213
+ `state: "not_for_this_head"`, no proposal for this head exists yet: review the
214
+ live description. See
215
+ [Automatic review fix rounds](review-fix-rounds.md#description-updates).
216
+
217
+ ## Reviewing a pull request a delegated run opened
218
+
219
+ This requires Wardby 0.6.0 or later; earlier releases review such a pull
220
+ request on its first push. When a lead agent delegates coding work and a sub-agent opens the pull
221
+ request (see [Fanning out to several
222
+ builders](../docs/agent-recipes.md#fanning-out-to-several-builders)), every
223
+ reviewer linked with the `pull_request` trigger holds its review of that
224
+ pull request until the delegating (lead) run finishes, however it ends
225
+ (including failing, being cancelled or being lost), even if the link has no
226
+ `waitForCi` set. This gives the request's other pull requests, if any, time
227
+ to open before any of them is reviewed, so a reviewer does not report a
228
+ field or route as missing only because a sibling pull request had not opened
229
+ yet. When the lead run finishes normally, their **Related pull requests**
230
+ sections have also been rewritten (see [Related pull requests across
231
+ repositories](related-pull-requests.md)); when it is ended another way, such
232
+ as being cancelled, held reviews start without that rewrite. Either way,
233
+ reviewers should rely on `repo_pr_read`'s `relatedPullRequests`.
234
+
235
+ A reviewer linked with `waitForCi` then waits for CI too, once the lead run
236
+ finishes, with its own full 15-minute fallback counted from that point. A
237
+ pull request opened directly, by a human, or on a local repository is never
238
+ held this way. A later request that continues an already-open pull request
239
+ is not held again: the request that opened it has already finished (a push
240
+ inside the same, still-running request is held). If Wardby cannot tell
241
+ whether the pull request's opening run was delegated, the review starts
242
+ right away instead. A held review not released when its lead run finishes is
243
+ reconsidered by Wardby's reconciliation sweep once it has been held for 15
244
+ minutes and released when the lead run has finished, and dropped after 24
245
+ hours like a review held for CI.
246
+
68
247
  ## Review after CI (`waitForCi`)
69
248
 
70
249
  A `pull_request` link can set `waitForCi: true` so this reviewer reviews a
@@ -96,22 +275,76 @@ a tool error instead of publishing anything:
96
275
  - `ci_pending` — CI is still running; comment instead. The re-review above
97
276
  then runs the review again once a CI check suite finishes.
98
277
 
99
- Requesting changes or commenting is never affected by this gate. When CI
278
+ Requesting changes or commenting is never affected by the CI gate. When CI
100
279
  cannot be read at all, the gate is skipped and the review proceeds as it
101
280
  would without `waitForCi`.
102
281
 
282
+ A separate guard applies per run: `repo_publish_review` refuses `APPROVE`
283
+ with `unread_files` while a source, test or config file of the head
284
+ was listed by `repo_pr_read` but not fully read. Page with `patchCursor`, or
285
+ read the file with `repo_read_file` at `headSha`; if that is not possible,
286
+ publish `CHANGES_REQUESTED` and name the files not reviewed. `APPROVE` is
287
+ also refused with `file_list_truncated` while the head's file list is cut
288
+ (`fileListComplete: false`), and with `full_read_required` when the run read
289
+ the head only with a `sinceSha` other than the `lastCoveredSha` it returned
290
+ (the latest head this agent reviewed after reading every file).
291
+
103
292
  Add this to a reviewer's system prompt:
104
293
 
105
294
  Reviewer step (CI and related pull requests). Read `ci` from repo_pr_read.
106
295
  When `ci` and the description's Tests disagree, follow CI and say so; never
107
296
  ask for a fix only because a sandbox test failed while CI passed. Report
108
- pending checks as pending. If the description has a "Related pull requests"
109
- section, a field, route or schema the change relies on may be added by one
110
- of those pull requests: do not report it as missing; note the dependency
111
- and the suggested merge order instead.
297
+ pending checks as pending. If repo_pr_read's relatedPullRequests is
298
+ non-empty, a field, route or schema the change relies on may be added by
299
+ one of those pull requests: do not report it as missing; note the
300
+ dependency and the listed merge order instead. relatedPullRequests is
301
+ current; the PR body's "Related pull requests" section can be stale.
112
302
 
113
- Wardby also writes that section: see
303
+ On a release before 0.6.0, `repo_pr_read` has no `relatedPullRequests`:
304
+ use the description's **Related pull requests** section in its place in that
305
+ step. Wardby also writes that section: see
114
306
  [Related pull requests across repositories](related-pull-requests.md).
115
307
 
308
+ ## Mark ready when passing
309
+
310
+ With Wardby 0.7.0 or later, set `markReadyWhenPassing: true` on the write
311
+ link (`link_repository`) of the agent the repository event triggers to have
312
+ Wardby mark the draft pull requests it opens here ready for review on its
313
+ own, once they pass, instead of leaving that to a person. For a lead that
314
+ delegates to a coding builder sub-agent, set it on the lead's link: the
315
+ builder needs no repository link of its own, and pull requests its coding
316
+ runs open count for the lead. An opted-in agent outside that run tree never
317
+ counts. Re-linking the repository without it clears it, like every other
318
+ link setting.
319
+
320
+ Wardby marks a pull request ready once it is open and a draft, Wardby's own
321
+ App opened it (and its head isn't in a fork), every authorized reviewer
322
+ linked with the `pull_request` trigger has approved the head with its own
323
+ check, CI on the head is green (every check run and commit status that
324
+ isn't Wardby's own has completed with success, neutral, or skipped, at
325
+ least one with success, or there is no CI at all), and the `wardby merge order` check is `success` or
326
+ isn't posted on it. Commit statuses only count if the App can read them:
327
+ grant **Commit statuses: Read** if your CI reports statuses rather than
328
+ check runs. A pull request with more checks and statuses than Wardby reads
329
+ (about 50) is never marked ready automatically. Wardby marks a given pull
330
+ request ready at most once; moving it back to draft by hand is final —
331
+ Wardby never re-marks it.
332
+
333
+ Wardby checks whether a pull request is ready to mark on any of these
334
+ events: a reviewer run finishing, a CI check suite completing on its head,
335
+ its `wardby merge order` check turning `success`, or (as a fallback) Wardby's
336
+ own reconciliation sweep for a pull request that is part of a merge-ordered
337
+ set. With a `mergeOrder` set, a later step becomes ready this way only once
338
+ the steps it depends on have merged — see [The wardby merge order
339
+ check](merge-order-check.md). CI that reports only commit statuses (no
340
+ check suite) is not re-checked when it finishes; such a pull request is
341
+ marked ready the next time one of those events fires, or stays in draft
342
+ until then.
343
+
344
+ It never approves, merges, or converts a pull request back to draft — a
345
+ person's approval stays the gate wherever branch protection requires one.
346
+ It needs no App permission beyond **Pull requests: Read and write**, which
347
+ an App that opens pull requests already has.
348
+
116
349
  For App permissions, webhook setup, trigger configuration, and security
117
350
  details, follow [`docs/code-review-agents.md`](../docs/code-review-agents.md).
@@ -1,24 +1,33 @@
1
1
  ---
2
2
  id: coding-packages
3
3
  title: Approve packages for coding agents
4
- summary: Let Codex coding workers install vetted npm and PyPI dependencies through Wardby's registry proxy.
4
+ summary: Let coding workers install vetted npm (also with pnpm or yarn) and PyPI dependencies through Wardby's registry proxy.
5
5
  audience: operator
6
- tags: [coding-agents, packages, npm, pypi, supply-chain, refusals, lockfile, extras, pip-extras]
6
+ tags: [coding-agents, packages, npm, pnpm, yarn, pypi, uv, supply-chain, refusals, lockfile, extras, pip-extras]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
10
10
  # Approve packages for coding agents
11
11
 
12
- Coding workers have no direct registry network access. For **Codex** workers,
13
- Wardby's registry proxy can allow `npm install` and `pip install` from a
12
+ Coding workers have no direct registry network access. Wardby's registry
13
+ proxy can allow `npm install` (or `pnpm`/`yarn`) and `pip install` from a
14
14
  per-agent npm or PyPI allowlist. The proxy records what was fetched and applies
15
15
  supply-chain checks, including package graph validation, release-age policy,
16
16
  and vulnerability filtering.
17
17
 
18
18
  An empty allowlist keeps registry mode off. Approve only top-level packages;
19
19
  Wardby validates and permits the required transitive dependency graph for the
20
- run. Changing a package allowlist or policy needs `packages:approve` (or
21
- `agents:admin`) and a Wardby `admin` or `package-approver` role.
20
+ run. A package the project adds as a new top-level dependency must itself be
21
+ approved (or already be in the verified lockfile), even if an approved
22
+ package depends on it: when npm asks for a package that is not approved and
23
+ was not declared by a package already resolved in the run, Wardby refuses it
24
+ at once with `wardby_package_not_allowed`. Changing a package allowlist or
25
+ policy needs `packages:approve` (or `agents:admin`) and a Wardby `admin` or
26
+ `package-approver` role.
27
+
28
+ If the repository uses npm `overrides`, also approve each overridden package:
29
+ an override installs a version its parent doesn't ask for, so Wardby approves
30
+ it, and what it depends on, only when its name is on the allowlist.
22
31
 
23
32
  Registry mode works for Codex and Claude Code runs alike, on the `node`
24
33
  toolchain (npm) and the `node-python` toolchain (npm and pip). Claude Code runs
@@ -35,6 +44,55 @@ if its own checks failed. A package reachable only through a refused one is
35
44
  refused too, so a high-severity advisory deep in a toolchain blocks every run
36
45
  that installs it.
37
46
 
47
+ ## Allowlist refusals
48
+
49
+ Four codes say a package could not be reached through the allowlist. The agent
50
+ should stop on all of them except `wardby_graph_incomplete`; the owner fixes
51
+ them by allowlisting the package directly (`update_agent`,
52
+ `codingProfile.packageAllowlist`). Each code has an article under `errors/` (for example `errors/package-not-allowed-pending`), available from release 0.7.0.
53
+
54
+ - `wardby_package_not_allowed`: not on the allowlist and not declared by a package already resolved in the run, or only reachable through a refused package.
55
+ - `wardby_package_not_allowed_pending`: the dependency walk stopped before reaching it; retrying rarely helps.
56
+ - `wardby_graph_limit`: the dependency graph is over `REGISTRY_MAX_GRAPH_PACKAGES`.
57
+ - `wardby_graph_incomplete`: still being checked; retry shortly.
58
+
59
+ The last three arise only when the proxy walks the dependency graph: for a
60
+ tarball download the run hasn't resolved (a lockfile install the plan did not
61
+ approve), or for a metadata request after a lockfile plan of the run failed
62
+ or refused an entry. Otherwise a metadata request never walks. A
63
+ lockfileVersion 1 lockfile can't be planned, so regenerate it with a current
64
+ npm to avoid the slower walk.
65
+
66
+ To find out which packages a task needs without a round of refusals for each
67
+ one, turn on package audit mode for a limited time (from Wardby 0.7.0): the
68
+ registry installs packages outside the allowlist and records them for you to
69
+ approve. Read the `package-audit-mode` help article, "Package audit mode".
70
+
71
+ ## pnpm and yarn
72
+
73
+ From Wardby 0.7.0, pnpm, yarn classic (1.x) and yarn 2 or later (Berry, with
74
+ node-modules or Plug'n'Play) install from the same npm allowlist as npm, and
75
+ their lockfiles are verified the same way: before `pnpm install`/`add` or
76
+ `yarn`/`yarn install`/`yarn add`, the worker's shim sends `pnpm-lock.yaml`
77
+ (lockfileVersion 6 or 9) or `yarn.lock` to the registry, which approves its
78
+ exact versions, so `pnpm install --frozen-lockfile`, `yarn install
79
+ --frozen-lockfile` and `yarn install --immutable` need no slow graph walk.
80
+
81
+ - The stock images have npm, yarn classic and corepack. The shim runs pnpm,
82
+ and a yarn 2+ release a project pins in `packageManager`, through corepack,
83
+ which downloads it through the registry: allowlist `pnpm` or
84
+ `@yarnpkg/cli-dist` (or bake the tool into a custom worker image).
85
+ - yarn 2+ records yarn's own `checksum`, not npm's integrity: its plan
86
+ approves exact versions, and each download is checked against the
87
+ registry's integrity.
88
+ - yarn 2+ adds an implicit `node-gyp` dependency to packages with install
89
+ scripts (such as `fsevents`); allowlist `node-gyp` when the lockfile has it.
90
+ - Install scripts stay off for every client, and lockfiles a run commits
91
+ name only public registry URLs.
92
+
93
+ See [pnpm and yarn](../docs/coding-packages.md#pnpm-and-yarn) for each
94
+ client's settings and the plan's rules.
95
+
38
96
  ## PyPI extras
39
97
 
40
98
  A PyPI entry may name extras, as pip does: `psycopg[binary]`,
@@ -54,6 +112,42 @@ support cannot load an allowlist with a `name[extra]` entry, so every registry
54
112
  request of that run fails; and once a profile stores an extras entry, do not
55
113
  downgrade below the release that added extras.
56
114
 
115
+ ## Python: pip and uv
116
+
117
+ The `node-python` images ship pip (used in a virtual environment) and uv,
118
+ and the worker points both at the registry (`PIP_INDEX_URL`, and
119
+ `UV_DEFAULT_INDEX` with `UV_NO_BUILD=1` for wheels only). Top-level installs
120
+ work with either: `pip install -r requirements.txt`, `uv pip install …`.
121
+
122
+ - **Fully pinned requirements** (`pip-compile`, `pip freeze`) list
123
+ dependencies as top-level lines, so the file is verified first, like an
124
+ npm lockfile: `uv pip install -r` does it itself; for pip, run
125
+ `wardby-packages plan requirements.txt` first. Every pin the allowlist
126
+ reaches is then allowed; the rest are named with their reason (too new,
127
+ no wheel, not reachable).
128
+ - **`uv sync`, `uv run`, `uv add` with a committed `uv.lock`** work: the
129
+ worker's `uv` verifies the lock and points its PyPI URLs at the registry
130
+ for the command, then puts the file back (a committed lock never names
131
+ the registry).
132
+ - **Project installs** (`pip install .`, `uv sync`, `uv run`) need the build
133
+ backend from `[build-system] requires` (`hatchling`, `setuptools`, …)
134
+ allowlisted, plus what it asks for while building (hatchling: `editables`
135
+ for an editable install).
136
+ - **Poetry** doesn't work in the sandbox, and a `poetry.lock` or
137
+ `pylock.toml` can't be verified (`wardby_lockfile_unsupported`): export a
138
+ pinned requirements file, or use uv.
139
+
140
+ pip and uv don't print why the registry refused a package (pip says
141
+ `from versions: none`, uv `403 Forbidden`). The agent is told to run
142
+ `wardby-packages`, which lists the run's recent refusals with their codes
143
+ and hints; a Claude Code agent also gets those lines after any failed
144
+ command. The registry also records packages it hides from the index: one
145
+ with only source distributions (`wardby_file_not_allowed`), or whose every
146
+ wheel is too new (`wardby_version_filtered`). The installer may only have
147
+ looked at that index, so such a refusal (`get_run` marks it `listingOnly`)
148
+ adds nothing to a pull request, shows as a ⚠️ line on a run that made no
149
+ changes, and blocks the status (⛔) only when a coding sub-run failed.
150
+
57
151
  The quickstart's coding step offers the packages a local repository declares
58
152
  (`package.json`, `pyproject.toml` including its build-system packages,
59
153
  `requirements*.txt`, keeping Python extras such as `psycopg[binary]`) as
@@ -67,5 +161,61 @@ run. See [Local repositories](local-repositories.md).
67
161
  Review agents see the pull request's CI results in `repo_pr_read` and are
68
162
  told to trust CI over the sandbox's **Tests**.
69
163
 
164
+ ## Accepting advisories
165
+
166
+ From Wardby 0.7.0, a version withheld only by a high or critical advisory
167
+ (refused with `wardby_version_filtered`) can be served for one agent once an
168
+ approver accepts the advisory. Set `codingProfile.packagePolicy.acceptedAdvisories`
169
+ with `create_agent` or `update_agent` (needs `packages:approve` or
170
+ `agents:admin`):
171
+
172
+ ```json
173
+ {
174
+ "codingProfile": {
175
+ "packagePolicy": { "minReleaseAgeDays": 3, "acceptedAdvisories": ["GHSA-xxxx-xxxx-xxxx"] }
176
+ }
177
+ }
178
+ ```
179
+
180
+ - `update_agent` replaces `packagePolicy` as a whole: send the full object
181
+ (omitting `minReleaseAgeDays` resets it to the default 3). To remove a
182
+ waiver, re-send the whole object without that id.
183
+
184
+ - Up to 32 unique ids (`GHSA-…`, `CVE-…`, `PYSEC-…`), matched case-sensitively
185
+ against an advisory's id and its aliases.
186
+ - A version is served only when every blocking advisory is accepted; the
187
+ refusal names the ones still blocking.
188
+ - Malware is never waivable: `MAL-…` ids are rejected, and malware advisories
189
+ stay blocked even if listed.
190
+ - Waivers show as `acceptedAdvisories` per package in `get_run` and in an
191
+ **Accepted advisories** section of the pull request. The policy is fixed
192
+ when a run starts.
193
+ - Find the id from the package named in the refusal: `https://osv.dev/list?q=<package>`
194
+ or `npm audit`. Accept only after judging the exposure (for example, a
195
+ build-time-only dependency), and remove the entry once a fixed version ships.
196
+
70
197
  Read [`docs/coding-packages.md`](../docs/coding-packages.md) for allowlist
71
198
  syntax (including [PyPI extras](../docs/coding-packages.md#pypi-extras)), package-policy controls, lockfile behavior, and refusal errors.
199
+
200
+ ## Dependency cache
201
+
202
+ From Wardby 0.7.0, a coding agent can start with `node_modules` already
203
+ restored from a verified snapshot instead of running `npm ci`. Read the
204
+ `dependency-cache` help article, "Dependency cache for coding runs".
205
+
206
+ ## Blocked status comments
207
+
208
+ If a coding child records package refusals, reports no changes or fails, and no
209
+ pull request or pushed changes result, GitHub and Jira status comments show
210
+ ⛔ **Blocked by the package registry: no changes were made.** Otherwise, the
211
+ status keeps the agent's reply or answer, or the pull request link, and adds a
212
+ ⚠️ dependency install warning. Refusal lists show at most ten distinct entries and a count
213
+ of the rest; `get_run` has the full list.
214
+ A refusal the run got past does not count: when the registry later served the
215
+ same package (or, for a refused version, that version) to the same coding run,
216
+ for example after npm retried a temporary error, it is left out of the status,
217
+ the warning and `get_run`. A package served to another sub-run doesn't clear it.
218
+
219
+ For next steps, see [Package refusal errors](errors/package-refusals.md) and
220
+ [Run status comments](status-comments.md). After an approver updates the
221
+ agent's allowlist or policy, mention `@wardby` again to start a new attempt.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  id: cost-attribution
3
3
  title: Attribute agent spend to issues
4
- summary: See what agent work on a Jira card, epic, or project cost, by model and token kind, with the cost_report MCP tool.
4
+ summary: See what agent work on a Jira card, epic, or project, or on a GitHub issue, cost, by model and token kind, with the cost_report MCP tool.
5
5
  audience: operator
6
- tags: [cost, spend, attribution, jira, epic, reporting, cost_report, tokens]
6
+ tags: [cost, spend, attribution, jira, github, github-issues, epic, reporting, cost_report, tokens]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
@@ -15,10 +15,15 @@ work on a card, an epic, or a whole project cost.
15
15
  A run is attributed to an issue when:
16
16
 
17
17
  - a Jira event on that issue started it;
18
+ - an `@wardby` mention on a GitHub issue started it: it is attributed to a work
19
+ item with provider `github` and key `owner/repo#N`, like a Jira issue, so
20
+ `cost_report` shows the issue's total;
18
21
  - it reviews, or answers an `@wardby` mention on, a pull request Wardby opened
19
22
  for the issue — including a review that starts while the agent that asked
20
23
  for the pull request is still running, before the pull request is linked to
21
24
  the issue (Wardby then uses the issue of the coding run that opened it);
25
+ - it reviews, or answers a mention on, a pull request opened from a GitHub
26
+ issue: it is attributed to that issue's `github` work item;
22
27
  - `trigger_agent` named an `issue`, or a webhook call's JSON body named a
23
28
  `wardbyIssue`, as `{ "provider": "jira", "key": "PROJ-123" }`, in a project
24
29
  the agent is linked to. Keys are matched without regard to case
@@ -62,8 +67,7 @@ cost per model.
62
67
 
63
68
  If a company-managed Jira site still uses the legacy Epic Link field, set
64
69
  `WARDBY_JIRA_EPIC_LINK_FIELD` (for example `customfield_10014`) so runs are
65
- grouped under their epic. On GKE, re-run the database grants bootstrap after
66
- upgrading so coding runs record their per-model usage; until then they still
67
- run and a warning is logged.
70
+ grouped under their epic. On GKE, `deploy/gke/up.sh` applies the database
71
+ grant coding runs need to record their per-model usage when you upgrade.
68
72
 
69
73
  For the full guide, follow [`docs/jira-agents.md`](../docs/jira-agents.md).
@@ -3,7 +3,7 @@ id: creating-agents
3
3
  title: Choose a native or coding agent
4
4
  summary: Decide whether a task should run as a native Wardby agent or an isolated Codex or Claude Code coding agent.
5
5
  audience: developer
6
- tags: [agents, native-agents, coding-agents, codex, claude-code]
6
+ tags: [agents, native-agents, coding-agents, codex, claude-code, schedules, set_schedule]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
@@ -44,6 +44,12 @@ the trusted coding proxy, and a narrowly installed GitHub App. The agent owner
44
44
  must have the required repository access, or an administrator must explicitly
45
45
  approve the repository.
46
46
 
47
+ A Claude Code agent can also keep a redacted transcript of each run with
48
+ `codingProfile.sessionResume`, and continue a run on your machine with
49
+ `get_run_transcript` and `npx @wardby/cli@latest resume`; see
50
+ [Resume a run locally](../docs/coding-agent-setup.md#resume-a-run-locally)
51
+ (from 0.7.0, the `resume-runs-locally` help article).
52
+
47
53
  ## Choosing a model
48
54
 
49
55
  Both agent types take a `model` field naming an entry in wardby's model
@@ -67,6 +73,13 @@ coding agent needs a `codingProfile.defaultTask` first, since a scheduled run
67
73
  has no one to pass a task. A native agent's system prompt is its task. Trigger
68
74
  the agent once with `trigger_agent` and check the result before scheduling it.
69
75
 
76
+ A new schedule first fires at its next window after you set it, never for a
77
+ window that already passed. A schedule of `0 6 * * 1` set on a Wednesday
78
+ first runs the following Monday, so a manual run just before scheduling isn't
79
+ followed by a duplicate. Changing the expression or timezone, or turning a
80
+ disabled schedule back on, starts it again from that moment. If the scheduler
81
+ was down and missed windows, it runs only the latest one, once.
82
+
70
83
  Schedules fire only while a Wardby scheduler runs: `wardby serve`, or
71
84
  `wardby scheduler` next to `wardby mcp`. On a quickstart install, start
72
85
  `npx @wardby/cli@latest scheduler` from the project directory and keep it