@wardby/cli 0.2.1 → 0.3.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 (407) hide show
  1. package/.env.example +34 -4
  2. package/README.md +41 -4
  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 +13 -4
  10. package/dist/cli.d.ts +1 -1
  11. package/dist/cli.js +219 -29
  12. package/dist/coding/collect-exclude.d.ts +25 -0
  13. package/dist/coding/collect-exclude.js +76 -0
  14. package/dist/coding/profile.d.ts +67 -22
  15. package/dist/coding/profile.js +58 -25
  16. package/dist/coding/protected-path-wording.d.ts +24 -0
  17. package/dist/coding/protected-path-wording.js +55 -0
  18. package/dist/coding/protected-paths.d.ts +31 -0
  19. package/dist/coding/protected-paths.js +48 -0
  20. package/dist/coding/protocol.d.ts +75 -4
  21. package/dist/coding/protocol.js +107 -7
  22. package/dist/coding/registry/adapters.d.ts +2 -0
  23. package/dist/coding/registry/adapters.js +9 -0
  24. package/dist/coding/registry/allowlist.d.ts +9 -0
  25. package/dist/coding/registry/allowlist.js +28 -0
  26. package/dist/coding/registry/json-scan.d.ts +55 -0
  27. package/dist/coding/registry/json-scan.js +191 -0
  28. package/dist/coding/registry/lockfiles.d.ts +6 -0
  29. package/dist/coding/registry/lockfiles.js +89 -0
  30. package/dist/coding/registry/npm-lockfile.d.ts +9 -0
  31. package/dist/coding/registry/npm-lockfile.js +73 -0
  32. package/dist/coding/registry/npm-plan.d.ts +29 -0
  33. package/dist/coding/registry/npm-plan.js +289 -0
  34. package/dist/coding/registry/npm.d.ts +7 -0
  35. package/dist/coding/registry/npm.js +252 -0
  36. package/dist/coding/registry/pypi.d.ts +4 -0
  37. package/dist/coding/registry/pypi.js +210 -0
  38. package/dist/coding/registry/report.d.ts +37 -0
  39. package/dist/coding/registry/report.js +31 -0
  40. package/dist/coding/registry/token.d.ts +4 -0
  41. package/dist/coding/registry/token.js +7 -0
  42. package/dist/coding/registry/types.d.ts +286 -0
  43. package/dist/coding/registry/types.js +19 -0
  44. package/dist/coding/registry/worker-config.d.ts +14 -0
  45. package/dist/coding/registry/worker-config.js +31 -0
  46. package/dist/coding/services/builtins.d.ts +22 -0
  47. package/dist/coding/services/builtins.js +85 -0
  48. package/dist/coding/services/catalog.d.ts +443 -0
  49. package/dist/coding/services/catalog.js +159 -0
  50. package/dist/coding/services/declaration.d.ts +11 -0
  51. package/dist/coding/services/declaration.js +114 -0
  52. package/dist/coding/services/note.d.ts +8 -0
  53. package/dist/coding/services/note.js +15 -0
  54. package/dist/coding/services/resolve.d.ts +25 -0
  55. package/dist/coding/services/resolve.js +50 -0
  56. package/dist/coding/services/wording.d.ts +25 -0
  57. package/dist/coding/services/wording.js +70 -0
  58. package/dist/coding-proxy/main.js +24 -4
  59. package/dist/coding-worker/artifact.d.ts +6 -0
  60. package/dist/coding-worker/debug-trace.d.ts +37 -0
  61. package/dist/coding-worker/debug-trace.js +117 -0
  62. package/dist/coding-worker/driver.d.ts +13 -1
  63. package/dist/coding-worker/driver.js +102 -13
  64. package/dist/coding-worker/errors.js +8 -0
  65. package/dist/coding-worker/main.js +10 -2
  66. package/dist/coding-worker/sdk.d.ts +2 -2
  67. package/dist/coding-worker/sdk.js +7 -2
  68. package/dist/coding-worker/types.d.ts +3 -0
  69. package/dist/config/providers.d.ts +41 -0
  70. package/dist/config/providers.js +66 -0
  71. package/dist/core/budget-groups.d.ts +108 -5
  72. package/dist/core/budget-groups.js +125 -19
  73. package/dist/core/budget-wording.d.ts +22 -0
  74. package/dist/core/budget-wording.js +55 -0
  75. package/dist/core/datastores.js +18 -2
  76. package/dist/core/db.d.ts +5 -1
  77. package/dist/core/db.js +8 -2
  78. package/dist/core/dispatch.d.ts +33 -6
  79. package/dist/core/dispatch.js +260 -43
  80. package/dist/core/engine-native.js +27 -10
  81. package/dist/core/grants.d.ts +86 -0
  82. package/dist/core/grants.js +126 -0
  83. package/dist/core/host-events.d.ts +49 -0
  84. package/dist/core/host-events.js +257 -0
  85. package/dist/core/host-identity-links.d.ts +54 -0
  86. package/dist/core/host-identity-links.js +189 -0
  87. package/dist/core/host-status.d.ts +61 -0
  88. package/dist/core/host-status.js +211 -0
  89. package/dist/core/in-flight-runs.d.ts +8 -0
  90. package/dist/core/in-flight-runs.js +56 -0
  91. package/dist/core/provider-wording.d.ts +12 -0
  92. package/dist/core/provider-wording.js +44 -0
  93. package/dist/core/reconciler.d.ts +38 -2
  94. package/dist/core/reconciler.js +86 -2
  95. package/dist/core/repo-access.d.ts +99 -0
  96. package/dist/core/repo-access.js +136 -0
  97. package/dist/core/review-host-checks.d.ts +11 -0
  98. package/dist/core/review-host-checks.js +41 -0
  99. package/dist/core/review-host-tools.d.ts +47 -0
  100. package/dist/core/review-host-tools.js +347 -0
  101. package/dist/core/run-heartbeat.d.ts +27 -0
  102. package/dist/core/run-heartbeat.js +54 -0
  103. package/dist/core/runner.d.ts +30 -8
  104. package/dist/core/runner.js +237 -40
  105. package/dist/core/secrets.d.ts +11 -2
  106. package/dist/core/secrets.js +25 -6
  107. package/dist/core/subagent-memory-tools.d.ts +1 -1
  108. package/dist/core/subagent-memory-tools.js +16 -3
  109. package/dist/core/tool-admin.d.ts +81 -0
  110. package/dist/core/tool-admin.js +129 -0
  111. package/dist/core/tool-names.d.ts +42 -0
  112. package/dist/core/tool-names.js +64 -0
  113. package/dist/core/untrusted-content.d.ts +32 -0
  114. package/dist/core/untrusted-content.js +72 -0
  115. package/dist/core/webhooks.d.ts +8 -1
  116. package/dist/core/webhooks.js +23 -2
  117. package/dist/generated/prisma/browser.d.ts +100 -0
  118. package/dist/generated/prisma/client.d.ts +100 -0
  119. package/dist/generated/prisma/commonInputTypes.d.ts +30 -0
  120. package/dist/generated/prisma/enums.d.ts +6 -0
  121. package/dist/generated/prisma/enums.js +6 -1
  122. package/dist/generated/prisma/internal/class.d.ts +143 -0
  123. package/dist/generated/prisma/internal/class.js +4 -4
  124. package/dist/generated/prisma/internal/prismaNamespace.d.ts +1746 -577
  125. package/dist/generated/prisma/internal/prismaNamespace.js +179 -6
  126. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +186 -0
  127. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +179 -6
  128. package/dist/generated/prisma/models/Agent.d.ts +294 -1
  129. package/dist/generated/prisma/models/AgentRepository.d.ts +1425 -0
  130. package/dist/generated/prisma/models/AgentRepository.js +1 -0
  131. package/dist/generated/prisma/models/AgentTool.d.ts +95 -1
  132. package/dist/generated/prisma/models/AuthUser.d.ts +56 -1
  133. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +258 -7
  134. package/dist/generated/prisma/models/CodingProxySession.d.ts +123 -2
  135. package/dist/generated/prisma/models/CodingRun.d.ts +1276 -95
  136. package/dist/generated/prisma/models/CodingService.d.ts +1348 -0
  137. package/dist/generated/prisma/models/CodingService.js +1 -0
  138. package/dist/generated/prisma/models/HostEventDelivery.d.ts +946 -0
  139. package/dist/generated/prisma/models/HostEventDelivery.js +1 -0
  140. package/dist/generated/prisma/models/HostIdentity.d.ts +1232 -0
  141. package/dist/generated/prisma/models/HostIdentity.js +1 -0
  142. package/dist/generated/prisma/models/HostIdentityLinkRequest.d.ts +1473 -0
  143. package/dist/generated/prisma/models/HostIdentityLinkRequest.js +1 -0
  144. package/dist/generated/prisma/models/Principal.d.ts +455 -0
  145. package/dist/generated/prisma/models/RegistryAllowance.d.ts +1148 -0
  146. package/dist/generated/prisma/models/RegistryAllowance.js +1 -0
  147. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +1219 -0
  148. package/dist/generated/prisma/models/RegistryApprovedVersion.js +1 -0
  149. package/dist/generated/prisma/models/RegistryFetch.d.ts +1428 -0
  150. package/dist/generated/prisma/models/RegistryFetch.js +1 -0
  151. package/dist/generated/prisma/models/RegistryPlanRefusal.d.ts +1294 -0
  152. package/dist/generated/prisma/models/RegistryPlanRefusal.js +1 -0
  153. package/dist/generated/prisma/models/RegistryVersionFact.d.ts +1085 -0
  154. package/dist/generated/prisma/models/RegistryVersionFact.js +1 -0
  155. package/dist/generated/prisma/models/ResourceGrant.d.ts +1437 -0
  156. package/dist/generated/prisma/models/ResourceGrant.js +1 -0
  157. package/dist/generated/prisma/models/Run.d.ts +389 -1
  158. package/dist/generated/prisma/models/RunHostCheck.d.ts +1239 -0
  159. package/dist/generated/prisma/models/RunHostCheck.js +1 -0
  160. package/dist/generated/prisma/models/RunHostStatus.d.ts +1315 -0
  161. package/dist/generated/prisma/models/RunHostStatus.js +1 -0
  162. package/dist/generated/prisma/models/Tool.d.ts +15 -3
  163. package/dist/generated/prisma/models.d.ts +13 -0
  164. package/dist/help/build.d.ts +1 -0
  165. package/dist/help/build.js +9 -0
  166. package/dist/help/catalog.d.ts +24 -0
  167. package/dist/help/catalog.js +160 -0
  168. package/dist/help/cli.d.ts +2 -0
  169. package/dist/help/cli.js +65 -0
  170. package/dist/help/runtime.d.ts +3 -0
  171. package/dist/help/runtime.js +44 -0
  172. package/dist/help/search.d.ts +9 -0
  173. package/dist/help/search.js +104 -0
  174. package/dist/help-index.json +660 -0
  175. package/dist/import/cli-args.js +3 -2
  176. package/dist/import/create.d.ts +5 -0
  177. package/dist/import/create.js +67 -13
  178. package/dist/import/index.js +19 -9
  179. package/dist/import/neutral-schema.d.ts +11 -11
  180. package/dist/mcp/auth/access.d.ts +70 -0
  181. package/dist/mcp/auth/access.js +58 -0
  182. package/dist/mcp/auth/grants-cli.d.ts +149 -0
  183. package/dist/mcp/auth/grants-cli.js +518 -0
  184. package/dist/mcp/auth/host-account-cli.d.ts +2 -0
  185. package/dist/mcp/auth/host-account-cli.js +47 -0
  186. package/dist/mcp/auth/ownership.d.ts +26 -52
  187. package/dist/mcp/auth/ownership.js +19 -14
  188. package/dist/mcp/auth/repo-authorization.d.ts +22 -0
  189. package/dist/mcp/auth/repo-authorization.js +51 -0
  190. package/dist/mcp/auth/resource-server.d.ts +31 -2
  191. package/dist/mcp/auth/resource-server.js +84 -3
  192. package/dist/mcp/auth/self-hosted/browser.js +2 -2
  193. package/dist/mcp/auth/self-hosted/cli.js +47 -13
  194. package/dist/mcp/auth/self-hosted/credentials.d.ts +20 -2
  195. package/dist/mcp/auth/self-hosted/credentials.js +62 -4
  196. package/dist/mcp/auth/self-hosted/session.d.ts +2 -1
  197. package/dist/mcp/context.d.ts +27 -1
  198. package/dist/mcp/errors.d.ts +25 -6
  199. package/dist/mcp/errors.js +98 -0
  200. package/dist/mcp/host-events/github-ingress.d.ts +36 -0
  201. package/dist/mcp/host-events/github-ingress.js +92 -0
  202. package/dist/mcp/host-events/github-user-callback.d.ts +18 -0
  203. package/dist/mcp/host-events/github-user-callback.js +50 -0
  204. package/dist/mcp/index.d.ts +8 -1
  205. package/dist/mcp/index.js +106 -16
  206. package/dist/mcp/server.js +27 -9
  207. package/dist/mcp/tools/agents.js +446 -48
  208. package/dist/mcp/tools/budget-groups.js +3 -3
  209. package/dist/mcp/tools/datastore.js +22 -15
  210. package/dist/mcp/tools/grants.d.ts +2 -0
  211. package/dist/mcp/tools/grants.js +239 -0
  212. package/dist/mcp/tools/help.d.ts +5 -0
  213. package/dist/mcp/tools/help.js +67 -0
  214. package/dist/mcp/tools/host-accounts.d.ts +2 -0
  215. package/dist/mcp/tools/host-accounts.js +114 -0
  216. package/dist/mcp/tools/memory.d.ts +7 -1
  217. package/dist/mcp/tools/memory.js +5 -5
  218. package/dist/mcp/tools/repositories.d.ts +2 -0
  219. package/dist/mcp/tools/repositories.js +181 -0
  220. package/dist/mcp/tools/runs.d.ts +6 -0
  221. package/dist/mcp/tools/runs.js +60 -6
  222. package/dist/mcp/tools/scheduling.js +3 -6
  223. package/dist/mcp/tools/secrets.js +18 -6
  224. package/dist/mcp/tools/services.d.ts +2 -0
  225. package/dist/mcp/tools/services.js +222 -0
  226. package/dist/mcp/tools/subagents.js +52 -16
  227. package/dist/mcp/tools/tools.d.ts +41 -0
  228. package/dist/mcp/tools/tools.js +201 -40
  229. package/dist/mcp/tools/trigger.js +36 -6
  230. package/dist/mcp/tools/webhooks.js +15 -4
  231. package/dist/mcp/transport/streamable-http.d.ts +10 -0
  232. package/dist/mcp/transport/streamable-http.js +32 -2
  233. package/dist/providers/auth/delegating.d.ts +19 -0
  234. package/dist/providers/auth/delegating.js +71 -0
  235. package/dist/providers/auth/index.d.ts +2 -0
  236. package/dist/providers/auth/index.js +11 -0
  237. package/dist/providers/auth/self-hosted.d.ts +2 -1
  238. package/dist/providers/auth/self-hosted.js +16 -4
  239. package/dist/providers/auth/types.d.ts +6 -0
  240. package/dist/providers/coding-proxy/memory-ledger.d.ts +3 -0
  241. package/dist/providers/coding-proxy/memory-ledger.js +21 -2
  242. package/dist/providers/coding-proxy/metering.d.ts +4 -0
  243. package/dist/providers/coding-proxy/metering.js +28 -2
  244. package/dist/providers/coding-proxy/prisma-ledger.d.ts +17 -0
  245. package/dist/providers/coding-proxy/prisma-ledger.js +50 -5
  246. package/dist/providers/coding-proxy/proxy.d.ts +13 -0
  247. package/dist/providers/coding-proxy/proxy.js +479 -18
  248. package/dist/providers/coding-proxy/registry/audit.d.ts +131 -0
  249. package/dist/providers/coding-proxy/registry/audit.js +380 -0
  250. package/dist/providers/coding-proxy/registry/bounded-fetch.d.ts +16 -0
  251. package/dist/providers/coding-proxy/registry/bounded-fetch.js +77 -0
  252. package/dist/providers/coding-proxy/registry/plan.d.ts +58 -0
  253. package/dist/providers/coding-proxy/registry/plan.js +304 -0
  254. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +34 -0
  255. package/dist/providers/coding-proxy/registry/prisma-store.js +151 -0
  256. package/dist/providers/coding-proxy/registry/service.d.ts +213 -0
  257. package/dist/providers/coding-proxy/registry/service.js +1137 -0
  258. package/dist/providers/coding-proxy/registry/store.d.ts +127 -0
  259. package/dist/providers/coding-proxy/registry/store.js +70 -0
  260. package/dist/providers/coding-proxy/runtime.d.ts +17 -0
  261. package/dist/providers/coding-proxy/runtime.js +63 -0
  262. package/dist/providers/coding-proxy/secure-fetch.js +0 -1
  263. package/dist/providers/coding-proxy/server.d.ts +11 -0
  264. package/dist/providers/coding-proxy/server.js +163 -0
  265. package/dist/providers/coding-proxy/types.d.ts +15 -0
  266. package/dist/providers/engine/types.d.ts +10 -0
  267. package/dist/providers/executor/build.d.ts +2 -2
  268. package/dist/providers/executor/composition.d.ts +3 -0
  269. package/dist/providers/executor/composition.js +19 -0
  270. package/dist/providers/executor/container.d.ts +105 -3
  271. package/dist/providers/executor/container.js +296 -20
  272. package/dist/providers/executor/dbos.d.ts +2 -3
  273. package/dist/providers/executor/in-process.d.ts +2 -3
  274. package/dist/providers/executor/routing.d.ts +7 -0
  275. package/dist/providers/executor/routing.js +13 -0
  276. package/dist/providers/executor/types.d.ts +22 -0
  277. package/dist/providers/jobs/claude-tool-setup.d.ts +23 -0
  278. package/dist/providers/jobs/claude-tool-setup.js +50 -0
  279. package/dist/providers/jobs/collect-prune.d.ts +7 -0
  280. package/dist/providers/jobs/collect-prune.js +27 -0
  281. package/dist/providers/jobs/docker-isolation.d.ts +48 -3
  282. package/dist/providers/jobs/docker-isolation.js +213 -22
  283. package/dist/providers/jobs/docker-services.d.ts +35 -0
  284. package/dist/providers/jobs/docker-services.js +191 -0
  285. package/dist/providers/jobs/docker.d.ts +49 -2
  286. package/dist/providers/jobs/docker.js +279 -32
  287. package/dist/providers/jobs/fake-kubernetes-api.d.ts +1 -0
  288. package/dist/providers/jobs/fake-kubernetes-api.js +12 -3
  289. package/dist/providers/jobs/kubernetes-isolation.d.ts +17 -2
  290. package/dist/providers/jobs/kubernetes-isolation.js +238 -57
  291. package/dist/providers/jobs/kubernetes-platform.d.ts +10 -4
  292. package/dist/providers/jobs/kubernetes-platform.js +11 -5
  293. package/dist/providers/jobs/kubernetes-preflight.js +3 -0
  294. package/dist/providers/jobs/kubernetes.d.ts +21 -2
  295. package/dist/providers/jobs/kubernetes.js +112 -21
  296. package/dist/providers/jobs/types.d.ts +18 -0
  297. package/dist/providers/llm/anthropic.js +6 -2
  298. package/dist/providers/llm/bedrock.js +2 -1
  299. package/dist/providers/llm/claude-messages.d.ts +5 -1
  300. package/dist/providers/llm/claude-messages.js +1 -0
  301. package/dist/providers/llm/claude-provider.d.ts +3 -1
  302. package/dist/providers/llm/claude-provider.js +5 -1
  303. package/dist/providers/llm/index.d.ts +1 -1
  304. package/dist/providers/llm/index.js +1 -1
  305. package/dist/providers/llm/pricing-anthropic.d.ts +10 -0
  306. package/dist/providers/llm/pricing-anthropic.js +32 -14
  307. package/dist/providers/llm/pricing-bedrock-claude.d.ts +8 -0
  308. package/dist/providers/llm/pricing-bedrock-claude.js +9 -0
  309. package/dist/providers/llm/routing.d.ts +10 -1
  310. package/dist/providers/llm/routing.js +18 -0
  311. package/dist/providers/llm/types.d.ts +12 -0
  312. package/dist/providers/llm/types.js +8 -1
  313. package/dist/providers/review-host/diff-lines.d.ts +16 -0
  314. package/dist/providers/review-host/diff-lines.js +59 -0
  315. package/dist/providers/review-host/github-events.d.ts +6 -0
  316. package/dist/providers/review-host/github-events.js +180 -0
  317. package/dist/providers/review-host/github-user-auth.d.ts +38 -0
  318. package/dist/providers/review-host/github-user-auth.js +128 -0
  319. package/dist/providers/review-host/github.d.ts +57 -0
  320. package/dist/providers/review-host/github.js +567 -0
  321. package/dist/providers/review-host/index.d.ts +12 -0
  322. package/dist/providers/review-host/index.js +30 -0
  323. package/dist/providers/review-host/review-format.d.ts +19 -0
  324. package/dist/providers/review-host/review-format.js +59 -0
  325. package/dist/providers/review-host/types.d.ts +284 -0
  326. package/dist/providers/review-host/types.js +24 -0
  327. package/dist/providers/vcs/git.d.ts +16 -6
  328. package/dist/providers/vcs/git.js +77 -13
  329. package/dist/providers/vcs/github.d.ts +74 -3
  330. package/dist/providers/vcs/github.js +195 -15
  331. package/dist/providers/vcs/types.d.ts +42 -4
  332. package/dist/quickstart/index.js +13 -2
  333. package/dist/sandbox/fetch-policy.d.ts +20 -2
  334. package/dist/sandbox/fetch-policy.js +64 -3
  335. package/dist/sandbox/host-functions.d.ts +9 -1
  336. package/dist/sandbox/host-functions.js +12 -5
  337. package/dist/serve.js +1 -1
  338. package/dist/wardby-bin.js +6 -0
  339. package/docs/README.md +30 -0
  340. package/docs/architecture-runtime.md +90 -0
  341. package/docs/assets/brand/wardby-icon-512.png +0 -0
  342. package/docs/assets/brand/wardby-icon.svg +16 -0
  343. package/docs/assets/brand/wardby-mascot-profile-512.png +0 -0
  344. package/docs/assets/brand/wardby-mascot.png +0 -0
  345. package/docs/assets/brand/wardby-mascot.svg +5 -0
  346. package/docs/assets/wardby-workflow.svg +106 -0
  347. package/docs/code-review-agents.md +481 -0
  348. package/docs/coding-agent-setup.md +172 -0
  349. package/docs/coding-packages.md +455 -0
  350. package/docs/coding-services.md +300 -0
  351. package/docs/coding-worker-byo-images.md +98 -0
  352. package/docs/coding-worker-isolation.md +1061 -0
  353. package/docs/getting-started-gke.md +615 -0
  354. package/docs/getting-started-identity-provider.md +308 -0
  355. package/docs/getting-started.md +133 -0
  356. package/docs/observability.md +53 -0
  357. package/docs/release-verification.md +66 -0
  358. package/docs/security-deployment.md +657 -0
  359. package/help/code-review-agents.md +31 -0
  360. package/help/coding-packages.md +31 -0
  361. package/help/coding-services.md +71 -0
  362. package/help/creating-agents.md +68 -0
  363. package/help/deploy-gke.md +39 -0
  364. package/help/deployment-targets.md +39 -0
  365. package/help/errors/budget-group-exhausted.md +25 -0
  366. package/help/errors/docker-isolation-unsupported.md +26 -0
  367. package/help/errors/protected-path.md +45 -0
  368. package/help/errors/repo-access.md +27 -0
  369. package/help/errors/service-declaration-invalid.md +27 -0
  370. package/help/errors/service-declaration-unavailable.md +25 -0
  371. package/help/errors/service-launcher-unsupported.md +30 -0
  372. package/help/errors/service-not-allowed.md +27 -0
  373. package/help/errors/service-unknown.md +23 -0
  374. package/help/errors/service-unready.md +49 -0
  375. package/help/getting-started.md +31 -0
  376. package/help/github.md +30 -0
  377. package/help/identity-and-access.md +39 -0
  378. package/help/mcp.md +30 -0
  379. package/help/native-capabilities.md +30 -0
  380. package/help/observability.md +41 -0
  381. package/help/operating-agents.md +30 -0
  382. package/help/security.md +27 -0
  383. package/help/troubleshooting/budgets.md +26 -0
  384. package/help/troubleshooting/coding-workers.md +47 -0
  385. package/help/troubleshooting/repository-access.md +27 -0
  386. package/package.json +12 -3
  387. package/prisma/migrations/20260925010000_coding_collect_exclude/migration.sql +8 -0
  388. package/prisma/migrations/20260925015000_allowed_egress_default/migration.sql +8 -0
  389. package/prisma/migrations/20260925020000_coding_package_registry/migration.sql +55 -0
  390. package/prisma/migrations/20260925030000_tool_name_per_owner/migration.sql +11 -0
  391. package/prisma/migrations/20260926010000_run_trigger_host_event/migration.sql +7 -0
  392. package/prisma/migrations/20260926020000_code_review_hosts/migration.sql +53 -0
  393. package/prisma/migrations/20260926030000_auth_user_roles/migration.sql +9 -0
  394. package/prisma/migrations/20260926040000_agent_effort/migration.sql +6 -0
  395. package/prisma/migrations/20260926050000_registry_lockfile_plan/migration.sql +32 -0
  396. package/prisma/migrations/20260926050000_repo_access_authorization/migration.sql +82 -0
  397. package/prisma/migrations/20260926060000_registry_plan_refusal/migration.sql +19 -0
  398. package/prisma/migrations/20260926100000_registry_plan_refusal_published_at/migration.sql +5 -0
  399. package/prisma/migrations/20260926190000_run_host_status/migration.sql +18 -0
  400. package/prisma/migrations/20260926210000_run_host_status_at_dispatch/migration.sql +5 -0
  401. package/prisma/migrations/20260927010000_resource_grants/migration.sql +72 -0
  402. package/prisma/migrations/20260927020000_proxy_session_budget_exhausted/migration.sql +3 -0
  403. package/prisma/migrations/20260927030000_coding_debug_trace/migration.sql +4 -0
  404. package/prisma/migrations/20260927040000_proxy_session_upstream_failure/migration.sql +3 -0
  405. package/prisma/migrations/20260927050000_coding_run_services/migration.sql +74 -0
  406. package/prisma/migrations/20260928000000_coding_run_tool_image/migration.sql +5 -0
  407. package/prisma/schema.prisma +407 -21
