@wardby/cli 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +53 -4
- package/README.md +52 -13
- package/dist/claude-coding-worker/driver.d.ts +6 -1
- package/dist/claude-coding-worker/driver.js +27 -1
- package/dist/claude-coding-worker/main.js +2 -0
- package/dist/claude-coding-worker/tool-socket.d.ts +9 -0
- package/dist/claude-coding-worker/tool-socket.js +26 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +14 -4
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +284 -36
- package/dist/coding/base-commit.d.ts +6 -0
- package/dist/coding/base-commit.js +12 -0
- package/dist/coding/collect-exclude.d.ts +25 -0
- package/dist/coding/collect-exclude.js +76 -0
- package/dist/coding/profile.d.ts +67 -22
- package/dist/coding/profile.js +58 -25
- package/dist/coding/protected-path-wording.d.ts +24 -0
- package/dist/coding/protected-path-wording.js +55 -0
- package/dist/coding/protected-paths.d.ts +31 -0
- package/dist/coding/protected-paths.js +48 -0
- package/dist/coding/protocol.d.ts +91 -4
- package/dist/coding/protocol.js +123 -12
- package/dist/coding/provider.d.ts +6 -1
- package/dist/coding/provider.js +16 -9
- package/dist/coding/registry/adapters.d.ts +2 -0
- package/dist/coding/registry/adapters.js +9 -0
- package/dist/coding/registry/allowlist.d.ts +9 -0
- package/dist/coding/registry/allowlist.js +28 -0
- package/dist/coding/registry/json-scan.d.ts +55 -0
- package/dist/coding/registry/json-scan.js +191 -0
- package/dist/coding/registry/lockfiles.d.ts +6 -0
- package/dist/coding/registry/lockfiles.js +89 -0
- package/dist/coding/registry/npm-lockfile.d.ts +9 -0
- package/dist/coding/registry/npm-lockfile.js +73 -0
- package/dist/coding/registry/npm-plan.d.ts +29 -0
- package/dist/coding/registry/npm-plan.js +289 -0
- package/dist/coding/registry/npm.d.ts +7 -0
- package/dist/coding/registry/npm.js +252 -0
- package/dist/coding/registry/pypi.d.ts +4 -0
- package/dist/coding/registry/pypi.js +210 -0
- package/dist/coding/registry/report.d.ts +37 -0
- package/dist/coding/registry/report.js +31 -0
- package/dist/coding/registry/token.d.ts +4 -0
- package/dist/coding/registry/token.js +7 -0
- package/dist/coding/registry/types.d.ts +286 -0
- package/dist/coding/registry/types.js +19 -0
- package/dist/coding/registry/worker-config.d.ts +14 -0
- package/dist/coding/registry/worker-config.js +31 -0
- package/dist/coding/services/builtins.d.ts +22 -0
- package/dist/coding/services/builtins.js +85 -0
- package/dist/coding/services/catalog.d.ts +443 -0
- package/dist/coding/services/catalog.js +159 -0
- package/dist/coding/services/declaration.d.ts +11 -0
- package/dist/coding/services/declaration.js +114 -0
- package/dist/coding/services/note.d.ts +8 -0
- package/dist/coding/services/note.js +15 -0
- package/dist/coding/services/resolve.d.ts +25 -0
- package/dist/coding/services/resolve.js +50 -0
- package/dist/coding/services/wording.d.ts +25 -0
- package/dist/coding/services/wording.js +70 -0
- package/dist/coding-proxy/main.js +24 -4
- package/dist/coding-worker/artifact.d.ts +6 -0
- package/dist/coding-worker/debug-trace.d.ts +37 -0
- package/dist/coding-worker/debug-trace.js +117 -0
- package/dist/coding-worker/driver.d.ts +13 -1
- package/dist/coding-worker/driver.js +102 -13
- package/dist/coding-worker/errors.js +8 -0
- package/dist/coding-worker/main.js +10 -2
- package/dist/coding-worker/sdk.d.ts +2 -2
- package/dist/coding-worker/sdk.js +7 -2
- package/dist/coding-worker/types.d.ts +3 -0
- package/dist/config/providers.d.ts +66 -0
- package/dist/config/providers.js +137 -0
- package/dist/core/attribution.d.ts +101 -0
- package/dist/core/attribution.js +208 -0
- package/dist/core/budget-groups.d.ts +120 -10
- package/dist/core/budget-groups.js +133 -24
- package/dist/core/budget-wording.d.ts +22 -0
- package/dist/core/budget-wording.js +55 -0
- package/dist/core/coding-queue.d.ts +3 -0
- package/dist/core/coding-queue.js +6 -2
- package/dist/core/coding-service-status.d.ts +11 -0
- package/dist/core/coding-service-status.js +17 -0
- package/dist/core/cost-report.d.ts +88 -0
- package/dist/core/cost-report.js +248 -0
- package/dist/core/datastores.js +18 -2
- package/dist/core/db.d.ts +5 -1
- package/dist/core/db.js +8 -2
- package/dist/core/dispatch.d.ts +74 -7
- package/dist/core/dispatch.js +382 -47
- package/dist/core/engine-native.js +44 -14
- package/dist/core/glob.d.ts +10 -0
- package/dist/core/glob.js +33 -0
- package/dist/core/grants.d.ts +86 -0
- package/dist/core/grants.js +126 -0
- package/dist/core/host-events.d.ts +72 -0
- package/dist/core/host-events.js +597 -0
- package/dist/core/host-identity-links.d.ts +54 -0
- package/dist/core/host-identity-links.js +189 -0
- package/dist/core/host-status.d.ts +78 -0
- package/dist/core/host-status.js +228 -0
- package/dist/core/in-flight-runs.d.ts +8 -0
- package/dist/core/in-flight-runs.js +56 -0
- package/dist/core/issue-bridge.d.ts +60 -0
- package/dist/core/issue-bridge.js +189 -0
- package/dist/core/issue-dedupe.d.ts +70 -0
- package/dist/core/issue-dedupe.js +255 -0
- package/dist/core/issue-events.d.ts +42 -0
- package/dist/core/issue-events.js +155 -0
- package/dist/core/issue-status.d.ts +29 -0
- package/dist/core/issue-status.js +241 -0
- package/dist/core/issue-tracker-tools.d.ts +64 -0
- package/dist/core/issue-tracker-tools.js +850 -0
- package/dist/core/model-usage.d.ts +10 -0
- package/dist/core/model-usage.js +24 -0
- package/dist/core/provider-wording.d.ts +12 -0
- package/dist/core/provider-wording.js +44 -0
- package/dist/core/reconciler.d.ts +42 -2
- package/dist/core/reconciler.js +97 -2
- package/dist/core/repo-access.d.ts +99 -0
- package/dist/core/repo-access.js +136 -0
- package/dist/core/review-host-checks.d.ts +11 -0
- package/dist/core/review-host-checks.js +41 -0
- package/dist/core/review-host-tools.d.ts +47 -0
- package/dist/core/review-host-tools.js +354 -0
- package/dist/core/run-heartbeat.d.ts +27 -0
- package/dist/core/run-heartbeat.js +54 -0
- package/dist/core/run-pricing.d.ts +61 -0
- package/dist/core/run-pricing.js +56 -0
- package/dist/core/runner.d.ts +33 -8
- package/dist/core/runner.js +410 -62
- package/dist/core/scheduler.d.ts +4 -1
- package/dist/core/scheduler.js +3 -2
- package/dist/core/secrets.d.ts +11 -2
- package/dist/core/secrets.js +25 -6
- package/dist/core/self-defects.d.ts +80 -0
- package/dist/core/self-defects.js +180 -0
- package/dist/core/subagent-memory-tools.d.ts +1 -1
- package/dist/core/subagent-memory-tools.js +16 -3
- package/dist/core/tool-admin.d.ts +81 -0
- package/dist/core/tool-admin.js +129 -0
- package/dist/core/tool-names.d.ts +42 -0
- package/dist/core/tool-names.js +67 -0
- package/dist/core/untrusted-content.d.ts +32 -0
- package/dist/core/untrusted-content.js +72 -0
- package/dist/core/webhooks.d.ts +17 -2
- package/dist/core/webhooks.js +42 -3
- package/dist/generated/prisma/browser.d.ts +166 -0
- package/dist/generated/prisma/client.d.ts +166 -0
- package/dist/generated/prisma/commonInputTypes.d.ts +152 -52
- package/dist/generated/prisma/enums.d.ts +13 -0
- package/dist/generated/prisma/enums.js +12 -1
- package/dist/generated/prisma/internal/class.d.ts +242 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +2571 -577
- package/dist/generated/prisma/internal/prismaNamespace.js +312 -6
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +328 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +312 -6
- package/dist/generated/prisma/models/Agent.d.ts +682 -1
- package/dist/generated/prisma/models/AgentIssueProject.d.ts +1838 -0
- package/dist/generated/prisma/models/AgentIssueProject.js +1 -0
- package/dist/generated/prisma/models/AgentRepository.d.ts +1425 -0
- package/dist/generated/prisma/models/AgentRepository.js +1 -0
- package/dist/generated/prisma/models/AgentTool.d.ts +95 -1
- package/dist/generated/prisma/models/AuthUser.d.ts +56 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +258 -7
- package/dist/generated/prisma/models/CodingProxySession.d.ts +195 -2
- package/dist/generated/prisma/models/CodingRun.d.ts +1405 -95
- package/dist/generated/prisma/models/CodingRunServiceStatus.d.ts +1404 -0
- package/dist/generated/prisma/models/CodingRunServiceStatus.js +1 -0
- package/dist/generated/prisma/models/CodingService.d.ts +1348 -0
- package/dist/generated/prisma/models/CodingService.js +1 -0
- package/dist/generated/prisma/models/HostEventDelivery.d.ts +946 -0
- package/dist/generated/prisma/models/HostEventDelivery.js +1 -0
- package/dist/generated/prisma/models/HostIdentity.d.ts +1232 -0
- package/dist/generated/prisma/models/HostIdentity.js +1 -0
- package/dist/generated/prisma/models/HostIdentityLinkRequest.d.ts +1473 -0
- package/dist/generated/prisma/models/HostIdentityLinkRequest.js +1 -0
- package/dist/generated/prisma/models/IssueFingerprint.d.ts +1183 -0
- package/dist/generated/prisma/models/IssueFingerprint.js +1 -0
- package/dist/generated/prisma/models/IssuePullRequest.d.ts +1255 -0
- package/dist/generated/prisma/models/IssuePullRequest.js +1 -0
- package/dist/generated/prisma/models/ModelCatalogEntry.d.ts +1322 -0
- package/dist/generated/prisma/models/ModelCatalogEntry.js +1 -0
- package/dist/generated/prisma/models/Principal.d.ts +455 -0
- package/dist/generated/prisma/models/RegistryAllowance.d.ts +1148 -0
- package/dist/generated/prisma/models/RegistryAllowance.js +1 -0
- package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +1219 -0
- package/dist/generated/prisma/models/RegistryApprovedVersion.js +1 -0
- package/dist/generated/prisma/models/RegistryFetch.d.ts +1428 -0
- package/dist/generated/prisma/models/RegistryFetch.js +1 -0
- package/dist/generated/prisma/models/RegistryPlanRefusal.d.ts +1294 -0
- package/dist/generated/prisma/models/RegistryPlanRefusal.js +1 -0
- package/dist/generated/prisma/models/RegistryVersionFact.d.ts +1085 -0
- package/dist/generated/prisma/models/RegistryVersionFact.js +1 -0
- package/dist/generated/prisma/models/ResourceGrant.d.ts +1437 -0
- package/dist/generated/prisma/models/ResourceGrant.js +1 -0
- package/dist/generated/prisma/models/Run.d.ts +1402 -82
- package/dist/generated/prisma/models/RunAttribution.d.ts +1259 -0
- package/dist/generated/prisma/models/RunAttribution.js +1 -0
- package/dist/generated/prisma/models/RunHostCheck.d.ts +1239 -0
- package/dist/generated/prisma/models/RunHostCheck.js +1 -0
- package/dist/generated/prisma/models/RunHostStatus.d.ts +1315 -0
- package/dist/generated/prisma/models/RunHostStatus.js +1 -0
- package/dist/generated/prisma/models/RunIssueStatus.d.ts +1199 -0
- package/dist/generated/prisma/models/RunIssueStatus.js +1 -0
- package/dist/generated/prisma/models/RunModelUsage.d.ts +1316 -0
- package/dist/generated/prisma/models/RunModelUsage.js +1 -0
- package/dist/generated/prisma/models/Tool.d.ts +15 -3
- package/dist/generated/prisma/models/WorkItem.d.ts +1408 -0
- package/dist/generated/prisma/models/WorkItem.js +1 -0
- package/dist/generated/prisma/models.d.ts +22 -0
- package/dist/help/build.d.ts +1 -0
- package/dist/help/build.js +9 -0
- package/dist/help/catalog.d.ts +24 -0
- package/dist/help/catalog.js +160 -0
- package/dist/help/cli.d.ts +2 -0
- package/dist/help/cli.js +65 -0
- package/dist/help/runtime.d.ts +3 -0
- package/dist/help/runtime.js +44 -0
- package/dist/help/search.d.ts +9 -0
- package/dist/help/search.js +104 -0
- package/dist/help-index.json +999 -0
- package/dist/import/cli-args.js +3 -2
- package/dist/import/create.d.ts +5 -0
- package/dist/import/create.js +67 -13
- package/dist/import/index.js +19 -9
- package/dist/import/neutral-schema.d.ts +18 -18
- package/dist/knowledge/check.d.ts +13 -0
- package/dist/knowledge/check.js +69 -0
- package/dist/knowledge/cli.d.ts +14 -0
- package/dist/knowledge/cli.js +67 -0
- package/dist/knowledge/concept.d.ts +54 -0
- package/dist/knowledge/concept.js +78 -0
- package/dist/knowledge/note.d.ts +11 -0
- package/dist/knowledge/note.js +39 -0
- package/dist/knowledge/relevance.d.ts +11 -0
- package/dist/knowledge/relevance.js +14 -0
- package/dist/knowledge/span-hash.d.ts +3 -0
- package/dist/knowledge/span-hash.js +16 -0
- package/dist/mcp/auth/access.d.ts +72 -0
- package/dist/mcp/auth/access.js +58 -0
- package/dist/mcp/auth/grants-cli.d.ts +149 -0
- package/dist/mcp/auth/grants-cli.js +518 -0
- package/dist/mcp/auth/host-account-cli.d.ts +2 -0
- package/dist/mcp/auth/host-account-cli.js +47 -0
- package/dist/mcp/auth/ownership.d.ts +25 -51
- package/dist/mcp/auth/ownership.js +19 -14
- package/dist/mcp/auth/repo-authorization.d.ts +22 -0
- package/dist/mcp/auth/repo-authorization.js +51 -0
- package/dist/mcp/auth/resource-server.d.ts +33 -2
- package/dist/mcp/auth/resource-server.js +99 -3
- package/dist/mcp/auth/self-hosted/browser.js +2 -2
- package/dist/mcp/auth/self-hosted/cli.js +47 -13
- package/dist/mcp/auth/self-hosted/credentials.d.ts +23 -5
- package/dist/mcp/auth/self-hosted/credentials.js +62 -4
- package/dist/mcp/auth/self-hosted/session.d.ts +7 -6
- package/dist/mcp/context.d.ts +30 -1
- package/dist/mcp/errors.d.ts +25 -6
- package/dist/mcp/errors.js +98 -0
- package/dist/mcp/host-events/deliveries.d.ts +9 -0
- package/dist/mcp/host-events/deliveries.js +17 -0
- package/dist/mcp/host-events/github-ingress.d.ts +38 -0
- package/dist/mcp/host-events/github-ingress.js +83 -0
- package/dist/mcp/host-events/github-user-callback.d.ts +18 -0
- package/dist/mcp/host-events/github-user-callback.js +50 -0
- package/dist/mcp/host-events/jira-ingress.d.ts +29 -0
- package/dist/mcp/host-events/jira-ingress.js +92 -0
- package/dist/mcp/index.d.ts +10 -1
- package/dist/mcp/index.js +187 -19
- package/dist/mcp/server.js +32 -11
- package/dist/mcp/tools/agents.js +519 -50
- package/dist/mcp/tools/budget-groups.js +3 -3
- package/dist/mcp/tools/cost-report.d.ts +8 -0
- package/dist/mcp/tools/cost-report.js +60 -0
- package/dist/mcp/tools/datastore.js +22 -15
- package/dist/mcp/tools/grants.d.ts +2 -0
- package/dist/mcp/tools/grants.js +239 -0
- package/dist/mcp/tools/help.d.ts +5 -0
- package/dist/mcp/tools/help.js +67 -0
- package/dist/mcp/tools/host-accounts.d.ts +2 -0
- package/dist/mcp/tools/host-accounts.js +114 -0
- package/dist/mcp/tools/issue-projects.d.ts +2 -0
- package/dist/mcp/tools/issue-projects.js +238 -0
- package/dist/mcp/tools/memory.d.ts +7 -1
- package/dist/mcp/tools/memory.js +5 -5
- package/dist/mcp/tools/model-catalog.d.ts +22 -0
- package/dist/mcp/tools/model-catalog.js +423 -0
- package/dist/mcp/tools/repositories.d.ts +2 -0
- package/dist/mcp/tools/repositories.js +182 -0
- package/dist/mcp/tools/runs.d.ts +6 -0
- package/dist/mcp/tools/runs.js +60 -6
- package/dist/mcp/tools/scheduling.js +3 -6
- package/dist/mcp/tools/secrets.js +18 -6
- package/dist/mcp/tools/services.d.ts +2 -0
- package/dist/mcp/tools/services.js +222 -0
- package/dist/mcp/tools/subagents.js +52 -16
- package/dist/mcp/tools/tools.d.ts +41 -0
- package/dist/mcp/tools/tools.js +201 -40
- package/dist/mcp/tools/trigger.js +65 -7
- package/dist/mcp/tools/webhooks.js +15 -4
- package/dist/mcp/transport/streamable-http.d.ts +15 -0
- package/dist/mcp/transport/streamable-http.js +55 -3
- package/dist/mcp/webhooks/ingress.d.ts +2 -1
- package/dist/mcp/webhooks/ingress.js +9 -2
- package/dist/providers/auth/delegating.d.ts +19 -0
- package/dist/providers/auth/delegating.js +71 -0
- package/dist/providers/auth/index.d.ts +2 -0
- package/dist/providers/auth/index.js +11 -0
- package/dist/providers/auth/self-hosted.d.ts +10 -2
- package/dist/providers/auth/self-hosted.js +55 -6
- package/dist/providers/auth/types.d.ts +6 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +4 -1
- package/dist/providers/coding-proxy/memory-ledger.js +31 -3
- package/dist/providers/coding-proxy/metering.d.ts +6 -1
- package/dist/providers/coding-proxy/metering.js +41 -4
- package/dist/providers/coding-proxy/prisma-ledger.d.ts +17 -0
- package/dist/providers/coding-proxy/prisma-ledger.js +106 -8
- package/dist/providers/coding-proxy/proxy.d.ts +25 -2
- package/dist/providers/coding-proxy/proxy.js +561 -38
- package/dist/providers/coding-proxy/registry/audit.d.ts +131 -0
- package/dist/providers/coding-proxy/registry/audit.js +380 -0
- package/dist/providers/coding-proxy/registry/bounded-fetch.d.ts +16 -0
- package/dist/providers/coding-proxy/registry/bounded-fetch.js +77 -0
- package/dist/providers/coding-proxy/registry/plan.d.ts +58 -0
- package/dist/providers/coding-proxy/registry/plan.js +304 -0
- package/dist/providers/coding-proxy/registry/prisma-store.d.ts +34 -0
- package/dist/providers/coding-proxy/registry/prisma-store.js +151 -0
- package/dist/providers/coding-proxy/registry/service.d.ts +213 -0
- package/dist/providers/coding-proxy/registry/service.js +1137 -0
- package/dist/providers/coding-proxy/registry/store.d.ts +127 -0
- package/dist/providers/coding-proxy/registry/store.js +70 -0
- package/dist/providers/coding-proxy/runtime.d.ts +17 -0
- package/dist/providers/coding-proxy/runtime.js +63 -0
- package/dist/providers/coding-proxy/secure-fetch.js +0 -1
- package/dist/providers/coding-proxy/server.d.ts +11 -0
- package/dist/providers/coding-proxy/server.js +163 -0
- package/dist/providers/coding-proxy/types.d.ts +33 -1
- package/dist/providers/coding-proxy/types.js +12 -1
- package/dist/providers/engine/types.d.ts +29 -0
- package/dist/providers/executor/build.d.ts +2 -2
- package/dist/providers/executor/composition.d.ts +3 -0
- package/dist/providers/executor/composition.js +28 -1
- package/dist/providers/executor/container.d.ts +134 -4
- package/dist/providers/executor/container.js +394 -37
- package/dist/providers/executor/dbos.d.ts +4 -3
- package/dist/providers/executor/dbos.js +7 -5
- package/dist/providers/executor/in-process.d.ts +2 -3
- package/dist/providers/executor/routing.d.ts +13 -0
- package/dist/providers/executor/routing.js +18 -0
- package/dist/providers/executor/types.d.ts +34 -0
- package/dist/providers/issue-tracker/adf.d.ts +31 -0
- package/dist/providers/issue-tracker/adf.js +181 -0
- package/dist/providers/issue-tracker/index.d.ts +5 -0
- package/dist/providers/issue-tracker/index.js +12 -0
- package/dist/providers/issue-tracker/jira-client.d.ts +41 -0
- package/dist/providers/issue-tracker/jira-client.js +151 -0
- package/dist/providers/issue-tracker/jira-events.d.ts +3 -0
- package/dist/providers/issue-tracker/jira-events.js +98 -0
- package/dist/providers/issue-tracker/jira.d.ts +116 -0
- package/dist/providers/issue-tracker/jira.js +502 -0
- package/dist/providers/issue-tracker/types.d.ts +269 -0
- package/dist/providers/issue-tracker/types.js +16 -0
- package/dist/providers/jobs/claude-tool-setup.d.ts +23 -0
- package/dist/providers/jobs/claude-tool-setup.js +50 -0
- package/dist/providers/jobs/collect-prune.d.ts +7 -0
- package/dist/providers/jobs/collect-prune.js +27 -0
- package/dist/providers/jobs/docker-isolation.d.ts +48 -3
- package/dist/providers/jobs/docker-isolation.js +213 -22
- package/dist/providers/jobs/docker-services.d.ts +35 -0
- package/dist/providers/jobs/docker-services.js +191 -0
- package/dist/providers/jobs/docker.d.ts +53 -2
- package/dist/providers/jobs/docker.js +307 -32
- package/dist/providers/jobs/fake-kubernetes-api.d.ts +1 -0
- package/dist/providers/jobs/fake-kubernetes-api.js +12 -3
- package/dist/providers/jobs/kubernetes-isolation.d.ts +17 -2
- package/dist/providers/jobs/kubernetes-isolation.js +238 -57
- package/dist/providers/jobs/kubernetes-platform.d.ts +10 -4
- package/dist/providers/jobs/kubernetes-platform.js +11 -5
- package/dist/providers/jobs/kubernetes-preflight.js +3 -0
- package/dist/providers/jobs/kubernetes.d.ts +24 -2
- package/dist/providers/jobs/kubernetes.js +153 -22
- package/dist/providers/jobs/service-state.d.ts +22 -0
- package/dist/providers/jobs/service-state.js +17 -0
- package/dist/providers/jobs/types.d.ts +18 -0
- package/dist/providers/llm/anthropic.d.ts +3 -3
- package/dist/providers/llm/anthropic.js +3 -5
- package/dist/providers/llm/bedrock.d.ts +3 -3
- package/dist/providers/llm/bedrock.js +3 -8
- package/dist/providers/llm/catalog-lookup.d.ts +10 -0
- package/dist/providers/llm/catalog-lookup.js +15 -0
- package/dist/providers/llm/catalog-shipped.d.ts +18 -0
- package/dist/providers/llm/catalog-shipped.js +197 -0
- package/dist/providers/llm/catalog-store.d.ts +58 -0
- package/dist/providers/llm/catalog-store.js +138 -0
- package/dist/providers/llm/catalog-types.d.ts +66 -0
- package/dist/providers/llm/catalog-types.js +64 -0
- package/dist/providers/llm/catalog.d.ts +61 -0
- package/dist/providers/llm/catalog.js +147 -0
- package/dist/providers/llm/claude-messages.d.ts +5 -1
- package/dist/providers/llm/claude-messages.js +1 -0
- package/dist/providers/llm/claude-provider.d.ts +10 -12
- package/dist/providers/llm/claude-provider.js +15 -6
- package/dist/providers/llm/index.d.ts +9 -6
- package/dist/providers/llm/index.js +8 -5
- package/dist/providers/llm/openai.d.ts +14 -5
- package/dist/providers/llm/openai.js +24 -14
- package/dist/providers/llm/pricing-core.d.ts +5 -3
- package/dist/providers/llm/registration.js +8 -12
- package/dist/providers/llm/routing.d.ts +21 -11
- package/dist/providers/llm/routing.js +47 -13
- package/dist/providers/llm/types.d.ts +12 -0
- package/dist/providers/llm/types.js +8 -1
- package/dist/providers/review-host/diff-lines.d.ts +16 -0
- package/dist/providers/review-host/diff-lines.js +59 -0
- package/dist/providers/review-host/github-events.d.ts +6 -0
- package/dist/providers/review-host/github-events.js +226 -0
- package/dist/providers/review-host/github-user-auth.d.ts +38 -0
- package/dist/providers/review-host/github-user-auth.js +128 -0
- package/dist/providers/review-host/github.d.ts +57 -0
- package/dist/providers/review-host/github.js +568 -0
- package/dist/providers/review-host/index.d.ts +12 -0
- package/dist/providers/review-host/index.js +30 -0
- package/dist/providers/review-host/review-format.d.ts +19 -0
- package/dist/providers/review-host/review-format.js +59 -0
- package/dist/providers/review-host/types.d.ts +309 -0
- package/dist/providers/review-host/types.js +24 -0
- package/dist/providers/vcs/git.d.ts +16 -6
- package/dist/providers/vcs/git.js +78 -34
- package/dist/providers/vcs/github.d.ts +94 -3
- package/dist/providers/vcs/github.js +223 -17
- package/dist/providers/vcs/types.d.ts +48 -4
- package/dist/quickstart/index.d.ts +2 -0
- package/dist/quickstart/index.js +36 -8
- package/dist/sandbox/fetch-policy.d.ts +20 -2
- package/dist/sandbox/fetch-policy.js +64 -3
- package/dist/sandbox/host-functions.d.ts +9 -1
- package/dist/sandbox/host-functions.js +12 -5
- package/dist/serve.js +8 -2
- package/dist/viewer/api-schema.d.ts +2757 -0
- package/dist/viewer/api-schema.js +165 -0
- package/dist/viewer/build-schemas.d.ts +2 -0
- package/dist/viewer/build-schemas.js +18 -0
- package/dist/viewer/event-bus.d.ts +38 -0
- package/dist/viewer/event-bus.js +232 -0
- package/dist/viewer/graph.d.ts +40 -0
- package/dist/viewer/graph.js +243 -0
- package/dist/viewer/http.d.ts +30 -0
- package/dist/viewer/http.js +133 -0
- package/dist/viewer/run-detail.d.ts +4 -0
- package/dist/viewer/run-detail.js +61 -0
- package/dist/wardby-bin.js +11 -0
- package/docs/README.md +40 -0
- package/docs/agent-recipes.md +383 -0
- package/docs/architecture-runtime.md +90 -0
- package/docs/assets/brand/wardby-icon-512.png +0 -0
- package/docs/assets/brand/wardby-icon.svg +16 -0
- package/docs/assets/brand/wardby-mascot-profile-512.png +0 -0
- package/docs/assets/brand/wardby-mascot.png +0 -0
- package/docs/assets/brand/wardby-mascot.svg +5 -0
- package/docs/assets/wardby-workflow.svg +106 -0
- package/docs/code-review-agents.md +508 -0
- package/docs/coding-agent-setup.md +175 -0
- package/docs/coding-packages.md +455 -0
- package/docs/coding-services.md +300 -0
- package/docs/coding-worker-byo-images.md +98 -0
- package/docs/coding-worker-isolation.md +1068 -0
- package/docs/getting-started-gke.md +632 -0
- package/docs/getting-started-identity-provider.md +319 -0
- package/docs/getting-started.md +147 -0
- package/docs/jira-agents.md +649 -0
- package/docs/knowledge.md +387 -0
- package/docs/models.md +221 -0
- package/docs/observability.md +53 -0
- package/docs/release-verification.md +66 -0
- package/docs/security-deployment.md +667 -0
- package/docs/viewer-api.md +142 -0
- package/help/admin-viewer.md +39 -0
- package/help/agent-recipes.md +173 -0
- package/help/architecture-agent.md +189 -0
- package/help/builder-agent.md +80 -0
- package/help/code-review-agents.md +37 -0
- package/help/coding-packages.md +31 -0
- package/help/coding-services.md +71 -0
- package/help/cost-attribution.md +67 -0
- package/help/creating-agents.md +90 -0
- package/help/deploy-gke.md +45 -0
- package/help/deployment-targets.md +39 -0
- package/help/errors/budget-group-exhausted.md +25 -0
- package/help/errors/docker-isolation-unsupported.md +26 -0
- package/help/errors/model-unavailable.md +63 -0
- package/help/errors/protected-path.md +45 -0
- package/help/errors/repo-access.md +27 -0
- package/help/errors/service-declaration-invalid.md +27 -0
- package/help/errors/service-declaration-unavailable.md +25 -0
- package/help/errors/service-launcher-unsupported.md +30 -0
- package/help/errors/service-not-allowed.md +27 -0
- package/help/errors/service-unknown.md +23 -0
- package/help/errors/service-unready.md +49 -0
- package/help/getting-started.md +32 -0
- package/help/github.md +48 -0
- package/help/identity-and-access.md +44 -0
- package/help/jira.md +135 -0
- package/help/knowledge.md +47 -0
- package/help/mcp.md +30 -0
- package/help/models.md +90 -0
- package/help/native-capabilities.md +30 -0
- package/help/observability.md +41 -0
- package/help/operating-agents.md +36 -0
- package/help/security.md +27 -0
- package/help/troubleshooting/budgets.md +32 -0
- package/help/troubleshooting/coding-workers.md +47 -0
- package/help/troubleshooting/repository-access.md +27 -0
- package/package.json +14 -3
- package/prisma/migrations/20260925010000_coding_collect_exclude/migration.sql +8 -0
- package/prisma/migrations/20260925015000_allowed_egress_default/migration.sql +8 -0
- package/prisma/migrations/20260925020000_coding_package_registry/migration.sql +55 -0
- package/prisma/migrations/20260925030000_tool_name_per_owner/migration.sql +11 -0
- package/prisma/migrations/20260926010000_run_trigger_host_event/migration.sql +7 -0
- package/prisma/migrations/20260926020000_code_review_hosts/migration.sql +53 -0
- package/prisma/migrations/20260926030000_auth_user_roles/migration.sql +9 -0
- package/prisma/migrations/20260926040000_agent_effort/migration.sql +6 -0
- package/prisma/migrations/20260926050000_registry_lockfile_plan/migration.sql +32 -0
- package/prisma/migrations/20260926050000_repo_access_authorization/migration.sql +82 -0
- package/prisma/migrations/20260926060000_registry_plan_refusal/migration.sql +19 -0
- package/prisma/migrations/20260926100000_registry_plan_refusal_published_at/migration.sql +5 -0
- package/prisma/migrations/20260926190000_run_host_status/migration.sql +18 -0
- package/prisma/migrations/20260926210000_run_host_status_at_dispatch/migration.sql +5 -0
- package/prisma/migrations/20260927010000_resource_grants/migration.sql +72 -0
- package/prisma/migrations/20260927020000_proxy_session_budget_exhausted/migration.sql +3 -0
- package/prisma/migrations/20260927030000_coding_debug_trace/migration.sql +4 -0
- package/prisma/migrations/20260927040000_proxy_session_upstream_failure/migration.sql +3 -0
- package/prisma/migrations/20260927050000_coding_run_services/migration.sql +74 -0
- package/prisma/migrations/20260928000000_coding_run_tool_image/migration.sql +5 -0
- package/prisma/migrations/20260930000000_jira_issue_projects/migration.sql +34 -0
- package/prisma/migrations/20261001000000_jira_phase2_allowlists/migration.sql +3 -0
- package/prisma/migrations/20261001010000_jira_link_types_allowlist/migration.sql +2 -0
- package/prisma/migrations/20261002000000_jira_coding_bridge/migration.sql +28 -0
- package/prisma/migrations/20261002010000_jira_issue_creation/migration.sql +25 -0
- package/prisma/migrations/20261003000000_issue_cost_attribution/migration.sql +56 -0
- package/prisma/migrations/20261003010000_coding_run_service_status/migration.sql +23 -0
- package/prisma/migrations/20261003020000_viewer_notify/migration.sql +54 -0
- package/prisma/migrations/20261003030000_viewer_notify_fixes/migration.sql +47 -0
- package/prisma/migrations/20261003040000_viewer_indexes/migration.sql +12 -0
- package/prisma/migrations/20261004000000_model_catalog/migration.sql +26 -0
- package/prisma/schema.prisma +663 -21
- package/dist/mcp/tools/models.d.ts +0 -8
- package/dist/mcp/tools/models.js +0 -15
- package/dist/providers/llm/pricing-anthropic.d.ts +0 -4
- package/dist/providers/llm/pricing-anthropic.js +0 -30
- package/dist/providers/llm/pricing-bedrock-claude.d.ts +0 -12
- package/dist/providers/llm/pricing-bedrock-claude.js +0 -37
- package/dist/providers/llm/pricing.d.ts +0 -30
- package/dist/providers/llm/pricing.js +0 -74
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
# Agent recipes
|
|
2
|
+
|
|
3
|
+
Two complete agent setups you can ask your MCP client to build, made only from
|
|
4
|
+
shipped Wardby features:
|
|
5
|
+
|
|
6
|
+
- [Recipe A: an architecture keeper](#recipe-a-an-architecture-keeper), three
|
|
7
|
+
cooperating agents that keep a repository's architecture knowledge accurate.
|
|
8
|
+
- [Recipe B: a builder per language](#recipe-b-a-builder-per-language), a
|
|
9
|
+
coding agent that turns an `@mention` into a draft pull request, with notes for
|
|
10
|
+
Node/TypeScript, Python, and other languages.
|
|
11
|
+
|
|
12
|
+
Each recipe gives the one-paragraph ask you paste into Claude or Codex, the
|
|
13
|
+
configuration that results, and what it produces. Both use `your-org/your-repo`
|
|
14
|
+
as a placeholder repository.
|
|
15
|
+
|
|
16
|
+
Agent names are unique across the whole instance, so the examples use
|
|
17
|
+
repo-scoped names such as `<repo>-architect`. The sub-agent bound names
|
|
18
|
+
(`architect`, `builder`) stay fixed so the delegate tools keep their names.
|
|
19
|
+
|
|
20
|
+
## Before you start
|
|
21
|
+
|
|
22
|
+
These recipes go beyond the quickstart. Check each item.
|
|
23
|
+
|
|
24
|
+
1. **Version.** The recipes require Wardby 0.4.0 or later. The knowledge note in
|
|
25
|
+
coding runs, `wardby knowledge check`, and the `push` trigger are not in
|
|
26
|
+
earlier releases.
|
|
27
|
+
2. **Coding-agent setup.** The quickstart runs native agents only: it does not
|
|
28
|
+
install a GitHub App or build worker images. Both recipes use coding agents,
|
|
29
|
+
so complete [Coding-agent setup](coding-agent-setup.md) first: a GitHub App
|
|
30
|
+
installed on the repository, a worker image, the coding proxy, and a Docker or
|
|
31
|
+
Kubernetes job launcher. Run `wardby coding preflight` to check it. For a
|
|
32
|
+
hosted deployment, [Getting started on GKE](getting-started-gke.md) covers
|
|
33
|
+
this.
|
|
34
|
+
3. **A GitHub account link.** Link your GitHub account once with
|
|
35
|
+
`link_host_account`. Creating a coding agent or linking a repository checks
|
|
36
|
+
that you have write access to the repository
|
|
37
|
+
([details](code-review-agents.md#who-may-give-an-agent-a-repository)).
|
|
38
|
+
4. **A public HTTPS URL for GitHub webhooks.** The event triggers (`push` for the
|
|
39
|
+
merge watcher, `pull_request` for the reviewer, `mention` for the router) work
|
|
40
|
+
only when GitHub can deliver webhooks to your Wardby instance. Set the App's
|
|
41
|
+
webhook URL to `https://<your-host>/hosts/github/events` and its webhook
|
|
42
|
+
secret to the value of `GITHUB_APP_WEBHOOK_SECRET`
|
|
43
|
+
([registering the App](code-review-agents.md#registering-the-github-app)). A
|
|
44
|
+
laptop install is not reachable from GitHub by default, so it needs a public
|
|
45
|
+
HTTPS endpoint in front of it (the
|
|
46
|
+
[runtime architecture](architecture-runtime.md) diagram shows an HTTPS tunnel
|
|
47
|
+
in front of the local server) or a hosted deployment such as
|
|
48
|
+
[GKE](getting-started-gke.md). Scheduled and manually triggered runs need no
|
|
49
|
+
webhook.
|
|
50
|
+
5. **App events.** Tick the events each trigger needs in the App's settings:
|
|
51
|
+
Pull request and Check run for reviews; Issue comment, Pull request review
|
|
52
|
+
comment, and Issues for mentions; and **Push** for the merge watcher. Each is
|
|
53
|
+
its own checkbox
|
|
54
|
+
([registering the App](code-review-agents.md#registering-the-github-app)).
|
|
55
|
+
6. **Models.** Pick ids from `list_models` ([Models and pricing](models.md)). The
|
|
56
|
+
examples use `claude-sonnet-5` for the capable coding model and
|
|
57
|
+
`claude-haiku-4-5` for the small fast one; use whatever your deployment has
|
|
58
|
+
enabled. A coding agent's model must be supported by its coding provider.
|
|
59
|
+
|
|
60
|
+
## Recipe A: an architecture keeper
|
|
61
|
+
|
|
62
|
+
**What it does.** Keeps `docs/knowledge/` (see
|
|
63
|
+
[Architecture knowledge bundles](knowledge.md)) accurate and growing, and lets
|
|
64
|
+
coding agents and reviewers use it. **Triggers:** the architect runs weekly on a
|
|
65
|
+
schedule; the merge watcher runs on every merge to the default branch; the
|
|
66
|
+
reviewer step runs on every pull request.
|
|
67
|
+
|
|
68
|
+
### The MCP ask
|
|
69
|
+
|
|
70
|
+
> Set up an architecture keeper for `your-org/your-repo`. Create a Claude Code
|
|
71
|
+
> coding agent called `<repo>-architect` with the reference architecture-agent prompt
|
|
72
|
+
> from the Wardby knowledge guide and a $3 per-run budget. Trigger it once and
|
|
73
|
+
> show me the run; don't schedule it yet. After I've reviewed its first pull
|
|
74
|
+
> request, schedule it for Mondays at 6:00 AM. Then create a small, cheap native
|
|
75
|
+
> agent called `<repo>-merge-watcher` with the reference watcher prompt, attach
|
|
76
|
+
> `architect` to it as a sub-agent named `architect`, and link it to the
|
|
77
|
+
> repository with the `push` trigger. Finally, add the reviewer step to my
|
|
78
|
+
> existing code-review agent's prompt.
|
|
79
|
+
|
|
80
|
+
### The resulting configuration
|
|
81
|
+
|
|
82
|
+
Do the steps in this order; each depends on the one before.
|
|
83
|
+
|
|
84
|
+
1. **Create the architect.**
|
|
85
|
+
2. **Trigger it once by hand** (`trigger_agent`) and review the draft pull
|
|
86
|
+
request it opens.
|
|
87
|
+
3. **Schedule it** (`set_schedule`).
|
|
88
|
+
4. **Create the watcher**, attach the architect, tick **Push** in the App's
|
|
89
|
+
events, and link it with `push`.
|
|
90
|
+
5. **Add the reviewer step** to your review agent's prompt.
|
|
91
|
+
|
|
92
|
+
<details>
|
|
93
|
+
<summary>Architect (coding agent)</summary>
|
|
94
|
+
|
|
95
|
+
| Setting | Value |
|
|
96
|
+
| ----------------- | -------------------------------------------------------------------------------------------------------- |
|
|
97
|
+
| `name` | `<repo>-architect` |
|
|
98
|
+
| `kind` | `coding` |
|
|
99
|
+
| `model` | a capable coding model, for example `claude-sonnet-5` with `provider: "claude-code"` |
|
|
100
|
+
| `budgetUsd` | `3` per run (docs-only work) |
|
|
101
|
+
| `codingProfile` | `provider`, `repository: "your-org/your-repo"`, `baseRef` (your default branch), and `defaultTask` below |
|
|
102
|
+
| `schedule` | `0 6 * * 1` with your `timezone`, set after the first manual run (`set_schedule`) |
|
|
103
|
+
| Tools, sub-agents | None |
|
|
104
|
+
| Repository checks | May be skipped; the work is docs-only |
|
|
105
|
+
| System prompt | The architect prompt in [Architecture knowledge bundles](knowledge.md#set-up-an-architecture-agent) |
|
|
106
|
+
|
|
107
|
+
`defaultTask`, required before a coding agent can be scheduled:
|
|
108
|
+
|
|
109
|
+
```text
|
|
110
|
+
Weekly knowledge review. Run the full cycle described in your instructions for
|
|
111
|
+
this repository. Your file changes are collected into a pull request for review;
|
|
112
|
+
don't try to commit or open one yourself.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The prompt is published once, in the knowledge guide, so this page cannot drift
|
|
116
|
+
from it. Copy it from there, unchanged, as the agent's `systemPrompt`.
|
|
117
|
+
|
|
118
|
+
</details>
|
|
119
|
+
|
|
120
|
+
<details>
|
|
121
|
+
<summary>Merge watcher (native agent)</summary>
|
|
122
|
+
|
|
123
|
+
| Setting | Value |
|
|
124
|
+
| ------------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
|
125
|
+
| `name` | `<repo>-merge-watcher` |
|
|
126
|
+
| `kind` | `native` |
|
|
127
|
+
| `model` | a small fast model, for example `claude-haiku-4-5` |
|
|
128
|
+
| `budgetUsd` | Sized for the architect's per-run cost: the run tree shares one budget, so at least `3` plus a little for the watcher itself |
|
|
129
|
+
| Sub-agent | `attach_subagent` with `parentAgentId` the watcher, `childAgentId` the architect, `boundName: "architect"` |
|
|
130
|
+
| Link | `link_repository` with `access: "write"`, `triggers: ["push"]`, no `checkName` |
|
|
131
|
+
| System prompt | The reference watcher prompt in [Drift runs on merge](knowledge.md#set-up-the-merge-watcher), copied unchanged from that guide |
|
|
132
|
+
|
|
133
|
+
The bound name gives the watcher a `delegate_to_architect` tool, which the
|
|
134
|
+
reference prompt calls.
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"agentId": "<watcher agent id>",
|
|
139
|
+
"repository": "your-org/your-repo",
|
|
140
|
+
"access": "write",
|
|
141
|
+
"triggers": ["push"]
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Only pushes to the default branch start it. If the watcher already has a run
|
|
146
|
+
pending or running, the next merge starts nothing; the weekly run catches up.
|
|
147
|
+
|
|
148
|
+
</details>
|
|
149
|
+
|
|
150
|
+
<details>
|
|
151
|
+
<summary>Reviewer knowledge step</summary>
|
|
152
|
+
|
|
153
|
+
Append the "Reviewer step" section from
|
|
154
|
+
[Architecture knowledge bundles](knowledge.md#reviewer-step) to the system
|
|
155
|
+
prompt of a code-review agent ([Code-review agents](code-review-agents.md)). No
|
|
156
|
+
other setting changes. It makes reviews read the bundle's index, apply the
|
|
157
|
+
concepts that match the changed files, and report stale citations on knowledge
|
|
158
|
+
pull requests as suggestions only.
|
|
159
|
+
|
|
160
|
+
</details>
|
|
161
|
+
|
|
162
|
+
### What it produces
|
|
163
|
+
|
|
164
|
+
- A weekly draft pull request that touches only `docs/knowledge/` and an
|
|
165
|
+
`AGENTS.md` pointer, adding cited concepts and re-anchoring stale ones. A
|
|
166
|
+
person reviews and merges it.
|
|
167
|
+
- After each merge that touches a concept's files, a drift run limited to the
|
|
168
|
+
affected concepts, as another draft pull request.
|
|
169
|
+
- Reviews that cite the relevant concepts.
|
|
170
|
+
- Every later coding run for the repository (Recipe B) receives the knowledge
|
|
171
|
+
index and base commit automatically.
|
|
172
|
+
|
|
173
|
+
Run `wardby knowledge check` locally or in CI to validate the bundle. The
|
|
174
|
+
format, the check's codes, and drift behavior are in
|
|
175
|
+
[Architecture knowledge bundles](knowledge.md).
|
|
176
|
+
|
|
177
|
+
## Recipe B: a builder per language
|
|
178
|
+
|
|
179
|
+
**What it does.** Turns an `@mention` on an issue or pull request into a draft
|
|
180
|
+
pull request. A native router agent reads the request and delegates to a coding
|
|
181
|
+
builder agent. **Trigger:** the router is linked with `mention`; only people with
|
|
182
|
+
write access to the repository can start it.
|
|
183
|
+
|
|
184
|
+
### The MCP ask
|
|
185
|
+
|
|
186
|
+
> For `your-org/your-repo`, create a Codex coding agent called `<repo>-builder` with a
|
|
187
|
+
> $5 per-run budget and a 30 minute timeout, starting from the default branch.
|
|
188
|
+
> Allow it to install these packages from the registry: (your dependencies).
|
|
189
|
+
> Then create a small native agent called `<repo>-router` with a $6 budget, attach
|
|
190
|
+
> `builder` to it as a sub-agent named `builder`, and link it to the repository
|
|
191
|
+
> with the `mention` trigger. The router should ask for details when a request is
|
|
192
|
+
> unclear and otherwise delegate one precise task to the builder. Never merge
|
|
193
|
+
> anything.
|
|
194
|
+
|
|
195
|
+
Pick the language section below for the toolchain and package settings.
|
|
196
|
+
|
|
197
|
+
### Common configuration
|
|
198
|
+
|
|
199
|
+
<details>
|
|
200
|
+
<summary>Router (native agent)</summary>
|
|
201
|
+
|
|
202
|
+
| Setting | Value |
|
|
203
|
+
| ----------- | ------------------------------------------------------------------------------------------------------ |
|
|
204
|
+
| `name` | `<repo>-router` |
|
|
205
|
+
| `kind` | `native` |
|
|
206
|
+
| `model` | a small fast model, for example `claude-haiku-4-5` |
|
|
207
|
+
| `budgetUsd` | The builder's budget plus a little: the run tree shares one budget |
|
|
208
|
+
| Sub-agent | `attach_subagent` with `parentAgentId` the router, `childAgentId` the builder, `boundName: "builder"` |
|
|
209
|
+
| Link | `link_repository` with `access: "write"`, `triggers: ["mention"]` (one `mention` agent per repository) |
|
|
210
|
+
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"agentId": "<router agent id>",
|
|
214
|
+
"repository": "your-org/your-repo",
|
|
215
|
+
"access": "write",
|
|
216
|
+
"triggers": ["mention"]
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
System prompt:
|
|
221
|
+
|
|
222
|
+
The prompt is published once, in the [builder-agent help article](../help/builder-agent.md#router-prompt). Copy it unchanged as the agent's `systemPrompt`.
|
|
223
|
+
|
|
224
|
+
The router's final reply is posted where the mention was, so never instruct it
|
|
225
|
+
to include secrets or internal details. See
|
|
226
|
+
[What the mention agent receives](code-review-agents.md#what-the-mention-agent-receives).
|
|
227
|
+
|
|
228
|
+
</details>
|
|
229
|
+
|
|
230
|
+
<details>
|
|
231
|
+
<summary>Builder (coding agent) fields that matter</summary>
|
|
232
|
+
|
|
233
|
+
| Field (`codingProfile`) | What to set |
|
|
234
|
+
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
235
|
+
| `model` (agent field) | A capable coding model the chosen provider supports, for example `gpt-5.6-terra` with `codex` or `claude-sonnet-5` with `claude-code`; a mismatch is refused |
|
|
236
|
+
| `provider` | `codex` or `claude-code`; the agent's `model` must be one that provider supports |
|
|
237
|
+
| `repository` | `your-org/your-repo`; your linked GitHub account needs write access |
|
|
238
|
+
| `baseRef` | The branch runs start from, usually your default branch |
|
|
239
|
+
| `toolchain` | `node` or `node-python` (per language below) |
|
|
240
|
+
| `toolchainVersion` | `"3.12"` for `node-python`; omit for `node` |
|
|
241
|
+
| `packageAllowlist` | Top-level packages per ecosystem (`npm`, `pypi`). Needs `packages:approve` or `agents:admin` |
|
|
242
|
+
| `packagePolicy` | Optional `minReleaseAgeDays` (0 to 30) |
|
|
243
|
+
| `services` | Catalog service names the agent may start, for example `["postgres"]`; see [Services](coding-services.md) |
|
|
244
|
+
| `protectedPaths` | Globs a run may not change, for example `[".github/**", "CODEOWNERS"]`. `.wardby/**` is always protected except `.wardby/services.yaml` |
|
|
245
|
+
| `timeoutSec` | 60 to 7200; for example `1800` |
|
|
246
|
+
| `workerImageRef` | Digest-pinned custom image; needs `agents:admin` (see "Other languages") |
|
|
247
|
+
| `defaultTask` | Needed only to schedule the agent |
|
|
248
|
+
| Agent `budgetUsd` | Per-run budget, reserved at dispatch, for example `5` |
|
|
249
|
+
|
|
250
|
+
The agent's `systemPrompt` is placed ahead of each request as standing
|
|
251
|
+
instructions. The template below is generic.
|
|
252
|
+
|
|
253
|
+
</details>
|
|
254
|
+
|
|
255
|
+
<details>
|
|
256
|
+
<summary>Builder system prompt template</summary>
|
|
257
|
+
|
|
258
|
+
The prompt is published once, in the [builder-agent help article](../help/builder-agent.md#builder-prompt), so this page cannot drift from it. Copy it unchanged as the agent's `systemPrompt`.
|
|
259
|
+
|
|
260
|
+
Adjust the numbered rules to your project; keep rules 1, 5, and 6.
|
|
261
|
+
|
|
262
|
+
</details>
|
|
263
|
+
|
|
264
|
+
Package error codes are in [Installing packages in coding runs](coding-packages.md).
|
|
265
|
+
Make sure the repository's `AGENTS.md` lists the test and lint commands, because
|
|
266
|
+
the builder takes them from there.
|
|
267
|
+
|
|
268
|
+
### Node / TypeScript
|
|
269
|
+
|
|
270
|
+
Use the stock worker image: `toolchain: "node"`, no `toolchainVersion`. The
|
|
271
|
+
agent runs `npm ci` or `npm install` through the registry proxy, so enable the
|
|
272
|
+
packages your project needs (top-level entries only; the dependency graph is
|
|
273
|
+
added automatically):
|
|
274
|
+
|
|
275
|
+
```json
|
|
276
|
+
{
|
|
277
|
+
"provider": "codex",
|
|
278
|
+
"repository": "your-org/your-repo",
|
|
279
|
+
"baseRef": "main",
|
|
280
|
+
"toolchain": "node",
|
|
281
|
+
"timeoutSec": 1800,
|
|
282
|
+
"packageAllowlist": {
|
|
283
|
+
"npm": ["react@^19", "vitest", "@testing-library/*"]
|
|
284
|
+
},
|
|
285
|
+
"packagePolicy": { "minReleaseAgeDays": 3 },
|
|
286
|
+
"protectedPaths": [".github/**", "CODEOWNERS"]
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Test commands come from `AGENTS.md` (for example `npm test` and `npm run lint`).
|
|
291
|
+
Lockfile installs are verified against the registry before npm runs; see
|
|
292
|
+
[Installing packages in coding runs](coding-packages.md).
|
|
293
|
+
|
|
294
|
+
### Python
|
|
295
|
+
|
|
296
|
+
Use the `node-python` toolchain with version `3.12`, which adds Python 3 with
|
|
297
|
+
`pytest` and `ruff` next to Node. Pip installs go through the registry proxy
|
|
298
|
+
into a virtual environment, and only wheels are served (source distributions are
|
|
299
|
+
refused), so allow packages that publish wheels. Extras such as `[binary]` are not accepted in an allowlist entry; list the wheel package's own name instead (`psycopg-binary`, not `psycopg[binary]`):
|
|
300
|
+
|
|
301
|
+
```json
|
|
302
|
+
{
|
|
303
|
+
"provider": "codex",
|
|
304
|
+
"repository": "your-org/your-repo",
|
|
305
|
+
"baseRef": "main",
|
|
306
|
+
"toolchain": "node-python",
|
|
307
|
+
"toolchainVersion": "3.12",
|
|
308
|
+
"timeoutSec": 1800,
|
|
309
|
+
"packageAllowlist": {
|
|
310
|
+
"pypi": ["flask>=3", "sqlalchemy>=2", "psycopg-binary>=3"]
|
|
311
|
+
},
|
|
312
|
+
"services": ["postgres"]
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
`services` is optional. When the tests need a database, commit
|
|
317
|
+
`.wardby/services.yaml` to the base branch:
|
|
318
|
+
|
|
319
|
+
```yaml
|
|
320
|
+
services:
|
|
321
|
+
postgres: "16"
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Each run then gets a fresh, empty PostgreSQL instance and a `DATABASE_URL`
|
|
325
|
+
variable; say so in `AGENTS.md` so tests read it. See
|
|
326
|
+
[Services for coding runs](coding-services.md) for the catalog, variables, and
|
|
327
|
+
errors. For Claude Code on `node-python`, the operator also sets
|
|
328
|
+
`CODING_CLAUDE_TOOL_RUNNER_IMAGE_NODE_PYTHON_3_12` (see
|
|
329
|
+
[Coding-agent setup](coding-agent-setup.md)).
|
|
330
|
+
|
|
331
|
+
### Other languages (Go, Java, Rust, ...)
|
|
332
|
+
|
|
333
|
+
Wardby ships worker images only for `node` and `node-python`. For any other
|
|
334
|
+
toolchain, build your own image on Wardby's driver base image and point the
|
|
335
|
+
agent at it with `workerImageRef`, a digest-pinned reference (a mutable tag is
|
|
336
|
+
rejected). Setting it needs the `agents:admin` scope and the admin role. The
|
|
337
|
+
Dockerfile shape, the driver image, and what Wardby does and does not verify are
|
|
338
|
+
in [Bring-your-own worker images](coding-worker-byo-images.md).
|
|
339
|
+
|
|
340
|
+
```json
|
|
341
|
+
{
|
|
342
|
+
"provider": "codex",
|
|
343
|
+
"repository": "your-org/your-repo",
|
|
344
|
+
"baseRef": "main",
|
|
345
|
+
"toolchain": "node",
|
|
346
|
+
"workerImageRef": "registry.example.com/your-org/worker-go@sha256:<64 hex>",
|
|
347
|
+
"timeoutSec": 1800
|
|
348
|
+
}
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
`toolchain` is still required; the worker image's own toolchain is what runs.
|
|
352
|
+
|
|
353
|
+
What the package registry covers: only **npm and PyPI** are mediated. A Go,
|
|
354
|
+
Maven, Cargo, or other ecosystem has no registry proxy, and the worker has no
|
|
355
|
+
direct network access, so those dependencies must be baked into your image or
|
|
356
|
+
already vendored in the repository. The registry still applies to any npm or
|
|
357
|
+
pip use inside the same run, and `packageAllowlist` has no entry for other
|
|
358
|
+
ecosystems. If services are allowed, the image must be built on driver v11 or
|
|
359
|
+
later.
|
|
360
|
+
|
|
361
|
+
### Together with Recipe A
|
|
362
|
+
|
|
363
|
+
Coding runs automatically receive the repository's knowledge index and base
|
|
364
|
+
commit when `docs/knowledge/index.md` exists on the base branch
|
|
365
|
+
([how coding runs use the bundle](knowledge.md#how-coding-runs-use-the-bundle)),
|
|
366
|
+
so the builder works from recorded pitfalls and invariants. Recipe A keeps that
|
|
367
|
+
bundle current.
|
|
368
|
+
|
|
369
|
+
### What it produces
|
|
370
|
+
|
|
371
|
+
A mention from someone with write access gets a "Working on it" status comment
|
|
372
|
+
from the App. The router either asks a question or delegates, the builder
|
|
373
|
+
pushes a unique branch and opens at most one draft pull request, and the App
|
|
374
|
+
edits the status comment with the pull request link or the failure. A person
|
|
375
|
+
reviews and merges; Wardby never merges for you. A later mention on that pull
|
|
376
|
+
request continues the same branch.
|
|
377
|
+
|
|
378
|
+
## Next steps
|
|
379
|
+
|
|
380
|
+
- [Architecture knowledge bundles](knowledge.md)
|
|
381
|
+
- [Code-review agents](code-review-agents.md)
|
|
382
|
+
- [Coding-agent setup](coding-agent-setup.md)
|
|
383
|
+
- [Models and pricing](models.md)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Runtime architecture — GitHub trigger path + observability
|
|
2
|
+
|
|
3
|
+
Two independent subsystems currently run side by side on the same host and
|
|
4
|
+
share only Postgres and a Docker Compose network: the `wardby mcp` process
|
|
5
|
+
(agents/runs/webhooks/MCP tools) and the local observability stack
|
|
6
|
+
(coding-proxy metrics → Prometheus → Grafana). Neither depends on the other;
|
|
7
|
+
restarting one has no effect on the other.
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TB
|
|
11
|
+
subgraph GH["GitHub — your-org/your-repo"]
|
|
12
|
+
Issue["Issue or comment that\nmentions your agent"]
|
|
13
|
+
Action["Actions workflow that\nPOSTs the task to wardby"]
|
|
14
|
+
PRout["Draft PR opened"]
|
|
15
|
+
Issue --> Action
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
Action -->|"POST /webhooks/:id\nx-webhook-secret"| Tunnel
|
|
19
|
+
|
|
20
|
+
subgraph Public["Public HTTPS"]
|
|
21
|
+
Tunnel["HTTPS tunnel (e.g. ngrok)\n<your-domain> -> :8080\n(TLS terminated here)"]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Tunnel --> MCP
|
|
25
|
+
|
|
26
|
+
subgraph Host["Your machine"]
|
|
27
|
+
subgraph MCPBox["wardby mcp (Node/tsx)\nMCP_TRANSPORT=http, self-hosted auth"]
|
|
28
|
+
MCP["/webhooks/:id - secret auth\n/mcp - OAuth auth (list_agents, trigger_agent, get_run, ...)\n/.well-known/oauth-protected-resource"]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
MCP -->|"creates Run, dispatches via JobLauncher"| Worker
|
|
32
|
+
MCP <-->|"reads/writes"| PG[("local-postgres-1\nAgent, Run, Webhook,\nBudgetGroup, AgentMemory, Datastore")]
|
|
33
|
+
|
|
34
|
+
subgraph Docker["Docker"]
|
|
35
|
+
Worker["ephemeral coding worker\n(Codex / Claude Code)\none per Run"]
|
|
36
|
+
Proxy["wardby-coding-proxy\ncredential injection +\ntoken/cost metering\n:9464/metrics (private net only)"]
|
|
37
|
+
Worker -->|"OpenAI/Anthropic calls,\nproxied"| Proxy
|
|
38
|
+
Proxy -->|"usage/cost ledger"| PG
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
Worker -->|"push branch"| PRout
|
|
42
|
+
|
|
43
|
+
Proxy -->|"scraped"| Prom["local-prometheus-1\n127.0.0.1:9090 (loopback)\n24h retention"]
|
|
44
|
+
Prom -->|"query"| Graf["local-grafana-1\n127.0.0.1:3000 (loopback)\ndashboards: wardby-coding-proxy,\nwardby-coding-budget"]
|
|
45
|
+
end
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Key boundaries
|
|
49
|
+
|
|
50
|
+
- **Only one thing is reachable from outside this machine:** the HTTPS
|
|
51
|
+
tunnel into `wardby mcp:8080`. Postgres, coding-proxy, Prometheus, and
|
|
52
|
+
Grafana are all either fully private-network-only (`coding-proxy:9464`
|
|
53
|
+
has no `ports:` mapping at all) or explicitly loopback-bound
|
|
54
|
+
(`127.0.0.1:9090`, `127.0.0.1:3000`) — Grafana/Prometheus are not exposed
|
|
55
|
+
through the tunnel.
|
|
56
|
+
- **The coding worker never sees real API credentials.** `wardby-coding-proxy`
|
|
57
|
+
sits between it and OpenAI/Anthropic, injecting credentials and metering
|
|
58
|
+
tokens/cost — this is also where `/metrics` lives.
|
|
59
|
+
- **Two write paths into Postgres:** `wardby mcp` owns the agent/run/webhook
|
|
60
|
+
config tables directly; `coding-proxy` writes its own usage/cost ledger
|
|
61
|
+
directly during a run, which `wardby mcp` reconciles back into the `Run`
|
|
62
|
+
row once the container finishes (the "cap at the boundary, reconcile
|
|
63
|
+
after" pattern for opaque agent runs).
|
|
64
|
+
- **`wardby mcp` restarts don't affect observability, and vice versa.** The
|
|
65
|
+
control plane and metrics stack can be deployed and restarted independently.
|
|
66
|
+
|
|
67
|
+
## Where the worker actually runs
|
|
68
|
+
|
|
69
|
+
The diagram above shows `JOB_LAUNCHER=docker`, which is what this host uses.
|
|
70
|
+
The worker's execution backend is a seam (`WorkspaceJobLauncher`), and the
|
|
71
|
+
choice does not change any boundary above — the worker still holds no
|
|
72
|
+
credentials, still reaches only the proxy, and the proxy still owns the ledger.
|
|
73
|
+
|
|
74
|
+
| `JOB_LAUNCHER` | Worker runs in | Isolation |
|
|
75
|
+
| -------------- | -------------------------------- | ---------------------------------------------------- |
|
|
76
|
+
| `local` | a child process on this host | development only, no isolation |
|
|
77
|
+
| `docker` | a container on a per-run network | the diagram above |
|
|
78
|
+
| `kubernetes` | a pod in a namespace | per-run NetworkPolicy, attested pod, optional gVisor |
|
|
79
|
+
|
|
80
|
+
Under `kubernetes` the shape is the same with different nouns: the per-run
|
|
81
|
+
Docker network becomes a NetworkPolicy, the keeper and worker share a pod
|
|
82
|
+
instead of a volume, and the proxy is a Service rather than a container name.
|
|
83
|
+
Two things have no Docker equivalent. The pod read back from the API server is
|
|
84
|
+
compared field by field against the pod wardby built, and any difference fails
|
|
85
|
+
the run; and before the worker is released, the launcher proves the network
|
|
86
|
+
policy is actually being enforced, because a cluster accepts a policy whether
|
|
87
|
+
or not anything enforces it. See
|
|
88
|
+
[coding-worker-isolation.md](coding-worker-isolation.md) for the mechanics and
|
|
89
|
+
the [Kubernetes deployment guide](../deploy/kind-coding/README.md) for the local
|
|
90
|
+
and GKE Autopilot overlays.
|
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">Wardby icon</title>
|
|
3
|
+
<desc id="desc">A friendly helmeted guardian carrying a budget shield.</desc>
|
|
4
|
+
|
|
5
|
+
<circle cx="64" cy="64" r="58" fill="#071d3b"/>
|
|
6
|
+
<path d="M20 55C20 25 40 12 64 12s44 13 44 43v35H20Z" fill="#fffaf0"/>
|
|
7
|
+
<rect x="30" y="43" width="68" height="45" rx="18" fill="#0a2850"/>
|
|
8
|
+
<path d="M27 48Q64 18 101 48" fill="none" stroke="#c8aa70" stroke-width="10" stroke-linecap="round"/>
|
|
9
|
+
<path d="M64 7V53" fill="none" stroke="#c8aa70" stroke-width="11" stroke-linecap="round"/>
|
|
10
|
+
<path d="M44 65q7 10 14 0M70 65q7 10 14 0" fill="none" stroke="#4be6b3" stroke-width="6" stroke-linecap="round"/>
|
|
11
|
+
|
|
12
|
+
<path d="M78 76 108 86v18c0 12-10 19-30 24-20-5-30-12-30-24V86Z" fill="#071d3b" stroke="#fffaf0" stroke-width="5" stroke-linejoin="round"/>
|
|
13
|
+
<g transform="translate(78 105) scale(.72) translate(-78 -105)">
|
|
14
|
+
<path d="M89 91c-3-4-7-6-12-6-7 0-12 4-12 9 0 6 5 8 13 10 8 2 13 5 13 11 0 7-5 11-13 11-7 0-13-3-17-8M78 82v46" fill="none" stroke="#4be6b3" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
|
|
15
|
+
</g>
|
|
16
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1254 1254" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">Wardby robot mascot</title>
|
|
3
|
+
<desc id="desc">A friendly helmeted robot carrying a shield marked with a dollar sign.</desc>
|
|
4
|
+
<image width="1254" height="1254" href="wardby-mascot.png" xlink:href="wardby-mascot.png" preserveAspectRatio="xMidYMid meet"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="430" viewBox="0 0 1280 430" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">Wardby agent workflow</title>
|
|
3
|
+
<desc id="desc">Five stages show a request moving from Claude or Codex through MCP, governed execution in Wardby, and an outcome controlled by review policy.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="background" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#f7faff"/>
|
|
7
|
+
<stop offset="1" stop-color="#edf8f7"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="primary" x1="0" y1="0" x2="1" y2="1">
|
|
10
|
+
<stop offset="0" stop-color="#0f6bff"/>
|
|
11
|
+
<stop offset="1" stop-color="#0756d8"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
<linearGradient id="success" x1="0" y1="0" x2="1" y2="1">
|
|
14
|
+
<stop offset="0" stop-color="#2de3a6"/>
|
|
15
|
+
<stop offset="1" stop-color="#11b981"/>
|
|
16
|
+
</linearGradient>
|
|
17
|
+
<filter id="shadow" x="-20%" y="-20%" width="140%" height="160%">
|
|
18
|
+
<feDropShadow dx="0" dy="5" stdDeviation="7" flood-color="#082850" flood-opacity="0.10"/>
|
|
19
|
+
</filter>
|
|
20
|
+
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
21
|
+
<path d="M 0 0 L 10 5 L 0 10 z" fill="#7c93b3"/>
|
|
22
|
+
</marker>
|
|
23
|
+
</defs>
|
|
24
|
+
|
|
25
|
+
<rect x="1" y="1" width="1278" height="428" rx="28" fill="url(#background)" stroke="#dbe7f5" stroke-width="2"/>
|
|
26
|
+
|
|
27
|
+
<text x="48" y="48" fill="#0f6bff" font-family="Arial, Helvetica, sans-serif" font-size="13" font-weight="700" letter-spacing="2">FULL AGENT LIFECYCLE</text>
|
|
28
|
+
<text x="48" y="76" fill="#082850" font-family="Arial, Helvetica, sans-serif" font-size="24" font-weight="700">From a conversation to a governed, reviewable outcome</text>
|
|
29
|
+
|
|
30
|
+
<g filter="url(#shadow)">
|
|
31
|
+
<rect x="45" y="112" width="210" height="172" rx="18" fill="#ffffff" stroke="#bcd4f7" stroke-width="2"/>
|
|
32
|
+
<circle cx="75" cy="142" r="17" fill="#e8f1ff"/>
|
|
33
|
+
<text x="75" y="148" text-anchor="middle" fill="#0f6bff" font-family="Arial, Helvetica, sans-serif" font-size="15" font-weight="700">1</text>
|
|
34
|
+
<text x="103" y="147" fill="#0f6bff" font-family="Arial, Helvetica, sans-serif" font-size="12" font-weight="700" letter-spacing="1.5">ASK</text>
|
|
35
|
+
<text x="70" y="190" fill="#082850" font-family="Arial, Helvetica, sans-serif" font-size="21" font-weight="700">Claude or Codex</text>
|
|
36
|
+
<text x="70" y="220" fill="#52677f" font-family="Arial, Helvetica, sans-serif" font-size="14">Describe the outcome</text>
|
|
37
|
+
<text x="70" y="243" fill="#52677f" font-family="Arial, Helvetica, sans-serif" font-size="14">in natural language</text>
|
|
38
|
+
</g>
|
|
39
|
+
|
|
40
|
+
<path d="M 263 198 H 284" fill="none" stroke="#7c93b3" stroke-width="3" marker-end="url(#arrow)"/>
|
|
41
|
+
<text x="273" y="184" text-anchor="middle" fill="#637b98" font-family="Arial, Helvetica, sans-serif" font-size="11" font-weight="700">MCP</text>
|
|
42
|
+
|
|
43
|
+
<g filter="url(#shadow)">
|
|
44
|
+
<rect x="295" y="112" width="210" height="172" rx="18" fill="#ffffff" stroke="#bcd4f7" stroke-width="2"/>
|
|
45
|
+
<circle cx="325" cy="142" r="17" fill="#e8f1ff"/>
|
|
46
|
+
<text x="325" y="148" text-anchor="middle" fill="#0f6bff" font-family="Arial, Helvetica, sans-serif" font-size="15" font-weight="700">2</text>
|
|
47
|
+
<text x="353" y="147" fill="#0f6bff" font-family="Arial, Helvetica, sans-serif" font-size="12" font-weight="700" letter-spacing="1.5">DEFINE</text>
|
|
48
|
+
<text x="320" y="190" fill="#082850" font-family="Arial, Helvetica, sans-serif" font-size="21" font-weight="700">Agent blueprint</text>
|
|
49
|
+
<text x="320" y="220" fill="#52677f" font-family="Arial, Helvetica, sans-serif" font-size="14">Model • tools • schedule</text>
|
|
50
|
+
<text x="320" y="243" fill="#52677f" font-family="Arial, Helvetica, sans-serif" font-size="14">Sub-agents • outcome</text>
|
|
51
|
+
</g>
|
|
52
|
+
|
|
53
|
+
<path d="M 513 198 H 534" fill="none" stroke="#7c93b3" stroke-width="3" marker-end="url(#arrow)"/>
|
|
54
|
+
<text x="523" y="184" text-anchor="middle" fill="#637b98" font-family="Arial, Helvetica, sans-serif" font-size="11" font-weight="700">POLICY</text>
|
|
55
|
+
|
|
56
|
+
<g filter="url(#shadow)">
|
|
57
|
+
<rect x="545" y="112" width="210" height="172" rx="18" fill="url(#primary)"/>
|
|
58
|
+
<circle cx="575" cy="142" r="17" fill="#ffffff" fill-opacity="0.20"/>
|
|
59
|
+
<text x="575" y="148" text-anchor="middle" fill="#ffffff" font-family="Arial, Helvetica, sans-serif" font-size="15" font-weight="700">3</text>
|
|
60
|
+
<text x="603" y="147" fill="#dceaff" font-family="Arial, Helvetica, sans-serif" font-size="12" font-weight="700" letter-spacing="1.5">GOVERN</text>
|
|
61
|
+
<text x="570" y="190" fill="#ffffff" font-family="Arial, Helvetica, sans-serif" font-size="21" font-weight="700">Wardby</text>
|
|
62
|
+
<text x="570" y="220" fill="#e7f0ff" font-family="Arial, Helvetica, sans-serif" font-size="14">Budget • secrets • owner</text>
|
|
63
|
+
<text x="570" y="243" fill="#e7f0ff" font-family="Arial, Helvetica, sans-serif" font-size="14">Audit • cancellation</text>
|
|
64
|
+
</g>
|
|
65
|
+
|
|
66
|
+
<path d="M 763 198 H 784" fill="none" stroke="#7c93b3" stroke-width="3" marker-end="url(#arrow)"/>
|
|
67
|
+
<text x="773" y="184" text-anchor="middle" fill="#637b98" font-family="Arial, Helvetica, sans-serif" font-size="11" font-weight="700">RUN</text>
|
|
68
|
+
|
|
69
|
+
<g filter="url(#shadow)">
|
|
70
|
+
<rect x="795" y="112" width="210" height="172" rx="18" fill="#ffffff" stroke="#bcd4f7" stroke-width="2"/>
|
|
71
|
+
<circle cx="825" cy="142" r="17" fill="#e8f1ff"/>
|
|
72
|
+
<text x="825" y="148" text-anchor="middle" fill="#0f6bff" font-family="Arial, Helvetica, sans-serif" font-size="15" font-weight="700">4</text>
|
|
73
|
+
<text x="853" y="147" fill="#0f6bff" font-family="Arial, Helvetica, sans-serif" font-size="12" font-weight="700" letter-spacing="1.5">EXECUTE</text>
|
|
74
|
+
<text x="820" y="190" fill="#082850" font-family="Arial, Helvetica, sans-serif" font-size="21" font-weight="700">Isolated workers</text>
|
|
75
|
+
<text x="820" y="220" fill="#52677f" font-family="Arial, Helvetica, sans-serif" font-size="14">Native • Codex • Claude</text>
|
|
76
|
+
<text x="820" y="243" fill="#52677f" font-family="Arial, Helvetica, sans-serif" font-size="14">Bounded tools and access</text>
|
|
77
|
+
</g>
|
|
78
|
+
|
|
79
|
+
<path d="M 1013 198 H 1034" fill="none" stroke="#7c93b3" stroke-width="3" marker-end="url(#arrow)"/>
|
|
80
|
+
<text x="1023" y="184" text-anchor="middle" fill="#637b98" font-family="Arial, Helvetica, sans-serif" font-size="11" font-weight="700">RESULT</text>
|
|
81
|
+
|
|
82
|
+
<g filter="url(#shadow)">
|
|
83
|
+
<rect x="1045" y="112" width="190" height="172" rx="18" fill="#ffffff" stroke="#22c995" stroke-width="2"/>
|
|
84
|
+
<circle cx="1075" cy="142" r="17" fill="url(#success)"/>
|
|
85
|
+
<text x="1075" y="148" text-anchor="middle" fill="#ffffff" font-family="Arial, Helvetica, sans-serif" font-size="15" font-weight="700">5</text>
|
|
86
|
+
<text x="1103" y="147" fill="#09845f" font-family="Arial, Helvetica, sans-serif" font-size="12" font-weight="700" letter-spacing="1.5">REVIEW</text>
|
|
87
|
+
<text x="1070" y="190" fill="#082850" font-family="Arial, Helvetica, sans-serif" font-size="21" font-weight="700">Review policy</text>
|
|
88
|
+
<text x="1070" y="220" fill="#52677f" font-family="Arial, Helvetica, sans-serif" font-size="14">Agent or human review</text>
|
|
89
|
+
<text x="1070" y="243" fill="#09845f" font-family="Arial, Helvetica, sans-serif" font-size="14" font-weight="700">Authority stays explicit</text>
|
|
90
|
+
</g>
|
|
91
|
+
|
|
92
|
+
<rect x="45" y="324" width="1190" height="70" rx="16" fill="#082850"/>
|
|
93
|
+
<text x="72" y="351" fill="#70edc2" font-family="Arial, Helvetica, sans-serif" font-size="12" font-weight="700" letter-spacing="1.5">RUNS IN YOUR INFRASTRUCTURE</text>
|
|
94
|
+
<text x="72" y="378" fill="#ffffff" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700">Your cloud • Your credentials • Your operating boundary</text>
|
|
95
|
+
|
|
96
|
+
<g font-family="Arial, Helvetica, sans-serif" font-size="12" font-weight="700" text-anchor="middle">
|
|
97
|
+
<rect x="605" y="343" width="140" height="32" rx="16" fill="#ffffff" fill-opacity="0.11"/>
|
|
98
|
+
<text x="675" y="364" fill="#ffffff">Budget enforced</text>
|
|
99
|
+
<rect x="757" y="343" width="168" height="32" rx="16" fill="#ffffff" fill-opacity="0.11"/>
|
|
100
|
+
<text x="841" y="364" fill="#ffffff">Credentials separated</text>
|
|
101
|
+
<rect x="937" y="343" width="135" height="32" rx="16" fill="#ffffff" fill-opacity="0.11"/>
|
|
102
|
+
<text x="1005" y="364" fill="#ffffff">Runs observable</text>
|
|
103
|
+
<rect x="1084" y="343" width="125" height="32" rx="16" fill="#ffffff" fill-opacity="0.11"/>
|
|
104
|
+
<text x="1147" y="364" fill="#ffffff">Action policy</text>
|
|
105
|
+
</g>
|
|
106
|
+
</svg>
|