@wardby/cli 0.5.2 → 0.6.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 (411) hide show
  1. package/.env.example +33 -0
  2. package/README.md +25 -14
  3. package/dist/claude-coding-worker/context.d.ts +22 -0
  4. package/dist/claude-coding-worker/context.js +92 -0
  5. package/dist/claude-coding-worker/driver.d.ts +7 -1
  6. package/dist/claude-coding-worker/driver.js +38 -5
  7. package/dist/claude-coding-worker/sdk.js +13 -4
  8. package/dist/cli-help.d.ts +1 -1
  9. package/dist/cli-help.js +5 -2
  10. package/dist/cli-native-mode.d.ts +9 -0
  11. package/dist/cli-native-mode.js +20 -0
  12. package/dist/cli.d.ts +3 -1
  13. package/dist/cli.js +141 -5
  14. package/dist/coding/claude-context.d.ts +45 -0
  15. package/dist/coding/claude-context.js +434 -0
  16. package/dist/coding/local-git.js +9 -1
  17. package/dist/coding/profile.d.ts +12 -0
  18. package/dist/coding/profile.js +6 -0
  19. package/dist/coding/protocol.d.ts +104 -0
  20. package/dist/coding/protocol.js +87 -3
  21. package/dist/coding/registry/pypi.d.ts +25 -1
  22. package/dist/coding/registry/pypi.js +140 -16
  23. package/dist/coding/registry/types.d.ts +17 -3
  24. package/dist/coding-worker/artifact.d.ts +8 -0
  25. package/dist/coding-worker/artifact.js +2 -2
  26. package/dist/coding-worker/driver.js +2 -0
  27. package/dist/coding-worker/sdk.d.ts +6 -0
  28. package/dist/coding-worker/sdk.js +1 -0
  29. package/dist/coding-worker/skills.d.ts +23 -0
  30. package/dist/coding-worker/skills.js +117 -0
  31. package/dist/coding-worker/types.d.ts +2 -0
  32. package/dist/config/github-allowed-accounts.d.ts +15 -0
  33. package/dist/config/github-allowed-accounts.js +36 -0
  34. package/dist/config/low-power.d.ts +12 -0
  35. package/dist/config/low-power.js +18 -0
  36. package/dist/config/mobile.d.ts +12 -0
  37. package/dist/config/mobile.js +18 -0
  38. package/dist/config/providers.d.ts +56 -2
  39. package/dist/config/providers.js +92 -6
  40. package/dist/core/db.d.ts +16 -6
  41. package/dist/core/db.js +12 -10
  42. package/dist/core/dispatch.d.ts +11 -0
  43. package/dist/core/dispatch.js +36 -1
  44. package/dist/core/engine-native.js +9 -5
  45. package/dist/core/host-events.d.ts +49 -3
  46. package/dist/core/host-events.js +289 -15
  47. package/dist/core/http-runtime.js +13 -6
  48. package/dist/core/issue-bridge.js +42 -2
  49. package/dist/core/issue-events.js +12 -1
  50. package/dist/core/issue-status.js +14 -3
  51. package/dist/core/merge-order-check.d.ts +129 -0
  52. package/dist/core/merge-order-check.js +336 -0
  53. package/dist/core/notification-dispatcher.d.ts +70 -0
  54. package/dist/core/notification-dispatcher.js +368 -0
  55. package/dist/core/notification-templates.d.ts +25 -0
  56. package/dist/core/notification-templates.js +105 -0
  57. package/dist/core/notifications.d.ts +10 -0
  58. package/dist/core/notifications.js +38 -0
  59. package/dist/core/pg-auth.d.ts +22 -0
  60. package/dist/core/pg-auth.js +152 -0
  61. package/dist/core/power-composition.d.ts +16 -0
  62. package/dist/core/power-composition.js +37 -0
  63. package/dist/core/power-idle.d.ts +14 -0
  64. package/dist/core/power-idle.js +30 -0
  65. package/dist/core/power.d.ts +71 -0
  66. package/dist/core/power.js +202 -0
  67. package/dist/core/reconciler.d.ts +4 -2
  68. package/dist/core/reconciler.js +29 -5
  69. package/dist/core/related-pull-requests.d.ts +48 -4
  70. package/dist/core/related-pull-requests.js +113 -11
  71. package/dist/core/repo-access.d.ts +15 -0
  72. package/dist/core/repo-access.js +66 -0
  73. package/dist/core/review-fix.d.ts +37 -0
  74. package/dist/core/review-fix.js +207 -6
  75. package/dist/core/review-host-tools.d.ts +20 -0
  76. package/dist/core/review-host-tools.js +58 -2
  77. package/dist/core/runner.d.ts +336 -3
  78. package/dist/core/runner.js +894 -317
  79. package/dist/core/secret-broker-config.d.ts +103 -0
  80. package/dist/core/secret-broker-config.js +112 -0
  81. package/dist/core/secrets.d.ts +39 -4
  82. package/dist/core/secrets.js +148 -40
  83. package/dist/core/workflow-event-recorder.d.ts +14 -0
  84. package/dist/core/workflow-event-recorder.js +120 -0
  85. package/dist/core/workflow-events.d.ts +82 -0
  86. package/dist/core/workflow-events.js +44 -0
  87. package/dist/core/workflow-run-events.d.ts +16 -0
  88. package/dist/core/workflow-run-events.js +40 -0
  89. package/dist/generated/prisma/browser.d.ts +58 -0
  90. package/dist/generated/prisma/client.d.ts +58 -0
  91. package/dist/generated/prisma/commonInputTypes.d.ts +150 -0
  92. package/dist/generated/prisma/enums.d.ts +27 -0
  93. package/dist/generated/prisma/enums.js +23 -0
  94. package/dist/generated/prisma/internal/class.d.ts +88 -0
  95. package/dist/generated/prisma/internal/class.js +4 -4
  96. package/dist/generated/prisma/internal/prismaNamespace.d.ts +772 -1
  97. package/dist/generated/prisma/internal/prismaNamespace.js +135 -4
  98. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +139 -0
  99. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +135 -4
  100. package/dist/generated/prisma/models/Agent.d.ts +360 -1
  101. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +73 -1
  102. package/dist/generated/prisma/models/CodingRun.d.ts +205 -1
  103. package/dist/generated/prisma/models/DeferredReview.d.ts +78 -1
  104. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +1675 -0
  105. package/dist/generated/prisma/models/NativeGatewayCall.js +1 -0
  106. package/dist/generated/prisma/models/NativeGatewaySession.d.ts +1517 -0
  107. package/dist/generated/prisma/models/NativeGatewaySession.js +1 -0
  108. package/dist/generated/prisma/models/NativeWarmWorker.d.ts +1296 -0
  109. package/dist/generated/prisma/models/NativeWarmWorker.js +1 -0
  110. package/dist/generated/prisma/models/NotificationChannel.d.ts +1543 -0
  111. package/dist/generated/prisma/models/NotificationChannel.js +1 -0
  112. package/dist/generated/prisma/models/NotificationDelivery.d.ts +1502 -0
  113. package/dist/generated/prisma/models/NotificationDelivery.js +1 -0
  114. package/dist/generated/prisma/models/NotificationThread.d.ts +1090 -0
  115. package/dist/generated/prisma/models/NotificationThread.js +1 -0
  116. package/dist/generated/prisma/models/Run.d.ts +826 -1
  117. package/dist/generated/prisma/models/RunHostCheck.d.ts +36 -1
  118. package/dist/generated/prisma/models/Secret.d.ts +37 -1
  119. package/dist/generated/prisma/models/SecretBrokerChange.d.ts +1101 -0
  120. package/dist/generated/prisma/models/SecretBrokerChange.js +1 -0
  121. package/dist/generated/prisma/models/WorkflowEvent.d.ts +1422 -0
  122. package/dist/generated/prisma/models/WorkflowEvent.js +1 -0
  123. package/dist/generated/prisma/models.d.ts +8 -0
  124. package/dist/help/build.js +4 -2
  125. package/dist/help/catalog.d.ts +1 -1
  126. package/dist/help/catalog.js +31 -6
  127. package/dist/help-index.json +1492 -113
  128. package/dist/import/create.js +17 -0
  129. package/dist/import/neutral-schema.d.ts +6 -2
  130. package/dist/import/neutral-schema.js +2 -0
  131. package/dist/mcp/auth/access.d.ts +1 -0
  132. package/dist/mcp/auth/ownership.d.ts +1 -1
  133. package/dist/mcp/auth/repo-authorization.js +14 -0
  134. package/dist/mcp/auth/resource-server.d.ts +2 -1
  135. package/dist/mcp/auth/resource-server.js +7 -2
  136. package/dist/mcp/auth/self-hosted/browser.d.ts +1 -1
  137. package/dist/mcp/auth/self-hosted/browser.js +19 -6
  138. package/dist/mcp/context.d.ts +6 -0
  139. package/dist/mcp/host-events/github-ingress.d.ts +23 -1
  140. package/dist/mcp/host-events/github-ingress.js +68 -0
  141. package/dist/mcp/index.d.ts +13 -0
  142. package/dist/mcp/index.js +59 -10
  143. package/dist/mcp/tools/agents.js +83 -12
  144. package/dist/mcp/tools/notification-channels.d.ts +2 -0
  145. package/dist/mcp/tools/notification-channels.js +293 -0
  146. package/dist/mcp/tools/power.d.ts +2 -0
  147. package/dist/mcp/tools/power.js +77 -0
  148. package/dist/mcp/tools/runs.d.ts +0 -6
  149. package/dist/mcp/tools/runs.js +7 -2
  150. package/dist/mcp/tools/secret-broker-compat.d.ts +12 -0
  151. package/dist/mcp/tools/secret-broker-compat.js +23 -0
  152. package/dist/mcp/tools/secret-elicitation-form.d.ts +22 -2
  153. package/dist/mcp/tools/secret-elicitation-form.js +200 -10
  154. package/dist/mcp/tools/secret-elicitation-server.js +8 -1
  155. package/dist/mcp/tools/secret-elicitation.d.ts +38 -3
  156. package/dist/mcp/tools/secret-elicitation.js +110 -12
  157. package/dist/mcp/tools/secrets.js +184 -7
  158. package/dist/mcp/tools/tools.d.ts +1 -1
  159. package/dist/mcp/tools/tools.js +22 -2
  160. package/dist/native-worker/composition.d.ts +23 -0
  161. package/dist/native-worker/composition.js +77 -0
  162. package/dist/native-worker/docker-isolation.d.ts +65 -0
  163. package/dist/native-worker/docker-isolation.js +183 -0
  164. package/dist/native-worker/docker-launcher.d.ts +74 -0
  165. package/dist/native-worker/docker-launcher.js +237 -0
  166. package/dist/native-worker/gateway-server.d.ts +39 -0
  167. package/dist/native-worker/gateway-server.js +315 -0
  168. package/dist/native-worker/gateway.d.ts +44 -0
  169. package/dist/native-worker/gateway.js +197 -0
  170. package/dist/native-worker/http-server.d.ts +22 -0
  171. package/dist/native-worker/http-server.js +109 -0
  172. package/dist/native-worker/http-transport.d.ts +17 -0
  173. package/dist/native-worker/http-transport.js +88 -0
  174. package/dist/native-worker/kubernetes-isolation.d.ts +90 -0
  175. package/dist/native-worker/kubernetes-isolation.js +218 -0
  176. package/dist/native-worker/kubernetes-launcher.d.ts +102 -0
  177. package/dist/native-worker/kubernetes-launcher.js +335 -0
  178. package/dist/native-worker/launch.d.ts +45 -0
  179. package/dist/native-worker/launch.js +44 -0
  180. package/dist/native-worker/ledger.d.ts +109 -0
  181. package/dist/native-worker/ledger.js +192 -0
  182. package/dist/native-worker/loopback.d.ts +12 -0
  183. package/dist/native-worker/loopback.js +49 -0
  184. package/dist/native-worker/main.d.ts +7 -0
  185. package/dist/native-worker/main.js +74 -0
  186. package/dist/native-worker/protocol.d.ts +744 -0
  187. package/dist/native-worker/protocol.js +200 -0
  188. package/dist/native-worker/sandbox-executor.d.ts +68 -0
  189. package/dist/native-worker/sandbox-executor.js +210 -0
  190. package/dist/native-worker/stdio.d.ts +29 -0
  191. package/dist/native-worker/stdio.js +188 -0
  192. package/dist/native-worker/warm-delivery.d.ts +16 -0
  193. package/dist/native-worker/warm-delivery.js +33 -0
  194. package/dist/native-worker/warm-pool-ledger.d.ts +39 -0
  195. package/dist/native-worker/warm-pool-ledger.js +73 -0
  196. package/dist/native-worker/warm-pool.d.ts +107 -0
  197. package/dist/native-worker/warm-pool.js +283 -0
  198. package/dist/native-worker/worker.d.ts +17 -0
  199. package/dist/native-worker/worker.js +115 -0
  200. package/dist/providers/auth/authorization-server.d.ts +3 -0
  201. package/dist/providers/auth/index.js +2 -0
  202. package/dist/providers/auth/self-hosted.d.ts +13 -1
  203. package/dist/providers/auth/self-hosted.js +54 -4
  204. package/dist/providers/chat/fake.d.ts +46 -0
  205. package/dist/providers/chat/fake.js +39 -0
  206. package/dist/providers/chat/index.d.ts +4 -0
  207. package/dist/providers/chat/index.js +8 -0
  208. package/dist/providers/chat/slack.d.ts +37 -0
  209. package/dist/providers/chat/slack.js +105 -0
  210. package/dist/providers/chat/types.d.ts +42 -0
  211. package/dist/providers/chat/types.js +19 -0
  212. package/dist/providers/coding-proxy/mock-upstream.d.ts +33 -0
  213. package/dist/providers/coding-proxy/mock-upstream.js +116 -0
  214. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +3 -0
  215. package/dist/providers/coding-proxy/registry/prisma-store.js +17 -0
  216. package/dist/providers/coding-proxy/registry/service.d.ts +4 -0
  217. package/dist/providers/coding-proxy/registry/service.js +20 -3
  218. package/dist/providers/coding-proxy/registry/store.d.ts +18 -1
  219. package/dist/providers/coding-proxy/registry/store.js +33 -0
  220. package/dist/providers/coding-proxy/runtime.js +12 -1
  221. package/dist/providers/coding-proxy/types.d.ts +2 -0
  222. package/dist/providers/engine/types.d.ts +19 -0
  223. package/dist/providers/engine/types.js +22 -0
  224. package/dist/providers/executor/composition.d.ts +24 -1
  225. package/dist/providers/executor/composition.js +39 -6
  226. package/dist/providers/executor/container.d.ts +24 -1
  227. package/dist/providers/executor/container.js +101 -11
  228. package/dist/providers/executor/dbos.d.ts +42 -0
  229. package/dist/providers/executor/dbos.js +118 -12
  230. package/dist/providers/executor/deferred.d.ts +56 -0
  231. package/dist/providers/executor/deferred.js +119 -0
  232. package/dist/providers/executor/routing.d.ts +37 -10
  233. package/dist/providers/executor/routing.js +73 -32
  234. package/dist/providers/executor/types.d.ts +12 -0
  235. package/dist/providers/jobs/docker.js +3 -3
  236. package/dist/providers/jobs/fake-kubernetes-api.d.ts +21 -2
  237. package/dist/providers/jobs/fake-kubernetes-api.js +42 -1
  238. package/dist/providers/jobs/kubernetes-api.d.ts +17 -1
  239. package/dist/providers/jobs/kubernetes-api.js +7 -0
  240. package/dist/providers/jobs/kubernetes-client.d.ts +10 -1
  241. package/dist/providers/jobs/kubernetes-client.js +52 -3
  242. package/dist/providers/jobs/kubernetes-dry-run-fixture.d.ts +6 -1
  243. package/dist/providers/jobs/kubernetes-dry-run-fixture.js +6 -3
  244. package/dist/providers/jobs/kubernetes-isolation.d.ts +16 -1
  245. package/dist/providers/jobs/kubernetes-isolation.js +58 -5
  246. package/dist/providers/jobs/kubernetes-platform.d.ts +4 -1
  247. package/dist/providers/jobs/kubernetes-platform.js +38 -1
  248. package/dist/providers/jobs/kubernetes-preflight.d.ts +2 -1
  249. package/dist/providers/jobs/kubernetes-preflight.js +4 -2
  250. package/dist/providers/jobs/kubernetes.d.ts +56 -7
  251. package/dist/providers/jobs/kubernetes.js +117 -36
  252. package/dist/providers/jobs/metadata-probes.d.ts +11 -0
  253. package/dist/providers/jobs/metadata-probes.js +13 -0
  254. package/dist/providers/jobs/types.d.ts +9 -0
  255. package/dist/providers/llm/openai.js +0 -1
  256. package/dist/providers/review-host/github.d.ts +11 -1
  257. package/dist/providers/review-host/github.js +50 -0
  258. package/dist/providers/review-host/types.d.ts +23 -0
  259. package/dist/providers/vcs/github.d.ts +32 -6
  260. package/dist/providers/vcs/github.js +74 -16
  261. package/dist/quickstart/coding-db.js +14 -2
  262. package/dist/quickstart/coding-doctor.d.ts +3 -0
  263. package/dist/quickstart/coding-doctor.js +3 -0
  264. package/dist/quickstart/coding-images.d.ts +9 -0
  265. package/dist/quickstart/coding-images.js +39 -0
  266. package/dist/quickstart/coding-seed.d.ts +20 -1
  267. package/dist/quickstart/coding-seed.js +96 -7
  268. package/dist/quickstart/coding.d.ts +2 -0
  269. package/dist/quickstart/coding.js +75 -3
  270. package/dist/quickstart/config.d.ts +2 -0
  271. package/dist/quickstart/config.js +4 -0
  272. package/dist/quickstart/images.d.ts +13 -0
  273. package/dist/quickstart/images.js +80 -12
  274. package/dist/quickstart/index.d.ts +0 -2
  275. package/dist/quickstart/index.js +10 -14
  276. package/dist/quickstart/manifests.d.ts +56 -0
  277. package/dist/quickstart/manifests.js +523 -0
  278. package/dist/quickstart/python-detect.d.ts +10 -0
  279. package/dist/quickstart/python-detect.js +32 -0
  280. package/dist/quickstart/repo-packages.d.ts +10 -0
  281. package/dist/quickstart/repo-packages.js +132 -0
  282. package/dist/quickstart/reviewer-prompt.d.ts +12 -0
  283. package/dist/quickstart/reviewer-prompt.js +84 -0
  284. package/dist/quickstart/scenarios.d.ts +19 -0
  285. package/dist/quickstart/scenarios.js +28 -0
  286. package/dist/quickstart/sync-reviewer-prompt.d.ts +1 -0
  287. package/dist/quickstart/sync-reviewer-prompt.js +10 -0
  288. package/dist/quickstart-images.json +1 -1
  289. package/dist/sandbox/brokered-fetch.d.ts +23 -0
  290. package/dist/sandbox/brokered-fetch.js +37 -0
  291. package/dist/sandbox/host-functions.d.ts +34 -0
  292. package/dist/sandbox/host-functions.js +144 -80
  293. package/dist/sandbox/prelude.js +7 -1
  294. package/dist/sandbox/run-in-sandbox.d.ts +19 -0
  295. package/dist/sandbox/run-in-sandbox.js +28 -10
  296. package/dist/sandbox/safe-fetch.d.ts +2 -0
  297. package/dist/sandbox/safe-fetch.js +3 -1
  298. package/dist/sandbox/secret-broker-sigv4.d.ts +2 -0
  299. package/dist/sandbox/secret-broker-sigv4.js +49 -0
  300. package/dist/sandbox/secret-broker.d.ts +34 -0
  301. package/dist/sandbox/secret-broker.js +162 -0
  302. package/dist/sandbox/user-tool.d.ts +14 -0
  303. package/dist/sandbox/user-tool.js +32 -0
  304. package/dist/serve.js +18 -0
  305. package/dist/viewer/api-schema.d.ts +214 -18
  306. package/dist/viewer/api-schema.js +22 -0
  307. package/dist/viewer/build-schemas.js +4 -1
  308. package/dist/viewer/event-bus.d.ts +6 -0
  309. package/dist/viewer/event-bus.js +16 -7
  310. package/dist/viewer/graph.d.ts +5 -2
  311. package/dist/viewer/graph.js +7 -2
  312. package/dist/viewer/http.d.ts +0 -1
  313. package/dist/viewer/http.js +2 -2
  314. package/dist/viewer/infra.js +25 -2
  315. package/dist/viewer/limits.d.ts +4 -0
  316. package/dist/viewer/limits.js +4 -0
  317. package/dist/viewer/openapi.d.ts +15 -0
  318. package/dist/viewer/openapi.js +172 -0
  319. package/docs/README.md +7 -0
  320. package/docs/agent-recipes.md +57 -8
  321. package/docs/architecture-runtime.md +16 -1
  322. package/docs/code-review-agents.md +139 -5
  323. package/docs/coding-agent-setup.md +127 -2
  324. package/docs/coding-packages.md +105 -5
  325. package/docs/coding-services.md +3 -1
  326. package/docs/coding-worker-byo-images.md +239 -2
  327. package/docs/coding-worker-isolation.md +88 -23
  328. package/docs/getting-started-gke.md +225 -9
  329. package/docs/getting-started-identity-provider.md +21 -10
  330. package/docs/getting-started.md +140 -11
  331. package/docs/jira-agents.md +5 -1
  332. package/docs/knowledge.md +11 -0
  333. package/docs/native-sandbox.md +635 -0
  334. package/docs/release-verification.md +9 -0
  335. package/docs/security-deployment.md +113 -12
  336. package/docs/slack-notifications.md +252 -0
  337. package/docs/tool-secrets.md +252 -0
  338. package/docs/viewer-api.md +46 -5
  339. package/docs/viewer-api.openapi.yml +1404 -0
  340. package/help/admin-viewer.md +6 -2
  341. package/help/agent-recipes.md +27 -0
  342. package/help/architecture-agent.md +136 -0
  343. package/help/brokered-secrets.md +79 -0
  344. package/help/build-claude-code-image.md +131 -0
  345. package/help/build-worker-image.md +195 -0
  346. package/help/code-review-agents.md +68 -6
  347. package/help/coding-packages.md +31 -2
  348. package/help/creating-agents.md +14 -0
  349. package/help/deploy-gke.md +37 -6
  350. package/help/deployment-targets.md +24 -13
  351. package/help/errors/coding-provider-not-configured.md +2 -2
  352. package/help/errors/database-auth-invalid.md +28 -0
  353. package/help/errors/github-account-not-allowed.md +25 -0
  354. package/help/errors/low-power-disabled.md +29 -0
  355. package/help/errors/low-power-scale-forbidden.md +35 -0
  356. package/help/errors/low-power-wake-timeout.md +30 -0
  357. package/help/errors/mobile-disabled.md +31 -0
  358. package/help/errors/native-sandbox-capacity.md +22 -0
  359. package/help/errors/native-sandbox-deadline-exceeded.md +19 -0
  360. package/help/errors/native-sandbox-docker-failed.md +20 -0
  361. package/help/errors/native-sandbox-gateway-unavailable.md +21 -0
  362. package/help/errors/native-sandbox-image-not-pinned.md +19 -0
  363. package/help/errors/native-sandbox-isolation-mismatch.md +20 -0
  364. package/help/errors/native-sandbox-network-unenforced.md +22 -0
  365. package/help/errors/native-sandbox-requires-catalog.md +31 -0
  366. package/help/errors/native-sandbox-unavailable.md +19 -0
  367. package/help/errors/native-sandbox-warm-delivery-failed.md +21 -0
  368. package/help/errors/native-sandbox-worker-exited.md +20 -0
  369. package/help/errors/native-sandbox-worker-lost.md +20 -0
  370. package/help/errors/native-sandbox-worker-unready.md +22 -0
  371. package/help/errors/secret-broker-body-invalid.md +26 -0
  372. package/help/errors/secret-broker-changed.md +20 -0
  373. package/help/errors/secret-broker-config-invalid.md +30 -0
  374. package/help/errors/secret-broker-conflict.md +27 -0
  375. package/help/errors/secret-broker-destination-denied.md +28 -0
  376. package/help/errors/secret-broker-value-invalid.md +28 -0
  377. package/help/errors/secret-brokered.md +24 -0
  378. package/help/errors/secret-not-brokered.md +25 -0
  379. package/help/errors/slack-auth-failed.md +48 -0
  380. package/help/errors/slack-channel-unreachable.md +39 -0
  381. package/help/errors/slack-not-configured.md +33 -0
  382. package/help/getting-started.md +18 -0
  383. package/help/github.md +18 -1
  384. package/help/identity-and-access.md +5 -1
  385. package/help/local-repositories.md +35 -5
  386. package/help/low-power-mode.md +125 -0
  387. package/help/merge-order-check.md +117 -0
  388. package/help/mobile-app.md +54 -0
  389. package/help/native-sandbox.md +136 -0
  390. package/help/observability.md +8 -0
  391. package/help/related-pull-requests.md +70 -9
  392. package/help/repo-instructions-and-skills.md +91 -0
  393. package/help/review-fix-rounds.md +10 -0
  394. package/help/slack-notifications.md +62 -0
  395. package/help/troubleshooting/coding-workers.md +21 -0
  396. package/package.json +13 -5
  397. package/prisma/migrations/20261009000003_native_execution_mode/migration.sql +12 -0
  398. package/prisma/migrations/20261009000004_native_gateway_ledger/migration.sql +65 -0
  399. package/prisma/migrations/20261009000005_native_gateway_call_child_agent/migration.sql +5 -0
  400. package/prisma/migrations/20261009000006_run_deferred_start_stop/migration.sql +14 -0
  401. package/prisma/migrations/20261009000007_native_gateway_network_ready/migration.sql +5 -0
  402. package/prisma/migrations/20261010000001_workflow_notifications/migration.sql +99 -0
  403. package/prisma/migrations/20261011000001_native_gateway_session_status_index/migration.sql +2 -0
  404. package/prisma/migrations/20261012000001_native_warm_worker/migration.sql +32 -0
  405. package/prisma/migrations/20261013000001_coding_run_merge_order/migration.sql +2 -0
  406. package/prisma/migrations/20261013000001_secret_broker/migration.sql +17 -0
  407. package/prisma/migrations/20261013000002_deferred_review_request/migration.sql +4 -0
  408. package/prisma/migrations/20261014000000_repo_skills/migration.sql +15 -0
  409. package/prisma/migrations/20261015000001_coding_run_merge_order_index/migration.sql +2 -0
  410. package/prisma/migrations/20261015000002_no_change_rereview/migration.sql +2 -0
  411. package/prisma/schema.prisma +362 -91
