@wardby/cli 0.2.1 → 0.4.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 (555) hide show
  1. package/.env.example +53 -4
  2. package/README.md +52 -13
  3. package/dist/claude-coding-worker/driver.d.ts +6 -1
  4. package/dist/claude-coding-worker/driver.js +27 -1
  5. package/dist/claude-coding-worker/main.js +2 -0
  6. package/dist/claude-coding-worker/tool-socket.d.ts +9 -0
  7. package/dist/claude-coding-worker/tool-socket.js +26 -0
  8. package/dist/cli-help.d.ts +1 -1
  9. package/dist/cli-help.js +14 -4
  10. package/dist/cli.d.ts +1 -1
  11. package/dist/cli.js +284 -36
  12. package/dist/coding/base-commit.d.ts +6 -0
  13. package/dist/coding/base-commit.js +12 -0
  14. package/dist/coding/collect-exclude.d.ts +25 -0
  15. package/dist/coding/collect-exclude.js +76 -0
  16. package/dist/coding/profile.d.ts +67 -22
  17. package/dist/coding/profile.js +58 -25
  18. package/dist/coding/protected-path-wording.d.ts +24 -0
  19. package/dist/coding/protected-path-wording.js +55 -0
  20. package/dist/coding/protected-paths.d.ts +31 -0
  21. package/dist/coding/protected-paths.js +48 -0
  22. package/dist/coding/protocol.d.ts +91 -4
  23. package/dist/coding/protocol.js +123 -12
  24. package/dist/coding/provider.d.ts +6 -1
  25. package/dist/coding/provider.js +16 -9
  26. package/dist/coding/registry/adapters.d.ts +2 -0
  27. package/dist/coding/registry/adapters.js +9 -0
  28. package/dist/coding/registry/allowlist.d.ts +9 -0
  29. package/dist/coding/registry/allowlist.js +28 -0
  30. package/dist/coding/registry/json-scan.d.ts +55 -0
  31. package/dist/coding/registry/json-scan.js +191 -0
  32. package/dist/coding/registry/lockfiles.d.ts +6 -0
  33. package/dist/coding/registry/lockfiles.js +89 -0
  34. package/dist/coding/registry/npm-lockfile.d.ts +9 -0
  35. package/dist/coding/registry/npm-lockfile.js +73 -0
  36. package/dist/coding/registry/npm-plan.d.ts +29 -0
  37. package/dist/coding/registry/npm-plan.js +289 -0
  38. package/dist/coding/registry/npm.d.ts +7 -0
  39. package/dist/coding/registry/npm.js +252 -0
  40. package/dist/coding/registry/pypi.d.ts +4 -0
  41. package/dist/coding/registry/pypi.js +210 -0
  42. package/dist/coding/registry/report.d.ts +37 -0
  43. package/dist/coding/registry/report.js +31 -0
  44. package/dist/coding/registry/token.d.ts +4 -0
  45. package/dist/coding/registry/token.js +7 -0
  46. package/dist/coding/registry/types.d.ts +286 -0
  47. package/dist/coding/registry/types.js +19 -0
  48. package/dist/coding/registry/worker-config.d.ts +14 -0
  49. package/dist/coding/registry/worker-config.js +31 -0
  50. package/dist/coding/services/builtins.d.ts +22 -0
  51. package/dist/coding/services/builtins.js +85 -0
  52. package/dist/coding/services/catalog.d.ts +443 -0
  53. package/dist/coding/services/catalog.js +159 -0
  54. package/dist/coding/services/declaration.d.ts +11 -0
  55. package/dist/coding/services/declaration.js +114 -0
  56. package/dist/coding/services/note.d.ts +8 -0
  57. package/dist/coding/services/note.js +15 -0
  58. package/dist/coding/services/resolve.d.ts +25 -0
  59. package/dist/coding/services/resolve.js +50 -0
  60. package/dist/coding/services/wording.d.ts +25 -0
  61. package/dist/coding/services/wording.js +70 -0
  62. package/dist/coding-proxy/main.js +24 -4
  63. package/dist/coding-worker/artifact.d.ts +6 -0
  64. package/dist/coding-worker/debug-trace.d.ts +37 -0
  65. package/dist/coding-worker/debug-trace.js +117 -0
  66. package/dist/coding-worker/driver.d.ts +13 -1
  67. package/dist/coding-worker/driver.js +102 -13
  68. package/dist/coding-worker/errors.js +8 -0
  69. package/dist/coding-worker/main.js +10 -2
  70. package/dist/coding-worker/sdk.d.ts +2 -2
  71. package/dist/coding-worker/sdk.js +7 -2
  72. package/dist/coding-worker/types.d.ts +3 -0
  73. package/dist/config/providers.d.ts +66 -0
  74. package/dist/config/providers.js +137 -0
  75. package/dist/core/attribution.d.ts +101 -0
  76. package/dist/core/attribution.js +208 -0
  77. package/dist/core/budget-groups.d.ts +120 -10
  78. package/dist/core/budget-groups.js +133 -24
  79. package/dist/core/budget-wording.d.ts +22 -0
  80. package/dist/core/budget-wording.js +55 -0
  81. package/dist/core/coding-queue.d.ts +3 -0
  82. package/dist/core/coding-queue.js +6 -2
  83. package/dist/core/coding-service-status.d.ts +11 -0
  84. package/dist/core/coding-service-status.js +17 -0
  85. package/dist/core/cost-report.d.ts +88 -0
  86. package/dist/core/cost-report.js +248 -0
  87. package/dist/core/datastores.js +18 -2
  88. package/dist/core/db.d.ts +5 -1
  89. package/dist/core/db.js +8 -2
  90. package/dist/core/dispatch.d.ts +74 -7
  91. package/dist/core/dispatch.js +382 -47
  92. package/dist/core/engine-native.js +44 -14
  93. package/dist/core/glob.d.ts +10 -0
  94. package/dist/core/glob.js +33 -0
  95. package/dist/core/grants.d.ts +86 -0
  96. package/dist/core/grants.js +126 -0
  97. package/dist/core/host-events.d.ts +72 -0
  98. package/dist/core/host-events.js +597 -0
  99. package/dist/core/host-identity-links.d.ts +54 -0
  100. package/dist/core/host-identity-links.js +189 -0
  101. package/dist/core/host-status.d.ts +78 -0
  102. package/dist/core/host-status.js +228 -0
  103. package/dist/core/in-flight-runs.d.ts +8 -0
  104. package/dist/core/in-flight-runs.js +56 -0
  105. package/dist/core/issue-bridge.d.ts +60 -0
  106. package/dist/core/issue-bridge.js +189 -0
  107. package/dist/core/issue-dedupe.d.ts +70 -0
  108. package/dist/core/issue-dedupe.js +255 -0
  109. package/dist/core/issue-events.d.ts +42 -0
  110. package/dist/core/issue-events.js +155 -0
  111. package/dist/core/issue-status.d.ts +29 -0
  112. package/dist/core/issue-status.js +241 -0
  113. package/dist/core/issue-tracker-tools.d.ts +64 -0
  114. package/dist/core/issue-tracker-tools.js +850 -0
  115. package/dist/core/model-usage.d.ts +10 -0
  116. package/dist/core/model-usage.js +24 -0
  117. package/dist/core/provider-wording.d.ts +12 -0
  118. package/dist/core/provider-wording.js +44 -0
  119. package/dist/core/reconciler.d.ts +42 -2
  120. package/dist/core/reconciler.js +97 -2
  121. package/dist/core/repo-access.d.ts +99 -0
  122. package/dist/core/repo-access.js +136 -0
  123. package/dist/core/review-host-checks.d.ts +11 -0
  124. package/dist/core/review-host-checks.js +41 -0
  125. package/dist/core/review-host-tools.d.ts +47 -0
  126. package/dist/core/review-host-tools.js +354 -0
  127. package/dist/core/run-heartbeat.d.ts +27 -0
  128. package/dist/core/run-heartbeat.js +54 -0
  129. package/dist/core/run-pricing.d.ts +61 -0
  130. package/dist/core/run-pricing.js +56 -0
  131. package/dist/core/runner.d.ts +33 -8
  132. package/dist/core/runner.js +410 -62
  133. package/dist/core/scheduler.d.ts +4 -1
  134. package/dist/core/scheduler.js +3 -2
  135. package/dist/core/secrets.d.ts +11 -2
  136. package/dist/core/secrets.js +25 -6
  137. package/dist/core/self-defects.d.ts +80 -0
  138. package/dist/core/self-defects.js +180 -0
  139. package/dist/core/subagent-memory-tools.d.ts +1 -1
  140. package/dist/core/subagent-memory-tools.js +16 -3
  141. package/dist/core/tool-admin.d.ts +81 -0
  142. package/dist/core/tool-admin.js +129 -0
  143. package/dist/core/tool-names.d.ts +42 -0
  144. package/dist/core/tool-names.js +67 -0
  145. package/dist/core/untrusted-content.d.ts +32 -0
  146. package/dist/core/untrusted-content.js +72 -0
  147. package/dist/core/webhooks.d.ts +17 -2
  148. package/dist/core/webhooks.js +42 -3
  149. package/dist/generated/prisma/browser.d.ts +166 -0
  150. package/dist/generated/prisma/client.d.ts +166 -0
  151. package/dist/generated/prisma/commonInputTypes.d.ts +152 -52
  152. package/dist/generated/prisma/enums.d.ts +13 -0
  153. package/dist/generated/prisma/enums.js +12 -1
  154. package/dist/generated/prisma/internal/class.d.ts +242 -0
  155. package/dist/generated/prisma/internal/class.js +4 -4
  156. package/dist/generated/prisma/internal/prismaNamespace.d.ts +2571 -577
  157. package/dist/generated/prisma/internal/prismaNamespace.js +312 -6
  158. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +328 -0
  159. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +312 -6
  160. package/dist/generated/prisma/models/Agent.d.ts +682 -1
  161. package/dist/generated/prisma/models/AgentIssueProject.d.ts +1838 -0
  162. package/dist/generated/prisma/models/AgentIssueProject.js +1 -0
  163. package/dist/generated/prisma/models/AgentRepository.d.ts +1425 -0
  164. package/dist/generated/prisma/models/AgentRepository.js +1 -0
  165. package/dist/generated/prisma/models/AgentTool.d.ts +95 -1
  166. package/dist/generated/prisma/models/AuthUser.d.ts +56 -1
  167. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +258 -7
  168. package/dist/generated/prisma/models/CodingProxySession.d.ts +195 -2
  169. package/dist/generated/prisma/models/CodingRun.d.ts +1405 -95
  170. package/dist/generated/prisma/models/CodingRunServiceStatus.d.ts +1404 -0
  171. package/dist/generated/prisma/models/CodingRunServiceStatus.js +1 -0
  172. package/dist/generated/prisma/models/CodingService.d.ts +1348 -0
  173. package/dist/generated/prisma/models/CodingService.js +1 -0
  174. package/dist/generated/prisma/models/HostEventDelivery.d.ts +946 -0
  175. package/dist/generated/prisma/models/HostEventDelivery.js +1 -0
  176. package/dist/generated/prisma/models/HostIdentity.d.ts +1232 -0
  177. package/dist/generated/prisma/models/HostIdentity.js +1 -0
  178. package/dist/generated/prisma/models/HostIdentityLinkRequest.d.ts +1473 -0
  179. package/dist/generated/prisma/models/HostIdentityLinkRequest.js +1 -0
  180. package/dist/generated/prisma/models/IssueFingerprint.d.ts +1183 -0
  181. package/dist/generated/prisma/models/IssueFingerprint.js +1 -0
  182. package/dist/generated/prisma/models/IssuePullRequest.d.ts +1255 -0
  183. package/dist/generated/prisma/models/IssuePullRequest.js +1 -0
  184. package/dist/generated/prisma/models/ModelCatalogEntry.d.ts +1322 -0
  185. package/dist/generated/prisma/models/ModelCatalogEntry.js +1 -0
  186. package/dist/generated/prisma/models/Principal.d.ts +455 -0
  187. package/dist/generated/prisma/models/RegistryAllowance.d.ts +1148 -0
  188. package/dist/generated/prisma/models/RegistryAllowance.js +1 -0
  189. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +1219 -0
  190. package/dist/generated/prisma/models/RegistryApprovedVersion.js +1 -0
  191. package/dist/generated/prisma/models/RegistryFetch.d.ts +1428 -0
  192. package/dist/generated/prisma/models/RegistryFetch.js +1 -0
  193. package/dist/generated/prisma/models/RegistryPlanRefusal.d.ts +1294 -0
  194. package/dist/generated/prisma/models/RegistryPlanRefusal.js +1 -0
  195. package/dist/generated/prisma/models/RegistryVersionFact.d.ts +1085 -0
  196. package/dist/generated/prisma/models/RegistryVersionFact.js +1 -0
  197. package/dist/generated/prisma/models/ResourceGrant.d.ts +1437 -0
  198. package/dist/generated/prisma/models/ResourceGrant.js +1 -0
  199. package/dist/generated/prisma/models/Run.d.ts +1402 -82
  200. package/dist/generated/prisma/models/RunAttribution.d.ts +1259 -0
  201. package/dist/generated/prisma/models/RunAttribution.js +1 -0
  202. package/dist/generated/prisma/models/RunHostCheck.d.ts +1239 -0
  203. package/dist/generated/prisma/models/RunHostCheck.js +1 -0
  204. package/dist/generated/prisma/models/RunHostStatus.d.ts +1315 -0
  205. package/dist/generated/prisma/models/RunHostStatus.js +1 -0
  206. package/dist/generated/prisma/models/RunIssueStatus.d.ts +1199 -0
  207. package/dist/generated/prisma/models/RunIssueStatus.js +1 -0
  208. package/dist/generated/prisma/models/RunModelUsage.d.ts +1316 -0
  209. package/dist/generated/prisma/models/RunModelUsage.js +1 -0
  210. package/dist/generated/prisma/models/Tool.d.ts +15 -3
  211. package/dist/generated/prisma/models/WorkItem.d.ts +1408 -0
  212. package/dist/generated/prisma/models/WorkItem.js +1 -0
  213. package/dist/generated/prisma/models.d.ts +22 -0
  214. package/dist/help/build.d.ts +1 -0
  215. package/dist/help/build.js +9 -0
  216. package/dist/help/catalog.d.ts +24 -0
  217. package/dist/help/catalog.js +160 -0
  218. package/dist/help/cli.d.ts +2 -0
  219. package/dist/help/cli.js +65 -0
  220. package/dist/help/runtime.d.ts +3 -0
  221. package/dist/help/runtime.js +44 -0
  222. package/dist/help/search.d.ts +9 -0
  223. package/dist/help/search.js +104 -0
  224. package/dist/help-index.json +999 -0
  225. package/dist/import/cli-args.js +3 -2
  226. package/dist/import/create.d.ts +5 -0
  227. package/dist/import/create.js +67 -13
  228. package/dist/import/index.js +19 -9
  229. package/dist/import/neutral-schema.d.ts +18 -18
  230. package/dist/knowledge/check.d.ts +13 -0
  231. package/dist/knowledge/check.js +69 -0
  232. package/dist/knowledge/cli.d.ts +14 -0
  233. package/dist/knowledge/cli.js +67 -0
  234. package/dist/knowledge/concept.d.ts +54 -0
  235. package/dist/knowledge/concept.js +78 -0
  236. package/dist/knowledge/note.d.ts +11 -0
  237. package/dist/knowledge/note.js +39 -0
  238. package/dist/knowledge/relevance.d.ts +11 -0
  239. package/dist/knowledge/relevance.js +14 -0
  240. package/dist/knowledge/span-hash.d.ts +3 -0
  241. package/dist/knowledge/span-hash.js +16 -0
  242. package/dist/mcp/auth/access.d.ts +72 -0
  243. package/dist/mcp/auth/access.js +58 -0
  244. package/dist/mcp/auth/grants-cli.d.ts +149 -0
  245. package/dist/mcp/auth/grants-cli.js +518 -0
  246. package/dist/mcp/auth/host-account-cli.d.ts +2 -0
  247. package/dist/mcp/auth/host-account-cli.js +47 -0
  248. package/dist/mcp/auth/ownership.d.ts +25 -51
  249. package/dist/mcp/auth/ownership.js +19 -14
  250. package/dist/mcp/auth/repo-authorization.d.ts +22 -0
  251. package/dist/mcp/auth/repo-authorization.js +51 -0
  252. package/dist/mcp/auth/resource-server.d.ts +33 -2
  253. package/dist/mcp/auth/resource-server.js +99 -3
  254. package/dist/mcp/auth/self-hosted/browser.js +2 -2
  255. package/dist/mcp/auth/self-hosted/cli.js +47 -13
  256. package/dist/mcp/auth/self-hosted/credentials.d.ts +23 -5
  257. package/dist/mcp/auth/self-hosted/credentials.js +62 -4
  258. package/dist/mcp/auth/self-hosted/session.d.ts +7 -6
  259. package/dist/mcp/context.d.ts +30 -1
  260. package/dist/mcp/errors.d.ts +25 -6
  261. package/dist/mcp/errors.js +98 -0
  262. package/dist/mcp/host-events/deliveries.d.ts +9 -0
  263. package/dist/mcp/host-events/deliveries.js +17 -0
  264. package/dist/mcp/host-events/github-ingress.d.ts +38 -0
  265. package/dist/mcp/host-events/github-ingress.js +83 -0
  266. package/dist/mcp/host-events/github-user-callback.d.ts +18 -0
  267. package/dist/mcp/host-events/github-user-callback.js +50 -0
  268. package/dist/mcp/host-events/jira-ingress.d.ts +29 -0
  269. package/dist/mcp/host-events/jira-ingress.js +92 -0
  270. package/dist/mcp/index.d.ts +10 -1
  271. package/dist/mcp/index.js +187 -19
  272. package/dist/mcp/server.js +32 -11
  273. package/dist/mcp/tools/agents.js +519 -50
  274. package/dist/mcp/tools/budget-groups.js +3 -3
  275. package/dist/mcp/tools/cost-report.d.ts +8 -0
  276. package/dist/mcp/tools/cost-report.js +60 -0
  277. package/dist/mcp/tools/datastore.js +22 -15
  278. package/dist/mcp/tools/grants.d.ts +2 -0
  279. package/dist/mcp/tools/grants.js +239 -0
  280. package/dist/mcp/tools/help.d.ts +5 -0
  281. package/dist/mcp/tools/help.js +67 -0
  282. package/dist/mcp/tools/host-accounts.d.ts +2 -0
  283. package/dist/mcp/tools/host-accounts.js +114 -0
  284. package/dist/mcp/tools/issue-projects.d.ts +2 -0
  285. package/dist/mcp/tools/issue-projects.js +238 -0
  286. package/dist/mcp/tools/memory.d.ts +7 -1
  287. package/dist/mcp/tools/memory.js +5 -5
  288. package/dist/mcp/tools/model-catalog.d.ts +22 -0
  289. package/dist/mcp/tools/model-catalog.js +423 -0
  290. package/dist/mcp/tools/repositories.d.ts +2 -0
  291. package/dist/mcp/tools/repositories.js +182 -0
  292. package/dist/mcp/tools/runs.d.ts +6 -0
  293. package/dist/mcp/tools/runs.js +60 -6
  294. package/dist/mcp/tools/scheduling.js +3 -6
  295. package/dist/mcp/tools/secrets.js +18 -6
  296. package/dist/mcp/tools/services.d.ts +2 -0
  297. package/dist/mcp/tools/services.js +222 -0
  298. package/dist/mcp/tools/subagents.js +52 -16
  299. package/dist/mcp/tools/tools.d.ts +41 -0
  300. package/dist/mcp/tools/tools.js +201 -40
  301. package/dist/mcp/tools/trigger.js +65 -7
  302. package/dist/mcp/tools/webhooks.js +15 -4
  303. package/dist/mcp/transport/streamable-http.d.ts +15 -0
  304. package/dist/mcp/transport/streamable-http.js +55 -3
  305. package/dist/mcp/webhooks/ingress.d.ts +2 -1
  306. package/dist/mcp/webhooks/ingress.js +9 -2
  307. package/dist/providers/auth/delegating.d.ts +19 -0
  308. package/dist/providers/auth/delegating.js +71 -0
  309. package/dist/providers/auth/index.d.ts +2 -0
  310. package/dist/providers/auth/index.js +11 -0
  311. package/dist/providers/auth/self-hosted.d.ts +10 -2
  312. package/dist/providers/auth/self-hosted.js +55 -6
  313. package/dist/providers/auth/types.d.ts +6 -0
  314. package/dist/providers/coding-proxy/memory-ledger.d.ts +4 -1
  315. package/dist/providers/coding-proxy/memory-ledger.js +31 -3
  316. package/dist/providers/coding-proxy/metering.d.ts +6 -1
  317. package/dist/providers/coding-proxy/metering.js +41 -4
  318. package/dist/providers/coding-proxy/prisma-ledger.d.ts +17 -0
  319. package/dist/providers/coding-proxy/prisma-ledger.js +106 -8
  320. package/dist/providers/coding-proxy/proxy.d.ts +25 -2
  321. package/dist/providers/coding-proxy/proxy.js +561 -38
  322. package/dist/providers/coding-proxy/registry/audit.d.ts +131 -0
  323. package/dist/providers/coding-proxy/registry/audit.js +380 -0
  324. package/dist/providers/coding-proxy/registry/bounded-fetch.d.ts +16 -0
  325. package/dist/providers/coding-proxy/registry/bounded-fetch.js +77 -0
  326. package/dist/providers/coding-proxy/registry/plan.d.ts +58 -0
  327. package/dist/providers/coding-proxy/registry/plan.js +304 -0
  328. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +34 -0
  329. package/dist/providers/coding-proxy/registry/prisma-store.js +151 -0
  330. package/dist/providers/coding-proxy/registry/service.d.ts +213 -0
  331. package/dist/providers/coding-proxy/registry/service.js +1137 -0
  332. package/dist/providers/coding-proxy/registry/store.d.ts +127 -0
  333. package/dist/providers/coding-proxy/registry/store.js +70 -0
  334. package/dist/providers/coding-proxy/runtime.d.ts +17 -0
  335. package/dist/providers/coding-proxy/runtime.js +63 -0
  336. package/dist/providers/coding-proxy/secure-fetch.js +0 -1
  337. package/dist/providers/coding-proxy/server.d.ts +11 -0
  338. package/dist/providers/coding-proxy/server.js +163 -0
  339. package/dist/providers/coding-proxy/types.d.ts +33 -1
  340. package/dist/providers/coding-proxy/types.js +12 -1
  341. package/dist/providers/engine/types.d.ts +29 -0
  342. package/dist/providers/executor/build.d.ts +2 -2
  343. package/dist/providers/executor/composition.d.ts +3 -0
  344. package/dist/providers/executor/composition.js +28 -1
  345. package/dist/providers/executor/container.d.ts +134 -4
  346. package/dist/providers/executor/container.js +394 -37
  347. package/dist/providers/executor/dbos.d.ts +4 -3
  348. package/dist/providers/executor/dbos.js +7 -5
  349. package/dist/providers/executor/in-process.d.ts +2 -3
  350. package/dist/providers/executor/routing.d.ts +13 -0
  351. package/dist/providers/executor/routing.js +18 -0
  352. package/dist/providers/executor/types.d.ts +34 -0
  353. package/dist/providers/issue-tracker/adf.d.ts +31 -0
  354. package/dist/providers/issue-tracker/adf.js +181 -0
  355. package/dist/providers/issue-tracker/index.d.ts +5 -0
  356. package/dist/providers/issue-tracker/index.js +12 -0
  357. package/dist/providers/issue-tracker/jira-client.d.ts +41 -0
  358. package/dist/providers/issue-tracker/jira-client.js +151 -0
  359. package/dist/providers/issue-tracker/jira-events.d.ts +3 -0
  360. package/dist/providers/issue-tracker/jira-events.js +98 -0
  361. package/dist/providers/issue-tracker/jira.d.ts +116 -0
  362. package/dist/providers/issue-tracker/jira.js +502 -0
  363. package/dist/providers/issue-tracker/types.d.ts +269 -0
  364. package/dist/providers/issue-tracker/types.js +16 -0
  365. package/dist/providers/jobs/claude-tool-setup.d.ts +23 -0
  366. package/dist/providers/jobs/claude-tool-setup.js +50 -0
  367. package/dist/providers/jobs/collect-prune.d.ts +7 -0
  368. package/dist/providers/jobs/collect-prune.js +27 -0
  369. package/dist/providers/jobs/docker-isolation.d.ts +48 -3
  370. package/dist/providers/jobs/docker-isolation.js +213 -22
  371. package/dist/providers/jobs/docker-services.d.ts +35 -0
  372. package/dist/providers/jobs/docker-services.js +191 -0
  373. package/dist/providers/jobs/docker.d.ts +53 -2
  374. package/dist/providers/jobs/docker.js +307 -32
  375. package/dist/providers/jobs/fake-kubernetes-api.d.ts +1 -0
  376. package/dist/providers/jobs/fake-kubernetes-api.js +12 -3
  377. package/dist/providers/jobs/kubernetes-isolation.d.ts +17 -2
  378. package/dist/providers/jobs/kubernetes-isolation.js +238 -57
  379. package/dist/providers/jobs/kubernetes-platform.d.ts +10 -4
  380. package/dist/providers/jobs/kubernetes-platform.js +11 -5
  381. package/dist/providers/jobs/kubernetes-preflight.js +3 -0
  382. package/dist/providers/jobs/kubernetes.d.ts +24 -2
  383. package/dist/providers/jobs/kubernetes.js +153 -22
  384. package/dist/providers/jobs/service-state.d.ts +22 -0
  385. package/dist/providers/jobs/service-state.js +17 -0
  386. package/dist/providers/jobs/types.d.ts +18 -0
  387. package/dist/providers/llm/anthropic.d.ts +3 -3
  388. package/dist/providers/llm/anthropic.js +3 -5
  389. package/dist/providers/llm/bedrock.d.ts +3 -3
  390. package/dist/providers/llm/bedrock.js +3 -8
  391. package/dist/providers/llm/catalog-lookup.d.ts +10 -0
  392. package/dist/providers/llm/catalog-lookup.js +15 -0
  393. package/dist/providers/llm/catalog-shipped.d.ts +18 -0
  394. package/dist/providers/llm/catalog-shipped.js +197 -0
  395. package/dist/providers/llm/catalog-store.d.ts +58 -0
  396. package/dist/providers/llm/catalog-store.js +138 -0
  397. package/dist/providers/llm/catalog-types.d.ts +66 -0
  398. package/dist/providers/llm/catalog-types.js +64 -0
  399. package/dist/providers/llm/catalog.d.ts +61 -0
  400. package/dist/providers/llm/catalog.js +147 -0
  401. package/dist/providers/llm/claude-messages.d.ts +5 -1
  402. package/dist/providers/llm/claude-messages.js +1 -0
  403. package/dist/providers/llm/claude-provider.d.ts +10 -12
  404. package/dist/providers/llm/claude-provider.js +15 -6
  405. package/dist/providers/llm/index.d.ts +9 -6
  406. package/dist/providers/llm/index.js +8 -5
  407. package/dist/providers/llm/openai.d.ts +14 -5
  408. package/dist/providers/llm/openai.js +24 -14
  409. package/dist/providers/llm/pricing-core.d.ts +5 -3
  410. package/dist/providers/llm/registration.js +8 -12
  411. package/dist/providers/llm/routing.d.ts +21 -11
  412. package/dist/providers/llm/routing.js +47 -13
  413. package/dist/providers/llm/types.d.ts +12 -0
  414. package/dist/providers/llm/types.js +8 -1
  415. package/dist/providers/review-host/diff-lines.d.ts +16 -0
  416. package/dist/providers/review-host/diff-lines.js +59 -0
  417. package/dist/providers/review-host/github-events.d.ts +6 -0
  418. package/dist/providers/review-host/github-events.js +226 -0
  419. package/dist/providers/review-host/github-user-auth.d.ts +38 -0
  420. package/dist/providers/review-host/github-user-auth.js +128 -0
  421. package/dist/providers/review-host/github.d.ts +57 -0
  422. package/dist/providers/review-host/github.js +568 -0
  423. package/dist/providers/review-host/index.d.ts +12 -0
  424. package/dist/providers/review-host/index.js +30 -0
  425. package/dist/providers/review-host/review-format.d.ts +19 -0
  426. package/dist/providers/review-host/review-format.js +59 -0
  427. package/dist/providers/review-host/types.d.ts +309 -0
  428. package/dist/providers/review-host/types.js +24 -0
  429. package/dist/providers/vcs/git.d.ts +16 -6
  430. package/dist/providers/vcs/git.js +78 -34
  431. package/dist/providers/vcs/github.d.ts +94 -3
  432. package/dist/providers/vcs/github.js +223 -17
  433. package/dist/providers/vcs/types.d.ts +48 -4
  434. package/dist/quickstart/index.d.ts +2 -0
  435. package/dist/quickstart/index.js +36 -8
  436. package/dist/sandbox/fetch-policy.d.ts +20 -2
  437. package/dist/sandbox/fetch-policy.js +64 -3
  438. package/dist/sandbox/host-functions.d.ts +9 -1
  439. package/dist/sandbox/host-functions.js +12 -5
  440. package/dist/serve.js +8 -2
  441. package/dist/viewer/api-schema.d.ts +2757 -0
  442. package/dist/viewer/api-schema.js +165 -0
  443. package/dist/viewer/build-schemas.d.ts +2 -0
  444. package/dist/viewer/build-schemas.js +18 -0
  445. package/dist/viewer/event-bus.d.ts +38 -0
  446. package/dist/viewer/event-bus.js +232 -0
  447. package/dist/viewer/graph.d.ts +40 -0
  448. package/dist/viewer/graph.js +243 -0
  449. package/dist/viewer/http.d.ts +30 -0
  450. package/dist/viewer/http.js +133 -0
  451. package/dist/viewer/run-detail.d.ts +4 -0
  452. package/dist/viewer/run-detail.js +61 -0
  453. package/dist/wardby-bin.js +11 -0
  454. package/docs/README.md +40 -0
  455. package/docs/agent-recipes.md +383 -0
  456. package/docs/architecture-runtime.md +90 -0
  457. package/docs/assets/brand/wardby-icon-512.png +0 -0
  458. package/docs/assets/brand/wardby-icon.svg +16 -0
  459. package/docs/assets/brand/wardby-mascot-profile-512.png +0 -0
  460. package/docs/assets/brand/wardby-mascot.png +0 -0
  461. package/docs/assets/brand/wardby-mascot.svg +5 -0
  462. package/docs/assets/wardby-workflow.svg +106 -0
  463. package/docs/code-review-agents.md +508 -0
  464. package/docs/coding-agent-setup.md +175 -0
  465. package/docs/coding-packages.md +455 -0
  466. package/docs/coding-services.md +300 -0
  467. package/docs/coding-worker-byo-images.md +98 -0
  468. package/docs/coding-worker-isolation.md +1068 -0
  469. package/docs/getting-started-gke.md +632 -0
  470. package/docs/getting-started-identity-provider.md +319 -0
  471. package/docs/getting-started.md +147 -0
  472. package/docs/jira-agents.md +649 -0
  473. package/docs/knowledge.md +387 -0
  474. package/docs/models.md +221 -0
  475. package/docs/observability.md +53 -0
  476. package/docs/release-verification.md +66 -0
  477. package/docs/security-deployment.md +667 -0
  478. package/docs/viewer-api.md +142 -0
  479. package/help/admin-viewer.md +39 -0
  480. package/help/agent-recipes.md +173 -0
  481. package/help/architecture-agent.md +189 -0
  482. package/help/builder-agent.md +80 -0
  483. package/help/code-review-agents.md +37 -0
  484. package/help/coding-packages.md +31 -0
  485. package/help/coding-services.md +71 -0
  486. package/help/cost-attribution.md +67 -0
  487. package/help/creating-agents.md +90 -0
  488. package/help/deploy-gke.md +45 -0
  489. package/help/deployment-targets.md +39 -0
  490. package/help/errors/budget-group-exhausted.md +25 -0
  491. package/help/errors/docker-isolation-unsupported.md +26 -0
  492. package/help/errors/model-unavailable.md +63 -0
  493. package/help/errors/protected-path.md +45 -0
  494. package/help/errors/repo-access.md +27 -0
  495. package/help/errors/service-declaration-invalid.md +27 -0
  496. package/help/errors/service-declaration-unavailable.md +25 -0
  497. package/help/errors/service-launcher-unsupported.md +30 -0
  498. package/help/errors/service-not-allowed.md +27 -0
  499. package/help/errors/service-unknown.md +23 -0
  500. package/help/errors/service-unready.md +49 -0
  501. package/help/getting-started.md +32 -0
  502. package/help/github.md +48 -0
  503. package/help/identity-and-access.md +44 -0
  504. package/help/jira.md +135 -0
  505. package/help/knowledge.md +47 -0
  506. package/help/mcp.md +30 -0
  507. package/help/models.md +90 -0
  508. package/help/native-capabilities.md +30 -0
  509. package/help/observability.md +41 -0
  510. package/help/operating-agents.md +36 -0
  511. package/help/security.md +27 -0
  512. package/help/troubleshooting/budgets.md +32 -0
  513. package/help/troubleshooting/coding-workers.md +47 -0
  514. package/help/troubleshooting/repository-access.md +27 -0
  515. package/package.json +14 -3
  516. package/prisma/migrations/20260925010000_coding_collect_exclude/migration.sql +8 -0
  517. package/prisma/migrations/20260925015000_allowed_egress_default/migration.sql +8 -0
  518. package/prisma/migrations/20260925020000_coding_package_registry/migration.sql +55 -0
  519. package/prisma/migrations/20260925030000_tool_name_per_owner/migration.sql +11 -0
  520. package/prisma/migrations/20260926010000_run_trigger_host_event/migration.sql +7 -0
  521. package/prisma/migrations/20260926020000_code_review_hosts/migration.sql +53 -0
  522. package/prisma/migrations/20260926030000_auth_user_roles/migration.sql +9 -0
  523. package/prisma/migrations/20260926040000_agent_effort/migration.sql +6 -0
  524. package/prisma/migrations/20260926050000_registry_lockfile_plan/migration.sql +32 -0
  525. package/prisma/migrations/20260926050000_repo_access_authorization/migration.sql +82 -0
  526. package/prisma/migrations/20260926060000_registry_plan_refusal/migration.sql +19 -0
  527. package/prisma/migrations/20260926100000_registry_plan_refusal_published_at/migration.sql +5 -0
  528. package/prisma/migrations/20260926190000_run_host_status/migration.sql +18 -0
  529. package/prisma/migrations/20260926210000_run_host_status_at_dispatch/migration.sql +5 -0
  530. package/prisma/migrations/20260927010000_resource_grants/migration.sql +72 -0
  531. package/prisma/migrations/20260927020000_proxy_session_budget_exhausted/migration.sql +3 -0
  532. package/prisma/migrations/20260927030000_coding_debug_trace/migration.sql +4 -0
  533. package/prisma/migrations/20260927040000_proxy_session_upstream_failure/migration.sql +3 -0
  534. package/prisma/migrations/20260927050000_coding_run_services/migration.sql +74 -0
  535. package/prisma/migrations/20260928000000_coding_run_tool_image/migration.sql +5 -0
  536. package/prisma/migrations/20260930000000_jira_issue_projects/migration.sql +34 -0
  537. package/prisma/migrations/20261001000000_jira_phase2_allowlists/migration.sql +3 -0
  538. package/prisma/migrations/20261001010000_jira_link_types_allowlist/migration.sql +2 -0
  539. package/prisma/migrations/20261002000000_jira_coding_bridge/migration.sql +28 -0
  540. package/prisma/migrations/20261002010000_jira_issue_creation/migration.sql +25 -0
  541. package/prisma/migrations/20261003000000_issue_cost_attribution/migration.sql +56 -0
  542. package/prisma/migrations/20261003010000_coding_run_service_status/migration.sql +23 -0
  543. package/prisma/migrations/20261003020000_viewer_notify/migration.sql +54 -0
  544. package/prisma/migrations/20261003030000_viewer_notify_fixes/migration.sql +47 -0
  545. package/prisma/migrations/20261003040000_viewer_indexes/migration.sql +12 -0
  546. package/prisma/migrations/20261004000000_model_catalog/migration.sql +26 -0
  547. package/prisma/schema.prisma +663 -21
  548. package/dist/mcp/tools/models.d.ts +0 -8
  549. package/dist/mcp/tools/models.js +0 -15
  550. package/dist/providers/llm/pricing-anthropic.d.ts +0 -4
  551. package/dist/providers/llm/pricing-anthropic.js +0 -30
  552. package/dist/providers/llm/pricing-bedrock-claude.d.ts +0 -12
  553. package/dist/providers/llm/pricing-bedrock-claude.js +0 -37
  554. package/dist/providers/llm/pricing.d.ts +0 -30
  555. package/dist/providers/llm/pricing.js +0 -74
