@wardby/cli 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (576) hide show
  1. package/deploy/local/docker-compose.quickstart-coding.yml +13 -0
  2. package/dist/claude-coding-worker/driver.d.ts +21 -3
  3. package/dist/claude-coding-worker/driver.js +125 -17
  4. package/dist/claude-coding-worker/main.js +34 -6
  5. package/dist/claude-coding-worker/sdk.js +12 -1
  6. package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
  7. package/dist/claude-coding-worker/tool-socket.js +111 -0
  8. package/dist/claude-coding-worker/transcript.d.ts +18 -0
  9. package/dist/claude-coding-worker/transcript.js +77 -0
  10. package/dist/cli-help.d.ts +1 -1
  11. package/dist/cli-help.js +1 -0
  12. package/dist/cli.js +24 -10
  13. package/dist/coding/continuation-wording.d.ts +35 -0
  14. package/dist/coding/continuation-wording.js +73 -0
  15. package/dist/coding/linked-issue-note.d.ts +23 -0
  16. package/dist/coding/linked-issue-note.js +47 -0
  17. package/dist/coding/merge-wording.d.ts +28 -0
  18. package/dist/coding/merge-wording.js +78 -0
  19. package/dist/coding/pr-description-note.d.ts +9 -0
  20. package/dist/coding/pr-description-note.js +32 -0
  21. package/dist/coding/profile.d.ts +46 -126
  22. package/dist/coding/profile.js +45 -4
  23. package/dist/coding/protected-path-wording.d.ts +8 -0
  24. package/dist/coding/protected-path-wording.js +1 -1
  25. package/dist/coding/protocol.d.ts +264 -346
  26. package/dist/coding/protocol.js +235 -12
  27. package/dist/coding/redact.d.ts +3 -0
  28. package/dist/coding/redact.js +12 -0
  29. package/dist/coding/registry/allowlist.d.ts +12 -0
  30. package/dist/coding/registry/allowlist.js +14 -1
  31. package/dist/coding/registry/audit-mode.d.ts +153 -0
  32. package/dist/coding/registry/audit-mode.js +304 -0
  33. package/dist/coding/registry/lockfile-shared.d.ts +36 -0
  34. package/dist/coding/registry/lockfile-shared.js +128 -0
  35. package/dist/coding/registry/lockfiles.js +1 -1
  36. package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
  37. package/dist/coding/registry/npm-lockfile-formats.js +41 -0
  38. package/dist/coding/registry/npm-lockfile.d.ts +8 -4
  39. package/dist/coding/registry/npm-lockfile.js +4 -6
  40. package/dist/coding/registry/npm.js +78 -8
  41. package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
  42. package/dist/coding/registry/pnpm-lockfile.js +189 -0
  43. package/dist/coding/registry/pypi-plan.d.ts +50 -0
  44. package/dist/coding/registry/pypi-plan.js +406 -0
  45. package/dist/coding/registry/pypi-requirements.d.ts +58 -0
  46. package/dist/coding/registry/pypi-requirements.js +155 -0
  47. package/dist/coding/registry/pypi.d.ts +3 -27
  48. package/dist/coding/registry/pypi.js +40 -154
  49. package/dist/coding/registry/refusal-hints.d.ts +20 -0
  50. package/dist/coding/registry/refusal-hints.js +61 -0
  51. package/dist/coding/registry/refusal-wording.d.ts +11 -0
  52. package/dist/coding/registry/refusal-wording.js +56 -0
  53. package/dist/coding/registry/report.d.ts +70 -8
  54. package/dist/coding/registry/report.js +112 -5
  55. package/dist/coding/registry/types.d.ts +58 -8
  56. package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
  57. package/dist/coding/registry/yarn-lockfile.js +367 -0
  58. package/dist/coding/services/catalog.d.ts +37 -351
  59. package/dist/coding/transcript/claude-code.d.ts +13 -0
  60. package/dist/coding/transcript/claude-code.js +273 -0
  61. package/dist/coding/transcript/download-protocol.d.ts +30 -0
  62. package/dist/coding/transcript/download-protocol.js +18 -0
  63. package/dist/coding/transcript/format.d.ts +20 -0
  64. package/dist/coding/transcript/format.js +32 -0
  65. package/dist/coding/transcript/recorder.d.ts +51 -0
  66. package/dist/coding/transcript/recorder.js +225 -0
  67. package/dist/coding/transcript/resume/checkout.d.ts +31 -0
  68. package/dist/coding/transcript/resume/checkout.js +203 -0
  69. package/dist/coding/transcript/resume/command.d.ts +17 -0
  70. package/dist/coding/transcript/resume/command.js +176 -0
  71. package/dist/coding/transcript/resume/download.d.ts +20 -0
  72. package/dist/coding/transcript/resume/download.js +153 -0
  73. package/dist/coding/transcript/resume/launch.d.ts +38 -0
  74. package/dist/coding/transcript/resume/launch.js +128 -0
  75. package/dist/coding/transcript/resume/session-file.d.ts +13 -0
  76. package/dist/coding/transcript/resume/session-file.js +79 -0
  77. package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
  78. package/dist/coding/transcript/resume/stand-in.js +49 -0
  79. package/dist/coding-worker/artifact.d.ts +8 -3
  80. package/dist/coding-worker/artifact.js +3 -1
  81. package/dist/coding-worker/debug-trace.d.ts +6 -5
  82. package/dist/coding-worker/debug-trace.js +13 -18
  83. package/dist/coding-worker/dependency-cache.d.mts +229 -0
  84. package/dist/coding-worker/dependency-cache.mjs +2123 -0
  85. package/dist/coding-worker/driver.d.ts +4 -3
  86. package/dist/coding-worker/driver.js +116 -38
  87. package/dist/coding-worker/errors.d.ts +1 -0
  88. package/dist/coding-worker/errors.js +32 -0
  89. package/dist/coding-worker/task-note.d.ts +11 -0
  90. package/dist/coding-worker/task-note.js +13 -0
  91. package/dist/coding-worker/types.d.ts +11 -0
  92. package/dist/config/dependency-cache.d.ts +23 -0
  93. package/dist/config/dependency-cache.js +32 -0
  94. package/dist/config/providers.d.ts +12 -3
  95. package/dist/config/providers.js +55 -5
  96. package/dist/config/test-simulators.d.ts +82 -0
  97. package/dist/config/test-simulators.js +305 -0
  98. package/dist/core/async-context.d.ts +2 -0
  99. package/dist/core/async-context.js +12 -0
  100. package/dist/core/budget-events.d.ts +108 -0
  101. package/dist/core/budget-events.js +346 -0
  102. package/dist/core/budget-groups.d.ts +50 -1
  103. package/dist/core/budget-groups.js +236 -27
  104. package/dist/core/budget-stopped-head.d.ts +46 -0
  105. package/dist/core/budget-stopped-head.js +81 -0
  106. package/dist/core/budget-topup.d.ts +51 -0
  107. package/dist/core/budget-topup.js +156 -0
  108. package/dist/core/budget-wording.d.ts +16 -2
  109. package/dist/core/budget-wording.js +40 -2
  110. package/dist/core/coding-queue.d.ts +2 -1
  111. package/dist/core/coding-queue.js +7 -0
  112. package/dist/core/cron.d.ts +19 -1
  113. package/dist/core/cron.js +17 -0
  114. package/dist/core/datastores.js +1 -1
  115. package/dist/core/deferred-coding.d.ts +14 -0
  116. package/dist/core/deferred-coding.js +62 -0
  117. package/dist/core/delegation-child.d.ts +25 -0
  118. package/dist/core/delegation-child.js +37 -0
  119. package/dist/core/dispatch.d.ts +42 -0
  120. package/dist/core/dispatch.js +131 -56
  121. package/dist/core/engine-native.js +1 -1
  122. package/dist/core/error-code.d.ts +38 -0
  123. package/dist/core/error-code.js +168 -0
  124. package/dist/core/grants.d.ts +19 -6
  125. package/dist/core/grants.js +55 -6
  126. package/dist/core/host-events.d.ts +18 -2
  127. package/dist/core/host-events.js +284 -24
  128. package/dist/core/host-status.d.ts +85 -3
  129. package/dist/core/host-status.js +298 -20
  130. package/dist/core/issue-bridge.d.ts +50 -6
  131. package/dist/core/issue-bridge.js +124 -33
  132. package/dist/core/issue-events.d.ts +1 -1
  133. package/dist/core/issue-events.js +4 -10
  134. package/dist/core/issue-status.d.ts +1 -1
  135. package/dist/core/issue-status.js +54 -26
  136. package/dist/core/logger.d.ts +5 -0
  137. package/dist/core/logger.js +14 -1
  138. package/dist/core/lost-run-children.d.ts +6 -0
  139. package/dist/core/lost-run-children.js +32 -0
  140. package/dist/core/mark-ready.d.ts +34 -0
  141. package/dist/core/mark-ready.js +152 -0
  142. package/dist/core/markdown-code.d.ts +8 -0
  143. package/dist/core/markdown-code.js +107 -0
  144. package/dist/core/memory-tools.js +7 -0
  145. package/dist/core/merge-order-check.d.ts +2 -1
  146. package/dist/core/merge-order-check.js +8 -1
  147. package/dist/core/notification-templates.d.ts +1 -7
  148. package/dist/core/notification-templates.js +36 -2
  149. package/dist/core/pull-request-state-sync.js +2 -2
  150. package/dist/core/reconciler.d.ts +4 -3
  151. package/dist/core/reconciler.js +8 -1
  152. package/dist/core/related-pull-requests.d.ts +11 -3
  153. package/dist/core/related-pull-requests.js +27 -14
  154. package/dist/core/reply-parts.d.ts +21 -0
  155. package/dist/core/reply-parts.js +73 -0
  156. package/dist/core/review-fix.d.ts +1 -1
  157. package/dist/core/review-fix.js +2 -1
  158. package/dist/core/review-host-checks.d.ts +1 -1
  159. package/dist/core/review-host-tools.d.ts +3 -0
  160. package/dist/core/review-host-tools.js +99 -13
  161. package/dist/core/review-reads.d.ts +55 -0
  162. package/dist/core/review-reads.js +233 -0
  163. package/dist/core/run-status.d.ts +12 -0
  164. package/dist/core/run-status.js +12 -0
  165. package/dist/core/runner.d.ts +80 -34
  166. package/dist/core/runner.js +439 -144
  167. package/dist/core/schedule-start.d.ts +12 -0
  168. package/dist/core/schedule-start.js +14 -0
  169. package/dist/core/secret-broker-config.d.ts +10 -74
  170. package/dist/core/secret-guard.d.ts +46 -0
  171. package/dist/core/secret-guard.js +104 -0
  172. package/dist/core/secret-guarded-stores.d.ts +12 -0
  173. package/dist/core/secret-guarded-stores.js +41 -0
  174. package/dist/core/secret-spans.d.ts +50 -0
  175. package/dist/core/secret-spans.js +94 -0
  176. package/dist/core/stop-run.d.ts +46 -0
  177. package/dist/core/stop-run.js +61 -0
  178. package/dist/core/workflow-events.d.ts +14 -2
  179. package/dist/core/workflow-events.js +4 -0
  180. package/dist/core/workflow-run-events.d.ts +5 -3
  181. package/dist/core/workflow-run-events.js +43 -8
  182. package/dist/core/zod-json-schema.d.ts +4 -0
  183. package/dist/core/zod-json-schema.js +39 -0
  184. package/dist/core/zod3-window.d.ts +35 -0
  185. package/dist/core/zod3-window.js +124 -0
  186. package/dist/generated/prisma/browser.d.ts +34 -3
  187. package/dist/generated/prisma/client.d.ts +34 -3
  188. package/dist/generated/prisma/commonInputTypes.d.ts +220 -60
  189. package/dist/generated/prisma/enums.d.ts +10 -0
  190. package/dist/generated/prisma/enums.js +8 -0
  191. package/dist/generated/prisma/internal/class.d.ts +44 -0
  192. package/dist/generated/prisma/internal/class.js +4 -4
  193. package/dist/generated/prisma/internal/prismaNamespace.d.ts +428 -9
  194. package/dist/generated/prisma/internal/prismaNamespace.js +92 -1
  195. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +95 -0
  196. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +92 -1
  197. package/dist/generated/prisma/models/Agent.d.ts +106 -8
  198. package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
  199. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +229 -1
  200. package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
  201. package/dist/generated/prisma/models/CodingProxySession.d.ts +114 -1
  202. package/dist/generated/prisma/models/CodingRun.d.ts +1637 -1
  203. package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
  204. package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
  205. package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
  206. package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
  207. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +39 -1
  208. package/dist/generated/prisma/models/NativeGatewaySession.d.ts +35 -1
  209. package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
  210. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
  211. package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
  212. package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
  213. package/dist/generated/prisma/models/Run.d.ts +738 -2
  214. package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
  215. package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
  216. package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
  217. package/dist/generated/prisma/models/RunTranscript.js +1 -0
  218. package/dist/generated/prisma/models.d.ts +4 -0
  219. package/dist/help-index.json +1320 -69
  220. package/dist/import/create.js +32 -3
  221. package/dist/import/neutral-schema.d.ts +50 -281
  222. package/dist/import/neutral-schema.js +5 -4
  223. package/dist/knowledge/check.d.ts +1 -1
  224. package/dist/knowledge/cli.d.ts +11 -1
  225. package/dist/knowledge/cli.js +37 -4
  226. package/dist/knowledge/concept.d.ts +3 -19
  227. package/dist/knowledge/location.d.ts +31 -0
  228. package/dist/knowledge/location.js +78 -0
  229. package/dist/mcp/auth/access.d.ts +10 -2
  230. package/dist/mcp/auth/access.js +15 -1
  231. package/dist/mcp/auth/ownership.d.ts +7 -7
  232. package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
  233. package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
  234. package/dist/mcp/host-events/github-ingress.d.ts +2 -0
  235. package/dist/mcp/host-events/github-ingress.js +2 -1
  236. package/dist/mcp/index.d.ts +6 -0
  237. package/dist/mcp/index.js +58 -10
  238. package/dist/mcp/server.d.ts +13 -0
  239. package/dist/mcp/server.js +33 -14
  240. package/dist/mcp/tools/agents.d.ts +4 -0
  241. package/dist/mcp/tools/agents.js +198 -16
  242. package/dist/mcp/tools/datastore.js +17 -8
  243. package/dist/mcp/tools/grants.js +9 -3
  244. package/dist/mcp/tools/memory.js +11 -1
  245. package/dist/mcp/tools/notification-channels.js +2 -2
  246. package/dist/mcp/tools/packages.d.ts +2 -0
  247. package/dist/mcp/tools/packages.js +195 -0
  248. package/dist/mcp/tools/repositories.js +18 -5
  249. package/dist/mcp/tools/run-access.d.ts +16 -0
  250. package/dist/mcp/tools/run-access.js +25 -0
  251. package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
  252. package/dist/mcp/tools/run-transcript-download.js +129 -0
  253. package/dist/mcp/tools/run-transcript.d.ts +19 -0
  254. package/dist/mcp/tools/run-transcript.js +70 -0
  255. package/dist/mcp/tools/runs.js +34 -12
  256. package/dist/mcp/tools/scheduling.js +3 -1
  257. package/dist/mcp/tools/secret-elicitation-form.js +5 -0
  258. package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
  259. package/dist/mcp/tools/secret-elicitation-server.js +10 -61
  260. package/dist/mcp/tools/secrets.js +2 -2
  261. package/dist/mcp/tools/stop-run.d.ts +2 -0
  262. package/dist/mcp/tools/stop-run.js +82 -0
  263. package/dist/mcp/tools/subagents.js +2 -2
  264. package/dist/mcp/tools/tools.d.ts +1 -1
  265. package/dist/mcp/tools/tools.js +25 -9
  266. package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
  267. package/dist/mcp/transport/stdio-link-host.js +67 -0
  268. package/dist/mcp/transport/streamable-http.d.ts +13 -0
  269. package/dist/mcp/transport/streamable-http.js +41 -1
  270. package/dist/native-worker/docker-launcher.d.ts +38 -2
  271. package/dist/native-worker/docker-launcher.js +65 -5
  272. package/dist/native-worker/gateway-server.d.ts +41 -3
  273. package/dist/native-worker/gateway-server.js +124 -27
  274. package/dist/native-worker/gateway.d.ts +27 -1
  275. package/dist/native-worker/gateway.js +70 -4
  276. package/dist/native-worker/http-server.d.ts +3 -1
  277. package/dist/native-worker/http-server.js +11 -7
  278. package/dist/native-worker/http-transport.js +1 -1
  279. package/dist/native-worker/kubernetes-launcher.d.ts +7 -3
  280. package/dist/native-worker/kubernetes-launcher.js +43 -3
  281. package/dist/native-worker/launch.d.ts +18 -1
  282. package/dist/native-worker/launch.js +6 -1
  283. package/dist/native-worker/ledger.d.ts +18 -2
  284. package/dist/native-worker/ledger.js +57 -4
  285. package/dist/native-worker/loopback.js +3 -8
  286. package/dist/native-worker/main.d.ts +2 -1
  287. package/dist/native-worker/main.js +14 -3
  288. package/dist/native-worker/protocol.d.ts +129 -577
  289. package/dist/native-worker/protocol.js +47 -1
  290. package/dist/native-worker/sandbox-executor.d.ts +17 -2
  291. package/dist/native-worker/sandbox-executor.js +78 -4
  292. package/dist/native-worker/stderr-redaction.d.ts +77 -0
  293. package/dist/native-worker/stderr-redaction.js +237 -0
  294. package/dist/native-worker/stdio.d.ts +1 -1
  295. package/dist/native-worker/stdio.js +6 -5
  296. package/dist/native-worker/warm-pool.d.ts +2 -2
  297. package/dist/native-worker/warm-pool.js +4 -4
  298. package/dist/native-worker/worker.js +28 -2
  299. package/dist/observability/metrics.js +6 -1
  300. package/dist/providers/auth/self-hosted.d.ts +1 -1
  301. package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
  302. package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
  303. package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
  304. package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
  305. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
  306. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
  307. package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
  308. package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
  309. package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
  310. package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
  311. package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
  312. package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
  313. package/dist/providers/coding-proxy/hold.d.ts +32 -0
  314. package/dist/providers/coding-proxy/hold.js +86 -0
  315. package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
  316. package/dist/providers/coding-proxy/interrupted.js +104 -0
  317. package/dist/providers/coding-proxy/memory-ledger.d.ts +15 -2
  318. package/dist/providers/coding-proxy/memory-ledger.js +84 -8
  319. package/dist/providers/coding-proxy/metering.d.ts +16 -0
  320. package/dist/providers/coding-proxy/metering.js +27 -4
  321. package/dist/providers/coding-proxy/prisma-ledger.d.ts +15 -2
  322. package/dist/providers/coding-proxy/prisma-ledger.js +179 -67
  323. package/dist/providers/coding-proxy/proxy.d.ts +14 -1
  324. package/dist/providers/coding-proxy/proxy.js +166 -14
  325. package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
  326. package/dist/providers/coding-proxy/registry/audit.js +94 -17
  327. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
  328. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
  329. package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
  330. package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
  331. package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
  332. package/dist/providers/coding-proxy/registry/plan.js +201 -48
  333. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
  334. package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
  335. package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
  336. package/dist/providers/coding-proxy/registry/service.js +579 -112
  337. package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
  338. package/dist/providers/coding-proxy/registry/store.js +54 -1
  339. package/dist/providers/coding-proxy/runtime.d.ts +4 -0
  340. package/dist/providers/coding-proxy/runtime.js +78 -16
  341. package/dist/providers/coding-proxy/server.d.ts +6 -1
  342. package/dist/providers/coding-proxy/server.js +45 -1
  343. package/dist/providers/coding-proxy/types.d.ts +65 -1
  344. package/dist/providers/datastore/types.d.ts +5 -0
  345. package/dist/providers/engine/types.d.ts +17 -2
  346. package/dist/providers/engine/types.js +17 -0
  347. package/dist/providers/executor/composition.d.ts +10 -3
  348. package/dist/providers/executor/composition.js +47 -7
  349. package/dist/providers/executor/container.d.ts +361 -8
  350. package/dist/providers/executor/container.js +1136 -91
  351. package/dist/providers/executor/dbos-status.d.ts +31 -0
  352. package/dist/providers/executor/dbos-status.js +64 -0
  353. package/dist/providers/executor/dbos.d.ts +50 -1
  354. package/dist/providers/executor/dbos.js +207 -20
  355. package/dist/providers/executor/deferred.d.ts +12 -24
  356. package/dist/providers/executor/deferred.js +10 -29
  357. package/dist/providers/executor/in-process.d.ts +9 -1
  358. package/dist/providers/executor/in-process.js +14 -4
  359. package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
  360. package/dist/providers/executor/linked-issue-reader.js +30 -0
  361. package/dist/providers/executor/routing.d.ts +2 -0
  362. package/dist/providers/executor/routing.js +4 -0
  363. package/dist/providers/executor/types.d.ts +13 -0
  364. package/dist/providers/index.d.ts +2 -1
  365. package/dist/providers/issue-tracker/types.d.ts +17 -0
  366. package/dist/providers/issue-tracker/types.js +39 -1
  367. package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
  368. package/dist/providers/jobs/claude-tool-setup.js +5 -2
  369. package/dist/providers/jobs/docker-isolation.d.ts +8 -0
  370. package/dist/providers/jobs/docker-isolation.js +17 -0
  371. package/dist/providers/jobs/docker.d.ts +1 -0
  372. package/dist/providers/jobs/docker.js +27 -2
  373. package/dist/providers/jobs/fake-kubernetes-api.d.ts +2 -0
  374. package/dist/providers/jobs/fake-kubernetes-api.js +3 -0
  375. package/dist/providers/jobs/kubernetes-api.d.ts +8 -0
  376. package/dist/providers/jobs/kubernetes-api.js +10 -0
  377. package/dist/providers/jobs/kubernetes-client.js +10 -1
  378. package/dist/providers/jobs/kubernetes-isolation.d.ts +2 -0
  379. package/dist/providers/jobs/kubernetes-isolation.js +17 -1
  380. package/dist/providers/jobs/kubernetes.d.ts +6 -1
  381. package/dist/providers/jobs/kubernetes.js +105 -16
  382. package/dist/providers/jobs/types.d.ts +33 -0
  383. package/dist/providers/jobs/types.js +13 -1
  384. package/dist/providers/llm/anthropic.js +5 -1
  385. package/dist/providers/llm/bedrock.d.ts +0 -12
  386. package/dist/providers/llm/bedrock.js +4 -0
  387. package/dist/providers/llm/claude-messages.d.ts +3 -1
  388. package/dist/providers/llm/claude-messages.js +4 -1
  389. package/dist/providers/llm/claude-provider.d.ts +2 -2
  390. package/dist/providers/llm/claude-provider.js +2 -2
  391. package/dist/providers/llm/openai.d.ts +2 -2
  392. package/dist/providers/llm/openai.js +6 -2
  393. package/dist/providers/llm/routing.d.ts +2 -2
  394. package/dist/providers/llm/routing.js +2 -2
  395. package/dist/providers/llm/types.d.ts +12 -2
  396. package/dist/providers/review-host/github-events.d.ts +9 -1
  397. package/dist/providers/review-host/github-events.js +34 -12
  398. package/dist/providers/review-host/github.d.ts +29 -2
  399. package/dist/providers/review-host/github.js +224 -29
  400. package/dist/providers/review-host/local.d.ts +8 -4
  401. package/dist/providers/review-host/local.js +49 -31
  402. package/dist/providers/review-host/patch-pages.d.ts +41 -0
  403. package/dist/providers/review-host/patch-pages.js +176 -0
  404. package/dist/providers/review-host/review-format.d.ts +19 -1
  405. package/dist/providers/review-host/review-format.js +38 -7
  406. package/dist/providers/review-host/types.d.ts +134 -2
  407. package/dist/providers/review-host/types.js +8 -0
  408. package/dist/providers/storage/gcs.d.ts +63 -0
  409. package/dist/providers/storage/gcs.js +69 -0
  410. package/dist/providers/storage/index.d.ts +15 -0
  411. package/dist/providers/storage/index.js +14 -0
  412. package/dist/providers/storage/local.d.ts +24 -0
  413. package/dist/providers/storage/local.js +92 -0
  414. package/dist/providers/storage/meter.d.ts +14 -0
  415. package/dist/providers/storage/meter.js +34 -0
  416. package/dist/providers/storage/s3.d.ts +41 -0
  417. package/dist/providers/storage/s3.js +107 -0
  418. package/dist/providers/storage/types.d.ts +37 -3
  419. package/dist/providers/storage/types.js +21 -4
  420. package/dist/providers/vcs/git.d.ts +33 -2
  421. package/dist/providers/vcs/git.js +324 -22
  422. package/dist/providers/vcs/github-remote.d.ts +26 -3
  423. package/dist/providers/vcs/github-remote.js +124 -14
  424. package/dist/providers/vcs/github.d.ts +214 -6
  425. package/dist/providers/vcs/github.js +447 -45
  426. package/dist/providers/vcs/index.js +8 -1
  427. package/dist/providers/vcs/pr-description.d.ts +127 -0
  428. package/dist/providers/vcs/pr-description.js +270 -0
  429. package/dist/providers/vcs/remote.d.ts +33 -1
  430. package/dist/providers/vcs/routing.d.ts +4 -2
  431. package/dist/providers/vcs/routing.js +6 -0
  432. package/dist/providers/vcs/types.d.ts +80 -3
  433. package/dist/quickstart/coding-seed.d.ts +14 -3
  434. package/dist/quickstart/coding-seed.js +213 -4
  435. package/dist/quickstart/reviewer-prompt.d.ts +1 -1
  436. package/dist/quickstart/reviewer-prompt.js +6 -6
  437. package/dist/quickstart-images.json +1 -1
  438. package/dist/sandbox/generated/zod.bundle.js +62 -1
  439. package/dist/sandbox/generated/zod3.bundle.js +5 -0
  440. package/dist/sandbox/host-functions.d.ts +1 -0
  441. package/dist/sandbox/host-functions.js +6 -11
  442. package/dist/sandbox/secret-broker.js +3 -4
  443. package/dist/sandbox/tool-capabilities.d.ts +10 -30
  444. package/dist/sandbox/zod-params.d.ts +37 -5
  445. package/dist/sandbox/zod-params.js +181 -26
  446. package/dist/serve.js +8 -1
  447. package/dist/viewer/api-schema.d.ts +349 -2627
  448. package/dist/viewer/api-schema.js +7 -0
  449. package/dist/viewer/build-schemas.js +6 -2
  450. package/dist/viewer/openapi.js +2 -4
  451. package/dist/wardby-bin.js +10 -0
  452. package/docs/agent-recipes.md +58 -20
  453. package/docs/code-review-agents.md +551 -41
  454. package/docs/coding-agent-setup.md +489 -7
  455. package/docs/coding-packages.md +1033 -90
  456. package/docs/coding-services.md +27 -12
  457. package/docs/coding-worker-byo-images.md +20 -0
  458. package/docs/coding-worker-isolation.md +105 -30
  459. package/docs/getting-started-gke.md +124 -137
  460. package/docs/getting-started-identity-provider.md +10 -1
  461. package/docs/getting-started.md +9 -0
  462. package/docs/jira-agents.md +17 -8
  463. package/docs/knowledge/blob-not-found-semantics.md +41 -0
  464. package/docs/knowledge/bounded-file-descriptor.md +52 -0
  465. package/docs/knowledge/delegation-admission-slots.md +52 -0
  466. package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
  467. package/docs/knowledge/import-rename-target.md +52 -0
  468. package/docs/knowledge/index.md +57 -0
  469. package/docs/knowledge/log.md +9 -0
  470. package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
  471. package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
  472. package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
  473. package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
  474. package/docs/knowledge/overview-cli.md +74 -0
  475. package/docs/knowledge/overview-coding-proxy.md +72 -0
  476. package/docs/knowledge/overview-coding.md +72 -0
  477. package/docs/knowledge/overview-config.md +60 -0
  478. package/docs/knowledge/overview-core.md +72 -0
  479. package/docs/knowledge/overview-deploy.md +83 -0
  480. package/docs/knowledge/overview-mcp.md +61 -0
  481. package/docs/knowledge/overview-prisma.md +72 -0
  482. package/docs/knowledge/overview-providers.md +89 -0
  483. package/docs/knowledge/overview-sandbox.md +83 -0
  484. package/docs/knowledge/overview-surfaces.md +83 -0
  485. package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
  486. package/docs/knowledge/proxy-settlement-projections.md +41 -0
  487. package/docs/knowledge/run-pricing-first-writer.md +43 -0
  488. package/docs/knowledge/schedule-claim-transaction.md +41 -0
  489. package/docs/knowledge/secret-entry-replica-contract.md +52 -0
  490. package/docs/knowledge/terminal-run-first-writer.md +41 -0
  491. package/docs/knowledge/transactional-agent-authorization.md +52 -0
  492. package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
  493. package/docs/knowledge/warm-input-publication.md +30 -0
  494. package/docs/knowledge/workspace-staging-failure.md +54 -0
  495. package/docs/knowledge.md +54 -14
  496. package/docs/native-sandbox.md +119 -23
  497. package/docs/observability.md +4 -0
  498. package/docs/security-deployment.md +33 -2
  499. package/docs/slack-notifications.md +35 -19
  500. package/docs/tool-secrets.md +42 -10
  501. package/docs/viewer-api.openapi.yml +1 -1
  502. package/help/admin-viewer.md +24 -2
  503. package/help/architecture-agent.md +11 -6
  504. package/help/build-worker-image.md +3 -1
  505. package/help/builder-agent.md +19 -6
  506. package/help/code-review-agents.md +177 -6
  507. package/help/coding-packages.md +156 -6
  508. package/help/cost-attribution.md +9 -5
  509. package/help/creating-agents.md +14 -1
  510. package/help/dependency-cache.md +143 -0
  511. package/help/deploy-gke.md +15 -8
  512. package/help/errors/budget-exhausted.md +187 -0
  513. package/help/errors/budget-group-exhausted.md +5 -1
  514. package/help/errors/coding-stream-quota-exceeded.md +33 -0
  515. package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
  516. package/help/errors/continuation-closed.md +9 -12
  517. package/help/errors/delegation-conflict.md +24 -0
  518. package/help/errors/file-list-truncated.md +45 -0
  519. package/help/errors/full-read-required.md +49 -0
  520. package/help/errors/github-account-not-allowed.md +4 -0
  521. package/help/errors/graph-incomplete.md +43 -0
  522. package/help/errors/graph-limit.md +43 -0
  523. package/help/errors/merge-conflict.md +49 -0
  524. package/help/errors/native-sandbox-gateway-error.md +20 -0
  525. package/help/errors/native-sandbox-launch-abandoned.md +21 -0
  526. package/help/errors/native-sandbox-worker-exited.md +3 -2
  527. package/help/errors/package-not-allowed-pending.md +52 -0
  528. package/help/errors/package-not-allowed.md +51 -0
  529. package/help/errors/package-refusals.md +43 -0
  530. package/help/errors/patch-cursor-malformed.md +31 -0
  531. package/help/errors/run-lost.md +39 -0
  532. package/help/errors/run-transcript-download.md +44 -0
  533. package/help/errors/secret-in-value.md +69 -0
  534. package/help/errors/target-merge.md +40 -0
  535. package/help/fix-merge-conflicts.md +73 -0
  536. package/help/github-app-setup.md +132 -0
  537. package/help/github.md +22 -0
  538. package/help/identity-and-access.md +2 -0
  539. package/help/jira.md +23 -6
  540. package/help/knowledge.md +16 -7
  541. package/help/local-repositories.md +1 -1
  542. package/help/low-power-mode.md +7 -1
  543. package/help/merge-order-check.md +5 -0
  544. package/help/native-capabilities.md +29 -1
  545. package/help/native-sandbox.md +15 -1
  546. package/help/operating-agents.md +5 -0
  547. package/help/package-audit-mode.md +91 -0
  548. package/help/related-pull-requests.md +10 -7
  549. package/help/resume-runs-locally.md +131 -0
  550. package/help/review-fix-rounds.md +33 -1
  551. package/help/sharing-agents.md +59 -0
  552. package/help/slack-notifications.md +19 -5
  553. package/help/status-comments.md +31 -0
  554. package/help/stop-run.md +58 -0
  555. package/help/troubleshooting/budgets.md +28 -0
  556. package/help/troubleshooting/coding-workers.md +78 -7
  557. package/package.json +17 -10
  558. package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
  559. package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
  560. package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
  561. package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
  562. package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
  563. package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
  564. package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
  565. package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
  566. package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
  567. package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
  568. package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
  569. package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
  570. package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
  571. package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
  572. package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
  573. package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
  574. package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
  575. package/prisma/schema.prisma +311 -97
  576. package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
