@wardby/cli 0.3.0 → 0.4.1

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 (275) hide show
  1. package/.env.example +22 -3
  2. package/README.md +11 -9
  3. package/dist/cli-help.d.ts +1 -1
  4. package/dist/cli-help.js +1 -0
  5. package/dist/cli.js +68 -10
  6. package/dist/coding/base-commit.d.ts +6 -0
  7. package/dist/coding/base-commit.js +12 -0
  8. package/dist/coding/protocol.d.ts +17 -1
  9. package/dist/coding/protocol.js +17 -6
  10. package/dist/coding/provider.d.ts +6 -1
  11. package/dist/coding/provider.js +16 -9
  12. package/dist/config/providers.d.ts +25 -0
  13. package/dist/config/providers.js +71 -0
  14. package/dist/core/attribution.d.ts +101 -0
  15. package/dist/core/attribution.js +208 -0
  16. package/dist/core/budget-groups.d.ts +17 -10
  17. package/dist/core/budget-groups.js +15 -12
  18. package/dist/core/coding-queue.d.ts +3 -0
  19. package/dist/core/coding-queue.js +6 -2
  20. package/dist/core/coding-service-status.d.ts +11 -0
  21. package/dist/core/coding-service-status.js +17 -0
  22. package/dist/core/cost-report.d.ts +88 -0
  23. package/dist/core/cost-report.js +248 -0
  24. package/dist/core/dispatch.d.ts +42 -2
  25. package/dist/core/dispatch.js +144 -26
  26. package/dist/core/engine-native.js +17 -4
  27. package/dist/core/glob.d.ts +10 -0
  28. package/dist/core/glob.js +33 -0
  29. package/dist/core/host-events.d.ts +24 -1
  30. package/dist/core/host-events.js +341 -1
  31. package/dist/core/host-status.d.ts +19 -2
  32. package/dist/core/host-status.js +47 -30
  33. package/dist/core/issue-bridge.d.ts +60 -0
  34. package/dist/core/issue-bridge.js +189 -0
  35. package/dist/core/issue-dedupe.d.ts +70 -0
  36. package/dist/core/issue-dedupe.js +255 -0
  37. package/dist/core/issue-events.d.ts +42 -0
  38. package/dist/core/issue-events.js +155 -0
  39. package/dist/core/issue-status.d.ts +29 -0
  40. package/dist/core/issue-status.js +241 -0
  41. package/dist/core/issue-tracker-tools.d.ts +64 -0
  42. package/dist/core/issue-tracker-tools.js +850 -0
  43. package/dist/core/model-usage.d.ts +10 -0
  44. package/dist/core/model-usage.js +24 -0
  45. package/dist/core/reconciler.d.ts +8 -4
  46. package/dist/core/reconciler.js +15 -4
  47. package/dist/core/review-host-tools.js +10 -3
  48. package/dist/core/run-pricing.d.ts +61 -0
  49. package/dist/core/run-pricing.js +56 -0
  50. package/dist/core/runner.d.ts +5 -2
  51. package/dist/core/runner.js +178 -27
  52. package/dist/core/scheduler.d.ts +4 -1
  53. package/dist/core/scheduler.js +3 -2
  54. package/dist/core/self-defects.d.ts +80 -0
  55. package/dist/core/self-defects.js +180 -0
  56. package/dist/core/tool-names.js +3 -0
  57. package/dist/core/webhooks.d.ts +9 -1
  58. package/dist/core/webhooks.js +19 -1
  59. package/dist/env.js +6 -1
  60. package/dist/generated/prisma/browser.d.ts +66 -0
  61. package/dist/generated/prisma/client.d.ts +66 -0
  62. package/dist/generated/prisma/commonInputTypes.d.ts +122 -52
  63. package/dist/generated/prisma/enums.d.ts +7 -0
  64. package/dist/generated/prisma/enums.js +6 -0
  65. package/dist/generated/prisma/internal/class.d.ts +99 -0
  66. package/dist/generated/prisma/internal/class.js +4 -4
  67. package/dist/generated/prisma/internal/prismaNamespace.d.ts +826 -1
  68. package/dist/generated/prisma/internal/prismaNamespace.js +135 -2
  69. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +142 -0
  70. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +135 -2
  71. package/dist/generated/prisma/models/Agent.d.ts +389 -1
  72. package/dist/generated/prisma/models/AgentIssueProject.d.ts +1838 -0
  73. package/dist/generated/prisma/models/AgentIssueProject.js +1 -0
  74. package/dist/generated/prisma/models/AgentRepository.d.ts +1 -1
  75. package/dist/generated/prisma/models/AuthUser.d.ts +1 -1
  76. package/dist/generated/prisma/models/CodingProxySession.d.ts +73 -1
  77. package/dist/generated/prisma/models/CodingRun.d.ts +130 -1
  78. package/dist/generated/prisma/models/CodingRunServiceStatus.d.ts +1404 -0
  79. package/dist/generated/prisma/models/CodingRunServiceStatus.js +1 -0
  80. package/dist/generated/prisma/models/IssueFingerprint.d.ts +1183 -0
  81. package/dist/generated/prisma/models/IssueFingerprint.js +1 -0
  82. package/dist/generated/prisma/models/IssuePullRequest.d.ts +1255 -0
  83. package/dist/generated/prisma/models/IssuePullRequest.js +1 -0
  84. package/dist/generated/prisma/models/ModelCatalogEntry.d.ts +1322 -0
  85. package/dist/generated/prisma/models/ModelCatalogEntry.js +1 -0
  86. package/dist/generated/prisma/models/Run.d.ts +933 -1
  87. package/dist/generated/prisma/models/RunAttribution.d.ts +1259 -0
  88. package/dist/generated/prisma/models/RunAttribution.js +1 -0
  89. package/dist/generated/prisma/models/RunIssueStatus.d.ts +1199 -0
  90. package/dist/generated/prisma/models/RunIssueStatus.js +1 -0
  91. package/dist/generated/prisma/models/RunModelUsage.d.ts +1316 -0
  92. package/dist/generated/prisma/models/RunModelUsage.js +1 -0
  93. package/dist/generated/prisma/models/WorkItem.d.ts +1408 -0
  94. package/dist/generated/prisma/models/WorkItem.js +1 -0
  95. package/dist/generated/prisma/models.d.ts +9 -0
  96. package/dist/help-index.json +355 -16
  97. package/dist/import/neutral-schema.d.ts +16 -16
  98. package/dist/knowledge/check.d.ts +13 -0
  99. package/dist/knowledge/check.js +69 -0
  100. package/dist/knowledge/cli.d.ts +14 -0
  101. package/dist/knowledge/cli.js +67 -0
  102. package/dist/knowledge/concept.d.ts +54 -0
  103. package/dist/knowledge/concept.js +78 -0
  104. package/dist/knowledge/note.d.ts +11 -0
  105. package/dist/knowledge/note.js +39 -0
  106. package/dist/knowledge/relevance.d.ts +11 -0
  107. package/dist/knowledge/relevance.js +14 -0
  108. package/dist/knowledge/span-hash.d.ts +3 -0
  109. package/dist/knowledge/span-hash.js +16 -0
  110. package/dist/mcp/auth/access.d.ts +4 -2
  111. package/dist/mcp/auth/ownership.d.ts +9 -9
  112. package/dist/mcp/auth/resource-server.d.ts +3 -1
  113. package/dist/mcp/auth/resource-server.js +18 -3
  114. package/dist/mcp/auth/self-hosted/credentials.d.ts +3 -3
  115. package/dist/mcp/auth/self-hosted/session.d.ts +5 -5
  116. package/dist/mcp/context.d.ts +3 -0
  117. package/dist/mcp/host-events/deliveries.d.ts +9 -0
  118. package/dist/mcp/host-events/deliveries.js +17 -0
  119. package/dist/mcp/host-events/github-ingress.d.ts +4 -2
  120. package/dist/mcp/host-events/github-ingress.js +4 -13
  121. package/dist/mcp/host-events/jira-ingress.d.ts +29 -0
  122. package/dist/mcp/host-events/jira-ingress.js +92 -0
  123. package/dist/mcp/index.d.ts +2 -0
  124. package/dist/mcp/index.js +87 -9
  125. package/dist/mcp/server.js +5 -2
  126. package/dist/mcp/tools/agents.js +74 -3
  127. package/dist/mcp/tools/cost-report.d.ts +8 -0
  128. package/dist/mcp/tools/cost-report.js +60 -0
  129. package/dist/mcp/tools/issue-projects.d.ts +2 -0
  130. package/dist/mcp/tools/issue-projects.js +238 -0
  131. package/dist/mcp/tools/model-catalog.d.ts +22 -0
  132. package/dist/mcp/tools/model-catalog.js +423 -0
  133. package/dist/mcp/tools/repositories.js +2 -1
  134. package/dist/mcp/tools/tools.d.ts +2 -2
  135. package/dist/mcp/tools/trigger.js +33 -5
  136. package/dist/mcp/transport/streamable-http.d.ts +5 -0
  137. package/dist/mcp/transport/streamable-http.js +23 -1
  138. package/dist/mcp/webhooks/ingress.d.ts +2 -1
  139. package/dist/mcp/webhooks/ingress.js +9 -2
  140. package/dist/providers/auth/self-hosted.d.ts +8 -1
  141. package/dist/providers/auth/self-hosted.js +39 -2
  142. package/dist/providers/coding-proxy/memory-ledger.d.ts +1 -1
  143. package/dist/providers/coding-proxy/memory-ledger.js +10 -1
  144. package/dist/providers/coding-proxy/metering.d.ts +2 -1
  145. package/dist/providers/coding-proxy/metering.js +13 -2
  146. package/dist/providers/coding-proxy/prisma-ledger.js +59 -6
  147. package/dist/providers/coding-proxy/proxy.d.ts +12 -2
  148. package/dist/providers/coding-proxy/proxy.js +92 -30
  149. package/dist/providers/coding-proxy/types.d.ts +18 -1
  150. package/dist/providers/coding-proxy/types.js +12 -1
  151. package/dist/providers/engine/types.d.ts +19 -0
  152. package/dist/providers/executor/composition.js +9 -1
  153. package/dist/providers/executor/container.d.ts +30 -2
  154. package/dist/providers/executor/container.js +98 -17
  155. package/dist/providers/executor/dbos.d.ts +2 -0
  156. package/dist/providers/executor/dbos.js +7 -5
  157. package/dist/providers/executor/routing.d.ts +6 -0
  158. package/dist/providers/executor/routing.js +5 -0
  159. package/dist/providers/executor/types.d.ts +12 -0
  160. package/dist/providers/issue-tracker/adf.d.ts +31 -0
  161. package/dist/providers/issue-tracker/adf.js +181 -0
  162. package/dist/providers/issue-tracker/index.d.ts +5 -0
  163. package/dist/providers/issue-tracker/index.js +12 -0
  164. package/dist/providers/issue-tracker/jira-client.d.ts +41 -0
  165. package/dist/providers/issue-tracker/jira-client.js +151 -0
  166. package/dist/providers/issue-tracker/jira-events.d.ts +3 -0
  167. package/dist/providers/issue-tracker/jira-events.js +98 -0
  168. package/dist/providers/issue-tracker/jira.d.ts +116 -0
  169. package/dist/providers/issue-tracker/jira.js +502 -0
  170. package/dist/providers/issue-tracker/types.d.ts +269 -0
  171. package/dist/providers/issue-tracker/types.js +16 -0
  172. package/dist/providers/jobs/docker.d.ts +5 -1
  173. package/dist/providers/jobs/docker.js +61 -33
  174. package/dist/providers/jobs/kubernetes.d.ts +3 -0
  175. package/dist/providers/jobs/kubernetes.js +44 -4
  176. package/dist/providers/jobs/service-state.d.ts +22 -0
  177. package/dist/providers/jobs/service-state.js +17 -0
  178. package/dist/providers/llm/anthropic.d.ts +3 -3
  179. package/dist/providers/llm/anthropic.js +3 -9
  180. package/dist/providers/llm/bedrock.d.ts +3 -3
  181. package/dist/providers/llm/bedrock.js +3 -9
  182. package/dist/providers/llm/catalog-lookup.d.ts +10 -0
  183. package/dist/providers/llm/catalog-lookup.js +15 -0
  184. package/dist/providers/llm/catalog-shipped.d.ts +18 -0
  185. package/dist/providers/llm/catalog-shipped.js +197 -0
  186. package/dist/providers/llm/catalog-store.d.ts +58 -0
  187. package/dist/providers/llm/catalog-store.js +138 -0
  188. package/dist/providers/llm/catalog-types.d.ts +66 -0
  189. package/dist/providers/llm/catalog-types.js +64 -0
  190. package/dist/providers/llm/catalog.d.ts +61 -0
  191. package/dist/providers/llm/catalog.js +147 -0
  192. package/dist/providers/llm/claude-provider.d.ts +10 -14
  193. package/dist/providers/llm/claude-provider.js +11 -6
  194. package/dist/providers/llm/index.d.ts +9 -6
  195. package/dist/providers/llm/index.js +8 -5
  196. package/dist/providers/llm/openai.d.ts +14 -5
  197. package/dist/providers/llm/openai.js +24 -14
  198. package/dist/providers/llm/pricing-core.d.ts +5 -3
  199. package/dist/providers/llm/registration.js +8 -12
  200. package/dist/providers/llm/routing.d.ts +18 -17
  201. package/dist/providers/llm/routing.js +40 -24
  202. package/dist/providers/review-host/github-events.js +47 -1
  203. package/dist/providers/review-host/github.js +7 -6
  204. package/dist/providers/review-host/types.d.ts +25 -0
  205. package/dist/providers/vcs/git.js +2 -22
  206. package/dist/providers/vcs/github.d.ts +20 -0
  207. package/dist/providers/vcs/github.js +28 -2
  208. package/dist/providers/vcs/types.d.ts +6 -0
  209. package/dist/quickstart/index.d.ts +8 -0
  210. package/dist/quickstart/index.js +34 -34
  211. package/dist/serve.js +8 -2
  212. package/dist/viewer/api-schema.d.ts +2757 -0
  213. package/dist/viewer/api-schema.js +165 -0
  214. package/dist/viewer/build-schemas.d.ts +2 -0
  215. package/dist/viewer/build-schemas.js +18 -0
  216. package/dist/viewer/event-bus.d.ts +38 -0
  217. package/dist/viewer/event-bus.js +232 -0
  218. package/dist/viewer/graph.d.ts +40 -0
  219. package/dist/viewer/graph.js +243 -0
  220. package/dist/viewer/http.d.ts +30 -0
  221. package/dist/viewer/http.js +133 -0
  222. package/dist/viewer/run-detail.d.ts +4 -0
  223. package/dist/viewer/run-detail.js +61 -0
  224. package/dist/wardby-bin.js +5 -0
  225. package/docs/README.md +10 -0
  226. package/docs/agent-recipes.md +383 -0
  227. package/docs/code-review-agents.md +29 -2
  228. package/docs/coding-agent-setup.md +3 -0
  229. package/docs/coding-worker-isolation.md +39 -5
  230. package/docs/getting-started-gke.md +28 -11
  231. package/docs/getting-started-identity-provider.md +49 -38
  232. package/docs/getting-started.md +14 -0
  233. package/docs/jira-agents.md +649 -0
  234. package/docs/knowledge.md +387 -0
  235. package/docs/models.md +221 -0
  236. package/docs/security-deployment.md +19 -9
  237. package/docs/viewer-api.md +142 -0
  238. package/help/admin-viewer.md +39 -0
  239. package/help/agent-recipes.md +173 -0
  240. package/help/architecture-agent.md +189 -0
  241. package/help/builder-agent.md +80 -0
  242. package/help/code-review-agents.md +6 -0
  243. package/help/cost-attribution.md +67 -0
  244. package/help/creating-agents.md +22 -0
  245. package/help/deploy-gke.md +6 -0
  246. package/help/errors/model-unavailable.md +63 -0
  247. package/help/getting-started.md +1 -0
  248. package/help/github.md +18 -0
  249. package/help/identity-and-access.md +8 -3
  250. package/help/jira.md +135 -0
  251. package/help/knowledge.md +47 -0
  252. package/help/models.md +90 -0
  253. package/help/operating-agents.md +7 -1
  254. package/help/troubleshooting/budgets.md +6 -0
  255. package/package.json +5 -2
  256. package/prisma/migrations/20260930000000_jira_issue_projects/migration.sql +34 -0
  257. package/prisma/migrations/20261001000000_jira_phase2_allowlists/migration.sql +3 -0
  258. package/prisma/migrations/20261001010000_jira_link_types_allowlist/migration.sql +2 -0
  259. package/prisma/migrations/20261002000000_jira_coding_bridge/migration.sql +28 -0
  260. package/prisma/migrations/20261002010000_jira_issue_creation/migration.sql +25 -0
  261. package/prisma/migrations/20261003000000_issue_cost_attribution/migration.sql +56 -0
  262. package/prisma/migrations/20261003010000_coding_run_service_status/migration.sql +23 -0
  263. package/prisma/migrations/20261003020000_viewer_notify/migration.sql +54 -0
  264. package/prisma/migrations/20261003030000_viewer_notify_fixes/migration.sql +47 -0
  265. package/prisma/migrations/20261003040000_viewer_indexes/migration.sql +12 -0
  266. package/prisma/migrations/20261004000000_model_catalog/migration.sql +26 -0
  267. package/prisma/schema.prisma +258 -2
  268. package/dist/mcp/tools/models.d.ts +0 -8
  269. package/dist/mcp/tools/models.js +0 -15
  270. package/dist/providers/llm/pricing-anthropic.d.ts +0 -14
  271. package/dist/providers/llm/pricing-anthropic.js +0 -48
  272. package/dist/providers/llm/pricing-bedrock-claude.d.ts +0 -20
  273. package/dist/providers/llm/pricing-bedrock-claude.js +0 -46
  274. package/dist/providers/llm/pricing.d.ts +0 -30
  275. package/dist/providers/llm/pricing.js +0 -74
