@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
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: errors/native-sandbox-network-unenforced
3
+ title: Native worker network isolation not proven
4
+ summary: On Kubernetes, Wardby could not prove a sandbox pod's network isolation in time, so it removed the pod and failed the run.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, kubernetes, native_sandbox_network_unenforced]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native worker network isolation not proven
11
+
12
+ `native_sandbox_network_unenforced` means that with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, Wardby ran a check inside the worker pod and it did not pass before the time limit. The check requires the gateway to be reachable on port 8790 while the gateway's deny port (8791 by default), an outside address, and the cloud metadata endpoints (`169.254.169.254:80`, the EKS Pod Identity agent `169.254.170.23:80` and `[fd00:ec2::23]:80`, and EC2's IPv6 metadata address `[fd00:ec2::254]:80`) are not. The message says which part failed. The pod is removed and the run never started.
13
+
14
+ - **"the gateway was unreachable"**: confirm the gateway Deployment has ready pods, the `wardby-native-gateway` Service (or `NATIVE_GATEWAY_SERVICE`) exposes 8790 and 8791, and the gateway's own NetworkPolicy admits `wardby.io/component: native-run` pods on port 8790.
15
+ - **"the gateway's deny port was reachable"** or **"an outside address was reachable"** (or a metadata endpoint): the cluster is not enforcing the per-run NetworkPolicy. Confirm your CNI enforces `NetworkPolicy` (some local clusters need a policy-capable CNI such as Calico), and that no other policy or mesh adds egress for these pods.
16
+ - If the Service lacks port 8791, or the gateway's policy does not admit 8791, unprogrammed pods would look isolated. Keep both in place; the check depends on them.
17
+ - On a slow node the policy can take longer to program. Retrigger the run once, or raise `NATIVE_SANDBOX_ENFORCEMENT_TIMEOUT_MS` (default 30000), before changing anything.
18
+
19
+ A cluster that does not enforce NetworkPolicy fails every sandbox run this way, by design. Switch the agent back to `control-plane` if you cannot enable enforcement.
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,31 @@
1
+ ---
2
+ id: errors/native-sandbox-requires-catalog
3
+ title: Sandbox run has no model catalog entry
4
+ summary: A sandbox-mode run could not start because no model catalog entry was recorded for it.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, model-catalog, native_sandbox_requires_catalog]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Sandbox run has no model catalog entry
11
+
12
+ `native_sandbox_requires_catalog` means a sandbox-mode run reached its worker
13
+ launch without a model catalog entry. The worker prices every model call and
14
+ enforces the run's budget from that entry, so Wardby fails the run before
15
+ starting a worker or spending anything.
16
+
17
+ Every run records its model's catalog entry when it first starts. A model
18
+ that is unknown, disabled, or has no configured provider fails earlier with
19
+ its own model error, not this one. This error only appears when the process
20
+ executing the run does not use Wardby's catalog-backed model router, for
21
+ example a modified build or an embedding that supplies its own LLM provider.
22
+
23
+ 1. Run sandbox-mode agents on a standard `wardby serve` (or `wardby
24
+ scheduler` / `wardby mcp`) process, which always uses the catalog.
25
+ 2. If you supply your own LLM provider, route it through the model catalog,
26
+ or keep the agent on `control-plane` with `update_agent` or
27
+ `wardby agent mode <name> control-plane`.
28
+ 3. Trigger the run again. A failed run is not retried on its own.
29
+
30
+ See [Run native agents in a sandbox](../native-sandbox.md) and
31
+ [Models and the model catalog](../models.md).
@@ -0,0 +1,19 @@
1
+ ---
2
+ id: errors/native-sandbox-unavailable
3
+ title: Native execution mode unavailable
4
+ summary: A run failed with native_sandbox_unavailable because its agent is in sandbox mode but the server has no native sandbox configured.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, native_sandbox_unavailable]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native execution mode unavailable
11
+
12
+ `native_sandbox_unavailable` means the agent's `nativeExecutionMode` is `sandbox` but this deployment has no native sandbox configured. Wardby fails the run before any spend rather than running it unisolated.
13
+
14
+ 1. To use the sandbox, set `NATIVE_SANDBOX_LAUNCHER=docker`, `NATIVE_SANDBOX_WORKER_IMAGE`, and `NATIVE_GATEWAY_CONTAINER` on the server that executes runs (`wardby serve` or `wardby scheduler`), start the native gateway, and restart the server.
15
+ 2. Otherwise set the agent back to `control-plane` with `update_agent`.
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,21 @@
1
+ ---
2
+ id: errors/native-sandbox-warm-delivery-failed
3
+ title: Native sandbox warm worker could not take the run
4
+ summary: A run claimed an idle warm-pool worker, delivering its input failed, and the worker could not be confirmed stopped within 30 seconds, so the run failed instead of cold-launching.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, warm-pool, kubernetes, docker, native_sandbox_warm_delivery_failed]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native sandbox warm worker could not take the run
11
+
12
+ `native_sandbox_warm_delivery_failed` means a sandbox run claimed an idle worker from the warm pool (`NATIVE_SANDBOX_WARM_POOL_SIZE`), but writing the run's input into that worker failed. The worker may already hold the run's one-time gateway capability, so Wardby removes it and waits up to 30 seconds for it to be confirmed gone before starting a cold worker. This error means it could not be confirmed gone in that time, so the run failed rather than risk two workers holding the same capability. If the worker is confirmed gone, the run cold-launches and you see no error (the log has a `fallback` event).
13
+
14
+ 1. Trigger the run again. Most failures are transient.
15
+ 2. Check that the worker is gone: `kubectl get pods -n <namespace> -l wardby.io/pool=warm` (Kubernetes) or `docker ps --all --filter label=io.wardby.pool=warm` (Docker). Pool upkeep removes leftovers, but a stuck pod usually means the node or Docker host is unhealthy.
16
+ 3. Look for `native-warm-pool` log entries with `event` `fallback`, and check that the server may exec into pods in the run namespace.
17
+ 4. To bypass the pool while you investigate, set `NATIVE_SANDBOX_WARM_POOL_SIZE=0`; every run then cold-starts.
18
+
19
+ See [Run native agents in a sandbox](../native-sandbox.md) and the
20
+ [native sandbox guide](../../docs/native-sandbox.md#warm-pool). A related error is
21
+ [native_sandbox_capacity](native-sandbox-capacity.md).
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: errors/native-sandbox-worker-exited
3
+ title: Native worker exited without a result
4
+ summary: The sandbox worker container ended without producing a result.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, native_sandbox_worker_exited]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native worker exited without a result
11
+
12
+ `native_sandbox_worker_exited` means the worker container stopped without reporting a result; the message includes its exit code. Common causes are a tool that exhausted the worker's memory or process limit, or a crash in tool code.
13
+
14
+ 1. Read the exit code in the run's error (`get_run`). Code 137 usually means the memory limit was hit.
15
+ 2. If limits are the cause, raise `NATIVE_SANDBOX_MEMORY_MB`, `NATIVE_SANDBOX_PIDS`, or `NATIVE_SANDBOX_CPUS` on the server and restart it.
16
+ 3. Otherwise test the agent's tools with `dry_run_tool` and fix the failing code.
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,20 @@
1
+ ---
2
+ id: errors/native-sandbox-worker-lost
3
+ title: Native worker lost
4
+ summary: The sandbox worker container disappeared and was not relaunched.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, native_sandbox_worker_lost]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native worker lost
11
+
12
+ `native_sandbox_worker_lost` means the run's worker container (or Kubernetes pod) is gone and left no result, for example because the Docker host restarted or an operator removed the container. Wardby never relaunches a worker, because a relaunch could repeat tool side effects.
13
+
14
+ 1. Check whether the Docker host or daemon restarted around the run's time.
15
+ 2. List workers with `docker ps --all --filter label=io.wardby.component=native-worker`; do not remove workers of running runs by hand.
16
+ 3. On Kubernetes, check whether the node was drained or preempted, and list pods with `kubectl get pods -n <namespace> -l wardby.io/component=native-run`.
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,22 @@
1
+ ---
2
+ id: errors/native-sandbox-worker-unready
3
+ title: Native worker pod did not start
4
+ summary: On Kubernetes, the sandbox worker pod did not reach the Running state in time, so the run failed before starting.
5
+ audience: operator
6
+ tags: [error, native-agents, sandbox, kubernetes, native_sandbox_worker_unready]
7
+ appliesTo: ">=0.5.4"
8
+ ---
9
+
10
+ # Native worker pod did not start
11
+
12
+ `native_sandbox_worker_unready` means that with `NATIVE_SANDBOX_LAUNCHER=kubernetes`, the worker pod stayed pending past the start-up limit (`NATIVE_SANDBOX_READY_TIMEOUT_MS`, default two minutes). Nothing ran.
13
+
14
+ 1. Describe the pod while it waits: `kubectl describe pod -n <namespace> -l wardby.io/component=native-run`. Look at the events for image pull errors, unschedulable reasons, or an unknown runtime class.
15
+ 2. Image pull: the cluster must be able to pull `NATIVE_SANDBOX_WORKER_IMAGE` (a registry digest) without interactive credentials; add a pull secret to the namespace's default service account if the registry is private.
16
+ 3. Scheduling: raise node capacity or lower `NATIVE_SANDBOX_CPUS` and `NATIVE_SANDBOX_MEMORY_MB`, and check namespace ResourceQuotas.
17
+ 4. Runtime class: confirm `NATIVE_SANDBOX_RUNTIME_CLASS` (or `KUBERNETES_RUNTIME_CLASS`) exists on the cluster. On Amazon EKS (`KUBERNETES_PLATFORM=eks`) the `gvisor` RuntimeClass must use handler `runsc` and its scheduling block must match your sandbox nodes (label `wardby.dev/sandbox=gvisor`, taint `sandbox=gvisor:NoSchedule`); a mismatch leaves the pod pending.
18
+ 5. On a cold node, such as a first gVisor pod on GKE Autopilot (about two minutes), raise `NATIVE_SANDBOX_READY_TIMEOUT_MS` (1000 to 1800000; about 600000 on Autopilot).
19
+ 6. Trigger the run again.
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,26 @@
1
+ ---
2
+ id: errors/secret-broker-body-invalid
3
+ title: Secret broker body invalid
4
+ summary: Body placement needs a JSON-object or form-encoded request body with a matching content-type.
5
+ audience: operator
6
+ tags: [error, secrets, secret_broker_body_invalid]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Secret broker body invalid
11
+
12
+ `secret_broker_body_invalid` means a secret placed in the request body could not
13
+ be added to the body the tool sent. Body placement needs one of:
14
+
15
+ - a JSON object body with `content-type: application/json` (or a `+json` type);
16
+ - a form body with `content-type: application/x-www-form-urlencoded`.
17
+
18
+ The request must have a body, valid JSON that is an object (not an array or a
19
+ scalar), and a matching `content-type` header.
20
+
21
+ 1. Send a body of a supported type and set the `content-type` header to match.
22
+ 2. If the API expects the credential elsewhere, change the placement with
23
+ `set_secret_broker` to `header` or `query`.
24
+
25
+ See [Brokered secrets](../brokered-secrets.md) and the
26
+ [secrets guide](../../docs/tool-secrets.md).
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: errors/secret-broker-changed
3
+ title: Brokering changed since the link was created
4
+ summary: A browser link to remove brokering was created before the secret's broker config changed, so it no longer applies.
5
+ audience: operator
6
+ tags: [error, secrets, secret_broker_changed]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Brokering changed since the link was created
11
+
12
+ `secret_broker_changed` means the browser link for removing brokering was minted
13
+ for a broker config that has since changed or been removed. A link only ever
14
+ removes the exact config it was created for.
15
+
16
+ 1. Call `set_secret_broker` with `broker: null` again to get a new link.
17
+ 2. Check the config shown on the new page before confirming removal.
18
+
19
+ See [Brokered secrets](../brokered-secrets.md) and the
20
+ [secrets guide](../../docs/tool-secrets.md).
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: errors/secret-broker-config-invalid
3
+ title: Secret broker config invalid
4
+ summary: A broker config failed validation: hosts, path prefixes, or placement are malformed.
5
+ audience: operator
6
+ tags: [error, secrets, secret_broker_config_invalid]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Secret broker config invalid
11
+
12
+ `secret_broker_config_invalid` means the broker config passed to `create_secret`,
13
+ `set_secret_broker`, or the browser form did not validate. The message lists
14
+ each problem. Common causes:
15
+
16
+ - `hosts` is empty, has more than 20 entries, or contains a scheme, port,
17
+ wildcard, or IP address (including short forms such as `127.1`), or a label
18
+ ending in `-`; use exact hostnames such as `api.example.com`;
19
+ - a `pathPrefixes` entry does not start with `/`, or contains `?`, `#`, a
20
+ backslash, a control character, `%2F`, or `%5C`;
21
+ - a header `format` does not contain `{value}` exactly once or contains a line
22
+ break, or the header name is not allowed (`Host`, `Content-Length` and similar);
23
+ - an AWS `region` or `service` is malformed;
24
+ - the config or its placement has fields it does not define.
25
+
26
+ 1. Fix the fields named in the message and retry.
27
+ 2. The config shape is `{ hosts, pathPrefixes?, placement }`.
28
+
29
+ See [Brokered secrets](../brokered-secrets.md) and the
30
+ [secrets guide](../../docs/tool-secrets.md).
@@ -0,0 +1,27 @@
1
+ ---
2
+ id: errors/secret-broker-conflict
3
+ title: Secret broker placement conflict
4
+ summary: The request already sets the header, parameter, or field a broker places, two brokers collide, or more than one SigV4 secret was named.
5
+ audience: operator
6
+ tags: [error, secrets, secret_broker_conflict]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Secret broker placement conflict
11
+
12
+ `secret_broker_conflict` means the request would set the same spot twice. A
13
+ brokered value is never merged with or overridden by one from the tool. It
14
+ occurs when:
15
+
16
+ - the tool sets the header, query parameter, or body field that a brokered
17
+ secret places (for SigV4: `authorization`, `x-amz-date`,
18
+ `x-amz-security-token`, or `x-amz-content-sha256`);
19
+ - two named secrets place the same header, parameter, or field;
20
+ - more than one AWS SigV4 secret is named in one request.
21
+
22
+ 1. Remove the conflicting header, parameter, or field from the tool's request.
23
+ 2. Send secrets that place the same spot in separate requests.
24
+ 3. Name at most one SigV4 secret per request.
25
+
26
+ See [Brokered secrets](../brokered-secrets.md) and the
27
+ [secrets guide](../../docs/tool-secrets.md).
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: errors/secret-broker-destination-denied
3
+ title: Secret broker destination denied
4
+ summary: A fetch with a brokered secret targeted a URL that is not https, uses a non-default port, or is outside the allowed hosts or path prefixes.
5
+ audience: operator
6
+ tags: [error, secrets, secret_broker_destination_denied]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Secret broker destination denied
11
+
12
+ `secret_broker_destination_denied` means a brokered secret may not be sent to
13
+ the requested URL. The message says which check failed:
14
+
15
+ - the URL is not `https`, or names a port other than the default;
16
+ - the host is not in the secret's `hosts` (exact match, no wildcards);
17
+ - the path does not start with any of the secret's `pathPrefixes`, or, for a
18
+ secret with `pathPrefixes`, contains an encoded slash or backslash (`%2F`,
19
+ `%5C`).
20
+
21
+ 1. Correct the URL in the tool.
22
+ 2. If the destination is intended, the secret's owner updates the config with
23
+ `set_secret_broker`, adding the host or path prefix.
24
+ 3. Make sure the tool attachment's `allowedHosts` also lists the host; a host
25
+ missing there is refused by the normal fetch policy.
26
+
27
+ See [Brokered secrets](../brokered-secrets.md) and the
28
+ [secrets guide](../../docs/tool-secrets.md).
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: errors/secret-broker-value-invalid
3
+ title: Secret broker value invalid
4
+ summary: A brokered value is shorter than 6 characters, or an AWS SigV4 secret is not the expected JSON.
5
+ audience: operator
6
+ tags: [error, secrets, secret_broker_value_invalid]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Secret broker value invalid
11
+
12
+ `secret_broker_value_invalid` means the stored value cannot be brokered under its
13
+ config. It is returned when saving a config and when a tool uses the secret.
14
+
15
+ - A brokered value must be at least 6 characters.
16
+ - An AWS SigV4 secret's value must be JSON
17
+ `{"accessKeyId": "...", "secretAccessKey": "...", "sessionToken": "..."}` with
18
+ no other keys. `sessionToken` is optional; the secret access key and session
19
+ token must each be at least 6 characters.
20
+
21
+ 1. Re-enter the value with `create_secret` using the same name; it rotates the
22
+ value in place. Leave out `broker`: a rotation without one keeps the
23
+ existing broker config. In the browser form, correct the value and submit
24
+ the same link again.
25
+ 2. For SigV4, store the credentials as that JSON object.
26
+
27
+ See [Brokered secrets](../brokered-secrets.md) and the
28
+ [secrets guide](../../docs/tool-secrets.md).
@@ -0,0 +1,24 @@
1
+ ---
2
+ id: errors/secret-brokered
3
+ title: Secret is brokered and cannot be read
4
+ summary: A tool called secrets.get on a brokered secret; brokered secrets are only sent with fetch(url, { secrets }).
5
+ audience: operator
6
+ tags: [error, secrets, secret_brokered]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Secret is brokered and cannot be read
11
+
12
+ `secret_brokered` means a tool called `secrets.get(name)` on a secret that is
13
+ brokered. A brokered secret never exposes its value to tool code.
14
+
15
+ 1. Update the tool to send the secret with
16
+ `fetch(url, { secrets: ["NAME"] })`; the host places the value in the request.
17
+ 2. Or, if the tool really must read the value, have the secret owner remove
18
+ brokering with `set_secret_broker` and `broker: null`, confirmed in the
19
+ browser. This makes the value readable by every tool granted it.
20
+ 3. `attach_tool` and `set_secret_broker` warn when a granted tool calls
21
+ `secrets.get`; that scan is best-effort.
22
+
23
+ See [Brokered secrets](../brokered-secrets.md) and the
24
+ [secrets guide](../../docs/tool-secrets.md).
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: errors/secret-not-brokered
3
+ title: Secret is not brokered
4
+ summary: A fetch named a secret that is readable, not attached to the agent, or not granted to the tool.
5
+ audience: operator
6
+ tags: [error, secrets, secret_not_brokered]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Secret is not brokered
11
+
12
+ `secret_not_brokered` means `fetch(url, { secrets: [...] })` named a secret that
13
+ is not a brokered secret available to this tool: it is readable, it is not
14
+ attached to the agent, it is not listed in the attachment's `allowedSecrets`, or
15
+ the request named more than 8 secrets.
16
+
17
+ 1. Check the name matches the alias the secret is attached under
18
+ (`attach_secret`) and appears in the tool attachment's `allowedSecrets`.
19
+ 2. To send the secret through `fetch`, make it brokered with
20
+ `set_secret_broker { name, broker }`.
21
+ 3. If the secret is meant to stay readable, read it with `secrets.get(name)`
22
+ instead of naming it in `fetch`.
23
+
24
+ See [Brokered secrets](../brokered-secrets.md) and the
25
+ [secrets guide](../../docs/tool-secrets.md).
@@ -0,0 +1,48 @@
1
+ ---
2
+ id: errors/slack-auth-failed
3
+ title: Bot authentication failed — invalid or revoked token
4
+ summary: wardby's Slack bot token is invalid, revoked, disabled, or missing a required scope, so delivery to every linked channel is paused.
5
+ audience: operator
6
+ tags: [error, notifications, auth, authentication, invalid_auth, token_revoked, missing_scope]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Bot authentication failed — invalid or revoked token
11
+
12
+ Slack returned `invalid_auth`, `token_revoked`, `account_inactive`,
13
+ `missing_scope`, or `not_authed` for `WARDBY_SLACK_BOT_TOKEN`. This is
14
+ different from a single channel being unreachable: it means the token
15
+ itself no longer works, so wardby pauses delivery to **every** linked
16
+ channel rather than attempting and failing each one. Deliveries already
17
+ queued stay pending — nothing is lost — and wardby automatically re-checks
18
+ the token every five minutes with Slack's `auth.test`, resuming delivery as
19
+ soon as it succeeds.
20
+
21
+ A **missing scope** (`missing_scope`) does not fix itself this way:
22
+ `auth.test` needs no scope, so the re-check succeeds, the next delivery fails
23
+ again, and delivery pauses again. Add the scope and reinstall the app (steps
24
+ 1–2 below).
25
+
26
+ The same errors while linking a channel refuse the link, except
27
+ `missing_scope` from a missing `channels:read`/`groups:read`, which only
28
+ skips validating the channel id.
29
+
30
+ wardby logs this once per pause, not on every retry.
31
+
32
+ ## What to do
33
+
34
+ 1. In Slack, check the app's **OAuth & Permissions** page: is the bot
35
+ installed, and does it still have `chat:write` at minimum?
36
+ 2. If the app's scopes changed (for example after editing
37
+ [`app-manifest.yaml`](../../deploy/slack/app-manifest.yaml)), reinstall
38
+ the app to the workspace to apply them.
39
+ 3. If the token was revoked or the app was uninstalled, reinstall it and
40
+ copy a fresh Bot User OAuth Token.
41
+ 4. If Slack issued a new token, set it as `WARDBY_SLACK_BOT_TOKEN` and
42
+ restart wardby; the startup log line `chat notifications acting as`
43
+ confirms it. If the token is unchanged (a scope added and the app
44
+ reinstalled), no restart is needed: pending deliveries go out after the
45
+ next check.
46
+
47
+ See [Send workflow updates to Slack](../../docs/slack-notifications.md) for
48
+ the full guide.
@@ -0,0 +1,39 @@
1
+ ---
2
+ id: errors/slack-channel-unreachable
3
+ title: Channel unreachable — bot not invited or archived
4
+ summary: wardby's bot can no longer post to a linked Slack channel — it was removed, archived, or never invited — and that channel's pending deliveries have failed.
5
+ audience: operator
6
+ tags: [error, notifications, channel, channel-error, not_in_channel, channel_not_found, is_archived]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Channel unreachable — bot not invited or archived
11
+
12
+ Slack returned `channel_not_found`, `not_in_channel`, or `is_archived` when
13
+ wardby tried to post or update a message. This means the bot genuinely
14
+ cannot write to that channel right now — the channel was deleted or
15
+ archived, or (most commonly) the bot was never invited to a private
16
+ channel.
17
+
18
+ wardby fails that channel's pending deliveries immediately rather than
19
+ retrying forever, and stamps the error on every `NotificationChannel` link
20
+ pointing at it. `list_notification_channels` shows it in `lastError` until
21
+ you fix it.
22
+
23
+ ## What to do
24
+
25
+ 1. In Slack, confirm the channel still exists and isn't archived.
26
+ 2. If it's private, invite the bot: `/invite @wardby` (or whatever you named
27
+ the app) in that channel.
28
+ 3. Confirm it worked with `test_notification_channel` — it posts "✅ wardby
29
+ is connected to this channel."
30
+ 4. New events deliver as soon as the bot can post there again. Deliveries
31
+ that already failed are not resent. To clear `lastError`, re-link the
32
+ channel with `link_notification_channel` using the same arguments as
33
+ before (a successful `test_notification_channel` in step 3 also clears it).
34
+
35
+ If the channel is gone for good, remove the link with
36
+ `unlink_notification_channel` instead.
37
+
38
+ See [Send workflow updates to Slack](../../docs/slack-notifications.md) for
39
+ the full guide.
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: errors/slack-not-configured
3
+ title: Notification bot token not configured
4
+ summary: link_notification_channel and test_notification_channel are refused because wardby has no Slack bot token configured.
5
+ audience: operator
6
+ tags: [error, notifications, configuration, config, setup, WARDBY_SLACK_BOT_TOKEN]
7
+ appliesTo: ">=0.6.0"
8
+ ---
9
+
10
+ # Notification bot token not configured
11
+
12
+ `link_notification_channel` and `test_notification_channel` are refused when
13
+ the wardby server has no `WARDBY_SLACK_BOT_TOKEN` set. Without it, Slack workflow notifications are
14
+ entirely disabled: the notification dispatcher does not start, and any event
15
+ that would otherwise post to Slack is skipped — none are queued or
16
+ backfilled once you do configure it.
17
+
18
+ `list_notification_channels` and `unlink_notification_channel` still work,
19
+ so you can see and remove links created earlier, but nothing is delivered to
20
+ them while Slack is unconfigured.
21
+
22
+ ## What to do
23
+
24
+ 1. Create the Slack app from
25
+ [`deploy/slack/app-manifest.yaml`](../../deploy/slack/app-manifest.yaml)
26
+ and install it to your workspace.
27
+ 2. Copy the Bot User OAuth Token (`xoxb-…`) and set
28
+ `WARDBY_SLACK_BOT_TOKEN`, stored like any other provider credential.
29
+ 3. Restart wardby. The startup log line `chat notifications acting as`
30
+ confirms which Slack workspace and bot it authenticated as.
31
+
32
+ See [Send workflow updates to Slack](../../docs/slack-notifications.md) for
33
+ the full setup.
@@ -30,6 +30,11 @@ Claude Code. Run `wardby doctor` afterwards to verify the local installation.
30
30
  Review that branch with