@@ -1,4 +1,4 @@
1
- import { CONTINUATION_CLOSED_ERROR } from "../../coding/continuation-wording.js";
1
+ import { budgetStoppedChangesSentence, CONTINUATION_CLOSED_ERROR } from "../../coding/continuation-wording.js";
2
2
  import { normalizeGitHubRepository, normalizeGitRef } from "../../coding/protocol.js";
3
3
  import { logger } from "../../core/logger.js";
4
4
  import { validateChangedPath } from "./git.js";
@@ -79,7 +79,57 @@ export class GitHubRemote {
79
79
  if (!open)
80
80
  throw new Error(CONTINUATION_CLOSED_ERROR);
81
81
  }
82
- async publish({ workspace: prepared, details, changedPaths }) {
82
+ /** See GitRemote.pullRequestBase: the root run's open PR's current base branch. Never throws. */
83
+ async pullRequestBase(input) {
84
+ const github = this.options.github;
85
+ if (!input.continuation || !github.openPullRequestBase)
86
+ return null;
87
+ try {
88
+ const found = await github.openPullRequestBase({
89
+ runId: input.continuation.rootRunId,
90
+ repository: input.repository,
91
+ baseRef: input.baseRef,
92
+ headRef: input.headRef,
93
+ });
94
+ return found ? { ref: found.baseRef } : null;
95
+ }
96
+ catch (error) {
97
+ logger.warn({ err: error, runId: input.runId }, "could not read the continuation pull request's base branch; continuing without merging it");
98
+ return null;
99
+ }
100
+ }
101
+ /** See VcsProvider.continuationPullRequestDraft: GitHub's draft flag on the root run's open PR. Never throws. */
102
+ async continuationPullRequestDraft(workspace) {
103
+ const github = this.options.github;
104
+ if (!workspace.continuation || !github.openPullRequestDraft)
105
+ return undefined;
106
+ try {
107
+ const draft = await github.openPullRequestDraft({
108
+ runId: workspace.continuation.rootRunId,
109
+ repository: workspace.repository,
110
+ baseRef: workspace.baseRef,
111
+ headRef: workspace.headRef,
112
+ });
113
+ return draft ?? undefined;
114
+ }
115
+ catch (error) {
116
+ logger.warn({ err: error, runId: workspace.runId }, "could not read the continuation pull request's draft state");
117
+ return undefined;
118
+ }
119
+ }
120
+ /** A continuation's description comment, written before the push (see GitRemote.proposeDescriptionBeforePush). Never throws. */
121
+ async proposeDescriptionBeforePush({ workspace: prepared, details, changedPaths, commitSha, }) {
122
+ const github = this.options.github;
123
+ if (!prepared.continuation || !details?.description || !github.proposeDescriptionComment)
124
+ return;
125
+ try {
126
+ await github.proposeDescriptionComment(this.descriptionInput({ ...prepared, continuation: prepared.continuation }, { ...details, description: details.description }, changedPaths, commitSha));
127
+ }
128
+ catch (error) {
129
+ logger.warn({ err: error, runId: prepared.runId }, "pre-push description comment failed");
130
+ }
131
+ }
132
+ async publish({ workspace: prepared, details, changedPaths, commitSha }) {
83
133
  // Revision-in-place: identify the PR by the run that originally opened
84
134
  // it (createOrFindDraftPullRequest's marker-based lookup keys on that
85
135
  // run's id), not this run's own -- this finds the existing open PR and
@@ -99,11 +149,65 @@ export class GitHubRemote {
99
149
  tag: details?.tag,
100
150
  packages: details?.packages,
101
151
  packageRefusals: details?.packageRefusals,
152
+ ...(details?.packageAudit ? { packageAudit: details.packageAudit } : {}),
153
+ ...(details?.restoredDependencies?.length ? { restoredDependencies: details.restoredDependencies } : {}),
102
154
  changedLockfiles: changedPaths.filter(isLockfilePath),
103
155
  ...(details?.issue ? { issue: details.issue } : {}),
156
+ ...(details?.issueNumber !== undefined ? { issueNumber: details.issueNumber } : {}),
104
157
  ...(details?.related ? { related: details.related } : {}),
105
158
  });
106
- return { kind: "pull_request", number: pullRequest.number, url: pullRequest.url };
159
+ let description;
160
+ if (prepared.continuation) {
161
+ description = await this.updateDescription(prepared, details, changedPaths, commitSha);
162
+ }
163
+ else if (pullRequest.descriptionSha256) {
164
+ description = { kind: "written", sha256: pullRequest.descriptionSha256 };
165
+ }
166
+ return {
167
+ kind: "pull_request",
168
+ number: pullRequest.number,
169
+ url: pullRequest.url,
170
+ ...(description ? { description } : {}),
171
+ };
172
+ }
173
+ /** The no-push path: a fix round that changed nothing still re-derives its PR description. */
174
+ async refreshDescription(workspace, details) {
175
+ // No push: the head is the commit the workspace was checked out at.
176
+ return this.updateDescription(workspace, details, [], workspace.baseCommit);
177
+ }
178
+ /** Never throws: a description problem must not fail an already-pushed run. */
179
+ async updateDescription(prepared, details, changedPaths, headSha) {
180
+ const github = this.options.github;
181
+ if (!prepared.continuation || !details?.description || !github.updatePullRequestDescription)
182
+ return undefined;
183
+ try {
184
+ return await github.updatePullRequestDescription(this.descriptionInput({ ...prepared, continuation: prepared.continuation }, { ...details, description: details.description }, changedPaths, headSha));
185
+ }
186
+ catch (error) {
187
+ logger.warn({ err: error, runId: prepared.runId }, "pull request description update failed");
188
+ return { kind: "skipped", reason: "error" };
189
+ }
190
+ }
191
+ descriptionInput(prepared, details, changedPaths, headSha) {
192
+ return {
193
+ rootRunId: prepared.continuation.rootRunId,
194
+ runId: prepared.runId,
195
+ repository: prepared.repository,
196
+ baseRef: prepared.baseRef,
197
+ headRef: prepared.headRef,
198
+ ...(headSha && /^[0-9a-f]{40}$/.test(headSha) ? { headSha } : {}),
199
+ summary: details.summary,
200
+ tests: details.tests,
201
+ tag: details.tag,
202
+ packages: details.packages,
203
+ packageRefusals: details.packageRefusals,
204
+ ...(details.packageAudit ? { packageAudit: details.packageAudit } : {}),
205
+ ...(details.restoredDependencies?.length ? { restoredDependencies: details.restoredDependencies } : {}),
206
+ changedLockfiles: changedPaths.filter(isLockfilePath),
207
+ ...(details.issue ? { issue: details.issue } : {}),
208
+ ...(details.issueNumber !== undefined ? { issueNumber: details.issueNumber } : {}),
209
+ baseline: details.description.baseline,
210
+ };
107
211
  }