@@ -0,0 +1,32 @@
1
+ ---
2
+ id: troubleshooting/budgets
3
+ title: Troubleshoot budgets and reservations
4
+ summary: Diagnose run refusals caused by an exhausted agent, shared budget group, or sub-agent run tree.
5
+ audience: operator
6
+ tags: [budgets, reservations, refusals, scheduling]
7
+ appliesTo: >=0.2.1
8
+ ---
9
+
10
+ # Troubleshoot budgets and reservations
11
+
12
+ Wardby reserves budget when it dispatches a run. The reservation is limited by
13
+ the agent's `budgetUsd`, the remaining shared daily, weekly, or monthly budget
14
+ group capacity, and the remaining parent run-tree capacity for a sub-agent.
15
+
16
+ When no capacity remains, Wardby records the run as refused and does not start
17
+ a worker. Common errors include `budget_group_exhausted:day`,
18
+ `budget_group_exhausted:week`, `budget_group_exhausted:month`, and
19
+ `run_tree_exhausted`.
20
+
21
+ Inspect the agent, its budget group, and recent runs before increasing a limit.
22
+ In-progress runs retain their unspent reservation, so overlapping scheduled,
23
+ webhook, and manual runs share one cap rather than each assuming the full
24
+ remaining balance.
25
+
26
+ A run's spend is recorded as it goes, not only when it finishes. A sub-agent
27
+ dispatched partway through a run therefore gets the run tree's capacity minus
28
+ what the parent (and any earlier sub-agents) have already spent, so a parent
29
+ that spends heavily before delegating can leave a sub-agent refused with
30
+ `run_tree_exhausted`.
31
+
32
+ For a shared-group refusal, read [Budget group exhausted](../errors/budget-group-exhausted.md).
@@ -0,0 +1,47 @@
1
+ ---
2
+ id: troubleshooting/coding-workers
3
+ title: Troubleshoot coding workers
4
+ summary: Investigate coding-worker setup, isolation preflight, and safe failure handling.
5
+ audience: operator
6
+ tags: [coding-agents, docker, kubernetes, isolation, services]
7
+ appliesTo: >=0.2.1
8
+ ---
9
+
10
+ # Troubleshoot coding workers
11
+
12
+ Before enabling a coding agent, configure an immutable worker image, the
13
+ trusted coding proxy, a scoped GitHub App installation, and the selected job
14
+ launcher. Run `wardby coding preflight` after changing the Docker or Kubernetes
15
+ configuration.
16
+
17
+ Wardby refuses to weaken an isolation profile when a required host feature,
18
+ network setting, mount, environment, or cleanup guarantee cannot be verified.
19
+ Investigate the host configuration instead of bypassing the refusal.
20
+
21
+ Codex and Claude Code workers have different supported launcher combinations.
22
+ Review the deployment guide for your target before assigning a coding profile.
23
+
24
+ For the specific isolation refusal, read [Coding-worker isolation unavailable](../errors/docker-isolation-unsupported.md).
25
+
26
+ ## Service refusals and failures
27
+
28
+ A repository can declare services such as PostgreSQL in `.wardby/services.yaml`
29
+ on its base branch. Wardby checks the declaration, the service catalog, and the
30
+ agent's `codingProfile.services` before a run starts, and refuses the run with a
31
+ `service_*` code when they disagree. The run's `error` (from `get_run`) is the
32
+ code followed by a sentence the requester also sees on the run's status comment.
33
+
34
+ - [`service_declaration_invalid`](../errors/service-declaration-invalid.md):
35
+ the file on the base branch is not a valid declaration.
36
+ - [`service_declaration_unavailable`](../errors/service-declaration-unavailable.md):
37
+ Wardby could not read the file through the GitHub App.
38
+ - [`service_unknown`](../errors/service-unknown.md): the catalog has no such
39
+ name and version.
40
+ - [`service_not_allowed`](../errors/service-not-allowed.md): the agent does not
41
+ allow that service.
42
+ - [`service_launcher_unsupported`](../errors/service-launcher-unsupported.md):
43
+ services need the Kubernetes or Docker job launcher.
44
+ - [`service_unready`](../errors/service-unready.md): the run started but a
45
+ service never became ready (launcher error `coding_service_unready:<name>`).
46
+
47
+ See [Coding services](../coding-services.md).
@@ -0,0 +1,27 @@
1
+ ---
2
+ id: troubleshooting/repository-access
3
+ title: Troubleshoot repository access
4
+ summary: Diagnose why Wardby refused repository work or could not verify the agent owner's GitHub access.
5
+ audience: operator
6
+ tags: [github, repositories, authorization, refusals]
7
+ appliesTo: >=0.2.1
8
+ ---
9
+
10
+ # Troubleshoot repository access
11
+
12
+ Wardby checks that the owner of a coding or repository-linked agent has the
13
+ required current GitHub permission. A coding repository requires write access;
14
+ a read-only repository link requires read access. An administrator can record a
15
+ repository approval when no individual's access is appropriate.
16
+
17
+ `repo_access` means the current owner no longer has the required permission,
18
+ has unlinked their account, or the repository was not authorized. Restore the
19
+ owner's GitHub link and permission, or have an administrator review and record
20
+ the appropriate repository authorization.
21
+
22
+ `repo_access_unavailable` means Wardby could not verify GitHub access after its
23
+ retry. Do not treat it as permission granted: resolve the GitHub/API condition
24
+ and re-run the work later.
25
+
26
+ Read [Repository access refused](../errors/repo-access.md) for the safe
27
+ remediation sequence.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wardby/cli",
3
- "version": "0.2.1",
3
+ "version": "0.4.0",
4
4
  "description": "Self-hosted control plane for budget-guarded AI agents.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/wardby/wardby#readme",
