@wardby/cli 0.5.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. package/.env.example +33 -0
  2. package/README.md +25 -14
  3. package/deploy/local/docker-compose.quickstart-coding.yml +13 -0
  4. package/dist/claude-coding-worker/context.d.ts +22 -0
  5. package/dist/claude-coding-worker/context.js +92 -0
  6. package/dist/claude-coding-worker/driver.d.ts +27 -3
  7. package/dist/claude-coding-worker/driver.js +161 -20
  8. package/dist/claude-coding-worker/main.js +34 -6
  9. package/dist/claude-coding-worker/sdk.js +25 -5
  10. package/dist/claude-coding-worker/tool-socket.d.ts +27 -0
  11. package/dist/claude-coding-worker/tool-socket.js +111 -0
  12. package/dist/claude-coding-worker/transcript.d.ts +18 -0
  13. package/dist/claude-coding-worker/transcript.js +77 -0
  14. package/dist/cli-help.d.ts +1 -1
  15. package/dist/cli-help.js +6 -2
  16. package/dist/cli-native-mode.d.ts +9 -0
  17. package/dist/cli-native-mode.js +20 -0
  18. package/dist/cli.d.ts +3 -1
  19. package/dist/cli.js +161 -11
  20. package/dist/coding/claude-context.d.ts +45 -0
  21. package/dist/coding/claude-context.js +434 -0
  22. package/dist/coding/continuation-wording.d.ts +35 -0
  23. package/dist/coding/continuation-wording.js +73 -0
  24. package/dist/coding/linked-issue-note.d.ts +23 -0
  25. package/dist/coding/linked-issue-note.js +47 -0
  26. package/dist/coding/merge-wording.d.ts +28 -0
  27. package/dist/coding/merge-wording.js +78 -0
  28. package/dist/coding/pr-description-note.d.ts +9 -0
  29. package/dist/coding/pr-description-note.js +32 -0
  30. package/dist/coding/profile.d.ts +50 -118
  31. package/dist/coding/profile.js +51 -4
  32. package/dist/coding/protected-path-wording.d.ts +8 -0
  33. package/dist/coding/protected-path-wording.js +1 -1
  34. package/dist/coding/protocol.d.ts +292 -270
  35. package/dist/coding/protocol.js +322 -15
  36. package/dist/coding/redact.d.ts +3 -0
  37. package/dist/coding/redact.js +12 -0
  38. package/dist/coding/registry/allowlist.d.ts +12 -0
  39. package/dist/coding/registry/allowlist.js +14 -1
  40. package/dist/coding/registry/audit-mode.d.ts +153 -0
  41. package/dist/coding/registry/audit-mode.js +304 -0
  42. package/dist/coding/registry/lockfile-shared.d.ts +36 -0
  43. package/dist/coding/registry/lockfile-shared.js +128 -0
  44. package/dist/coding/registry/lockfiles.js +1 -1
  45. package/dist/coding/registry/npm-lockfile-formats.d.ts +11 -0
  46. package/dist/coding/registry/npm-lockfile-formats.js +41 -0
  47. package/dist/coding/registry/npm-lockfile.d.ts +8 -4
  48. package/dist/coding/registry/npm-lockfile.js +4 -6
  49. package/dist/coding/registry/npm.js +78 -8
  50. package/dist/coding/registry/pnpm-lockfile.d.ts +17 -0
  51. package/dist/coding/registry/pnpm-lockfile.js +189 -0
  52. package/dist/coding/registry/pypi-plan.d.ts +50 -0
  53. package/dist/coding/registry/pypi-plan.js +406 -0
  54. package/dist/coding/registry/pypi-requirements.d.ts +58 -0
  55. package/dist/coding/registry/pypi-requirements.js +155 -0
  56. package/dist/coding/registry/pypi.d.ts +3 -27
  57. package/dist/coding/registry/pypi.js +40 -154
  58. package/dist/coding/registry/refusal-hints.d.ts +20 -0
  59. package/dist/coding/registry/refusal-hints.js +61 -0
  60. package/dist/coding/registry/refusal-wording.d.ts +11 -0
  61. package/dist/coding/registry/refusal-wording.js +56 -0
  62. package/dist/coding/registry/report.d.ts +70 -8
  63. package/dist/coding/registry/report.js +112 -5
  64. package/dist/coding/registry/types.d.ts +58 -8
  65. package/dist/coding/registry/yarn-lockfile.d.ts +30 -0
  66. package/dist/coding/registry/yarn-lockfile.js +367 -0
  67. package/dist/coding/services/catalog.d.ts +37 -351
  68. package/dist/coding/transcript/claude-code.d.ts +13 -0
  69. package/dist/coding/transcript/claude-code.js +273 -0
  70. package/dist/coding/transcript/download-protocol.d.ts +30 -0
  71. package/dist/coding/transcript/download-protocol.js +18 -0
  72. package/dist/coding/transcript/format.d.ts +20 -0
  73. package/dist/coding/transcript/format.js +32 -0
  74. package/dist/coding/transcript/recorder.d.ts +51 -0
  75. package/dist/coding/transcript/recorder.js +225 -0
  76. package/dist/coding/transcript/resume/checkout.d.ts +31 -0
  77. package/dist/coding/transcript/resume/checkout.js +203 -0
  78. package/dist/coding/transcript/resume/command.d.ts +17 -0
  79. package/dist/coding/transcript/resume/command.js +176 -0
  80. package/dist/coding/transcript/resume/download.d.ts +20 -0
  81. package/dist/coding/transcript/resume/download.js +153 -0
  82. package/dist/coding/transcript/resume/launch.d.ts +38 -0
  83. package/dist/coding/transcript/resume/launch.js +128 -0
  84. package/dist/coding/transcript/resume/session-file.d.ts +13 -0
  85. package/dist/coding/transcript/resume/session-file.js +79 -0
  86. package/dist/coding/transcript/resume/stand-in.d.ts +11 -0
  87. package/dist/coding/transcript/resume/stand-in.js +49 -0
  88. package/dist/coding-worker/artifact.d.ts +16 -3
  89. package/dist/coding-worker/artifact.js +5 -3
  90. package/dist/coding-worker/debug-trace.d.ts +6 -5
  91. package/dist/coding-worker/debug-trace.js +13 -18
  92. package/dist/coding-worker/dependency-cache.d.mts +229 -0
  93. package/dist/coding-worker/dependency-cache.mjs +2123 -0
  94. package/dist/coding-worker/driver.d.ts +4 -3
  95. package/dist/coding-worker/driver.js +118 -38
  96. package/dist/coding-worker/errors.d.ts +1 -0
  97. package/dist/coding-worker/errors.js +32 -0
  98. package/dist/coding-worker/sdk.d.ts +6 -0
  99. package/dist/coding-worker/sdk.js +1 -0
  100. package/dist/coding-worker/skills.d.ts +23 -0
  101. package/dist/coding-worker/skills.js +117 -0
  102. package/dist/coding-worker/task-note.d.ts +11 -0
  103. package/dist/coding-worker/task-note.js +13 -0
  104. package/dist/coding-worker/types.d.ts +13 -0
  105. package/dist/config/dependency-cache.d.ts +23 -0
  106. package/dist/config/dependency-cache.js +32 -0
  107. package/dist/config/github-allowed-accounts.d.ts +15 -0
  108. package/dist/config/github-allowed-accounts.js +36 -0
  109. package/dist/config/low-power.d.ts +12 -0
  110. package/dist/config/low-power.js +18 -0
  111. package/dist/config/mobile.d.ts +12 -0
  112. package/dist/config/mobile.js +18 -0
  113. package/dist/config/providers.d.ts +65 -3
  114. package/dist/config/providers.js +147 -11
  115. package/dist/config/test-simulators.d.ts +82 -0
  116. package/dist/config/test-simulators.js +305 -0
  117. package/dist/core/async-context.d.ts +2 -0
  118. package/dist/core/async-context.js +12 -0
  119. package/dist/core/budget-events.d.ts +108 -0
  120. package/dist/core/budget-events.js +346 -0
  121. package/dist/core/budget-groups.d.ts +50 -1
  122. package/dist/core/budget-groups.js +236 -27
  123. package/dist/core/budget-stopped-head.d.ts +46 -0
  124. package/dist/core/budget-stopped-head.js +81 -0
  125. package/dist/core/budget-topup.d.ts +51 -0
  126. package/dist/core/budget-topup.js +156 -0
  127. package/dist/core/budget-wording.d.ts +16 -2
  128. package/dist/core/budget-wording.js +40 -2
  129. package/dist/core/coding-queue.d.ts +2 -1
  130. package/dist/core/coding-queue.js +7 -0
  131. package/dist/core/cron.d.ts +19 -1
  132. package/dist/core/cron.js +17 -0
  133. package/dist/core/datastores.js +1 -1
  134. package/dist/core/db.d.ts +16 -6
  135. package/dist/core/db.js +12 -10
  136. package/dist/core/deferred-coding.d.ts +14 -0
  137. package/dist/core/deferred-coding.js +62 -0
  138. package/dist/core/delegation-child.d.ts +25 -0
  139. package/dist/core/delegation-child.js +37 -0
  140. package/dist/core/dispatch.d.ts +53 -0
  141. package/dist/core/dispatch.js +167 -57
  142. package/dist/core/engine-native.js +10 -6
  143. package/dist/core/error-code.d.ts +38 -0
  144. package/dist/core/error-code.js +168 -0
  145. package/dist/core/grants.d.ts +19 -6
  146. package/dist/core/grants.js +55 -6
  147. package/dist/core/host-events.d.ts +67 -5
  148. package/dist/core/host-events.js +571 -37
  149. package/dist/core/host-status.d.ts +85 -3
  150. package/dist/core/host-status.js +298 -20
  151. package/dist/core/issue-bridge.d.ts +50 -6
  152. package/dist/core/issue-bridge.js +151 -20
  153. package/dist/core/issue-events.d.ts +1 -1
  154. package/dist/core/issue-events.js +16 -11
  155. package/dist/core/issue-status.d.ts +1 -1
  156. package/dist/core/issue-status.js +68 -29
  157. package/dist/core/logger.d.ts +5 -0
  158. package/dist/core/logger.js +14 -1
  159. package/dist/core/lost-run-children.d.ts +6 -0
  160. package/dist/core/lost-run-children.js +32 -0
  161. package/dist/core/mark-ready.d.ts +34 -0
  162. package/dist/core/mark-ready.js +152 -0
  163. package/dist/core/markdown-code.d.ts +8 -0
  164. package/dist/core/markdown-code.js +107 -0
  165. package/dist/core/memory-tools.js +7 -0
  166. package/dist/core/merge-order-check.d.ts +130 -0
  167. package/dist/core/merge-order-check.js +343 -0
  168. package/dist/core/notification-dispatcher.d.ts +70 -0
  169. package/dist/core/notification-dispatcher.js +368 -0
  170. package/dist/core/notification-templates.d.ts +19 -0
  171. package/dist/core/notification-templates.js +139 -0
  172. package/dist/core/notifications.d.ts +10 -0
  173. package/dist/core/notifications.js +38 -0
  174. package/dist/core/pg-auth.d.ts +22 -0
  175. package/dist/core/pg-auth.js +152 -0
  176. package/dist/core/power-composition.d.ts +16 -0
  177. package/dist/core/power-composition.js +37 -0
  178. package/dist/core/power-idle.d.ts +14 -0
  179. package/dist/core/power-idle.js +30 -0
  180. package/dist/core/power.d.ts +71 -0
  181. package/dist/core/power.js +202 -0
  182. package/dist/core/pull-request-state-sync.js +2 -2
  183. package/dist/core/reconciler.d.ts +8 -5
  184. package/dist/core/reconciler.js +37 -6
  185. package/dist/core/related-pull-requests.d.ts +59 -7
  186. package/dist/core/related-pull-requests.js +140 -25
  187. package/dist/core/reply-parts.d.ts +21 -0
  188. package/dist/core/reply-parts.js +73 -0
  189. package/dist/core/repo-access.d.ts +15 -0
  190. package/dist/core/repo-access.js +66 -0
  191. package/dist/core/review-fix.d.ts +38 -1
  192. package/dist/core/review-fix.js +209 -7
  193. package/dist/core/review-host-checks.d.ts +1 -1
  194. package/dist/core/review-host-tools.d.ts +23 -0
  195. package/dist/core/review-host-tools.js +156 -14
  196. package/dist/core/review-reads.d.ts +55 -0
  197. package/dist/core/review-reads.js +233 -0
  198. package/dist/core/run-status.d.ts +12 -0
  199. package/dist/core/run-status.js +12 -0
  200. package/dist/core/runner.d.ts +384 -5
  201. package/dist/core/runner.js +1244 -372
  202. package/dist/core/schedule-start.d.ts +12 -0
  203. package/dist/core/schedule-start.js +14 -0
  204. package/dist/core/secret-broker-config.d.ts +39 -0
  205. package/dist/core/secret-broker-config.js +112 -0
  206. package/dist/core/secret-guard.d.ts +46 -0
  207. package/dist/core/secret-guard.js +104 -0
  208. package/dist/core/secret-guarded-stores.d.ts +12 -0
  209. package/dist/core/secret-guarded-stores.js +41 -0
  210. package/dist/core/secret-spans.d.ts +50 -0
  211. package/dist/core/secret-spans.js +94 -0
  212. package/dist/core/secrets.d.ts +39 -4
  213. package/dist/core/secrets.js +148 -40
  214. package/dist/core/stop-run.d.ts +46 -0
  215. package/dist/core/stop-run.js +61 -0
  216. package/dist/core/workflow-event-recorder.d.ts +14 -0
  217. package/dist/core/workflow-event-recorder.js +120 -0
  218. package/dist/core/workflow-events.d.ts +94 -0
  219. package/dist/core/workflow-events.js +48 -0
  220. package/dist/core/workflow-run-events.d.ts +18 -0
  221. package/dist/core/workflow-run-events.js +75 -0
  222. package/dist/core/zod-json-schema.d.ts +4 -0
  223. package/dist/core/zod-json-schema.js +39 -0
  224. package/dist/core/zod3-window.d.ts +35 -0
  225. package/dist/core/zod3-window.js +124 -0
  226. package/dist/generated/prisma/browser.d.ts +92 -3
  227. package/dist/generated/prisma/client.d.ts +92 -3
  228. package/dist/generated/prisma/commonInputTypes.d.ts +364 -54
  229. package/dist/generated/prisma/enums.d.ts +37 -0
  230. package/dist/generated/prisma/enums.js +31 -0
  231. package/dist/generated/prisma/internal/class.d.ts +132 -0
  232. package/dist/generated/prisma/internal/class.js +4 -4
  233. package/dist/generated/prisma/internal/prismaNamespace.d.ts +1332 -142
  234. package/dist/generated/prisma/internal/prismaNamespace.js +227 -5
  235. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +234 -0
  236. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +227 -5
  237. package/dist/generated/prisma/models/Agent.d.ts +464 -7
  238. package/dist/generated/prisma/models/AgentRepository.d.ts +42 -1
  239. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +301 -1
  240. package/dist/generated/prisma/models/CodingProxyRequest.d.ts +207 -3
  241. package/dist/generated/prisma/models/CodingProxySession.d.ts +114 -1
  242. package/dist/generated/prisma/models/CodingRun.d.ts +1841 -1
  243. package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
  244. package/dist/generated/prisma/models/DependencySnapshot.d.ts +1668 -0
  245. package/dist/generated/prisma/models/DependencySnapshot.js +1 -0
  246. package/dist/generated/prisma/models/IssuePullRequest.d.ts +6 -2
  247. package/dist/generated/prisma/models/LocalReview.d.ts +40 -1
  248. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1713 -0
  249. package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
  250. package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1551 -0
  251. package/dist/generated/prisma/models/NativeGatewaySession.js +1 -0
  252. package/dist/generated/prisma/models/NativeWarmWorker.d.ts +1296 -0
  253. package/dist/generated/prisma/models/NativeWarmWorker.js +1 -0
  254. package/dist/generated/prisma/models/NotificationChannel.d.ts +1543 -0
  255. package/dist/generated/prisma/models/NotificationChannel.js +1 -0
  256. package/dist/generated/prisma/models/NotificationDelivery.d.ts +1502 -0
  257. package/dist/generated/prisma/models/NotificationDelivery.js +1 -0
  258. package/dist/generated/prisma/models/NotificationThread.d.ts +1090 -0
  259. package/dist/generated/prisma/models/NotificationThread.js +1 -0
  260. package/dist/generated/prisma/models/RegistryAllowance.d.ts +41 -1
  261. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +75 -1
  262. package/dist/generated/prisma/models/RegistryAuditRecord.d.ts +1364 -0
  263. package/dist/generated/prisma/models/RegistryAuditRecord.js +1 -0
  264. package/dist/generated/prisma/models/Run.d.ts +1619 -58
  265. package/dist/generated/prisma/models/RunBudgetEvent.d.ts +1211 -0
  266. package/dist/generated/prisma/models/RunBudgetEvent.js +1 -0
  267. package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
  268. package/dist/generated/prisma/models/RunTranscript.d.ts +1339 -0
  269. package/dist/generated/prisma/models/RunTranscript.js +1 -0
  270. package/dist/generated/prisma/models/Secret.d.ts +37 -1
  271. package/dist/generated/prisma/models/SecretBrokerChange.d.ts +1101 -0
  272. package/dist/generated/prisma/models/SecretBrokerChange.js +1 -0
  273. package/dist/generated/prisma/models/WorkflowEvent.d.ts +1422 -0
  274. package/dist/generated/prisma/models/WorkflowEvent.js +1 -0
  275. package/dist/generated/prisma/models.d.ts +12 -0
  276. package/dist/help/build.js +4 -2
  277. package/dist/help/catalog.d.ts +1 -1
  278. package/dist/help/catalog.js +31 -6
  279. package/dist/help-index.json +2584 -146
  280. package/dist/import/create.js +49 -3
  281. package/dist/import/neutral-schema.d.ts +50 -277
  282. package/dist/import/neutral-schema.js +7 -4
  283. package/dist/knowledge/check.d.ts +1 -1
  284. package/dist/knowledge/cli.d.ts +11 -1
  285. package/dist/knowledge/cli.js +37 -4
  286. package/dist/knowledge/concept.d.ts +3 -19
  287. package/dist/knowledge/location.d.ts +31 -0
  288. package/dist/knowledge/location.js +78 -0
  289. package/dist/mcp/auth/access.d.ts +11 -2
  290. package/dist/mcp/auth/access.js +15 -1
  291. package/dist/mcp/auth/ownership.d.ts +7 -7
  292. package/dist/mcp/auth/repo-authorization.js +14 -0
  293. package/dist/mcp/auth/resource-server.d.ts +2 -1
  294. package/dist/mcp/auth/resource-server.js +7 -2
  295. package/dist/mcp/auth/self-hosted/browser.d.ts +1 -1
  296. package/dist/mcp/auth/self-hosted/browser.js +19 -6
  297. package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
  298. package/dist/mcp/auth/self-hosted/session.d.ts +2 -2
  299. package/dist/mcp/context.d.ts +6 -0
  300. package/dist/mcp/host-events/github-ingress.d.ts +25 -1
  301. package/dist/mcp/host-events/github-ingress.js +70 -1
  302. package/dist/mcp/index.d.ts +19 -0
  303. package/dist/mcp/index.js +117 -20
  304. package/dist/mcp/server.d.ts +13 -0
  305. package/dist/mcp/server.js +33 -14
  306. package/dist/mcp/tools/agents.d.ts +4 -0
  307. package/dist/mcp/tools/agents.js +277 -24
  308. package/dist/mcp/tools/datastore.js +17 -8
  309. package/dist/mcp/tools/grants.js +9 -3
  310. package/dist/mcp/tools/memory.js +11 -1
  311. package/dist/mcp/tools/notification-channels.d.ts +2 -0
  312. package/dist/mcp/tools/notification-channels.js +293 -0
  313. package/dist/mcp/tools/packages.d.ts +2 -0
  314. package/dist/mcp/tools/packages.js +195 -0
  315. package/dist/mcp/tools/power.d.ts +2 -0
  316. package/dist/mcp/tools/power.js +77 -0
  317. package/dist/mcp/tools/repositories.js +18 -5
  318. package/dist/mcp/tools/run-access.d.ts +16 -0
  319. package/dist/mcp/tools/run-access.js +25 -0
  320. package/dist/mcp/tools/run-transcript-download.d.ts +30 -0
  321. package/dist/mcp/tools/run-transcript-download.js +129 -0
  322. package/dist/mcp/tools/run-transcript.d.ts +19 -0
  323. package/dist/mcp/tools/run-transcript.js +70 -0
  324. package/dist/mcp/tools/runs.d.ts +0 -6
  325. package/dist/mcp/tools/runs.js +41 -14
  326. package/dist/mcp/tools/scheduling.js +3 -1
  327. package/dist/mcp/tools/secret-broker-compat.d.ts +12 -0
  328. package/dist/mcp/tools/secret-broker-compat.js +23 -0
  329. package/dist/mcp/tools/secret-elicitation-form.d.ts +22 -2
  330. package/dist/mcp/tools/secret-elicitation-form.js +205 -10
  331. package/dist/mcp/tools/secret-elicitation-server.d.ts +6 -0
  332. package/dist/mcp/tools/secret-elicitation-server.js +10 -54
  333. package/dist/mcp/tools/secret-elicitation.d.ts +38 -3
  334. package/dist/mcp/tools/secret-elicitation.js +110 -12
  335. package/dist/mcp/tools/secrets.js +186 -9
  336. package/dist/mcp/tools/stop-run.d.ts +2 -0
  337. package/dist/mcp/tools/stop-run.js +82 -0
  338. package/dist/mcp/tools/subagents.js +2 -2
  339. package/dist/mcp/tools/tools.d.ts +2 -2
  340. package/dist/mcp/tools/tools.js +47 -11
  341. package/dist/mcp/transport/stdio-link-host.d.ts +20 -0
  342. package/dist/mcp/transport/stdio-link-host.js +67 -0
  343. package/dist/mcp/transport/streamable-http.d.ts +13 -0
  344. package/dist/mcp/transport/streamable-http.js +41 -1
  345. package/dist/native-worker/composition.d.ts +23 -0
  346. package/dist/native-worker/composition.js +77 -0
  347. package/dist/native-worker/docker-isolation.d.ts +65 -0
  348. package/dist/native-worker/docker-isolation.js +183 -0
  349. package/dist/native-worker/docker-launcher.d.ts +110 -0
  350. package/dist/native-worker/docker-launcher.js +297 -0
  351. package/dist/native-worker/gateway-server.d.ts +77 -0
  352. package/dist/native-worker/gateway-server.js +412 -0
  353. package/dist/native-worker/gateway.d.ts +70 -0
  354. package/dist/native-worker/gateway.js +263 -0
  355. package/dist/native-worker/http-server.d.ts +24 -0
  356. package/dist/native-worker/http-server.js +113 -0
  357. package/dist/native-worker/http-transport.d.ts +17 -0
  358. package/dist/native-worker/http-transport.js +88 -0
  359. package/dist/native-worker/kubernetes-isolation.d.ts +90 -0
  360. package/dist/native-worker/kubernetes-isolation.js +218 -0
  361. package/dist/native-worker/kubernetes-launcher.d.ts +106 -0
  362. package/dist/native-worker/kubernetes-launcher.js +375 -0
  363. package/dist/native-worker/launch.d.ts +62 -0
  364. package/dist/native-worker/launch.js +49 -0
  365. package/dist/native-worker/ledger.d.ts +125 -0
  366. package/dist/native-worker/ledger.js +245 -0
  367. package/dist/native-worker/loopback.d.ts +12 -0
  368. package/dist/native-worker/loopback.js +44 -0
  369. package/dist/native-worker/main.d.ts +8 -0
  370. package/dist/native-worker/main.js +85 -0
  371. package/dist/native-worker/protocol.d.ts +296 -0
  372. package/dist/native-worker/protocol.js +246 -0
  373. package/dist/native-worker/sandbox-executor.d.ts +83 -0
  374. package/dist/native-worker/sandbox-executor.js +284 -0
  375. package/dist/native-worker/stderr-redaction.d.ts +77 -0
  376. package/dist/native-worker/stderr-redaction.js +237 -0
  377. package/dist/native-worker/stdio.d.ts +29 -0
  378. package/dist/native-worker/stdio.js +189 -0
  379. package/dist/native-worker/warm-delivery.d.ts +16 -0
  380. package/dist/native-worker/warm-delivery.js +33 -0
  381. package/dist/native-worker/warm-pool-ledger.d.ts +39 -0
  382. package/dist/native-worker/warm-pool-ledger.js +73 -0
  383. package/dist/native-worker/warm-pool.d.ts +107 -0
  384. package/dist/native-worker/warm-pool.js +283 -0
  385. package/dist/native-worker/worker.d.ts +17 -0
  386. package/dist/native-worker/worker.js +141 -0
  387. package/dist/observability/metrics.js +6 -1
  388. package/dist/providers/auth/authorization-server.d.ts +3 -0
  389. package/dist/providers/auth/index.js +2 -0
  390. package/dist/providers/auth/self-hosted.d.ts +14 -2
  391. package/dist/providers/auth/self-hosted.js +54 -4
  392. package/dist/providers/chat/fake.d.ts +46 -0
  393. package/dist/providers/chat/fake.js +39 -0
  394. package/dist/providers/chat/index.d.ts +4 -0
  395. package/dist/providers/chat/index.js +8 -0
  396. package/dist/providers/chat/slack.d.ts +37 -0
  397. package/dist/providers/chat/slack.js +105 -0
  398. package/dist/providers/chat/types.d.ts +42 -0
  399. package/dist/providers/chat/types.js +19 -0
  400. package/dist/providers/coding-proxy/dependency-cache/eviction.d.ts +29 -0
  401. package/dist/providers/coding-proxy/dependency-cache/eviction.js +87 -0
  402. package/dist/providers/coding-proxy/dependency-cache/key.d.ts +33 -0
  403. package/dist/providers/coding-proxy/dependency-cache/key.js +86 -0
  404. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.d.ts +18 -0
  405. package/dist/providers/coding-proxy/dependency-cache/model-request-seal.js +40 -0
  406. package/dist/providers/coding-proxy/dependency-cache/prisma-store.d.ts +25 -0
  407. package/dist/providers/coding-proxy/dependency-cache/prisma-store.js +131 -0
  408. package/dist/providers/coding-proxy/dependency-cache/service.d.ts +70 -0
  409. package/dist/providers/coding-proxy/dependency-cache/service.js +409 -0
  410. package/dist/providers/coding-proxy/dependency-cache/store.d.ts +85 -0
  411. package/dist/providers/coding-proxy/dependency-cache/store.js +95 -0
  412. package/dist/providers/coding-proxy/hold.d.ts +32 -0
  413. package/dist/providers/coding-proxy/hold.js +86 -0
  414. package/dist/providers/coding-proxy/interrupted.d.ts +70 -0
  415. package/dist/providers/coding-proxy/interrupted.js +104 -0
  416. package/dist/providers/coding-proxy/memory-ledger.d.ts +15 -2
  417. package/dist/providers/coding-proxy/memory-ledger.js +84 -8
  418. package/dist/providers/coding-proxy/metering.d.ts +16 -0
  419. package/dist/providers/coding-proxy/metering.js +27 -4
  420. package/dist/providers/coding-proxy/prisma-ledger.d.ts +15 -2
  421. package/dist/providers/coding-proxy/prisma-ledger.js +179 -67
  422. package/dist/providers/coding-proxy/proxy.d.ts +14 -1
  423. package/dist/providers/coding-proxy/proxy.js +166 -14
  424. package/dist/providers/coding-proxy/registry/audit.d.ts +53 -10
  425. package/dist/providers/coding-proxy/registry/audit.js +94 -17
  426. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.d.ts +36 -0
  427. package/dist/providers/coding-proxy/registry/lockfile-parse-worker.js +67 -0
  428. package/dist/providers/coding-proxy/registry/lockfile-parse.d.ts +16 -0
  429. package/dist/providers/coding-proxy/registry/lockfile-parse.js +110 -0
  430. package/dist/providers/coding-proxy/registry/plan.d.ts +9 -0
  431. package/dist/providers/coding-proxy/registry/plan.js +201 -48
  432. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +11 -5
  433. package/dist/providers/coding-proxy/registry/prisma-store.js +120 -17
  434. package/dist/providers/coding-proxy/registry/service.d.ts +97 -16
  435. package/dist/providers/coding-proxy/registry/service.js +579 -112
  436. package/dist/providers/coding-proxy/registry/store.d.ts +84 -9
  437. package/dist/providers/coding-proxy/registry/store.js +54 -1
  438. package/dist/providers/coding-proxy/runtime.d.ts +4 -0
  439. package/dist/providers/coding-proxy/runtime.js +78 -16
  440. package/dist/providers/coding-proxy/server.d.ts +6 -1
  441. package/dist/providers/coding-proxy/server.js +45 -1
  442. package/dist/providers/coding-proxy/types.d.ts +65 -1
  443. package/dist/providers/datastore/types.d.ts +5 -0
  444. package/dist/providers/engine/types.d.ts +36 -2
  445. package/dist/providers/engine/types.js +39 -0
  446. package/dist/providers/executor/composition.d.ts +31 -1
  447. package/dist/providers/executor/composition.js +81 -8
  448. package/dist/providers/executor/container.d.ts +385 -9
  449. package/dist/providers/executor/container.js +1234 -99
  450. package/dist/providers/executor/dbos-status.d.ts +31 -0
  451. package/dist/providers/executor/dbos-status.js +64 -0
  452. package/dist/providers/executor/dbos.d.ts +91 -0
  453. package/dist/providers/executor/dbos.js +319 -26
  454. package/dist/providers/executor/deferred.d.ts +44 -0
  455. package/dist/providers/executor/deferred.js +100 -0
  456. package/dist/providers/executor/in-process.d.ts +9 -1
  457. package/dist/providers/executor/in-process.js +14 -4
  458. package/dist/providers/executor/linked-issue-reader.d.ts +16 -0
  459. package/dist/providers/executor/linked-issue-reader.js +30 -0
  460. package/dist/providers/executor/routing.d.ts +39 -10
  461. package/dist/providers/executor/routing.js +77 -32
  462. package/dist/providers/executor/types.d.ts +25 -0
  463. package/dist/providers/index.d.ts +2 -1
  464. package/dist/providers/issue-tracker/types.d.ts +17 -0
  465. package/dist/providers/issue-tracker/types.js +39 -1
  466. package/dist/providers/jobs/claude-tool-setup.d.ts +4 -0
  467. package/dist/providers/jobs/claude-tool-setup.js +5 -2
  468. package/dist/providers/jobs/docker-isolation.d.ts +8 -0
  469. package/dist/providers/jobs/docker-isolation.js +17 -0
  470. package/dist/providers/jobs/docker.d.ts +1 -0
  471. package/dist/providers/jobs/docker.js +29 -4
  472. package/dist/providers/jobs/fake-kubernetes-api.d.ts +23 -2
  473. package/dist/providers/jobs/fake-kubernetes-api.js +45 -1
  474. package/dist/providers/jobs/kubernetes-api.d.ts +25 -1
  475. package/dist/providers/jobs/kubernetes-api.js +17 -0
  476. package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
  477. package/dist/providers/jobs/kubernetes-client.js +61 -3
  478. package/dist/providers/jobs/kubernetes-dry-run-fixture.d.ts +6 -1
  479. package/dist/providers/jobs/kubernetes-dry-run-fixture.js +6 -3
  480. package/dist/providers/jobs/kubernetes-isolation.d.ts +5 -1
  481. package/dist/providers/jobs/kubernetes-isolation.js +23 -1
  482. package/dist/providers/jobs/kubernetes-platform.d.ts +4 -1
  483. package/dist/providers/jobs/kubernetes-platform.js +38 -1
  484. package/dist/providers/jobs/kubernetes-preflight.d.ts +2 -1
  485. package/dist/providers/jobs/kubernetes-preflight.js +4 -2
  486. package/dist/providers/jobs/kubernetes.d.ts +42 -2
  487. package/dist/providers/jobs/kubernetes.js +178 -19
  488. package/dist/providers/jobs/metadata-probes.d.ts +11 -0
  489. package/dist/providers/jobs/metadata-probes.js +13 -0
  490. package/dist/providers/jobs/types.d.ts +42 -0
  491. package/dist/providers/jobs/types.js +13 -1
  492. package/dist/providers/llm/anthropic.js +5 -1
  493. package/dist/providers/llm/bedrock.d.ts +0 -12
  494. package/dist/providers/llm/bedrock.js +4 -0
  495. package/dist/providers/llm/claude-messages.d.ts +3 -1
  496. package/dist/providers/llm/claude-messages.js +4 -1
  497. package/dist/providers/llm/claude-provider.d.ts +2 -2
  498. package/dist/providers/llm/claude-provider.js +2 -2
  499. package/dist/providers/llm/openai.d.ts +2 -2
  500. package/dist/providers/llm/openai.js +6 -2
  501. package/dist/providers/llm/routing.d.ts +2 -2
  502. package/dist/providers/llm/routing.js +2 -2
  503. package/dist/providers/llm/types.d.ts +12 -2
  504. package/dist/providers/review-host/github-events.d.ts +9 -1
  505. package/dist/providers/review-host/github-events.js +34 -12
  506. package/dist/providers/review-host/github.d.ts +39 -2
  507. package/dist/providers/review-host/github.js +274 -29
  508. package/dist/providers/review-host/local.d.ts +8 -4
  509. package/dist/providers/review-host/local.js +49 -31
  510. package/dist/providers/review-host/patch-pages.d.ts +41 -0
  511. package/dist/providers/review-host/patch-pages.js +176 -0
  512. package/dist/providers/review-host/review-format.d.ts +19 -1
  513. package/dist/providers/review-host/review-format.js +38 -7
  514. package/dist/providers/review-host/types.d.ts +157 -2
  515. package/dist/providers/review-host/types.js +8 -0
  516. package/dist/providers/storage/gcs.d.ts +63 -0
  517. package/dist/providers/storage/gcs.js +69 -0
  518. package/dist/providers/storage/index.d.ts +15 -0
  519. package/dist/providers/storage/index.js +14 -0
  520. package/dist/providers/storage/local.d.ts +24 -0
  521. package/dist/providers/storage/local.js +92 -0
  522. package/dist/providers/storage/meter.d.ts +14 -0
  523. package/dist/providers/storage/meter.js +34 -0
  524. package/dist/providers/storage/s3.d.ts +41 -0
  525. package/dist/providers/storage/s3.js +107 -0
  526. package/dist/providers/storage/types.d.ts +37 -3
  527. package/dist/providers/storage/types.js +21 -4
  528. package/dist/providers/vcs/git.d.ts +33 -2
  529. package/dist/providers/vcs/git.js +324 -22
  530. package/dist/providers/vcs/github-remote.d.ts +26 -3
  531. package/dist/providers/vcs/github-remote.js +124 -14
  532. package/dist/providers/vcs/github.d.ts +246 -12
  533. package/dist/providers/vcs/github.js +521 -61
  534. package/dist/providers/vcs/index.js +8 -1
  535. package/dist/providers/vcs/pr-description.d.ts +127 -0
  536. package/dist/providers/vcs/pr-description.js +270 -0
  537. package/dist/providers/vcs/remote.d.ts +33 -1
  538. package/dist/providers/vcs/routing.d.ts +4 -2
  539. package/dist/providers/vcs/routing.js +6 -0
  540. package/dist/providers/vcs/types.d.ts +80 -3
  541. package/dist/quickstart/coding-seed.d.ts +21 -3
  542. package/dist/quickstart/coding-seed.js +283 -3
  543. package/dist/quickstart/images.d.ts +2 -0
  544. package/dist/quickstart/images.js +7 -1
  545. package/dist/quickstart/reviewer-prompt.d.ts +1 -1
  546. package/dist/quickstart/reviewer-prompt.js +6 -6
  547. package/dist/quickstart-images.json +1 -1
  548. package/dist/sandbox/brokered-fetch.d.ts +23 -0
  549. package/dist/sandbox/brokered-fetch.js +37 -0
  550. package/dist/sandbox/generated/zod.bundle.js +62 -1
  551. package/dist/sandbox/generated/zod3.bundle.js +5 -0
  552. package/dist/sandbox/host-functions.d.ts +35 -0
  553. package/dist/sandbox/host-functions.js +150 -91
  554. package/dist/sandbox/prelude.js +7 -1
  555. package/dist/sandbox/run-in-sandbox.d.ts +19 -0
  556. package/dist/sandbox/run-in-sandbox.js +28 -10
  557. package/dist/sandbox/safe-fetch.d.ts +2 -0
  558. package/dist/sandbox/safe-fetch.js +3 -1
  559. package/dist/sandbox/secret-broker-sigv4.d.ts +2 -0
  560. package/dist/sandbox/secret-broker-sigv4.js +49 -0
  561. package/dist/sandbox/secret-broker.d.ts +34 -0
  562. package/dist/sandbox/secret-broker.js +161 -0
  563. package/dist/sandbox/tool-capabilities.d.ts +10 -30
  564. package/dist/sandbox/user-tool.d.ts +14 -0
  565. package/dist/sandbox/user-tool.js +32 -0
  566. package/dist/sandbox/zod-params.d.ts +37 -5
  567. package/dist/sandbox/zod-params.js +181 -26
  568. package/dist/serve.js +25 -0
  569. package/dist/viewer/api-schema.d.ts +372 -2454
  570. package/dist/viewer/api-schema.js +29 -0
  571. package/dist/viewer/build-schemas.js +10 -3
  572. package/dist/viewer/event-bus.d.ts +6 -0
  573. package/dist/viewer/event-bus.js +16 -7
  574. package/dist/viewer/graph.d.ts +5 -2
  575. package/dist/viewer/graph.js +7 -2
  576. package/dist/viewer/http.d.ts +0 -1
  577. package/dist/viewer/http.js +2 -2
  578. package/dist/viewer/infra.js +25 -2
  579. package/dist/viewer/limits.d.ts +4 -0
  580. package/dist/viewer/limits.js +4 -0
  581. package/dist/viewer/openapi.d.ts +15 -0
  582. package/dist/viewer/openapi.js +170 -0
  583. package/dist/wardby-bin.js +10 -0
  584. package/docs/README.md +7 -0
  585. package/docs/agent-recipes.md +114 -27
  586. package/docs/architecture-runtime.md +16 -1
  587. package/docs/code-review-agents.md +689 -45
  588. package/docs/coding-agent-setup.md +602 -12
  589. package/docs/coding-packages.md +1037 -92
  590. package/docs/coding-services.md +30 -13
  591. package/docs/coding-worker-byo-images.md +218 -6
  592. package/docs/coding-worker-isolation.md +173 -44
  593. package/docs/getting-started-gke.md +332 -129
  594. package/docs/getting-started-identity-provider.md +31 -11
  595. package/docs/getting-started.md +14 -4
  596. package/docs/jira-agents.md +22 -9
  597. package/docs/knowledge/blob-not-found-semantics.md +41 -0
  598. package/docs/knowledge/bounded-file-descriptor.md +52 -0
  599. package/docs/knowledge/delegation-admission-slots.md +52 -0
  600. package/docs/knowledge/http-dispatcher-bootstrap.md +61 -0
  601. package/docs/knowledge/import-rename-target.md +52 -0
  602. package/docs/knowledge/index.md +57 -0
  603. package/docs/knowledge/log.md +9 -0
  604. package/docs/knowledge/mcp-cancelled-task-precedence.md +41 -0
  605. package/docs/knowledge/mcp-http-prompt-discovery.md +41 -0
  606. package/docs/knowledge/mcp-schema-module-boundary.md +41 -0
  607. package/docs/knowledge/nullable-tool-uniqueness.md +52 -0
  608. package/docs/knowledge/overview-cli.md +74 -0
  609. package/docs/knowledge/overview-coding-proxy.md +72 -0
  610. package/docs/knowledge/overview-coding.md +72 -0
  611. package/docs/knowledge/overview-config.md +60 -0
  612. package/docs/knowledge/overview-core.md +72 -0
  613. package/docs/knowledge/overview-deploy.md +83 -0
  614. package/docs/knowledge/overview-mcp.md +61 -0
  615. package/docs/knowledge/overview-prisma.md +72 -0
  616. package/docs/knowledge/overview-providers.md +89 -0
  617. package/docs/knowledge/overview-sandbox.md +83 -0
  618. package/docs/knowledge/overview-surfaces.md +83 -0
  619. package/docs/knowledge/private-datastore-shared-boundary.md +54 -0
  620. package/docs/knowledge/proxy-settlement-projections.md +41 -0
  621. package/docs/knowledge/run-pricing-first-writer.md +43 -0
  622. package/docs/knowledge/schedule-claim-transaction.md +41 -0
  623. package/docs/knowledge/secret-entry-replica-contract.md +52 -0
  624. package/docs/knowledge/terminal-run-first-writer.md +41 -0
  625. package/docs/knowledge/transactional-agent-authorization.md +52 -0
  626. package/docs/knowledge/viewer-notify-write-isolation.md +30 -0
  627. package/docs/knowledge/warm-input-publication.md +30 -0
  628. package/docs/knowledge/workspace-staging-failure.md +54 -0
  629. package/docs/knowledge.md +54 -14
  630. package/docs/native-sandbox.md +731 -0
  631. package/docs/observability.md +4 -0
  632. package/docs/release-verification.md +9 -0
  633. package/docs/security-deployment.md +146 -14
  634. package/docs/slack-notifications.md +268 -0
  635. package/docs/tool-secrets.md +284 -0
  636. package/docs/viewer-api.md +46 -5
  637. package/docs/viewer-api.openapi.yml +1404 -0
  638. package/help/admin-viewer.md +29 -3
  639. package/help/agent-recipes.md +27 -0
  640. package/help/architecture-agent.md +11 -6
  641. package/help/brokered-secrets.md +79 -0
  642. package/help/build-claude-code-image.md +131 -0
  643. package/help/build-worker-image.md +6 -7
  644. package/help/builder-agent.md +19 -6
  645. package/help/code-review-agents.md +243 -10
  646. package/help/coding-packages.md +156 -6
  647. package/help/cost-attribution.md +9 -5
  648. package/help/creating-agents.md +14 -1
  649. package/help/dependency-cache.md +143 -0
  650. package/help/deploy-gke.md +23 -9
  651. package/help/deployment-targets.md +25 -14
  652. package/help/errors/budget-exhausted.md +187 -0
  653. package/help/errors/budget-group-exhausted.md +5 -1
  654. package/help/errors/coding-provider-not-configured.md +2 -2
  655. package/help/errors/coding-stream-quota-exceeded.md +33 -0
  656. package/help/errors/coding-workspace-disk-exceeds-limit.md +39 -0
  657. package/help/errors/continuation-closed.md +9 -12
  658. package/help/errors/database-auth-invalid.md +28 -0
  659. package/help/errors/delegation-conflict.md +24 -0
  660. package/help/errors/file-list-truncated.md +45 -0
  661. package/help/errors/full-read-required.md +49 -0
  662. package/help/errors/github-account-not-allowed.md +29 -0
  663. package/help/errors/graph-incomplete.md +43 -0
  664. package/help/errors/graph-limit.md +43 -0
  665. package/help/errors/low-power-disabled.md +29 -0
  666. package/help/errors/low-power-scale-forbidden.md +35 -0
  667. package/help/errors/low-power-wake-timeout.md +30 -0
  668. package/help/errors/merge-conflict.md +49 -0
  669. package/help/errors/mobile-disabled.md +31 -0
  670. package/help/errors/native-sandbox-capacity.md +22 -0
  671. package/help/errors/native-sandbox-deadline-exceeded.md +19 -0
  672. package/help/errors/native-sandbox-docker-failed.md +20 -0
  673. package/help/errors/native-sandbox-gateway-error.md +20 -0
  674. package/help/errors/native-sandbox-gateway-unavailable.md +21 -0
  675. package/help/errors/native-sandbox-image-not-pinned.md +19 -0
  676. package/help/errors/native-sandbox-isolation-mismatch.md +20 -0
  677. package/help/errors/native-sandbox-launch-abandoned.md +21 -0
  678. package/help/errors/native-sandbox-network-unenforced.md +22 -0
  679. package/help/errors/native-sandbox-requires-catalog.md +31 -0
  680. package/help/errors/native-sandbox-unavailable.md +19 -0
  681. package/help/errors/native-sandbox-warm-delivery-failed.md +21 -0
  682. package/help/errors/native-sandbox-worker-exited.md +21 -0
  683. package/help/errors/native-sandbox-worker-lost.md +20 -0
  684. package/help/errors/native-sandbox-worker-unready.md +22 -0
  685. package/help/errors/package-not-allowed-pending.md +52 -0
  686. package/help/errors/package-not-allowed.md +51 -0
  687. package/help/errors/package-refusals.md +43 -0
  688. package/help/errors/patch-cursor-malformed.md +31 -0
  689. package/help/errors/run-lost.md +39 -0
  690. package/help/errors/run-transcript-download.md +44 -0
  691. package/help/errors/secret-broker-body-invalid.md +26 -0
  692. package/help/errors/secret-broker-changed.md +20 -0
  693. package/help/errors/secret-broker-config-invalid.md +30 -0
  694. package/help/errors/secret-broker-conflict.md +27 -0
  695. package/help/errors/secret-broker-destination-denied.md +28 -0
  696. package/help/errors/secret-broker-value-invalid.md +28 -0
  697. package/help/errors/secret-brokered.md +24 -0
  698. package/help/errors/secret-in-value.md +69 -0
  699. package/help/errors/secret-not-brokered.md +25 -0
  700. package/help/errors/slack-auth-failed.md +48 -0
  701. package/help/errors/slack-channel-unreachable.md +39 -0
  702. package/help/errors/slack-not-configured.md +33 -0
  703. package/help/errors/target-merge.md +40 -0
  704. package/help/fix-merge-conflicts.md +73 -0
  705. package/help/getting-started.md +4 -5
  706. package/help/github-app-setup.md +132 -0
  707. package/help/github.md +40 -1
  708. package/help/identity-and-access.md +7 -1
  709. package/help/jira.md +23 -6
  710. package/help/knowledge.md +16 -7
  711. package/help/local-repositories.md +3 -4
  712. package/help/low-power-mode.md +131 -0
  713. package/help/merge-order-check.md +122 -0
  714. package/help/mobile-app.md +54 -0
  715. package/help/native-capabilities.md +29 -1
  716. package/help/native-sandbox.md +150 -0
  717. package/help/observability.md +8 -0
  718. package/help/operating-agents.md +5 -0
  719. package/help/package-audit-mode.md +91 -0
  720. package/help/related-pull-requests.md +80 -16
  721. package/help/repo-instructions-and-skills.md +91 -0
  722. package/help/resume-runs-locally.md +131 -0
  723. package/help/review-fix-rounds.md +43 -1
  724. package/help/sharing-agents.md +59 -0
  725. package/help/slack-notifications.md +76 -0
  726. package/help/status-comments.md +31 -0
  727. package/help/stop-run.md +58 -0
  728. package/help/troubleshooting/budgets.md +28 -0
  729. package/help/troubleshooting/coding-workers.md +99 -7
  730. package/package.json +27 -13
  731. package/prisma/migrations/20261009000003_native_execution_mode/migration.sql +12 -0
  732. package/prisma/migrations/20261009000004_native_gateway_ledger/migration.sql +65 -0
  733. package/prisma/migrations/20261009000005_native_gateway_call_child_agent/migration.sql +5 -0
  734. package/prisma/migrations/20261009000006_run_deferred_start_stop/migration.sql +14 -0
  735. package/prisma/migrations/20261009000007_native_gateway_network_ready/migration.sql +5 -0
  736. package/prisma/migrations/20261010000001_workflow_notifications/migration.sql +99 -0
  737. package/prisma/migrations/20261011000001_native_gateway_session_status_index/migration.sql +2 -0
  738. package/prisma/migrations/20261012000001_native_warm_worker/migration.sql +32 -0
  739. package/prisma/migrations/20261013000001_coding_run_merge_order/migration.sql +2 -0
  740. package/prisma/migrations/20261013000001_secret_broker/migration.sql +17 -0
  741. package/prisma/migrations/20261013000002_deferred_review_request/migration.sql +4 -0
  742. package/prisma/migrations/20261014000000_repo_skills/migration.sql +15 -0
  743. package/prisma/migrations/20261015000001_coding_run_merge_order_index/migration.sql +2 -0
  744. package/prisma/migrations/20261015000002_no_change_rereview/migration.sql +2 -0
  745. package/prisma/migrations/20261016000000_registry_approved_accepted_advisories/migration.sql +3 -0
  746. package/prisma/migrations/20261016000001_mark_ready_when_passing/migration.sql +3 -0
  747. package/prisma/migrations/20261017000000_debug_trace_max_mb/migration.sql +4 -0
  748. package/prisma/migrations/20261018000000_dependency_cache/migration.sql +53 -0
  749. package/prisma/migrations/20261019000000_claude_max_output_tokens/migration.sql +5 -0
  750. package/prisma/migrations/20261021000000_pr_description_hash/migration.sql +4 -0
  751. package/prisma/migrations/20261022000000_dependency_snapshot_validation_metadata/migration.sql +4 -0
  752. package/prisma/migrations/20261023000000_package_audit_mode/migration.sql +27 -0
  753. package/prisma/migrations/20261024000000_budget_events/migration.sql +26 -0
  754. package/prisma/migrations/20261025000000_cache_aware_holds/migration.sql +9 -0
  755. package/prisma/migrations/20261026000000_budget_overrun/migration.sql +4 -0
  756. package/prisma/migrations/20261027000000_coding_run_request/migration.sql +1 -0
  757. package/prisma/migrations/20261028000000_native_gateway_review_reads/migration.sql +6 -0
  758. package/prisma/migrations/20261029000000_lead_survives_deploy/migration.sql +6 -0
  759. package/prisma/migrations/20261030000000_local_review_covered_sha/migration.sql +2 -0
  760. package/prisma/migrations/20261031000000_coding_run_budget_limit/migration.sql +9 -0
  761. package/prisma/migrations/20261101000000_run_transcripts/migration.sql +22 -0
  762. package/prisma/schema.prisma +631 -146
  763. package/dist/sandbox/generated/zod-to-json-schema.bundle.js +0 -5
