From 0a0489876f57638765a5cd422bef94551c5504c5 Mon Sep 17 00:00:00 2001 From: Dotta Date: Thu, 6 Aug 2026 15:32:23 +0000 Subject: [PATCH] test(security): inventory board-key routes from the runtime router Replace the source-regex board-key route inventory with an enumeration of the real Express router stack that createApp mounts. Express 5 does not keep the mount path string on a mounted layer, so a probe records it as each router is mounted; the inventory then walks the built app and reconstructs every final normalized path, including nested routers. Runtime-only surfaces (handlers injected through createApp options, plugin sub-apps) are declared through an explicit registration hook; anything mounted at runtime that is not registered resolves to undeclared and stays denied. The runtime set is compared bidirectionally with the explicit registry inventory so a reachable route without metadata (missing) and a declared row with no live route (stale) both fail CI. A regression registers a direct app.post and proves the gate fails on it. Declare the top-level /_plugins and /llms surfaces the runtime walk newly surfaces as explicit denials; deny and concealment behavior are unchanged. Co-Authored-By: Paperclip --- .../board-key-route-registry.test.ts.snap | 9737 ----------------- .../src/security/board-key-route-inventory.ts | 363 + .../security/board-key-route-registry.test.ts | 177 +- .../src/security/board-key-route-registry.ts | 7 + 4 files changed, 467 insertions(+), 9817 deletions(-) delete mode 100644 server/src/security/__snapshots__/board-key-route-registry.test.ts.snap create mode 100644 server/src/security/board-key-route-inventory.ts diff --git a/server/src/security/__snapshots__/board-key-route-registry.test.ts.snap b/server/src/security/__snapshots__/board-key-route-registry.test.ts.snap deleted file mode 100644 index 1f479f8e28..0000000000 --- a/server/src/security/__snapshots__/board-key-route-registry.test.ts.snap +++ /dev/null @@ -1,9737 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`board-key route registry > inventories every checked-in route registration with an explicit policy 1`] = ` -[ - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/board-claim/{*path}", - }, - "method": "GET", - "path": "/api/board-claim/11111111-1111-4111-8111-111111111111", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/board-claim/{*path}", - }, - "method": "POST", - "path": "/api/board-claim/11111111-1111-4111-8111-111111111111/claim", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/bootstrap/{*path}", - }, - "method": "POST", - "path": "/api/bootstrap/claim", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cli-auth/{*path}", - }, - "method": "POST", - "path": "/api/cli-auth/challenges", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cli-auth/{*path}", - }, - "method": "GET", - "path": "/api/cli-auth/challenges/11111111-1111-4111-8111-111111111111", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cli-auth/{*path}", - }, - "method": "POST", - "path": "/api/cli-auth/challenges/11111111-1111-4111-8111-111111111111/approve", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cli-auth/{*path}", - }, - "method": "POST", - "path": "/api/cli-auth/challenges/11111111-1111-4111-8111-111111111111/cancel", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cli-auth/{*path}", - }, - "method": "GET", - "path": "/api/cli-auth/me", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/board-api-keys", - }, - "method": "GET", - "path": "/api/board-api-keys", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/board-api-keys", - }, - "method": "POST", - "path": "/api/board-api-keys", - }, - { - "file": "access.ts", - "metadata": { - "action": "board_api_keys:revoke_self", - "classification": "key_self", - "concealment": "not_found", - "method": "DELETE", - "resolver": "key_self", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/board-api-keys/{id}", - }, - "method": "DELETE", - "path": "/api/board-api-keys/11111111-1111-4111-8111-111111111111", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cli-auth/{*path}", - }, - "method": "POST", - "path": "/api/cli-auth/revoke-current", - }, - { - "file": "access.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/skills/{*path}", - }, - "method": "GET", - "path": "/api/skills/available", - }, - { - "file": "access.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/skills/{*path}", - }, - "method": "GET", - "path": "/api/skills/index", - }, - { - "file": "access.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/skills/{*path}", - }, - "method": "GET", - "path": "/api/skills/11111111-1111-4111-8111-111111111111", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/invites", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/openclaw/invite-prompt", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/openclaw/invite-prompt", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "GET", - "path": "/api/invites/11111111-1111-4111-8111-111111111111", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "GET", - "path": "/api/invites/11111111-1111-4111-8111-111111111111/logo", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "GET", - "path": "/api/invites/11111111-1111-4111-8111-111111111111/onboarding", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "GET", - "path": "/api/invites/11111111-1111-4111-8111-111111111111/onboarding.txt", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "GET", - "path": "/api/invites/11111111-1111-4111-8111-111111111111/skills/index", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "GET", - "path": "/api/invites/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "GET", - "path": "/api/invites/11111111-1111-4111-8111-111111111111/test-resolution", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "POST", - "path": "/api/invites/11111111-1111-4111-8111-111111111111/accept", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/invites/{*path}", - }, - "method": "POST", - "path": "/api/invites/11111111-1111-4111-8111-111111111111/revoke", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/invites", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/join-requests", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/join-requests/11111111-1111-4111-8111-111111111111/approve", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/join-requests/11111111-1111-4111-8111-111111111111/reject", - }, - { - "file": "access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/join-requests/{*path}", - }, - "method": "POST", - "path": "/api/join-requests/11111111-1111-4111-8111-111111111111/claim-api-key", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/members", - }, - { - "file": "access.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/user-directory", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/members/11111111-1111-4111-8111-111111111111", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/members/11111111-1111-4111-8111-111111111111/role-and-grants", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/members/11111111-1111-4111-8111-111111111111/archive", - }, - { - "file": "access.ts", - "metadata": { - "action": "members:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/members/11111111-1111-4111-8111-111111111111/permissions", - }, - { - "file": "access.ts", - "metadata": { - "action": "users:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/admin/{*path}", - }, - "method": "POST", - "path": "/api/admin/users/11111111-1111-4111-8111-111111111111/promote-instance-admin", - }, - { - "file": "access.ts", - "metadata": { - "action": "users:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/admin/{*path}", - }, - "method": "GET", - "path": "/api/admin/users", - }, - { - "file": "access.ts", - "metadata": { - "action": "users:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/admin/{*path}", - }, - "method": "POST", - "path": "/api/admin/users/11111111-1111-4111-8111-111111111111/demote-instance-admin", - }, - { - "file": "access.ts", - "metadata": { - "action": "users:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/admin/{*path}", - }, - "method": "GET", - "path": "/api/admin/users/11111111-1111-4111-8111-111111111111/company-access", - }, - { - "file": "access.ts", - "metadata": { - "action": "users:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/admin/{*path}", - }, - "method": "PUT", - "path": "/api/admin/users/11111111-1111-4111-8111-111111111111/company-access", - }, - { - "file": "activity.ts", - "metadata": { - "action": "activity:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/activity", - }, - { - "file": "activity.ts", - "metadata": { - "action": "audit:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/audit/agent-actions", - }, - { - "file": "activity.ts", - "metadata": { - "action": "audit:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/audit/agent-actions.csv", - }, - { - "file": "activity.ts", - "metadata": { - "action": "activity:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/activity", - }, - { - "file": "activity.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/activity", - }, - { - "file": "activity.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/runs", - }, - { - "file": "activity.ts", - "metadata": { - "action": "runtime:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "heartbeat_run", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/heartbeat-runs/{id}/{*path}", - }, - "method": "GET", - "path": "/api/heartbeat-runs/11111111-1111-4111-8111-111111111111/issues", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "GET", - "path": "/api/adapters", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "install", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "POST", - "path": "/api/adapters/install", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "GET", - "path": "/api/adapters/11111111-1111-4111-8111-111111111111", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/adapters/11111111-1111-4111-8111-111111111111", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/adapters/11111111-1111-4111-8111-111111111111/override", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/adapters/11111111-1111-4111-8111-111111111111", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "POST", - "path": "/api/adapters/11111111-1111-4111-8111-111111111111/reload", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "POST", - "path": "/api/adapters/11111111-1111-4111-8111-111111111111/reinstall", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "GET", - "path": "/api/adapters/11111111-1111-4111-8111-111111111111/config-schema", - }, - { - "file": "adapters.ts", - "metadata": { - "action": "adapters:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/adapters/{id}/{*path}", - }, - "method": "GET", - "path": "/api/adapters/11111111-1111-4111-8111-111111111111/ui-parser.js", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/adapters/11111111-1111-4111-8111-111111111111/models", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/adapters/11111111-1111-4111-8111-111111111111/models", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/adapters/11111111-1111-4111-8111-111111111111/model-profiles", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/adapters/11111111-1111-4111-8111-111111111111/model-profiles", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/adapters/11111111-1111-4111-8111-111111111111/detect-model", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/adapters/11111111-1111-4111-8111-111111111111/detect-model", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/adapters/11111111-1111-4111-8111-111111111111/test-environment", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/adapters/11111111-1111-4111-8111-111111111111/test-environment", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/skills", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/skills/sync", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/agents", - }, - { - "file": "agents.ts", - "metadata": { - "action": "instance:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "GET", - "path": "/api/instance/scheduler-heartbeats", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/org", - }, - { - "file": "agents.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/org.svg", - }, - { - "file": "agents.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/org.png", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/agent-configurations", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/agent-configurations", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/me", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/me/inbox-lite", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/me/inbox/mine", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/configuration", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/config-revisions", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/config-revisions/11111111-1111-4111-8111-111111111111", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:operate", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/config-revisions/11111111-1111-4111-8111-111111111111/rollback", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/runtime-state", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/task-sessions", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:operate", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/runtime-state/reset-session", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/agent-hires", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/agent-hires", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/agents", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/permissions", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/instructions-path", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/instructions-bundle", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/instructions-bundle", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/instructions-bundle/file", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "PUT", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/instructions-bundle/file", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/instructions-bundle/file", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/agents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:operate", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/pause", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:operate", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/resume", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:operate", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/clear-error", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/approve", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:operate", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/terminate", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/agents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/keys", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/keys", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/keys/11111111-1111-4111-8111-111111111111", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:operate", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/wakeup", - }, - { - "file": "agents.ts", - "metadata": { - "action": "agents:operate", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/heartbeat/invoke", - }, - { - "file": "agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/claude-login", - }, - { - "file": "agents.ts", - "metadata": { - "action": "runtime:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/heartbeat-runs", - }, - { - "file": "agents.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/live-runs", - }, - { - "file": "agents.ts", - "metadata": { - "action": "runtime:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "heartbeat_run", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/heartbeat-runs/{id}/{*path}", - }, - "method": "GET", - "path": "/api/heartbeat-runs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "agents.ts", - "metadata": { - "action": "runtime:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "heartbeat_run", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/heartbeat-runs/{id}/{*path}", - }, - "method": "POST", - "path": "/api/heartbeat-runs/11111111-1111-4111-8111-111111111111/cancel", - }, - { - "file": "agents.ts", - "metadata": { - "action": "runtime:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "heartbeat_run", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/heartbeat-runs/{id}/{*path}", - }, - "method": "POST", - "path": "/api/heartbeat-runs/11111111-1111-4111-8111-111111111111/watchdog-decisions", - }, - { - "file": "agents.ts", - "metadata": { - "action": "runtime:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "heartbeat_run", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/heartbeat-runs/{id}/{*path}", - }, - "method": "GET", - "path": "/api/heartbeat-runs/11111111-1111-4111-8111-111111111111/events", - }, - { - "file": "agents.ts", - "metadata": { - "action": "runtime:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "heartbeat_run", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/heartbeat-runs/{id}/{*path}", - }, - "method": "GET", - "path": "/api/heartbeat-runs/11111111-1111-4111-8111-111111111111/log", - }, - { - "file": "agents.ts", - "metadata": { - "action": "runtime:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "heartbeat_run", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/heartbeat-runs/{id}/{*path}", - }, - "method": "GET", - "path": "/api/heartbeat-runs/11111111-1111-4111-8111-111111111111/workspace-operations", - }, - { - "file": "agents.ts", - "metadata": { - "action": "workspaces:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "workspace_operation", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/workspace-operations/{id}/{*path}", - }, - "method": "GET", - "path": "/api/workspace-operations/11111111-1111-4111-8111-111111111111/log", - }, - { - "file": "agents.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/live-runs", - }, - { - "file": "agents.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/active-run", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/approvals", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "approval", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/approvals/{id}/{*path}", - }, - "method": "GET", - "path": "/api/approvals/11111111-1111-4111-8111-111111111111", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/approvals", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "approval", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/approvals/{id}/{*path}", - }, - "method": "GET", - "path": "/api/approvals/11111111-1111-4111-8111-111111111111/issues", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:decide", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "approval", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/approvals/{id}/{*path}", - }, - "method": "POST", - "path": "/api/approvals/11111111-1111-4111-8111-111111111111/approve", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:decide", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "approval", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/approvals/{id}/{*path}", - }, - "method": "POST", - "path": "/api/approvals/11111111-1111-4111-8111-111111111111/reject", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "approval", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/approvals/{id}/{*path}", - }, - "method": "POST", - "path": "/api/approvals/11111111-1111-4111-8111-111111111111/request-revision", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "approval", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/approvals/{id}/{*path}", - }, - "method": "POST", - "path": "/api/approvals/11111111-1111-4111-8111-111111111111/resubmit", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "approval", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/approvals/{id}/{*path}", - }, - "method": "GET", - "path": "/api/approvals/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "approvals.ts", - "metadata": { - "action": "approvals:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "approval", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/approvals/{id}/{*path}", - }, - "method": "POST", - "path": "/api/approvals/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "assets.ts", - "metadata": { - "action": "artifacts:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/assets/images", - }, - { - "file": "assets.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/logo", - }, - { - "file": "assets.ts", - "metadata": { - "action": "artifacts:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "asset", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/assets/{id}/{*path}", - }, - "method": "GET", - "path": "/api/assets/11111111-1111-4111-8111-111111111111/content", - }, - { - "file": "attention.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/attention", - }, - { - "file": "auth.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/auth/{*path}", - }, - "method": "GET", - "path": "/api/auth/get-session", - }, - { - "file": "auth.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/auth/{*path}", - }, - "method": "GET", - "path": "/api/auth/profile", - }, - { - "file": "auth.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/auth/{*path}", - }, - "method": "PATCH", - "path": "/api/auth/profile", - }, - { - "file": "board-chat.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/board/{*path}", - }, - "method": "POST", - "path": "/api/board/chat/stream", - }, - { - "file": "built-in-agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/built-in-agents", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/built-in-agents", - }, - { - "file": "built-in-agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/built-in-agents/11111111-1111-4111-8111-111111111111/status", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/built-in-agents/11111111-1111-4111-8111-111111111111/status", - }, - { - "file": "built-in-agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/built-in-agents/11111111-1111-4111-8111-111111111111/reconcile", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/built-in-agents/11111111-1111-4111-8111-111111111111/reconcile", - }, - { - "file": "built-in-agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/built-in-agents/11111111-1111-4111-8111-111111111111/provision", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/built-in-agents/11111111-1111-4111-8111-111111111111/provision", - }, - { - "file": "built-in-agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/built-in-agents/11111111-1111-4111-8111-111111111111/reset", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/built-in-agents/11111111-1111-4111-8111-111111111111/reset", - }, - { - "file": "built-in-agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/built-in-agents/11111111-1111-4111-8111-111111111111/routines/11111111-1111-4111-8111-111111111111/enable", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/built-in-agents/11111111-1111-4111-8111-111111111111/routines/11111111-1111-4111-8111-111111111111/enable", - }, - { - "file": "built-in-agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/built-in-agents/11111111-1111-4111-8111-111111111111/routines/11111111-1111-4111-8111-111111111111/disable", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/built-in-agents/11111111-1111-4111-8111-111111111111/routines/11111111-1111-4111-8111-111111111111/disable", - }, - { - "file": "built-in-agents.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/built-in-agents/11111111-1111-4111-8111-111111111111/routines/11111111-1111-4111-8111-111111111111/run", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/built-in-agents/11111111-1111-4111-8111-111111111111/routines/11111111-1111-4111-8111-111111111111/run", - }, - { - "file": "cases.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/cases", - }, - { - "file": "cases.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/cases", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations/11111111-1111-4111-8111-111111111111", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "PATCH", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations/11111111-1111-4111-8111-111111111111", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "PUT", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/lock", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/unlock", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/revisions/11111111-1111-4111-8111-111111111111/restore", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "DELETE", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/links", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/attachments", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/events", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/revisions", - }, - { - "file": "cases.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/cases", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111", - }, - { - "file": "cases.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "PATCH", - "path": "/api/cases/11111111-1111-4111-8111-111111111111", - }, - { - "file": "cloud.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cloud/{*path}", - }, - "method": "GET", - "path": "/api/cloud/stacks", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:read", - "classification": "company_collection", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies", - }, - "method": "GET", - "path": "/api/companies", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "stats", - "concealment": "forbidden", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/stats", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "issues", - "concealment": "forbidden", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/issues", - }, - { - "file": "companies.ts", - "metadata": { - "action": "artifacts:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/artifacts", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/timeline", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "forbidden", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111", - }, - { - "file": "companies.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/feedback-traces", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/feedback-traces", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:import_export", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/export", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:import_export", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/export/fidelity", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:import_export", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/import/{*path}", - }, - "method": "POST", - "path": "/api/companies/import/preview", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:import_export", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/import/{*path}", - }, - "method": "GET", - "path": "/api/companies/import/jobs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:import_export", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/exports/preview", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:import_export", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/exports", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/imports/preview", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/imports/apply", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:create", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies", - }, - "method": "POST", - "path": "/api/companies", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/branding", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/archive", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skill-policy.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/skill-policy", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skill-policy", - }, - { - "file": "company-skill-policy.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/companies/{id}/skill-policy", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skill-policy", - }, - { - "file": "company-skill-policy.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/companies/{id}/skill-policy", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skill-policy", - }, - { - "file": "company-skill-policy.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/skill-policy/evaluate", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skill-policy/evaluate", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/skills/{*path}", - }, - "method": "GET", - "path": "/api/skills/catalog", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/skills/{*path}", - }, - "method": "GET", - "path": "/api/skills/catalog/11111111-1111-4111-8111-111111111111/files", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/skills/{*path}", - }, - "method": "GET", - "path": "/api/skills/catalog/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/categories", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/fork-precheck", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/versions", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/versions/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-inputs", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-inputs", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-inputs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-inputs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/skill-test-run-templates", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skill-test-run-templates", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/skill-test-run-templates", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skill-test-run-templates", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/companies/{id}/skill-test-run-templates/11111111-1111-4111-8111-111111111111", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skill-test-run-templates/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/companies/{id}/skill-test-run-templates/11111111-1111-4111-8111-111111111111", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skill-test-run-templates/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-runs", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-runs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-runs", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-runs/11111111-1111-4111-8111-111111111111/cancel", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/test-runs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/versions", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/star", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/star", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/fork", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/rename", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/comments/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/comments/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/update-status", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/files", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/files", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/files", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/import", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/install-catalog", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/browse-project", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/scan-projects", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/audit", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/install-update", - }, - { - "file": "company-skills.ts", - "metadata": { - "action": "skills:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/skills/11111111-1111-4111-8111-111111111111/reset", - }, - { - "file": "costs.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/cost-events", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/finance-events", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/summary", - }, - { - "file": "costs.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/cost-summary", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/by-agent", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/by-agent-model", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/by-provider", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/by-biller", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/finance-summary", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/finance-by-biller", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/finance-by-kind", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/finance-events", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/window-spend", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/quota-windows", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/budgets/overview", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/budgets/policies", - }, - { - "file": "costs.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/budget-incidents/11111111-1111-4111-8111-111111111111/resolve", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/costs/by-project", - }, - { - "file": "costs.ts", - "metadata": { - "action": "costs:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/budgets", - }, - { - "file": "costs.ts", - "metadata": { - "action": "agents:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "agent", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/agents/11111111-1111-4111-8111-111111111111/budgets", - }, - { - "file": "dashboard.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/dashboard", - }, - { - "file": "dashboard.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/recovery-observability", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-queue-seed-rules", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-queues", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-queues", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-queues/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-queues/11111111-1111-4111-8111-111111111111/items", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-queues/11111111-1111-4111-8111-111111111111/items", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-queues/11111111-1111-4111-8111-111111111111/items/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-triage/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PUT", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-triage/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-retention/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-retention/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111/archive", - }, - { - "file": "decision-queues.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-retention/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111/revive", - }, - { - "file": "decision-training.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-training", - }, - { - "file": "decision-training.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-training/preview", - }, - { - "file": "decision-training.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-training", - }, - { - "file": "decision-training.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-training/export.jsonl", - }, - { - "file": "decision-training.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "decision_training", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/decision-training/{id}/{*path}", - }, - "method": "GET", - "path": "/api/decision-training/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decision-training.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "decision_training", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/decision-training/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/decision-training/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decision-training.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "decision_training", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/decision-training/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/decision-training/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-archive-proposals", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decisions", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decision-bundles", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decisions", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/decisions/stats", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "decisions:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "decision", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/decisions/{id}/{*path}", - }, - "method": "GET", - "path": "/api/decisions/11111111-1111-4111-8111-111111111111", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "decision", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/decisions/{id}/{*path}", - }, - "method": "POST", - "path": "/api/decisions/11111111-1111-4111-8111-111111111111/decide", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "decision", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/decisions/{id}/{*path}", - }, - "method": "POST", - "path": "/api/decisions/11111111-1111-4111-8111-111111111111/dismiss", - }, - { - "file": "decisions.ts", - "metadata": { - "action": "decisions:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "decision", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/decisions/{id}/{*path}", - }, - "method": "POST", - "path": "/api/decisions/11111111-1111-4111-8111-111111111111/cancel", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/environments", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "GET", - "path": "/api/environments/11111111-1111-4111-8111-111111111111/delete-blast-radius", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/environments/capabilities", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "GET", - "path": "/api/environments/11111111-1111-4111-8111-111111111111/custom-image-template", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "POST", - "path": "/api/environments/11111111-1111-4111-8111-111111111111/custom-image-setup-sessions", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environment-custom-image-setup-sessions/{id}/{*path}", - }, - "method": "GET", - "path": "/api/environment-custom-image-setup-sessions/11111111-1111-4111-8111-111111111111", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environment-custom-image-setup-sessions/{id}/{*path}", - }, - "method": "POST", - "path": "/api/environment-custom-image-setup-sessions/11111111-1111-4111-8111-111111111111/terminal-session-token", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environment-custom-image-setup-sessions/{id}/{*path}", - }, - "method": "POST", - "path": "/api/environment-custom-image-setup-sessions/11111111-1111-4111-8111-111111111111/finish", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environment-custom-image-setup-sessions/{id}/{*path}", - }, - "method": "POST", - "path": "/api/environment-custom-image-setup-sessions/11111111-1111-4111-8111-111111111111/cancel", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "POST", - "path": "/api/environments/11111111-1111-4111-8111-111111111111/custom-image-template/rollback", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/environments/11111111-1111-4111-8111-111111111111/custom-image-template", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/environments", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "GET", - "path": "/api/environments/11111111-1111-4111-8111-111111111111", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "GET", - "path": "/api/environments/11111111-1111-4111-8111-111111111111/secret-refs", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "GET", - "path": "/api/environments/11111111-1111-4111-8111-111111111111/leases", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environment-leases/{id}/{*path}", - }, - "method": "GET", - "path": "/api/environment-leases/11111111-1111-4111-8111-111111111111", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/environments/11111111-1111-4111-8111-111111111111", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/environments/11111111-1111-4111-8111-111111111111", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "downstream_company", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/environments/{id}/{*path}", - }, - "method": "POST", - "path": "/api/environments/11111111-1111-4111-8111-111111111111/probe", - }, - { - "file": "environments.ts", - "metadata": { - "action": "environments:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/environments/probe-config", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "workspaces:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/execution-workspaces", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/workspace-overview", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "workspaces:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "execution_workspace", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/execution-workspaces/{id}/{*path}", - }, - "method": "GET", - "path": "/api/execution-workspaces/11111111-1111-4111-8111-111111111111", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "workspaces:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "execution_workspace", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/execution-workspaces/{id}/{*path}", - }, - "method": "GET", - "path": "/api/execution-workspaces/11111111-1111-4111-8111-111111111111/close-readiness", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "workspaces:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "execution_workspace", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/execution-workspaces/{id}/{*path}", - }, - "method": "GET", - "path": "/api/execution-workspaces/11111111-1111-4111-8111-111111111111/workspace-operations", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "workspaces:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "execution_workspace", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/execution-workspaces/{id}/{*path}", - }, - "method": "POST", - "path": "/api/execution-workspaces/11111111-1111-4111-8111-111111111111/runtime-services/11111111-1111-4111-8111-111111111111", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "workspaces:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "execution_workspace", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/execution-workspaces/{id}/{*path}", - }, - "method": "POST", - "path": "/api/execution-workspaces/11111111-1111-4111-8111-111111111111/runtime-commands/11111111-1111-4111-8111-111111111111", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "workspaces:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "execution_workspace", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/execution-workspaces/{id}/{*path}", - }, - "method": "POST", - "path": "/api/execution-workspaces/11111111-1111-4111-8111-111111111111/reconcile-branch", - }, - { - "file": "execution-workspaces.ts", - "metadata": { - "action": "workspaces:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "execution_workspace", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/execution-workspaces/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/execution-workspaces/11111111-1111-4111-8111-111111111111", - }, - { - "file": "file-resources.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/file-resources/list", - }, - { - "file": "file-resources.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/file-resources/resolve", - }, - { - "file": "file-resources.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/file-resources/content", - }, - { - "file": "folders.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/folders", - }, - { - "file": "folders.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/folders", - }, - { - "file": "folders.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/folders/ensure-my", - }, - { - "file": "folders.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/folders/11111111-1111-4111-8111-111111111111", - }, - { - "file": "folders.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/folders/items/move", - }, - { - "file": "folders.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/folders/11111111-1111-4111-8111-111111111111/move", - }, - { - "file": "folders.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/folders/11111111-1111-4111-8111-111111111111", - }, - { - "file": "goals.ts", - "metadata": { - "action": "goals:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/goals", - }, - { - "file": "goals.ts", - "metadata": { - "action": "goals:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "goal", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/goals/{id}/{*path}", - }, - "method": "GET", - "path": "/api/goals/11111111-1111-4111-8111-111111111111", - }, - { - "file": "goals.ts", - "metadata": { - "action": "goals:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/goals", - }, - { - "file": "goals.ts", - "metadata": { - "action": "goals:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "goal", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/goals/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/goals/11111111-1111-4111-8111-111111111111", - }, - { - "file": "goals.ts", - "metadata": { - "action": "goals:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "goal", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/goals/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/goals/11111111-1111-4111-8111-111111111111", - }, - { - "file": "health.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/health/{*path}", - }, - "method": "POST", - "path": "/api/health/dev-server/restart", - }, - { - "file": "health.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/health/{*path}", - }, - "method": "GET", - "path": "/api/health", - }, - { - "file": "inbox-agent-policy.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/users/me/inbox-agent-policy", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/users/me/inbox-agent-policy", - }, - { - "file": "inbox-agent-policy.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/companies/{id}/users/me/inbox-agent-policy", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/users/me/inbox-agent-policy", - }, - { - "file": "inbox-agent-policy.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/users/11111111-1111-4111-8111-111111111111/inbox-agent-policy", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/users/11111111-1111-4111-8111-111111111111/inbox-agent-policy", - }, - { - "file": "inbox-agent-policy.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/companies/{id}/users/11111111-1111-4111-8111-111111111111/inbox-agent-policy", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/users/11111111-1111-4111-8111-111111111111/inbox-agent-policy", - }, - { - "file": "inbox-dismissals.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/inbox-dismissals", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/inbox-dismissals", - }, - { - "file": "inbox-dismissals.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/inbox-dismissals", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/inbox-dismissals", - }, - { - "file": "inbox-dismissals.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/companies/{id}/inbox-dismissals/11111111-1111-4111-8111-111111111111", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/inbox-dismissals/11111111-1111-4111-8111-111111111111", - }, - { - "file": "instance-database-backups.ts", - "metadata": { - "action": "instance:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "POST", - "path": "/api/instance/database-backups", - }, - { - "file": "instance-settings.ts", - "metadata": { - "action": "instance:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "GET", - "path": "/api/instance/settings", - }, - { - "file": "instance-settings.ts", - "metadata": { - "action": "instance:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "PATCH", - "path": "/api/instance/settings", - }, - { - "file": "instance-settings.ts", - "metadata": { - "action": "instance:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "GET", - "path": "/api/instance/settings/general", - }, - { - "file": "instance-settings.ts", - "metadata": { - "action": "instance:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "PATCH", - "path": "/api/instance/settings/general", - }, - { - "file": "instance-settings.ts", - "metadata": { - "action": "instance:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "GET", - "path": "/api/instance/settings/experimental", - }, - { - "file": "instance-settings.ts", - "metadata": { - "action": "instance:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "PATCH", - "path": "/api/instance/settings/experimental", - }, - { - "file": "instance-settings.ts", - "metadata": { - "action": "instance:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "POST", - "path": "/api/instance/settings/experimental/issue-graph-liveness-auto-recovery/preview", - }, - { - "file": "instance-settings.ts", - "metadata": { - "action": "instance:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/instance/{*path}", - }, - "method": "POST", - "path": "/api/instance/settings/experimental/issue-graph-liveness-auto-recovery/run", - }, - { - "file": "issue-tree-control.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/tree-control/preview", - }, - { - "file": "issue-tree-control.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/tree-holds", - }, - { - "file": "issue-tree-control.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/tree-control/state", - }, - { - "file": "issue-tree-control.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/tree-holds", - }, - { - "file": "issue-tree-control.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/tree-holds/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issue-tree-control.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/tree-holds/11111111-1111-4111-8111-111111111111/release", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/issues?companyId={companyId}", - }, - "method": "GET", - "path": "/api/issues", - }, - { - "file": "issues.ts", - "metadata": { - "action": "search:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/search/extract", - }, - { - "file": "issues.ts", - "metadata": { - "action": "search:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/search", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/issues", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/issues/count", - }, - { - "file": "issues.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/labels", - }, - { - "file": "issues.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/labels", - }, - { - "file": "issues.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "label", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/labels/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/labels/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/heartbeat-context", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/diagnostics/blockers", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/diagnostics/wakes", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/diagnostics/subtree", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/watchdog", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "PUT", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "PUT", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/watchdog", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/watchdog", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/recovery-actions", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/recovery-actions/resolve", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/work-products", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/external-objects", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/external-object-summary", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/issues/external-object-summaries", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/external-objects/refresh", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/annotations/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "PUT", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "PUT", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/lock", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/unlock", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/revisions", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/revisions/11111111-1111-4111-8111-111111111111/restore", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/work-products", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/low-trust/promotions", - }, - { - "file": "issues.ts", - "metadata": { - "action": "artifacts:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "work_product", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/work-products/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/work-products/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "artifacts:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "work_product", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/work-products/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/work-products/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/read", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/read", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/inbox-archive", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/inbox-archive", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/approvals", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/approvals", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/approvals/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/issues", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/children", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/accepted-plan-decompositions", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/accepted-plan-decompositions", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/monitor/check-now", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/scheduled-retry/retry-now", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/stalled-review-decision", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/issues/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/issues/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/checkout", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/release", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:control", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/admin/force-release", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/interactions", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/interactions", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/interactions/11111111-1111-4111-8111-111111111111/accept", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/interactions/11111111-1111-4111-8111-111111111111/reject", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/interactions/11111111-1111-4111-8111-111111111111/respond", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/interactions/11111111-1111-4111-8111-111111111111/verdicts", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/interactions/11111111-1111-4111-8111-111111111111/withdraw", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/interactions/11111111-1111-4111-8111-111111111111/cancel", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/comments/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/comments/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/feedback-votes", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/feedback-traces", - }, - { - "file": "issues.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/feedback-traces/{*path}", - }, - "method": "GET", - "path": "/api/feedback-traces/11111111-1111-4111-8111-111111111111", - }, - { - "file": "issues.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/feedback-traces/{*path}", - }, - "method": "GET", - "path": "/api/feedback-traces/11111111-1111-4111-8111-111111111111/bundle", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "POST", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/feedback-votes", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "issue", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/issues/{id}/{*path}", - }, - "method": "GET", - "path": "/api/issues/11111111-1111-4111-8111-111111111111/attachments", - }, - { - "file": "issues.ts", - "metadata": { - "action": "issues:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/issues/11111111-1111-4111-8111-111111111111/attachments", - }, - { - "file": "issues.ts", - "metadata": { - "action": "artifacts:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "attachment", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/attachments/{id}/{*path}", - }, - "method": "GET", - "path": "/api/attachments/11111111-1111-4111-8111-111111111111/content", - }, - { - "file": "issues.ts", - "metadata": { - "action": "artifacts:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "attachment", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/attachments/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/attachments/11111111-1111-4111-8111-111111111111", - }, - { - "file": "llms.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/llms/{*path}", - }, - "method": "GET", - "path": "/api/llms/agent-configuration.txt", - }, - { - "file": "llms.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/llms/{*path}", - }, - "method": "GET", - "path": "/api/llms/agent-icons.txt", - }, - { - "file": "llms.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/llms/{*path}", - }, - "method": "GET", - "path": "/api/llms/agent-configuration/11111111-1111-4111-8111-111111111111.txt", - }, - { - "file": "openapi.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/openapi.json/{*path}", - }, - "method": "GET", - "path": "/api/openapi.json", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/pipelines", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/pipelines-attention", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/case-events", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/pipelines", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/review-cases", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/review-cases/bulk", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "GET", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "GET", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/health", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "GET", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/intake-form", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "PATCH", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "POST", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/stages", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "PATCH", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/stages/11111111-1111-4111-8111-111111111111", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "PATCH", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/stages/11111111-1111-4111-8111-111111111111/automation-env", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "DELETE", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/stages/11111111-1111-4111-8111-111111111111", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "PUT", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/transitions", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "GET", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "PUT", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "GET", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/revisions", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "POST", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/documents/11111111-1111-4111-8111-111111111111/revisions/11111111-1111-4111-8111-111111111111/restore", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "POST", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/cases", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "POST", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/cases/batch", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/breakdown", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/pipelines/{*path}", - }, - "method": "GET", - "path": "/api/pipelines/11111111-1111-4111-8111-111111111111/cases", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/children", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/claim", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/release", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/transition", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/suggest-transition", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/resolve-suggestion", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/acknowledge-drift", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/review", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "PUT", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/blockers", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/open-conversation", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/issue-links", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/outputs", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/issue-links", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "DELETE", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/issue-links/11111111-1111-4111-8111-111111111111", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/children/tree", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/rollup", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/context-pack", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "GET", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/automation/retry-plan", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/automation/retry", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/automations/11111111-1111-4111-8111-111111111111/retry", - }, - { - "file": "pipelines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/cases/{*path}", - }, - "method": "POST", - "path": "/api/cases/11111111-1111-4111-8111-111111111111/automation/current-stage/rerun", - }, - { - "file": "plugin-ui-static.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/_plugins/{*path}", - }, - "method": "GET", - "path": "/api/_plugins/11111111-1111-4111-8111-111111111111/ui/*filePath", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "examples", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/examples", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "ui-contributions", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/ui-contributions", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "tools", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/tools", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "POST", - "path": "/api/plugins/tools/execute", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "install", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "POST", - "path": "/api/plugins/install", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/bridge/data", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/bridge/action", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/data/11111111-1111-4111-8111-111111111111", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/actions/11111111-1111-4111-8111-111111111111", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/bridge/stream/11111111-1111-4111-8111-111111111111", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/enable", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/disable", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/health", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/logs", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/upgrade", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/config", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/config", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/config/test", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/jobs", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/jobs/11111111-1111-4111-8111-111111111111/runs", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:manage", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/jobs/11111111-1111-4111-8111-111111111111/trigger", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/webhooks/11111111-1111-4111-8111-111111111111", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/companies/11111111-1111-4111-8111-111111111111/local-folders", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/companies/11111111-1111-4111-8111-111111111111/local-folders/11111111-1111-4111-8111-111111111111/status", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "POST", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/companies/11111111-1111-4111-8111-111111111111/local-folders/11111111-1111-4111-8111-111111111111/validate", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/plugins/{*path}", - }, - "method": "PUT", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/companies/11111111-1111-4111-8111-111111111111/local-folders/11111111-1111-4111-8111-111111111111", - }, - { - "file": "plugins.ts", - "metadata": { - "action": "plugins:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/plugins/{id}/{*path}", - }, - "method": "GET", - "path": "/api/plugins/11111111-1111-4111-8111-111111111111/dashboard", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/projects", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "GET", - "path": "/api/projects/11111111-1111-4111-8111-111111111111", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "GET", - "path": "/api/projects/11111111-1111-4111-8111-111111111111/external-object-summary", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/projects", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/projects/11111111-1111-4111-8111-111111111111", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "GET", - "path": "/api/projects/11111111-1111-4111-8111-111111111111/workspaces", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "POST", - "path": "/api/projects/11111111-1111-4111-8111-111111111111/workspaces", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/projects/11111111-1111-4111-8111-111111111111/workspaces/11111111-1111-4111-8111-111111111111", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "POST", - "path": "/api/projects/11111111-1111-4111-8111-111111111111/workspaces/11111111-1111-4111-8111-111111111111/runtime-services/11111111-1111-4111-8111-111111111111", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "POST", - "path": "/api/projects/11111111-1111-4111-8111-111111111111/workspaces/11111111-1111-4111-8111-111111111111/runtime-commands/11111111-1111-4111-8111-111111111111", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/projects/11111111-1111-4111-8111-111111111111/workspaces/11111111-1111-4111-8111-111111111111", - }, - { - "file": "projects.ts", - "metadata": { - "action": "projects:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "project", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/projects/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/projects/11111111-1111-4111-8111-111111111111", - }, - { - "file": "resource-memberships.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/resource-memberships/me", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/resource-memberships/me", - }, - { - "file": "resource-memberships.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/companies/{id}/resource-memberships/me/projects/11111111-1111-4111-8111-111111111111", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/resource-memberships/me/projects/11111111-1111-4111-8111-111111111111", - }, - { - "file": "resource-memberships.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/companies/{id}/resource-memberships/me/agents/11111111-1111-4111-8111-111111111111", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/resource-memberships/me/agents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "resource-memberships.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/companies/{id}/resource-memberships/me/documents/11111111-1111-4111-8111-111111111111", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/resource-memberships/me/documents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/routines", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/routines", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "GET", - "path": "/api/routines/11111111-1111-4111-8111-111111111111", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "GET", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/revisions", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "GET", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/description/annotations", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "GET", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/description/annotations/11111111-1111-4111-8111-111111111111", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "POST", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/description/annotations", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "POST", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/description/annotations/11111111-1111-4111-8111-111111111111/comments", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/description/annotations/11111111-1111-4111-8111-111111111111", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/routines/11111111-1111-4111-8111-111111111111", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "POST", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/revisions/11111111-1111-4111-8111-111111111111/restore", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "GET", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/runs", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "POST", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/triggers", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "routine_trigger", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routine-triggers/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/routine-triggers/11111111-1111-4111-8111-111111111111", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "routine_trigger", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routine-triggers/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/routine-triggers/11111111-1111-4111-8111-111111111111", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "routine_trigger", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routine-triggers/{id}/{*path}", - }, - "method": "POST", - "path": "/api/routine-triggers/11111111-1111-4111-8111-111111111111/rotate-secret", - }, - { - "file": "routines.ts", - "metadata": { - "action": "routines:run", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "routine", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/routines/{id}/{*path}", - }, - "method": "POST", - "path": "/api/routines/11111111-1111-4111-8111-111111111111/run", - }, - { - "file": "routines.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/routine-triggers/public/{id}/fire", - }, - "method": "POST", - "path": "/api/routine-triggers/public/11111111-1111-4111-8111-111111111111/fire", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/me/secret-proposals", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/me/secret-proposals", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/agents/me/secret-proposals/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secret-proposals", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secret-proposals/11111111-1111-4111-8111-111111111111/approve", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secret-proposals/11111111-1111-4111-8111-111111111111/reject", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "GET", - "path": "/api/agents/me/secrets", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/me/secrets/11111111-1111-4111-8111-111111111111/value", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secret-providers", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secret-providers/health", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:read_metadata", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secret-provider-configs", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secret-provider-configs/discovery/preview", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secret-provider-configs", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:read_metadata", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "secret_provider", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secret-provider-configs/{id}/{*path}", - }, - "method": "GET", - "path": "/api/secret-provider-configs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "secret_provider", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secret-provider-configs/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/secret-provider-configs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "secret_provider", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secret-provider-configs/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/secret-provider-configs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "secret_provider", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secret-provider-configs/{id}/{*path}", - }, - "method": "POST", - "path": "/api/secret-provider-configs/11111111-1111-4111-8111-111111111111/default", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "secret_provider", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secret-provider-configs/{id}/{*path}", - }, - "method": "POST", - "path": "/api/secret-provider-configs/11111111-1111-4111-8111-111111111111/health", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:read_metadata", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secrets", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/user-secret-definitions", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/user-secret-definitions", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/user-secret-definitions/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/user-secret-definitions/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/user-secret-definitions/11111111-1111-4111-8111-111111111111/coverage", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/me/user-secrets", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/me/user-secrets", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/me/user-secrets", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/me/user-secrets", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PATCH", - "resolver": "none", - "routePattern": "/api/companies/{id}/me/user-secrets/11111111-1111-4111-8111-111111111111", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/me/user-secrets/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/me/user-secrets/11111111-1111-4111-8111-111111111111/rotate", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/me/user-secrets/11111111-1111-4111-8111-111111111111/rotate", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "DELETE", - "resolver": "none", - "routePattern": "/api/companies/{id}/me/user-secrets/11111111-1111-4111-8111-111111111111", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/me/user-secrets/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secrets", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secrets/remote-import/preview", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/secrets/remote-import", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "secret", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secrets/{id}/{*path}", - }, - "method": "POST", - "path": "/api/secrets/11111111-1111-4111-8111-111111111111/rotate", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "secret", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secrets/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/secrets/11111111-1111-4111-8111-111111111111", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:read_metadata", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "secret", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secrets/{id}/{*path}", - }, - "method": "GET", - "path": "/api/secrets/11111111-1111-4111-8111-111111111111/usage", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:read_metadata", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "secret", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secrets/{id}/{*path}", - }, - "method": "GET", - "path": "/api/secrets/11111111-1111-4111-8111-111111111111/access-events", - }, - { - "file": "secrets.ts", - "metadata": { - "action": "secrets:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "secret", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/secrets/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/secrets/11111111-1111-4111-8111-111111111111", - }, - { - "file": "sidebar-badges.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/sidebar-badges", - }, - { - "file": "sidebar-preferences.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/sidebar-preferences/{*path}", - }, - "method": "GET", - "path": "/api/sidebar-preferences/me", - }, - { - "file": "sidebar-preferences.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/sidebar-preferences/{*path}", - }, - "method": "PUT", - "path": "/api/sidebar-preferences/me", - }, - { - "file": "sidebar-preferences.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/sidebar-preferences/me", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/sidebar-preferences/me", - }, - { - "file": "sidebar-preferences.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "PUT", - "resolver": "none", - "routePattern": "/api/companies/{id}/sidebar-preferences/me", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/sidebar-preferences/me", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/oauth/authorize", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/oauth/authorize", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/oauth/token", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/oauth/userinfo", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/oauth/revoke", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/services", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/services/start", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/services/stop", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/install-fixtures", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/runs", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/runs", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/runs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/runs/11111111-1111-4111-8111-111111111111", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/runs/11111111-1111-4111-8111-111111111111/steps", - }, - { - "file": "smoke-lab.ts", - "metadata": { - "action": "companies:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/smoke-lab/reset", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/status-cards", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/status-cards", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "GET", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "GET", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111/updates", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "GET", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111/summary-revisions", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "POST", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111/recompile", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "POST", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111/refresh", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "GET", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111/dry-run", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "concealment": "not_found", - "method": "PUT", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "PUT", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111/query", - }, - { - "file": "status-cards.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "concealment": "not_found", - "method": "PUT", - "resolver": "status_card", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/status-cards/{id}/{*path}", - }, - "method": "PUT", - "path": "/api/status-cards/11111111-1111-4111-8111-111111111111/summary", - }, - { - "file": "summary-slots.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/summary-slots/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111", - }, - { - "file": "summary-slots.ts", - "metadata": { - "action": "settings:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/summary-slots/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111/revisions", - }, - { - "file": "summary-slots.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/summary-slots/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111/generate", - }, - { - "file": "summary-slots.ts", - "metadata": { - "action": "settings:write", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PUT", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PUT", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/summary-slots/11111111-1111-4111-8111-111111111111/11111111-1111-4111-8111-111111111111", - }, - { - "file": "teams-catalog.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/teams/{*path}", - }, - "method": "GET", - "path": "/api/teams/catalog", - }, - { - "file": "teams-catalog.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/teams/{*path}", - }, - "method": "GET", - "path": "/api/teams/catalog/11111111-1111-4111-8111-111111111111/files", - }, - { - "file": "teams-catalog.ts", - "metadata": { - "action": "catalogs:read", - "classification": "instance_global", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/teams/{*path}", - }, - "method": "GET", - "path": "/api/teams/catalog/11111111-1111-4111-8111-111111111111", - }, - { - "file": "teams-catalog.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/teams/catalog/installed", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/teams/catalog/installed", - }, - { - "file": "teams-catalog.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/teams/catalog/11111111-1111-4111-8111-111111111111/preview", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/teams/catalog/11111111-1111-4111-8111-111111111111/preview", - }, - { - "file": "teams-catalog.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/{id}/teams/catalog/11111111-1111-4111-8111-111111111111/install", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/teams/catalog/11111111-1111-4111-8111-111111111111/install", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/me/connections/11111111-1111-4111-8111-111111111111/start-authorization", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/agents/{id}/{*path}", - }, - "method": "POST", - "path": "/api/agents/me/connections/11111111-1111-4111-8111-111111111111/token", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/gallery", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/apps/connect", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/connections/11111111-1111-4111-8111-111111111111/start-authorization", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/tools/oauth/{*path}", - }, - "method": "POST", - "path": "/api/tools/oauth/11111111-1111-4111-8111-111111111111/start", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/tools/oauth/{*path}", - }, - "method": "GET", - "path": "/api/tools/oauth/callback", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/apps/11111111-1111-4111-8111-111111111111/finish", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/examples", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/apps/attention", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/action-requests", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/examples/11111111-1111-4111-8111-111111111111/install", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/examples/11111111-1111-4111-8111-111111111111/smoke", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/applications", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/applications", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "tool_application", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-applications/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/tool-applications/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "tool_application", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-applications/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/tool-applications/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/connections", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/connections", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/grants", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "POST", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/grants/installations", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/grants/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/usage", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/installs", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "PUT", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "PUT", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/installs", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/test-agents", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "POST", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/test-calls", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/test-calls/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "POST", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/health-check", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "POST", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/reconnect", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "POST", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/catalog/refresh", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/catalog", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_connection", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-connections/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-connections/11111111-1111-4111-8111-111111111111/activity", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/profiles", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_profile", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-profiles/{id}/{*path}", - }, - "method": "GET", - "path": "/api/tool-profiles/11111111-1111-4111-8111-111111111111/new-tools", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/profiles", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/profiles/effective/agents/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "tool_profile", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-profiles/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/tool-profiles/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_profile", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-profiles/{id}/{*path}", - }, - "method": "POST", - "path": "/api/tool-profiles/11111111-1111-4111-8111-111111111111/duplicate", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "tool_profile", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-profiles/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/tool-profiles/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_profile", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-profiles/{id}/{*path}", - }, - "method": "POST", - "path": "/api/tool-profiles/11111111-1111-4111-8111-111111111111/new-tools/review", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_profile", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-profiles/{id}/{*path}", - }, - "method": "POST", - "path": "/api/tool-profiles/11111111-1111-4111-8111-111111111111/entries", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "tool_profile_entry", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-profile-entries/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/tool-profile-entries/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "DELETE", - "resolver": "tool_profile_entry", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-profile-entries/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/tool-profile-entries/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/profiles/11111111-1111-4111-8111-111111111111/bind", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/profiles/11111111-1111-4111-8111-111111111111/unbind", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/runtime-slots", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/runtime-slots/11111111-1111-4111-8111-111111111111/stop", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/runtime-slots/11111111-1111-4111-8111-111111111111/restart", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/runtime-health", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/runs/11111111-1111-4111-8111-111111111111/decisions", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/trust-rules", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/policies", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/policies/reorder", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/policies", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/policies/11111111-1111-4111-8111-111111111111/duplicate", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "PATCH", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "PATCH", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/policies/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "DELETE", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "DELETE", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/policies/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/action-requests/11111111-1111-4111-8111-111111111111/trust-rule", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/trust-rules/11111111-1111-4111-8111-111111111111/revoke", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/stdio-templates", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/stdio-templates", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/stdio-templates/11111111-1111-4111-8111-111111111111/disable", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/mcp/import-json", - }, - { - "file": "tool-access.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/policy/test", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/mcp/{*path}", - }, - "method": "GET", - "path": "/mcp/gateways/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/mcp/{*path}", - }, - "method": "POST", - "path": "/mcp/gateways/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "GET", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/gateways", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "companyId": "11111111-1111-4111-8111-111111111111", - "concealment": "not_found", - "method": "POST", - "resolver": "company", - "routePattern": "/api/companies/{id}/{*path}", - }, - "method": "POST", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/tools/gateways", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "PATCH", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "PATCH", - "path": "/api/tool-gateway/gateways/11111111-1111-4111-8111-111111111111", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/gateways/11111111-1111-4111-8111-111111111111/tokens", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/gateway-tokens/11111111-1111-4111-8111-111111111111/revoke", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "GET", - "path": "/api/tool-gateway/gateways/11111111-1111-4111-8111-111111111111/mcp", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/gateways/11111111-1111-4111-8111-111111111111/mcp", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/sessions", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/sessions/11111111-1111-4111-8111-111111111111/revoke", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "GET", - "path": "/api/tool-gateway/tools", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/tools/call", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/action-requests/11111111-1111-4111-8111-111111111111/approve", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/action-requests/11111111-1111-4111-8111-111111111111/decline", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_gateway", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "GET", - "path": "/api/tool-gateway/runtime-slots", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/runtime-slots/11111111-1111-4111-8111-111111111111/stop", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:manage", - "classification": "company", - "concealment": "not_found", - "method": "POST", - "resolver": "tool_gateway", - "resourceId": "11111111-1111-4111-8111-111111111111", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "POST", - "path": "/api/tool-gateway/runtime-slots/11111111-1111-4111-8111-111111111111/restart", - }, - { - "file": "tool-gateway.ts", - "metadata": { - "action": "tools:read", - "classification": "company", - "concealment": "not_found", - "method": "GET", - "resolver": "tool_gateway", - "routePattern": "/api/tool-gateway/{*path}", - }, - "method": "GET", - "path": "/api/tool-gateway/audit", - }, - { - "file": "user-profiles.ts", - "metadata": { - "action": "deny", - "classification": "board_key_denied", - "concealment": "forbidden", - "method": "GET", - "resolver": "none", - "routePattern": "/api/companies/{id}/users/11111111-1111-4111-8111-111111111111/profile", - }, - "method": "GET", - "path": "/api/companies/11111111-1111-4111-8111-111111111111/users/11111111-1111-4111-8111-111111111111/profile", - }, - { - "file": "companies.ts", - "metadata": { - "action": "companies:import_export", - "classification": "instance_global", - "concealment": "forbidden", - "method": "POST", - "resolver": "none", - "routePattern": "/api/companies/import/{*path}", - }, - "method": "POST", - "path": "/api/companies/import", - }, -] -`; diff --git a/server/src/security/board-key-route-inventory.ts b/server/src/security/board-key-route-inventory.ts new file mode 100644 index 0000000000..43abfbe075 --- /dev/null +++ b/server/src/security/board-key-route-inventory.ts @@ -0,0 +1,363 @@ +import { createRequire } from "node:module"; +import type { Express } from "express"; +import { lookupBoardKeyRoute, type BoardKeyRouteMetadata } from "./board-key-route-registry.js"; + +/** + * Runtime board-key route inventory. + * + * The board-key gate ({@link lookupBoardKeyRoute}) must have an explicit policy + * for every route that is actually reachable. Earlier this was checked by + * regex-scraping `server/src/routes/*.ts` and guessing mount prefixes, which + * could not see nested routers, app-level mounts, or dynamic surfaces, so a + * reachable route without metadata could ship undetected. + * + * Instead we enumerate the *real* Express router that `createApp` mounts. The + * `router` package that Express 5 delegates to does not retain the string mount + * path on a mounted layer (only opaque matcher closures), so {@link + * installRouteInventoryProbe} records the raw mount path as each router is + * mounted. {@link collectMountedRoutes} then walks the built app's layer stack + * and reconstructs every final normalized path, including nested routers. + * + * Truly runtime-generated surfaces (plugin sub-apps, handlers injected through + * `createApp` options) are not present in the statically built stack. They are + * declared through the {@link BOARD_KEY_RUNTIME_ROUTE_SURFACES} registration + * hook. Anything mounted at runtime that is *not* registered there resolves to + * an `undeclared` classification and is denied by the gate — it stays denied + * until it is registered. + * + * The route-inventory test compares the runtime set against + * {@link BOARD_KEY_ROUTE_INVENTORY} bidirectionally, so a new reachable route + * without metadata (missing) and a declared row with no live route (stale) both + * fail CI. + */ + +const require = createRequire(import.meta.url); + +/** Stashes the raw mount path recorded by the inventory probe on a layer. */ +const MOUNT_PATH = Symbol.for("paperclip.boardKey.inventoryMountPath"); + +/** Sample id substituted for every `:param` so a route can be classified. */ +export const INVENTORY_SAMPLE_UUID = "11111111-1111-4111-8111-111111111111"; + +/** All concrete methods an `all(...)` registration is reachable through. */ +const ALL_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"] as const; + +export interface RuntimeRoute { + methods: string[]; + path: string; +} + +export interface InventoryTuple { + tuple: string; + metadata: BoardKeyRouteMetadata; +} + +/** + * Rewrite an Express route pattern into a concrete path the registry can + * classify: every `:param` becomes a sample id and every splat becomes a fixed + * tail segment. A trailing literal such as `.txt` on a `:param` is preserved. + */ +export function normalizeInventoryPath(routePath: string): string { + return routePath + .replace(/:[A-Za-z][A-Za-z0-9_]*/g, INVENTORY_SAMPLE_UUID) + .replace(/\*[A-Za-z][A-Za-z0-9_]*/g, "inventory-tail") + .replace(/\{\*[^}]+\}/g, "inventory-tail"); +} + +/** + * Patch the shared `router` prototype so every mounted sub-router records the + * raw mount path it was mounted at. Must be installed *before* `createApp` + * imports and builds its routers. Returns an idempotent restore function. + */ +export function installRouteInventoryProbe(): () => void { + const RouterCtor = require("router") as { prototype: RouterProto }; + const proto = RouterCtor.prototype; + const originalUse = proto.use; + proto.use = function inventoryUse(this: RouterProto, ...args: unknown[]) { + const before = this.stack.length; + const result = originalUse.apply(this, args as never[]); + const first = args[0]; + const mountPath = + typeof first === "string" || (Array.isArray(first) && first.every((p) => typeof p === "string")) + ? first + : "/"; + for (let i = before; i < this.stack.length; i++) { + const layer = this.stack[i]!; + if (!layer.route) layer[MOUNT_PATH] = mountPath; + } + return result; + }; + let restored = false; + return () => { + if (restored) return; + restored = true; + proto.use = originalUse; + }; +} + +interface RouterLayer { + route?: { path: string; methods: Record }; + handle?: { stack?: RouterLayer[] }; + [MOUNT_PATH]?: string | string[]; +} + +interface RouterProto { + stack: RouterLayer[]; + use: (...args: never[]) => unknown; +} + +function joinMount(prefix: string, mount: string): string { + const clean = mount === "/" ? "" : mount; + return `${prefix}${clean}`; +} + +function joinRoute(prefix: string, routePath: string): string { + if (routePath === "/") return prefix || "/"; + return `${prefix}${routePath}`; +} + +function routeMethods(methods: Record): string[] { + const explicit = Object.keys(methods) + .filter((method) => method !== "_all") + .map((method) => method.toUpperCase()); + const set = new Set(methods._all ? [...explicit, ...ALL_METHODS] : explicit); + return set.size > 0 ? [...set] : ["GET"]; +} + +/** + * Walk the built Express app's layer stack and return every mounted route with + * its fully-resolved path. Nested routers are followed through the mount paths + * recorded by {@link installRouteInventoryProbe}. + */ +export function collectMountedRoutes(app: Express): RuntimeRoute[] { + const root = ((app as unknown as { router?: RouterProto; _router?: RouterProto }).router + ?? (app as unknown as { _router?: RouterProto })._router); + if (!root) throw new Error("Express app has no router stack to inventory"); + const routes: RuntimeRoute[] = []; + const walk = (stack: RouterLayer[], prefix: string) => { + for (const layer of stack) { + if (layer.route) { + routes.push({ methods: routeMethods(layer.route.methods), path: joinRoute(prefix, layer.route.path) }); + } else if (layer.handle?.stack) { + const recorded = layer[MOUNT_PATH]; + const mounts = Array.isArray(recorded) ? recorded : [recorded ?? "/"]; + for (const mount of mounts) { + walk(layer.handle.stack, joinMount(prefix, typeof mount === "string" ? mount : "/")); + } + } + } + }; + walk(root.stack, ""); + return routes; +} + +/** `classification | action | routePattern`, with sample ids canonicalized. */ +export function inventoryTuple(method: string, rawPath: string): InventoryTuple { + const metadata = lookupBoardKeyRoute(method, normalizeInventoryPath(rawPath)); + const canonicalPattern = metadata.routePattern.split(INVENTORY_SAMPLE_UUID).join("{id}"); + return { tuple: `${metadata.classification} | ${metadata.action} | ${canonicalPattern}`, metadata }; +} + +/** + * Expand runtime routes into per-method inventory tuples. Feeds every method of + * every route (statically mounted plus registered runtime surfaces) through the + * registry. + */ +export function inventoryTuples(routes: readonly RuntimeRoute[]): InventoryTuple[] { + const entries: InventoryTuple[] = []; + for (const route of routes) { + for (const method of route.methods) { + entries.push(inventoryTuple(method, route.path)); + } + } + return entries; +} + +/** + * Explicit runtime-registration hook. Surfaces that are only mounted at + * runtime — not present in the statically built `createApp` stack — are + * declared here so the inventory reflects them. Any runtime surface that is not + * registered here (and not a generic parameterized route already in the stack) + * classifies as `undeclared` and is denied by the gate until it is registered. + * + * - `/api/auth/{*authPath}`: the Better Auth request handler is injected through + * `createApp({ betterAuthHandler })` with `app.all(...)`, so it is absent when + * the app is built without that option. Board keys never reach auth routes; + * its policy coincides with the statically mounted `authRoutes` denial. + */ +export const BOARD_KEY_RUNTIME_ROUTE_SURFACES: readonly RuntimeRoute[] = [ + { methods: [...ALL_METHODS], path: "/api/auth/{*authPath}" }, +]; + +/** + * The explicit board-key route registry: every `classification | action | + * routePattern` the gate is expected to produce for a reachable route. The + * route-inventory test asserts the runtime set equals this set exactly, so both + * a reachable route with no metadata and a declared row with no live route fail + * CI. Regenerate with the route-inventory test's diff output when routes change. + */ +export const BOARD_KEY_ROUTE_INVENTORY: readonly string[] = [ + "board_key_denied | deny | /_plugins/{*path}", + "board_key_denied | deny | /api/agents/{id}/{*path}", + "board_key_denied | deny | /api/auth/{*path}", + "board_key_denied | deny | /api/board-api-keys", + "board_key_denied | deny | /api/board-claim/{*path}", + "board_key_denied | deny | /api/board/{*path}", + "board_key_denied | deny | /api/bootstrap/{*path}", + "board_key_denied | deny | /api/cases/{*path}", + "board_key_denied | deny | /api/cli-auth/{*path}", + "board_key_denied | deny | /api/cloud/{*path}", + "board_key_denied | deny | /api/companies/{id}/adapters/{id}/detect-model", + "board_key_denied | deny | /api/companies/{id}/adapters/{id}/model-profiles", + "board_key_denied | deny | /api/companies/{id}/adapters/{id}/models", + "board_key_denied | deny | /api/companies/{id}/adapters/{id}/test-environment", + "board_key_denied | deny | /api/companies/{id}/agent-configurations", + "board_key_denied | deny | /api/companies/{id}/agent-hires", + "board_key_denied | deny | /api/companies/{id}/built-in-agents", + "board_key_denied | deny | /api/companies/{id}/built-in-agents/{id}/provision", + "board_key_denied | deny | /api/companies/{id}/built-in-agents/{id}/reconcile", + "board_key_denied | deny | /api/companies/{id}/built-in-agents/{id}/reset", + "board_key_denied | deny | /api/companies/{id}/built-in-agents/{id}/routines/{id}/disable", + "board_key_denied | deny | /api/companies/{id}/built-in-agents/{id}/routines/{id}/enable", + "board_key_denied | deny | /api/companies/{id}/built-in-agents/{id}/routines/{id}/run", + "board_key_denied | deny | /api/companies/{id}/built-in-agents/{id}/status", + "board_key_denied | deny | /api/companies/{id}/feedback-traces", + "board_key_denied | deny | /api/companies/{id}/inbox-dismissals", + "board_key_denied | deny | /api/companies/{id}/inbox-dismissals/{id}", + "board_key_denied | deny | /api/companies/{id}/me/user-secrets", + "board_key_denied | deny | /api/companies/{id}/me/user-secrets/{id}", + "board_key_denied | deny | /api/companies/{id}/me/user-secrets/{id}/rotate", + "board_key_denied | deny | /api/companies/{id}/openclaw/invite-prompt", + "board_key_denied | deny | /api/companies/{id}/resource-memberships/me", + "board_key_denied | deny | /api/companies/{id}/resource-memberships/me/agents/{id}", + "board_key_denied | deny | /api/companies/{id}/resource-memberships/me/documents/{id}", + "board_key_denied | deny | /api/companies/{id}/resource-memberships/me/projects/{id}", + "board_key_denied | deny | /api/companies/{id}/sidebar-preferences/me", + "board_key_denied | deny | /api/companies/{id}/skill-policy", + "board_key_denied | deny | /api/companies/{id}/skill-policy/evaluate", + "board_key_denied | deny | /api/companies/{id}/skill-test-run-templates", + "board_key_denied | deny | /api/companies/{id}/skill-test-run-templates/{id}", + "board_key_denied | deny | /api/companies/{id}/teams/catalog/installed", + "board_key_denied | deny | /api/companies/{id}/teams/catalog/{id}/install", + "board_key_denied | deny | /api/companies/{id}/teams/catalog/{id}/preview", + "board_key_denied | deny | /api/companies/{id}/users/me/inbox-agent-policy", + "board_key_denied | deny | /api/companies/{id}/users/{id}/inbox-agent-policy", + "board_key_denied | deny | /api/companies/{id}/users/{id}/profile", + "board_key_denied | deny | /api/feedback-traces/{*path}", + "board_key_denied | deny | /api/health/{*path}", + "board_key_denied | deny | /api/invites/{*path}", + "board_key_denied | deny | /api/join-requests/{*path}", + "board_key_denied | deny | /api/llms/{*path}", + "board_key_denied | deny | /api/openapi.json/{*path}", + "board_key_denied | deny | /api/pipelines/{*path}", + "board_key_denied | deny | /api/plugins/{*path}", + "board_key_denied | deny | /api/routine-triggers/public/{id}/fire", + "board_key_denied | deny | /api/sidebar-preferences/{*path}", + "board_key_denied | deny | /api/tool-gateway/{*path}", + "board_key_denied | deny | /api/tools/oauth/{*path}", + "board_key_denied | deny | /llms/{*path}", + "board_key_denied | deny | /mcp/{*path}", + "company | activity:read | /api/companies/{id}/{*path}", + "company | agents:operate | /api/agents/{id}/{*path}", + "company | agents:read | /api/agents/{id}/{*path}", + "company | agents:read | /api/companies/{id}/{*path}", + "company | agents:write | /api/agents/{id}/{*path}", + "company | agents:write | /api/companies/{id}/{*path}", + "company | approvals:decide | /api/approvals/{id}/{*path}", + "company | approvals:read | /api/approvals/{id}/{*path}", + "company | approvals:read | /api/companies/{id}/{*path}", + "company | approvals:write | /api/approvals/{id}/{*path}", + "company | approvals:write | /api/companies/{id}/{*path}", + "company | artifacts:read | /api/assets/{id}/{*path}", + "company | artifacts:read | /api/attachments/{id}/{*path}", + "company | artifacts:read | /api/companies/{id}/{*path}", + "company | artifacts:write | /api/attachments/{id}/{*path}", + "company | artifacts:write | /api/companies/{id}/{*path}", + "company | artifacts:write | /api/work-products/{id}/{*path}", + "company | audit:read | /api/companies/{id}/{*path}", + "company | companies:import_export | /api/companies/{id}/{*path}", + "company | companies:read | /api/companies/{id}/{*path}", + "company | companies:write | /api/companies/{id}/{*path}", + "company | costs:read | /api/companies/{id}/{*path}", + "company | costs:write | /api/companies/{id}/{*path}", + "company | decisions:read | /api/companies/{id}/{*path}", + "company | decisions:read | /api/decision-training/{id}/{*path}", + "company | decisions:read | /api/decisions/{id}/{*path}", + "company | decisions:write | /api/companies/{id}/{*path}", + "company | decisions:write | /api/decision-training/{id}/{*path}", + "company | decisions:write | /api/decisions/{id}/{*path}", + "company | environments:manage | /api/companies/{id}/{*path}", + "company | environments:manage | /api/environment-custom-image-setup-sessions/{id}/{*path}", + "company | environments:manage | /api/environments/{id}/{*path}", + "company | environments:read | /api/companies/{id}/{*path}", + "company | environments:read | /api/environment-custom-image-setup-sessions/{id}/{*path}", + "company | environments:read | /api/environment-leases/{id}/{*path}", + "company | environments:read | /api/environments/{id}/{*path}", + "company | goals:read | /api/companies/{id}/{*path}", + "company | goals:read | /api/goals/{id}/{*path}", + "company | goals:write | /api/companies/{id}/{*path}", + "company | goals:write | /api/goals/{id}/{*path}", + "company | issues:control | /api/issues/{id}/{*path}", + "company | issues:read | /api/companies/{id}/{*path}", + "company | issues:read | /api/issues/{id}/{*path}", + "company | issues:read | /api/issues?companyId={companyId}", + "company | issues:write | /api/companies/{id}/{*path}", + "company | issues:write | /api/issues/{id}/{*path}", + "company | members:manage | /api/companies/{id}/{*path}", + "company | members:read | /api/companies/{id}/{*path}", + "company | projects:read | /api/companies/{id}/{*path}", + "company | projects:read | /api/projects/{id}/{*path}", + "company | projects:write | /api/companies/{id}/{*path}", + "company | projects:write | /api/projects/{id}/{*path}", + "company | routines:read | /api/companies/{id}/{*path}", + "company | routines:read | /api/routines/{id}/{*path}", + "company | routines:run | /api/routines/{id}/{*path}", + "company | routines:write | /api/companies/{id}/{*path}", + "company | routines:write | /api/routine-triggers/{id}/{*path}", + "company | routines:write | /api/routines/{id}/{*path}", + "company | runtime:manage | /api/heartbeat-runs/{id}/{*path}", + "company | runtime:read | /api/companies/{id}/{*path}", + "company | runtime:read | /api/heartbeat-runs/{id}/{*path}", + "company | search:read | /api/companies/{id}/{*path}", + "company | secrets:manage | /api/companies/{id}/{*path}", + "company | secrets:manage | /api/secret-provider-configs/{id}/{*path}", + "company | secrets:manage | /api/secrets/{id}/{*path}", + "company | secrets:read_metadata | /api/companies/{id}/{*path}", + "company | secrets:read_metadata | /api/secret-provider-configs/{id}/{*path}", + "company | secrets:read_metadata | /api/secrets/{id}/{*path}", + "company | settings:read | /api/companies/{id}/{*path}", + "company | settings:read | /api/status-cards/{id}/{*path}", + "company | settings:write | /api/companies/{id}/{*path}", + "company | settings:write | /api/labels/{id}/{*path}", + "company | settings:write | /api/status-cards/{id}/{*path}", + "company | skills:manage | /api/companies/{id}/{*path}", + "company | skills:read | /api/companies/{id}/{*path}", + "company | tools:manage | /api/companies/{id}/{*path}", + "company | tools:manage | /api/tool-applications/{id}/{*path}", + "company | tools:manage | /api/tool-connections/{id}/{*path}", + "company | tools:manage | /api/tool-gateway/{*path}", + "company | tools:manage | /api/tool-profile-entries/{id}/{*path}", + "company | tools:manage | /api/tool-profiles/{id}/{*path}", + "company | tools:read | /api/companies/{id}/{*path}", + "company | tools:read | /api/tool-connections/{id}/{*path}", + "company | tools:read | /api/tool-gateway/{*path}", + "company | tools:read | /api/tool-profiles/{id}/{*path}", + "company | workspaces:manage | /api/execution-workspaces/{id}/{*path}", + "company | workspaces:read | /api/companies/{id}/{*path}", + "company | workspaces:read | /api/execution-workspaces/{id}/{*path}", + "company | workspaces:read | /api/workspace-operations/{id}/{*path}", + "company_collection | companies:read | /api/companies", + "instance_global | adapters:manage | /api/adapters/{id}/{*path}", + "instance_global | adapters:read | /api/adapters/{id}/{*path}", + "instance_global | catalogs:read | /api/skills/{*path}", + "instance_global | catalogs:read | /api/teams/{*path}", + "instance_global | companies:create | /api/companies", + "instance_global | companies:import_export | /api/companies/import/{*path}", + "instance_global | instance:manage | /api/instance/{*path}", + "instance_global | instance:read | /api/instance/{*path}", + "instance_global | plugins:manage | /api/plugins/{id}/{*path}", + "instance_global | plugins:read | /api/plugins/{id}/{*path}", + "instance_global | users:manage | /api/admin/{*path}", + "instance_global | users:read | /api/admin/{*path}", + "key_self | board_api_keys:revoke_self | /api/board-api-keys/{id}", +]; diff --git a/server/src/security/board-key-route-registry.test.ts b/server/src/security/board-key-route-registry.test.ts index ab39c7a65d..cdb951abd8 100644 --- a/server/src/security/board-key-route-registry.test.ts +++ b/server/src/security/board-key-route-registry.test.ts @@ -1,69 +1,52 @@ -import fs from "node:fs"; -import path from "node:path"; -import { describe, expect, it } from "vitest"; +import type { Express } from "express"; +import { afterAll, beforeAll, describe, expect, it } from "vitest"; import { BOARD_API_KEY_PERMISSION_KEYS } from "@paperclipai/shared"; import { lookupBoardKeyRoute } from "./board-key-route-registry.js"; +import { + BOARD_KEY_ROUTE_INVENTORY, + BOARD_KEY_RUNTIME_ROUTE_SURFACES, + collectMountedRoutes, + installRouteInventoryProbe, + inventoryTuple, + inventoryTuples, + type RuntimeRoute, +} from "./board-key-route-inventory.js"; -const ROUTES_DIR = path.resolve(import.meta.dirname, "../routes"); -const ROUTE_REGISTRATION = /\b(?:router|routes)\.(get|post|put|patch|delete)\s*\(\s*(["'`])([^"'`]+)\2/g; -const ROUTE_CALL = /\b(?:router|routes)\.(?:get|post|put|patch|delete)\s*\(/g; -const SAMPLE_UUID = "11111111-1111-4111-8111-111111111111"; +// The inventory is derived from the real Express router `createApp` mounts, not +// from source regexes. The probe must be installed before `createApp` builds +// its routers so Express 5 mount prefixes are recoverable, so the app is built +// once here and shared across the inventory assertions. +let app: Express; +let restoreProbe: () => void; -type InventoriedRoute = { file: string; method: string; path: string }; +beforeAll(async () => { + restoreProbe = installRouteInventoryProbe(); + const { createApp } = await import("../app.js"); + app = (await createApp({} as never, { + uiMode: "none", + serverPort: 0, + storageService: {} as never, + deploymentMode: "local_trusted", + deploymentExposure: "private", + allowedHostnames: [], + bindHost: "127.0.0.1", + authReady: true, + companyDeletionEnabled: false, + // Mount every optionally-gated router so the inventory reflects production. + // The Better Auth handler is injected with `app.all(...)`; it is covered by + // BOARD_KEY_RUNTIME_ROUTE_SURFACES rather than mounted here. + databaseBackupService: { runManualBackup: async () => ({}) }, + decisionServiceOptions: {} as never, + } as never)) as unknown as Express; +}, 120_000); -function mountedPath(file: string, routePath: string) { - const mount = file === "companies.ts" - ? "/api/companies" - : file === "auth.ts" - ? "/api/auth" - : file === "health.ts" - ? "/api/health" - : file === "cloud.ts" - ? "/api/cloud" - : routePath.startsWith("/mcp") - ? "" - : "/api"; - const joined = `${mount}${routePath === "/" ? "" : routePath}` || "/"; - return joined - .replace(/:[A-Za-z][A-Za-z0-9_]*/g, SAMPLE_UUID) - .replace(/\{\*[^}]+\}/g, "inventory-tail"); -} +afterAll(() => { + restoreProbe?.(); +}); -function inventoryRoutes() { - const inventory: InventoriedRoute[] = []; - const unsupported: string[] = []; - for (const file of fs.readdirSync(ROUTES_DIR).filter((name) => name.endsWith(".ts") && !name.includes(".test."))) { - const source = fs.readFileSync(path.join(ROUTES_DIR, file), "utf8"); - const calls = source.match(ROUTE_CALL)?.length ?? 0; - let captured = 0; - for (const match of source.matchAll(ROUTE_REGISTRATION)) { - captured += 1; - const routePath = match[3]!; - if (routePath.includes("${")) { - unsupported.push(`${file}: dynamic template route ${routePath}`); - continue; - } - inventory.push({ - file, - method: match[1]!.toUpperCase(), - path: mountedPath(file, routePath), - }); - } - // companies.ts has one frozen constant route: COMPANY_IMPORT_ROUTE_PATH. - const allowedNonLiteralCalls = file === "companies.ts" ? 1 : 0; - if (calls - captured !== allowedNonLiteralCalls) { - unsupported.push(`${file}: ${calls - captured} route registration(s) do not use a literal path`); - } - } - inventory.push({ file: "companies.ts", method: "POST", path: "/api/companies/import" }); - const unique = new Map(); - const duplicates: InventoriedRoute[] = []; - for (const route of inventory) { - const key = `${route.method} ${route.path}`; - if (unique.has(key)) duplicates.push(route); - else unique.set(key, route); - } - return { inventory: [...unique.values()], unsupported, duplicates }; +function runtimeInventory(extra: readonly RuntimeRoute[] = []): string[] { + const routes = [...collectMountedRoutes(app), ...BOARD_KEY_RUNTIME_ROUTE_SURFACES, ...extra]; + return [...new Set(inventoryTuples(routes).map((entry) => entry.tuple))].sort(); } describe("board-key route registry", () => { @@ -78,28 +61,62 @@ describe("board-key route registry", () => { expect(lookupBoardKeyRoute(method, routePath)).toMatchObject({ action, classification }); }); - it("inventories every checked-in route registration with an explicit policy", () => { - const { inventory, unsupported, duplicates } = inventoryRoutes(); - const undeclared = inventory - .map((route) => ({ ...route, metadata: lookupBoardKeyRoute(route.method, route.path) })) - .filter((route) => route.metadata.classification === "undeclared"); - const unsafeDuplicates = duplicates.filter( - (route) => lookupBoardKeyRoute(route.method, route.path).classification !== "board_key_denied", - ); + it("enumerates the real createApp route stack, including nested routers", () => { + const routes = collectMountedRoutes(app); + // Sanity: this is the whole mounted API surface, not a handful of files. + expect(routes.length).toBeGreaterThan(500); + // Nested routers resolve to fully-qualified paths, not bare sub-paths. + const paths = routes.map((route) => route.path); + expect(paths).toContain("/api/companies/:companyId/issues"); + expect(paths.some((path) => path.startsWith("/api/companies/:companyId/skills/:skillId/"))).toBe(true); + expect(paths.every((path) => path.startsWith("/api/") || path.startsWith("/_plugins/") + || path.startsWith("/llms/") || path.startsWith("/mcp/"))).toBe(true); + }); - expect(inventory.length).toBeGreaterThan(500); - expect(unsupported).toEqual([]); - // cases.ts and pipelines.ts intentionally overlap while both experimental - // surfaces are hard-denied. A duplicate on an allowed route is unsafe. - expect(unsafeDuplicates).toEqual([]); - expect(undeclared).toEqual([]); - expect(inventory.map((route) => ({ - ...route, - metadata: lookupBoardKeyRoute(route.method, route.path), - }))).toMatchSnapshot(); - for (const route of inventory) { - const { action } = lookupBoardKeyRoute(route.method, route.path); + it("declares an explicit policy for every reachable route", () => { + const entries = inventoryTuples([ + ...collectMountedRoutes(app), + ...BOARD_KEY_RUNTIME_ROUTE_SURFACES, + ]); + // Missing metadata: no reachable route may fall through to `undeclared`. + const undeclared = entries.filter((entry) => entry.metadata.classification === "undeclared"); + expect(undeclared.map((entry) => entry.metadata.routePattern)).toEqual([]); + // Every action is either an explicit deny or a real board-key permission. + for (const entry of entries) { + const { action } = entry.metadata; expect(action === "deny" || BOARD_API_KEY_PERMISSION_KEYS.includes(action)).toBe(true); } }); + + it("matches the explicit registry inventory bidirectionally", () => { + const runtime = runtimeInventory(); + const declared = [...new Set(BOARD_KEY_ROUTE_INVENTORY)].sort(); + // Missing metadata (runtime rows absent from the registry) and stale + // metadata (registry rows with no live route) both surface as a set diff. + const missing = runtime.filter((tuple) => !declared.includes(tuple)); + const stale = declared.filter((tuple) => !runtime.includes(tuple)); + expect({ missing, stale }).toEqual({ missing: [], stale: [] }); + }); + + it("fails when a direct app.post is registered without metadata", () => { + // Regression for the PoC: a route added straight onto the app (bypassing the + // route modules the old regex scanned) must be seen by the inventory and + // must fail the gate as undeclared until it is classified. + const before = runtimeInventory(); + expect(before).toEqual([...new Set(BOARD_KEY_ROUTE_INVENTORY)].sort()); + + (app as unknown as { post: (path: string, handler: () => void) => void }) + .post("/api/security-review-poc", () => {}); + + const pocRoute = collectMountedRoutes(app).find((route) => route.path === "/api/security-review-poc"); + expect(pocRoute).toBeDefined(); + expect(inventoryTuple("POST", "/api/security-review-poc").metadata.classification).toBe("undeclared"); + + const after = runtimeInventory(); + // The gate now fails: an undeclared row appears that the registry never declared. + expect(after).not.toEqual(before); + expect(after).toContain("undeclared | deny | /api/security-review-poc"); + expect(after.filter((tuple) => !BOARD_KEY_ROUTE_INVENTORY.includes(tuple))) + .toEqual(["undeclared | deny | /api/security-review-poc"]); + }); }); diff --git a/server/src/security/board-key-route-registry.ts b/server/src/security/board-key-route-registry.ts index a2fd259a21..66981b1c2a 100644 --- a/server/src/security/board-key-route-registry.ts +++ b/server/src/security/board-key-route-registry.ts @@ -298,6 +298,13 @@ export function lookupBoardKeyRoute(methodInput: string, rawPath: string): Board const segments = path.split("/").filter(Boolean); if (segments[0] === "mcp") return denied(method, "/mcp/{*path}"); + // Top-level (non-/api) surfaces mounted directly on the app. These are + // reachable routes, so they are explicitly denied rather than left + // undeclared: board keys never reach the MCP gateway protocol, the plugin + // UI static asset server, or the public LLM discovery files. Any other + // non-/api path stays undeclared and fails closed. + if (segments[0] === "_plugins") return denied(method, "/_plugins/{*path}"); + if (segments[0] === "llms") return denied(method, "/llms/{*path}"); if (segments[0] !== "api") { return declared(method, path, "deny", "undeclared", "none", { concealment: "forbidden" }); }