@@ -35,8 +35,10 @@
35
35
  ".env.example",
36
36
  "NOTICE",
37
37
  "bin/",
38
+ "docs/",
38
39
  "deploy/local/docker-compose.yml",
39
40
  "dist/",
41
+ "help/",
40
42
  "prisma/migrations/",
41
43
  "prisma/migrate.config.mjs",
42
44
  "prisma/schema.prisma",
@@ -52,7 +54,9 @@
52
54
  "format": "prettier --write .",
53
55
  "format:check": "prettier --check .",
54
56
  "build:vendor": "node scripts/build-sandbox-vendor.mjs",
55
- "build": "npm run build:vendor && PRISMA_HIDE_UPDATE_MESSAGE=1 prisma generate && tsc -p tsconfig.build.json",
57
+ "build:help": "tsx src/help/build.ts",
58
+ "build:viewer-schemas": "tsx src/viewer/build-schemas.ts",
59
+ "build": "npm run build:vendor && PRISMA_HIDE_UPDATE_MESSAGE=1 prisma generate && tsc -p tsconfig.build.json && npm run build:help",
56
60
  "prepare": "npm run build:vendor && PRISMA_HIDE_UPDATE_MESSAGE=1 prisma generate",
57
61
  "prepack": "npm run build",
58
62
  "cli": "tsx --conditions=wardby-source src/cli.ts",