@@ -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;
@@ -0,0 +1,74 @@
1
+ -- Coding-run services (docs/coding-services.md): the admin-managed catalog a
2
+ -- repository's .wardby/services.yaml names entries from, the service names each
3
+ -- coding agent may use, and the services resolved for each run at dispatch.
4
+ -- Additive: one new table, two new columns with defaults, and the built-in rows
5
+ -- (src/coding/services/builtins.ts; builtins.database.test.ts keeps them equal).
6
+
7
+ -- CreateTable
8
+ CREATE TABLE "CodingService" (
9
+ "id" TEXT NOT NULL,
10
+ "name" TEXT NOT NULL,
11
+ "version" TEXT NOT NULL,
12
+ "kind" TEXT NOT NULL DEFAULT 'sidecar',
13
+ "image" TEXT NOT NULL,
14
+ "port" INTEGER NOT NULL,
15
+ "serviceEnv" JSONB NOT NULL DEFAULT '{}',
16
+ "testEnv" JSONB NOT NULL DEFAULT '{}',
17
+ "readiness" JSONB NOT NULL,
18
+ "resources" JSONB NOT NULL,
19
+ "dataPath" TEXT NOT NULL,
20
+ "writablePaths" JSONB NOT NULL DEFAULT '[]',
21
+ "builtin" BOOLEAN NOT NULL DEFAULT false,
22
+ "createdById" TEXT,
23
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
24
+ "updatedAt" TIMESTAMP(3) NOT NULL,
25
+
26
+ CONSTRAINT "CodingService_pkey" PRIMARY KEY ("id")
27
+ );
28
+
29
+ -- CreateIndex
30
+ CREATE UNIQUE INDEX "CodingService_name_version_key" ON "CodingService"("name", "version");
31
+
32
+ -- AlterTable
33
+ ALTER TABLE "CodingAgentProfile" ADD COLUMN "services" JSONB NOT NULL DEFAULT '[]';
34
+
35
+ -- AlterTable
36
+ ALTER TABLE "CodingRun" ADD COLUMN "services" JSONB NOT NULL DEFAULT '[]';
37
+
38
+ -- Built-in catalog entries.
39
+ INSERT INTO "CodingService" ("id", "name", "version", "kind", "image", "port", "serviceEnv", "testEnv", "readiness", "resources", "dataPath", "writablePaths", "builtin", "updatedAt") VALUES
40
+ ('builtin-postgres-15', 'postgres', '15', 'sidecar',
41
+ 'docker.io/library/postgres@sha256:724292da1f2e50bdccfc3302ce75bbba7f4a6076701b588cc795fcac65683550', 5432,
42
+ '{"POSTGRES_USER":"test","POSTGRES_PASSWORD":"test","POSTGRES_DB":"test","PGDATA":"/var/lib/postgresql/data/pgdata"}',
43
+ '{"DATABASE_URL":"postgres://test:test@127.0.0.1:5432/test","PGHOST":"127.0.0.1","PGPORT":"5432","PGUSER":"test","PGPASSWORD":"test","PGDATABASE":"test"}',
44
+ '{"command":["pg_isready","-h","127.0.0.1","-p","5432","-U","test","-d","test"],"periodSeconds":2,"timeoutSeconds":2,"failureThreshold":30}',
45
+ '{"cpuMillicores":500,"memoryMib":512,"diskMib":1024}',
46
+ '/var/lib/postgresql/data', '["/var/run/postgresql","/tmp"]', true, CURRENT_TIMESTAMP),
47
+ ('builtin-postgres-16', 'postgres', '16', 'sidecar',
48
+ 'docker.io/library/postgres@sha256:1a6ab3f5345eb6dbe04a1349529caabdb0ab09293a09590fad07b2246bfa4b54', 5432,
49
+ '{"POSTGRES_USER":"test","POSTGRES_PASSWORD":"test","POSTGRES_DB":"test","PGDATA":"/var/lib/postgresql/data/pgdata"}',
50
+ '{"DATABASE_URL":"postgres://test:test@127.0.0.1:5432/test","PGHOST":"127.0.0.1","PGPORT":"5432","PGUSER":"test","PGPASSWORD":"test","PGDATABASE":"test"}',
51
+ '{"command":["pg_isready","-h","127.0.0.1","-p","5432","-U","test","-d","test"],"periodSeconds":2,"timeoutSeconds":2,"failureThreshold":30}',
52
+ '{"cpuMillicores":500,"memoryMib":512,"diskMib":1024}',
53
+ '/var/lib/postgresql/data', '["/var/run/postgresql","/tmp"]', true, CURRENT_TIMESTAMP),
54
+ ('builtin-postgres-17', 'postgres', '17', 'sidecar',
55
+ 'docker.io/library/postgres@sha256:d74eeac9a635390a49bc21bd49fccd973de707e2a53a76ac49b552b8712ec46f', 5432,
56
+ '{"POSTGRES_USER":"test","POSTGRES_PASSWORD":"test","POSTGRES_DB":"test","PGDATA":"/var/lib/postgresql/data/pgdata"}',
57
+ '{"DATABASE_URL":"postgres://test:test@127.0.0.1:5432/test","PGHOST":"127.0.0.1","PGPORT":"5432","PGUSER":"test","PGPASSWORD":"test","PGDATABASE":"test"}',
58
+ '{"command":["pg_isready","-h","127.0.0.1","-p","5432","-U","test","-d","test"],"periodSeconds":2,"timeoutSeconds":2,"failureThreshold":30}',
59
+ '{"cpuMillicores":500,"memoryMib":512,"diskMib":1024}',
60
+ '/var/lib/postgresql/data', '["/var/run/postgresql","/tmp"]', true, CURRENT_TIMESTAMP),
61
+ ('builtin-redis-7', 'redis', '7', 'sidecar',
62
+ 'docker.io/library/redis@sha256:c6eabf748fc7a61dbb5a705c78bcf3d6377b1127a97d0ce965c11c44ba46896f', 6379,
63
+ '{}',
64
+ '{"REDIS_URL":"redis://127.0.0.1:6379/0","REDIS_HOST":"127.0.0.1","REDIS_PORT":"6379"}',
65
+ '{"command":["redis-cli","-h","127.0.0.1","-p","6379","ping"],"periodSeconds":1,"timeoutSeconds":2,"failureThreshold":30}',
66
+ '{"cpuMillicores":250,"memoryMib":256,"diskMib":256}',
67
+ '/data', '[]', true, CURRENT_TIMESTAMP),
68
+ ('builtin-mysql-8', 'mysql', '8', 'sidecar',
69
+ 'docker.io/library/mysql@sha256:0744ee5ef89ce6ccfa13de3e579fe6b9e27f93dd70da9c06d2c908b1b193fb8d', 3306,
70
+ '{"MYSQL_ROOT_PASSWORD":"test","MYSQL_DATABASE":"test","MYSQL_USER":"test","MYSQL_PASSWORD":"test"}',
71
+ '{"DATABASE_URL":"mysql://test:test@127.0.0.1:3306/test","MYSQL_HOST":"127.0.0.1","MYSQL_TCP_PORT":"3306","MYSQL_USER":"test","MYSQL_PASSWORD":"test","MYSQL_DATABASE":"test"}',
72
+ '{"command":["mysqladmin","ping","-h","127.0.0.1","-P","3306","-utest","-ptest","--silent"],"periodSeconds":2,"timeoutSeconds":3,"failureThreshold":45}',
73
+ '{"cpuMillicores":500,"memoryMib":1024,"diskMib":2048}',
74
+ '/var/lib/mysql', '["/var/run/mysqld","/tmp"]', true, CURRENT_TIMESTAMP);
@@ -0,0 +1,5 @@
1
+ -- Claude Code's tool-runner image (the container that runs its commands) for the
2
+ -- agent's toolchain, resolved at dispatch alongside workerImage so a run keeps the
3
+ -- image it was dispatched with. Additive and nullable: existing rows and Codex runs
4
+ -- leave it null, and the launcher falls back to the deployment's default image.
5
+ ALTER TABLE "CodingRun" ADD COLUMN "toolImage" TEXT;