@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,5 +1,6 @@
1
1
  import { type CatalogEntry } from "../llm/catalog-types.js";
2
2
  import type { ModelPricing } from "../llm/pricing-core.js";
3
+ import type { ProxyRefusalDetails } from "../../core/budget-events.js";
3
4
  export type ProxySessionStatus = "active" | "cancelled";
4
5
  export type ProxyRequestStatus = "reserved" | "completed" | "released" | "uncertain";
5
6
  export type ProxyProtocol = "openai-responses" | "anthropic-messages";
@@ -39,6 +40,8 @@ export interface ProxySession {
39
40
  registryTokenHash?: string | null;
40
41
  /** When the ledger first refused a request of this session for budget. */
41
42
  budgetExhaustedAt?: Date | null;
43
+ /** The numbers behind the first budget refusal, set with budgetExhaustedAt. */
44
+ budgetRefusal?: ProxyRefusalRecord | null;
42
45
  /** The code of the first upstream failure the proxy relayed for this session. */
43
46
  upstreamFailure?: string | null;
44
47
  /** The run's catalog entry, copied at session creation; null on sessions from before the catalog. */
@@ -56,6 +59,24 @@ export interface ProxyRequest {
56
59
  pricing: PricingSnapshot;
57
60
  usage?: ProxyUsage;
58
61
  upstreamStatus?: number;
62
+ /** An uncertain request settled at an estimate: actualCostUsd and usage are estimated, not reported. */
63
+ costEstimated?: boolean;
64
+ requestBytes?: number;
65
+ ceilingUsd?: number;
66
+ reservationBasis?: ReservationBasis;
67
+ conversationKey?: string | null;
68
+ }
69
+ export type ReservationBasis = "cached" | "full";
70
+ /** The latest finished (completed or uncertain) request of a conversation, for the next request's hold. */
71
+ export interface PreviousReply {
72
+ model: string;
73
+ status: "completed" | "uncertain";
74
+ costEstimated: boolean;
75
+ usage?: ProxyUsage;
76
+ /** UTF-8 bytes of the request body the proxy forwarded; null on rows from before cache-aware holds. */
77
+ requestBytes: number | null;
78
+ /** When the previous request was reserved: the prompt cache was last refreshed around then. */
79
+ startedAt: Date;
59
80
  }
60
81
  export interface CreateProxySessionInput {
61
82
  id: string;
@@ -78,7 +99,13 @@ export interface ReserveProxyRequestInput {
78
99
  reservationUsd: number;
79
100
  pricing: PricingSnapshot;
80
101
  now: Date;
102
+ requestBytes?: number;
103
+ ceilingUsd?: number;
104
+ reservationBasis?: ReservationBasis;
105
+ conversationKey?: string | null;
81
106
  }
107
+ /** What the proxy knows about a refusal: the numbers only; names and the binding limit are the control plane's. */
108
+ export type ProxyRefusalRecord = Omit<ProxyRefusalDetails, "agentBudgetUsd" | "groupName" | "leadAgentName">;
82
109
  export type ReserveProxyRequestResult = {
83
110
  outcome: "reserved";
84
111
  request: ProxyRequest;
@@ -87,6 +114,7 @@ export type ReserveProxyRequestResult = {
87
114
  request: ProxyRequest;
88
115
  } | {
89
116
  outcome: "budget_exhausted";
117
+ details: Omit<ProxyRefusalRecord, "source">;
90
118
  } | {
91
119
  outcome: "inactive";
92
120
  reason: "cancelled" | "expired";
@@ -97,10 +125,28 @@ export interface ProxyLedger {
97
125
  reserve(input: ReserveProxyRequestInput): Promise<ReserveProxyRequestResult>;
98
126
  complete(requestId: string, usage: ProxyUsage, actualCostUsd: number, upstreamStatus: number): Promise<ProxyRequest>;
99
127
  release(requestId: string, upstreamStatus: number): Promise<void>;
100
- markUncertain(requestId: string, upstreamStatus?: number): Promise<void>;
128
+ /**
129
+ * Marks a reserved request uncertain. With an estimate it is also settled at that cost (and
130
+ * counts at it, not at its hold); without one it keeps its full hold.
131
+ */
132
+ markUncertain(requestId: string, upstreamStatus?: number, estimate?: {
133
+ usage: ProxyUsage;
134
+ costUsd: number;
135
+ }): Promise<void>;
136
+ /**
137
+ * What an interrupted reply's output can be estimated from: the median output tokens of the
138
+ * session's completed replies for this model. Its input comes from previousReply.
139
+ */
140
+ settlementHints(sessionId: string, model: string): Promise<{
141
+ medianOutputTokens?: number;
142
+ }>;
143
+ /** The latest completed or uncertain request of a conversation, or null when it has none. */
144
+ previousReply(sessionId: string, conversationKey: string): Promise<PreviousReply | null>;
101
145
  cancelSession(sessionId: string): Promise<void>;
102
146
  /** Whether a request of this session was ever refused for budget. */
103
147
  budgetExhausted(sessionId: string): Promise<boolean>;
148
+ /** The numbers behind the session's first budget refusal, if any. */
149
+ budgetRefusal(sessionId: string): Promise<ProxyRefusalRecord | null>;
104
150
  /** Records an upstream failure code on the session; only the first one is kept. */
105
151
  recordUpstreamFailure(sessionId: string, code: string): Promise<void>;
106
152
  /** The first upstream failure code relayed for this session, if any. */
@@ -115,7 +161,25 @@ export interface ProxyAuditEvent {
115
161
  status?: number;
116
162
  reason?: string;
117
163
  reservationUsd?: number;
164
+ /** For request.reserved and a budget refusal: the worst-case hold and how the hold was priced. */
165
+ ceilingUsd?: number;
166
+ reservationBasis?: ReservationBasis;
167
+ /** Why the hold fell back to the ceiling (basis "full"). */
168
+ holdFallback?: string;
169
+ /** Basis "cached": tokens priced at the cache-read rate, and at the input + cache-write rates. */
170
+ holdCachedTokens?: number;
171
+ holdUncachedTokens?: number;
172
+ /** For response.completed: how much the reply cost above its hold (reason "reservation_exceeded"). */
173
+ overshootUsd?: number;
174
+ /** For a budget refusal: the numbers behind it. */
175
+ budgetUsd?: number;
176
+ spentUsd?: number;
177
+ heldReservedUsd?: number;
178
+ heldUncertainUsd?: number;
179
+ turn?: number;
118
180
  costUsd?: number;
181
+ /** For request.uncertain: the estimated cost it was settled at, when one could be made. */
182
+ estimatedCostUsd?: number;
119
183
  inputTokens?: number;
120
184
  outputTokens?: number;
121
185
  cachedInputTokens?: number;
@@ -15,6 +15,11 @@ export interface DatastoreSetOptions {
15
15
  * for values that actually carry PII.
16
16
  */
17
17
  pii?: boolean;
18
+ /**
19
+ * Shared stores only: the agent doing the write, so the secret guard can
20
+ * check the value against that agent's attached secrets. Never persisted.
21
+ */
22
+ writerAgentId?: string;
18
23
  }
19
24
  export interface Datastore {
20
25
  get(agentId: string, key: string): Promise<DatastoreValue | undefined>;
@@ -67,6 +67,21 @@ export declare class RunOwnershipLostError extends Error {
67
67
  discardedUsage?: Readonly<Record<string, number>>;
68
68
  });
69
69
  }
70
+ /** Why a run ends lost when its replay meets a step its record does not have (StepReplayMismatchError). */
71
+ export declare const STEPS_CHANGED_REASON = "Could not continue across versions: the run's steps changed in the new version.";
72
+ /**
73
+ * Part of the StepRunner contract: a durable step runner may throw this when a
74
+ * replayed run reaches a step whose name differs from the one recorded at that
75
+ * position (the run was recorded by a release whose steps differ). The run
76
+ * cannot continue from its record; engines rethrow it untouched and the
77
+ * runner ends the run lost with STEPS_CHANGED_REASON.
78
+ */
79
+ export declare class StepReplayMismatchError extends Error {
80
+ readonly step: string;
81
+ constructor(step: string, options?: {
82
+ cause?: unknown;
83
+ });
84
+ }
70
85
  /** The no-checkpoint default: run the step body directly. */
71
86
  export declare const runStepInline: StepRunner;
72
87
  /**
@@ -86,8 +101,8 @@ export interface EngineRunContext {
86
101
  agent: EngineAgent;
87
102
  tools: LoadedTool[];
88
103
  providers: Pick<ProviderRegistry, "llm">;
89
- /** Host bridge: validates params (Zod-in-sandbox) then runs the tool body in the WASM sandbox. Never throws — a tool/validation failure is a JSON error result string, fed back to the model as the tool's result. */
90
- runSandboxTool(name: string, argsJson: string): Promise<string>;
104
+ /** Host bridge: validates params (Zod-in-sandbox) then runs the tool body in the WASM sandbox. Never throws — a tool/validation failure is a JSON error result string, fed back to the model as the tool's result. `callId` is the model's id for this tool call; the same on a replay of the turn. */
105
+ runSandboxTool(name: string, argsJson: string, callId?: string): Promise<string>;
91
106
  /**
92
107
  * Consecutive tool calls of one model turn for which this returns true run
93
108
  * at the same time as each other (a lead's delegate_to_* calls, when the
@@ -34,5 +34,22 @@ export class RunOwnershipLostError extends Error {
34
34
  this.discardedUsage = options.discardedUsage;
35
35
  }
36
36
  }
37
+ /** Why a run ends lost when its replay meets a step its record does not have (StepReplayMismatchError). */
38
+ export const STEPS_CHANGED_REASON = "Could not continue across versions: the run's steps changed in the new version.";
39
+ /**
40
+ * Part of the StepRunner contract: a durable step runner may throw this when a
41
+ * replayed run reaches a step whose name differs from the one recorded at that
42
+ * position (the run was recorded by a release whose steps differ). The run
43
+ * cannot continue from its record; engines rethrow it untouched and the
44
+ * runner ends the run lost with STEPS_CHANGED_REASON.
45
+ */
46
+ export class StepReplayMismatchError extends Error {
47
+ step;
48
+ constructor(step, options) {
49
+ super(`step_replay_mismatch: the recorded run has a different step where "${step}" was expected.`, options?.cause === undefined ? undefined : { cause: options.cause });
50
+ this.name = "StepReplayMismatchError";
51
+ this.step = step;
52
+ }
53
+ }
37
54
  /** The no-checkpoint default: run the step body directly. */
38
55
  export const runStepInline = (_name, fn) => fn();
@@ -3,13 +3,18 @@ import { type ProviderConfig } from "../../config/providers.js";
3
3
  import { type Power } from "../../core/power.js";
4
4
  import { type ReReviewDeps } from "../../core/review-fix.js";
5
5
  import type { KubernetesApi } from "../jobs/kubernetes-api.js";
6
+ import { loadAgentSecretValues } from "../../core/secret-guard.js";
6
7
  import type { Executor } from "./types.js";
7
8
  import { type RepoAccessGate } from "../../core/repo-access.js";
8
9
  /**
9
10
  * The coding-run terminal hook: a review-fix round's coding run that made no change re-reviews
10
- * the PR once (core/review-fix.ts). Started in the background so the executor's terminal path
11
- * (and the slot release after it) never waits on the host; idempotent, and never throws.
12
- * `deps` is read only when a run finishes, after composition returned.
11
+ * the PR once (core/review-fix.ts), and the reviews of its pull request that waited for it (a
12
+ * draft's head it may have pushed before recording its result, core/host-events.ts) are
13
+ * released. Started in the background so the executor's terminal path (and the slot release
14
+ * after it) never waits on the host; idempotent (released rows are claimed), and never throws.
15
+ * Started outside the caller's async context: a delegated coding run finishes inside its lead's
16
+ * delegation step, and a review started from there would be refused by DBOS as a workflow
17
+ * started from inside a step. `deps` is read only when a run finishes, after composition returned.
13
18
  */
14
19
  export declare function reReviewOnCodingRunTerminal(deps: () => ReReviewDeps): (runId: string) => void;
15
20
  export interface ConfiguredExecutorOptions {
@@ -32,6 +37,8 @@ export interface ConfiguredExecutorOptions {
32
37
  * launcher (wakes the coding proxy before a run); absent: `DISABLED_POWER`.
33
38
  */
34
39
  power?: Power;
40
+ /** Decrypts agent secrets for transcript redaction (session resume). Absent: transcripts are never stored. */
41
+ secretCipher?: Parameters<typeof loadAgentSecretValues>[1];
35
42
  }
36
43
  /**
37
44
  * Builds container execution only when Docker or Kubernetes is explicitly
@@ -1,11 +1,15 @@
1
1
  import { tmpdir } from "node:os";
2
2
  import { resolve } from "node:path";
3
- import { loadCodingConcurrencyConfig, loadContainerExecutorConfig, loadGitHubVcsConfig, loadKubernetesJobConfig, loadProviderConfig, } from "../../config/providers.js";
3
+ import { loadBlobStoreConfig, loadCodingConcurrencyConfig, loadContainerExecutorConfig, loadGitHubVcsConfig, loadKubernetesJobConfig, loadProviderConfig, } from "../../config/providers.js";
4
+ import { summarizePackageAudit } from "../../coding/registry/audit-mode.js";
4
5
  import { summarizeRegistryFetches } from "../../coding/registry/report.js";
6
+ import { linkedIssueReader } from "./linked-issue-reader.js";
5
7
  import { drainCodingQueue } from "../../core/coding-queue.js";
6
8
  import { prismaServiceStateReporter } from "../../core/coding-service-status.js";
7
9
  import { logger } from "../../core/logger.js";
10
+ import { outsideRunContext } from "../../core/async-context.js";
8
11
  import { DISABLED_POWER } from "../../core/power.js";
12
+ import { startDeferredForRequest } from "../../core/host-events.js";
9
13
  import { reReviewAfterNoChangeFix } from "../../core/review-fix.js";
10
14
  import { EnvironmentCredentialResolver } from "../coding-proxy/environment-credentials.js";
11
15
  import { CodingProxy } from "../coding-proxy/proxy.js";
@@ -18,6 +22,9 @@ import { preflightCanaryImage, runKubernetesPreflight } from "../jobs/kubernetes
18
22
  import { CODING_WORKER_IMAGES_REQUIRED } from "../../coding/docker-preflight.js";
19
23
  import { KubernetesJobLauncher } from "../jobs/kubernetes.js";
20
24
  import { buildVcsProvider } from "../vcs/index.js";
25
+ import { RunTranscriptRecorder, loadTranscriptMaxBytes, loadTranscriptRetentionDays, } from "../../coding/transcript/recorder.js";
26
+ import { loadAgentSecretValues } from "../../core/secret-guard.js";
27
+ import { createBlobStore } from "../storage/index.js";
21
28
  import { ContainerExecutor, PrismaContainerExecutionStore, RunCapabilityVault } from "./container.js";
22
29
  import { PrismaExecutionKindResolver, RoutingExecutor } from "./routing.js";
23
30
  import { createRepoAccessGate } from "../../core/repo-access.js";
@@ -26,16 +33,24 @@ import { buildReviewHosts } from "../review-host/index.js";
26
33
  const compositionLog = logger.child({ module: "executor-composition" });
27
34
  /**
28
35
  * The coding-run terminal hook: a review-fix round's coding run that made no change re-reviews
29
- * the PR once (core/review-fix.ts). Started in the background so the executor's terminal path
30
- * (and the slot release after it) never waits on the host; idempotent, and never throws.
31
- * `deps` is read only when a run finishes, after composition returned.
36
+ * the PR once (core/review-fix.ts), and the reviews of its pull request that waited for it (a
37
+ * draft's head it may have pushed before recording its result, core/host-events.ts) are
38
+ * released. Started in the background so the executor's terminal path (and the slot release
39
+ * after it) never waits on the host; idempotent (released rows are claimed), and never throws.
40
+ * Started outside the caller's async context: a delegated coding run finishes inside its lead's
41
+ * delegation step, and a review started from there would be refused by DBOS as a workflow
42
+ * started from inside a step. `deps` is read only when a run finishes, after composition returned.
32
43
  */
33
44
  export function reReviewOnCodingRunTerminal(deps) {
34
- return (runId) => {
45
+ return (runId) => outsideRunContext(() => {
35
46
  void Promise.resolve()
36
47
  .then(() => reReviewAfterNoChangeFix(runId, deps()))
37
48
  .catch((err) => compositionLog.warn({ err, runId }, "no-change re-review hook failed"));
38
- };
49
+ // Never throws (logs its own failures).
50
+ void Promise.resolve()
51
+ .then(() => startDeferredForRequest(deps(), runId))
52
+ .catch((err) => compositionLog.warn({ err, runId }, "could not release the reviews waiting for this run"));
53
+ });
39
54
  }
40
55
  /**
41
56
  * Builds container execution only when Docker or Kubernetes is explicitly
@@ -141,7 +156,22 @@ export function buildConfiguredExecutor(options) {
141
156
  // The release and terminal hooks need the composed RoutingExecutor, which only exists
142
157
  // after the ContainerExecutor it wraps is built. The closure reads
143
158
  // `composed` only when a run finishes, which is after this function returns.
159
+ const blobStoreConfig = loadBlobStoreConfig(env);
160
+ const cipher = options.secretCipher;
161
+ const transcripts = new RunTranscriptRecorder({
162
+ db: options.db,
163
+ blobs: blobStoreConfig && cipher ? createBlobStore(blobStoreConfig) : undefined,
164
+ secretValues: async (agentId) => {
165
+ if (!cipher)
166
+ throw new Error("transcript_secrets_unavailable");
167
+ const named = await loadAgentSecretValues(options.db, cipher, agentId);
168
+ return named.flatMap((entry) => entry.values);
169
+ },
170
+ retentionDays: loadTranscriptRetentionDays(env),
171
+ maxBytes: loadTranscriptMaxBytes(env),
172
+ });
144
173
  const coding = new ContainerExecutor({
174
+ transcripts,
145
175
  store: new PrismaContainerExecutionStore(options.db, { maxConcurrent: concurrency.maxConcurrent, issueTrackers }),
146
176
  jobs,
147
177
  vcs,
@@ -158,10 +188,20 @@ export function buildConfiguredExecutor(options) {
158
188
  limits: { cpus: config.cpus, memoryMb: config.memoryMb, pids: config.pids, diskMb: config.diskMb },
159
189
  maxDiskMb: config.maxDiskMb,
160
190
  repoAccess,
191
+ readLinkedIssue: linkedIssueReader({ hosts: reviewHosts, issueTrackers }),
161
192
  issueUrl: (provider, key) => (provider === "jira" ? issueTrackers.jira?.issueUrl(key) : undefined),
162
193
  registryReport: async (runId) => {
163
194
  const rows = await options.db.registryFetch.findMany({ where: { runId }, orderBy: { createdAt: "asc" } });
164
- return summarizeRegistryFetches(rows);
195
+ const coding = await options.db.codingRun.findUnique({ where: { runId }, select: { packageAuditMode: true } });
196
+ const packageAuditMode = coding?.packageAuditMode ?? null;
197
+ if (!packageAuditMode)
198
+ return summarizeRegistryFetches(rows);
199
+ const audits = await options.db.registryAuditRecord.findMany({ where: { runId }, orderBy: { createdAt: "asc" } });
200
+ return {
201
+ ...summarizeRegistryFetches(rows),
202
+ packageAuditMode,
203
+ packageAudit: summarizePackageAudit(audits).entries,
204
+ };
165
205
  },
166
206
  onCodingRunTerminal: reReviewOnCodingRunTerminal(() => ({
167
207
  db: options.db,