@@ -63,6 +67,7 @@
63
67
  "test:kubernetes": "WARDBY_KUBERNETES_TEST=1 vitest run src/providers/jobs/kubernetes.integration.test.ts",
64
68
  "prisma:generate": "PRISMA_HIDE_UPDATE_MESSAGE=1 prisma generate",
65
69
  "prisma:migrate": "prisma migrate deploy",
70
+ "dbos:migrate": "dbos schema \"$DATABASE_URL\"",
66
71
  "db:up": "docker compose -f deploy/local/docker-compose.yml up -d",
67
72
  "db:down": "docker compose -f deploy/local/docker-compose.yml down",
68
73
  "coding:local:up": "docker compose --env-file .env.local -f deploy/local/docker-compose.yml -f deploy/local/docker-compose.phase5.yml up --build -d coding-proxy",
@@ -76,7 +81,8 @@
76
81
  "verify:phase5": "npm run typecheck && npm run test:phase5 && npm run build && npm run worker:image:policy",
77
82
  "test:docker-isolation": "node scripts/docker-isolation-acceptance.mjs",
78
83
  "test:docker-job": "node scripts/docker-job-acceptance.mjs",
79
- "claude:images:local": "docker build -f src/claude-coding-worker/Dockerfile -t wardby-claude-coding-worker:phase5 . && docker build -f src/claude-tool-runner/Dockerfile -t wardby-claude-tool-runner:phase5 .",
84
+ "test:docker-services": "node scripts/docker-services-acceptance.mjs",
85
+ "claude:images:local": "docker build -f src/claude-coding-worker/Dockerfile -t wardby-claude-coding-worker:phase5 . && docker build -f src/claude-tool-runner/Dockerfile -t wardby-claude-tool-runner:phase5 . && docker build -f src/claude-tool-runner/Dockerfile --target node-python -t wardby-claude-tool-runner:phase5-node-python .",
80
86
  "test:claude-compatibility": "docker build -f src/claude-coding-worker/Dockerfile.compatibility -t wardby-claude-compat:phase5 . && docker run --rm wardby-claude-compat:phase5",