@@ -54,23 +54,25 @@ access tokens for that audience.
54
54
 
55
55
  Create these scopes in the provider:
56
56
 
57
- | Scope | Capability |
58
- | --------------------- | ----------------------------------------------------------------- |
59
- | `agents:read` | Inspect agents, models, runs, memory, and attached resources. |
60
- | `agents:write` | Create and modify agents, schedules, and sub-agent relationships. |
61
- | `runs:trigger` | Start agent runs. |
62
- | `tools:write` | Create, attach, and manage tools. |
63
- | `datastore:write` | Create, attach, query, and modify datastores. |
64
- | `secrets:write` | Create, attach, rotate, and remove secret bindings. |
65
- | `webhooks:write` | Create and manage webhook triggers. |
66
- | `budget_groups:write` | Create and manage shared budget groups. |
67
- | `packages:approve` | Approve coding agents' package allowlists. |
68
- | `services:manage` | Create, update and delete coding-run service catalog entries. |
69
- | `agents:admin` | Reassign agent ownership, BYO worker images; admins only. |
70
- | `memory:write` | Set and delete agent memory entries. |
57
+ | Scope | Capability |
58
+ | --------------------- | ------------------------------------------------------------------ |
59
+ | `agents:read` | Inspect agents, models, runs, memory, and attached resources. |
60
+ | `agents:write` | Create and modify agents, schedules, and sub-agent relationships. |
61
+ | `runs:trigger` | Start agent runs. |
62
+ | `tools:write` | Create, attach, and manage tools. |
63
+ | `datastore:write` | Create, attach, query, and modify datastores. |
64
+ | `secrets:write` | Create, attach, rotate, and remove secret bindings. |
65
+ | `webhooks:write` | Create and manage webhook triggers. |
66
+ | `budget_groups:write` | Create and manage shared budget groups. |
67
+ | `packages:approve` | Approve coding agents' package allowlists. |
68
+ | `services:manage` | Create, update and delete coding-run service catalog entries. |
69
+ | `agents:admin` | Reassign agent ownership, BYO worker images; admins only. |
70
+ | `memory:write` | Set and delete agent memory entries. |
71
+ | `admin:view` | Read every owner's runs through the admin viewer API; admins only. |
72
+ | `models:admin` | Add, override, disable and reset model catalog entries. |
71
73
 