@@ -70,9 +70,10 @@ Create these scopes in the provider:
70
70
  | `memory:write` | Set and delete agent memory entries. |
71
71
  | `admin:view` | Read every owner's runs through the admin viewer API; admins only. |
72
72
  | `models:admin` | Add, override, disable and reset model catalog entries. |
73
+ | `power:manage` | Read low-power state and sleep the proxy/gateway now; admins only. |
73
74
 
74
75
  MCP clients discover this list from Wardby's protected-resource metadata and
75
- may request every advertised scope. Define all fourteen in the provider even when
76
+ may request every advertised scope. Define all fifteen in the provider even when
76
77
  policy grants a particular client or user only a subset. Ensure granted scopes
77
78
  are emitted in the access token's `scope` or `scp` claim; defining them only in
78
79
  the provider UI is not sufficient.
@@ -92,17 +93,21 @@ otherwise clients that request every advertised scope fail with `invalid_scope`.
92
93
  deployment, define it in the provider too; otherwise clients that request
93
94
  every advertised scope fail with `invalid_scope`.
94
95
 
96
+ `power:manage` was added after `models:admin`. When you upgrade an existing
97
+ deployment, define it in the provider too and map it like `agents:admin`;
98
+ otherwise clients that request every advertised scope fail with `invalid_scope`.
99
+
95
100
  ### Wardby roles