108
212
  /**
109
213
  * Best-effort "wardby is working on this PR" signal (see VcsProvider) --
@@ -163,21 +267,27 @@ export class GitHubRemote {
163
267
  const summarySuffix = details?.summary ? `\n\n${details.summary}` : "";
164
268
  const budgetSuffix = details?.budgetSentence ? ` ${details.budgetSentence}` : "";
165
269
  const body = outcome === "succeeded"
166
- ? `✅ ${label} finished.${summarySuffix}`
167
- : outcome === "budget_exhausted"
168
- ? `❌ ${label} ran out of budget.${budgetSuffix}${summarySuffix}`
169
- : details?.serviceSentence
170
- ? `❌ ${label} could not start: ${details.serviceSentence}${summarySuffix}`
171
- : details?.providerSentence
172
- ? `❌ ${label} could not run: ${details.providerSentence}${summarySuffix}`
173
- : details?.protectedPathSentence
174
- ? `❌ ${label} could not open its changes: ${details.protectedPathSentence}${summarySuffix}`
175
- : `❌ ${label} failed.${summarySuffix}`;
270
+ ? `✅ ${label} finished.${details?.mergeSentence ? ` ${details.mergeSentence}` : ""}${details?.overrunSentence ? ` ${details.overrunSentence}` : ""}${summarySuffix}`
271
+ : outcome === "budget_exhausted" && details?.changesPushed
272
+ ? `⚠️ ${label} ran out of budget before finishing.${budgetSuffix} ${budgetStoppedChangesSentence(details.changesPushed.pullRequestNumber
273
+ ? `#${details.changesPushed.pullRequestNumber}`
274
+ : "this pull request", false)}${details?.mergeSentence ? ` ${details.mergeSentence}` : ""}${summarySuffix}`
275
+ : outcome === "budget_exhausted"
276
+ ? `❌ ${label} ran out of budget.${budgetSuffix}${summarySuffix}`
277
+ : details?.serviceSentence
278
+ ? `❌ ${label} could not start: ${details.serviceSentence}${summarySuffix}`
279
+ : details?.providerSentence
280
+ ? `❌ ${label} could not run: ${details.providerSentence}${summarySuffix}`
281
+ : details?.protectedPathSentence
282
+ ? `❌ ${label} could not open its changes: ${details.protectedPathSentence}${summarySuffix}`
283
+ : details?.conflictMarkersSentence
284
+ ? `❌ ${label} could not push its changes: ${details.conflictMarkersSentence}${summarySuffix}`
285
+ : `❌ ${label} failed.${summarySuffix}`;
176
286
  await Promise.allSettled([
177
287
  this.options.github.updateContinuationStatusComment({ ...identity, body }),
178
288
  this.options.github.completeContinuationCheckRun({
179
289
  repository: workspace.repository,
180
- headSha: workspace.baseCommit,
290
+ ...(workspace.baseCommit ? { headSha: workspace.baseCommit } : { headRef: workspace.headRef }),
181
291
  runId: workspace.runId,
182
292
  outcome: outcome === "succeeded" ? "succeeded" : "failed",
183
293
  }),
@@ -1,3 +1,6 @@
1
+ import { type PackageAuditReport } from "../../coding/registry/audit-mode.js";
2
+ import { RELATED_SECTION_END, RELATED_SECTION_START } from "./pr-description.js";
3
+ export { RELATED_SECTION_END, RELATED_SECTION_START };
1
4
  export interface GitHubAppConfig {
2
5
  appId: string;
3
6
  privateKey: string;
@@ -13,6 +16,9 @@ export interface PackageReport {
13
16
  ecosystem: string;
14
17
  name: string;
15
18
  version: string;
19
+ /** Blocking advisories the run's packagePolicy.acceptedAdvisories waived
20
+ * to serve it; listed under "Accepted advisories". */
21
+ acceptedAdvisories?: readonly string[];
16
22
  }