72
74
  MCP clients discover this list from Wardby's protected-resource metadata and
73
- may request every advertised scope. Define all twelve in the provider even when
75
+ may request every advertised scope. Define all fourteen in the provider even when
74
76
  policy grants a particular client or user only a subset. Ensure granted scopes
75
77
  are emitted in the access token's `scope` or `scp` claim; defining them only in
76
78
  the provider UI is not sufficient.
@@ -82,23 +84,32 @@ request every advertised scope may fail with `invalid_scope`.
82
84
  `services:manage` was added after `memory:write`. When you upgrade an existing
83
85
  deployment, define it in the provider too, for the same reason.
84
86
 
87
+ `admin:view` was added after `services:manage`. When you upgrade an existing
88
+ deployment, define it in the provider too and map it like `agents:admin`;
89
+ otherwise clients that request every advertised scope fail with `invalid_scope`.
90
+
91
+ `models:admin` was added after `admin:view`. When you upgrade an existing
92
+ deployment, define it in the provider too; otherwise clients that request
93
+ every advertised scope fail with `invalid_scope`.
94
+
85
95
  ### Wardby roles
86
96
 
87
- A scope only delegates. `agents:admin`, `packages:approve` and `services:manage`
88
- take effect only for a caller who also holds a Wardby role that grants them:
97
+ A scope only delegates. `agents:admin`, `packages:approve`, `services:manage`,
98
+ `admin:view` and `models:admin` take effect only for a caller who also holds a Wardby role that grants them:
89
99
 