81
87
  "test:claude-docker": "node scripts/claude-docker-acceptance.mjs",
82
88
  "test:production-boundary": "node scripts/production-boundary-policy.mjs",
@@ -94,9 +100,11 @@
94
100
  "@prisma/adapter-pg": "7.10.0",
95
101
  "@prisma/client": "7.10.0",
96
102
  "@prometheus-io/client": "^0.16.1",
103
+ "@renovatebot/pep440": "^5.0.1",
97
104
  "croner": "^10.0.1",
98
105
  "dotenv-flow": "^4.1.0",
99
106
  "fast-xml-parser": "^5.11.1",
107
+ "fflate": "^0.8.3",
100
108
  "gpt-tokenizer": "^2.5.0",
101
109
  "jose": "^6.2.12",
102
110
  "node-html-parser": "^9.0.3",
@@ -105,8 +113,10 @@
105
113
  "pg": "8.23.0",
106
114
  "pino": "^9.14.0",
107
115
  "quickjs-emscripten": "^0.32.0",
116
+ "semver": "^7.8.5",
108
117
  "tar-stream": "^3.2.1",
109
118
  "undici": "^8.7.0",
119
+ "yaml": "^2.9.1",
110
120
  "zod": "^3.25.76",
111
121
  "zod-to-json-schema": "^3.25.2"