96
101
 
97
102
  A scope only delegates. `agents:admin`, `packages:approve`, `services:manage`,
98
- `admin:view` and `models:admin` take effect only for a caller who also holds a Wardby role that grants them:
103
+ `admin:view`, `models:admin` and `power:manage` take effect only for a caller who also holds a Wardby role that grants them:
99
104
 
100
- | Wardby role | Grants |
101
- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
102
- | `admin` | `agents:admin` (`make_owner`, BYO `workerImageRef`), `packages:approve`, `services:manage`, `admin:view` (read every owner's runs, see [viewer-api.md](viewer-api.md)) and `models:admin` (model catalog) |
103
- | `package-approver` | `packages:approve` (package allowlist and policy approval) |
104
- | `service-manager` | `services:manage` (coding-run service catalog changes) |
105
- | `model-manager` | `models:admin` (model catalog changes: `set_model`, `disable_model`, `reset_model`; see [models.md](models.md)) |
105
+ | Wardby role | Grants |
106
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
107
+ | `admin` | `agents:admin` (`make_owner`, BYO `workerImageRef`), `packages:approve`, `services:manage`, `admin:view` (read every owner's runs, see [viewer-api.md](viewer-api.md)), `models:admin` (model catalog) and `power:manage` (`power_status`, `power_sleep`; see [getting-started-gke.md](getting-started-gke.md#low-power-mode)) |
108
+ | `package-approver` | `packages:approve` (package allowlist and policy approval) |
109
+ | `service-manager` | `services:manage` (coding-run service catalog changes) |
110
+ | `model-manager` | `models:admin` (model catalog changes: `set_model`, `disable_model`, `reset_model`; see [models.md](models.md)) |
106
111
 
107
112
  The roles come from a claim in the caller's **access token**, which you map to
108
113
  Wardby roles:
@@ -162,7 +167,7 @@ Provider examples:
162
167
  to the access token, filtered to those groups. Set `AUTH_ROLE_CLAIM=groups` and
163
168
  `AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager`.
164
169
  Optionally, add access policy rules so only those groups can obtain
165
- `agents:admin`, `packages:approve`, `services:manage`, `admin:view` and `models:admin`.
170
+ `agents:admin`, `packages:approve`, `services:manage`, `admin:view`, `models:admin` and `power:manage`.
166
171
  - **FusionAuth:** create four application roles, `admin`,
167
172
  `package-approver`, `service-manager` and `model-manager`. They appear in the
168
173
  access token's top-level `roles` claim. Set `AUTH_ROLE_CLAIM=roles` and
@@ -185,9 +190,17 @@ that case, register the MCP client manually as a **public/native application**:
185
190
 
186
191
  - require authorization code flow with PKCE S256;
187
192
  - do not issue or embed a client secret in a desktop client;
188
- - register the client's exact loopback callback URI; and
193
+ - register the client's exact loopback callback URI;
194
+ - enable the refresh-token grant and allow the `offline_access` scope, so the
195
+ client receives a refresh token (desktop clients need one to keep a session);
196
+ and
189
197
  - allow it to request the Wardby audience and scopes.
190
198
 
199
+ To let the Wardby mobile app sign in, also register its private-use redirect
200
+ URI, `com.wardby.mobile:/oauth` (or your white-label build's redirect, such as
201
+ `com.example.app:/oauth`), as an allowed redirect URI on the IdP client that
202
+ requests `admin:view`. Wardby needs no setting for this in delegating mode.
203
+
191
204
  For Claude Code, a fixed callback port makes the redirect URI predictable:
192
205
 
193
206
  ```sh
@@ -202,6 +215,12 @@ public client ID. If a client supports only dynamic registration, either enable
202
215
  that feature with suitable provider-side restrictions or use Wardby's
203
216
  self-hosted authentication mode.
204
217
 
218
+ The Wardby viewer desktop app signs in on a fixed loopback callback,
219
+ `http://127.0.0.1:8585/callback`; register that exact URI on its public/native
220
+ client. Some providers match a loopback redirect by its exact port rather than
221
+ the port-agnostic rule of RFC 8252 §7.3 — for those, this precise port must be
222
+ registered, because a port-less or wildcard loopback entry will not match it.
223
+
205
224
  ## 4. Configure Wardby
206
225
 
207
226
  Inject these settings through the deployment's secret/configuration mechanism:
@@ -253,7 +272,7 @@ Confirm that:
253
272
 
254
273
  - `resource` is the canonical MCP URI;
255
274
  - `authorization_servers` contains the external issuer; and
256
- - `scopes_supported` contains all fourteen Wardby scopes.
275
+ - `scopes_supported` contains all fifteen Wardby scopes.
257
276
 
258
277
  An unauthenticated MCP request must return `401` with a `WWW-Authenticate`
259
278
  challenge pointing back to that metadata document.
@@ -310,6 +329,7 @@ test procedure and cleanup.
310
329
  | Wardby returns `403 insufficient_scope` | The token is valid but `scope`/`scp` lacks the operation's required permission. |
311
330
  | Client registration returns `403` | Anonymous dynamic registration is disabled; pre-register a public client. |
312
331
  | Browser flow rejects the redirect | The provider's registered loopback callback does not exactly match the client. |
332
+ | Mobile sign-in fails with a redirect error | The IdP client doesn't list the mobile redirect URI. |
313
333
  | Wardby cannot validate any newly issued token | The control plane cannot reach the JWKS URI, or provider key rotation is incomplete. |
314
334
  | One person appears as multiple principals | The provider is emitting different or pairwise `sub` values for different clients. |
315
335
 
@@ -162,8 +162,9 @@ any local branch.
162
162
  Wardby's worker images have Node, or Node and Python 3.12. For a Go, Java, Rust
163
163
  or other project, build a worker image with that toolchain on Wardby's driver
164
164
  base image, and point the builder at it with `codingProfile.workerImageRef`.
165
- This works for **Codex** agents only today: a Claude Code agent runs its
166
- commands in its tool runner, which a custom worker image does not change.
165
+ These steps are for a **Codex** builder. For a Claude Code builder, the image
166
+ starts from Wardby's tool runner image instead; see
167
+ [Codex and Claude Code](coding-worker-byo-images.md#codex-and-claude-code).
167
168
 
168
169
  1. Complete path A with Codex (`--coding-provider codex`).
169
170
  2. Run `npx @wardby/cli@latest doctor`. It prints the base image to build on:
@@ -347,8 +348,8 @@ Python tests. Upgrade, or set the variable above.
347
348
  Other languages (Go, Rust, Java and so on) are not detected. Use a
348
349
  bring-your-own image through `workerImageRef`; see
349
350
  [Path D](#path-d-another-language-build-your-own-image) and
350
- [Bring-your-own worker images](coding-worker-byo-images.md). That is Codex-only
351
- today: a Claude Code agent cannot use a custom toolchain yet.
351
+ [Bring-your-own worker images](coding-worker-byo-images.md), for Codex or
352
+ Claude Code.
352
353
 
353
354
  #### Packages the repository declares
354
355
 
@@ -421,6 +422,15 @@ along with the database. See
421
422
  run does, its requirements (the server must run on the same machine as the
422
423
  folders) and its limits (no submodules or Git LFS).
423
424
 
425
+ #### Faster installs: the dependency cache
426
+
427
+ For an npm repository, the coding proxy can keep `node_modules` snapshots so a
428
+ run starts with its dependencies already installed. Add
429
+ `WARDBY_DEPENDENCY_CACHE=true` to `.wardby/.env`, restart the stack, then set
430
+ `codingProfile.dependencyCache` to `true` on the agent with `update_agent`. This
431
+ needs wardby 0.7.0 or later; snapshots live on a Docker volume that
432
+ `down -v` removes. See [Dependency cache](coding-packages.md#dependency-cache).
433
+
424
434
  ## Your first agents
425
435
 
426
436
  [Agent recipes](agent-recipes.md) gives two complete, copyable setups: an
@@ -24,7 +24,7 @@ Jira Cloud only. One Jira site per wardby deployment.
24
24
  properties are not allowlisted.
25
25
  - **Status comments.** When an event starts a run, wardby posts a short
26
26
  "working on it" comment on the issue and edits it with the outcome when the
27
- run ends, including a line such as `Agent spend: $0.0123` for the run and
27
+ run ends, including a line such as `Agent spend: $0.012` for the run and
28
28
  its direct sub-runs. That one comment is the reply: when the run succeeds
29
29
  it shows the agent's final answer, so the agent is told not to post the
30
30
  answer again with `jira_comment` (it uses `jira_comment` only for other
@@ -466,9 +466,12 @@ What happens:
466
466
  the same branch instead of opening a second pull request. The run message
467
467
  lists up to ten open pull requests recorded for the issue this way — any
468
468
  agent's, not only the triggered agent's own — each with its own run id, so
469
- a follow-up can continue every one the change touches.
469
+ a follow-up can continue every one the change touches. GitHub issues behave
470
+ the same way; see
471
+ [Follow-ups on an issue](code-review-agents.md#follow-ups-on-an-issue).
470
472
  - **Several repositories.** When the issue leads to pull requests in more
471
- than one repository (in the same run, or in later runs for the same issue),
473
+ than one repository (in the same run, or in later runs for the same issue,
474
+ Jira or GitHub),
472
475
  each pull request's description gets a **Related pull requests** section
473
476
  naming the issue and every pull request recorded for it, merged and closed
474
477
  ones included as context; see
@@ -478,6 +481,10 @@ What happens:
478
481
  [`code-review-agents.md`](code-review-agents.md)). Without them the pull
479
482
  request is still linked, but the issue is not updated on merge.
480
483
 
484
+ To mirror this lifecycle in Slack — picked up, pull request open, review
485
+ verdict, merge — link a channel to the project or agent; see
486
+ [Send workflow updates to Slack](slack-notifications.md).
487
+
481
488
  ## Recipe: scheduled JQL sweeps
482
489
 
483
490
  An agent linked to a project can also run on a schedule with no issue event:
@@ -570,8 +577,16 @@ A run is attributed when:
570
577
  - its parent run is attributed (sub-agents and coding runs inherit, and cannot
571
578
  change it).
572
579
 
580
+ GitHub issues are attributed the same way, to a work item with provider
581
+ `github` and key `owner/repo#N`: a run started by a mention on the issue (and
582
+ every sub-agent and coding run it starts), and runs on a pull request opened
583
+ from it. `cost_report` lists them like any other work item
584
+ (`provider: "github"` narrows to them).
585
+
573
586
  When a run is attributed to an issue, whatever the source, coding runs it
574
- starts name that issue in their pull request's title and body. The issue total
587
+ starts name that issue in their pull request's title and body. A GitHub issue
588
+ is named only in the body, as `From issue #N`, on a pull request in the
589
+ issue's own repository. The issue total
575
590
  in a Jira comment's spend line covers every run attributed to that issue,
576
591
  whichever agent ran it.
577
592
 
@@ -598,11 +613,9 @@ How to read the numbers:
598
613
  - You see the runs of agents you own and runs you triggered, the same as
599
614
  `list_runs` and `get_run`.
600
615
 
601
- On GKE, existing deployments must re-run the database grants bootstrap
602
- (`deploy/gke/bootstrap-database-iam.sh`) after upgrading, so the coding proxy
603
- can write per-model usage for coding runs. Until then coding runs still work,
604
- but their per-model breakdown isn't recorded. See
605
- [Getting started on GKE](getting-started-gke.md).
616
+ On GKE, the coding proxy needs a database grant to write per-model usage for
617
+ coding runs; `deploy/gke/up.sh` applies it when you upgrade. See
618
+ [Upgrading an existing deployment](getting-started-gke.md#upgrading-an-existing-deployment).
606
619
 
607
620
  ### Company-managed projects using Epic Link
608
621
 
@@ -0,0 +1,41 @@
1
+ ---
2
+ type: invariant
3
+ title: Blob absence must distinguish missing infrastructure
4
+ description: Mapping a storage outage to not_found can delete valid dependency snapshot metadata.
5
+ tags: [storage, cache, providers]
6
+ status: stable
7
+ generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-16T18:34:00.557Z }
8
+ sources:
9
+ - id: missing
10
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/providers/storage/s3.ts#L26-L32
11
+ - id: cleanup
12
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/providers/coding-proxy/dependency-cache/service.ts#L275-L295
13
+ wardby:
14
+ schema: 1
15
+ roles: [builder, reviewer]
16
+ affects: ["src/providers/storage/**", "src/providers/coding-proxy/dependency-cache/service.ts"]
17
+ citations:
18
+ - id: missing
19
+ repo: github:wardby/wardby
20
+ path: src/providers/storage/s3.ts
21
+ lines: [26, 32]
22
+ symbol: isNotFound
23
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
24
+ spanHash: sha256:686cdad150c8c0d58e6b9acc5a2cd0bdf2e65b07b5ce8740938f43747f1408b7
25
+ - id: cleanup
26
+ repo: github:wardby/wardby
27
+ path: src/providers/coding-proxy/dependency-cache/service.ts
28
+ lines: [275, 295]
29
+ symbol: download
30
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
31
+ spanHash: sha256:02d4e058438d562ba55b6681e0267e890eed1ef82159a3b332d214f2fd066427
32
+ confidence: high
33
+ ---
34
+
35
+ The cache deletes snapshot metadata when getStream raises BlobStoreError with code not_found. The S3 adapter therefore maps missing keys, including the bare HeadObject NotFound response, but leaves NoSuchBucket and other failures as errors.[^missing][^cleanup]
36
+
37
+ **Why:** not_found authorizes metadata cleanup; it is not a generic unavailable response. New storage adapters must preserve this distinction so an infrastructure failure cannot masquerade as a dangling snapshot.
38
+
39
+ [^missing]: src/providers/storage/s3.ts, lines 26-32.
40
+
41
+ [^cleanup]: src/providers/coding-proxy/dependency-cache/service.ts, lines 275-295.
@@ -0,0 +1,52 @@
1
+ ---
2
+ type: invariant
3
+ title: Untrusted file bounds belong to the open descriptor
4
+ description: Checking a path before reading it leaves file substitution and growth races across worker boundaries.
5
+ tags: [coding, isolation, files]
6
+ status: stable
7
+ generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-16T18:34:00.557Z }
8
+ sources:
9
+ - id: read
10
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/coding-worker/artifact.ts#L12-L48
11
+ - id: skills
12
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/coding-worker/skills.ts#L43-L54
13
+ - id: result
14
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/providers/jobs/docker.ts#L1263-L1277
15
+ wardby:
16
+ schema: 1
17
+ roles: [builder, reviewer]
18
+ affects: ["src/coding-worker/artifact.ts", "src/coding-worker/skills.ts", "src/providers/jobs/docker.ts"]
19
+ citations:
20
+ - id: read
21
+ repo: github:wardby/wardby
22
+ path: src/coding-worker/artifact.ts
23
+ lines: [12, 48]
24
+ symbol: readBoundedRegularFile
25
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
26
+ spanHash: sha256:ce5173dc2723b798c03e33fcb780c5c4da5b2dd15f2b517c4db77fec841f788d
27
+ - id: skills
28
+ repo: github:wardby/wardby
29
+ path: src/coding-worker/skills.ts
30
+ lines: [43, 54]
31
+ symbol: skillNameFromFile
32
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
33
+ spanHash: sha256:022ed743f1ccb279f73e4520bf458ad28eeace035ae695853c9e5f7ee52087d4
34
+ - id: result
35
+ repo: github:wardby/wardby
36
+ path: src/providers/jobs/docker.ts
37
+ lines: [1263, 1277]
38
+ symbol: readResultArtifact
39
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
40
+ spanHash: sha256:da6466b5dc44b1de79f473668648048b3f3ef3f82a6cce61516e8bfa76efb996
41
+ confidence: high
42
+ ---
43
+
44
+ The bounded reader opens without following a final symlink and without blocking on a FIFO, checks the opened descriptor against the path inode, and reads at most one byte beyond the limit to detect growth. Both repository skill scanning and Docker result collection use it.[^read][^skills][^result]
45
+
46
+ **What to do:** preserve descriptor checks and the bounded read together. Replacing them with a path stat followed by readFile reopens substitution and growth races even when the initial size was safe.
47
+
48
+ [^read]: src/coding-worker/artifact.ts, lines 12-48.
49
+
50
+ [^skills]: src/coding-worker/skills.ts, lines 43-54.
51
+
52
+ [^result]: src/providers/jobs/docker.ts, lines 1263-1277.
@@ -0,0 +1,52 @@
1
+ ---
2
+ type: invariant
3
+ title: Budget-waiting delegations retain admission slots
4
+ description: Releasing the delegation gate during a budget wait must preserve duplicate-child and delegation-limit accounting.
5
+ tags: [delegation, concurrency, budgets]
6
+ status: stable
7
+ generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-15T10:20:14.397Z }
8
+ sources:
9
+ - id: admission
10
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/core/runner.ts#L1071-L1089
11
+ - id: wait
12
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/core/runner.ts#L1098-L1121
13
+ - id: persist
14
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/core/runner.ts#L1175-L1182
15
+ wardby:
16
+ schema: 1
17
+ roles: [builder, reviewer]
18
+ affects: ["src/core/runner.ts", "src/core/serial-gate.ts", "src/core/delegation*", "src/core/dispatch.ts"]
19
+ citations:
20
+ - id: admission
21
+ repo: github:wardby/wardby
22
+ path: src/core/runner.ts
23
+ lines: [1071, 1089]
24
+ symbol: createNativeRunTools
25
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
26
+ spanHash: sha256:3b01bdf1c2104b1ce1256bff22b131b94943ce8fae5ff755da9b1ecabb225734
27
+ - id: wait
28
+ repo: github:wardby/wardby
29
+ path: src/core/runner.ts
30
+ lines: [1098, 1121]
31
+ symbol: createNativeRunTools
32
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
33
+ spanHash: sha256:095375a8e7a54af34aa1e4661fce4b44a2e500487c164d1c5c4dcd8d577e9bd5
34
+ - id: persist
35
+ repo: github:wardby/wardby
36
+ path: src/core/runner.ts
37
+ lines: [1175, 1182]
38
+ symbol: onPersisted
39
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
40
+ spanHash: sha256:dbee201f976e3b74fffa64b5812e39c55bf86481e47abba414772f2deeb3c085
41
+ confidence: high
42
+ ---
43
+
44
+ Parallel delegation uses a per-attempt admission gate to keep the prior-child and delegation-limit checks together with child creation. Waiting child IDs participate in those checks even before they have a persisted run.[^admission] A budget waiter registers its child ID before releasing the gate, then reacquires the gate before removing that registration.[^wait] Coding dispatch releases the gate when the child row is persisted, allowing execution to overlap without overlapping admission.[^persist]
45
+
46
+ **What to do:** preserve the waiting-child reservation when changing retry or dispatch paths; releasing it early can admit the same child twice or exceed the delegation count. Holding the gate through child execution instead serializes the batch. [Coding-agent setup, budgets](../coding-agent-setup.md) already describes sibling budget waits; this concept records the admission consequence rather than repeating that behavior.
47
+
48
+ [^admission]: src/core/runner.ts, lines 1071-1089.
49
+
50
+ [^wait]: src/core/runner.ts, lines 1098-1121.
51
+
52
+ [^persist]: src/core/runner.ts, lines 1175-1182.
@@ -0,0 +1,61 @@
1
+ ---
2
+ type: invariant
3
+ title: HTTP compatibility depends on bootstrap order
4
+ description: A Kubernetes client import can change built-in fetch behavior even when jobs use Docker.
5
+ tags: [bootstrap, http, providers]
6
+ status: stable
7
+ generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-17T08:24:27.356Z }
8
+ sources:
9
+ - id: compatibility
10
+ url: https://github.com/wardby/wardby/blob/f4ac917fb05fd1118053462c98379c51289fed46/src/core/http-runtime.ts#L5-L28
11
+ - id: install
12
+ url: https://github.com/wardby/wardby/blob/f4ac917fb05fd1118053462c98379c51289fed46/src/core/http-runtime.ts#L92-L109
13
+ - id: bootstrap
14
+ url: https://github.com/wardby/wardby/blob/f4ac917fb05fd1118053462c98379c51289fed46/src/env.ts#L11-L27
15
+ wardby:
16
+ schema: 1
17
+ roles: [planner, builder, reviewer]
18
+ affects:
19
+ [
20
+ "src/env.ts",
21
+ "src/core/http-runtime.ts",
22
+ "src/providers/executor/composition.ts",
23
+ "src/cli.ts",
24
+ "src/coding-proxy/main.ts",
25
+ ]
26
+ citations:
27
+ - id: compatibility
28
+ repo: github:wardby/wardby
29
+ path: src/core/http-runtime.ts
30
+ lines: [5, 28]
31
+ symbol: HTTP dispatcher compatibility
32
+ sha: f4ac917fb05fd1118053462c98379c51289fed46
33
+ spanHash: sha256:de45288094aaa10edabef6a2d28ee308536acda9d0a4b9cedb84794c6b4ee72d
34
+ - id: install
35
+ repo: github:wardby/wardby
36
+ path: src/core/http-runtime.ts
37
+ lines: [92, 109]
38
+ symbol: installHttpRuntime
39
+ sha: f4ac917fb05fd1118053462c98379c51289fed46
40
+ spanHash: sha256:9799d701991e03e908d4a357cad85121fe8bcd147259d03be6e1c95345a0471c
41
+ - id: bootstrap
42
+ repo: github:wardby/wardby
43
+ path: src/env.ts
44
+ lines: [11, 27]
45
+ symbol: bootstrap imports
46
+ sha: f4ac917fb05fd1118053462c98379c51289fed46
47
+ spanHash: sha256:71c46404eb01aceb2d30a7617bff1df60437a1ded819b7016fd9d8bc08a08363
48
+ confidence: high
49
+ ---
50
+
51
+ Importing the Kubernetes client loads a different Undici generation, whose compatibility dispatcher can expose HTTP/2 headers in a shape Node's built-in fetch does not understand. The result is loss of response headers, affecting decompression and redirects across unrelated adapters. Executor composition imports that client even outside Kubernetes deployments.[^compatibility]
52
+
53
+ The shared environment bootstrap installs an HTTP/1-only dispatcher before other runtime work. Its installed marker makes repeated calls a no-op; it does not continuously enforce which dispatcher remains installed.[^install][^bootstrap]
54
+
55
+ **What to do:** keep the environment import first in runtime entry points and do not replace the global dispatcher later without preserving compatibility. Keep this bootstrap in the control-plane dependency tree; isolated coding-worker images have their own dependencies. See [configuration](overview-config.md) for the startup flow.
56
+
57
+ [^compatibility]: src/core/http-runtime.ts, lines 5-28.
58
+
59
+ [^install]: src/core/http-runtime.ts, lines 92-109.
60
+
61
+ [^bootstrap]: src/env.ts, lines 11-27.
@@ -0,0 +1,52 @@
1
+ ---
2
+ type: invariant
3
+ title: Import rename targets must be checked before creation
4
+ description: Renaming a colliding entity onto another existing name would silently adopt that entity through idempotent creation.
5
+ tags: [import, ownership, identity]
6
+ status: stable
7
+ generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-16T18:34:00.557Z }
8
+ sources:
9
+ - id: rename
10
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/import/preflight.ts#L38-L61
11
+ - id: abort
12
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/import/index.ts#L98-L106
13
+ - id: upsert
14
+ url: https://github.com/wardby/wardby/blob/744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be/src/import/create.ts#L134-L155
15
+ wardby:
16
+ schema: 1
17
+ roles: [builder, reviewer]
18
+ affects: ["src/import/**"]
19
+ citations:
20
+ - id: rename
21
+ repo: github:wardby/wardby
22
+ path: src/import/preflight.ts
23
+ lines: [38, 61]
24
+ symbol: resolveCollision
25
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
26
+ spanHash: sha256:c9d7a0099b2a8da51423969af1f92d314287f0ae32fb708ebec731b2796fbee5
27
+ - id: abort
28
+ repo: github:wardby/wardby
29
+ path: src/import/index.ts
30
+ lines: [98, 106]
31
+ symbol: runImport
32
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
33
+ spanHash: sha256:e7463bf861fefd8157eaa21c951c8f635fe2b41d25f80e4d77c500eae82021a4
34
+ - id: upsert
35
+ repo: github:wardby/wardby
36
+ path: src/import/create.ts
37
+ lines: [134, 155]
38
+ symbol: createFromBundle
39
+ sha: 744d27eb926ccf7eafe52c98ac2af7f9bcd5c1be
40
+ spanHash: sha256:010d97c925923a101c0cedb4d148e39f6ba70aec7b0f4e1d2355fddb4855e6a8
41
+ confidence: high
42
+ ---
43
+
44
+ Preflight treats an occupied prefixed rename target as fatal even under the rename policy. The orchestrator returns before creation on fatal collisions; creation later upserts agents with an empty update branch.[^rename][^abort][^upsert]
45
+
46
+ **Why:** a free-looking rename that lands on an existing name can return the existing agent without changing it, after which import attachments would target that identity. Preserve target validation before idempotent creation; it is an identity boundary, not just nicer collision reporting.
47
+
48
+ [^rename]: src/import/preflight.ts, lines 38-61.
49
+
50
+ [^abort]: src/import/index.ts, lines 98-106.
51
+
52
+ [^upsert]: src/import/create.ts, lines 134-155.
@@ -0,0 +1,57 @@
1
+ # Architecture knowledge
2
+
3
+ ## Overviews
4
+
5
+ - [MCP management and authorization](overview-mcp.md) — Transport identity becomes scoped management calls over owned resources and explicit grants.
6
+ - [Configuration and process bootstrap](overview-config.md) — Environment loading precedes typed feature settings and provider composition.
7
+ - [Run admission and execution](overview-core.md) — Dispatch persists admitted work before executors drive native or coding runs and recovery settles orphans.
8
+ - [Coding inputs and isolated workers](overview-coding.md) — Shared protocols connect trusted run preparation to Codex or Claude Code workers and host finalization.
9
+ - [Coding proxy and package mediation](overview-coding-proxy.md) — Run capabilities gate model reservations, package policy and optional dependency snapshots.
10
+ - [Native tool and worker isolation](overview-sandbox.md) — QuickJS evaluates user tools while a run-bound gateway retains privileged effects and native worker authority.
11
+ - [Provider composition and routing](overview-providers.md) — Interfaces separate orchestration from concrete model, execution, identity, persistence and source-control adapters.
12
+ - [Durable data and migration boundaries](overview-prisma.md) — Relational definitions and migrations persist identity, run lifecycle, accounting and integration state.
13
+ - [Deployment topology and infrastructure](overview-deploy.md) — Terraform, Compose and Kubernetes assets connect trusted services to isolated workers and durable storage.
14
+ - [CLI bootstrap and bundle import](overview-cli.md) — Command entry points assemble local installations, invoke runtime services and reconcile imported resources.
15
+ - [Viewer, observability and knowledge tooling](overview-surfaces.md) — Read projections, metrics and cited knowledge expose runtime state and architecture without owning execution.
16
+
17
+ ## Invariants
18
+
19
+ - [HTTP compatibility depends on bootstrap order](http-dispatcher-bootstrap.md) — A Kubernetes client import can change built-in fetch behavior even when jobs use Docker.
20
+ - [Pricing races must use the persisted winner](run-pricing-first-writer.md) — Concurrent native attempts must reuse the catalog terms that won the conditional pricing write.
21
+ - [Private datastore wrappers must reject shared methods](private-datastore-shared-boundary.md) — Prefix restrictions on private keys cannot authorize the provider shared-store methods.
22
+ - [Failed workspace fills must remain untrusted](workspace-staging-failure.md) — Collection failure must not expose a partially materialized worker tree to validation or trusted replacement.
23
+ - [Import rename targets must be checked before creation](import-rename-target.md) — Renaming a colliding entity onto another existing name would silently adopt that entity through idempotent creation.
24
+ - [Viewer notifications must not abort authoritative writes](viewer-notify-write-isolation.md) — The viewer trigger contains notification errors so event delivery cannot fail run persistence.
25
+ - [Blob absence must distinguish missing infrastructure](blob-not-found-semantics.md) — Mapping a storage outage to not_found can delete valid dependency snapshot metadata.
26
+ - [Warm input publication must refuse replacement](warm-input-publication.md) — Atomic visibility alone is insufficient when one warm worker may receive its capability only once.
27
+ - [Proxy usage projections must not govern settlement](proxy-settlement-projections.md) — Run totals are rebuilt from settled requests while per-model reporting failures are isolated by a savepoint.
28
+ - [Untrusted file bounds belong to the open descriptor](bounded-file-descriptor.md) — Checking a path before reading it leaves file substitution and growth races across worker boundaries.
29
+ - [Agent authorization must share the mutation transaction](transactional-agent-authorization.md) — Using the default access client inside a transaction disconnects grant reads from mutation isolation.
30
+ - [Budget-waiting delegations retain admission slots](delegation-admission-slots.md) — Releasing the delegation gate during a budget wait must preserve duplicate-child and delegation-limit accounting.
31
+ - [Schedule deduplication belongs to the transaction](schedule-claim-transaction.md) — A scheduler lease cannot replace the atomic schedule-window claim and run creation.
32
+ - [Terminal run state belongs to the first writer](terminal-run-first-writer.md) — Run completion must conditionally write pending or running rows and read back the persisted winner.
33
+ - [Task cancellation takes precedence over run status](mcp-cancelled-task-precedence.md) — A cancelled task remains cancelled even if its underlying run finishes with a different terminal outcome.
34
+ - [Secret entry replicas must share token verification](secret-entry-replica-contract.md) — A shared outcome database cannot complete a secret-entry round trip when replicas use independent signing keys.
35
+
36
+ ## Decisions
37
+
38
+ - [MCP schemas cross the SDK boundary as JSON](mcp-schema-module-boundary.md) — Using the SDK schema converter avoids incompatible Zod instances at tool registration.
39
+
40
+ ## Pitfalls
41
+
42
+ - [Nullable tool ownership leaves a uniqueness gap](nullable-tool-uniqueness.md) — The owner-and-name unique index does not deduplicate ownerless tools in PostgreSQL.
43
+ - [HTTP prompt discovery cannot use per-call identity](mcp-http-prompt-discovery.md) — The HTTP factory exposes everyone-readable agent prompts rather than the authenticated caller’s full agent set.
44
+
45
+ ## Coverage
46
+
47
+ 1. src/mcp/ (tools, auth, access, grants): covered 2026-10-17 (6 concepts)
48
+ 2. src/config/ and env handling: covered 2026-10-17 (2 concepts)
49
+ 3. src/core/ runner, scheduler, dispatch, budgets, delegation: covered 2026-10-17 (7 concepts)
50
+ 4. src/coding/ and src/coding-worker/, src/claude-*/ (coding runs, workers): covered 2026-10-17 (2 concepts)
51
+ 5. src/providers/coding-proxy/ (proxy, package registry): covered 2026-10-17 (3 concepts)
52
+ 6. src/sandbox/ and src/native-worker/ (native sandbox, isolation): covered 2026-10-17 (3 concepts)
53
+ 7. src/providers/ other seams (LLM, auth, storage, VCS, executors): covered 2026-10-17 (7 concepts)
54
+ 8. prisma/ (schema, migrations): covered 2026-10-17 (3 concepts)
55
+ 9. deploy/ (Terraform, Kubernetes, scripts): covered 2026-10-17 (2 concepts)
56
+ 10. src/quickstart/, src/import/, the CLI files in src/: covered 2026-10-17 (4 concepts)
57
+ 11. src/viewer/, src/observability/, src/knowledge/, src/tools/: covered 2026-10-17 (2 concepts)
@@ -0,0 +1,9 @@
1
+ # Knowledge changes
2
+
3
+ - 2026-10-15: Created the bundle index; added invariants for transactional agent authorization, delegation admission slots, transactional schedule claims, and first-writer terminal run state.
4
+
5
+ - 2026-10-15: Added the coverage map, retaining existing MCP and core coverage; completed MCP and config discovery, added schema-boundary, HTTP prompt-discovery, task-cancellation and secret-entry replica contracts, and re-anchored three moved delegation citations. Later uncovered areas remain for the next coverage run.
6
+
7
+ - 2026-10-16: Completed coverage discovery for areas 4–11; added descriptor-bound file reads, proxy settlement projections, warm input publication, blob absence semantics, nullable tool uniqueness, viewer notification isolation, and import rename-target contracts. Re-anchored eight moved citations across delegation admission, schedule claims, terminal run state, and transactional authorization; existing claims remain current.
8
+
9
+ - 2026-10-17: Added one overview for each of the eleven coverage areas and completed discovery across all areas; added HTTP dispatcher bootstrap, first-writer pricing, private/shared datastore separation and failed workspace staging contracts. Existing citations and claims remain unchanged; refreshed coverage dates and counts, including overviews and cross-area concepts.
@@ -0,0 +1,41 @@
1
+ ---
2
+ type: invariant
3
+ title: Task cancellation takes precedence over run status
4
+ description: A cancelled task remains cancelled even if its underlying run finishes with a different terminal outcome.
5
+ tags: [mcp, execution, cancellation]
6
+ status: stable
7
+ generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-15T11:18:44.473Z }
8
+ sources:
9
+ - id: read
10
+ url: https://github.com/wardby/wardby/blob/0cd83fece6e5dafbb229aee4c293953e354cb42d/src/mcp/tasks/manager.ts#L108-L144
11
+ - id: cancel
12
+ url: https://github.com/wardby/wardby/blob/0cd83fece6e5dafbb229aee4c293953e354cb42d/src/mcp/tasks/manager.ts#L155-L171
13
+ wardby:
14
+ schema: 1
15
+ roles: [builder, reviewer]
16
+ affects: ["src/mcp/tasks/**", "src/mcp/tools/trigger.ts"]
17
+ citations:
18
+ - id: read
19
+ repo: github:wardby/wardby
20
+ path: src/mcp/tasks/manager.ts
21
+ lines: [108, 144]
22
+ symbol: getTask
23
+ sha: 0cd83fece6e5dafbb229aee4c293953e354cb42d
24
+ spanHash: sha256:57fcf902067b811f63548e01e7008a5dfadd4504156904dc96ad26c68c323ea8
25
+ - id: cancel
26
+ repo: github:wardby/wardby
27
+ path: src/mcp/tasks/manager.ts
28
+ lines: [155, 171]
29
+ symbol: cancelTask
30
+ sha: 0cd83fece6e5dafbb229aee4c293953e354cb42d
31
+ spanHash: sha256:68e640003a1eb74a96bab385cde0c8a658df6a2902ca10cb76a39d35ad5f60b7
32
+ confidence: high
33
+ ---
34
+
35
+ Ordinary task reads derive status from the run, but first return a persisted task cancellation without reading that run. Cancellation checks that the run is active, invokes the stop hook, then stamps the task cancelled; it does not stamp tasks whose runs were already terminal.[^read][^cancel]
36
+
37
+ **Why:** the run can finish between the active-state check and cancellation. Preserve the task-level precedence rather than synchronizing its status back from the run: cancellation of the task and the authoritative run outcome are separate facts. [Native sandbox](../native-sandbox.md) describes stopping execution; this concept records the task projection consequence.
38
+
39
+ [^read]: src/mcp/tasks/manager.ts, lines 108-144.
40
+
41
+ [^cancel]: src/mcp/tasks/manager.ts, lines 155-171.
@@ -0,0 +1,41 @@
1
+ ---
2
+ type: pitfall
3
+ title: HTTP prompt discovery cannot use per-call identity
4
+ description: The HTTP factory exposes everyone-readable agent prompts rather than the authenticated caller’s full agent set.
5
+ tags: [mcp, access, discovery]
6
+ status: stable
7
+ generated: { by: wardby-architect/gpt-6.1-sol, at: 2026-10-15T11:18:44.473Z }
8
+ sources:
9
+ - id: context
10
+ url: https://github.com/wardby/wardby/blob/0cd83fece6e5dafbb229aee4c293953e354cb42d/src/mcp/server.ts#L211-L235
11
+ - id: prompts
12
+ url: https://github.com/wardby/wardby/blob/0cd83fece6e5dafbb229aee4c293953e354cb42d/src/mcp/server.ts#L300-L332
13
+ wardby:
14
+ schema: 1
15
+ roles: [builder, reviewer]
16
+ affects: ["src/mcp/server.ts", "src/mcp/transport/**"]
17
+ citations:
18
+ - id: context
19
+ repo: github:wardby/wardby
20
+ path: src/mcp/server.ts
21
+ lines: [211, 235]
22
+ symbol: resolveCtx
23
+ sha: 0cd83fece6e5dafbb229aee4c293953e354cb42d
24
+ spanHash: sha256:e44772fb56c6bd94fe80f9a217ad26e1a5a580cd380f363db476fa206d4ba288
25
+ - id: prompts
26
+ repo: github:wardby/wardby
27
+ path: src/mcp/server.ts
28
+ lines: [300, 332]
29
+ symbol: factory
30
+ sha: 0cd83fece6e5dafbb229aee4c293953e354cb42d
31
+ spanHash: sha256:e2b7273522836d35f55b7bf068062a488b1eae0cd47520d35a67f89acd0f731f
32
+ confidence: high
33
+ ---
34
+
35
+ HTTP identity is resolved from each dispatched call, after the server factory builds the prompt list. The factory therefore registers only agents granted at least read to everyone; stdio can use its already established fixed context. Failure to build this optional list does not prevent tool registration.[^context][^prompts]
36
+
37
+ **What to do:** do not treat a missing HTTP prompt as proof that the caller lacks agent access, or widen the factory’s query to all agents. Caller-specific discovery needs request identity before prompt registration.
38
+
39
+ [^context]: src/mcp/server.ts, lines 211-235.
40
+
41
+ [^prompts]: src/mcp/server.ts, lines 300-332.