17
23
  /** One package the registry proxy refused during the run (RegistryFetch outcome "refused"). */
18
24
  export interface PackageRefusal {
@@ -32,6 +38,15 @@ export interface PullRequestInput {
32
38
  /** Deduplicated by the caller isn't required — pullRequestBody dedupes itself (ecosystem+name+version / +reason). */
33
39
  packages?: readonly PackageReport[];
34
40
  packageRefusals?: readonly PackageRefusal[];
41
+ /**
42
+ * Package audit mode (control-plane records, never model output): rendered
43
+ * as a [!CAUTION] banner with the packages installed outside the allowlist
44
+ * (and, in full mode, versions served past advisories). Kept when the
45
+ * packages section is dropped for size.
46
+ */
47
+ packageAudit?: PackageAuditReport;
48
+ /** Folders whose node_modules the dependency cache restored from a snapshot ("." for the root); control-plane data. */
49
+ restoredDependencies?: readonly string[];
35
50
  /** Lock files the run changed (repository paths); with refusals, the PR body warns they may be incomplete. */
36
51
  changedLockfiles?: readonly string[];
37
52
  /**
@@ -55,16 +70,91 @@ export interface PullRequestInput {
55
70
  url?: string;
56
71
  trackerName?: string;
57
72
  };
73
+ /**
74
+ * The issue in this pull request's own repository the run came from (a
75
+ * mention on a GitHub issue; control-plane data, never model output): the
76
+ * body's first visible line is `From issue #N`, the GitHub issue's form of
77
+ * the issue line above. It links the issue but never closes it: whether
78
+ * merging closes it is the agent's choice (`Resolves #N` or `Refs #N` in
79
+ * its summary). Used only when `issue` renders no line.
80
+ */
81
+ issueNumber?: number;
58
82
  /**
59
83
  * The request's other pull requests (control-plane rows only), rendered as
60
84
  * the marked "Related pull requests" section. Rendering failures omit it.
61
85
  */
62
86
  related?: RelatedPullRequestsInput;
87
+ /**
88
+ * The run that last wrote this description (a fix round), rendered as the
89
+ * hidden `<!-- wardby-latest:<runId> -->` last line. The root run marker
90
+ * stays first. Dropped when it isn't a safe run id.
91
+ */
92
+ latestRunId?: string;
93
+ /**
94
+ * What the packages list covers: this run (the default), or every run on
95
+ * the pull request (a later run's description update, whose `packages` are
96
+ * cumulative). Only the section title differs.
97
+ */
98
+ packagesScope?: "run" | "pull_request";
63
99
  }
64
100
  export interface PullRequestResult {
65
101
  number: number;
66
102
  url: string;
103
+ /**
104
+ * Hash (descriptionSha256) of the body in GitHub's create response. Set only
105
+ * when this call created the pull request; absent when it found one.
106
+ */
107
+ descriptionSha256?: string;
108
+ }
109
+ /** What wardby last wrote into a pull request description (control-plane records). */
110
+ export interface DescriptionBaseline {
111
+ /** Null = legacy pull request (no recorded write). */
112
+ recordedSha256: string | null;
113
+ /**
114
+ * Legacy pull requests only: the hash of the body wardby would have written
115
+ * for the root run, rebuilt from stored records. A current body with this
116
+ * hash is unedited. Absent when the records can't rebuild it (then the
117
+ * description counts as edited).
118
+ */
119
+ legacySha256?: string;
120
+ /** Stored summary of the run whose text the description carries (root run for legacy). */
121
+ previousAgentText?: string;
122
+ /** That run's id. */
123
+ agentTextRunId: string;
124
+ }
125
+ /**
126
+ * A fix round's description update. `runId` is this (latest) run; the pull
127
+ * request is re-found by `rootRunId`'s marker. `related` is ignored: the
128
+ * current body's Related block is kept verbatim.
129
+ */
130
+ export interface UpdateDescriptionInput extends Omit<PullRequestInput, "runId" | "acceptReadyForReview"> {
131
+ rootRunId: string;
132
+ runId: string;
133
+ baseline: DescriptionBaseline;
134
+ /**
135
+ * The head commit this description describes (the run's pushed commit, or
136
+ * the unchanged head of a no-change round); stamped on the fallback
137
+ * comment so a reviewer only trusts a proposal for the head it reviews.
138
+ */
139
+ headSha?: string;
67
140
  }
141
+ /** `agentTextRunId` is the run whose summary the description now carries. */
142
+ export type DescriptionUpdateResult = {
143
+ kind: "replaced" | "unchanged";
144
+ sha256: string;
145
+ agentTextRunId: string;
146
+ } | {
147
+ kind: "refreshed";
148
+ reason: "empty" | "too_short" | "missing_closing_keyword";
149
+ sha256: string;
150
+ agentTextRunId: string;
151
+ } | {
152
+ kind: "edited_by_hand";
153
+ commentPosted: boolean;
154
+ } | {
155
+ kind: "skipped";
156
+ reason: "not_open" | "too_long" | "error";
157
+ };
68
158
  /** See VcsProvider.notifyContinuationStarted/Finished (types.ts) — these back that GitHub-specific mechanism. */
69
159
  export interface ContinuationStatusCommentInput {
70
160
  /** This continuation round's own run id — the comment's identity/marker key. */
@@ -82,8 +172,18 @@ export interface ContinuationCheckRunInput {
82
172
  /** Stored as the check run's external_id — the re-lookup key, so no numeric id needs to be cached anywhere. */
83
173
  runId: string;
84
174
  }
85
- export interface ContinuationCheckRunCompleteInput extends ContinuationCheckRunInput {
175
+ export interface ContinuationCheckRunCompleteInput {
176
+ repository: string;
177
+ runId: string;
86
178
  outcome: "succeeded" | "failed";
179
+ /** The commit the check run was created on. */
180
+ headSha?: string;
181
+ /**
182
+ * Used when headSha is unknown (the run's workspace is gone): the check run is
183
+ * looked up on the pull request's head branch, which a run that pushed nothing
184
+ * left at that commit.
185
+ */
186
+ headRef?: string;
87
187
  }
88
188
  /** One file at one ref, read through the API without a clone. */
89
189
  export interface RepositoryFileInput {
@@ -108,6 +208,46 @@ export interface GitHubRepositoryAccess {
108
208
  baseRef: string;
109
209
  headRef: string;
110
210
  }): Promise<PullRequestResult | null>;
211
+ /**
212
+ * Whether the root run's marked open pull request is still a draft: true or
213
+ * false, or null when it is not open (merged, closed, or gone). Optional:
214
+ * without it a caller treats the draft state as unknown.
215
+ */
216
+ openPullRequestDraft?(input: {
217
+ runId: string;
218
+ repository: string;
219
+ baseRef: string;
220
+ headRef: string;
221
+ }): Promise<boolean | null>;
222
+ /**
223
+ * The current base branch of the root run's marked open pull request (it
224
+ * changes when someone retargets the PR), or null when the PR is not open or
225
+ * its head or base is in another repository (a fork). Optional: without it,
226
+ * continuations are not brought up to date with their target branch.
227
+ */
228
+ openPullRequestBase?(input: {
229
+ runId: string;
230
+ repository: string;
231
+ baseRef: string;
232
+ headRef: string;
233
+ }): Promise<{
234
+ number: number;
235
+ baseRef: string;
236
+ } | null>;
237
+ /**
238
+ * Rewrites the root run's open pull request description for a fix round,
239
+ * or, when a person edited it since wardby last wrote it, upserts a comment
240
+ * carrying the proposed description instead. Never throws. Optional:
241
+ * without it, descriptions are not updated after the first run.
242
+ */
243
+ updatePullRequestDescription?(input: UpdateDescriptionInput): Promise<DescriptionUpdateResult>;
244
+ /**
245
+ * Before a fix round's push: when wardby can't write the description
246
+ * directly, writes (or updates) the fallback comment stamped with the head
247
+ * about to be pushed, so it already exists when the push starts a review.
248
+ * True when it wrote one. Never throws. Optional.
249
+ */
250
+ proposeDescriptionComment?(input: UpdateDescriptionInput): Promise<boolean>;
111
251
  /** Creates the status comment if none exists yet for this run, else updates it. */
112
252
  upsertContinuationStatusComment(input: ContinuationStatusCommentInput): Promise<void>;
113
253
  /** Updates the status comment if one already exists for this run; a no-op otherwise (never creates). */
@@ -132,9 +272,9 @@ export declare function isSafeGitHubInstallationToken(value: unknown): value is
132
272
  * executor validates with the shared one.
133
273
  */
134
274
  export declare const PR_ISSUE_KEY: RegExp;
275
+ /** Same shape as GITHUB_ISSUE_KEY (issue-tracker/types.ts), duplicated likewise. Only the Related section shows one. */
276
+ export declare const PR_GITHUB_ISSUE_KEY: RegExp;
135
277
  export declare function pullRequestTitle(input: PullRequestInput): string;
136
- export declare const RELATED_SECTION_START = "<!-- wardby-related:start -->";
137
- export declare const RELATED_SECTION_END = "<!-- wardby-related:end -->";
138
278
  /** At most this many pull requests are listed; the rest are counted. */
139
279
  export declare const MAX_RELATED_PULL_REQUESTS = 20;
140
280
  /** GitHub rejects a pull request body longer than this. */
@@ -204,8 +344,15 @@ export declare function isLockfilePath(path: string): boolean;
204
344
  */
205
345
  /** Rendered verbatim in refusalWarning's first line, and used to locate it in tests. */
206
346
  export declare const DEPENDENCY_INSTALL_INCOMPLETE = "Dependency install incomplete.";
207
- /** The hidden run marker stays first and unconditional: createOrFindDraftPullRequest's idempotent lookup depends on it. */
208
- export declare function pullRequestBody(input: PullRequestInput): string;
347
+ /**
348
+ * The pull request body, within GitHub's MAX_PULL_REQUEST_BODY_CHARS. When it
349
+ * would be longer, the informational Packages section goes first; if that is
350
+ * not enough, the agent's summary is truncated to fit (fitSummary keeps its
351
+ * closing-keyword line). The other sections are bounded and stay whole.
352
+ */
353
+ export declare function pullRequestBody(input: PullRequestInput, options?: {
354
+ omitPackages?: boolean;
355
+ }): string;
209
356
  export declare class GitHubAppClient implements GitHubRepositoryAccess {
210
357
  private readonly config;
211
358
  private readonly fetchImpl;
@@ -276,6 +423,59 @@ export declare class GitHubAppClient implements GitHubRepositoryAccess {
276
423
  baseRef: string;
277
424
  headRef: string;
278
425
  }): Promise<PullRequestResult | null>;
426
+ /** See GitHubRepositoryAccess.openPullRequestDraft: GitHub's own `draft` flag on the marked open PR. */
427
+ openPullRequestDraft(input: {
428
+ runId: string;
429
+ repository: string;
430
+ baseRef: string;
431
+ headRef: string;
432
+ }): Promise<boolean | null>;
433
+ /** See GitHubRepositoryAccess.openPullRequestBase: the marked open PR's current base, same repository only. */
434
+ openPullRequestBase(input: {
435
+ runId: string;
436
+ repository: string;
437
+ baseRef: string;
438
+ headRef: string;
439
+ }): Promise<{
440
+ number: number;
441
+ baseRef: string;
442
+ } | null>;
443
+ /**
444
+ * A fix round's description update (see GitHubRepositoryAccess). One
445
+ * repository token; every failure becomes `skipped:error`.
446
+ */
447
+ updatePullRequestDescription(input: UpdateDescriptionInput): Promise<DescriptionUpdateResult>;
448
+ /** See GitHubRepositoryAccess.proposeDescriptionComment. */
449
+ proposeDescriptionComment(input: UpdateDescriptionInput): Promise<boolean>;
450
+ /** The validated repository and refs; throws unless this is wardby's own pull request branch. */
451
+ private descriptionTarget;
452
+ /**
453
+ * The open pull request, the description this run proposes, and whether
454
+ * wardby may write it directly: it is unedited (recorded or rebuilt hash),
455
+ * or a person copied wardby's latest proposal in (taken back). Null when
456
+ * the pull request isn't open. `comments` is set when it was read.
457
+ */
458
+ private descriptionState;
459
+ /**
460
+ * The rebuilt description: the generated sections from this run with
461
+ * `summary` as the agent text, the latest-run marker last, and the current
462
+ * body's Related block re-inserted verbatim. `proposed` drops the Packages
463
+ * section when `full` exceeds GitHub's limit, and is undefined when it still
464
+ * would.
465
+ */
466
+ private proposedDescription;
467
+ /**
468
+ * Creates the pull request's one description comment, or edits the newest
469
+ * one this App wrote (unchanged text is not re-sent); older duplicates are
470
+ * rewritten to point at it. A comment anyone else wrote is never edited.
471
+ */
472
+ private upsertDescriptionComment;
473
+ /** Once a run applied its description, a pending proposal in the description comment is marked applied. */
474
+ private markDescriptionCommentApplied;
475
+ /** Rewrites duplicate description comments to a pointer at the one in use. */
476
+ private supersedeDescriptionComments;
477
+ /** The description comments this App wrote (see findDescriptionComments; the reviewer reads them the same way). */
478
+ private findDescriptionComments;
279
479
  private appJwt;
280
480
  private mintRepositoryToken;
281
481
  /**
@@ -289,8 +489,17 @@ export declare class GitHubAppClient implements GitHubRepositoryAccess {
289
489
  private mintScopedToken;
290
490
  private revokeToken;
291
491
  private findPullRequest;
492
+ /**
493
+ * findPullRequest, plus the matched pull request's raw body and payload. Not
494
+ * filtered by base: a person may retarget the PR, and the head branch plus the
495
+ * run marker already identify it. When several open PRs match, the one on
496
+ * `baseRef` wins.
497
+ */
498
+ private findMarkedPullRequest;
292
499
  private parsePullRequest;
293
500
  private findStatusComment;
501
+ /** The first comment on the pull request (first page) whose body `matches`. */
502
+ private findMarkedComment;
294
503
  private findCheckRun;
295
504
  /** Public for the code-review host, which issues its own REST calls with tokens minted here. */
296
505
  requestJson(path: string, bearer: string, init?: RequestInit, expectedStatuses?: number[]): Promise<Response>;
@@ -300,4 +509,3 @@ export declare class GitHubAppClient implements GitHubRepositoryAccess {
300
509
  */
301
510
  graphql(bearer: string, query: string, variables: Record<string, unknown>): Promise<Record<string, unknown>>;
302
511
  }
303
- export {};