31
31
  `trigger_agent {"agentId": "<reviewer id>", "review": {"branch": "wardby/run-<run id>"}}`.
32
32
  You need Docker and an OpenAI key (Codex) or an Anthropic key (Claude Code).
33
+ For a Python project (a root `pyproject.toml`, `setup.py`, `setup.cfg`,
34
+ `Pipfile` or `requirements*.txt`), the builder gets a Node + Python 3.12
35
+ workspace and can run `pytest`. Quickstart also offers the packages the
36
+ repository declares as the builder's package allowlist, so it can install
37
+ them (`--allow-repo-packages` in a non-interactive run).
33
38
  See [Use local git repositories](local-repositories.md).
34
39
  - **B. A coding agent that opens GitHub pull requests.** Do A first. Then
35
40
  install a GitHub App on the repository (Contents and Pull requests: read and
@@ -42,6 +47,19 @@ Claude Code. Run `wardby doctor` afterwards to verify the local installation.
42
47
  with webhooks, link a native agent to the repository with the `pull_request`
43
48
  trigger, and open a pull request. See [Code review agents](code-review-agents.md).
44
49
 
50
+ - **D. Another language (Go, Java, Rust…).** Do A, then build an image with
51
+ that toolchain and set the builder's `codingProfile.workerImageRef`. Ask your
52
+ assistant "Help me build a Wardby worker image for Go"; it follows
53
+ [Build a custom worker image](build-worker-image.md).
54
+
55
+ The quickstart ends with a menu of next steps to ask your assistant: run the
56
+ builder and reviewer, allow more packages, build a worker image, schedule an
57
+ agent, set up an architecture reviewer and keeper (see
58
+ [Set up an architecture agent](architecture-agent.md), which has a
59
+ local-repository variant), or plan a GKE deployment
60
+ ([Deploy on GKE](deploy-gke.md)). Each names the help article the assistant
61
+ follows.
62
+
45
63
  The full step-by-step guide is "Choose what to set up next" in
46
64
  [`docs/getting-started.md`](../docs/getting-started.md).
47
65
 
package/help/github.md CHANGED
@@ -3,7 +3,7 @@ id: github-integration
3
3
  title: Connect GitHub repositories
4
4
  summary: Authorize repository access and configure Wardby coding or review agents through a scoped GitHub App.
5
5
  audience: operator
6
- tags: [github, repositories, coding-agents, code-review]
6
+ tags: [github, repositories, coding-agents, code-review, WARDBY_GITHUB_ALLOWED_ACCOUNTS]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
@@ -27,6 +27,17 @@ Set the App's credentials as `GITHUB_APP_ID` and `GITHUB_APP_PRIVATE_KEY` on
27
27
  the wardby server. Without them, a coding run on a GitHub repository fails with
28
28
  [`vcs_github_not_configured`](errors/vcs-github-not-configured.md).
29
29
 
30
+ From Wardby 0.6.0, wardby serves only trusted GitHub accounts through the App:
31
+ the App's owner, plus any accounts listed in `WARDBY_GITHUB_ALLOWED_ACCOUNTS`
32
+ (comma-separated logins). Other accounts' events are ignored and their
33
+ repositories are refused with `github_account_not_allowed` (help article
34
+ `errors/github-account-not-allowed`), including existing links and scheduled
35
+ runs after an upgrade. wardby removes the App when another account installs it
36
+ or changes its repository selection; remove installations that already exist
37
+ on other accounts by hand (App settings, **Install App**). After transferring
38
+ the App or renaming its owner, list the new owner in the variable or restart
39
+ wardby.
40
+
30
41
  No GitHub App is needed for a git repository on the wardby host. See
31
42
  [Use local git repositories](local-repositories.md).
32
43
 
@@ -62,4 +73,10 @@ opened. See [Automatic review fix rounds](review-fix-rounds.md).
62
73
  finishes, and gates its ability to approve on CI passing. See
63
74
  [Review after CI (`waitForCi`)](code-review-agents.md#review-after-ci-waitforci).
64
75
 
76
+ With Wardby 0.6.0 or later, a `pull_request` reviewer also holds its review, with or without
77
+ `waitForCi`, until the pull request's own delegating run finishes, when its
78
+ opening coding run was delegated by a lead agent. See [Reviewing a pull
79
+ request a delegated run
80
+ opened](code-review-agents.md#reviewing-a-pull-request-a-delegated-run-opened).
81
+
65
82
  For Jira Cloud instead of GitHub, see [Run Jira agents](jira.md).
@@ -21,7 +21,7 @@ audience, and the granted Wardby scopes in `scope` or `scp`.
21
21
 
22
22
  Scopes authorize normal operations such as managing agents, runs, tools,
23
23
  datastores, secrets, webhooks, budgets, packages, services, memory, and
24
- models. Five sensitive permissions have an additional role requirement:
24
+ models. Six sensitive permissions have an additional role requirement:
25
25
 
26
26
  - `agents:admin` requires the Wardby `admin` role.
27
27
  - `packages:approve` requires the `admin` or `package-approver` role.
@@ -31,6 +31,10 @@ models. Five sensitive permissions have an additional role requirement:
31
31
  - `models:admin` requires the `admin` or `model-manager` role. It adds,
32
32
  overrides, disables, and resets model catalog entries; see
33
33
  [Models and pricing](models.md).
34
+ - `power:manage` requires the `admin` role. It reads low-power state and
35
+ sleeps the coding proxy and native gateway now (`power_status`,
36
+ `power_sleep`); see
37
+ [Low-power mode](../docs/getting-started-gke.md#low-power-mode).
34
38
 
35
39
  Map roles only from an IdP claim that users cannot self-assign. Removing a
36
40
  role affects the next token the caller receives.