@@ -43,6 +43,17 @@ from bots and people without write access. Repository links require the
43
43
  agent owner's linked GitHub access, or an explicitly recorded administrator
44
44
  approval.
45
45
 
46
+ ## When a review starts
47
+
48
+ A push normally starts a review right away, but its timing can be held back
49
+ by two independent things: from Wardby 0.6.0, the pull request's own
50
+ delegating request still running (see [Reviewing a pull request a delegated run
51
+ opened](#reviewing-a-pull-request-a-delegated-run-opened) below), and, on a
52
+ link set up for it, CI on the pushed head still running (see [Review after
53
+ CI (`waitForCi`)](#review-after-ci-waitforci) below). Either can delay the
54
+ check that reports the review's result; neither changes what the review
55
+ itself reports once it runs.
56
+
46
57
  ## CI and sibling pull requests
47
58
 
48
59
  `repo_pr_read` also returns `ci`: the CI check runs and commit statuses on the
@@ -65,6 +76,54 @@ on the review check instead.
65
76
  Commit statuses need the App's **Commit statuses: Read** permission; without
66
77
  it only check runs are shown.
67
78
 
79
+ With Wardby 0.6.0 or later, `repo_pr_read` also returns `relatedPullRequests`: this
80
+ request's pull requests (`repository`, `number`, `state`, `mergeOrder`,
81
+ `self`), computed fresh at call time; empty on a human pull request, one
82
+ with no recognized Wardby marker, or a pull request on a local repository
83
+ (no origin marker to look up there). The `self` entry (the pull request just
84
+ read) always has a `state` (`draft`, `open`, `merged`, or `closed`) from that
85
+ same read. Another entry has a `state` (`open`, `merged`, or `closed`) only
86
+ when Wardby has it stored, as it does for pull requests linked to an issue,
87
+ and omits it otherwise; call `repo_pr_read` on that pull request when you
88
+ need its live state. The list is current; the PR body's **Related pull
89
+ requests** section can be stale — see
90
+ [Related pull requests across repositories](related-pull-requests.md).
91
+
92
+ With Wardby 0.6.0 or later, once a set has more than one `mergeOrder`, each
93
+ pull request in it also gets its own check run, named `wardby merge order`,
94
+ independent of any reviewer link; search help for "merge order check" for
95
+ its states and for requiring it in branch protection.
96
+
97
+ ## Reviewing a pull request a delegated run opened
98
+
99
+ This requires Wardby 0.6.0 or later; earlier releases review such a pull
100
+ request on its first push. When a lead agent delegates coding work and a sub-agent opens the pull
101
+ request (see [Fanning out to several
102
+ builders](../docs/agent-recipes.md#fanning-out-to-several-builders)), every
103
+ reviewer linked with the `pull_request` trigger holds its review of that
104
+ pull request until the delegating (lead) run finishes, however it ends
105
+ (including failing, being cancelled or being lost), even if the link has no
106
+ `waitForCi` set. This gives the request's other pull requests, if any, time
107
+ to open before any of them is reviewed, so a reviewer does not report a
108
+ field or route as missing only because a sibling pull request had not opened
109
+ yet. When the lead run finishes normally, their **Related pull requests**
110
+ sections have also been rewritten (see [Related pull requests across
111
+ repositories](related-pull-requests.md)); when it is ended another way, such
112
+ as being cancelled, held reviews start without that rewrite. Either way,
113
+ reviewers should rely on `repo_pr_read`'s `relatedPullRequests`.
114
+
115
+ A reviewer linked with `waitForCi` then waits for CI too, once the lead run
116
+ finishes, with its own full 15-minute fallback counted from that point. A
117
+ pull request opened directly, by a human, or on a local repository is never
118
+ held this way. A later request that continues an already-open pull request
119
+ is not held again: the request that opened it has already finished (a push
120
+ inside the same, still-running request is held). If Wardby cannot tell
121
+ whether the pull request's opening run was delegated, the review starts
122
+ right away instead. A held review not released when its lead run finishes is
123
+ reconsidered by Wardby's reconciliation sweep once it has been held for 15
124
+ minutes and released when the lead run has finished, and dropped after 24
125
+ hours like a review held for CI.
126
+
68
127
  ## Review after CI (`waitForCi`)
69
128
 
70
129
  A `pull_request` link can set `waitForCi: true` so this reviewer reviews a
@@ -105,12 +164,15 @@ Add this to a reviewer's system prompt:
105
164
  Reviewer step (CI and related pull requests). Read `ci` from repo_pr_read.
106
165
  When `ci` and the description's Tests disagree, follow CI and say so; never
107
166
  ask for a fix only because a sandbox test failed while CI passed. Report
108
- pending checks as pending. If the description has a "Related pull requests"
109
- section, a field, route or schema the change relies on may be added by one
110
- of those pull requests: do not report it as missing; note the dependency
111
- and the suggested merge order instead.
112
-
113
- Wardby also writes that section: see
167
+ pending checks as pending. If repo_pr_read's relatedPullRequests is
168
+ non-empty, a field, route or schema the change relies on may be added by
169
+ one of those pull requests: do not report it as missing; note the
170
+ dependency and the listed merge order instead. relatedPullRequests is
171
+ current; the PR body's "Related pull requests" section can be stale.
172
+
173
+ On a release before 0.6.0, `repo_pr_read` has no `relatedPullRequests`:
174
+ use the description's **Related pull requests** section in its place in that
175
+ step. Wardby also writes that section: see
114
176
  [Related pull requests across repositories](related-pull-requests.md).
115
177
 
116
178
  For App permissions, webhook setup, trigger configuration, and security
@@ -3,7 +3,7 @@ id: coding-packages
3
3
  title: Approve packages for coding agents
4
4
  summary: Let Codex coding workers install vetted npm and PyPI dependencies through Wardby's registry proxy.
5
5
  audience: operator
6
- tags: [coding-agents, packages, npm, pypi, supply-chain, refusals, lockfile]
6
+ tags: [coding-agents, packages, npm, pypi, supply-chain, refusals, lockfile, extras, pip-extras]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
@@ -35,8 +35,37 @@ if its own checks failed. A package reachable only through a refused one is
35
35
  refused too, so a high-severity advisory deep in a toolchain blocks every run
36
36
  that installs it.
37
37
 
38
+ ## PyPI extras
39
+
40
+ A PyPI entry may name extras, as pip does: `psycopg[binary]`,
41
+ `uvicorn[standard]>=0.30`. An extra allows only the dependencies that
42
+ package's own metadata declares under that extra (for `psycopg[binary]`, the
43
+ `psycopg-binary` wheel); a bare `psycopg` entry follows no extra, so
44
+ `psycopg-binary` is refused with `wardby_package_not_allowed`. A plain entry
45
+ follows no extras at all, its own or its dependencies': a plain `fastapi`
46
+ whose metadata asks for `uvicorn[standard]` gets bare `uvicorn` only. Extras a
47
+ dependency line names are followed only below an entry that names extras
48
+ (`fastapi[standard]`), once the proxy has served that parent's metadata: if
49
+ an extra's packages are still refused with `403 wardby_package_not_allowed`,
50
+ name the extra on the allowlist directly (`uvicorn[standard]`). Every
51
+ safeguard still applies to what an extra adds. Extras need the coding proxy
52
+ and control plane on the same Wardby version: a proxy from before extras
53
+ support cannot load an allowlist with a `name[extra]` entry, so every registry
54
+ request of that run fails; and once a profile stores an extras entry, do not
55
+ downgrade below the release that added extras.
56
+
57
+ The quickstart's coding step offers the packages a local repository declares
58
+ (`package.json`, `pyproject.toml` including its build-system packages,
59
+ `requirements*.txt`, keeping Python extras such as `psycopg[binary]`) as
60
+ `local-builder`'s allowlist after asking, or with `--allow-repo-packages` in a non-interactive
61
+ run. See [Local repositories](local-repositories.md).
62
+
63
+ > Re-running the quickstart replaces `local-builder`'s package allowlist with
64
+ > what the repository declares (or empties it), discarding any packages you
65
+ > added with `update_agent`; re-add them after a re-run.
66
+
38
67
  Review agents see the pull request's CI results in `repo_pr_read` and are
39
68
  told to trust CI over the sandbox's **Tests**.
40
69
 
41
70
  Read [`docs/coding-packages.md`](../docs/coding-packages.md) for allowlist
42
- syntax, package-policy controls, lockfile behavior, and refusal errors.
71
+ syntax (including [PyPI extras](../docs/coding-packages.md#pypi-extras)), package-policy controls, lockfile behavior, and refusal errors.
@@ -59,6 +59,20 @@ separately; a missing one fails the run itself at dispatch, not
59
59
  `create_agent`/`update_agent`. See [Models and pricing](models.md) and
60
60
  [Model not available](errors/model-unavailable.md).
61
61
 
62
+ ## Run it on a schedule
63
+
64
+ Give an agent a cron schedule with `set_schedule` (`agentId`, `schedule` such
65
+ as `0 6 * * 1`, and `timezone`), and turn it off with `disable_schedule`. A
66
+ coding agent needs a `codingProfile.defaultTask` first, since a scheduled run
67
+ has no one to pass a task. A native agent's system prompt is its task. Trigger
68
+ the agent once with `trigger_agent` and check the result before scheduling it.
69
+
70
+ Schedules fire only while a Wardby scheduler runs: `wardby serve`, or
71
+ `wardby scheduler` next to `wardby mcp`. On a quickstart install, start
72
+ `npx @wardby/cli@latest scheduler` from the project directory and keep it
73
+ running; the MCP server your assistant starts never fires schedules. See
74
+ [Operate managed agents](operating-agents.md).
75
+
62
76
  ## Decision checklist
63
77
 
64
78
  Choose a native agent when all of these are true:
@@ -11,8 +11,9 @@ appliesTo: >=0.2.1
11
11
 
12
12
  The supported Google Cloud deployment creates a GKE Autopilot cluster, private
13
13
  Cloud SQL for PostgreSQL, Artifact Registry, HTTPS Gateway, Google Secret
14
- Manager synchronization, and isolated gVisor-backed **Codex** coding-worker
15
- pods. It also applies namespace RBAC and default-deny network policies.
14
+ Manager synchronization, and isolated gVisor-backed coding-worker pods for
15
+ Codex and Claude Code. It also applies namespace RBAC and default-deny network
16
+ policies.
16
17
 
17
18
  Use a dedicated billed project, a hostname you control, remote Terraform state,
18
19
  and a GitHub App installed only on repositories that agents need. Review
@@ -28,8 +29,12 @@ The deployment process is:
28
29
  3. Put first-time values in an untracked `.env.local`; `deploy/gke/up.sh`
29
30
  seeds Secret Manager without overwriting existing production values.
30
31
  Jira settings are optional there, all or none; see [Jira](jira.md).
31
- 4. Run `HOSTNAME=wardby.example.com deploy/gke/up.sh`, then verify DNS,
32
+ 4. Run `WARDBY_HOSTNAME=wardby.example.com deploy/gke/up.sh`, then verify DNS,
32
33
  certificate issuance, database IAM bootstrap, and service health.
34
+ Use `WARDBY_HOSTNAME`, not `HOSTNAME` (shells set that to the machine name);
35
+ the script refuses local names such as `*.lan` or `*.local`, and asks you
36
+ to confirm (or set `WARDBY_HOSTNAME_CHANGE=<new hostname>`) before moving
37
+ a deployment to a different hostname.
33
38
 
34
39
  When a release changes `deploy/gke/database-grants.sql`, re-run the database
35
40
  grants bootstrap **before** deploying that release, so the proxy role can
@@ -37,9 +42,35 @@ already write the tables and columns it adds (such as per-model usage for
37
42
  [cost attribution](cost-attribution.md), or a run's live turn count). Until the
38
43
  grants are applied, the coding proxy's writes are refused and coding runs fail.
39
44
 
40
- Claude Code's two-container executor is currently Docker-only; Kubernetes
41
- coding workers use the Codex path. Configure an identity provider and GitHub
42
- App before allowing people to use the public endpoint.
45
+ The Kubernetes launcher runs Codex and Claude Code coding workers; a Claude
46
+ Code pod adds a tool-runner sidecar with its own image. Configure an identity
47
+ provider and GitHub App before allowing people to use the public endpoint.
48
+
49
+ To lower the idle cost of a lightly used deployment, see
50
+ [Low-power mode](../docs/getting-started-gke.md#low-power-mode) (Wardby 0.6.0 and later).
51
+
52
+ ## Plan it with your assistant
53
+
54
+ If you are an assistant connected to Wardby over MCP and the user asked to plan
55
+ a GKE deployment, produce a written plan; do not create cloud resources. Read
56
+ [Choose a deployment target](deployment-targets.md) first and confirm GKE is
57
+ the right target. Then ask for, one at a time, and record:
58
+
59
+ 1. The Google Cloud project (dedicated, with billing) and region, and who
60
+ holds the IAM roles to apply Terraform.
61
+ 2. The public hostname and who controls its DNS.
62
+ 3. The identity provider for people signing in (see
63
+ [Configure identity and privileged access](identity-and-access.md)).
64
+ 4. The GitHub App: which repositories it is installed on (see
65
+ [Connect GitHub repositories](github.md)).
66
+ 5. Which coding providers the agents use (Codex, Claude Code or both), and
67
+ which provider keys and worker images that needs.
68
+ 6. Where Terraform state lives, and the monthly cloud budget and alerts.
69
+ 7. Optional: Jira.
70
+
71
+ The plan lists those answers, the ordered steps above with the values filled
72
+ in, the commands the user will run themselves, and the open questions. Point
73
+ the user to the full guide below for every step.
43
74
 
44
75
  Follow the complete, ordered guide at
45
76
  [`docs/getting-started-gke.md`](../docs/getting-started-gke.md). It includes
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  id: deployment-targets
3
3
  title: Choose a deployment target
4
- summary: Pick the supported Wardby deployment path and understand its operational boundary.
4
+ summary: Compare local, self-hosted, and GKE deployment paths and their operational boundaries.
5
5
  audience: operator
6
6
  tags: [deployment, docker, gke, aws, production]
7
7
  appliesTo: >=0.2.1
@@ -9,31 +9,42 @@ appliesTo: >=0.2.1
9
9
 
10
10
  # Choose a deployment target
11
11
 
12
- Wardby has one local path and two production-ready deployment shapes:
12
+ Wardby has a local development path, a self-hosted container deployment
13
+ reference, and a supported GKE reference deployment. The references provide
14
+ different parts of a production environment; operators must complete the
15
+ remaining controls and verification before accepting production work.
13
16
 
14
17
  - **Local development:** `wardby quickstart` runs the control plane locally
15
18
  with its portable PostgreSQL container. It is the best place to evaluate,
16
19
  develop agents, and connect a local Codex or Claude Code client.
17
- - **Production container baseline:** run the published production image with
18
- PostgreSQL, HTTPS ingress, durable storage, backups, and an operator-owned
19
- identity provider. The Compose and Caddy configuration is a reference
20
- baseline, not a managed platform.
20
+ `deploy/kind-coding` is a local Kubernetes proof harness, not a production
21
+ deployment.
22
+ - **Self-hosted container deployment** (e.g., Docker Compose on a VM or
23
+ on-premises host): Wardby supplies runtime and migration images plus a
24
+ Compose/Caddy edge reference. The operator supplies PostgreSQL, secrets,
25
+ network and egress controls, backups and restore testing, monitoring, and a
26
+ separate coding-controller host. Configure authentication for the deployment.
21
27
  - **Google Kubernetes Engine Autopilot:** the supported Google Cloud path. It
22
- provisions GKE, private-IP Cloud SQL, Artifact Registry, isolated Codex
23
- workers, HTTPS Gateway, and GCP-native secret and network controls. See
28
+ provisions GKE, private-IP Cloud SQL with backups and point-in-time recovery,
29
+ Artifact Registry, isolated Codex and Claude Code workers, HTTPS Gateway, and
30
+ GCP-native secret and network controls. Operators still need to choose
31
+ availability, test recovery, and configure alerts and retention. See
24
32
  [Deploy on GKE](deploy-gke.md).
25
33
 
26
- AWS is supported as a portable runtime target and has a Bedrock Claude adapter,
27
- but Wardby does not ship a native AWS deployment module. Other cloud providers
34
+ AWS can run the portable runtime and has a Bedrock Claude adapter, but a native
35
+ AWS deployment module is planned and has not shipped. Other cloud providers
28
36
  can run the production container image with equivalent database, ingress,
29
37
  identity, secret, isolation, and observability controls; that infrastructure is
30
- operator-owned.
38
+ operator-owned. On Amazon EKS, set `KUBERNETES_PLATFORM=eks` (gVisor node group
39
+ required) and, for RDS, `DATABASE_AUTH=rds-iam`; see "Database
40
+ authentication" in
41
+ [`docs/security-deployment.md`](../docs/security-deployment.md).
31
42
 
32
43
  The older `deploy/gcp` Cloud Run module is deprecated. Do not choose it for a
33
44
  new installation.
34
45
 
35
- Before going live, complete the deployment security checklist and make a
36
- backup, upgrades, alerting, and incident-response plan. Read
46
+ Before going live, complete the release verification and security deployment
47
+ checks, and make plans for backups, upgrades, alerts, and incident response. Read
37
48
  [`docs/getting-started.md`](../docs/getting-started.md) for the local and
38
49
  container setup, and [`docs/security-deployment.md`](../docs/security-deployment.md)
39
50
  for the production controls.
@@ -26,8 +26,8 @@ runs recorded it) when `CODING_WORKER_IMAGE` has since been unset.
26
26
  a toolchain with its own image (such as `CODING_WORKER_IMAGE_NODE_PYTHON_3_12`),
27
27
  still runs without `CODING_WORKER_IMAGE`.
28
28
  - **`coding_provider_not_configured:claude-code`**: `CODING_CLAUDE_WORKER_IMAGE`
29
- or `CODING_CLAUDE_TOOL_RUNNER_IMAGE` isn't set. Claude Code needs both, and
30
- even an agent's own `workerImageRef` doesn't replace the tool runner.
29
+ or `CODING_CLAUDE_TOOL_RUNNER_IMAGE` isn't set. Claude Code needs both, even
30
+ for an agent with its own `workerImageRef`.
31
31
 
32
32
  This error is about images, not API keys. A missing or invalid model API key
33
33
  fails later, when the run calls the model.
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: errors/database-auth-invalid
3
+ title: Database authentication is misconfigured
4
+ summary: DATABASE_AUTH or the database URL does not meet the rules for the chosen authentication mode, so the process refused to start.
5
+ audience: operator
6
+ tags: [error, database, rds, iam, deploy, database_auth_invalid, rds-iam]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Database authentication is misconfigured
11
+
12
+ `database_auth_invalid` means `DATABASE_AUTH` is not valid, or `DATABASE_AUTH=rds-iam` is set and `DATABASE_URL` (or `DBOS_SYSTEM_DATABASE_URL`) does not meet its rules. Wardby checks this when the process starts, so every `wardby` command fails with it, not only the server. The message names the problem; it never includes the URL, credentials, or parameter values.
13
+
14
+ `DATABASE_AUTH` is `password` (the default; the password is in `DATABASE_URL`) or `rds-iam` (Amazon RDS IAM database authentication, where the password is a short-lived token signed with the workload's AWS credentials). Any other value is refused.
15
+
16
+ Under `rds-iam` check each of these:
17
+
18
+ 1. `DATABASE_URL` starts with `postgresql://` or `postgres://`, has a user, and has no password.
19
+ 2. `AWS_REGION` or `DATABASE_AWS_REGION` is set (`DATABASE_AWS_REGION` wins).
20
+ 3. The URL has `sslmode=verify-full` and `sslrootcert=<path to the RDS CA bundle>`, and that file exists and is readable in the container. An unreadable file is reported with its error code, such as `ENOENT` for a missing file or `EACCES` for one the process cannot read.
21
+ 4. Only supported parameters are present: `sslmode`, `sslrootcert`, `application_name`, `fallback_application_name`, `options`, `client_encoding`, `statement_timeout`, `lock_timeout`, `idle_in_transaction_session_timeout`, `query_timeout`, `connection_limit`, `pool_timeout`, `connect_timeout`, `schema`. Anything else (`sslcert`, `sslkey`, `ssl`, `host`, `pgbouncer`, ...) is refused by name; remove it.
22
+ 5. User and database names in the URL are correctly percent-encoded.
23
+
24
+ If the code is not raised but connections are rejected, the configuration is valid and the problem is on the AWS side: the workload's IAM role needs `rds-db:connect` for the database user, and that user needs the `rds_iam` role in the database.
25
+
26
+ `prisma migrate deploy` and `dbos schema` take a URL and do not follow `DATABASE_AUTH`. Mint a short-lived URL with the migration image's helper: `DATABASE_URL="$(node scripts/rds-iam-url.mjs)" && export DATABASE_URL && npm run prisma:migrate && npm run dbos:migrate`. It reports the same `database_auth_invalid` errors for the checks it shares. `wardby quickstart` does not support `rds-iam`.
27
+
28
+ See [Database authentication](../../docs/security-deployment.md#database-authentication).
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: errors/github-account-not-allowed
3
+ title: The repository's GitHub account is not served by this server
4
+ summary: The repository belongs to a GitHub user or organization that is neither the GitHub App's owner nor listed in WARDBY_GITHUB_ALLOWED_ACCOUNTS, so wardby refuses to link or use it.
5
+ audience: operator
6
+ tags: [error, github, repositories, configuration, WARDBY_GITHUB_ALLOWED_ACCOUNTS, link_repository]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # The repository's GitHub account is not served by this server
11
+
12
+ `github_account_not_allowed` means the repository's owner is not one of the
13
+ accounts this server serves through its GitHub App: the App's owner and the
14
+ accounts in `WARDBY_GITHUB_ALLOWED_ACCOUNTS`. `link_repository` and coding
15
+ profiles refuse such a repository, even with `adminOverride`, and runs on an
16
+ existing link to it are refused.
17
+
18
+ ## What to do
19
+
20
+ - **The repository should be served:** an operator adds its owner's login to
21
+ `WARDBY_GITHUB_ALLOWED_ACCOUNTS` and restarts the server, then links it again.
22
+ - **It should not:** use a repository owned by a served account, or another
23
+ wardby server with its own GitHub App.
24
+
25
+ Related: [Connect GitHub repositories](../github.md).
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: errors/low-power-disabled
3
+ title: Scale-down refused, mode not enabled
4
+ summary: A request to put the coding proxy or native gateway to sleep was refused because WARDBY_LOW_POWER is not 1 on this deployment.
5
+ audience: operator
6
+ tags: [error, gke, kubernetes, low_power_disabled]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Sleep refused: low-power mode not enabled
11
+
12
+ `low_power_disabled` (HTTP 409) means `power_sleep` was called, but low-power
13
+ mode is not on for this deployment: `WARDBY_LOW_POWER` is not `1` on the
14
+ control plane, or the control plane does not use `JOB_LAUNCHER=kubernetes` (it
15
+ then logs `low_power_ignored` at start-up). Nothing was scaled.
16
+
17
+ With the mode off, the coding proxy and native gateway always run, so there is
18
+ nothing to put to sleep. `power_status` returns `{ "enabled": false }` in the
19
+ same case.
20
+
21
+ To turn the mode on:
22
+
23
+ 1. Deploy with the flag: `WARDBY_HOSTNAME=wardby.example.com WARDBY_LOW_POWER=1 deploy/gke/up.sh`.
24
+ On a local kind cluster, use `WARDBY_LOW_POWER=1 deploy/kind-coding/up.sh` and
25
+ also set `WARDBY_LOW_POWER=1` in the environment of `wardby serve`.
26
+ 2. Check that the control plane runs with `JOB_LAUNCHER=kubernetes`.
27
+ 3. Call `power_status`; it reports `"enabled": true` once the mode is on.
28
+
29
+ See [Low-power mode on GKE](../low-power-mode.md).
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: errors/low-power-scale-forbidden
3
+ title: Scaling forbidden by RBAC
4
+ summary: In low-power mode, the control plane is not allowed to read or scale the coding proxy or native gateway Deployment, or read its Endpoints, because the wardby-power Role is missing or out of date.
5
+ audience: operator
6
+ tags: [error, low-power, gke, kubernetes, rbac, low_power_scale_forbidden]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Low-power scale forbidden
11
+
12
+ `low_power_scale_forbidden` means the Kubernetes API refused the control plane
13
+ something low-power mode needs: reading or scaling the coding proxy or native
14
+ gateway Deployment, or reading its Endpoints to see whether a woken target is
15
+ ready. The message names the action and the object, for example
16
+ `may not get Endpoints "wardby-native-gateway"`. It can come from a run waking a
17
+ target, from `power_status`, or from `power_sleep`.
18
+
19
+ Low-power mode needs the Role `wardby-power` (and its RoleBinding) in the
20
+ namespace. It grants `get` and `patch` on the two Deployments and `get` on
21
+ their Endpoints, by name. At start-up the control plane warns
22
+ `low_power_scale_forbidden: missing ...` naming each missing permission (for
23
+ example `get endpoints/wardby-native-gateway`); if the check itself fails it
24
+ logs `low_power_access_check_failed`.
25
+
26
+ 1. Re-run the deploy with the mode on: `WARDBY_LOW_POWER=1 deploy/gke/up.sh`
27
+ (on kind, `WARDBY_LOW_POWER=1 deploy/kind-coding/up.sh`). It applies the
28
+ current Role, including the Endpoints rule an older Role may lack.
29
+ 2. Confirm: `kubectl -n wardby-coding describe role wardby-power` lists both
30
+ rules, and `kubectl -n wardby-coding get rolebinding wardby-power` exists.
31
+ 3. If you meant to turn the mode off, unset `WARDBY_LOW_POWER` on the control
32
+ plane too, then re-run `up.sh` without it.
33
+ 4. Trigger the run again.
34
+
35
+ See [Low-power mode on GKE](../low-power-mode.md).
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: errors/low-power-wake-timeout
3
+ title: Wake timed out (scale to zero)
4
+ summary: When scaling from zero, the coding proxy or native gateway did not become ready after being scaled up, or its Deployment does not exist.
5
+ audience: operator
6
+ tags: [error, low-power, gke, kubernetes, scale-to-zero, low_power_wake_timeout]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Low-power wake timed out
11
+
12
+ `low_power_wake_timeout` means a run needed the coding proxy (or, for a sandbox
13
+ run, the native gateway), Wardby scaled it from 0 to 1, and no ready endpoint
14
+ appeared within the bound. The bound is 5 minutes, or
15
+ `KUBERNETES_READY_TIMEOUT_MS` for the proxy and
16
+ `NATIVE_SANDBOX_READY_TIMEOUT_MS` for the gateway when that is higher. It is
17
+ also raised when the target Deployment does not exist.
18
+
19
+ 1. Check the Deployment exists: `kubectl -n wardby-coding get deploy wardby-coding-proxy wardby-native-gateway`
20
+ (names follow `KUBERNETES_PROXY_SERVICE` and `NATIVE_GATEWAY_SERVICE`). If
21
+ one is missing, re-run `deploy/gke/up.sh`.
22
+ 2. If it exists, look at why its Pod is not ready: `kubectl -n wardby-coding describe pod -l app.kubernetes.io/name=wardby-coding-proxy`.
23
+ A cold Autopilot node can take 1 to 2 minutes; unschedulable Pods, image
24
+ pull errors or a failing sidecar are the usual causes.
25
+ 3. If the node is simply slow, raise the timeout for that target above 5
26
+ minutes (300000): set `KUBERNETES_READY_TIMEOUT_MS` (proxy) or
27
+ `NATIVE_SANDBOX_READY_TIMEOUT_MS` (gateway) on the control-plane Deployment.
28
+ 4. Trigger the run again.
29
+
30
+ See [Low-power mode on GKE](../low-power-mode.md).
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: errors/mobile-disabled
3
+ title: Mobile sign-in is not enabled
4
+ summary: The server refused the mobile app's sign-in or registration because WARDBY_MOBILE_ENABLED is not true.
5
+ audience: operator
6
+ tags: [error, mobile, sign-in, oauth, mobile_disabled, WARDBY_MOBILE_ENABLED]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Mobile sign-in is not enabled
11
+
12
+ Mobile sign-in is switched off. An operator turns it on with
13
+ `WARDBY_MOBILE_ENABLED`.
14
+
15
+ Only client registration returns the reason: `400 invalid_redirect_uri` with the
16
+ description `mobile_disabled: mobile sign-in is not enabled on this server
17
+ (WARDBY_MOBILE_ENABLED)`. Sign-in (authorize) and token refresh return the
18
+ generic `invalid_request` or `invalid_grant` with an `id`. The `mobile_disabled`
19
+ reason appears only in the control-plane log line "self-hosted OAuth request
20
+ rejected" for that `id`, so look the `id` up in the control-plane logs.
21
+
22
+ 1. Set `WARDBY_MOBILE_ENABLED=true` on the control plane and restart it. On GKE,
23
+ redeploy with `WARDBY_MOBILE_ENABLED=true` passed to `deploy/gke/up.sh`; a
24
+ run without it turns mobile sign-in off again.
25
+ 2. If you use a white-label build, check that `WARDBY_MOBILE_REDIRECT_URI`
26
+ matches the redirect URI the app uses.
27
+ 3. Sign in again from the app.
28
+
29
+ With an external identity provider this error does not come from Wardby; check
30
+ that the IdP client lists the mobile redirect URI. See
31
+ [Use the wardby mobile app](../mobile-app.md).
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: errors/native-sandbox-capacity
3
+ title: Native sandbox is at capacity
4
+ summary: A sandbox run could not start because the concurrent sandbox run limit or the namespace ResourceQuota has no room; the run failed at start and was not queued.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, kubernetes, capacity, quota, native_sandbox_capacity]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native sandbox is at capacity
11
+
12
+ `native_sandbox_capacity` means a sandbox-mode run could not start because there was no room for it. The run failed at start; it is not queued. The message gives one of two reasons:
13
+
14
+ - **"N sandbox runs are already active (NATIVE_SANDBOX_MAX_CONCURRENT)"**: the cap on concurrent sandbox runs, counted across all server replicas as active gateway sessions, has been reached.
15
+ - **"the namespace's ResourceQuota has no room for another native worker pod"**: with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, the run namespace's quota on pods, CPU, or memory is full.
16
+
17
+ 1. Wait for running sandbox runs to finish, then trigger the run again.
18
+ 2. To allow more at once, raise `NATIVE_SANDBOX_MAX_CONCURRENT` (unset means no cap) and raise the namespace ResourceQuota with it. Each worker pod needs its CPU and memory limits (`NATIVE_SANDBOX_CPUS`, `NATIVE_SANDBOX_MEMORY_MB`) from the quota, which coding runs and the gateway share. Idle warm-pool workers (`NATIVE_SANDBOX_WARM_POOL_SIZE`) take quota too, so leave room for `NATIVE_SANDBOX_MAX_CONCURRENT` plus the pool size.
19
+ 3. Check current usage with `kubectl describe resourcequota -n <namespace>` and `kubectl get pods -n <namespace> -l wardby.io/component=native-run`.
20
+
21
+ See [Run native agents in a sandbox](../native-sandbox.md) and the
22
+ [native sandbox guide](../../docs/native-sandbox.md).
@@ -0,0 +1,19 @@
1
+ ---
2
+ id: errors/native-sandbox-deadline-exceeded
3
+ title: Native run deadline exceeded
4
+ summary: A sandbox run passed its 60-minute maximum lifetime and its worker was stopped.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, native_sandbox_deadline_exceeded]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native run deadline exceeded
11
+
12
+ `native_sandbox_deadline_exceeded` means the run was still going when it reached the sandbox's maximum lifetime of 60 minutes, so the worker was stopped and the run failed. The limit protects against stuck runs and is not configurable.
13
+
14
+ 1. Look for a tool that waits forever or a loop that does not converge.
15
+ 2. Split long work into smaller runs, or delegate parts to sub-agents (each is its own run).
16
+ 3. Trigger the run again.
17
+
18
+ See [Run native agents in a sandbox](../native-sandbox.md) and the
19
+ [native sandbox guide](../../docs/native-sandbox.md).
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: errors/native-sandbox-docker-failed
3
+ title: Native worker Docker command failed
4
+ summary: A Docker command Wardby ran to start or clean up a sandbox worker failed.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, native_sandbox_docker_failed]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native worker Docker command failed
11
+
12
+ `native_sandbox_docker_failed` means a Docker command needed to launch a worker (pull the image, create the run network, join the gateway to it, or start the container) failed. The message names the step and includes Docker's error output.
13
+
14
+ 1. Confirm the server can reach the Docker daemon (`docker info` as the server's user).
15
+ 2. For an image step, confirm the image exists on the host (a local id must already be present; a digest must be pullable without registry credentials, or pull it beforehand).
16
+ 3. For a network step, confirm `NATIVE_GATEWAY_CONTAINER` names a running gateway container on this Docker host.
17
+ 4. Trigger the run again.
18
+
19
+ See [Run native agents in a sandbox](../native-sandbox.md) and the
20
+ [native sandbox guide](../../docs/native-sandbox.md).
@@ -0,0 +1,21 @@
1
+ ---
2
+ id: errors/native-sandbox-gateway-unavailable
3
+ title: Native gateway Service unavailable
4
+ summary: On Kubernetes, Wardby could not find a usable native gateway Service, so a sandbox run could not start.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, kubernetes, native_sandbox_gateway_unavailable]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native gateway Service unavailable
11
+
12
+ `native_sandbox_gateway_unavailable` means that with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, the Service named by `NATIVE_GATEWAY_SERVICE` (default `wardby-native-gateway`) does not exist in the sandbox namespace or has no ClusterIP. Workers dial the Service's ClusterIP, so Wardby needs one.
13
+
14
+ 1. Confirm the namespace: `NATIVE_SANDBOX_NAMESPACE`, else `KUBERNETES_NAMESPACE`, else `wardby-coding`.
15
+ 2. Create the Service there as a regular ClusterIP Service (not headless) that selects the gateway pods (`app.kubernetes.io/name: wardby-native-gateway`) and exposes both 8790 and the deny port 8791.
16
+ 3. Confirm the server's Role allows `get` on `services` in that namespace.
17
+ 4. Alternatively set `NATIVE_GATEWAY_URL` to an address workers can dial, and keep the gateway's NetworkPolicy and the workers' egress consistent with it.
18
+ 5. Trigger the run again.
19
+
20
+ See [Run native agents in a sandbox](../native-sandbox.md) and the
21
+ [native sandbox guide](../../docs/native-sandbox.md).
@@ -0,0 +1,19 @@
1
+ ---
2
+ id: errors/native-sandbox-image-not-pinned
3
+ title: Native worker image not pinned
4
+ summary: NATIVE_SANDBOX_WORKER_IMAGE is a mutable tag, so Wardby refused to launch a sandbox worker.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, native_sandbox_image_not_pinned]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native worker image not pinned
11
+
12
+ `native_sandbox_image_not_pinned` means `NATIVE_SANDBOX_WORKER_IMAGE` is not immutable. Wardby only launches a worker from a digest (`repo@sha256:...`) or a local image id, so the code it isolates cannot change underneath it.
13
+
14
+ 1. Use the digest-pinned reference listed as `nativeWorker` in `dist/quickstart-images.json` for your version, or build locally with `npm run native-worker:image:local` and use the image id from `docker image inspect --format '{{.Id}}' wardby-native-worker:local`.
15
+ 2. On Kubernetes (`NATIVE_SANDBOX_LAUNCHER=kubernetes`) a local image id is not accepted: the image must be a registry digest, `repo@sha256:...`, that the cluster can pull. Push your build to a registry and use its digest.
16
+ 3. Set it as `NATIVE_SANDBOX_WORKER_IMAGE`, restart the server, and trigger the run again.
17
+
18
+ See [Run native agents in a sandbox](../native-sandbox.md) and the
19
+ [native sandbox guide](../../docs/native-sandbox.md).
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: errors/native-sandbox-isolation-mismatch
3
+ title: Native worker pod differs from what Wardby built
4
+ summary: On Kubernetes, the sandbox pod or its NetworkPolicy as stored by the cluster differs from what Wardby created, so the run failed before starting.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, kubernetes, native_sandbox_isolation_mismatch]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native worker pod differs from what Wardby built
11
+
12
+ `native_sandbox_isolation_mismatch` means that with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, Wardby read back the worker pod and NetworkPolicy it had just created and found a security-relevant difference: a service-account token, host networking, a different runtime class, priority class, image, container resources, or container security context or environment, an extra init container, or a changed NetworkPolicy. Something in the cluster modified the objects after creation, typically a mutating admission webhook, policy engine, or service mesh injector. The run is failed and the pod removed.
13
+
14
+ 1. Inspect an equivalent pod while a run is starting: `kubectl get pods -n <namespace> -l wardby.io/component=native-run -o yaml`.
15
+ 2. Find the admission controller that changes it (`kubectl get mutatingwebhookconfigurations`) and exempt pods labeled `wardby.io/component: native-run` and the run namespace's NetworkPolicies, for example by namespace or label selector. Do not disable sidecar-style injection by editing the pod after the fact.
16
+ 3. If `NATIVE_SANDBOX_RUNTIME_CLASS` or `NATIVE_SANDBOX_PRIORITY_CLASS` is set, confirm no policy overrides it. On GKE Autopilot set `KUBERNETES_PLATFORM=gke-autopilot` so pod resources are already in the form Autopilot admits and are not rewritten.
17
+ 4. Trigger the run again.
18
+
19
+ See [Run native agents in a sandbox](../native-sandbox.md) and the
20
+ [native sandbox guide](../../docs/native-sandbox.md).