90
- | Wardby role | Grants |
91
- | ------------------ | --------------------------------------------------------------------------------------------- |
92
- | `admin` | `agents:admin` (`make_owner`, BYO `workerImageRef`), `packages:approve` and `services:manage` |
93
- | `package-approver` | `packages:approve` (package allowlist and policy approval) |
94
- | `service-manager` | `services:manage` (coding-run service catalog changes) |
100
+ | Wardby role | Grants |
101
+ | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
102
+ | `admin` | `agents:admin` (`make_owner`, BYO `workerImageRef`), `packages:approve`, `services:manage`, `admin:view` (read every owner's runs, see [viewer-api.md](viewer-api.md)) and `models:admin` (model catalog) |
103
+ | `package-approver` | `packages:approve` (package allowlist and policy approval) |
104
+ | `service-manager` | `services:manage` (coding-run service catalog changes) |
105
+ | `model-manager` | `models:admin` (model catalog changes: `set_model`, `disable_model`, `reset_model`; see [models.md](models.md)) |
95
106
 
96
107
  The roles come from a claim in the caller's **access token**, which you map to
97
108
  Wardby roles:
98
109
 
99
110
  ```dotenv
100
111
  AUTH_ROLE_CLAIM=groups # claim name or dotted path
101
- AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager
112
+ AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager
102
113
  ```
103
114
 
104
115
  Wardby looks up `AUTH_ROLE_CLAIM` in two steps:
@@ -146,20 +157,20 @@ their next token.
146
157
 
147
158
  Provider examples:
148
159
 
149
- - **Okta** (custom authorization server): create three groups, `wardby-admin`,
150
- `wardby-packages` and `wardby-services`. Add a `groups` claim to the access
151
- token, filtered to those groups. Set `AUTH_ROLE_CLAIM=groups` and
152
- `AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager`.
160
+ - **Okta** (custom authorization server): create four groups, `wardby-admin`,
161
+ `wardby-packages`, `wardby-services` and `wardby-models`. Add a `groups` claim
162
+ to the access token, filtered to those groups. Set `AUTH_ROLE_CLAIM=groups` and
163
+ `AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager`.
153
164
  Optionally, add access policy rules so only those groups can obtain
154
- `agents:admin`, `packages:approve` and `services:manage`.
155
- - **FusionAuth:** create three application roles, `admin`,
156
- `package-approver` and `service-manager`. They appear in the access token's
157
- top-level `roles` claim. Set `AUTH_ROLE_CLAIM=roles` and
158
- `AUTH_ROLE_MAP=admin=admin,package-approver=package-approver,service-manager=service-manager`.
159
- - **Keycloak:** create realm roles such as `wardby-admin`, `wardby-packages`
160
- and `wardby-services`. Realm roles appear under `realm_access.roles`. Set
161
- `AUTH_ROLE_CLAIM=realm_access.roles` and
162
- `AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager`.
165
+ `agents:admin`, `packages:approve`, `services:manage`, `admin:view` and `models:admin`.
166
+ - **FusionAuth:** create four application roles, `admin`,
167
+ `package-approver`, `service-manager` and `model-manager`. They appear in the
168
+ access token's top-level `roles` claim. Set `AUTH_ROLE_CLAIM=roles` and
169
+ `AUTH_ROLE_MAP=admin=admin,package-approver=package-approver,service-manager=service-manager,model-manager=model-manager`.
170
+ - **Keycloak:** create realm roles such as `wardby-admin`, `wardby-packages`,
171
+ `wardby-services` and `wardby-models`. Realm roles appear under
172
+ `realm_access.roles`. Set `AUTH_ROLE_CLAIM=realm_access.roles` and
173
+ `AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager`.
163
174
  For client roles, use `resource_access.<client-id>.roles`. The
164
175
  [local Keycloak harness](../deploy/keycloak-test/README.md) sets this up.
165
176
  - **Auth0:** add the user's roles to the access token as a namespaced custom
@@ -206,7 +217,7 @@ AUTH_JWKS_URI=https://identity.example.com/your-tenant/.well-known/jwks.json
206
217
  AUTH_AUDIENCE=https://wardby.example.com/mcp
207
218
  # Optional: Wardby roles (see "Wardby roles" above).
208
219
  AUTH_ROLE_CLAIM=groups
209
- AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager
220
+ AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager
210
221
  ```
211
222
 
212
223
  Copy `AUTH_ISSUER` exactly from the token's `iss` claim or the provider's
@@ -242,7 +253,7 @@ Confirm that:
242
253
 
243
254
  - `resource` is the canonical MCP URI;
244
255
  - `authorization_servers` contains the external issuer; and
245
- - `scopes_supported` contains all ten Wardby scopes.
256
+ - `scopes_supported` contains all fourteen Wardby scopes.
246
257
 
247
258
  An unauthenticated MCP request must return `401` with a `WWW-Authenticate`
248
259
  challenge pointing back to that metadata document.
@@ -123,8 +123,22 @@ Coding agents require the stronger boundary described in
123
123
  worker image, trusted coding proxy, and either Docker or Kubernetes as the job
124
124
  launcher. Run `wardby coding preflight` before enabling a production repository.
125
125
 
126
+ ## Your first agents
127
+
128
+ [Agent recipes](agent-recipes.md) gives two complete, copyable setups: an
129
+ architecture keeper and a builder per language. They go beyond the quickstart,
130
+ which runs native agents only. They require Wardby 0.4.0 or later. They need the
131
+ GitHub App, worker image, and job launcher from
132
+ [Coding-agent setup](coding-agent-setup.md). Their event triggers need GitHub to
133
+ reach your instance at a public HTTPS URL.
134
+
135
+ The assistant the quickstart connected can walk you through either recipe. Ask it
136
+ "Set up the Wardby architecture keeper for this repository" or "Set up a Wardby
137
+ builder for this repository"; it follows the `agent-recipes` help article.
138
+
126
139
  ## Next steps
127
140
 
141
+ - [Agent recipes](agent-recipes.md)
128
142
  - [Runtime architecture](architecture-runtime.md)
129
143
  - [Coding-agent setup](coding-agent-setup.md)
130
144
  - [Bring your own identity provider](getting-started-identity-provider.md)