112
122
  },
@@ -116,6 +126,7 @@
116
126
  "@types/node": "^24.0.0",
117
127
  "@types/papaparse": "^5.5.2",
118
128
  "@types/pg": "8.23.1",
129
+ "@types/semver": "^7.8.0",
119
130
  "@types/tar-stream": "^3.1.4",
120
131
  "esbuild": "^0.28.2",
121
132
  "eslint": "^10.10.0",
@@ -0,0 +1,8 @@
1
+ -- Additive: per-agent workspace paths never collected from a coding run. See
2
+ -- docs/superpowers/specs/2026-09-25-coding-package-registry-design.md §4.
3
+
4
+ -- AlterTable
5
+ ALTER TABLE "CodingAgentProfile" ADD COLUMN "collectExclude" JSONB NOT NULL DEFAULT '[]';
6
+
7
+ -- AlterTable
8
+ ALTER TABLE "CodingRun" ADD COLUMN "collectExclude" JSONB NOT NULL DEFAULT '[]';
@@ -0,0 +1,8 @@
1
+ -- allowedEgress was stored but never enforced and is no longer written. A default
2
+ -- lets new rows omit it; the columns are dropped in a later release.
3
+
4
+ -- AlterTable
5
+ ALTER TABLE "CodingAgentProfile" ALTER COLUMN "allowedEgress" SET DEFAULT '[]';
6
+
7
+ -- AlterTable
8
+ ALTER TABLE "CodingRun" ALTER COLUMN "allowedEgress" SET DEFAULT '[]';
@@ -0,0 +1,55 @@
1
+ -- Additive: coding package registry. See
2
+ -- docs/superpowers/specs/2026-09-25-coding-package-registry-design.md.
3
+
4
+ -- CreateEnum
5
+ CREATE TYPE "RegistryFetchOutcome" AS ENUM ('served', 'refused');
6
+
7
+ -- AlterTable
8
+ ALTER TABLE "CodingAgentProfile" ADD COLUMN "packageAllowlist" JSONB NOT NULL DEFAULT '{}',
9
+ ADD COLUMN "packagePolicy" JSONB NOT NULL DEFAULT '{}';
10
+
11
+ -- AlterTable
12
+ ALTER TABLE "CodingRun" ADD COLUMN "packageAllowlist" JSONB NOT NULL DEFAULT '{}',
13
+ ADD COLUMN "packagePolicy" JSONB NOT NULL DEFAULT '{}';
14
+
15
+ -- AlterTable
16
+ ALTER TABLE "CodingProxySession" ADD COLUMN "registryTokenHash" TEXT;
17
+
18
+ -- CreateTable
19
+ CREATE TABLE "RegistryAllowance" (
20
+ "runId" TEXT NOT NULL,
21
+ "ecosystem" TEXT NOT NULL,
22
+ "name" TEXT NOT NULL,
23
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
24
+
25
+ CONSTRAINT "RegistryAllowance_pkey" PRIMARY KEY ("runId","ecosystem","name")
26
+ );
27
+
28
+ -- CreateTable
29
+ CREATE TABLE "RegistryFetch" (
30
+ "id" TEXT NOT NULL,
31
+ "runId" TEXT NOT NULL,
32
+ "ecosystem" TEXT NOT NULL,
33
+ "name" TEXT NOT NULL,
34
+ "version" TEXT,
35
+ "filename" TEXT,
36
+ "integrity" TEXT,
37
+ "sizeBytes" INTEGER,
38
+ "outcome" "RegistryFetchOutcome" NOT NULL,
39
+ "reason" TEXT,
40
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
41
+
42
+ CONSTRAINT "RegistryFetch_pkey" PRIMARY KEY ("id")
43
+ );
44
+
45
+ -- CreateIndex
46
+ CREATE UNIQUE INDEX "CodingProxySession_registryTokenHash_key" ON "CodingProxySession"("registryTokenHash");
47
+
48
+ -- CreateIndex
49
+ CREATE INDEX "RegistryFetch_runId_createdAt_idx" ON "RegistryFetch"("runId", "createdAt");
50
+
51
+ -- AddForeignKey
52
+ ALTER TABLE "RegistryAllowance" ADD CONSTRAINT "RegistryAllowance_runId_fkey" FOREIGN KEY ("runId") REFERENCES "CodingRun"("runId") ON DELETE CASCADE ON UPDATE CASCADE;
53
+
54
+ -- AddForeignKey
55
+ ALTER TABLE "RegistryFetch" ADD CONSTRAINT "RegistryFetch_runId_fkey" FOREIGN KEY ("runId") REFERENCES "CodingRun"("runId") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,11 @@
1
+ -- Tool names become unique per owner instead of globally, matching
2
+ -- BudgetGroup / Datastore / Secret. Safe on existing data: global uniqueness
3
+ -- already implies per-owner uniqueness. As with those models, PostgreSQL
4
+ -- treats NULLs as distinct, so public (null-owner) tools are not deduplicated
5
+ -- by this index; `wardby tool create` checks that case in the application.
6
+
7
+ -- DropIndex
8
+ DROP INDEX "Tool_name_key";
9
+
10
+ -- CreateIndex
11
+ CREATE UNIQUE INDEX "Tool_ownerId_name_key" ON "Tool"("ownerId", "name");
@@ -0,0 +1,7 @@
1
+ -- Additive: a run started by a code-review host event (GitHub App webhook).
2
+ -- Its own migration: Postgres cannot use a newly added enum value in the
3
+ -- same transaction that adds it. See
4
+ -- docs/private/2026-09-25-code-review-host-design.md §4.
5
+
6
+ -- AlterEnum
7
+ ALTER TYPE "RunTrigger" ADD VALUE 'host_event';
@@ -0,0 +1,53 @@
1
+ -- Additive: repository links for native agents, the check a run owns, and
2
+ -- host webhook delivery de-duplication. See
3
+ -- docs/private/2026-09-25-code-review-host-design.md §4.
4
+
5
+ -- CreateTable
6
+ CREATE TABLE "AgentRepository" (
7
+ "id" TEXT NOT NULL,
8
+ "agentId" TEXT NOT NULL,
9
+ "provider" TEXT NOT NULL,
10
+ "repository" TEXT NOT NULL,
11
+ "access" TEXT NOT NULL,
12
+ "triggers" TEXT[] DEFAULT ARRAY[]::TEXT[],
13
+ "checkName" TEXT,
14
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
15
+
16
+ CONSTRAINT "AgentRepository_pkey" PRIMARY KEY ("id")
17
+ );
18
+
19
+ -- CreateTable
20
+ CREATE TABLE "RunHostCheck" (
21
+ "runId" TEXT NOT NULL,
22
+ "provider" TEXT NOT NULL,
23
+ "repository" TEXT NOT NULL,
24
+ "checkId" TEXT NOT NULL,
25
+ "headSha" TEXT NOT NULL,
26
+ "completedAt" TIMESTAMP(3),
27
+
28
+ CONSTRAINT "RunHostCheck_pkey" PRIMARY KEY ("runId")
29
+ );
30
+
31
+ -- CreateTable
32
+ CREATE TABLE "HostEventDelivery" (
33
+ "provider" TEXT NOT NULL,
34
+ "deliveryId" TEXT NOT NULL,
35
+ "receivedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
36
+
37
+ CONSTRAINT "HostEventDelivery_pkey" PRIMARY KEY ("provider","deliveryId")
38
+ );
39
+
40
+ -- CreateIndex
41
+ CREATE UNIQUE INDEX "AgentRepository_agentId_provider_repository_key" ON "AgentRepository"("agentId", "provider", "repository");
42
+
43
+ -- CreateIndex
44
+ CREATE INDEX "AgentRepository_provider_repository_idx" ON "AgentRepository"("provider", "repository");
45
+
46
+ -- CreateIndex
47
+ CREATE INDEX "HostEventDelivery_receivedAt_idx" ON "HostEventDelivery"("receivedAt");
48
+
49
+ -- AddForeignKey
50
+ ALTER TABLE "AgentRepository" ADD CONSTRAINT "AgentRepository_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE CASCADE ON UPDATE CASCADE;
51
+
52
+ -- AddForeignKey
53
+ ALTER TABLE "RunHostCheck" ADD CONSTRAINT "RunHostCheck_runId_fkey" FOREIGN KEY ("runId") REFERENCES "Run"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,9 @@
1
+ -- Additive: roles for self-hosted users (security finding A1). A privileged
2
+ -- operation (make_owner, setting workerImageRef, package approval) needs its
3
+ -- scope on the token AND one of the user's roles granting it, checked on
4
+ -- every request. Role names are validated in code (admin, package-approver).
5
+ -- Existing users get no roles (member) - an operator re-grants admin with
6
+ -- `wardby auth user grant --subject <subject> --role admin`.
7
+
8
+ -- AlterTable
9
+ ALTER TABLE "AuthUser" ADD COLUMN "roles" TEXT[] DEFAULT ARRAY[]::TEXT[];
@@ -0,0 +1,6 @@
1
+ -- Additive: per-agent reasoning effort for native agents. Nullable, so every
2
+ -- existing agent keeps the provider's default. Levels are validated in code
3
+ -- against the agent's model (low, medium, high, xhigh, max), not a DB enum.
4
+
5
+ -- AlterTable
6
+ ALTER TABLE "Agent" ADD COLUMN "effort" TEXT;
@@ -0,0 +1,32 @@
1
+ -- Additive: npm lockfile verification (POST /registry/npm/-/plan). See
2
+ -- docs/coding-packages.md. Immutable per-version facts read from the
3
+ -- registry, and the exact versions a run's lockfile plan approved.
4
+
5
+ -- CreateTable
6
+ CREATE TABLE "RegistryVersionFact" (
7
+ "ecosystem" TEXT NOT NULL,
8
+ "name" TEXT NOT NULL,
9
+ "version" TEXT NOT NULL,
10
+ "publishedAt" TIMESTAMP(3) NOT NULL,
11
+ "integrity" TEXT NOT NULL,
12
+ "downloadUrl" TEXT NOT NULL,
13
+ "dependencies" JSONB NOT NULL,
14
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
15
+
16
+ CONSTRAINT "RegistryVersionFact_pkey" PRIMARY KEY ("ecosystem","name","version")
17
+ );
18
+
19
+ -- CreateTable
20
+ CREATE TABLE "RegistryApprovedVersion" (
21
+ "runId" TEXT NOT NULL,
22
+ "ecosystem" TEXT NOT NULL,
23
+ "name" TEXT NOT NULL,
24
+ "version" TEXT NOT NULL,
25
+ "integrity" TEXT NOT NULL,
26
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
27
+
28
+ CONSTRAINT "RegistryApprovedVersion_pkey" PRIMARY KEY ("runId","ecosystem","name","version")
29
+ );
30
+
31
+ -- AddForeignKey
32
+ ALTER TABLE "RegistryApprovedVersion" ADD CONSTRAINT "RegistryApprovedVersion_runId_fkey" FOREIGN KEY ("runId") REFERENCES "CodingRun"("runId") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,82 @@
1
+ -- Repository access authorization (security findings H5-1/A3/C3-2, H5-2,
2
+ -- E-08/H5-4). A principal can give an agent authority over a repository only
3
+ -- through its own verified host identity's access, or an explicit, recorded
4
+ -- admin approval; the authorization is stamped on the row that grants it.
5
+ -- See docs/private/2026-09-26-repo-access-authorization-spec-and-plan.md §5.
6
+
7
+ -- CreateTable
8
+ CREATE TABLE "HostIdentity" (
9
+ "principalId" TEXT NOT NULL,
10
+ "provider" TEXT NOT NULL,
11
+ "hostUserId" TEXT NOT NULL,
12
+ "login" TEXT NOT NULL,
13
+ "linkedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
14
+ "updatedAt" TIMESTAMP(3) NOT NULL,
15
+
16
+ CONSTRAINT "HostIdentity_pkey" PRIMARY KEY ("principalId","provider")
17
+ );
18
+
19
+ -- CreateTable
20
+ CREATE TABLE "HostIdentityLinkRequest" (
21
+ "id" TEXT NOT NULL,
22
+ "principalId" TEXT NOT NULL,
23
+ "provider" TEXT NOT NULL,
24
+ "stateHash" TEXT NOT NULL,
25
+ "codeVerifier" TEXT NOT NULL,
26
+ "hostUserId" TEXT,
27
+ "login" TEXT,
28
+ "confirmHash" TEXT,
29
+ "attempts" INTEGER NOT NULL DEFAULT 0,
30
+ "callbackAt" TIMESTAMP(3),
31
+ "expiresAt" TIMESTAMP(3) NOT NULL,
32
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
33
+
34
+ CONSTRAINT "HostIdentityLinkRequest_pkey" PRIMARY KEY ("id")
35
+ );
36
+
37
+ -- CreateIndex
38
+ CREATE UNIQUE INDEX "HostIdentity_provider_hostUserId_key" ON "HostIdentity"("provider", "hostUserId");
39
+
40
+ -- CreateIndex
41
+ CREATE UNIQUE INDEX "HostIdentityLinkRequest_stateHash_key" ON "HostIdentityLinkRequest"("stateHash");
42
+
43
+ -- CreateIndex
44
+ CREATE INDEX "HostIdentityLinkRequest_principalId_idx" ON "HostIdentityLinkRequest"("principalId");
45
+
46
+ -- CreateIndex
47
+ CREATE INDEX "HostIdentityLinkRequest_expiresAt_idx" ON "HostIdentityLinkRequest"("expiresAt");
48
+
49
+ -- AddForeignKey
50
+ ALTER TABLE "HostIdentity" ADD CONSTRAINT "HostIdentity_principalId_fkey" FOREIGN KEY ("principalId") REFERENCES "Principal"("id") ON DELETE CASCADE ON UPDATE CASCADE;
51
+
52
+ -- AddForeignKey
53
+ ALTER TABLE "HostIdentityLinkRequest" ADD CONSTRAINT "HostIdentityLinkRequest_principalId_fkey" FOREIGN KEY ("principalId") REFERENCES "Principal"("id") ON DELETE CASCADE ON UPDATE CASCADE;
54
+
55
+ -- AlterTable
56
+ ALTER TABLE "AgentRepository" ADD COLUMN "authorizedAt" TIMESTAMP(3),
57
+ ADD COLUMN "authorizedById" TEXT,
58
+ ADD COLUMN "authorizedVia" TEXT;
59
+
60
+ -- AlterTable
61
+ ALTER TABLE "CodingAgentProfile" ADD COLUMN "repositoryAuthorizedAt" TIMESTAMP(3),
62
+ ADD COLUMN "repositoryAuthorizedById" TEXT,
63
+ ADD COLUMN "repositoryAuthorizedVia" TEXT;
64
+
65
+ -- AlterTable
66
+ ALTER TABLE "RunHostCheck" ADD COLUMN "prNumber" INTEGER;
67
+
68
+ -- Backfill: every existing assignment is the operator's own and keeps
69
+ -- working ("grandfathered", not re-checked at use). New or changed
70
+ -- assignments go through the check.
71
+ UPDATE "AgentRepository" SET "authorizedVia" = 'grandfathered', "authorizedAt" = CURRENT_TIMESTAMP;
72
+ UPDATE "CodingAgentProfile" SET "repositoryAuthorizedVia" = 'grandfathered', "repositoryAuthorizedAt" = CURRENT_TIMESTAMP;
73
+
74
+ -- Deliberate: a check name is only meaningful with the pull_request trigger
75
+ -- (a check is only ever published for the PR a run was dispatched for), so
76
+ -- names on other links are cleared before the name becomes unique per
77
+ -- repository. Existing pull_request links were already unique by name.
78
+ UPDATE "AgentRepository" SET "checkName" = NULL
79
+ WHERE "triggers" IS NULL OR NOT ('pull_request' = ANY("triggers"));
80
+
81
+ -- CreateIndex
82
+ CREATE UNIQUE INDEX "AgentRepository_provider_repository_checkName_key" ON "AgentRepository"("provider", "repository", "checkName");
@@ -0,0 +1,19 @@
1
+ -- Additive: the exact versions a run's lockfile plan definitively refused,
2
+ -- so a download of one is answered from the plan (no graph walk). See
3
+ -- docs/coding-packages.md.
4
+
5
+ -- CreateTable
6
+ CREATE TABLE "RegistryPlanRefusal" (
7
+ "runId" TEXT NOT NULL,
8
+ "ecosystem" TEXT NOT NULL,
9
+ "name" TEXT NOT NULL,
10
+ "version" TEXT NOT NULL,
11
+ "code" TEXT NOT NULL,
12
+ "reason" TEXT NOT NULL,
13
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
14
+
15
+ CONSTRAINT "RegistryPlanRefusal_pkey" PRIMARY KEY ("runId","ecosystem","name","version")
16
+ );
17
+
18
+ -- AddForeignKey
19
+ ALTER TABLE "RegistryPlanRefusal" ADD CONSTRAINT "RegistryPlanRefusal_runId_fkey" FOREIGN KEY ("runId") REFERENCES "CodingRun"("runId") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,5 @@
1
+ -- Additive: a too-new plan refusal keeps the version's publish time, so the
2
+ -- answer re-checks the age at answer time and the refusal lapses.
3
+
4
+ -- AlterTable
5
+ ALTER TABLE "RegistryPlanRefusal" ADD COLUMN "publishedAt" TIMESTAMP(3);
@@ -0,0 +1,18 @@
1
+ -- The status comment posted for a mention-started run, edited with its outcome.
2
+
3
+ -- CreateTable
4
+ CREATE TABLE "RunHostStatus" (
5
+ "runId" TEXT NOT NULL,
6
+ "provider" TEXT NOT NULL,
7
+ "repository" TEXT NOT NULL,
8
+ "number" INTEGER NOT NULL,
9
+ "commentKind" TEXT NOT NULL,
10
+ "commentId" TEXT NOT NULL,
11
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
12
+ "completedAt" TIMESTAMP(3),
13
+
14
+ CONSTRAINT "RunHostStatus_pkey" PRIMARY KEY ("runId")
15
+ );
16
+
17
+ -- AddForeignKey
18
+ ALTER TABLE "RunHostStatus" ADD CONSTRAINT "RunHostStatus_runId_fkey" FOREIGN KEY ("runId") REFERENCES "Run"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,5 @@
1
+ -- The status row is now written with the run, before its comment exists.
2
+
3
+ -- AlterTable
4
+ ALTER TABLE "RunHostStatus" ALTER COLUMN "commentId" DROP NOT NULL,
5
+ ADD COLUMN "replyToReviewCommentId" TEXT;
@@ -0,0 +1,72 @@
1
+ -- Resource sharing grants (A2/S2-2, N1, R2-1, A6). Replaces "null owner =
2
+ -- public and mutable by anyone" with explicit grants. See
3
+ -- docs/private/2026-09-26-resource-sharing-grants-spec-and-plan.md.
4
+ -- Needs PostgreSQL 13+ for gen_random_uuid() (core since 13).
5
+
6
+ -- CreateTable
7
+ CREATE TABLE "ResourceGrant" (
8
+ "id" TEXT NOT NULL,
9
+ "resourceType" TEXT NOT NULL,
10
+ "resourceId" TEXT NOT NULL,
11
+ "granteeKind" TEXT NOT NULL,
12
+ "granteePrincipalId" TEXT,
13
+ "granteeKey" TEXT NOT NULL,
14
+ "level" TEXT NOT NULL,
15
+ "source" TEXT NOT NULL DEFAULT 'owner',
16
+ "grantedById" TEXT,
17
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
18
+ "updatedAt" TIMESTAMP(3) NOT NULL,
19
+
20
+ CONSTRAINT "ResourceGrant_pkey" PRIMARY KEY ("id")
21
+ );
22
+
23
+ -- CreateIndex
24
+ CREATE UNIQUE INDEX "ResourceGrant_resourceType_resourceId_granteeKey_key" ON "ResourceGrant"("resourceType", "resourceId", "granteeKey");
25
+
26
+ -- CreateIndex
27
+ CREATE INDEX "ResourceGrant_granteeKey_resourceType_idx" ON "ResourceGrant"("granteeKey", "resourceType");
28
+
29
+ -- CreateIndex
30
+ CREATE INDEX "ResourceGrant_granteePrincipalId_idx" ON "ResourceGrant"("granteePrincipalId");
31
+
32
+ -- AddForeignKey
33
+ ALTER TABLE "ResourceGrant" ADD CONSTRAINT "ResourceGrant_granteePrincipalId_fkey" FOREIGN KEY ("granteePrincipalId") REFERENCES "Principal"("id") ON DELETE CASCADE ON UPDATE CASCADE;
34
+
35
+ -- Grantee shape. Not representable in schema.prisma (like DatastoreEntry_scope_xor,
36
+ -- 20260912040000_named_shared_datastores), so invisible to migrate diff.
37
+ ALTER TABLE "ResourceGrant" ADD CONSTRAINT "ResourceGrant_grantee_shape" CHECK (
38
+ ("granteeKind" = 'principal' AND "granteePrincipalId" IS NOT NULL
39
+ AND "granteeKey" = 'principal:' || "granteePrincipalId")
40
+ OR ("granteeKind" = 'everyone' AND "granteePrincipalId" IS NULL AND "granteeKey" = 'everyone')
41
+ );
42
+
43
+ -- AlterTable
44
+ ALTER TABLE "Run" ADD COLUMN "triggeredById" TEXT;
45
+
46
+ -- CreateIndex
47
+ CREATE INDEX "Run_agentId_triggeredById_idx" ON "Run"("agentId", "triggeredById");
48
+
49
+ -- AlterTable
50
+ ALTER TABLE "AgentTool" ADD COLUMN "attachedById" TEXT,
51
+ ADD COLUMN "capabilitiesGrantedById" TEXT;
52
+
53
+ -- Data: owner-less agents keep working at execute-for-everyone; nobody can edit them.
54
+ INSERT INTO "ResourceGrant" ("id", "resourceType", "resourceId", "granteeKind", "granteeKey", "level", "source", "updatedAt")
55
+ SELECT gen_random_uuid()::text, 'agent', a."id", 'everyone', 'everyone', 'execute', 'migration_public', CURRENT_TIMESTAMP
56
+ FROM "Agent" a WHERE a."ownerId" IS NULL;
57
+
58
+ -- Data: capabilities on an owned agent whose tool is the owner's or owner-less
59
+ -- were set by that owner (only the owner could attach to an owned agent, and
60
+ -- only its own or an owner-less tool), so they carry its consent. Every other
61
+ -- attachment stays unstamped = inert until the owner re-grants.
62
+ UPDATE "AgentTool" at
63
+ SET "capabilitiesGrantedById" = a."ownerId", "attachedById" = a."ownerId"
64
+ FROM "Agent" a, "Tool" t
65
+ WHERE a."id" = at."agentId" AND t."id" = at."toolId"
66
+ AND a."ownerId" IS NOT NULL
67
+ AND (t."ownerId" IS NULL OR t."ownerId" = a."ownerId");
68
+
69
+ -- Data: triggerer of historic runs, where a Task recorded it.
70
+ UPDATE "Run" r SET "triggeredById" = t."principalId"
71
+ FROM "Task" t
72
+ WHERE t."runId" = r."id" AND t."kind" = 'run' AND t."principalId" IS NOT NULL;
@@ -0,0 +1,3 @@
1
+ -- Record the first time the coding proxy refuses a session's request for
2
+ -- budget, so the run can be reported as out of budget rather than failed.
3
+ ALTER TABLE "CodingProxySession" ADD COLUMN "budgetExhaustedAt" TIMESTAMP(3);
@@ -0,0 +1,4 @@
1
+ -- Admin-requested debug trace for coding runs: the profile carries an expiry,
2
+ -- and each run records at dispatch whether it was traced.
3
+ ALTER TABLE "CodingAgentProfile" ADD COLUMN "debugTraceUntil" TIMESTAMP(3);
4
+ ALTER TABLE "CodingRun" ADD COLUMN "debugTrace" BOOLEAN NOT NULL DEFAULT false;
@@ -0,0 +1,3 @@
1
+ -- Record the first upstream failure code the coding proxy relays for a
2
+ -- session, so the run can be reported as refused by the model provider.
3
+ ALTER TABLE "CodingProxySession" ADD COLUMN "upstreamFailure" TEXT;