@vm0/cli 9.79.1 → 9.79.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{chunk-ZKST6ZZZ.js → chunk-MKJBEFRH.js} +575 -94
- package/chunk-MKJBEFRH.js.map +1 -0
- package/index.js +13 -19
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/zero.js +2 -2
- package/chunk-ZKST6ZZZ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/instrument.ts","../src/lib/network/proxy.ts","../src/commands/zero/org/index.ts","../src/commands/zero/org/status.ts","../src/lib/api/core/client-factory.ts","../src/lib/api/config.ts","../src/lib/api/domains/composes.ts","../../../packages/core/src/variable-expander.ts","../../../packages/core/src/contracts/base.ts","../../../packages/core/src/contracts/errors.ts","../../../packages/core/src/contracts/composes.ts","../../../packages/core/src/contracts/firewalls.ts","../../../packages/core/src/contracts/runs.ts","../../../packages/core/src/contracts/logs.ts","../../../packages/core/src/contracts/orgs.ts","../../../packages/core/src/contracts/org-members.ts","../../../packages/core/src/contracts/storages.ts","../../../packages/core/src/contracts/webhooks.ts","../../../packages/core/src/contracts/cli-auth.ts","../../../packages/core/src/contracts/auth.ts","../../../packages/core/src/contracts/cron.ts","../../../packages/core/src/contracts/secrets.ts","../../../packages/core/src/contracts/variables.ts","../../../packages/core/src/contracts/model-providers.ts","../../../packages/core/src/contracts/sessions.ts","../../../packages/core/src/contracts/chat-threads.ts","../../../packages/core/src/contracts/runners.ts","../../../packages/core/src/contracts/realtime.ts","../../../packages/core/src/contracts/connectors.ts","../../../packages/core/src/firewall-loader.ts","../../../packages/core/src/github-url.ts","../../../packages/core/src/firewalls/agentmail.generated.ts","../../../packages/core/src/firewalls/ahrefs.generated.ts","../../../packages/core/src/firewalls/airtable.generated.ts","../../../packages/core/src/firewalls/asana.generated.ts","../../../packages/core/src/firewalls/axiom.generated.ts","../../../packages/core/src/firewalls/brave-search.generated.ts","../../../packages/core/src/firewalls/clickup.generated.ts","../../../packages/core/src/firewalls/cloudflare.generated.ts","../../../packages/core/src/firewalls/confluence.generated.ts","../../../packages/core/src/firewalls/deepseek.generated.ts","../../../packages/core/src/firewalls/discord.generated.ts","../../../packages/core/src/firewalls/elevenlabs.generated.ts","../../../packages/core/src/firewalls/fal.generated.ts","../../../packages/core/src/firewalls/figma.generated.ts","../../../packages/core/src/firewalls/firecrawl.generated.ts","../../../packages/core/src/firewalls/github.generated.ts","../../../packages/core/src/firewalls/gitlab.generated.ts","../../../packages/core/src/firewalls/gmail.generated.ts","../../../packages/core/src/firewalls/google-calendar.generated.ts","../../../packages/core/src/firewalls/google-docs.generated.ts","../../../packages/core/src/firewalls/google-drive.generated.ts","../../../packages/core/src/firewalls/google-sheets.generated.ts","../../../packages/core/src/firewalls/hubspot.generated.ts","../../../packages/core/src/firewalls/jira.generated.ts","../../../packages/core/src/firewalls/linear.generated.ts","../../../packages/core/src/firewalls/monday.generated.ts","../../../packages/core/src/firewalls/neon.generated.ts","../../../packages/core/src/firewalls/notion.generated.ts","../../../packages/core/src/firewalls/openai.generated.ts","../../../packages/core/src/firewalls/perplexity.generated.ts","../../../packages/core/src/firewalls/posthog.generated.ts","../../../packages/core/src/firewalls/resend.generated.ts","../../../packages/core/src/firewalls/sentry.generated.ts","../../../packages/core/src/firewalls/serpapi.generated.ts","../../../packages/core/src/firewalls/slack.generated.ts","../../../packages/core/src/firewalls/stripe.generated.ts","../../../packages/core/src/firewalls/supabase.generated.ts","../../../packages/core/src/firewalls/tavily.generated.ts","../../../packages/core/src/firewalls/todoist.generated.ts","../../../packages/core/src/firewalls/vercel.generated.ts","../../../packages/core/src/firewalls/x.generated.ts","../../../packages/core/src/firewalls/youtube.generated.ts","../../../packages/core/src/firewalls/zapier.generated.ts","../../../packages/core/src/firewalls/zapsign.generated.ts","../../../packages/core/src/firewalls/zeptomail.generated.ts","../../../packages/core/src/firewalls/index.ts","../../../packages/core/src/contracts/firewall-expander.ts","../../../packages/core/src/contracts/zero-user-preferences.ts","../../../packages/core/src/contracts/org-list.ts","../../../packages/core/src/contracts/onboarding.ts","../../../packages/core/src/contracts/skills.ts","../../../packages/core/src/contracts/zero-agents.ts","../../../packages/core/src/contracts/zero-connectors.ts","../../../packages/core/src/contracts/zero-org.ts","../../../packages/core/src/contracts/zero-org-list.ts","../../../packages/core/src/contracts/zero-org-members.ts","../../../packages/core/src/contracts/zero-composes.ts","../../../packages/core/src/contracts/zero-runs.ts","../../../packages/core/src/contracts/zero-schedules.ts","../../../packages/core/src/contracts/zero-model-providers.ts","../../../packages/core/src/contracts/zero-secrets.ts","../../../packages/core/src/contracts/zero-sessions.ts","../../../packages/core/src/contracts/integrations.ts","../../../packages/core/src/contracts/zero-billing.ts","../../../packages/core/src/contracts/zero-usage.ts","../../../packages/core/src/storage-names.ts","../../../packages/core/src/frameworks.ts","../../../packages/core/src/feature-switch.ts","../../../packages/core/src/skill-frontmatter.ts","../src/lib/api/domains/runs.ts","../src/lib/api/domains/sessions.ts","../src/lib/api/domains/storages.ts","../src/lib/api/domains/zero-user-preferences.ts","../src/lib/api/core/http.ts","../src/lib/api/domains/skills.ts","../src/lib/api/domains/zero-orgs.ts","../src/lib/api/domains/zero-secrets.ts","../src/lib/api/domains/zero-variables.ts","../src/lib/api/domains/zero-org-secrets.ts","../src/lib/api/domains/zero-org-variables.ts","../src/lib/api/domains/zero-org-model-providers.ts","../src/lib/api/domains/zero-agents.ts","../src/lib/api/domains/zero-connectors.ts","../src/lib/api/domains/zero-schedules.ts","../src/lib/command/with-error-handler.ts","../src/commands/zero/org/set.ts","../src/commands/zero/org/list.ts","../src/commands/zero/org/use.ts","../src/commands/zero/org/members.ts","../src/commands/zero/org/invite.ts","../src/commands/zero/org/remove.ts","../src/commands/zero/org/leave.ts","../src/commands/zero/org/delete.ts","../src/commands/zero/org/secret/index.ts","../src/commands/zero/org/secret/list.ts","../src/commands/zero/org/secret/set.ts","../src/lib/utils/prompt-utils.ts","../src/commands/zero/org/secret/remove.ts","../src/commands/zero/org/variable/index.ts","../src/commands/zero/org/variable/list.ts","../src/commands/zero/org/variable/set.ts","../src/commands/zero/org/variable/remove.ts","../src/commands/zero/org/model-provider/index.ts","../src/commands/zero/org/model-provider/list.ts","../src/commands/zero/org/model-provider/setup.ts","../src/lib/domain/model-provider/shared.ts","../src/commands/zero/org/model-provider/remove.ts","../src/commands/zero/org/model-provider/set-default.ts","../src/commands/zero/agent/index.ts","../src/commands/zero/agent/create.ts","../src/commands/zero/agent/edit.ts","../src/commands/zero/agent/view.ts","../src/commands/zero/agent/list.ts","../src/commands/zero/agent/delete.ts","../src/commands/zero/connector/index.ts","../src/commands/zero/connector/connect.ts","../src/lib/computer/start-services.ts","../src/lib/computer/ngrok.ts","../src/commands/zero/connector/list.ts","../src/commands/zero/connector/status.ts","../src/lib/domain/schedule-utils.ts","../src/commands/zero/connector/disconnect.ts","../src/commands/zero/preference/index.ts","../src/commands/zero/schedule/index.ts","../src/commands/zero/schedule/setup.ts","../src/commands/zero/schedule/list.ts","../src/commands/zero/schedule/status.ts","../src/commands/zero/schedule/delete.ts","../src/commands/zero/schedule/enable.ts","../src/commands/zero/schedule/disable.ts","../src/commands/zero/secret/index.ts","../src/commands/zero/secret/list.ts","../src/commands/zero/secret/set.ts","../src/commands/zero/secret/delete.ts","../src/commands/zero/variable/index.ts","../src/commands/zero/variable/list.ts","../src/commands/zero/variable/set.ts","../src/commands/zero/variable/delete.ts"],"sourcesContent":["// Sentry instrumentation - must be imported before any other modules\n// Sentry auto-captures uncaught exceptions and unhandled rejections by default.\n// We use beforeSend to filter out operational errors (user mistakes, expected failures).\n// Only programmer errors (bugs) should reach Sentry.\nimport * as Sentry from \"@sentry/node\";\nimport * as os from \"node:os\";\n\ndeclare const __CLI_VERSION__: string;\ndeclare const __DEFAULT_SENTRY_DSN__: string;\n\n// Runtime SENTRY_DSN takes precedence, then build-time default\nconst DSN = process.env.SENTRY_DSN ?? __DEFAULT_SENTRY_DSN__;\n\n/**\n * Patterns for operational errors that should NOT be sent to Sentry.\n * These are user errors or expected failures, not bugs.\n */\nconst OPERATIONAL_ERROR_PATTERNS = [\n // Authentication errors (user needs to login)\n /not authenticated/i,\n // Resource not found (user typo or deleted resource)\n /not found/i,\n /agent not found/i,\n /version not found/i,\n /checkpoint not found/i,\n /session not found/i,\n // File errors (user provided wrong path)\n /file not found/i,\n /environment file not found/i,\n // Validation errors (user input issues)\n /invalid format/i,\n /invalid.*config/i,\n // Rate limiting (expected operational condition)\n /rate limit/i,\n /concurrent run limit/i,\n /insufficient.*credit/i,\n /no model provider/i,\n // Network issues (transient, not bugs)\n /network error/i,\n /network issue/i,\n /fetch failed/i,\n /connection refused/i,\n /timeout/i,\n /ECONNREFUSED/i,\n /ETIMEDOUT/i,\n // Permission/access errors (operational, not bugs)\n /forbidden/i,\n /access denied/i,\n];\n\n/**\n * Check if an error is operational (user error) vs programmer error (bug).\n * Returns true for operational errors that should be filtered out.\n */\nfunction isOperationalError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const message = error.message;\n return OPERATIONAL_ERROR_PATTERNS.some((pattern) => pattern.test(message));\n}\n\nif (DSN) {\n Sentry.init({\n dsn: DSN,\n environment: process.env.SENTRY_ENVIRONMENT ?? \"production\",\n release: __CLI_VERSION__,\n sendDefaultPii: false,\n tracesSampleRate: 0,\n shutdownTimeout: 500,\n initialScope: {\n tags: {\n app: \"cli\",\n },\n },\n // Filter out operational errors - only send programmer errors (bugs)\n beforeSend(event, hint) {\n const error = hint.originalException;\n if (isOperationalError(error)) {\n return null; // Drop operational errors\n }\n return event;\n },\n });\n\n Sentry.setContext(\"cli\", {\n version: __CLI_VERSION__,\n command: process.argv.slice(2).join(\" \"),\n });\n\n Sentry.setContext(\"runtime\", {\n node_version: process.version,\n os_platform: os.platform(),\n os_release: os.release(),\n });\n}\n\n// Handle EPIPE gracefully — occurs when piped output is closed early\n// (e.g., `vm0 logs ... | head`). Exit cleanly per Unix convention.\nfunction handleEpipe(err: NodeJS.ErrnoException) {\n if (err.code === \"EPIPE\") {\n process.exit(0);\n }\n throw err;\n}\n\nprocess.stdout.on(\"error\", handleEpipe);\nprocess.stderr.on(\"error\", handleEpipe);\n","import { EnvHttpProxyAgent, setGlobalDispatcher } from \"undici\";\n\ninterface ProxyConfig {\n httpProxy?: string;\n httpsProxy?: string;\n noProxy?: string;\n}\n\nlet configured = false;\n\nfunction getEnvValue(\n lowercaseKey: string,\n uppercaseKey: string,\n): string | null {\n const lowercaseValue = process.env[lowercaseKey]?.trim();\n if (lowercaseValue) {\n return lowercaseValue;\n }\n\n const uppercaseValue = process.env[uppercaseKey]?.trim();\n if (uppercaseValue) {\n return uppercaseValue;\n }\n\n return null;\n}\n\nfunction getProxyConfigFromEnv(): ProxyConfig | null {\n const httpProxy = getEnvValue(\"http_proxy\", \"HTTP_PROXY\");\n const httpsProxy = getEnvValue(\"https_proxy\", \"HTTPS_PROXY\");\n\n if (!httpProxy && !httpsProxy) {\n return null;\n }\n\n const noProxy = getEnvValue(\"no_proxy\", \"NO_PROXY\");\n const config: ProxyConfig = {};\n\n if (httpProxy) {\n config.httpProxy = httpProxy;\n }\n\n if (httpsProxy) {\n config.httpsProxy = httpsProxy;\n }\n\n if (noProxy) {\n config.noProxy = noProxy;\n }\n\n return config;\n}\n\nexport function configureGlobalProxyFromEnv(): void {\n if (configured) {\n return;\n }\n\n const config = getProxyConfigFromEnv();\n if (!config) {\n return;\n }\n\n try {\n const dispatcher = new EnvHttpProxyAgent(config);\n setGlobalDispatcher(dispatcher);\n configured = true;\n } catch (error) {\n throw new Error(\n \"Invalid proxy configuration. Check HTTP_PROXY/HTTPS_PROXY/NO_PROXY values.\",\n {\n cause: error instanceof Error ? error : undefined,\n },\n );\n }\n}\n","import { Command } from \"commander\";\nimport { statusCommand } from \"./status\";\nimport { setCommand } from \"./set\";\nimport { listCommand } from \"./list\";\nimport { useCommand } from \"./use\";\nimport { membersCommand } from \"./members\";\nimport { inviteCommand } from \"./invite\";\nimport { removeCommand } from \"./remove\";\nimport { leaveCommand } from \"./leave\";\nimport { deleteCommand } from \"./delete\";\nimport { zeroOrgSecretCommand } from \"./secret\";\nimport { zeroOrgVariableCommand } from \"./variable\";\nimport { zeroOrgModelProviderCommand } from \"./model-provider\";\n\nexport const zeroOrgCommand = new Command()\n .name(\"org\")\n .description(\"Manage your organization\")\n .addCommand(statusCommand)\n .addCommand(setCommand)\n .addCommand(listCommand)\n .addCommand(useCommand)\n .addCommand(membersCommand)\n .addCommand(inviteCommand)\n .addCommand(removeCommand)\n .addCommand(leaveCommand)\n .addCommand(deleteCommand)\n .addCommand(zeroOrgSecretCommand)\n .addCommand(zeroOrgVariableCommand)\n .addCommand(zeroOrgModelProviderCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrg } from \"../../../lib/api\";\nimport { ApiRequestError } from \"../../../lib/api/core/client-factory\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"View current organization status\")\n .action(\n withErrorHandler(async () => {\n try {\n const org = await getZeroOrg();\n\n console.log(chalk.bold(\"Organization Information:\"));\n console.log(` Slug: ${chalk.green(org.slug)}`);\n } catch (error) {\n if (error instanceof ApiRequestError && error.status === 404) {\n throw new Error(\"No organization configured\", {\n cause: new Error(\n \"Set your organization with: vm0 zero org set <slug>\",\n ),\n });\n }\n throw error;\n }\n }),\n );\n","import { tsRestFetchApi } from \"@ts-rest/core\";\nimport { getApiUrl, getActiveToken, getActiveOrg } from \"../config\";\nimport type { ApiErrorResponse } from \"@vm0/core\";\n\n/**\n * Custom API request error with code and HTTP status\n */\nexport class ApiRequestError extends Error {\n constructor(\n message: string,\n public code: string,\n public status: number,\n ) {\n super(message);\n this.name = \"ApiRequestError\";\n }\n}\n\n/**\n * Get authentication headers for API requests\n */\nasync function getHeaders(): Promise<Record<string, string>> {\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\n // Note: Don't set Content-Type here - ts-rest automatically adds it for requests with body.\n // Setting Content-Type for bodyless requests (GET, DELETE) can cause server-side parsing issues.\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n\n // Add Vercel bypass secret if available (for CI/preview deployments)\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n return headers;\n}\n\n/**\n * Get base URL for API requests\n */\nexport async function getBaseUrl(): Promise<string> {\n const apiUrl = await getApiUrl();\n if (!apiUrl) {\n throw new Error(\"API URL not configured\");\n }\n return apiUrl;\n}\n\n/**\n * Configuration for ts-rest client initialization\n */\nexport async function getClientConfig() {\n const baseUrl = await getBaseUrl();\n const baseHeaders = await getHeaders();\n\n const activeOrg = await getActiveOrg();\n if (!activeOrg) {\n throw new Error(\n \"No active organization configured. Run: vm0 org use <slug>\",\n );\n }\n\n return {\n baseUrl,\n baseHeaders,\n jsonQuery: false as const,\n api: async (args: Parameters<typeof tsRestFetchApi>[0]) => {\n const separator = args.path.includes(\"?\") ? \"&\" : \"?\";\n if (!args.path.includes(\"org=\")) {\n args.path = `${args.path}${separator}org=${encodeURIComponent(activeOrg)}`;\n }\n return tsRestFetchApi(args);\n },\n };\n}\n\n/**\n * Handle API error responses and throw appropriate error.\n *\n * Parses the server error response and throws an ApiRequestError\n * with the server's message and code. Falls back to defaultMessage\n * if the server response doesn't include an error message.\n */\nexport function handleError(\n result: { status: number; body: unknown },\n defaultMessage: string,\n): never {\n const errorBody = result.body as ApiErrorResponse;\n const message = errorBody.error?.message || defaultMessage;\n const code = errorBody.error?.code || \"UNKNOWN\";\n throw new ApiRequestError(message, code, result.status);\n}\n","import { homedir } from \"os\";\nimport { join } from \"path\";\nimport { readFile, writeFile, mkdir, unlink } from \"fs/promises\";\nimport { existsSync } from \"fs\";\n\ninterface CliConfig {\n token?: string;\n apiUrl?: string;\n activeOrg?: string;\n}\n\n// Use functions for lazy evaluation (enables testing with mocked homedir)\nfunction getConfigDir(): string {\n return join(homedir(), \".vm0\");\n}\n\nfunction getConfigFile(): string {\n return join(getConfigDir(), \"config.json\");\n}\n\nexport async function loadConfig(): Promise<CliConfig> {\n const configFile = getConfigFile();\n if (!existsSync(configFile)) {\n return {};\n }\n const content = await readFile(configFile, \"utf8\");\n return JSON.parse(content) as CliConfig;\n}\n\nexport async function saveConfig(config: CliConfig): Promise<void> {\n const configDir = getConfigDir();\n const configFile = getConfigFile();\n\n // Ensure config directory exists\n await mkdir(configDir, { recursive: true });\n\n // Merge with existing config\n const existing = await loadConfig();\n const merged = { ...existing, ...config };\n\n // Write config file\n await writeFile(configFile, JSON.stringify(merged, null, 2), \"utf8\");\n}\n\nexport async function getToken(): Promise<string | undefined> {\n // Check environment variables first (ZERO_TOKEN takes priority)\n if (process.env.ZERO_TOKEN) {\n return process.env.ZERO_TOKEN;\n }\n if (process.env.VM0_TOKEN) {\n return process.env.VM0_TOKEN;\n }\n\n const config = await loadConfig();\n return config.token;\n}\n\n/**\n * Get the active token for API requests.\n * Priority: ZERO_TOKEN env var > VM0_TOKEN env var > user token from config\n */\nexport async function getActiveToken(): Promise<string | undefined> {\n return getToken();\n}\n\nexport async function getApiUrl(): Promise<string> {\n const config = await loadConfig();\n const apiUrl = process.env.VM0_API_URL;\n if (apiUrl) {\n // Add protocol if missing\n return apiUrl.startsWith(\"http\") ? apiUrl : `https://${apiUrl}`;\n }\n // Fallback to production API if no config or env var\n return config.apiUrl ?? \"https://www.vm0.ai\";\n}\n\n/**\n * Get the active organization for API requests.\n * Priority: VM0_ACTIVE_ORG env var > activeOrg from config file\n */\nexport async function getActiveOrg(): Promise<string | undefined> {\n if (process.env.VM0_ACTIVE_ORG) {\n return process.env.VM0_ACTIVE_ORG;\n }\n const config = await loadConfig();\n return config.activeOrg;\n}\n\nexport async function clearConfig(): Promise<void> {\n const configFile = getConfigFile();\n if (existsSync(configFile)) {\n await unlink(configFile);\n }\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n composesMainContract,\n composesByIdContract,\n composesVersionsContract,\n agentComposeApiContentSchema,\n} from \"@vm0/core\";\nimport type { z } from \"zod\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type {\n GetComposeResponse,\n CreateComposeResponse,\n GetComposeVersionResponse,\n} from \"../core/types\";\n\nexport async function getComposeByName(\n name: string,\n org?: string,\n): Promise<GetComposeResponse | null> {\n const config = await getClientConfig();\n const client = initClient(composesMainContract, config);\n\n const result = await client.getByName({\n query: { name, org },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n if (result.status === 404) {\n return null;\n }\n\n handleError(result, `Compose not found: ${name}`);\n}\n\nexport async function getComposeById(id: string): Promise<GetComposeResponse> {\n const config = await getClientConfig();\n const client = initClient(composesByIdContract, config);\n\n const result = await client.getById({\n params: { id },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Compose not found: ${id}`);\n}\n\n/**\n * Resolve a version specifier to a full version ID\n * Supports: \"latest\", full hash (64 chars), or hash prefix (8+ chars)\n */\nexport async function getComposeVersion(\n composeId: string,\n version: string,\n): Promise<GetComposeVersionResponse> {\n const config = await getClientConfig();\n const client = initClient(composesVersionsContract, config);\n\n const result = await client.resolveVersion({\n query: { composeId, version },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Version not found: ${version}`);\n}\n\nexport async function createOrUpdateCompose(body: {\n content: unknown;\n}): Promise<CreateComposeResponse> {\n const config = await getClientConfig();\n const client = initClient(composesMainContract, config);\n\n const result = await client.create({\n body: body as { content: z.infer<typeof agentComposeApiContentSchema> },\n });\n\n // Both 200 and 201 are success cases\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to create compose\");\n}\n","/**\n * Unified variable expansion for agent compose configurations\n * Supports ${{ vars.xxx }} and ${{ secrets.xxx }} syntax\n * Note: ${{ env.xxx }} is parsed but not currently used (reserved for future)\n */\n\n/**\n * Variable reference with source and name\n */\nexport interface VariableReference {\n source: \"env\" | \"vars\" | \"secrets\";\n name: string;\n}\n\n/**\n * Sources for variable expansion\n */\nexport interface VariableSources {\n env?: Record<string, string | undefined>;\n vars?: Record<string, string>;\n secrets?: Record<string, string>;\n}\n\n/**\n * Result of variable expansion\n */\nexport interface ExpansionResult<T> {\n result: T;\n missingVars: VariableReference[];\n}\n\n/**\n * Regex pattern for ${{ source.name }} syntax\n * Matches: ${{ env.VAR }}, ${{ vars.foo }}, ${{ secrets.key }}\n */\nconst VARIABLE_PATTERN =\n /\\$\\{\\{\\s*(env|vars|secrets)\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g;\n\n/**\n * Extract all variable references from a string\n * @param value - String that may contain variable references\n * @returns Array of variable references found\n */\nexport function extractVariableReferencesFromString(\n value: string,\n): VariableReference[] {\n const refs: VariableReference[] = [];\n const matches = value.matchAll(VARIABLE_PATTERN);\n\n for (const match of matches) {\n const source = match[1] as \"env\" | \"vars\" | \"secrets\";\n const name = match[2]!;\n refs.push({ source, name });\n }\n\n return refs;\n}\n\n/**\n * Extract all variable references from an object recursively\n * @param obj - Object that may contain variable references in string values\n * @returns Array of unique variable references\n */\nexport function extractVariableReferences(obj: unknown): VariableReference[] {\n const refs: VariableReference[] = [];\n const seen = new Set<string>();\n\n function scan(value: unknown): void {\n if (typeof value === \"string\") {\n const stringRefs = extractVariableReferencesFromString(value);\n for (const ref of stringRefs) {\n const key = `${ref.source}.${ref.name}`;\n if (!seen.has(key)) {\n seen.add(key);\n refs.push(ref);\n }\n }\n } else if (Array.isArray(value)) {\n for (const item of value) {\n scan(item);\n }\n } else if (value !== null && typeof value === \"object\") {\n for (const val of Object.values(value)) {\n scan(val);\n }\n }\n }\n\n scan(obj);\n return refs;\n}\n\n/**\n * Expand variables in a string using provided sources\n * @param value - String that may contain variable references\n * @param sources - Sources for variable values\n * @returns Expansion result with resolved string and missing variables\n */\nexport function expandVariablesInString(\n value: string,\n sources: VariableSources,\n): ExpansionResult<string> {\n const missingVars: VariableReference[] = [];\n const seenMissing = new Set<string>();\n\n const result = value.replace(VARIABLE_PATTERN, (fullMatch, source, name) => {\n const typedSource = source as \"env\" | \"vars\" | \"secrets\";\n const resolved = sources[typedSource]?.[name];\n\n if (resolved === undefined) {\n const key = `${typedSource}.${name}`;\n if (!seenMissing.has(key)) {\n seenMissing.add(key);\n missingVars.push({ source: typedSource, name });\n }\n return fullMatch;\n }\n\n return resolved;\n });\n\n return { result, missingVars };\n}\n\n/**\n * Recursively expand variables in an object\n * @param obj - Object that may contain variable references in string values\n * @param sources - Sources for variable values\n * @returns Expansion result with resolved object and missing variables\n */\nexport function expandVariables<T>(\n obj: T,\n sources: VariableSources,\n): ExpansionResult<T> {\n const allMissingVars: VariableReference[] = [];\n const seenMissing = new Set<string>();\n\n function expand(value: unknown): unknown {\n if (typeof value === \"string\") {\n const { result, missingVars } = expandVariablesInString(value, sources);\n for (const missing of missingVars) {\n const key = `${missing.source}.${missing.name}`;\n if (!seenMissing.has(key)) {\n seenMissing.add(key);\n allMissingVars.push(missing);\n }\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => expand(item));\n }\n\n if (value !== null && typeof value === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = expand(val);\n }\n return result;\n }\n\n return value;\n }\n\n const result = expand(obj) as T;\n return { result, missingVars: allMissingVars };\n}\n\n/**\n * Validate that all required variables have values in sources\n * @param refs - Array of variable references to validate\n * @param sources - Sources for variable values\n * @returns Array of missing variable references\n */\nexport function validateRequiredVariables(\n refs: VariableReference[],\n sources: VariableSources,\n): VariableReference[] {\n const missing: VariableReference[] = [];\n\n for (const ref of refs) {\n const resolved = sources[ref.source]?.[ref.name];\n if (resolved === undefined) {\n missing.push(ref);\n }\n }\n\n return missing;\n}\n\n/**\n * Group variable references by source\n * @param refs - Array of variable references\n * @returns Object with arrays grouped by source\n */\nexport function groupVariablesBySource(refs: VariableReference[]): {\n env: VariableReference[];\n vars: VariableReference[];\n secrets: VariableReference[];\n} {\n const groups = {\n env: [] as VariableReference[],\n vars: [] as VariableReference[],\n secrets: [] as VariableReference[],\n };\n\n for (const ref of refs) {\n groups[ref.source].push(ref);\n }\n\n return groups;\n}\n\n/**\n * Extract all variable references from an object and group them by source.\n * Convenience wrapper combining extractVariableReferences + groupVariablesBySource.\n *\n * @example\n * ```ts\n * const env = {\n * API_KEY: \"${{ secrets.OPENAI_KEY }}\",\n * REGION: \"${{ vars.AWS_REGION }}\",\n * STATIC: \"hello\",\n * };\n * const grouped = extractAndGroupVariables(env);\n * // grouped.secrets => [{ source: \"secrets\", name: \"OPENAI_KEY\" }]\n * // grouped.vars => [{ source: \"vars\", name: \"AWS_REGION\" }]\n * // grouped.env => []\n * ```\n */\nexport function extractAndGroupVariables(obj: unknown): {\n env: VariableReference[];\n vars: VariableReference[];\n secrets: VariableReference[];\n} {\n return groupVariablesBySource(extractVariableReferences(obj));\n}\n\n/**\n * Format missing variables for error messages\n * @param missing - Array of missing variable references\n * @returns Formatted error message\n */\nexport function formatMissingVariables(missing: VariableReference[]): string {\n const grouped = groupVariablesBySource(missing);\n const messages: string[] = [];\n\n if (grouped.env.length > 0) {\n const names = grouped.env.map((r) => r.name).join(\", \");\n messages.push(`Environment variables: ${names}`);\n }\n\n if (grouped.vars.length > 0) {\n const names = grouped.vars.map((r) => r.name).join(\", \");\n messages.push(`CLI variables (--vars): ${names}`);\n }\n\n if (grouped.secrets.length > 0) {\n const names = grouped.secrets.map((r) => r.name).join(\", \");\n messages.push(`Secrets: ${names}`);\n }\n\n return messages.join(\"\\n\");\n}\n","/**\n * ts-rest contract initialization\n * Re-exported from @ts-rest/core for use in contract definitions\n */\nimport { z } from \"zod\";\n\nexport { initContract } from \"@ts-rest/core\";\n\n/**\n * Shared headers schema for endpoints requiring authentication.\n * The authorization header is optional - endpoints handle missing auth\n * by returning 401 responses.\n *\n * NOTE: This uses z.object() despite @ts-rest expecting a plain object\n * for headers. This is intentional — with Zod 4, @ts-rest's\n * InferHeadersOutput type relies on z.AnyZodObject (which resolves to\n * `any` in Zod 4) to correctly infer z.output<T> for handler types.\n * Using a plain object breaks handler type inference (headers becomes {}).\n * The resulting TS2322 on contract definitions is a known @ts-rest + Zod 4\n * compatibility issue (https://github.com/ts-rest/ts-rest/issues/852).\n */\nexport const authHeadersSchema = z.object({\n authorization: z.string().optional(),\n});\n","import { z } from \"zod\";\n\n/**\n * API error definitions with associated HTTP status codes\n * Used across all API endpoints for consistent error responses\n */\nexport const ApiError = {\n BAD_REQUEST: { status: 400 as const, code: \"BAD_REQUEST\" },\n UNAUTHORIZED: { status: 401 as const, code: \"UNAUTHORIZED\" },\n FORBIDDEN: { status: 403 as const, code: \"FORBIDDEN\" },\n NOT_FOUND: { status: 404 as const, code: \"NOT_FOUND\" },\n CONFLICT: { status: 409 as const, code: \"CONFLICT\" },\n INSUFFICIENT_CREDITS: {\n status: 402 as const,\n code: \"INSUFFICIENT_CREDITS\",\n },\n PAYLOAD_TOO_LARGE: { status: 413 as const, code: \"PAYLOAD_TOO_LARGE\" },\n TOO_MANY_REQUESTS: { status: 429 as const, code: \"TOO_MANY_REQUESTS\" },\n NO_MODEL_PROVIDER: {\n status: 422 as const,\n code: \"NO_MODEL_PROVIDER\",\n },\n PROVIDER_UNAVAILABLE: {\n status: 503 as const,\n code: \"PROVIDER_UNAVAILABLE\",\n },\n INTERNAL_SERVER_ERROR: {\n status: 500 as const,\n code: \"INTERNAL_SERVER_ERROR\",\n },\n} as const;\n\nexport type ApiErrorKey = keyof typeof ApiError;\n\n/**\n * Helper to create a standardized error response\n * Ensures the correct HTTP status code is always used with the error code\n */\nexport function createErrorResponse<K extends ApiErrorKey>(\n errorKey: K,\n message: string,\n) {\n const { status, code } = ApiError[errorKey];\n return {\n status,\n body: { error: { message, code } },\n };\n}\n\n/**\n * Standard API error response schema\n * Used across all API endpoints for consistent error handling\n */\nexport const apiErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string(),\n }),\n});\n\nexport type ApiErrorResponse = z.infer<typeof apiErrorSchema>;\n\n/**\n * Centralized guidance registry for run error codes.\n * All client surfaces (Web, CLI, Slack, Telegram) use this to render\n * actionable error messages. To add a new error code, add an entry here\n * and create the corresponding factory function in errors.ts.\n */\nexport const RUN_ERROR_GUIDANCE: Record<\n string,\n { title: string; guidance: string; cliHint?: string }\n> = {\n NO_MODEL_PROVIDER: {\n title: \"No model provider configured\",\n guidance: \"Configure a model provider to start running agents.\",\n cliHint: \"vm0 org model-provider setup\",\n },\n INSUFFICIENT_CREDITS: {\n title: \"Credits depleted\",\n guidance: \"Add credits or configure your own API key to continue.\",\n cliHint: \"vm0 org billing\",\n },\n PROVIDER_INCOMPATIBLE: {\n title: \"Provider not compatible\",\n guidance: \"This session was created with a different provider type.\",\n },\n PROVIDER_UNAVAILABLE: {\n title: \"Provider temporarily unavailable\",\n guidance:\n \"The model provider is temporarily unavailable. Please try again later.\",\n },\n TOO_MANY_REQUESTS: {\n title: \"Concurrent run limit reached\",\n guidance:\n \"Wait for your current run to complete before starting a new one.\",\n },\n};\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { firewallPermissionSchema } from \"./firewalls\";\n\nconst c = initContract();\n\n/**\n * Version query parameter schema for compose versions\n *\n * Accepts: \"latest\" tag or 8-64 hex character version hash\n */\nconst composeVersionQuerySchema = z\n .string()\n .min(1, \"Missing version query parameter\")\n .regex(\n /^[a-f0-9]{8,64}$|^latest$/i,\n \"Version must be 8-64 hex characters or 'latest'\",\n );\n\n/**\n * Agent name regex: 3-64 chars, letters/numbers/hyphens, start and end with alphanumeric.\n */\nexport const AGENT_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}[a-zA-Z0-9]$/;\n\n/**\n * Valid capability strings for experimental_capabilities.\n * Format: {resource}:{action}\n *\n * - agent:* → Agent static resources (compose + volumes + storages)\n * - agent-run:* → Run lifecycle operations\n * - schedule:* → Schedule management\n * - artifact:* → Legacy; kept so existing sandbox tokens remain verifiable\n * - integration-* → Third-party integrations\n */\nexport const VALID_CAPABILITIES = [\n \"agent:read\",\n \"agent:write\",\n \"agent-run:read\",\n \"agent-run:write\",\n \"schedule:read\",\n \"schedule:write\",\n \"integration-slack:write\",\n \"artifact:read\",\n \"artifact:write\",\n] as const;\n\n/** Inferred union type of all valid capability strings. */\nexport type ValidCapability = (typeof VALID_CAPABILITIES)[number];\n\n/** Metadata for a single capability — group label and human-readable label. */\nexport interface CapabilityMeta {\n group: string;\n label: string;\n}\n\n/**\n * Exhaustive mapping from every valid capability to its UI group and label.\n * Adding a new capability to VALID_CAPABILITIES without updating this record\n * will produce a TypeScript compile error.\n */\nexport const CAPABILITY_META: Record<ValidCapability, CapabilityMeta> = {\n \"agent:read\": { group: \"Agent Resources\", label: \"Read agents & volumes\" },\n \"agent:write\": { group: \"Agent Resources\", label: \"Write agents & volumes\" },\n \"agent-run:read\": { group: \"Operations\", label: \"View agent runs\" },\n \"agent-run:write\": { group: \"Operations\", label: \"Create & cancel runs\" },\n \"schedule:read\": { group: \"Operations\", label: \"View schedules\" },\n \"schedule:write\": { group: \"Operations\", label: \"Manage schedules\" },\n \"integration-slack:write\": {\n group: \"Integrations\",\n label: \"Send Slack messages via org bot\",\n },\n \"artifact:read\": { group: \"Legacy\", label: \"Read artifacts (deprecated)\" },\n \"artifact:write\": { group: \"Legacy\", label: \"Write artifacts (deprecated)\" },\n};\n\n/**\n * Capabilities for the zero-layer capability system (ZERO_TOKEN).\n * These protect /api/zero/* routes only.\n */\nexport const ZERO_CAPABILITIES = [\n \"agent:read\",\n \"agent:write\",\n \"agent-run:read\",\n \"agent-run:write\",\n \"schedule:read\",\n \"schedule:write\",\n \"slack:write\",\n] as const;\n\n/** Inferred union type of all zero capability strings. */\nexport type ZeroCapability = (typeof ZERO_CAPABILITIES)[number];\n\n/** Metadata for a single zero capability — reuses CapabilityMeta structure. */\nexport type ZeroCapabilityMeta = CapabilityMeta;\n\n/**\n * Exhaustive mapping from every zero capability to its UI group and label.\n * Adding a new capability to ZERO_CAPABILITIES without updating this record\n * will produce a TypeScript compile error.\n */\nexport const ZERO_CAPABILITY_META: Record<ZeroCapability, ZeroCapabilityMeta> =\n {\n \"agent:read\": { group: \"Agent\", label: \"Read agents\" },\n \"agent:write\": { group: \"Agent\", label: \"Create, update & delete agents\" },\n \"agent-run:read\": { group: \"Agent Runs\", label: \"View runs & telemetry\" },\n \"agent-run:write\": { group: \"Agent Runs\", label: \"Cancel runs\" },\n \"schedule:read\": { group: \"Schedules\", label: \"View schedules\" },\n \"schedule:write\": {\n group: \"Schedules\",\n label: \"Create & delete schedules\",\n },\n \"slack:write\": { group: \"Integrations\", label: \"Send Slack messages\" },\n };\n\n/**\n * Agent name validation schema\n * - Must be 3-64 characters\n * - Letters, numbers, and hyphens only\n * - Must start and end with letter or number\n */\nconst agentNameSchema = z\n .string()\n .min(3, \"Agent name must be at least 3 characters\")\n .max(64, \"Agent name must be 64 characters or less\")\n .regex(\n AGENT_NAME_REGEX,\n \"Agent name must start and end with letter or number, and contain only letters, numbers, and hyphens\",\n );\n\n/**\n * Volume configuration schema\n */\nconst volumeConfigSchema = z.object({\n name: z.string().min(1, \"Volume name is required\"),\n version: z.string().min(1, \"Volume version is required\"),\n /** When true, skip mounting without error if volume doesn't exist */\n optional: z.boolean().optional(),\n});\n\n/**\n * Agent definition schema\n */\nconst agentDefinitionSchema = z.object({\n description: z.string().optional(),\n framework: z.string().min(1, \"Framework is required\"),\n volumes: z.array(z.string()).optional(),\n environment: z.record(z.string(), z.string()).optional(),\n /**\n * Path to instructions file (e.g., AGENTS.md).\n * Auto-uploaded as volume and mounted at /home/user/.claude/CLAUDE.md\n */\n instructions: z\n .string()\n .min(1, \"Instructions path cannot be empty\")\n .refine(\n (val) =>\n !val.includes(\"..\") && !val.startsWith(\"/\") && !val.startsWith(\"\\\\\"),\n \"Instructions path must be a relative path without '..' segments\",\n )\n .optional(),\n /**\n * Array of GitHub tree URLs for agent skills.\n * Each skill is auto-downloaded and mounted at /home/user/.claude/skills/{skillName}/\n */\n skills: z.array(z.string()).optional(),\n /**\n * Route this agent to a self-hosted runner instead of E2B.\n * When specified, runs will be queued for the specified runner group.\n */\n experimental_runner: z\n .object({\n group: z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Runner group must be in org/name format (e.g., acme/production)\",\n ),\n })\n .optional(),\n /**\n * VM profile for resource allocation (e.g., \"vm0/default\").\n * Determines rootfs image and VM resources (vCPU, memory).\n * Defaults to \"vm0/default\" when omitted.\n */\n experimental_profile: z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Profile must be in org/name format (e.g., vm0/default)\",\n )\n .optional(),\n /**\n * External firewall rules for proxy-side token replacement.\n * CLI input: map format { slack: { permissions: [...] | \"all\" } }\n * — expanded by CLI to full ExpandedFirewallConfig[] before API call.\n */\n experimental_firewalls: z\n .record(\n z.string(),\n z.object({\n permissions: z.union([z.literal(\"all\"), z.array(z.string()).min(1)]),\n }),\n )\n .optional(),\n /**\n * Capabilities that the agent is allowed to use.\n * Validated against VALID_CAPABILITIES at compose time.\n */\n experimental_capabilities: z\n .array(z.enum(VALID_CAPABILITIES))\n .refine((arr) => new Set(arr).size === arr.length, {\n message: \"Duplicate capabilities are not allowed\",\n })\n .optional(),\n});\n\n/**\n * Agent compose YAML content schema (CLI input — experimental_firewalls is map format)\n */\nconst agentComposeContentSchema = z.object({\n version: z.string().min(1, \"Version is required\"),\n agents: z.record(z.string(), agentDefinitionSchema),\n volumes: z.record(z.string(), volumeConfigSchema).optional(),\n});\n\n/**\n * Expanded firewall config schema (after CLI expansion)\n */\nconst expandedFirewallConfigSchema = z.object({\n name: z.string(),\n ref: z.string(),\n description: z.string().optional(),\n apis: z.array(\n z.object({\n base: z.string(),\n auth: z.object({\n headers: z.record(z.string(), z.string()),\n }),\n permissions: z.array(firewallPermissionSchema).optional(),\n }),\n ),\n placeholders: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Agent compose content schema for API requests.\n * Same as agentComposeContentSchema but experimental_firewalls is pre-expanded by CLI.\n */\nconst agentComposeApiContentSchema = z.object({\n version: z.string().min(1, \"Version is required\"),\n agents: z.record(\n z.string(),\n agentDefinitionSchema.extend({\n experimental_firewalls: z.array(expandedFirewallConfigSchema).optional(),\n }),\n ),\n volumes: z.record(z.string(), volumeConfigSchema).optional(),\n});\n\n/**\n * Compose response schema (used in GET responses)\n */\nconst composeResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n headVersionId: z.string().nullable(),\n content: agentComposeApiContentSchema.nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Create/update compose response schema (used in POST responses)\n */\nconst createComposeResponseSchema = z.object({\n composeId: z.string(),\n name: z.string(),\n versionId: z.string(),\n action: z.enum([\"created\", \"existing\"]),\n updatedAt: z.string(),\n});\n\n/**\n * Composes main route contract (/api/agent/composes)\n * Handles GET by name and POST create/update\n */\nexport const composesMainContract = c.router({\n /**\n * GET /api/agent/composes?name={name}&org={org}\n * Get agent compose by name with HEAD version content\n * If org is not provided, uses the authenticated user's default org\n */\n getByName: {\n method: \"GET\",\n path: \"/api/agent/composes\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Missing name query parameter\"),\n org: z.string().optional(),\n }),\n responses: {\n 200: composeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get agent compose by name\",\n },\n\n /**\n * POST /api/agent/composes\n * Create or update an agent compose version\n *\n * Returns 201 when a new compose is created, 200 when updating an existing compose.\n * The action field indicates whether a new version was created or an existing one reused.\n */\n create: {\n method: \"POST\",\n path: \"/api/agent/composes\",\n headers: authHeadersSchema,\n body: z.object({\n content: agentComposeApiContentSchema,\n }),\n responses: {\n 200: createComposeResponseSchema,\n 201: createComposeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Create or update agent compose version\",\n },\n});\n\n/**\n * Composes by ID route contract (/api/agent/composes/[id])\n */\nexport const composesByIdContract = c.router({\n /**\n * GET /api/agent/composes/:id\n * Get agent compose by ID with HEAD version content\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Compose ID is required\"),\n }),\n responses: {\n 200: composeResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent compose by ID\",\n },\n\n /**\n * DELETE /api/agent/composes/:id\n * Delete agent compose and all associated resources (versions, schedules, permissions, etc.)\n * Returns 409 Conflict if agent has running or pending runs\n */\n delete: {\n method: \"DELETE\",\n path: \"/api/agent/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().uuid(\"Compose ID is required\"),\n }),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Delete agent compose\",\n },\n});\n\n/**\n * Composes versions route contract (/api/agent/composes/versions)\n */\nexport const composesVersionsContract = c.router({\n /**\n * GET /api/agent/composes/versions?composeId={id}&version={hash|tag}\n * Resolve a version specifier to a full version ID\n */\n resolveVersion: {\n method: \"GET\",\n path: \"/api/agent/composes/versions\",\n headers: authHeadersSchema,\n query: z.object({\n composeId: z.string().min(1, \"Missing composeId query parameter\"),\n version: composeVersionQuerySchema,\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n tag: z.string().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Resolve version specifier to full version ID\",\n },\n});\n\n/**\n * Compose list item schema (used in list response)\n */\nconst composeListItemSchema = z.object({\n id: z.string(),\n name: z.string(),\n displayName: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n sound: z.string().nullable().optional(),\n headVersionId: z.string().nullable(),\n updatedAt: z.string(),\n});\n\n/**\n * Composes list route contract (/api/agent/composes/list)\n */\nexport const composesListContract = c.router({\n /**\n * GET /api/agent/composes/list?org={org}\n * List all agent composes for an org\n * If org is not provided, uses the authenticated user's default org\n */\n list: {\n method: \"GET\",\n path: \"/api/agent/composes/list\",\n headers: authHeadersSchema,\n query: z.object({\n org: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n composes: z.array(composeListItemSchema),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List all agent composes for an org\",\n },\n});\n\n/**\n * Compose metadata update schema\n */\nconst metadataUpdateSchema = z.object({\n displayName: z.string().optional(),\n description: z.string().optional(),\n sound: z.string().optional(),\n});\n\n/**\n * Composes metadata route contract (/api/agent/composes/[id]/metadata)\n */\nexport const composesMetadataContract = c.router({\n /**\n * PATCH /api/agent/composes/:id/metadata\n * Update agent compose metadata (displayName, description, sound)\n */\n updateMetadata: {\n method: \"PATCH\",\n path: \"/api/agent/composes/:id/metadata\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Compose ID is required\"),\n }),\n body: metadataUpdateSchema,\n responses: {\n 200: z.object({ ok: z.literal(true) }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update agent compose metadata\",\n },\n});\n\n/**\n * Compose instructions response schema\n */\nconst composeInstructionsResponseSchema = z.object({\n content: z.string().nullable(),\n filename: z.string().nullable(),\n});\n\n/**\n * Composes instructions route contract (/api/agent/composes/[id]/instructions)\n */\nexport const composesInstructionsContract = c.router({\n /**\n * GET /api/agent/composes/:id/instructions\n * Get the instructions content for an agent compose\n */\n getInstructions: {\n method: \"GET\",\n path: \"/api/agent/composes/:id/instructions\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Compose ID is required\"),\n }),\n responses: {\n 200: composeInstructionsResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent compose instructions content\",\n },\n});\n\nexport type ComposesMainContract = typeof composesMainContract;\nexport type ComposesByIdContract = typeof composesByIdContract;\nexport type ComposesVersionsContract = typeof composesVersionsContract;\nexport type ComposesListContract = typeof composesListContract;\nexport type ComposesMetadataContract = typeof composesMetadataContract;\nexport type ComposesInstructionsContract = typeof composesInstructionsContract;\n\n// Export schemas for reuse\nexport {\n agentNameSchema,\n volumeConfigSchema,\n agentDefinitionSchema,\n agentComposeContentSchema,\n agentComposeApiContentSchema,\n composeResponseSchema,\n composeListItemSchema,\n metadataUpdateSchema,\n composeInstructionsResponseSchema,\n};\n\n// Export inferred types for consumers\nexport type ComposeResponse = z.infer<typeof composeResponseSchema>;\nexport type ComposeListItem = z.infer<typeof composeListItemSchema>;\n","import { z } from \"zod\";\nimport type { ConnectorType } from \"./connectors\";\n\n/**\n * Proxy-side firewall configuration for token replacement.\n *\n * All firewall zod schemas are defined here as the single source of truth.\n * Other modules (composes.ts, runners.ts) import from here.\n *\n * Firewall configs are hosted in GitHub: vm0-ai/vm0-firewalls\n * See expandFirewallConfigs() in firewall-expander.ts for resolution logic.\n */\n\n/**\n * Firewall permission schema — a named permission group with matching rules.\n * Rules use the format `METHOD /path` where path is relative to the API entry's base URL.\n */\nexport const firewallPermissionSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n rules: z.array(z.string()),\n});\n\n/**\n * Firewall API entry — a base URL with auth headers and optional permissions.\n */\nexport const firewallApiSchema = z.object({\n base: z.string(),\n auth: z.object({\n headers: z.record(z.string(), z.string()),\n }),\n permissions: z.array(firewallPermissionSchema).optional(),\n});\n\n/**\n * A single firewall with its name, ref, and API entries.\n * Used in the expanded (post-compose) format.\n */\nexport const firewallSchema = z.object({\n name: z.string(),\n ref: z.string(),\n apis: z.array(firewallApiSchema),\n});\n\n/**\n * Experimental firewall configuration for proxy-side token replacement.\n * Flat array of firewall entries: [{ name, ref, apis }]\n */\nexport const experimentalFirewallsSchema = z.array(firewallSchema);\n\n/**\n * Zod schema for validating firewall config (GitHub-hosted YAML).\n */\nexport const firewallConfigSchema = z.object({\n name: z.string().min(1, \"Firewall name is required\"),\n description: z.string().optional(),\n apis: z\n .array(firewallApiSchema)\n .min(1, \"Firewall must have at least one API entry\"),\n placeholders: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Firewall policy value — per-permission access control.\n * - \"allow\": always allow without prompting\n * - \"deny\": always deny\n * - \"ask\": prompt user for approval each time\n */\nexport const firewallPolicyValueSchema = z.enum([\"allow\", \"deny\", \"ask\"]);\nexport type FirewallPolicyValue = z.infer<typeof firewallPolicyValueSchema>;\n\n/**\n * Firewall policies — nested map of firewall ref → permission name → policy.\n * Example: { \"github\": { \"repo-read\": \"allow\", \"issues-write\": \"deny\" } }\n */\nexport const firewallPoliciesSchema = z.record(\n z.string(),\n z.record(z.string(), firewallPolicyValueSchema),\n);\nexport type FirewallPolicies = z.infer<typeof firewallPoliciesSchema>;\n\n/** Inferred types */\nexport type FirewallApi = z.infer<typeof firewallApiSchema>;\nexport type FirewallConfig = z.infer<typeof firewallConfigSchema>;\nexport type Firewall = z.infer<typeof firewallSchema>;\nexport type ExperimentalFirewalls = z.infer<typeof experimentalFirewallsSchema>;\n\n/**\n * Maps connector types (skill short names) to their builtin firewall ref(s).\n * Only includes connectors that have builtin firewall configs.\n */\nconst CONNECTOR_FIREWALL_REFS: Readonly<\n Partial<Record<ConnectorType, readonly string[]>>\n> = {\n agentmail: [\"agentmail\"],\n ahrefs: [\"ahrefs\"],\n airtable: [\"airtable\"],\n asana: [\"asana\"],\n axiom: [\"axiom\"],\n \"brave-search\": [\"brave-search\"],\n clickup: [\"clickup\"],\n cloudflare: [\"cloudflare\"],\n deepseek: [\"deepseek\"],\n discord: [\"discord\"],\n github: [\"github\"],\n gitlab: [\"gitlab\"],\n slack: [\"slack\"],\n gmail: [\"gmail\"],\n \"google-sheets\": [\"google-sheets\"],\n \"google-docs\": [\"google-docs\"],\n \"google-drive\": [\"google-drive\"],\n \"google-calendar\": [\"google-calendar\"],\n elevenlabs: [\"elevenlabs\"],\n fal: [\"fal\"],\n hubspot: [\"hubspot\"],\n atlassian: [\"jira\", \"confluence\"],\n jira: [\"jira\"],\n linear: [\"linear\"],\n monday: [\"monday\"],\n neon: [\"neon\"],\n figma: [\"figma\"],\n firecrawl: [\"firecrawl\"],\n notion: [\"notion\"],\n openai: [\"openai\"],\n perplexity: [\"perplexity\"],\n posthog: [\"posthog\"],\n resend: [\"resend\"],\n sentry: [\"sentry\"],\n serpapi: [\"serpapi\"],\n stripe: [\"stripe\"],\n supabase: [\"supabase\"],\n tavily: [\"tavily\"],\n todoist: [\"todoist\"],\n vercel: [\"vercel\"],\n x: [\"x\"],\n youtube: [\"youtube\"],\n zapier: [\"zapier\"],\n zapsign: [\"zapsign\"],\n zeptomail: [\"zeptomail\"],\n};\n\n/** Get the firewall ref names for a connector type. Returns empty array if none. */\nexport function getFirewallRefsForConnector(\n connector: ConnectorType,\n): string[] {\n return [...(CONNECTOR_FIREWALL_REFS[connector] ?? [])];\n}\n\n/**\n * Regex pattern matching `${{ secrets.XXX }}` references in auth header templates.\n * Tolerates optional whitespace inside braces: `${{ secrets.X }}` and `${{secrets.X}}`.\n */\nconst AUTH_SECRET_PATTERN =\n /\\$\\{\\{\\s*secrets\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g;\n\n/**\n * Extract all secret names referenced in firewall rule auth header templates.\n * E.g., `Bearer ${{ secrets.GITHUB_TOKEN }}` → `[\"GITHUB_TOKEN\"]`\n */\nexport function extractSecretNamesFromApis(\n apis: FirewallConfig[\"apis\"],\n): string[] {\n const names = new Set<string>();\n for (const entry of apis) {\n for (const value of Object.values(entry.auth.headers)) {\n for (const match of value.matchAll(AUTH_SECRET_PATTERN)) {\n names.add(match[1]!);\n }\n }\n }\n return [...names];\n}\n\n/**\n * Expanded firewall config stored in compose content.\n * Resolved from firewall name + FirewallConfig at compose time, then frozen.\n *\n * - `name`: firewall config name (e.g., \"slack\")\n * - `ref`: key used in vm0.yaml to reference this firewall config\n * - `description`: optional description from the firewall config\n */\nexport interface ExpandedFirewallConfig {\n name: string;\n ref: string;\n description?: string;\n apis: FirewallApi[];\n placeholders?: Record<string, string>;\n}\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { triggerSourceSchema } from \"./logs\";\nimport { orgTierSchema } from \"./orgs\";\n\nconst c = initContract();\n\n/**\n * All valid run status values\n */\nexport const ALL_RUN_STATUSES = [\n \"queued\",\n \"pending\",\n \"running\",\n \"completed\",\n \"failed\",\n \"timeout\",\n \"cancelled\",\n] as const;\n\n/**\n * Run status enum\n */\nconst runStatusSchema = z.enum(ALL_RUN_STATUSES);\n\n/**\n * Unified run request schema - supports all run modes via optional parameters\n */\nconst unifiedRunRequestSchema = z.object({\n // High-level shortcuts (mutually exclusive with each other)\n checkpointId: z.string().optional(),\n sessionId: z.string().optional(),\n\n // Base parameters (can be used directly or overridden after shortcut expansion)\n agentComposeId: z.string().optional(),\n agentComposeVersionId: z.string().optional(),\n conversationId: z.string().optional(),\n artifactName: z.string().optional(),\n artifactVersion: z.string().optional(),\n vars: z.record(z.string(), z.string()).optional(),\n secrets: z.record(z.string(), z.string()).optional(),\n volumeVersions: z.record(z.string(), z.string()).optional(),\n memoryName: z.string().optional(),\n\n // Debug flag to force real Claude in mock environments (internal use only)\n debugNoMockClaude: z.boolean().optional(),\n\n // Model provider for automatic secret injection\n modelProvider: z.string().optional(),\n\n // Environment validation flag - when true, validates secrets/vars before running\n checkEnv: z.boolean().optional(),\n\n // Required\n prompt: z.string().min(1, \"Missing prompt\"),\n\n // Optional system prompt to append to the agent's system prompt\n appendSystemPrompt: z.string().optional(),\n\n // Optional list of tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(z.string()).optional(),\n\n // Optional list of tools to make available in Claude CLI (passed as --tools)\n tools: z.array(z.string()).optional(),\n\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n\n // How the run was triggered (defaults to \"cli\" on the server if not provided)\n triggerSource: triggerSourceSchema.optional(),\n});\n\n/**\n * Create run response schema\n */\nconst createRunResponseSchema = z.object({\n runId: z.string(),\n status: runStatusSchema,\n sandboxId: z.string().optional(),\n output: z.string().optional(),\n error: z.string().optional(),\n executionTimeMs: z.number().optional(),\n createdAt: z.string(),\n});\n\n/**\n * Get run response schema\n */\nconst getRunResponseSchema = z.object({\n runId: z.string(),\n agentComposeVersionId: z.string().nullable(),\n status: runStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n vars: z.record(z.string(), z.string()).optional(),\n sandboxId: z.string().optional(),\n result: z\n .object({\n output: z.string().optional(),\n executionTimeMs: z.number().optional(),\n agentSessionId: z.string().optional(),\n checkpointId: z.string().optional(),\n conversationId: z.string().optional(),\n })\n .passthrough()\n .optional(),\n error: z.string().optional(),\n createdAt: z.string(),\n startedAt: z.string().optional(),\n completedAt: z.string().optional(),\n});\n\n/**\n * Run event schema\n */\nconst runEventSchema = z.object({\n sequenceNumber: z.number(),\n eventType: z.string(),\n eventData: z.unknown(),\n createdAt: z.string(),\n});\n\n/**\n * Run result schema (present when status = 'completed')\n */\nconst runResultSchema = z.object({\n checkpointId: z.string(),\n agentSessionId: z.string(),\n conversationId: z.string(),\n artifact: z.record(z.string(), z.string()).optional(), // optional when run has no artifact\n volumes: z.record(z.string(), z.string()).optional(),\n memory: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Run state schema (replaces vm0_start/vm0_result/vm0_error events)\n */\nconst runStateSchema = z.object({\n status: runStatusSchema,\n result: runResultSchema.optional(),\n error: z.string().optional(),\n});\n\n/**\n * Events response schema\n */\nconst eventsResponseSchema = z.object({\n events: z.array(runEventSchema),\n hasMore: z.boolean(),\n nextSequence: z.number(),\n run: runStateSchema,\n framework: z.string(),\n});\n\n/**\n * Run list item schema\n */\nconst runListItemSchema = z.object({\n id: z.string(),\n agentName: z.string(),\n status: runStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n});\n\n/**\n * Runs list response schema\n */\nconst runsListResponseSchema = z.object({\n runs: z.array(runListItemSchema),\n});\n\n/**\n * Runs main route contract (/api/agent/runs)\n * Handles GET list and POST create\n */\nexport const runsMainContract = c.router({\n /**\n * GET /api/agent/runs\n * List agent runs (pending and running by default)\n */\n list: {\n method: \"GET\",\n path: \"/api/agent/runs\",\n headers: authHeadersSchema,\n query: z.object({\n status: z.string().optional(), // comma-separated: \"pending,running\"\n agent: z.string().optional(), // agent name filter\n since: z.string().optional(), // ISO timestamp\n until: z.string().optional(), // ISO timestamp\n limit: z.coerce.number().min(1).max(100).default(50),\n }),\n responses: {\n 200: runsListResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List agent runs\",\n },\n /**\n * POST /api/agent/runs\n * Create and execute a new agent run\n */\n create: {\n method: \"POST\",\n path: \"/api/agent/runs\",\n headers: authHeadersSchema,\n body: unifiedRunRequestSchema,\n responses: {\n 201: createRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 422: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create and execute agent run\",\n },\n});\n\n/**\n * Runs by ID route contract (/api/agent/runs/[id])\n */\nexport const runsByIdContract = c.router({\n /**\n * GET /api/agent/runs/:id\n * Get agent run status and results\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/runs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n responses: {\n 200: getRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run by ID\",\n },\n});\n\n/**\n * Cancel run response schema\n */\nconst cancelRunResponseSchema = z.object({\n id: z.string(),\n status: z.literal(\"cancelled\"),\n message: z.string(),\n});\n\n/**\n * Runs cancel route contract (/api/agent/runs/[id]/cancel)\n */\nexport const runsCancelContract = c.router({\n /**\n * POST /api/agent/runs/:id/cancel\n * Cancel a pending or running run\n */\n cancel: {\n method: \"POST\",\n path: \"/api/agent/runs/:id/cancel\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n body: z.undefined(),\n responses: {\n 200: cancelRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Cancel a pending or running run\",\n },\n});\n\n/**\n * Run events route contract (/api/agent/runs/[id]/events)\n */\nexport const runEventsContract = c.router({\n /**\n * GET /api/agent/runs/:id/events\n * Poll for agent run events with pagination\n */\n getEvents: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/events\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().default(-1),\n limit: z.coerce.number().default(100),\n }),\n responses: {\n 200: eventsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run events\",\n },\n});\n\n/**\n * Telemetry metric schema\n */\nconst telemetryMetricSchema = z.object({\n ts: z.string(),\n cpu: z.number(),\n mem_used: z.number(),\n mem_total: z.number(),\n disk_used: z.number(),\n disk_total: z.number(),\n});\n\n/**\n * System log response schema\n */\nconst systemLogResponseSchema = z.object({\n systemLog: z.string(),\n hasMore: z.boolean(),\n});\n\n/**\n * Metrics response schema\n */\nconst metricsResponseSchema = z.object({\n metrics: z.array(telemetryMetricSchema),\n hasMore: z.boolean(),\n});\n\n/**\n * Agent events response schema (for logs command)\n */\nconst agentEventsResponseSchema = z.object({\n events: z.array(runEventSchema),\n hasMore: z.boolean(),\n framework: z.string(),\n});\n\n/**\n * Network log entry schema (MITM proxy)\n * [NETWORK_LOG_FIELDS] — keep in sync with all network log schemas\n */\nconst networkLogEntrySchema = z.object({\n timestamp: z.string(),\n type: z.string().optional(),\n action: z.enum([\"ALLOW\", \"DENY\"]).optional(),\n host: z.string().optional(),\n port: z.number().optional(),\n method: z.string().optional(),\n url: z.string().optional(),\n status: z.number().optional(),\n latency_ms: z.number().optional(),\n request_size: z.number().optional(),\n response_size: z.number().optional(),\n firewall_base: z.string().optional(),\n firewall_name: z.string().optional(),\n firewall_ref: z.string().optional(),\n firewall_permission: z.string().optional(),\n firewall_rule_match: z.string().optional(),\n firewall_params: z.record(z.string(), z.string()).optional(),\n firewall_error: z.string().optional(),\n error: z.string().optional(),\n});\n\n/**\n * Network logs response schema\n */\nconst networkLogsResponseSchema = z.object({\n networkLogs: z.array(networkLogEntrySchema),\n hasMore: z.boolean(),\n});\n\n/**\n * Telemetry response schema (legacy - combined format)\n */\nconst telemetryResponseSchema = z.object({\n systemLog: z.string(),\n metrics: z.array(telemetryMetricSchema),\n});\n\n/**\n * Run telemetry route contract (/api/agent/runs/[id]/telemetry)\n * Legacy combined format\n */\nexport const runTelemetryContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry\n * Get aggregated telemetry data for a run (legacy combined format)\n */\n getTelemetry: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n responses: {\n 200: telemetryResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get run telemetry data\",\n },\n});\n\n/**\n * System log route contract (/api/agent/runs/[id]/telemetry/system-log)\n */\nexport const runSystemLogContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/system-log\n * Get system log with pagination\n */\n getSystemLog: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/system-log\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: systemLogResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get system log with pagination\",\n },\n});\n\n/**\n * Metrics route contract (/api/agent/runs/[id]/telemetry/metrics)\n */\nexport const runMetricsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/metrics\n * Get metrics with pagination\n */\n getMetrics: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/metrics\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: metricsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get metrics with pagination\",\n },\n});\n\n/**\n * Agent events route contract (/api/agent/runs/[id]/telemetry/agent)\n */\nexport const runAgentEventsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/agent\n * Get agent events with pagination (for vm0 logs default)\n */\n getAgentEvents: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/agent\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: agentEventsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent events with pagination\",\n },\n});\n\n/**\n * Network logs route contract (/api/agent/runs/[id]/telemetry/network)\n */\nexport const runNetworkLogsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/network\n * Get network logs with pagination (for vm0 logs --network)\n */\n getNetworkLogs: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/network\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: networkLogsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get network logs with pagination\",\n },\n});\n\nexport type RunsMainContract = typeof runsMainContract;\nexport type RunsByIdContract = typeof runsByIdContract;\nexport type RunsCancelContract = typeof runsCancelContract;\nexport type RunEventsContract = typeof runEventsContract;\nexport type RunTelemetryContract = typeof runTelemetryContract;\nexport type RunSystemLogContract = typeof runSystemLogContract;\nexport type RunMetricsContract = typeof runMetricsContract;\nexport type RunAgentEventsContract = typeof runAgentEventsContract;\nexport type RunNetworkLogsContract = typeof runNetworkLogsContract;\n\n/**\n * Logs search result schema\n */\nconst searchResultSchema = z.object({\n runId: z.string(),\n agentName: z.string(),\n matchedEvent: runEventSchema,\n contextBefore: z.array(runEventSchema),\n contextAfter: z.array(runEventSchema),\n});\n\n/**\n * Logs search response schema\n */\nconst logsSearchResponseSchema = z.object({\n results: z.array(searchResultSchema),\n hasMore: z.boolean(),\n});\n\n/**\n * Logs search route contract (/api/logs/search)\n * Search agent events across runs\n */\nexport const logsSearchContract = c.router({\n /**\n * GET /api/logs/search\n * Search agent events across runs using keyword matching\n */\n searchLogs: {\n method: \"GET\",\n path: \"/api/logs/search\",\n headers: authHeadersSchema,\n query: z.object({\n keyword: z.string().min(1),\n agent: z.string().optional(),\n runId: z.string().optional(),\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(50).default(20),\n before: z.coerce.number().min(0).max(10).default(0),\n after: z.coerce.number().min(0).max(10).default(0),\n }),\n responses: {\n 200: logsSearchResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"Search agent events across runs\",\n },\n});\n\nexport type LogsSearchContract = typeof logsSearchContract;\n\n/**\n * Queue entry schema — own entries have real data, others have null for private fields\n * Ownership is detected via runId: non-null = own entry, null = other user's entry\n */\nconst queueEntrySchema = z.object({\n position: z.number(),\n agentName: z.string().nullable(),\n agentDisplayName: z.string().nullable(),\n userEmail: z.string().nullable(),\n createdAt: z.string(),\n isOwner: z.boolean(),\n runId: z.string().nullable(),\n prompt: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n sessionLink: z.string().nullable(),\n});\n\n/**\n * Running task schema — shows currently executing runs\n */\nconst runningTaskSchema = z.object({\n runId: z.string().nullable(),\n agentName: z.string(),\n agentDisplayName: z.string().nullable(),\n userEmail: z.string(),\n startedAt: z.string().nullable(),\n isOwner: z.boolean(),\n});\n\n/**\n * Concurrency info schema\n */\nconst concurrencyInfoSchema = z.object({\n tier: orgTierSchema,\n limit: z.number(),\n active: z.number(),\n available: z.number(),\n});\n\n/**\n * Queue response schema\n */\nconst queueResponseSchema = z.object({\n concurrency: concurrencyInfoSchema,\n queue: z.array(queueEntrySchema),\n runningTasks: z.array(runningTaskSchema),\n estimatedTimePerRun: z.number().nullable(),\n});\n\n/**\n * Runs queue route contract (/api/agent/runs/queue)\n * Returns org-wide queue status with concurrency context\n */\nexport const runsQueueContract = c.router({\n /**\n * GET /api/agent/runs/queue\n * Get org run queue status including concurrency context and queued entries\n */\n getQueue: {\n method: \"GET\",\n path: \"/api/agent/runs/queue\",\n headers: authHeadersSchema,\n responses: {\n 200: queueResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get org run queue status\",\n },\n});\n\nexport type RunsQueueContract = typeof runsQueueContract;\n\n// Export schemas for reuse\nexport {\n runStatusSchema,\n unifiedRunRequestSchema,\n createRunResponseSchema,\n getRunResponseSchema,\n runListItemSchema,\n runsListResponseSchema,\n cancelRunResponseSchema,\n runEventSchema,\n runResultSchema,\n runStateSchema,\n eventsResponseSchema,\n telemetryMetricSchema,\n telemetryResponseSchema,\n systemLogResponseSchema,\n metricsResponseSchema,\n agentEventsResponseSchema,\n networkLogEntrySchema,\n networkLogsResponseSchema,\n searchResultSchema,\n logsSearchResponseSchema,\n queueEntrySchema,\n runningTaskSchema,\n concurrencyInfoSchema,\n queueResponseSchema,\n};\n\n// Export inferred types for consumers\nexport type RunStatus = z.infer<typeof runStatusSchema>;\nexport type RunResult = z.infer<typeof runResultSchema>;\nexport type RunState = z.infer<typeof runStateSchema>;\nexport type RunEvent = z.infer<typeof runEventSchema>;\nexport type CreateRunResponse = z.infer<typeof createRunResponseSchema>;\nexport type GetRunResponse = z.infer<typeof getRunResponseSchema>;\nexport type RunListItem = z.infer<typeof runListItemSchema>;\nexport type RunsListResponse = z.infer<typeof runsListResponseSchema>;\nexport type CancelRunResponse = z.infer<typeof cancelRunResponseSchema>;\nexport type EventsResponse = z.infer<typeof eventsResponseSchema>;\nexport type TelemetryMetric = z.infer<typeof telemetryMetricSchema>;\nexport type TelemetryResponse = z.infer<typeof telemetryResponseSchema>;\nexport type SystemLogResponse = z.infer<typeof systemLogResponseSchema>;\nexport type MetricsResponse = z.infer<typeof metricsResponseSchema>;\nexport type AgentEventsResponse = z.infer<typeof agentEventsResponseSchema>;\nexport type NetworkLogEntry = z.infer<typeof networkLogEntrySchema>;\nexport type NetworkLogsResponse = z.infer<typeof networkLogsResponseSchema>;\nexport type SearchResult = z.infer<typeof searchResultSchema>;\nexport type LogsSearchResponse = z.infer<typeof logsSearchResponseSchema>;\nexport type QueueEntry = z.infer<typeof queueEntrySchema>;\nexport type RunningTask = z.infer<typeof runningTaskSchema>;\nexport type ConcurrencyInfo = z.infer<typeof concurrencyInfoSchema>;\nexport type QueueResponse = z.infer<typeof queueResponseSchema>;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\n/**\n * Cursor-based pagination schema with total pages\n */\nexport const paginationSchema = z.object({\n hasMore: z.boolean(),\n nextCursor: z.string().nullable(),\n totalPages: z.number(),\n});\n\nexport type Pagination = z.infer<typeof paginationSchema>;\n\n/**\n * Common query parameters for list endpoints\n */\nconst listQuerySchema = z.object({\n cursor: z.string().optional(),\n limit: z.coerce.number().min(1).max(100).default(20),\n});\n\nconst c = initContract();\n\n/**\n * Run status enum for logs\n */\nconst logStatusSchema = z.enum([\n \"queued\",\n \"pending\",\n \"running\",\n \"completed\",\n \"failed\",\n \"timeout\",\n \"cancelled\",\n]);\n\n/**\n * Trigger source enum — how the run was initiated\n */\nexport const triggerSourceSchema = z.enum([\n \"schedule\",\n \"web\",\n \"slack\",\n \"email\",\n \"telegram\",\n \"github\",\n \"cli\",\n]);\n\nexport type TriggerSource = z.infer<typeof triggerSourceSchema>;\n\n/**\n * Log entry in list response - includes basic fields for list display\n */\nconst logEntrySchema = z.object({\n id: z.uuid(),\n sessionId: z.string().nullable(),\n agentId: z.string().nullable(),\n displayName: z.string().nullable(),\n orgSlug: z.string().nullable(),\n framework: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n status: logStatusSchema,\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n});\n\n/**\n * Available filter values returned by the list endpoint\n */\nconst logsFiltersSchema = z.object({\n statuses: z.array(logStatusSchema),\n sources: z.array(triggerSourceSchema),\n agents: z.array(z.string()),\n});\n\nexport type LogsFilters = z.infer<typeof logsFiltersSchema>;\n\n/**\n * Logs list response schema with pagination\n */\nconst logsListResponseSchema = z.object({\n data: z.array(logEntrySchema),\n pagination: paginationSchema,\n filters: logsFiltersSchema,\n});\n\n/**\n * Artifact information schema\n */\nconst artifactSchema = z.object({\n name: z.string().nullable(),\n version: z.string().nullable(),\n});\n\n/**\n * Log detail response schema\n */\nconst logDetailSchema = z.object({\n id: z.uuid(),\n sessionId: z.string().nullable(),\n agentId: z.string().nullable(),\n displayName: z.string().nullable(),\n framework: z.string().nullable(),\n modelProvider: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n status: logStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n error: z.string().nullable(),\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n artifact: artifactSchema,\n});\n\n/**\n * Logs list contract\n * GET /api/zero/logs\n */\nexport const logsListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/logs\",\n query: listQuerySchema.extend({\n search: z.string().optional(),\n agent: z.string().optional(),\n name: z.string().optional(),\n org: z.string().optional(),\n status: logStatusSchema.optional(),\n triggerSource: triggerSourceSchema.optional(),\n }),\n responses: {\n 200: logsListResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"List agent run logs with pagination\",\n },\n});\n\n/**\n * Logs by ID contract\n * GET /api/zero/logs/:id\n */\nexport const logsByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/logs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().uuid(\"Invalid log ID\"),\n }),\n responses: {\n 200: logDetailSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run log details by ID\",\n },\n});\n\n// Contract type exports\nexport type LogsListContract = typeof logsListContract;\nexport type LogsByIdContract = typeof logsByIdContract;\n\n// Schema exports for reuse\nexport {\n logStatusSchema,\n logEntrySchema,\n logsListResponseSchema,\n artifactSchema,\n logDetailSchema,\n};\n\n// Inferred type exports\nexport type LogStatus = z.infer<typeof logStatusSchema>;\nexport type LogEntry = z.infer<typeof logEntrySchema>;\nexport type LogsListResponse = z.infer<typeof logsListResponseSchema>;\nexport type Artifact = z.infer<typeof artifactSchema>;\nexport type LogDetail = z.infer<typeof logDetailSchema>;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgRoleSchema } from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Org tier values\n */\nexport const orgTierSchema = z.enum([\"free\", \"pro\", \"team\"]);\nexport type OrgTier = z.infer<typeof orgTierSchema>;\n\n/**\n * Org slug validation\n * - 3-64 characters (or 1-2 for single/double char slugs)\n * - lowercase letters, numbers, and hyphens only\n * - must start and end with alphanumeric\n */\nexport const orgSlugSchema = z\n .string()\n .min(3, \"Org slug must be at least 3 characters\")\n .max(64, \"Org slug must be at most 64 characters\")\n .regex(\n /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]{1,2}$/,\n \"Org slug must contain only lowercase letters, numbers, and hyphens, and must start and end with an alphanumeric character\",\n )\n .transform((s) => s.toLowerCase());\n\n/**\n * Org response schema\n */\nexport const orgResponseSchema = z.object({\n id: z.string(),\n slug: z.string(),\n name: z.string(),\n tier: z.string().optional(),\n role: orgRoleSchema.optional(),\n});\n\nexport type OrgResponse = z.infer<typeof orgResponseSchema>;\n\n/**\n * Update org request schema\n */\nexport const updateOrgRequestSchema = z.object({\n slug: orgSlugSchema.optional(),\n name: z.string().min(1).max(128).optional(),\n force: z.boolean().optional().default(false),\n});\n\nexport type UpdateOrgRequest = z.infer<typeof updateOrgRequestSchema>;\n\n/**\n * Org default agent contract for /api/zero/default-agent\n */\nexport const orgDefaultAgentContract = c.router({\n /**\n * PUT /api/zero/default-agent?org={slug}\n * Set or unset the default agent for an org.\n * Only org admins can perform this action.\n * The agent must belong to the same org.\n */\n setDefaultAgent: {\n method: \"PUT\",\n path: \"/api/zero/default-agent\",\n headers: authHeadersSchema,\n query: z.object({\n org: z.string().optional(),\n }),\n body: z.object({\n agentId: z.uuid().nullable(),\n }),\n responses: {\n 200: z.object({\n agentId: z.uuid().nullable(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Set or unset the default agent for an org\",\n },\n});\n\nexport type OrgDefaultAgentContract = typeof orgDefaultAgentContract;\n","import { z } from \"zod\";\n\n/**\n * Org role enum\n */\nexport const orgRoleSchema = z.enum([\"admin\", \"member\"]);\nexport type OrgRole = z.infer<typeof orgRoleSchema>;\n\n/**\n * Org member schema\n */\nexport const orgMemberSchema = z.object({\n userId: z.string(),\n email: z.string(),\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n imageUrl: z.string(),\n role: orgRoleSchema,\n joinedAt: z.string(),\n});\nexport type OrgMember = z.infer<typeof orgMemberSchema>;\n\n/**\n * Pending invitation schema\n */\nexport const orgPendingInvitationSchema = z.object({\n email: z.string(),\n role: orgRoleSchema,\n createdAt: z.string(),\n});\nexport type OrgPendingInvitation = z.infer<typeof orgPendingInvitationSchema>;\n\n/**\n * Org members response schema (status + members list)\n */\nexport const orgMembersResponseSchema = z.object({\n slug: z.string(),\n role: orgRoleSchema,\n members: z.array(orgMemberSchema),\n pendingInvitations: z.array(orgPendingInvitationSchema).optional(),\n createdAt: z.string(),\n});\nexport type OrgMembersResponse = z.infer<typeof orgMembersResponseSchema>;\n\n/**\n * Invite member request schema\n */\nexport const inviteOrgMemberRequestSchema = z.object({\n email: z.string().email(),\n});\nexport type InviteOrgMemberRequest = z.infer<\n typeof inviteOrgMemberRequestSchema\n>;\n\n/**\n * Remove member request schema\n */\nexport const removeOrgMemberRequestSchema = z.object({\n email: z.string().email(),\n});\nexport type RemoveOrgMemberRequest = z.infer<\n typeof removeOrgMemberRequestSchema\n>;\n\n/**\n * Update member role request schema\n */\nexport const updateOrgMemberRoleRequestSchema = z.object({\n email: z.string().email(),\n role: orgRoleSchema,\n});\nexport type UpdateOrgMemberRoleRequest = z.infer<\n typeof updateOrgMemberRoleRequestSchema\n>;\n\n/**\n * Simple message response schema\n */\nexport const orgMessageResponseSchema = z.object({\n message: z.string(),\n});\nexport type OrgMessageResponse = z.infer<typeof orgMessageResponseSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Storage type enum\n */\nconst storageTypeSchema = z.enum([\"volume\", \"artifact\", \"memory\"]);\n\n/**\n * Version ID query parameter schema\n *\n * Validates hex format (8-64 characters). Used for version prefix resolution.\n */\nconst versionQuerySchema = z\n .string()\n .regex(/^[a-f0-9]{8,64}$/i, \"Version must be 8-64 hex characters\")\n .optional();\n\n/**\n * Upload storage response schema (JSON part of POST response)\n */\nconst uploadStorageResponseSchema = z.object({\n name: z.string(),\n versionId: z.string(),\n size: z.number(),\n fileCount: z.number(),\n type: storageTypeSchema,\n deduplicated: z.boolean(),\n});\n\n/**\n * Storages contract for /api/storages\n *\n * Note: This API handles binary file upload/download:\n * - POST: Multipart form data upload, returns JSON\n * - GET: Query params, returns binary tar.gz file\n *\n * The contract defines the JSON parts for type safety.\n * Binary response handling is done at the route level.\n */\nexport const storagesContract = c.router({\n /**\n * POST /api/storages\n * Upload a storage (tar.gz file)\n *\n * Content-Type: multipart/form-data\n * Form fields:\n * - name: string (storage name, 3-64 chars, lowercase alphanumeric with hyphens)\n * - file: File (tar.gz archive)\n * - type: \"volume\" | \"artifact\" (optional, defaults to \"volume\")\n * - force: \"true\" | \"false\" (optional, skip deduplication)\n */\n upload: {\n method: \"POST\",\n path: \"/api/storages\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: uploadStorageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage archive\",\n },\n\n /**\n * GET /api/storages\n * Download a storage as tar.gz file\n *\n * Query params:\n * - name: string (required, storage name)\n * - version: string (optional, version ID or prefix)\n *\n * Returns: Binary tar.gz file (application/gzip)\n */\n download: {\n method: \"GET\",\n path: \"/api/storages\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Storage name is required\"),\n version: versionQuerySchema,\n }),\n responses: {\n // Binary response - actual handling done at route level\n 200: c.otherResponse({\n contentType: \"application/gzip\",\n body: c.type<Blob>(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Download storage archive\",\n },\n});\n\nexport type StoragesContract = typeof storagesContract;\n\n// ============================================================================\n// Direct Upload Schemas (for CLI and Webhook endpoints)\n// ============================================================================\n\n/**\n * Maximum file size per file in bytes (100MB)\n */\nexport const MAX_FILE_SIZE_BYTES = 104_857_600;\n\n/**\n * File entry with hash for content-addressable storage\n */\nexport const fileEntryWithHashSchema = z.object({\n path: z.string().min(1, \"File path is required\"),\n hash: z.string().length(64, \"Hash must be SHA-256 (64 hex chars)\"),\n size: z\n .number()\n .int()\n .min(0, \"Size must be non-negative\")\n .max(MAX_FILE_SIZE_BYTES, \"File size exceeds 100MB limit\"),\n});\n\n/**\n * Incremental changes schema for partial uploads\n */\nexport const storageChangesSchema = z.object({\n added: z.array(z.string()),\n modified: z.array(z.string()),\n deleted: z.array(z.string()),\n});\n\n/**\n * Presigned upload URL schema\n */\nexport const presignedUploadSchema = z.object({\n key: z.string(),\n presignedUrl: z.url(),\n});\n\n// ============================================================================\n// Direct Upload Contracts (CLI endpoints)\n// ============================================================================\n\n/**\n * Storage prepare contract for /api/storages/prepare\n *\n * Prepares for direct S3 upload by:\n * 1. Computing content hash from file metadata\n * 2. Checking for existing version (deduplication)\n * 3. Generating presigned URLs if upload needed\n */\nexport const storagesPrepareContract = c.router({\n prepare: {\n method: \"POST\",\n path: \"/api/storages/prepare\",\n headers: authHeadersSchema,\n body: z.object({\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n files: z.array(fileEntryWithHashSchema),\n force: z.boolean().optional(),\n runId: z.string().optional(), // For sandbox auth\n baseVersion: z.string().optional(), // For incremental uploads\n changes: storageChangesSchema.optional(),\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n existing: z.boolean(),\n uploads: z\n .object({\n archive: presignedUploadSchema,\n manifest: presignedUploadSchema,\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Prepare for direct S3 upload\",\n },\n});\n\n/**\n * Storage commit contract for /api/storages/commit\n *\n * Commits a direct S3 upload by:\n * 1. Verifying uploaded files exist in S3\n * 2. Creating storage version record\n * 3. Updating storage HEAD pointer\n */\nexport const storagesCommitContract = c.router({\n commit: {\n method: \"POST\",\n path: \"/api/storages/commit\",\n headers: authHeadersSchema,\n body: z.object({\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n versionId: z.string().min(1, \"Version ID is required\"),\n files: z.array(fileEntryWithHashSchema),\n runId: z.string().optional(),\n message: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n success: z.literal(true),\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n deduplicated: z.boolean().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema, // S3 files missing\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Commit uploaded storage\",\n },\n});\n\n/**\n * Storage download contract for /api/storages/download\n *\n * Returns presigned URL for downloading storage archive from S3.\n * Different from storagesContract.download which streams the file directly.\n */\nexport const storagesDownloadContract = c.router({\n download: {\n method: \"GET\",\n path: \"/api/storages/download\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Storage name is required\"),\n type: storageTypeSchema,\n version: versionQuerySchema,\n }),\n responses: {\n // Normal response with presigned URL\n 200: z.union([\n z.object({\n url: z.url(),\n versionId: z.string(),\n fileCount: z.number(),\n size: z.number(),\n }),\n // Empty artifact response\n z.object({\n empty: z.literal(true),\n versionId: z.string(),\n fileCount: z.literal(0),\n size: z.literal(0),\n }),\n ]),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get presigned download URL\",\n },\n});\n\n/**\n * Storage list contract for /api/storages/list\n *\n * Lists all storages for the authenticated user, filtered by type.\n */\nexport const storagesListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/storages/list\",\n headers: authHeadersSchema,\n query: z.object({\n type: storageTypeSchema,\n }),\n responses: {\n 200: z.array(\n z.object({\n name: z.string(),\n size: z.number(),\n fileCount: z.number(),\n updatedAt: z.string(),\n }),\n ),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List user storages by type\",\n },\n});\n\nexport type StoragesPrepareContract = typeof storagesPrepareContract;\nexport type StoragesCommitContract = typeof storagesCommitContract;\nexport type StoragesDownloadContract = typeof storagesDownloadContract;\nexport type StoragesListContract = typeof storagesListContract;\n\n// Export schemas for reuse\nexport { storageTypeSchema, uploadStorageResponseSchema };\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n storageTypeSchema,\n fileEntryWithHashSchema,\n storageChangesSchema,\n presignedUploadSchema,\n} from \"./storages\";\n\nconst c = initContract();\n\n/**\n * Agent event schema for webhook events\n * Note: Claude Code JSONL events have varying structures with different fields\n * depending on the event type (system, assistant, user, result, etc.)\n * We require `type` and `sequenceNumber`, and allow any other fields to pass through\n */\nconst agentEventSchema = z\n .object({\n type: z.string(),\n sequenceNumber: z.number().int().nonnegative(),\n })\n .passthrough();\n\n/**\n * Artifact snapshot schema\n */\nconst artifactSnapshotSchema = z.object({\n artifactName: z.string(),\n artifactVersion: z.string(),\n});\n\n/**\n * Memory snapshot schema\n */\nconst memorySnapshotSchema = z.object({\n memoryName: z.string(),\n memoryVersion: z.string(),\n});\n\n/**\n * Volume versions snapshot schema\n */\nconst volumeVersionsSnapshotSchema = z.object({\n versions: z.record(z.string(), z.string()),\n});\n\n/**\n * Webhook events contract for /api/webhooks/agent/events\n */\nexport const webhookEventsContract = c.router({\n /**\n * POST /api/webhooks/agent/events\n * Receive agent events from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/events\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n events: z.array(agentEventSchema).min(1, \"events array cannot be empty\"),\n }),\n responses: {\n 200: z.object({\n received: z.number(),\n firstSequence: z.number(),\n lastSequence: z.number(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive agent events from sandbox\",\n },\n});\n\n/**\n * Webhook complete contract for /api/webhooks/agent/complete\n */\nexport const webhookCompleteContract = c.router({\n /**\n * POST /api/webhooks/agent/complete\n * Handle agent run completion (success or failure)\n */\n complete: {\n method: \"POST\",\n path: \"/api/webhooks/agent/complete\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n exitCode: z.number(),\n error: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n success: z.boolean(),\n status: z.enum([\"completed\", \"failed\"]),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Handle agent run completion\",\n },\n});\n\n/**\n * Webhook checkpoints contract for /api/webhooks/agent/checkpoints\n */\nexport const webhookCheckpointsContract = c.router({\n /**\n * POST /api/webhooks/agent/checkpoints\n * Create checkpoint for completed agent run\n */\n create: {\n method: \"POST\",\n path: \"/api/webhooks/agent/checkpoints\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n cliAgentType: z.string().min(1, \"cliAgentType is required\"),\n cliAgentSessionId: z.string().min(1, \"cliAgentSessionId is required\"),\n cliAgentSessionHistory: z\n .string()\n .min(1, \"cliAgentSessionHistory is required\"),\n artifactSnapshot: artifactSnapshotSchema.optional(),\n memorySnapshot: memorySnapshotSchema.optional(),\n volumeVersionsSnapshot: volumeVersionsSnapshotSchema.optional(),\n }),\n responses: {\n 200: z.object({\n checkpointId: z.string(),\n agentSessionId: z.string(),\n conversationId: z.string(),\n artifact: artifactSnapshotSchema.optional(),\n memory: memorySnapshotSchema.optional(),\n volumes: z.record(z.string(), z.string()).optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create checkpoint for agent run\",\n },\n});\n\n/**\n * Webhook heartbeat contract for /api/webhooks/agent/heartbeat\n */\nexport const webhookHeartbeatContract = c.router({\n /**\n * POST /api/webhooks/agent/heartbeat\n * Receive heartbeat signals from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/heartbeat\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n }),\n responses: {\n 200: z.object({\n ok: z.boolean(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive heartbeat from sandbox\",\n },\n});\n\n/**\n * Webhook storages contract for /api/webhooks/agent/storages\n * Note: This endpoint handles multipart form data upload\n * The contract defines the JSON response schema\n */\nexport const webhookStoragesContract = c.router({\n /**\n * POST /api/webhooks/agent/storages\n * Create a new version of a storage from sandbox\n *\n * Form fields:\n * - runId: string (required)\n * - storageName: string (required)\n * - message: string (optional)\n * - file: File (required, tar.gz archive)\n */\n upload: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: z.object({\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage version from sandbox\",\n },\n});\n\n/**\n * Webhook storages incremental contract for /api/webhooks/agent/storages/incremental\n * Note: This endpoint handles multipart form data upload\n */\nexport const webhookStoragesIncrementalContract = c.router({\n /**\n * POST /api/webhooks/agent/storages/incremental\n * Create a new version using incremental upload\n *\n * Form fields:\n * - runId: string (required)\n * - storageName: string (required)\n * - baseVersion: string (required)\n * - changes: JSON string (required)\n * - message: string (optional)\n * - file: File (optional, tar.gz of changed files)\n */\n upload: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/incremental\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: z.object({\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n incrementalStats: z\n .object({\n addedFiles: z.number(),\n modifiedFiles: z.number(),\n deletedFiles: z.number(),\n unchangedFiles: z.number(),\n bytesUploaded: z.number(),\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage version incrementally from sandbox\",\n },\n});\n\n/**\n * Metric data point schema\n */\nconst metricDataSchema = z.object({\n ts: z.string(),\n cpu: z.number(),\n mem_used: z.number(),\n mem_total: z.number(),\n disk_used: z.number(),\n disk_total: z.number(),\n});\n\n/**\n * Sandbox operation schema for internal sandbox operations (init, storage, cli, checkpoint, cleanup)\n */\nconst sandboxOperationSchema = z.object({\n ts: z.string(),\n action_type: z.string(),\n duration_ms: z.number(),\n success: z.boolean(),\n error: z.string().optional(),\n});\n\n/**\n * Network log entry schema (from mitmproxy addon)\n * [NETWORK_LOG_FIELDS] — keep in sync with all network log schemas\n */\nconst networkLogSchema = z.object({\n timestamp: z.string(),\n type: z.string().optional(),\n action: z.enum([\"ALLOW\", \"DENY\"]).optional(),\n host: z.string().optional(),\n port: z.number().optional(),\n method: z.string().optional(),\n url: z.string().optional(),\n status: z.number().optional(),\n latency_ms: z.number().optional(),\n request_size: z.number().optional(),\n response_size: z.number().optional(),\n firewall_base: z.string().optional(),\n firewall_name: z.string().optional(),\n firewall_ref: z.string().optional(),\n firewall_permission: z.string().optional(),\n firewall_rule_match: z.string().optional(),\n firewall_params: z.record(z.string(), z.string()).optional(),\n firewall_error: z.string().optional(),\n error: z.string().optional(),\n});\n\n/**\n * Webhook telemetry contract for /api/webhooks/agent/telemetry\n */\nexport const webhookTelemetryContract = c.router({\n /**\n * POST /api/webhooks/agent/telemetry\n * Receive telemetry data (system log, metrics, network logs, and sandbox operations) from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/telemetry\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n systemLog: z.string().optional(),\n metrics: z.array(metricDataSchema).optional(),\n networkLogs: z.array(networkLogSchema).optional(),\n sandboxOperations: z.array(sandboxOperationSchema).optional(),\n }),\n responses: {\n 200: z.object({\n success: z.boolean(),\n id: z.string(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive telemetry data from sandbox\",\n },\n});\n\n// ============================================================================\n// Direct Upload Contracts (Webhook endpoints for sandbox)\n// ============================================================================\n\n/**\n * Webhook storage prepare contract for /api/webhooks/agent/storages/prepare\n *\n * Sandbox version of storage prepare endpoint.\n * Uses JWT sandbox token authentication and verifies runId matches token.\n */\nexport const webhookStoragesPrepareContract = c.router({\n prepare: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/prepare\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"), // Required for webhook auth\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n files: z.array(fileEntryWithHashSchema),\n parentVersionId: z.string().optional(),\n force: z.boolean().optional(),\n baseVersion: z.string().optional(),\n changes: storageChangesSchema.optional(),\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n existing: z.boolean(),\n uploads: z\n .object({\n archive: presignedUploadSchema,\n manifest: presignedUploadSchema,\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Prepare for direct S3 upload from sandbox\",\n },\n});\n\n/**\n * Webhook storage commit contract for /api/webhooks/agent/storages/commit\n *\n * Sandbox version of storage commit endpoint.\n * Uses JWT sandbox token authentication and verifies runId matches token.\n */\nexport const webhookStoragesCommitContract = c.router({\n commit: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/commit\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"), // Required for webhook auth\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n versionId: z.string().min(1, \"Version ID is required\"),\n parentVersionId: z.string().optional(),\n files: z.array(fileEntryWithHashSchema),\n message: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n success: z.literal(true),\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n deduplicated: z.boolean().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema, // S3 files missing\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Commit uploaded storage from sandbox\",\n },\n});\n\nexport type WebhookEventsContract = typeof webhookEventsContract;\nexport type WebhookCompleteContract = typeof webhookCompleteContract;\nexport type WebhookCheckpointsContract = typeof webhookCheckpointsContract;\nexport type WebhookHeartbeatContract = typeof webhookHeartbeatContract;\nexport type WebhookStoragesContract = typeof webhookStoragesContract;\nexport type WebhookStoragesIncrementalContract =\n typeof webhookStoragesIncrementalContract;\nexport type WebhookTelemetryContract = typeof webhookTelemetryContract;\nexport type WebhookStoragesPrepareContract =\n typeof webhookStoragesPrepareContract;\nexport type WebhookStoragesCommitContract =\n typeof webhookStoragesCommitContract;\n","import { z } from \"zod\";\nimport { initContract } from \"./base\";\n\nconst c = initContract();\n\n/**\n * OAuth-style error response schema for device flow\n * Uses standard OAuth 2.0 error format\n */\nconst oauthErrorSchema = z.object({\n error: z.string(),\n error_description: z.string(),\n});\n\n/**\n * CLI auth device contract for /api/cli/auth/device\n */\nexport const cliAuthDeviceContract = c.router({\n /**\n * POST /api/cli/auth/device\n * Initiate device authorization flow\n */\n create: {\n method: \"POST\",\n path: \"/api/cli/auth/device\",\n body: z.object({}).optional(),\n responses: {\n 200: z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_path: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n }),\n 500: oauthErrorSchema,\n },\n summary: \"Initiate device authorization flow\",\n },\n});\n\n/**\n * CLI auth token contract for /api/cli/auth/token\n */\nexport const cliAuthTokenContract = c.router({\n /**\n * POST /api/cli/auth/token\n * Exchange device code for access token\n */\n exchange: {\n method: \"POST\",\n path: \"/api/cli/auth/token\",\n body: z.object({\n device_code: z.string().min(1, \"device_code is required\"),\n }),\n responses: {\n // Success - token issued\n 200: z.object({\n access_token: z.string(),\n token_type: z.literal(\"Bearer\"),\n expires_in: z.number(),\n org_slug: z.string().optional(),\n }),\n // Authorization pending\n 202: oauthErrorSchema,\n // Various error states\n 400: oauthErrorSchema,\n 500: oauthErrorSchema,\n },\n summary: \"Exchange device code for access token\",\n },\n});\n\nexport type CliAuthDeviceContract = typeof cliAuthDeviceContract;\nexport type CliAuthTokenContract = typeof cliAuthTokenContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Auth contract for /api/auth/me\n */\nexport const authContract = c.router({\n /**\n * GET /api/auth/me\n * Get current user information\n */\n me: {\n method: \"GET\",\n path: \"/api/auth/me\",\n headers: authHeadersSchema,\n responses: {\n 200: z.object({\n userId: z.string(),\n email: z.string(),\n }),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get current user information\",\n },\n});\n\nexport type AuthContract = typeof authContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Cleanup result schema\n */\nconst cleanupResultSchema = z.object({\n runId: z.string(),\n sandboxId: z.string().nullable(),\n status: z.enum([\"cleaned\", \"error\"]),\n error: z.string().optional(),\n reason: z.string().optional(),\n});\n\n/**\n * Cleanup response schema\n */\nconst cleanupResponseSchema = z.object({\n cleaned: z.number(),\n errors: z.number(),\n results: z.array(cleanupResultSchema),\n});\n\n/**\n * Cron cleanup sandboxes contract for /api/cron/cleanup-sandboxes\n */\nexport const cronCleanupSandboxesContract = c.router({\n /**\n * GET /api/cron/cleanup-sandboxes\n * Cron job to cleanup sandboxes that have stopped sending heartbeats\n */\n cleanup: {\n method: \"GET\",\n path: \"/api/cron/cleanup-sandboxes\",\n headers: authHeadersSchema,\n responses: {\n 200: cleanupResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Cleanup expired sandboxes\",\n },\n});\n\nexport type CronCleanupSandboxesContract = typeof cronCleanupSandboxesContract;\n\n// Export schemas for reuse\nexport { cleanupResultSchema, cleanupResponseSchema };\n","import { z } from \"zod\";\n\n/**\n * Secret name validation\n * Rules:\n * - 1-255 characters\n * - uppercase letters, numbers, and underscores only\n * - must start with a letter\n * Examples: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\n */\nexport const secretNameSchema = z\n .string()\n .min(1, \"Secret name is required\")\n .max(255, \"Secret name must be at most 255 characters\")\n .regex(\n /^[A-Z][A-Z0-9_]*$/,\n \"Secret name must contain only uppercase letters, numbers, and underscores, and must start with a letter (e.g., MY_API_KEY)\",\n );\n\n/**\n * Secret type schema\n */\nexport const secretTypeSchema = z.enum([\"user\", \"model-provider\", \"connector\"]);\n\nexport type SecretType = z.infer<typeof secretTypeSchema>;\n\n/**\n * Secret metadata response (value is never returned)\n */\nexport const secretResponseSchema = z.object({\n id: z.uuid(),\n name: z.string(),\n description: z.string().nullable(),\n type: secretTypeSchema,\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type SecretResponse = z.infer<typeof secretResponseSchema>;\n\n/**\n * List secrets response\n */\nexport const secretListResponseSchema = z.object({\n secrets: z.array(secretResponseSchema),\n});\n\nexport type SecretListResponse = z.infer<typeof secretListResponseSchema>;\n\n/**\n * Set secret request (create or update)\n */\nexport const setSecretRequestSchema = z.object({\n name: secretNameSchema,\n value: z.string().min(1, \"Secret value is required\"),\n description: z.string().max(1000).optional(),\n});\n\nexport type SetSecretRequest = z.infer<typeof setSecretRequestSchema>;\n","import { z } from \"zod\";\n\n/**\n * Variable name validation\n * Rules:\n * - 1-255 characters\n * - uppercase letters, numbers, and underscores only\n * - must start with a letter\n * Examples: MY_VAR, API_URL, DEBUG_MODE\n */\nexport const variableNameSchema = z\n .string()\n .min(1, \"Variable name is required\")\n .max(255, \"Variable name must be at most 255 characters\")\n .regex(\n /^[A-Z][A-Z0-9_]*$/,\n \"Variable name must contain only uppercase letters, numbers, and underscores, and must start with a letter (e.g., MY_VAR)\",\n );\n\n/**\n * Variable response (includes value - key difference from secrets)\n */\nexport const variableResponseSchema = z.object({\n id: z.uuid(),\n name: z.string(),\n value: z.string(),\n description: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type VariableResponse = z.infer<typeof variableResponseSchema>;\n\n/**\n * List variables response\n */\nexport const variableListResponseSchema = z.object({\n variables: z.array(variableResponseSchema),\n});\n\nexport type VariableListResponse = z.infer<typeof variableListResponseSchema>;\n\n/**\n * Set variable request (create or update)\n */\nexport const setVariableRequestSchema = z.object({\n name: variableNameSchema,\n value: z.string().min(1, \"Variable value is required\"),\n description: z.string().max(1000).optional(),\n});\n\nexport type SetVariableRequest = z.infer<typeof setVariableRequestSchema>;\n","import { z } from \"zod\";\n\nimport type { ExpandedFirewallConfig } from \"./firewalls\";\n\n/**\n * Secret field configuration for multi-secret providers\n */\nexport interface SecretFieldConfig {\n label: string;\n required: boolean;\n placeholder?: string;\n helpText?: string;\n}\n\n/**\n * Auth method configuration for providers with multiple auth options\n */\nexport interface AuthMethodConfig {\n label: string;\n helpText?: string;\n secrets: Record<string, SecretFieldConfig>;\n}\n\n/**\n * The org slug authorized to use the VM0 managed provider.\n */\nexport const VM0_ORG_SLUG = \"vm0\";\n\n/**\n * Mapping from VM0 managed model names to their concrete provider type and vendor.\n * Used at build-context time to resolve the meta-provider to a real provider.\n *\n * NOTE: Defined before MODEL_PROVIDER_TYPES so the vm0 entry can derive its\n * models list from this mapping via Object.keys().\n */\nexport const VM0_MODEL_TO_PROVIDER: Record<\n string,\n { concreteType: string; vendor: string }\n> = {\n \"claude-sonnet-4.6\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n \"claude-opus-4.6\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n};\n\n/**\n * Model Provider type configuration\n * Maps type to framework, secret name, and display info\n *\n * For providers with `environmentMapping`, the secret is mapped to framework variables:\n * - `$secret` → the stored secret value (legacy single secret)\n * - `$secrets.X` → lookup secret X from the secrets map (multi-secret)\n * - `$model` → the selected model (or default)\n * - Other values are passed through as literals\n *\n * Provider types:\n * - Legacy providers: use `secretName` for single secret\n * - Multi-auth providers: use `authMethods` for multiple auth options with different secrets\n */\nexport const MODEL_PROVIDER_TYPES = {\n \"claude-code-oauth-token\": {\n framework: \"claude-code\" as const,\n secretName: \"CLAUDE_CODE_OAUTH_TOKEN\",\n label: \"Claude Code (OAuth Token)\",\n secretLabel: \"OAuth token\",\n helpText:\n \"To get your OAuth token, run: claude setup-token\\n(Requires Claude Pro or Max subscription)\",\n },\n \"anthropic-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"ANTHROPIC_API_KEY\",\n label: \"Anthropic API Key\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://console.anthropic.com/settings/keys\",\n },\n \"openrouter-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"OPENROUTER_API_KEY\",\n label: \"OpenRouter\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://openrouter.ai/settings/keys\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://openrouter.ai/api\",\n ANTHROPIC_API_KEY: \"\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n } as Record<string, string>,\n models: [\n \"anthropic/claude-sonnet-4.6\",\n \"anthropic/claude-opus-4.6\",\n \"anthropic/claude-sonnet-4.5\",\n \"anthropic/claude-opus-4.5\",\n \"anthropic/claude-haiku-4.5\",\n ] as string[],\n defaultModel: \"\",\n },\n \"moonshot-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"MOONSHOT_API_KEY\",\n label: \"Moonshot (Kimi)\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://platform.moonshot.ai/console/api-keys\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.moonshot.ai/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n } as Record<string, string>,\n models: [\n \"kimi-k2.5\",\n \"kimi-k2-thinking-turbo\",\n \"kimi-k2-thinking\",\n ] as string[],\n defaultModel: \"kimi-k2.5\",\n },\n \"minimax-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"MINIMAX_API_KEY\",\n label: \"MiniMax\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://platform.minimax.io/user-center/basic-information/interface-key\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.minimax.io/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"3000000\",\n CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: \"1\",\n } as Record<string, string>,\n models: [\"MiniMax-M2.1\"] as string[],\n defaultModel: \"MiniMax-M2.1\",\n },\n \"deepseek-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"DEEPSEEK_API_KEY\",\n label: \"DeepSeek\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://platform.deepseek.com/api_keys\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.deepseek.com/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"600000\",\n CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: \"1\",\n } as Record<string, string>,\n models: [\"deepseek-chat\"] as string[],\n defaultModel: \"deepseek-chat\",\n },\n \"zai-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"ZAI_API_KEY\",\n label: \"Z.AI (GLM)\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://z.ai/model-api\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.z.ai/api/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"3000000\",\n } as Record<string, string>,\n models: [\"glm-5\", \"glm-4.7\", \"glm-4.5-air\"] as string[],\n defaultModel: \"glm-4.7\",\n },\n \"vercel-ai-gateway\": {\n framework: \"claude-code\" as const,\n secretName: \"VERCEL_AI_GATEWAY_API_KEY\",\n label: \"Vercel AI Gateway\",\n secretLabel: \"API key\",\n helpText: \"Get your API key from the Vercel AI Gateway dashboard\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://ai-gateway.vercel.sh\",\n ANTHROPIC_API_KEY: \"\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n } as Record<string, string>,\n models: [\n \"anthropic/claude-opus-4.6\",\n \"anthropic/claude-opus-4.5\",\n \"anthropic/claude-sonnet-4.6\",\n \"anthropic/claude-sonnet-4.5\",\n \"anthropic/claude-haiku-4.5\",\n \"moonshotai/kimi-k2.5\",\n \"minimax/minimax-m2.5\",\n \"zai/glm-5-turbo\",\n ] as string[],\n defaultModel: \"anthropic/claude-sonnet-4.6\",\n },\n \"azure-foundry\": {\n framework: \"claude-code\" as const,\n label: \"Azure Foundry\",\n helpText:\n \"Run Claude on Microsoft Azure Foundry.\\nSetup guide: https://code.claude.com/docs/en/microsoft-foundry\",\n authMethods: {\n \"api-key\": {\n label: \"API Key\",\n helpText: \"Use an Azure Foundry API key for authentication\",\n secrets: {\n ANTHROPIC_FOUNDRY_API_KEY: {\n label: \"ANTHROPIC_FOUNDRY_API_KEY\",\n required: true,\n helpText: \"API key from Azure Foundry portal (Endpoints and keys)\",\n },\n ANTHROPIC_FOUNDRY_RESOURCE: {\n label: \"ANTHROPIC_FOUNDRY_RESOURCE\",\n required: true,\n placeholder: \"my-resource\",\n helpText: \"Azure resource name (from portal URL)\",\n },\n },\n },\n } as Record<string, AuthMethodConfig>,\n defaultAuthMethod: \"api-key\",\n environmentMapping: {\n CLAUDE_CODE_USE_FOUNDRY: \"1\",\n ANTHROPIC_FOUNDRY_API_KEY: \"$secrets.ANTHROPIC_FOUNDRY_API_KEY\",\n ANTHROPIC_FOUNDRY_RESOURCE: \"$secrets.ANTHROPIC_FOUNDRY_RESOURCE\",\n ANTHROPIC_MODEL: \"$model\",\n } as Record<string, string>,\n models: [] as string[],\n defaultModel: \"\",\n allowCustomModel: true,\n customModelPlaceholder: \"claude-sonnet-4-5\",\n },\n \"aws-bedrock\": {\n framework: \"claude-code\" as const,\n label: \"AWS Bedrock\",\n helpText:\n \"Run Claude on AWS Bedrock.\\nSetup guide: https://code.claude.com/docs/en/amazon-bedrock\",\n authMethods: {\n \"api-key\": {\n label: \"Bedrock API Key\",\n helpText: \"Use a Bedrock API key for authentication\",\n secrets: {\n AWS_BEARER_TOKEN_BEDROCK: {\n label: \"AWS_BEARER_TOKEN_BEDROCK\",\n required: true,\n helpText: \"Bedrock API key from AWS console\",\n },\n AWS_REGION: {\n label: \"AWS_REGION\",\n required: true,\n placeholder: \"us-east-1\",\n helpText: \"e.g., us-east-1, us-west-2\",\n },\n },\n },\n \"access-keys\": {\n label: \"IAM Access Keys\",\n helpText: \"Use IAM access key secrets\",\n secrets: {\n AWS_ACCESS_KEY_ID: {\n label: \"AWS_ACCESS_KEY_ID\",\n required: true,\n helpText: \"IAM access key ID\",\n },\n AWS_SECRET_ACCESS_KEY: {\n label: \"AWS_SECRET_ACCESS_KEY\",\n required: true,\n helpText: \"IAM secret access key\",\n },\n AWS_SESSION_TOKEN: {\n label: \"AWS_SESSION_TOKEN\",\n required: false,\n helpText: \"Optional, for temporary secrets\",\n },\n AWS_REGION: {\n label: \"AWS_REGION\",\n required: true,\n placeholder: \"us-east-1\",\n helpText: \"e.g., us-east-1, us-west-2\",\n },\n },\n },\n } as Record<string, AuthMethodConfig>,\n defaultAuthMethod: \"api-key\",\n environmentMapping: {\n CLAUDE_CODE_USE_BEDROCK: \"1\",\n AWS_REGION: \"$secrets.AWS_REGION\",\n AWS_BEARER_TOKEN_BEDROCK: \"$secrets.AWS_BEARER_TOKEN_BEDROCK\",\n AWS_ACCESS_KEY_ID: \"$secrets.AWS_ACCESS_KEY_ID\",\n AWS_SECRET_ACCESS_KEY: \"$secrets.AWS_SECRET_ACCESS_KEY\",\n AWS_SESSION_TOKEN: \"$secrets.AWS_SESSION_TOKEN\",\n ANTHROPIC_MODEL: \"$model\",\n } as Record<string, string>,\n models: [] as string[],\n defaultModel: \"\",\n allowCustomModel: true,\n customModelPlaceholder: \"anthropic.claude-sonnet-4-20250514-v1:0\",\n },\n vm0: {\n framework: \"claude-code\" as const,\n label: \"VM0 Managed\",\n models: Object.keys(VM0_MODEL_TO_PROVIDER) as string[],\n defaultModel: \"claude-sonnet-4.6\",\n },\n} as const;\n\nexport type ModelProviderType = keyof typeof MODEL_PROVIDER_TYPES;\nexport type ModelProviderFramework = \"claude-code\";\n\n/**\n * Provider types hidden from user-facing selection UI.\n * These providers cannot support token replacement (firewall-based secret protection),\n * so new selection is blocked until a proper solution is implemented.\n * Existing configurations continue to work at runtime.\n */\nconst HIDDEN_PROVIDER_TYPES: ReadonlySet<ModelProviderType> = new Set([\n \"aws-bedrock\",\n \"azure-foundry\",\n]);\n\n/**\n * Get provider types available for user selection.\n * Excludes providers that are hidden from the UI (e.g., those without token replacement support).\n */\nexport function getSelectableProviderTypes(): ModelProviderType[] {\n return (Object.keys(MODEL_PROVIDER_TYPES) as ModelProviderType[]).filter(\n (type) => !HIDDEN_PROVIDER_TYPES.has(type),\n );\n}\n\n/**\n * Firewall gateway configs for model providers with static base URLs.\n * Used to auto-generate firewall entries that protect API tokens from sandbox exposure.\n * Excluded: aws-bedrock (dynamic region URLs + SigV4), azure-foundry (dynamic resource URLs).\n *\n * Base URL is derived from environmentMapping.ANTHROPIC_BASE_URL (or https://api.anthropic.com\n * for providers without environmentMapping like anthropic-api-key and claude-code-oauth-token).\n */\nconst ANTHROPIC_API_BASE = \"https://api.anthropic.com\";\n\nfunction getFirewallBaseUrl(type: ModelProviderType): string {\n return getEnvironmentMapping(type)?.ANTHROPIC_BASE_URL ?? ANTHROPIC_API_BASE;\n}\n\nfunction mpFirewall(\n type: ModelProviderType,\n authHeaders: Record<string, string>,\n placeholders: Record<string, string>,\n): ExpandedFirewallConfig {\n return {\n name: `model-provider:${type}`,\n ref: \"__auto__\",\n apis: [\n {\n base: getFirewallBaseUrl(type),\n auth: { headers: authHeaders },\n permissions: [{ name: \"unrestricted\", rules: [\"ANY /{path*}\"] }],\n },\n ],\n placeholders,\n };\n}\n\nexport const MODEL_PROVIDER_FIREWALL_CONFIGS: Partial<\n Record<ModelProviderType, ExpandedFirewallConfig>\n> = {\n // Placeholder: sk-ant-api03-{93 word/hyphen chars}AA (108 chars total)\n // Source: Semgrep regex \\Bsk-ant-api03-[\\w\\-]{93}AA\\B\n // https://semgrep.dev/blog/2025/secrets-story-and-prefixed-secrets/\n \"anthropic-api-key\": mpFirewall(\n \"anthropic-api-key\",\n { \"x-api-key\": \"${{ secrets.ANTHROPIC_API_KEY }}\" },\n {\n ANTHROPIC_API_KEY:\n \"sk-ant-api03-vm0placeholder0000000000000000000000000000000000000000000000000000000000000000000000000000000AA\",\n },\n ),\n // Placeholder: sk-ant-oat01-{93 word/hyphen chars}AA (108 chars total)\n // Source: same structure as API key; prefix from claude setup-token output\n // https://github.com/anthropics/claude-code/issues/18340\n // Example: sk-ant-oat01-xxxxx...xxxxx (1-year OAuth token)\n \"claude-code-oauth-token\": mpFirewall(\n \"claude-code-oauth-token\",\n { Authorization: \"Bearer ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\" },\n {\n CLAUDE_CODE_OAUTH_TOKEN:\n \"sk-ant-oat01-vm0placeholder0000000000000000000000000000000000000000000000000000000000000000000000000000000AA\",\n },\n ),\n // Placeholder: sk-or-v1-{64 hex chars} (73 chars total)\n // Source: real key observed in GitHub issue\n // https://github.com/continuedev/continue/issues/6191\n // Example: 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\n \"openrouter-api-key\": mpFirewall(\n \"openrouter-api-key\",\n { Authorization: \"Bearer ${{ secrets.OPENROUTER_API_KEY }}\" },\n {\n OPENROUTER_API_KEY:\n \"sk-or-v1-vm0placeholder00000000000000000000000000000000000000000000000000\",\n },\n ),\n // Placeholder: sk-{32 chars} (35 chars total)\n // Source: no authoritative format documentation found; using generic sk- prefix\n \"moonshot-api-key\": mpFirewall(\n \"moonshot-api-key\",\n { Authorization: \"Bearer ${{ secrets.MOONSHOT_API_KEY }}\" },\n { MOONSHOT_API_KEY: \"sk-vm0placeholder000000000000000000\" },\n ),\n // Placeholder: eyJ... (JWT-style, variable length)\n // Source: no authoritative format documentation found; MiniMax docs do not disclose key format\n // https://platform.minimax.io/docs/api-reference/api-overview\n \"minimax-api-key\": mpFirewall(\n \"minimax-api-key\",\n { Authorization: \"Bearer ${{ secrets.MINIMAX_API_KEY }}\" },\n { MINIMAX_API_KEY: \"eyvm0placeholder000000000000000000000000000000000000\" },\n ),\n // Placeholder: sk-{32 hex chars} (35 chars total)\n // Source: Semgrep regex \\bsk-[a-f0-9]{32}\\b\n // https://semgrep.dev/blog/2025/secrets-story-and-prefixed-secrets/\n \"deepseek-api-key\": mpFirewall(\n \"deepseek-api-key\",\n { Authorization: \"Bearer ${{ secrets.DEEPSEEK_API_KEY }}\" },\n { DEEPSEEK_API_KEY: \"sk-vm0placeholder000000000000000000\" },\n ),\n // Placeholder: sk-{32 chars} (35 chars total)\n // Source: no authoritative format documentation found; using generic sk- prefix\n \"zai-api-key\": mpFirewall(\n \"zai-api-key\",\n { Authorization: \"Bearer ${{ secrets.ZAI_API_KEY }}\" },\n { ZAI_API_KEY: \"sk-vm0placeholder000000000000000000\" },\n ),\n // Placeholder: sk-{32 chars} (35 chars total)\n // Source: no authoritative format documentation found; Vercel gateway proxies upstream providers\n \"vercel-ai-gateway\": mpFirewall(\n \"vercel-ai-gateway\",\n { Authorization: \"Bearer ${{ secrets.VERCEL_AI_GATEWAY_API_KEY }}\" },\n { VERCEL_AI_GATEWAY_API_KEY: \"sk-vm0placeholder000000000000000000\" },\n ),\n};\n\n/**\n * Get firewall gateway config for a model provider type.\n * Returns undefined for providers without static base URLs (aws-bedrock, azure-foundry).\n */\nexport function getModelProviderFirewall(\n type: ModelProviderType,\n): ExpandedFirewallConfig | undefined {\n return MODEL_PROVIDER_FIREWALL_CONFIGS[type];\n}\n\nexport const modelProviderTypeSchema = z.enum([\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"moonshot-api-key\",\n \"minimax-api-key\",\n \"deepseek-api-key\",\n \"zai-api-key\",\n \"vercel-ai-gateway\",\n \"azure-foundry\",\n \"aws-bedrock\",\n \"vm0\",\n]);\n\nexport const modelProviderFrameworkSchema = z.enum([\"claude-code\"]);\n\n/**\n * Get the concrete provider type for a VM0 managed model.\n * Throws if the model is not in the VM0 model mapping.\n */\nexport function getVm0ConcreteProviderType(model: string): ModelProviderType {\n const entry = VM0_MODEL_TO_PROVIDER[model];\n if (!entry) {\n throw new Error(\n `Unknown VM0 model \"${model}\". Valid models: ${Object.keys(VM0_MODEL_TO_PROVIDER).join(\", \")}`,\n );\n }\n return entry.concreteType as ModelProviderType;\n}\n\n/**\n * Get the vendor name for a VM0 managed model.\n * Used for key pool lookup.\n */\nexport function getVm0Vendor(model: string): string {\n const entry = VM0_MODEL_TO_PROVIDER[model];\n if (!entry) {\n throw new Error(\n `Unknown VM0 model \"${model}\". Valid models: ${Object.keys(VM0_MODEL_TO_PROVIDER).join(\", \")}`,\n );\n }\n return entry.vendor;\n}\n\n/**\n * Get framework for a model provider type\n */\nexport function getFrameworkForType(\n type: ModelProviderType,\n): ModelProviderFramework {\n return MODEL_PROVIDER_TYPES[type].framework;\n}\n\n/**\n * Get secret name for a model provider type (legacy single-secret providers)\n * Returns undefined for multi-auth providers\n */\nexport function getSecretNameForType(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"secretName\" in config ? config.secretName : undefined;\n}\n\n/**\n * Check if a model provider type has multiple auth methods\n */\nexport function hasAuthMethods(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"authMethods\" in config;\n}\n\n/**\n * Get auth methods for a model provider type\n * Returns undefined for legacy single-secret providers\n */\nexport function getAuthMethodsForType(\n type: ModelProviderType,\n): Record<string, AuthMethodConfig> | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"authMethods\" in config ? config.authMethods : undefined;\n}\n\n/**\n * Get default auth method for a model provider type\n * Returns undefined for legacy single-secret providers\n */\nexport function getDefaultAuthMethod(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"defaultAuthMethod\" in config ? config.defaultAuthMethod : undefined;\n}\n\n/**\n * Get secrets config for a specific auth method\n * Returns undefined if provider doesn't have auth methods or auth method doesn't exist\n */\nexport function getSecretsForAuthMethod(\n type: ModelProviderType,\n authMethod: string,\n): Record<string, SecretFieldConfig> | undefined {\n const authMethods = getAuthMethodsForType(type);\n if (!authMethods || !(authMethod in authMethods)) {\n return undefined;\n }\n const method = authMethods[authMethod];\n return method?.secrets;\n}\n\n/**\n * Get secret names for a specific auth method\n * Returns array of secret names required for the auth method\n */\nexport function getSecretNamesForAuthMethod(\n type: ModelProviderType,\n authMethod: string,\n): string[] | undefined {\n const secrets = getSecretsForAuthMethod(type, authMethod);\n if (!secrets) {\n return undefined;\n }\n return Object.keys(secrets);\n}\n\n/**\n * Get environment mapping for a model provider type\n * Returns undefined for providers without mapping (use secret directly)\n */\nexport function getEnvironmentMapping(\n type: ModelProviderType,\n): Record<string, string> | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"environmentMapping\" in config ? config.environmentMapping : undefined;\n}\n\n/**\n * Get the ANTHROPIC_BASE_URL for a model provider type.\n * Returns null for Anthropic-native providers (no base URL override).\n */\nexport function getProviderBaseUrl(type: ModelProviderType): string | null {\n const config = MODEL_PROVIDER_TYPES[type];\n if (!(\"environmentMapping\" in config)) return null;\n const url = config.environmentMapping[\"ANTHROPIC_BASE_URL\"];\n return url ?? null;\n}\n\n/**\n * Check if two model providers are compatible for session continuation.\n * Providers are compatible if they resolve to the same ANTHROPIC_BASE_URL.\n */\nexport function areProvidersCompatible(\n a: ModelProviderType,\n b: ModelProviderType,\n): boolean {\n return getProviderBaseUrl(a) === getProviderBaseUrl(b);\n}\n\n/**\n * Get available models for a model provider type\n * Returns undefined for providers without model selection\n */\nexport function getModels(type: ModelProviderType): string[] | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"models\" in config ? config.models : undefined;\n}\n\n/**\n * Get default model for a model provider type\n * Returns undefined for providers without model selection\n */\nexport function getDefaultModel(type: ModelProviderType): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"defaultModel\" in config ? config.defaultModel : undefined;\n}\n\n/**\n * Check if a model provider type supports model selection\n */\nexport function hasModelSelection(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n // Has predefined models OR allows custom model input\n return (\n (\"models\" in config && config.models.length > 0) ||\n (\"allowCustomModel\" in config && config.allowCustomModel === true)\n );\n}\n\n/**\n * Check if a model provider allows custom model input\n */\nexport function allowsCustomModel(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"allowCustomModel\" in config && config.allowCustomModel === true;\n}\n\n/**\n * Get custom model placeholder for a model provider type\n */\nexport function getCustomModelPlaceholder(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"customModelPlaceholder\" in config\n ? config.customModelPlaceholder\n : undefined;\n}\n\n/**\n * Model provider response\n */\nexport const modelProviderResponseSchema = z.object({\n id: z.uuid(),\n type: modelProviderTypeSchema,\n framework: modelProviderFrameworkSchema,\n secretName: z.string().nullable(), // Legacy single-secret (deprecated for multi-auth)\n authMethod: z.string().nullable(), // For multi-auth providers\n secretNames: z.array(z.string()).nullable(), // For multi-auth providers\n isDefault: z.boolean(),\n selectedModel: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type ModelProviderResponse = z.infer<typeof modelProviderResponseSchema>;\n\n/**\n * List model providers response\n */\nexport const modelProviderListResponseSchema = z.object({\n modelProviders: z.array(modelProviderResponseSchema),\n});\n\nexport type ModelProviderListResponse = z.infer<\n typeof modelProviderListResponseSchema\n>;\n\n/**\n * Create/update model provider request\n *\n * Legacy providers use `secret` (single string)\n * Multi-auth providers use `authMethod` + `secrets` (map)\n */\nexport const upsertModelProviderRequestSchema = z.object({\n type: modelProviderTypeSchema,\n secret: z.string().min(1).optional(), // Legacy single secret\n authMethod: z.string().optional(), // For multi-auth providers\n secrets: z.record(z.string(), z.string()).optional(), // For multi-auth providers\n selectedModel: z.string().optional(),\n});\n\nexport type UpsertModelProviderRequest = z.infer<\n typeof upsertModelProviderRequestSchema\n>;\n\n/**\n * Upsert response includes created flag\n */\nexport const upsertModelProviderResponseSchema = z.object({\n provider: modelProviderResponseSchema,\n created: z.boolean(),\n});\n\nexport type UpsertModelProviderResponse = z.infer<\n typeof upsertModelProviderResponseSchema\n>;\n\n/**\n * Update model request schema\n */\nexport const updateModelRequestSchema = z.object({\n selectedModel: z.string().optional(),\n});\n\nexport type UpdateModelRequest = z.infer<typeof updateModelRequestSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Stored chat message schema (persisted in agent_sessions.chat_messages JSONB)\n */\nconst storedChatMessageSchema = z.object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string(),\n runId: z.string().optional(),\n summaries: z.array(z.string()).optional(),\n createdAt: z.string(),\n});\n\n/**\n * Session response schema\n * Represents a persistent running context across multiple runs\n */\nconst sessionResponseSchema = z.object({\n id: z.string(),\n agentComposeId: z.string(),\n conversationId: z.string().nullable(),\n artifactName: z.string().nullable(),\n secretNames: z.array(z.string()).nullable(),\n chatMessages: z.array(storedChatMessageSchema).optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Session list item schema (lightweight, for listing)\n */\nconst sessionListItemSchema = z.object({\n id: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n messageCount: z.number(),\n preview: z.string().nullable(),\n});\n\n/**\n * Agent compose snapshot schema (stored in checkpoints)\n */\nconst agentComposeSnapshotSchema = z.object({\n agentComposeVersionId: z.string(),\n vars: z.record(z.string(), z.string()).optional(),\n secretNames: z.array(z.string()).optional(),\n});\n\n/**\n * Artifact snapshot schema\n */\nconst artifactSnapshotSchema = z.object({\n artifactName: z.string(),\n artifactVersion: z.string(),\n});\n\n/**\n * Volume versions snapshot schema\n */\nconst volumeVersionsSnapshotSchema = z.object({\n versions: z.record(z.string(), z.string()),\n});\n\n/**\n * Checkpoint response schema\n * Represents an immutable snapshot of agent run state\n */\nconst checkpointResponseSchema = z.object({\n id: z.string(),\n runId: z.string(),\n conversationId: z.string(),\n agentComposeSnapshot: agentComposeSnapshotSchema,\n artifactSnapshot: artifactSnapshotSchema.nullable(),\n volumeVersionsSnapshot: volumeVersionsSnapshotSchema.nullable(),\n createdAt: z.string(),\n});\n\n/**\n * Sessions list route contract (/api/agent/sessions)\n */\nexport const sessionsContract = c.router({\n /**\n * GET /api/agent/sessions?agentComposeId=X\n * List chat sessions for an agent\n */\n list: {\n method: \"GET\",\n path: \"/api/agent/sessions\",\n headers: authHeadersSchema,\n query: z.object({\n agentComposeId: z.string().min(1, \"agentComposeId is required\"),\n }),\n responses: {\n 200: z.object({ sessions: z.array(sessionListItemSchema) }),\n 401: apiErrorSchema,\n },\n summary: \"List chat sessions for an agent\",\n },\n});\n\n/**\n * Sessions by ID route contract (/api/agent/sessions/[id])\n */\nexport const sessionsByIdContract = c.router({\n /**\n * GET /api/agent/sessions/:id\n * Get session by ID\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/sessions/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Session ID is required\"),\n }),\n responses: {\n 200: sessionResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get session by ID\",\n },\n});\n\n/**\n * Session messages route contract (/api/agent/sessions/[id]/messages)\n */\nexport const sessionMessagesContract = c.router({\n /**\n * POST /api/agent/sessions/:id/messages\n * Append chat messages to a session\n */\n append: {\n method: \"POST\",\n path: \"/api/agent/sessions/:id/messages\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Session ID is required\"),\n }),\n body: z.object({\n messages: z.array(\n z.object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string(),\n runId: z.string().optional(),\n }),\n ),\n }),\n responses: {\n 200: z.object({ success: z.literal(true) }),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Append chat messages to a session\",\n },\n});\n\n/**\n * Checkpoints by ID route contract (/api/agent/checkpoints/[id])\n */\nexport const checkpointsByIdContract = c.router({\n /**\n * GET /api/agent/checkpoints/:id\n * Get checkpoint by ID\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/checkpoints/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Checkpoint ID is required\"),\n }),\n responses: {\n 200: checkpointResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get checkpoint by ID\",\n },\n});\n\nexport type SessionsContract = typeof sessionsContract;\nexport type SessionsByIdContract = typeof sessionsByIdContract;\nexport type SessionMessagesContract = typeof sessionMessagesContract;\nexport type CheckpointsByIdContract = typeof checkpointsByIdContract;\n\n// Export schemas for reuse\nexport {\n storedChatMessageSchema,\n sessionResponseSchema,\n sessionListItemSchema,\n checkpointResponseSchema,\n agentComposeSnapshotSchema,\n artifactSnapshotSchema,\n volumeVersionsSnapshotSchema,\n};\n\n// Export inferred types for consumers\nexport type StoredChatMessage = z.infer<typeof storedChatMessageSchema>;\nexport type SessionResponse = z.infer<typeof sessionResponseSchema>;\nexport type SessionListItem = z.infer<typeof sessionListItemSchema>;\nexport type CheckpointResponse = z.infer<typeof checkpointResponseSchema>;\nexport type AgentComposeSnapshot = z.infer<typeof agentComposeSnapshotSchema>;\nexport type ArtifactSnapshot = z.infer<typeof artifactSnapshotSchema>;\nexport type VolumeVersionsSnapshot = z.infer<\n typeof volumeVersionsSnapshotSchema\n>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst chatThreadListItemSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n preview: z.string().nullable(),\n agentId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst storedChatMessageSchema = z.object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string(),\n runId: z.string().optional(),\n error: z.string().optional(),\n summaries: z.array(z.string()).optional(),\n createdAt: z.string(),\n});\n\nconst unsavedRunSchema = z.object({\n runId: z.string(),\n status: z.string(),\n prompt: z.string(),\n error: z.string().nullable(),\n});\n\nconst chatThreadDetailSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n agentId: z.string(),\n chatMessages: z.array(storedChatMessageSchema),\n latestSessionId: z.string().nullable(),\n unsavedRuns: z.array(unsavedRunSchema),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Chat threads list route contract (/api/chat-threads)\n */\nexport const chatThreadsContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/chat-threads\",\n headers: authHeadersSchema,\n body: z.object({\n agentId: z.string().min(1),\n title: z.string().optional(),\n }),\n responses: {\n 201: z.object({\n id: z.string(),\n title: z.string().nullable(),\n createdAt: z.string(),\n }),\n 401: apiErrorSchema,\n },\n summary: \"Create a new chat thread\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/chat-threads\",\n headers: authHeadersSchema,\n query: z.object({\n agentId: z.string().min(1, \"agentId is required\"),\n }),\n responses: {\n 200: z.object({ threads: z.array(chatThreadListItemSchema) }),\n 401: apiErrorSchema,\n },\n summary: \"List chat threads for an agent\",\n },\n});\n\n/**\n * Chat thread by ID route contract (/api/chat-threads/[id])\n */\nexport const chatThreadByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n responses: {\n 200: chatThreadDetailSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get chat thread detail with messages\",\n },\n});\n\n/**\n * Chat thread runs route contract (/api/chat-threads/[id]/runs)\n */\nexport const chatThreadRunsContract = c.router({\n addRun: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:id/runs\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n body: z.object({\n runId: z.string().min(1),\n }),\n responses: {\n 204: z.void(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Associate a run to a chat thread\",\n },\n});\n\nexport type ChatThreadsContract = typeof chatThreadsContract;\nexport type ChatThreadByIdContract = typeof chatThreadByIdContract;\nexport type ChatThreadRunsContract = typeof chatThreadRunsContract;\n\nexport { chatThreadListItemSchema, chatThreadDetailSchema };\n\nexport type ChatThreadListItem = z.infer<typeof chatThreadListItemSchema>;\nexport type ChatThreadDetail = z.infer<typeof chatThreadDetailSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { VALID_CAPABILITIES } from \"./composes\";\nimport { experimentalFirewallsSchema } from \"./firewalls\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Default profile when none is specified.\n * Must stay in sync with Rust: crates/runner/src/profile.rs → DEFAULT_PROFILE\n */\nexport const DEFAULT_PROFILE = \"vm0/default\";\n\n/**\n * Runner group format: org/name (e.g., \"acme/production\")\n */\nexport const runnerGroupSchema = z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Runner group must be in org/name format (e.g., acme/production)\",\n );\n\n/**\n * Job schema for polling response\n */\nexport const jobSchema = z.object({\n runId: z.uuid(),\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n agentComposeVersionId: z.string().nullable(),\n vars: z.record(z.string(), z.string()).nullable(),\n checkpointId: z.uuid().nullable(),\n experimentalProfile: z.string().optional(),\n});\n\n/**\n * Runners poll contract - POST /api/runners/poll\n * Long-polling endpoint to fetch pending jobs for a runner group\n *\n * NOTE: Uses POST instead of GET to avoid CDN caching issues on preview deployments.\n * POST requests are never cached, ensuring the Authorization header is always read fresh.\n */\nexport const runnersPollContract = c.router({\n poll: {\n method: \"POST\",\n path: \"/api/runners/poll\",\n headers: authHeadersSchema,\n body: z.object({\n group: runnerGroupSchema,\n profiles: z.array(z.string()).optional(),\n }),\n responses: {\n 200: z.object({\n job: jobSchema.nullable(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Poll for pending jobs (long-polling with 30s timeout)\",\n },\n});\n\n/**\n * Storage entry in manifest\n */\nexport const storageEntrySchema = z.object({\n mountPath: z.string(),\n archiveUrl: z.string().nullable(),\n});\n\n/**\n * Artifact entry in manifest\n */\nexport const artifactEntrySchema = z.object({\n mountPath: z.string(),\n archiveUrl: z.string().nullable(),\n vasStorageName: z.string(),\n vasVersionId: z.string(),\n});\n\n/**\n * Storage manifest with presigned URLs for download\n */\nexport const storageManifestSchema = z.object({\n storages: z.array(storageEntrySchema),\n artifact: artifactEntrySchema.nullable(),\n memory: artifactEntrySchema.nullable(),\n});\n\n/**\n * Resume session information\n */\nexport const resumeSessionSchema = z.object({\n sessionId: z.string(),\n sessionHistory: z.string(),\n});\n\n/**\n * Stored execution context (subset stored in database for late routing)\n * Contains prepared context without runtime-generated fields\n * Secrets are encrypted with AES-256-GCM before storage\n */\nexport const storedExecutionContextSchema = z.object({\n workingDir: z.string(),\n storageManifest: storageManifestSchema.nullable(),\n environment: z.record(z.string(), z.string()).nullable(),\n resumeSession: resumeSessionSchema.nullable(),\n encryptedSecrets: z.string().nullable(), // AES-256-GCM encrypted Record<string, string> (secret name → value)\n // Maps secret names to OAuth connector types for runtime token refresh (e.g. { \"GMAIL_ACCESS_TOKEN\": \"gmail\" })\n secretConnectorMap: z.record(z.string(), z.string()).nullable().optional(),\n cliAgentType: z.string(),\n // Debug flag to force real Claude in mock environments (internal use only)\n debugNoMockClaude: z.boolean().optional(),\n // Dispatch timestamp for E2E timing metrics\n apiStartTime: z.number().optional(),\n // User's timezone preference (IANA format, e.g., \"Asia/Shanghai\")\n userTimezone: z.string().optional(),\n // Org slug for agent — used for VM0_ACTIVE_ORG when capabilities are present\n agentOrgSlug: z.string().optional(),\n // Memory storage name (for first-run when manifest.memory is null)\n memoryName: z.string().optional(),\n // Experimental firewall for proxy-side token replacement\n experimentalFirewalls: experimentalFirewallsSchema.optional(),\n // Experimental capabilities for agent permission enforcement\n experimentalCapabilities: z.array(z.enum(VALID_CAPABILITIES)).optional(),\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(z.string()).optional(),\n // Tools to make available in Claude CLI (passed as --tools)\n tools: z.array(z.string()).optional(),\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n // VM profile for resource allocation (e.g., \"vm0/default\")\n experimentalProfile: z.string().optional(),\n});\n\n/**\n * Execution context returned when claiming a job.\n *\n * Keep in sync with Rust: crates/runner/src/types.rs → ExecutionContext\n */\nexport const executionContextSchema = z.object({\n runId: z.uuid(),\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n agentComposeVersionId: z.string().nullable(),\n vars: z.record(z.string(), z.string()).nullable(),\n checkpointId: z.uuid().nullable(),\n sandboxToken: z.string(),\n // New fields for E2B parity:\n workingDir: z.string(),\n storageManifest: storageManifestSchema.nullable(),\n environment: z.record(z.string(), z.string()).nullable(),\n resumeSession: resumeSessionSchema.nullable(),\n secretValues: z.array(z.string()).nullable(),\n // AES-256-GCM encrypted Record<string, string> — passed through to mitm-addon for auth resolution\n encryptedSecrets: z.string().nullable(),\n // Maps secret names to OAuth connector types for runtime token refresh\n secretConnectorMap: z.record(z.string(), z.string()).nullable().optional(),\n cliAgentType: z.string(),\n // Debug flag to force real Claude in mock environments (internal use only)\n debugNoMockClaude: z.boolean().optional(),\n // Dispatch timestamp for E2E timing metrics\n apiStartTime: z.number().optional(),\n // User's timezone preference (IANA format, e.g., \"Asia/Shanghai\")\n userTimezone: z.string().optional(),\n // Org slug for agent — used for VM0_ACTIVE_ORG when capabilities are present\n agentOrgSlug: z.string().optional(),\n // Memory storage name (for first-run when manifest.memory is null)\n memoryName: z.string().optional(),\n // Experimental firewall for proxy-side token replacement\n experimentalFirewalls: experimentalFirewallsSchema.optional(),\n // Experimental capabilities for agent permission enforcement\n experimentalCapabilities: z.array(z.enum(VALID_CAPABILITIES)).optional(),\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(z.string()).optional(),\n // Tools to make available in Claude CLI (passed as --tools)\n tools: z.array(z.string()).optional(),\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n // VM profile for resource allocation (e.g., \"vm0/default\")\n experimentalProfile: z.string().optional(),\n});\n\n/**\n * Runners job claim contract - POST /api/runners/jobs/:id/claim\n * Claim a pending job for execution\n * Verifies that the job's agent_run belongs to the authenticated user\n */\nexport const runnersJobClaimContract = c.router({\n claim: {\n method: \"POST\",\n path: \"/api/runners/jobs/:id/claim\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(),\n }),\n body: z.object({}),\n responses: {\n 200: executionContextSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema, // Job does not belong to user\n 404: apiErrorSchema,\n 409: apiErrorSchema, // Already claimed\n 500: apiErrorSchema,\n },\n summary: \"Claim a pending job for execution\",\n },\n});\n\nexport type RunnersPollContract = typeof runnersPollContract;\nexport type RunnersJobClaimContract = typeof runnersJobClaimContract;\nexport type Job = z.infer<typeof jobSchema>;\nexport type ExecutionContext = z.infer<typeof executionContextSchema>;\nexport type StoredExecutionContext = z.infer<\n typeof storedExecutionContextSchema\n>;\nexport type StorageEntry = z.infer<typeof storageEntrySchema>;\nexport type ArtifactEntry = z.infer<typeof artifactEntrySchema>;\nexport type StorageManifest = z.infer<typeof storageManifestSchema>;\nexport type ResumeSession = z.infer<typeof resumeSessionSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { runnerGroupSchema } from \"./runners\";\n\nconst c = initContract();\n\n/**\n * Ably token request schema (matches Ably SDK's TokenRequest type)\n */\nconst ablyTokenRequestSchema = z.object({\n keyName: z.string(),\n ttl: z.number().optional(),\n timestamp: z.number(),\n capability: z.string(),\n clientId: z.string().optional(),\n nonce: z.string(),\n mac: z.string(),\n});\n\n/**\n * Runner realtime token contract for /api/runners/realtime/token\n */\nexport const runnerRealtimeTokenContract = c.router({\n /**\n * POST /api/runners/realtime/token\n * Get an Ably token to subscribe to a runner group's job notification channel\n */\n create: {\n method: \"POST\",\n path: \"/api/runners/realtime/token\",\n headers: authHeadersSchema,\n body: z.object({\n group: runnerGroupSchema,\n }),\n responses: {\n 200: ablyTokenRequestSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get Ably token for runner group job notifications\",\n },\n});\n\nexport type RunnerRealtimeTokenContract = typeof runnerRealtimeTokenContract;\n","import { z } from \"zod\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\n/**\n * Secret field configuration for connector auth methods\n */\nexport interface ConnectorSecretConfig {\n label: string;\n required: boolean;\n placeholder?: string;\n helpText?: string;\n /** Storage type: \"secret\" (default, encrypted) or \"variable\" (plain text). */\n type?: \"secret\" | \"variable\";\n}\n\n/**\n * Auth method configuration for connectors\n */\nexport interface ConnectorAuthMethodConfig {\n label: string;\n helpText?: string;\n secrets: Record<string, ConnectorSecretConfig>;\n}\n\n/**\n * OAuth configuration for connectors that support OAuth flow.\n *\n * `environmentMapping` lives here because it only applies to the OAuth path:\n * OAuth stores secrets under internal names (e.g. `FIGMA_ACCESS_TOKEN`) that\n * need to be mapped to the env var names skills expect (e.g. `FIGMA_TOKEN`).\n * API-token connectors store secrets directly under the target name, so they\n * don't need any mapping.\n *\n * `$secrets.X` in mapping values looks up secret X from the connector's secrets.\n */\nexport interface ConnectorOAuthConfig {\n authorizationUrl?: string;\n tokenUrl: string;\n scopes: string[];\n environmentMapping: Record<string, string>;\n}\n\n/**\n * Base configuration shape for all connector types.\n */\nexport interface ConnectorConfig {\n readonly label: string;\n readonly helpText: string;\n readonly featureFlag?: FeatureSwitchKey;\n readonly authMethods: Record<string, ConnectorAuthMethodConfig>;\n readonly defaultAuthMethod?: string;\n /** Non-OAuth environment mapping (e.g. computer connector bridge credentials). */\n readonly bridgeMapping?: Record<string, string>;\n readonly oauth?: ConnectorOAuthConfig;\n}\n\n/**\n * Connector type configuration\n * Maps type to display info, auth methods, and OAuth environment mapping.\n */\nconst CONNECTOR_TYPES_DEF = {\n axiom: {\n label: \"Axiom\",\n helpText:\n \"Connect your Axiom account to query logs, manage datasets, and access observability data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Axiom](https://app.axiom.co)\\n2. Go to **Settings > API Tokens**\\n3. Create a new API token with the required permissions\\n4. Copy the token\",\n secrets: {\n AXIOM_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"xaat-...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n ahrefs: {\n label: \"Ahrefs\",\n featureFlag: FeatureSwitchKey.AhrefsConnector,\n helpText:\n \"Connect your Ahrefs account to access SEO data, backlink analysis, and keyword research\",\n authMethods: {\n oauth: {\n label: \"OAuth\",\n helpText: \"Sign in with Ahrefs to grant access.\",\n secrets: {\n AHREFS_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n AHREFS_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n AHREFS_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-ahrefs-api-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n oauth: {\n authorizationUrl: \"https://app.ahrefs.com/api/auth\",\n tokenUrl: \"https://app.ahrefs.com/api/token\",\n scopes: [\"api\"],\n environmentMapping: {\n AHREFS_TOKEN: \"$secrets.AHREFS_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n agentmail: {\n label: \"AgentMail\",\n helpText:\n \"Connect your AgentMail account to create email inboxes for AI agents, send and receive emails, manage threads, drafts, and webhooks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [AgentMail Console](https://console.agentmail.to)\\n2. Go to **API Keys**\\n3. Create a new API key\\n4. Copy the key\",\n secrets: {\n AGENTMAIL_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-agentmail-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n airtable: {\n label: \"Airtable\",\n helpText:\n \"Connect your Airtable account to access bases, tables, and records\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Airtable to grant access.\",\n secrets: {\n AIRTABLE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n AIRTABLE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://airtable.com/oauth2/v1/authorize\",\n tokenUrl: \"https://airtable.com/oauth2/v1/token\",\n scopes: [\n \"data.records:read\",\n \"data.records:write\",\n \"data.recordComments:read\",\n \"data.recordComments:write\",\n \"schema.bases:read\",\n \"schema.bases:write\",\n \"user.email:read\",\n ],\n environmentMapping: {\n AIRTABLE_TOKEN: \"$secrets.AIRTABLE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n github: {\n label: \"GitHub\",\n helpText:\n \"Connect your GitHub account to access repositories and GitHub features\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with GitHub to grant access.\",\n secrets: {\n GITHUB_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://github.com/login/oauth/authorize\",\n tokenUrl: \"https://github.com/login/oauth/access_token\",\n scopes: [\"repo\", \"project\"],\n environmentMapping: {\n GH_TOKEN: \"$secrets.GITHUB_ACCESS_TOKEN\",\n GITHUB_TOKEN: \"$secrets.GITHUB_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n notion: {\n label: \"Notion\",\n helpText: \"Connect your Notion workspace to access pages and databases\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Notion to grant access.\",\n secrets: {\n NOTION_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n NOTION_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://api.notion.com/v1/oauth/authorize\",\n tokenUrl: \"https://api.notion.com/v1/oauth/token\",\n scopes: [],\n environmentMapping: {\n NOTION_TOKEN: \"$secrets.NOTION_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n gmail: {\n label: \"Gmail\",\n helpText: \"Connect your Gmail account to send and read emails\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Gmail access.\",\n secrets: {\n GMAIL_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GMAIL_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\"https://www.googleapis.com/auth/gmail.modify\"],\n environmentMapping: {\n GMAIL_TOKEN: \"$secrets.GMAIL_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"google-sheets\": {\n label: \"Google Sheets\",\n helpText: \"Connect your Google account to access and manage spreadsheets\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Sheets access.\",\n secrets: {\n GOOGLE_SHEETS_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GOOGLE_SHEETS_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\n \"https://www.googleapis.com/auth/spreadsheets\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n environmentMapping: {\n GOOGLE_SHEETS_TOKEN: \"$secrets.GOOGLE_SHEETS_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"google-docs\": {\n label: \"Google Docs\",\n helpText: \"Connect your Google account to access and manage documents\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Docs access.\",\n secrets: {\n GOOGLE_DOCS_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GOOGLE_DOCS_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\n \"https://www.googleapis.com/auth/documents\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n environmentMapping: {\n GOOGLE_DOCS_TOKEN: \"$secrets.GOOGLE_DOCS_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"google-drive\": {\n label: \"Google Drive\",\n helpText: \"Connect your Google account to access and manage files in Drive\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Drive access.\",\n secrets: {\n GOOGLE_DRIVE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GOOGLE_DRIVE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\n \"https://www.googleapis.com/auth/drive\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n environmentMapping: {\n GOOGLE_DRIVE_TOKEN: \"$secrets.GOOGLE_DRIVE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"google-calendar\": {\n label: \"Google Calendar\",\n helpText:\n \"Connect your Google account to access and manage calendar events\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Calendar access.\",\n secrets: {\n GOOGLE_CALENDAR_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GOOGLE_CALENDAR_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\n \"https://www.googleapis.com/auth/calendar\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n environmentMapping: {\n GOOGLE_CALENDAR_TOKEN: \"$secrets.GOOGLE_CALENDAR_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n close: {\n label: \"Close\",\n featureFlag: FeatureSwitchKey.CloseConnector,\n helpText:\n \"Connect your Close account to manage leads, contacts, and opportunities\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Close to grant access.\",\n secrets: {\n CLOSE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n CLOSE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.close.com/oauth2/authorize/\",\n tokenUrl: \"https://api.close.com/oauth2/token/\",\n scopes: [\"all.full_access\", \"offline_access\"],\n environmentMapping: {\n CLOSE_TOKEN: \"$secrets.CLOSE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"hugging-face\": {\n label: \"Hugging Face\",\n helpText:\n \"Connect your Hugging Face account to access models, datasets, and inference APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Hugging Face](https://huggingface.co)\\n2. Go to **Settings → Access Tokens**\\n3. Create a new token with the required permissions\\n4. Copy the token\",\n secrets: {\n HUGGING_FACE_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"hf_...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n hume: {\n label: \"Hume\",\n helpText:\n \"Connect your Hume account to access emotion AI, speech-to-speech, and expressive text-to-speech APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Hume Portal](https://app.hume.ai)\\n2. Navigate to the **API Keys** page\\n3. Copy your API key\",\n secrets: {\n HUME_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n heygen: {\n label: \"HeyGen\",\n helpText:\n \"Connect your HeyGen account to create AI-generated videos, manage avatars, and automate video production\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n HEYGEN_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-heygen-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n hubspot: {\n label: \"HubSpot\",\n helpText:\n \"Connect your HubSpot account to manage contacts, companies, deals, and tickets\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with HubSpot to grant access.\",\n secrets: {\n HUBSPOT_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n HUBSPOT_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.hubspot.com/oauth/authorize\",\n tokenUrl: \"https://api.hubapi.com/oauth/v1/token\",\n scopes: [\n \"crm.objects.contacts.read\",\n \"crm.objects.contacts.write\",\n \"crm.objects.companies.read\",\n \"crm.objects.companies.write\",\n \"crm.objects.deals.read\",\n \"crm.objects.deals.write\",\n \"tickets\",\n \"crm.objects.line_items.read\",\n \"crm.objects.quotes.read\",\n \"crm.lists.read\",\n \"crm.schemas.contacts.read\",\n \"settings.users.read\",\n ],\n environmentMapping: {\n HUBSPOT_TOKEN: \"$secrets.HUBSPOT_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n computer: {\n label: \"Computer\",\n featureFlag: FeatureSwitchKey.ComputerConnector,\n helpText:\n \"Expose local services to remote sandboxes via authenticated ngrok tunnels\",\n authMethods: {\n api: {\n label: \"API\",\n helpText: \"Server-provisioned ngrok tunnel credentials.\",\n secrets: {\n COMPUTER_CONNECTOR_BRIDGE_TOKEN: {\n label: \"Bridge Token\",\n required: true,\n },\n COMPUTER_CONNECTOR_DOMAIN_ID: {\n label: \"Domain ID\",\n required: true,\n },\n COMPUTER_CONNECTOR_DOMAIN: {\n label: \"Tunnel Domain\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api\",\n bridgeMapping: {\n COMPUTER_CONNECTOR_BRIDGE_TOKEN:\n \"$secrets.COMPUTER_CONNECTOR_BRIDGE_TOKEN\",\n COMPUTER_CONNECTOR_DOMAIN: \"$secrets.COMPUTER_CONNECTOR_DOMAIN\",\n },\n },\n slack: {\n label: \"Slack\",\n helpText: \"Connect your Slack account to send messages and read channels\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Slack to grant access.\",\n secrets: {\n SLACK_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://slack.com/oauth/v2/authorize\",\n tokenUrl: \"https://slack.com/api/oauth.v2.access\",\n scopes: [\n // Channels\n \"channels:read\",\n \"channels:history\",\n // Messaging\n \"chat:write\",\n // Users\n \"users:read\",\n \"users:read.email\",\n // Files\n \"files:read\",\n \"files:write\",\n // Direct messages (high priority)\n \"im:history\",\n \"im:write\",\n // Reactions (high priority)\n \"reactions:read\",\n \"reactions:write\",\n // Search (high priority)\n \"search:read\",\n // Private channels (high priority)\n \"groups:read\",\n \"groups:history\",\n // Reminders (medium priority)\n \"reminders:read\",\n \"reminders:write\",\n // Pins (medium priority)\n \"pins:read\",\n \"pins:write\",\n // User groups (medium priority)\n \"usergroups:read\",\n // Multi-person DMs (medium priority)\n \"mpim:history\",\n // Do Not Disturb (low priority)\n \"dnd:read\",\n // Bookmarks (low priority)\n \"bookmarks:read\",\n // Team info (low priority)\n \"team:read\",\n // Custom emoji (low priority)\n \"emoji:read\",\n ],\n environmentMapping: {\n SLACK_TOKEN: \"$secrets.SLACK_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n docusign: {\n label: \"DocuSign\",\n featureFlag: FeatureSwitchKey.DocuSignConnector,\n helpText:\n \"Connect your DocuSign account to send and manage electronic signatures\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with DocuSign to grant access.\",\n secrets: {\n DOCUSIGN_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n DOCUSIGN_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://account.docusign.com/oauth/auth\",\n tokenUrl: \"https://account.docusign.com/oauth/token\",\n scopes: [\"signature\", \"extended\", \"openid\"],\n environmentMapping: {\n DOCUSIGN_TOKEN: \"$secrets.DOCUSIGN_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n dropbox: {\n label: \"Dropbox\",\n featureFlag: FeatureSwitchKey.DropboxConnector,\n helpText: \"Connect your Dropbox account to access and manage files\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Dropbox to grant access.\",\n secrets: {\n DROPBOX_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n DROPBOX_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Access Token\",\n secrets: {\n DROPBOX_TOKEN: {\n label: \"Access Token\",\n required: true,\n placeholder: \"sl.xxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.dropbox.com/oauth2/authorize\",\n tokenUrl: \"https://api.dropboxapi.com/oauth2/token\",\n scopes: [\n \"account_info.read\",\n \"files.metadata.read\",\n \"files.content.read\",\n ],\n environmentMapping: {\n DROPBOX_TOKEN: \"$secrets.DROPBOX_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n linear: {\n label: \"Linear\",\n helpText: \"Connect your Linear account to manage issues and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Linear to grant access.\",\n secrets: {\n LINEAR_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n LINEAR_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: false,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://linear.app/oauth/authorize\",\n tokenUrl: \"https://api.linear.app/oauth/token\",\n scopes: [\n \"read\",\n \"write\",\n \"issues:create\",\n \"comments:create\",\n \"timeSchedule:write\",\n ],\n environmentMapping: {\n LINEAR_TOKEN: \"$secrets.LINEAR_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n intercom: {\n label: \"Intercom\",\n helpText:\n \"Connect your Intercom account to manage customer conversations, contacts, messages, and support tickets\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n secrets: {\n INTERCOM_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n instantly: {\n label: \"Instantly\",\n helpText:\n \"Connect your Instantly account to manage email campaigns, leads, and outreach sequences\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n INSTANTLY_API_KEY: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-instantly-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n jam: {\n label: \"Jam\",\n helpText:\n \"Connect your Jam account to capture bugs, manage reports, and access debugging telemetry\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n secrets: {\n JAM_TOKEN: {\n label: \"Personal Access Token\",\n required: true,\n placeholder: \"jam_pat_...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n jira: {\n label: \"Jira\",\n helpText:\n \"Connect your Jira account to manage projects, issues, sprints, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n JIRA_API_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n JIRA_DOMAIN: {\n label: \"Jira Domain\",\n required: true,\n type: \"variable\",\n placeholder: \"your-domain.atlassian.net\",\n },\n JIRA_EMAIL: {\n label: \"Jira Email\",\n required: true,\n type: \"variable\",\n placeholder: \"your-email@example.com\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n jotform: {\n label: \"Jotform\",\n helpText:\n \"Connect your Jotform account to manage forms, submissions, and automate form workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your [Jotform account](https://www.jotform.com/myaccount/api)\\n2. Navigate to **Settings** → **API**\\n3. Click **Create New Key**\\n4. Copy your **API Key**\",\n secrets: {\n JOTFORM_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n kommo: {\n label: \"Kommo\",\n helpText:\n \"Connect your Kommo account to manage leads, contacts, and sales pipelines\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n KOMMO_API_KEY: {\n label: \"API Key\",\n required: true,\n },\n KOMMO_SUBDOMAIN: {\n label: \"Subdomain\",\n required: true,\n type: \"variable\",\n placeholder: \"your-subdomain\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n line: {\n label: \"LINE\",\n helpText:\n \"Connect your LINE account to send messages, manage channels, and access the LINE Messaging API\",\n authMethods: {\n \"api-token\": {\n label: \"Channel Access Token\",\n helpText:\n \"1. Log in to the [LINE Developers Console](https://developers.line.biz/console)\\n2. Select your provider and channel\\n3. Go to the **Messaging API** tab\\n4. Issue or copy the **Channel access token (long-lived)**\",\n secrets: {\n LINE_TOKEN: {\n label: \"Channel Access Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n loops: {\n label: \"Loops\",\n helpText:\n \"Connect your Loops account to send behavioral and transactional emails for your SaaS product\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Loops](https://app.loops.so)\\n2. Go to **Settings** → **API**\\n3. Click **Generate key**\\n4. Copy the generated API key\",\n secrets: {\n LOOPS_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"d2d561f5ff80136f69b4b5a31b9fb3c9\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n make: {\n label: \"Make\",\n helpText:\n \"Connect your Make account to manage scenarios, organizations, and automation workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n MAKE_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n metabase: {\n label: \"Metabase\",\n helpText:\n \"Connect your Metabase instance to query data, manage dashboards, and automate analytics workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your Metabase instance as an admin\\n2. Go to **Admin** → **Settings** → **Authentication** → **API Keys**\\n3. Click **Create API Key**\\n4. Enter a name and select a group for the key\\n5. Copy the generated API key\",\n secrets: {\n METABASE_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n deel: {\n label: \"Deel\",\n featureFlag: FeatureSwitchKey.DeelConnector,\n helpText:\n \"Connect your Deel account to access HR, payroll, and contractor data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Deel to grant access.\",\n secrets: {\n DEEL_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n DEEL_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n DEEL_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.deel.com/oauth2/authorize\",\n tokenUrl: \"https://app.deel.com/oauth2/tokens\",\n scopes: [\n \"contracts:read\",\n \"people:read\",\n \"organizations:read\",\n \"payslips:read\",\n \"time-off:read\",\n \"time-off:write\",\n \"invoice-adjustments:read\",\n \"invoice-adjustments:write\",\n ],\n environmentMapping: {\n DEEL_TOKEN: \"$secrets.DEEL_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n deepseek: {\n label: \"DeepSeek\",\n helpText:\n \"Connect your DeepSeek account to use DeepSeek AI models for chat completions, code generation, and reasoning tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n DEEPSEEK_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"sk-...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n clickup: {\n label: \"ClickUp\",\n helpText:\n \"Connect your ClickUp account to manage tasks, projects, and team workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n CLICKUP_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"pk_...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n cloudflare: {\n label: \"Cloudflare\",\n helpText:\n \"Connect your Cloudflare account to manage DNS, zones, workers, and other Cloudflare services\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to the [Cloudflare Dashboard](https://dash.cloudflare.com)\\n2. Go to **My Profile** → **API Tokens**\\n3. Click **Create Token** and configure the required permissions\\n4. Copy the generated token\",\n secrets: {\n CLOUDFLARE_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n cloudinary: {\n label: \"Cloudinary\",\n helpText:\n \"Connect your Cloudinary account to manage images, videos, and media assets with CDN delivery and transformations\",\n authMethods: {\n \"api-token\": {\n label: \"API Credentials\",\n helpText:\n \"1. Log in to the [Cloudinary Console](https://console.cloudinary.com/settings/api-keys)\\n2. Go to **Settings** → **API Keys**\\n3. Copy your **Cloud Name**, **API Key**, and **API Secret**\",\n secrets: {\n CLOUDINARY_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n CLOUDINARY_API_SECRET: {\n label: \"API Secret\",\n required: true,\n },\n CLOUDINARY_CLOUD_NAME: {\n label: \"Cloud Name\",\n required: true,\n type: \"variable\",\n placeholder: \"your-cloud-name\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n cronlytic: {\n label: \"Cronlytic\",\n helpText:\n \"Connect your Cronlytic account to monitor cron jobs and scheduled tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n CRONLYTIC_API_KEY: {\n label: \"API Key\",\n required: true,\n },\n CRONLYTIC_USER_ID: {\n label: \"User ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"customer-io\": {\n label: \"Customer.io\",\n helpText:\n \"Connect your Customer.io account to send behavioral emails, SMS, and push notifications triggered by user events\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n CUSTOMERIO_APP_TOKEN: {\n label: \"App API Key\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n dify: {\n label: \"Dify\",\n helpText:\n \"Connect your Dify account to build and manage AI-powered workflows, chatbots, and agentic applications\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n DIFY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"app-...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n figma: {\n label: \"Figma\",\n featureFlag: FeatureSwitchKey.FigmaConnector,\n helpText: \"Connect your Figma account to access design files and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Figma to grant access.\",\n secrets: {\n FIGMA_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n FIGMA_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Personal Access Token\",\n secrets: {\n FIGMA_TOKEN: {\n label: \"Personal Access Token\",\n required: true,\n placeholder: \"figd_xxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.figma.com/oauth\",\n tokenUrl: \"https://api.figma.com/v1/oauth/token\",\n scopes: [\n \"current_user:read\",\n \"file_content:read\",\n \"file_metadata:read\",\n \"file_versions:read\",\n \"projects:read\",\n \"file_comments:read\",\n \"file_comments:write\",\n \"library_assets:read\",\n \"library_content:read\",\n ],\n environmentMapping: {\n FIGMA_TOKEN: \"$secrets.FIGMA_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n mercury: {\n label: \"Mercury\",\n featureFlag: FeatureSwitchKey.MercuryConnector,\n helpText:\n \"Connect your Mercury account to access banking and financial data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Mercury to grant access.\",\n secrets: {\n MERCURY_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n MERCURY_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to your [Mercury Dashboard](https://mercury.com)\\n2. Go to **Settings → Tokens**\\n3. Generate a new API token\\n4. Copy the token\",\n secrets: {\n MERCURY_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"secret-token:mercury_production_...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://oauth2.mercury.com/oauth2/auth\",\n tokenUrl: \"https://oauth2.mercury.com/oauth2/token\",\n scopes: [\"offline_access\"],\n environmentMapping: {\n MERCURY_TOKEN: \"$secrets.MERCURY_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n minimax: {\n label: \"MiniMax\",\n helpText:\n \"Connect your MiniMax account to access AI model APIs for text, voice, and video generation\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n MINIMAX_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-minimax-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n reportei: {\n label: \"Reportei\",\n helpText:\n \"Connect your Reportei account to generate and manage marketing reports with automated analytics\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n REPORTEI_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-reportei-api-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n serpapi: {\n label: \"SerpApi\",\n helpText:\n \"Connect your SerpApi account to search Google, Bing, YouTube and other search engines programmatically\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n SERPAPI_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-serpapi-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n salesforce: {\n label: \"Salesforce\",\n helpText:\n \"Connect your Salesforce account to manage CRM data, contacts, leads, and sales workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n SALESFORCE_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"00D...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n reddit: {\n label: \"Reddit\",\n featureFlag: FeatureSwitchKey.RedditConnector,\n helpText:\n \"Connect your Reddit account to access Reddit discussions and content\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Reddit to grant access.\",\n secrets: {\n REDDIT_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n REDDIT_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.reddit.com/api/v1/authorize\",\n tokenUrl: \"https://www.reddit.com/api/v1/access_token\",\n scopes: [\"identity\", \"read\"],\n environmentMapping: {\n REDDIT_TOKEN: \"$secrets.REDDIT_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n strava: {\n label: \"Strava\",\n helpText:\n \"Connect your Strava account to access activities and athlete data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Strava to grant access.\",\n secrets: {\n STRAVA_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n STRAVA_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.strava.com/oauth/authorize\",\n tokenUrl: \"https://www.strava.com/oauth/token\",\n scopes: [\n \"read\",\n \"profile:read_all\",\n \"activity:read_all\",\n \"activity:write\",\n ],\n environmentMapping: {\n STRAVA_TOKEN: \"$secrets.STRAVA_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n x: {\n label: \"X\",\n helpText:\n \"Connect your X (Twitter) account to read tweets, timelines, and search\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with X to grant read access.\",\n secrets: {\n X_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n X_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://twitter.com/i/oauth2/authorize\",\n tokenUrl: \"https://api.twitter.com/2/oauth2/token\",\n scopes: [\"tweet.read\", \"users.read\", \"follows.read\", \"offline.access\"],\n environmentMapping: {\n X_ACCESS_TOKEN: \"$secrets.X_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n neon: {\n label: \"Neon\",\n featureFlag: FeatureSwitchKey.NeonConnector,\n helpText:\n \"Connect your Neon account to manage serverless Postgres databases and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Neon to grant access.\",\n secrets: {\n NEON_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n NEON_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n NEON_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"napi_xxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://oauth2.neon.tech/oauth2/auth\",\n tokenUrl: \"https://oauth2.neon.tech/oauth2/token\",\n scopes: [\n \"openid\",\n \"offline_access\",\n \"urn:neoncloud:projects:read\",\n \"urn:neoncloud:projects:create\",\n \"urn:neoncloud:projects:update\",\n \"urn:neoncloud:projects:delete\",\n ],\n environmentMapping: {\n NEON_TOKEN: \"$secrets.NEON_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"garmin-connect\": {\n label: \"Garmin Connect\",\n featureFlag: FeatureSwitchKey.GarminConnectConnector,\n helpText:\n \"Connect your Garmin Connect account to access wellness and activity data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Garmin Connect to grant access.\",\n secrets: {\n GARMIN_CONNECT_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GARMIN_CONNECT_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://connect.garmin.com/oauth2Confirm\",\n tokenUrl: \"https://diauth.garmin.com/di-oauth2-service/oauth/token\",\n scopes: [],\n environmentMapping: {\n GARMIN_CONNECT_TOKEN: \"$secrets.GARMIN_CONNECT_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n vercel: {\n label: \"Vercel\",\n helpText:\n \"Connect your Vercel account to manage deployments, projects, and domains\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Vercel to grant access.\",\n secrets: {\n VERCEL_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n tokenUrl: \"https://api.vercel.com/v2/oauth/access_token\",\n scopes: [],\n environmentMapping: {\n VERCEL_TOKEN: \"$secrets.VERCEL_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n sentry: {\n label: \"Sentry\",\n helpText:\n \"Connect your Sentry account to access error tracking and project data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Sentry to grant access.\",\n secrets: {\n SENTRY_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n SENTRY_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://sentry.io/oauth/authorize/\",\n tokenUrl: \"https://sentry.io/oauth/token/\",\n scopes: [\n \"org:read\",\n \"project:read\",\n \"team:read\",\n \"member:read\",\n \"event:read\",\n \"event:write\",\n ],\n environmentMapping: {\n SENTRY_TOKEN: \"$secrets.SENTRY_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n posthog: {\n label: \"PostHog\",\n featureFlag: FeatureSwitchKey.PosthogConnector,\n helpText:\n \"Connect your PostHog account to access product analytics, feature flags, and experiments\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with PostHog to grant access.\",\n secrets: {\n POSTHOG_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n POSTHOG_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Personal API Key\",\n secrets: {\n POSTHOG_TOKEN: {\n label: \"Personal API Key\",\n required: true,\n placeholder: \"phx_...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n oauth: {\n authorizationUrl: \"https://us.posthog.com/oauth/authorize\",\n tokenUrl: \"https://us.posthog.com/oauth/token\",\n scopes: [\n \"openid\",\n \"profile\",\n \"email\",\n \"user:read\",\n \"project:read\",\n \"feature_flag:read\",\n \"feature_flag:write\",\n \"experiment:read\",\n \"experiment:write\",\n \"insight:read\",\n \"insight:write\",\n \"dashboard:read\",\n \"dashboard:write\",\n \"action:read\",\n \"action:write\",\n \"annotation:read\",\n \"annotation:write\",\n \"cohort:read\",\n \"cohort:write\",\n \"event_definition:read\",\n \"query:read\",\n \"survey:read\",\n \"survey:write\",\n \"error_tracking:read\",\n ],\n environmentMapping: {\n POSTHOG_TOKEN: \"$secrets.POSTHOG_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n productlane: {\n label: \"Productlane\",\n helpText:\n \"Connect your Productlane account to manage feedback, insights, changelogs, and customer data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PRODUCTLANE_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-productlane-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"intervals-icu\": {\n label: \"Intervals.icu\",\n featureFlag: FeatureSwitchKey.IntervalsIcuConnector,\n helpText:\n \"Connect your Intervals.icu account to access training, activity, wellness, and calendar data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Intervals.icu to grant access.\",\n secrets: {\n INTERVALS_ICU_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n INTERVALS_ICU_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://intervals.icu/oauth/authorize\",\n tokenUrl: \"https://intervals.icu/api/oauth/token\",\n scopes: [\"ACTIVITY\", \"WELLNESS\", \"CALENDAR\", \"SETTINGS\", \"LIBRARY\"],\n environmentMapping: {\n INTERVALS_ICU_TOKEN: \"$secrets.INTERVALS_ICU_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n monday: {\n label: \"Monday.com\",\n helpText:\n \"Connect your Monday.com account to manage boards, items, and workflows\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Monday.com to grant access.\",\n secrets: {\n MONDAY_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n MONDAY_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://auth.monday.com/oauth2/authorize\",\n tokenUrl: \"https://auth.monday.com/oauth2/token\",\n scopes: [\n \"me:read\",\n \"boards:read\",\n \"boards:write\",\n \"docs:read\",\n \"docs:write\",\n \"workspaces:read\",\n \"users:read\",\n \"account:read\",\n \"updates:read\",\n \"updates:write\",\n \"notifications:write\",\n \"assets:read\",\n \"tags:read\",\n \"teams:read\",\n ],\n environmentMapping: {\n MONDAY_TOKEN: \"$secrets.MONDAY_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n calendly: {\n label: \"Calendly\",\n helpText:\n \"Connect your Calendly account to access scheduling data, event types, and invitee information\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n helpText:\n \"1. Log in to [Calendly](https://calendly.com)\\n2. Go to **Integrations > API & Webhooks**\\n3. Generate a Personal Access Token\\n4. Copy the token\",\n secrets: {\n CALENDLY_TOKEN: {\n label: \"Personal Access Token\",\n required: true,\n placeholder: \"your-calendly-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n canva: {\n label: \"Canva\",\n featureFlag: FeatureSwitchKey.CanvaConnector,\n helpText:\n \"Connect your Canva account to access designs, assets, and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Canva to grant access.\",\n secrets: {\n CANVA_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n CANVA_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.canva.com/api/oauth/authorize\",\n tokenUrl: \"https://api.canva.com/rest/v1/oauth/token\",\n scopes: [\n \"asset:read\",\n \"asset:write\",\n \"brandtemplate:content:read\",\n \"brandtemplate:meta:read\",\n \"comment:read\",\n \"comment:write\",\n \"design:content:read\",\n \"design:content:write\",\n \"design:meta:read\",\n \"folder:read\",\n \"folder:write\",\n \"profile:read\",\n ],\n environmentMapping: {\n CANVA_TOKEN: \"$secrets.CANVA_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"cal-com\": {\n label: \"Cal.com\",\n helpText:\n \"Connect your Cal.com account to manage scheduling, bookings, and calendar events\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Cal.com](https://app.cal.com)\\n2. Go to **Settings** → **Developer** → **API Keys**\\n3. Click **Create API Key**\\n4. Copy the generated key\",\n secrets: {\n CALCOM_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"cal_live_xxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n xero: {\n label: \"Xero\",\n helpText:\n \"Connect your Xero account to access accounting data, invoices, and contacts\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Xero to grant access.\",\n secrets: {\n XERO_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n XERO_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://login.xero.com/identity/connect/authorize\",\n tokenUrl: \"https://identity.xero.com/connect/token\",\n scopes: [\n \"openid\",\n \"profile\",\n \"email\",\n \"offline_access\",\n \"accounting.contacts\",\n \"accounting.settings\",\n \"accounting.invoices\",\n \"accounting.payments\",\n \"accounting.banktransactions\",\n \"accounting.manualjournals\",\n \"accounting.attachments\",\n \"accounting.budgets.read\",\n \"accounting.reports.profitandloss.read\",\n \"accounting.reports.balancesheet.read\",\n \"accounting.reports.trialbalance.read\",\n \"accounting.reports.aged.read\",\n \"accounting.reports.executivesummary.read\",\n \"accounting.reports.banksummary.read\",\n \"accounting.reports.budgetsummary.read\",\n \"files\",\n \"assets\",\n \"projects\",\n ],\n environmentMapping: {\n XERO_TOKEN: \"$secrets.XERO_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n supabase: {\n label: \"Supabase\",\n featureFlag: FeatureSwitchKey.SupabaseConnector,\n helpText:\n \"Connect your Supabase account to manage projects, databases, and APIs\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Supabase to grant access.\",\n secrets: {\n SUPABASE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n SUPABASE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Service Role Key\",\n secrets: {\n SUPABASE_TOKEN: {\n label: \"Service Role Key\",\n required: true,\n placeholder: \"eyJhbGci... or sb_secret_...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://api.supabase.com/v1/oauth/authorize\",\n tokenUrl: \"https://api.supabase.com/v1/oauth/token\",\n scopes: [\n \"organizations:read\",\n \"projects:read\",\n \"projects:write\",\n \"database:read\",\n \"database:write\",\n \"secrets:read\",\n \"rest:read\",\n \"rest:write\",\n \"auth:read\",\n \"analytics:read\",\n \"environment:read\",\n \"domains:read\",\n ],\n environmentMapping: {\n SUPABASE_TOKEN: \"$secrets.SUPABASE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n todoist: {\n label: \"Todoist\",\n helpText:\n \"Connect your Todoist account to manage tasks, projects, labels, and comments\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Todoist to grant access.\",\n secrets: {\n TODOIST_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://todoist.com/oauth/authorize\",\n tokenUrl: \"https://todoist.com/oauth/access_token\",\n scopes: [\"data:read_write\", \"data:delete\", \"project:delete\"],\n environmentMapping: {\n TODOIST_TOKEN: \"$secrets.TODOIST_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n webflow: {\n label: \"Webflow\",\n featureFlag: FeatureSwitchKey.WebflowConnector,\n helpText:\n \"Connect your Webflow account to manage sites, pages, CMS collections, and ecommerce\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Webflow to grant access.\",\n secrets: {\n WEBFLOW_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Site Token\",\n secrets: {\n WEBFLOW_TOKEN: {\n label: \"Site Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://webflow.com/oauth/authorize\",\n tokenUrl: \"https://api.webflow.com/oauth/access_token\",\n scopes: [\n \"authorized_user:read\",\n \"sites:read\",\n \"sites:write\",\n \"pages:read\",\n \"pages:write\",\n \"cms:read\",\n \"cms:write\",\n \"assets:read\",\n \"assets:write\",\n \"forms:read\",\n \"ecommerce:read\",\n \"ecommerce:write\",\n \"users:read\",\n \"workspace:read\",\n \"custom_code:read\",\n \"custom_code:write\",\n ],\n environmentMapping: {\n WEBFLOW_TOKEN: \"$secrets.WEBFLOW_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n wrike: {\n label: \"Wrike\",\n helpText:\n \"Connect your Wrike account to manage projects, tasks, folders, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"Permanent Access Token\",\n secrets: {\n WRIKE_TOKEN: {\n label: \"Permanent Access Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"outlook-mail\": {\n label: \"Outlook Mail\",\n featureFlag: FeatureSwitchKey.OutlookMailConnector,\n helpText: \"Connect your Microsoft Outlook account to send and read emails\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Microsoft to grant Outlook Mail access.\",\n secrets: {\n OUTLOOK_MAIL_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n OUTLOOK_MAIL_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl:\n \"https://login.microsoftonline.com/common/oauth2/v2.0/authorize\",\n tokenUrl: \"https://login.microsoftonline.com/common/oauth2/v2.0/token\",\n scopes: [\"Mail.ReadWrite\", \"Mail.Send\", \"User.Read\", \"offline_access\"],\n environmentMapping: {\n OUTLOOK_MAIL_TOKEN: \"$secrets.OUTLOOK_MAIL_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"outlook-calendar\": {\n label: \"Outlook Calendar\",\n featureFlag: FeatureSwitchKey.OutlookCalendarConnector,\n helpText:\n \"Connect your Microsoft account to access and manage Outlook calendar events\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Microsoft to grant Outlook Calendar access.\",\n secrets: {\n OUTLOOK_CALENDAR_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n OUTLOOK_CALENDAR_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl:\n \"https://login.microsoftonline.com/common/oauth2/v2.0/authorize\",\n tokenUrl: \"https://login.microsoftonline.com/common/oauth2/v2.0/token\",\n scopes: [\"Calendars.ReadWrite\", \"User.Read\", \"offline_access\"],\n environmentMapping: {\n OUTLOOK_CALENDAR_TOKEN: \"$secrets.OUTLOOK_CALENDAR_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n asana: {\n label: \"Asana\",\n helpText:\n \"Connect your Asana account to manage tasks, projects, portfolios, goals, and team workflows\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Asana to grant access.\",\n secrets: {\n ASANA_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n ASANA_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.asana.com/-/oauth_authorize\",\n tokenUrl: \"https://app.asana.com/-/oauth_token\",\n scopes: [],\n environmentMapping: {\n ASANA_TOKEN: \"$secrets.ASANA_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n atlassian: {\n label: \"Atlassian (Jira/Confluence)\",\n helpText:\n \"Connect your Atlassian account to manage Jira issues, Confluence pages, and other Atlassian products\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens)\\n2. Click **Create API token**\\n3. Give it a label and click **Create**\\n4. Copy the generated token\",\n secrets: {\n ATLASSIAN_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-api-token\",\n },\n ATLASSIAN_EMAIL: {\n label: \"Email\",\n required: true,\n placeholder: \"you@example.com\",\n helpText:\n \"The email address associated with your Atlassian account\",\n type: \"variable\",\n },\n ATLASSIAN_DOMAIN: {\n label: \"Domain\",\n required: true,\n placeholder: \"mycompany\",\n helpText:\n \"Your Atlassian domain (e.g. 'mycompany' from mycompany.atlassian.net)\",\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"meta-ads\": {\n label: \"Meta Ads\",\n featureFlag: FeatureSwitchKey.MetaAdsConnector,\n helpText:\n \"Connect your Meta Ads Manager account to manage ad campaigns, audiences, and insights\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Facebook to grant access to Ads Manager.\",\n secrets: {\n META_ADS_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.facebook.com/v22.0/dialog/oauth\",\n tokenUrl: \"https://graph.facebook.com/v22.0/oauth/access_token\",\n scopes: [\"ads_management\", \"ads_read\", \"business_management\"],\n environmentMapping: {\n META_ADS_TOKEN: \"$secrets.META_ADS_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n stripe: {\n label: \"Stripe\",\n featureFlag: FeatureSwitchKey.StripeConnector,\n helpText:\n \"Connect your Stripe account to manage payments, customers, and subscriptions\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Stripe to grant access.\",\n secrets: {\n STRIPE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n STRIPE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: false,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://connect.stripe.com/oauth/authorize\",\n tokenUrl: \"https://connect.stripe.com/oauth/token\",\n scopes: [\"read_write\"],\n environmentMapping: {\n STRIPE_TOKEN: \"$secrets.STRIPE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n openai: {\n label: \"OpenAI\",\n helpText:\n \"Connect your OpenAI account to access GPT models, embeddings, image generation, and other AI capabilities\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n OPENAI_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"sk-...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n similarweb: {\n label: \"SimilarWeb\",\n helpText:\n \"Connect your SimilarWeb account to access website traffic analytics, competitive intelligence, and market insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n SIMILARWEB_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-similarweb-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n perplexity: {\n label: \"Perplexity\",\n helpText:\n \"Connect your Perplexity account to access AI-powered search and research capabilities via the Sonar API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PERPLEXITY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"pplx-...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n plausible: {\n label: \"Plausible\",\n helpText:\n \"Connect your Plausible Analytics account to access website traffic analytics, visitor stats, and site management\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Plausible Analytics](https://plausible.io)\\n2. Go to **Account Settings** → **API Keys**\\n3. Click **New API Key** and choose **Stats API**\\n4. Copy the key (it is only shown once)\",\n secrets: {\n PLAUSIBLE_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-plausible-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n mailchimp: {\n label: \"Mailchimp\",\n featureFlag: FeatureSwitchKey.MailchimpConnector,\n helpText:\n \"Connect your Mailchimp account to manage audiences, campaigns, templates, and automations\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n MAILCHIMP_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-us00\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n oauth: {\n authorizationUrl: \"https://login.mailchimp.com/oauth2/authorize\",\n tokenUrl: \"https://login.mailchimp.com/oauth2/token\",\n scopes: [],\n environmentMapping: {\n MAILCHIMP_TOKEN: \"$secrets.MAILCHIMP_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n chatwoot: {\n label: \"Chatwoot\",\n helpText:\n \"Connect your Chatwoot account to manage conversations, contacts, and customer support workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Access Token\",\n secrets: {\n CHATWOOT_TOKEN: {\n label: \"API Access Token\",\n required: true,\n placeholder: \"your-chatwoot-access-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n resend: {\n label: \"Resend\",\n featureFlag: FeatureSwitchKey.ResendConnector,\n helpText:\n \"Connect your Resend account to send transactional emails, manage domains, audiences, and contacts\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n RESEND_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"re_xxxxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n revenuecat: {\n label: \"RevenueCat\",\n helpText:\n \"Connect your RevenueCat account to manage in-app subscriptions, purchases, and customer data\",\n authMethods: {\n \"api-token\": {\n label: \"Secret API Key\",\n secrets: {\n REVENUECAT_TOKEN: {\n label: \"Secret API Key\",\n required: true,\n placeholder: \"sk_xxxxxxxxxxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n pdf4me: {\n label: \"PDF4me\",\n helpText:\n \"Connect your PDF4me account to convert, merge, split, compress, and manipulate PDF documents\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PDF4ME_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-pdf4me-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n apify: {\n label: \"Apify\",\n helpText:\n \"Connect your Apify account to run web scraping actors, manage datasets, and automate browser tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Apify Console](https://console.apify.com)\\n2. Go to **Settings > Integrations**\\n3. Copy your **Personal API token**\",\n secrets: {\n APIFY_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"apify_api_xxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n bitrix: {\n label: \"Bitrix24\",\n helpText:\n \"Connect your Bitrix24 account to manage CRM, tasks, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n secrets: {\n BITRIX_WEBHOOK_URL: {\n label: \"Webhook URL\",\n required: true,\n placeholder: \"https://your-domain.bitrix24.com/rest/1/xxx/\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n brevo: {\n label: \"Brevo\",\n helpText:\n \"Connect your Brevo account to manage email campaigns, transactional emails, and CRM contacts\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Brevo](https://app.brevo.com)\\n2. Go to **Settings** → **SMTP & API** → **API Keys**\\n3. Copy your API key\",\n secrets: {\n BREVO_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"xkeysib-...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"brave-search\": {\n label: \"Brave Search\",\n helpText:\n \"Connect your Brave Search account to perform privacy-focused web, image, video, and news searches\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n BRAVE_API_KEY: {\n label: \"API Key\",\n required: true,\n placeholder: \"BSAxxxxxxxxxxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"bright-data\": {\n label: \"Bright Data\",\n helpText:\n \"Connect your Bright Data account to scrape websites, manage proxies, and access web data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Bright Data](https://brightdata.com/cp)\\n2. Go to **Account settings**\\n3. Click **Add API key** and configure permissions\\n4. Copy the token (shown only once)\",\n secrets: {\n BRIGHTDATA_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n browserbase: {\n label: \"Browserbase\",\n helpText:\n \"Connect your Browserbase account to create browser sessions, persist contexts, and automate cloud browsers\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n BROWSERBASE_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n BROWSERBASE_PROJECT_ID: {\n label: \"Project ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n browserless: {\n label: \"Browserless\",\n helpText:\n \"Connect your Browserless account to take screenshots, generate PDFs, scrape pages, and automate headless browsers\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n BROWSERLESS_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n fireflies: {\n label: \"Fireflies\",\n helpText:\n \"Connect your Fireflies.ai account to transcribe and analyze meetings\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n FIREFLIES_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n firecrawl: {\n label: \"Firecrawl\",\n helpText:\n \"Connect your Firecrawl account to scrape webpages, crawl websites, and extract structured data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Firecrawl](https://www.firecrawl.dev)\\n2. Go to your **Dashboard**\\n3. Copy your **API Key**\",\n secrets: {\n FIRECRAWL_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"fc-xxxxxxxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n scrapeninja: {\n label: \"ScrapeNinja\",\n helpText:\n \"Connect your ScrapeNinja account to scrape web pages with Chrome TLS fingerprint and JS rendering\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n SCRAPENINJA_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n pdfco: {\n label: \"PDF.co\",\n helpText:\n \"Connect your PDF.co account to convert, merge, split, and extract data from PDF documents via API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PDFCO_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-pdfco-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n elevenlabs: {\n label: \"ElevenLabs\",\n helpText:\n \"Connect your ElevenLabs account to generate speech, clone voices, manage audio projects, and access sound effects\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n ELEVENLABS_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-elevenlabs-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n explorium: {\n label: \"Explorium\",\n helpText:\n \"Connect your Explorium account to access business data enrichment, prospect discovery, and AI-powered data insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n EXPLORIUM_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-explorium-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n devto: {\n label: \"Dev.to\",\n helpText:\n \"Connect your Dev.to account to publish articles, manage posts, and interact with the developer community\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n DEVTO_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-devto-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n fal: {\n label: \"fal.ai\",\n helpText:\n \"Connect your fal.ai account to run AI models for image generation, video generation, and other AI tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n FAL_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"fal_...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n granola: {\n label: \"Granola\",\n helpText:\n \"Connect your Granola account to access meeting notes, transcripts, summaries, and calendar event details\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n GRANOLA_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-granola-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n podchaser: {\n label: \"Podchaser\",\n helpText:\n \"Connect your Podchaser account to search podcasts, episodes, creators, and access podcast industry data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n PODCHASER_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-podchaser-access-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n pushinator: {\n label: \"Pushinator\",\n helpText:\n \"Connect your Pushinator account to send push notifications to mobile devices\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n PUSHINATOR_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-pushinator-api-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n qdrant: {\n label: \"Qdrant\",\n helpText:\n \"Connect your Qdrant account to store, search, and manage vector embeddings\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Qdrant Cloud](https://cloud.qdrant.io)\\n2. Open your cluster's detail page and go to **API Keys**\\n3. Click **Create** and configure your key\\n4. Copy the key (shown only once)\",\n secrets: {\n QDRANT_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-qdrant-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n qiita: {\n label: \"Qiita\",\n helpText:\n \"Connect your Qiita account to search, read, and publish technical articles\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n secrets: {\n QIITA_TOKEN: {\n label: \"Access Token\",\n required: true,\n placeholder: \"your-qiita-access-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n zeptomail: {\n label: \"ZeptoMail\",\n helpText:\n \"Connect your ZeptoMail account to send transactional emails via Zoho's email delivery service\",\n authMethods: {\n \"api-token\": {\n label: \"Send Mail Token\",\n secrets: {\n ZEPTOMAIL_TOKEN: {\n label: \"Send Mail Token\",\n required: true,\n placeholder: \"your-zeptomail-send-mail-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n runway: {\n label: \"Runway\",\n helpText:\n \"Connect your Runway account to generate AI videos from images, text, or video inputs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n RUNWAY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-runway-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n shortio: {\n label: \"Short.io\",\n helpText:\n \"Connect your Short.io account to create and manage short links and track click analytics\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n SHORTIO_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-shortio-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n streak: {\n label: \"Streak\",\n helpText:\n \"Connect your Streak account to manage CRM pipelines, contacts, and deals inside Gmail\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n STREAK_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-streak-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n supadata: {\n label: \"Supadata\",\n helpText:\n \"Connect your Supadata account to extract YouTube transcripts, channel data, and video metadata\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n SUPADATA_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-supadata-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n tavily: {\n label: \"Tavily\",\n helpText:\n \"Connect your Tavily account to perform AI-optimized web searches and content extraction\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n TAVILY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"tvly-...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n tldv: {\n label: \"tl;dv\",\n helpText:\n \"Connect your tl;dv account to access meeting recordings, transcripts, and AI-generated notes\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n TLDV_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-tldv-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n twenty: {\n label: \"Twenty\",\n helpText:\n \"Connect your Twenty CRM account to manage contacts, companies, and deals\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n TWENTY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-twenty-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n youtube: {\n label: \"YouTube\",\n helpText:\n \"Connect your YouTube account to search videos, get channel info, and fetch comments via the Data API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to [Google Cloud Console](https://console.cloud.google.com/)\\n2. Enable **YouTube Data API v3**\\n3. Go to **Credentials** → **Create Credentials** → **API Key**\\n4. Copy the API key\",\n secrets: {\n YOUTUBE_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"AIzaSy...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n zapier: {\n label: \"Zapier\",\n helpText:\n \"Connect your Zapier account to trigger zaps and use AI Actions (NLA) to automate workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n ZAPIER_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-zapier-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n zapsign: {\n label: \"ZapSign\",\n helpText:\n \"Connect your ZapSign account to create documents for electronic signature and track signing status\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n ZAPSIGN_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-zapsign-api-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n zendesk: {\n label: \"Zendesk\",\n helpText:\n \"Connect your Zendesk account to manage support tickets, users, organizations, and automate customer support workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Zendesk Admin Center](https://www.zendesk.com/admin/)\\n2. Go to **Apps and integrations → APIs → Zendesk API**\\n3. Enable **Token Access** under the Settings tab\\n4. Click **Add API token** and copy the token\",\n secrets: {\n ZENDESK_API_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-zendesk-api-token\",\n },\n ZENDESK_EMAIL: {\n label: \"Email\",\n required: true,\n placeholder: \"your-email@company.com\",\n helpText: \"The email address associated with your Zendesk account\",\n type: \"variable\",\n },\n ZENDESK_SUBDOMAIN: {\n label: \"Subdomain\",\n required: true,\n placeholder: \"yourcompany\",\n helpText:\n \"Your Zendesk subdomain (e.g. 'yourcompany' from yourcompany.zendesk.com)\",\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n htmlcsstoimage: {\n label: \"HTML/CSS to Image\",\n helpText:\n \"Connect your HTML/CSS to Image account to generate images from HTML and CSS\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n HCTI_API_KEY: {\n label: \"API Key\",\n required: true,\n },\n HCTI_USER_ID: {\n label: \"User ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n imgur: {\n label: \"Imgur\",\n helpText: \"Connect your Imgur account to upload, manage, and share images\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n IMGUR_CLIENT_ID: {\n label: \"Client ID\",\n required: true,\n placeholder: \"your-imgur-client-id\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n instagram: {\n label: \"Instagram\",\n helpText:\n \"Connect your Instagram Business account to manage posts, stories, and insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n INSTAGRAM_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n INSTAGRAM_BUSINESS_ACCOUNT_ID: {\n label: \"Business Account ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"prisma-postgres\": {\n label: \"Prisma Postgres\",\n helpText:\n \"Connect your Prisma Postgres database to manage schemas, run queries, and access data through Prisma's serverless database platform\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PRISMA_POSTGRES_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"eyJhbGci...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n discord: {\n label: \"Discord\",\n helpText:\n \"Connect your Discord bot to manage servers, channels, messages, and automate interactions\",\n authMethods: {\n \"api-token\": {\n label: \"Bot Token\",\n secrets: {\n DISCORD_BOT_TOKEN: {\n label: \"Bot Token\",\n required: true,\n placeholder: \"your-discord-bot-token\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n lark: {\n label: \"Lark\",\n helpText:\n \"Connect your Lark (Feishu) app to manage messages, documents, calendars, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"App Credentials\",\n secrets: {\n LARK_TOKEN: {\n label: \"App Secret\",\n required: true,\n type: \"secret\",\n },\n LARK_APP_ID: {\n label: \"App ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n mailsac: {\n label: \"Mailsac\",\n helpText:\n \"Connect your Mailsac account to manage disposable email inboxes for testing\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n MAILSAC_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-mailsac-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n minio: {\n label: \"MinIO\",\n helpText:\n \"Connect your MinIO instance to manage S3-compatible object storage buckets and objects\",\n authMethods: {\n \"api-token\": {\n label: \"Access Credentials\",\n secrets: {\n MINIO_TOKEN: {\n label: \"Access Key\",\n required: true,\n type: \"secret\",\n },\n MINIO_SECRET_TOKEN: {\n label: \"Secret Key\",\n required: true,\n type: \"secret\",\n },\n MINIO_ENDPOINT: {\n label: \"Endpoint URL\",\n required: true,\n placeholder: \"https://minio.example.com\",\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n pdforge: {\n label: \"PDForge\",\n helpText:\n \"Connect your PDForge account to generate PDF documents from templates\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PDFORGE_API_KEY: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-pdforge-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"discord-webhook\": {\n label: \"Discord Webhook\",\n helpText: \"Connect a Discord webhook to send messages to channels\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n secrets: {\n DISCORD_WEBHOOK_URL: {\n label: \"Webhook URL\",\n required: true,\n placeholder: \"https://discord.com/api/webhooks/xxx/xxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"slack-webhook\": {\n label: \"Slack Webhook\",\n helpText: \"Connect a Slack incoming webhook to send messages to channels\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n secrets: {\n SLACK_WEBHOOK_URL: {\n label: \"Webhook URL\",\n required: true,\n placeholder: \"https://hooks.slack.com/services/xxx/xxx/xxx\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n gitlab: {\n label: \"GitLab\",\n helpText:\n \"Connect your GitLab account to manage repositories, issues, merge requests, and CI/CD pipelines\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n secrets: {\n GITLAB_TOKEN: {\n label: \"Personal Access Token\",\n required: true,\n },\n GITLAB_HOST: {\n label: \"GitLab Host\",\n required: false,\n placeholder: \"gitlab.com\",\n type: \"variable\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n wix: {\n label: \"Wix\",\n helpText:\n \"Connect your Wix account to manage sites, collections, and content\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n WIX_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-wix-api-key\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n v0: {\n label: \"v0\",\n helpText:\n \"Connect your v0 account to generate UI components, chat completions, and iterate on React and Next.js code with the v0 Platform API\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [v0](https://v0.dev)\\n2. Go to **Settings** → **Keys** ([direct link](https://v0.dev/chat/settings/keys))\\n3. Create a new API key\\n4. Copy the generated token\",\n secrets: {\n V0_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"v0-...\",\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n} satisfies Record<string, ConnectorConfig>;\n\nexport type ConnectorType = keyof typeof CONNECTOR_TYPES_DEF;\n\nexport const CONNECTOR_TYPES: Record<ConnectorType, ConnectorConfig> =\n CONNECTOR_TYPES_DEF;\nexport const connectorTypeSchema = z.enum([\n \"agentmail\",\n \"ahrefs\",\n \"atlassian\",\n \"axiom\",\n \"airtable\",\n \"asana\",\n \"calendly\",\n \"canva\",\n \"clickup\",\n \"cloudflare\",\n \"cloudinary\",\n \"close\",\n \"github\",\n \"gmail\",\n \"google-sheets\",\n \"hugging-face\",\n \"hume\",\n \"heygen\",\n \"hubspot\",\n \"google-docs\",\n \"google-drive\",\n \"google-calendar\",\n \"notion\",\n \"computer\",\n \"slack\",\n \"deel\",\n \"deepseek\",\n \"dify\",\n \"docusign\",\n \"dropbox\",\n \"linear\",\n \"intercom\",\n \"jam\",\n \"jotform\",\n \"line\",\n \"make\",\n \"metabase\",\n \"figma\",\n \"mercury\",\n \"minimax\",\n \"reddit\",\n \"strava\",\n \"neon\",\n \"garmin-connect\",\n \"x\",\n \"vercel\",\n \"sentry\",\n \"intervals-icu\",\n \"xero\",\n \"monday\",\n \"supabase\",\n \"todoist\",\n \"webflow\",\n \"outlook-mail\",\n \"outlook-calendar\",\n \"meta-ads\",\n \"posthog\",\n \"stripe\",\n \"openai\",\n \"chatwoot\",\n \"similarweb\",\n \"mailchimp\",\n \"pdfco\",\n \"perplexity\",\n \"plausible\",\n \"productlane\",\n \"resend\",\n \"revenuecat\",\n \"pdf4me\",\n \"apify\",\n \"bright-data\",\n \"browserbase\",\n \"browserless\",\n \"fireflies\",\n \"firecrawl\",\n \"scrapeninja\",\n \"elevenlabs\",\n \"explorium\",\n \"devto\",\n \"fal\",\n \"granola\",\n \"podchaser\",\n \"pushinator\",\n \"qdrant\",\n \"qiita\",\n \"reportei\",\n \"serpapi\",\n \"zeptomail\",\n \"runway\",\n \"salesforce\",\n \"shortio\",\n \"streak\",\n \"supadata\",\n \"tavily\",\n \"tldv\",\n \"twenty\",\n \"youtube\",\n \"wrike\",\n \"zapier\",\n \"zapsign\",\n \"zendesk\",\n \"prisma-postgres\",\n \"bitrix\",\n \"brave-search\",\n \"cronlytic\",\n \"discord\",\n \"discord-webhook\",\n \"gitlab\",\n \"htmlcsstoimage\",\n \"imgur\",\n \"instantly\",\n \"instagram\",\n \"jira\",\n \"kommo\",\n \"lark\",\n \"mailsac\",\n \"minio\",\n \"pdforge\",\n \"slack-webhook\",\n \"wix\",\n \"cal-com\",\n \"v0\",\n \"brevo\",\n \"customer-io\",\n \"loops\",\n]);\n\n/**\n * Get auth methods for a connector type\n */\nexport function getConnectorAuthMethods(\n type: ConnectorType,\n): Record<string, ConnectorAuthMethodConfig> {\n return CONNECTOR_TYPES[type].authMethods;\n}\n\n/**\n * Get default auth method for a connector type\n */\nexport function getConnectorDefaultAuthMethod(\n type: ConnectorType,\n): string | undefined {\n return CONNECTOR_TYPES[type].defaultAuthMethod;\n}\n\n/**\n * Get secrets config for a specific auth method\n */\nexport function getConnectorSecretsForAuthMethod(\n type: ConnectorType,\n authMethod: string,\n): Record<string, ConnectorSecretConfig> | undefined {\n const authMethods = getConnectorAuthMethods(type);\n return authMethods[authMethod]?.secrets;\n}\n\n/**\n * Get secret names for a specific auth method\n */\nexport function getConnectorSecretNames(\n type: ConnectorType,\n authMethod: string,\n): string[] {\n const secrets = getConnectorSecretsForAuthMethod(type, authMethod);\n return secrets ? Object.keys(secrets) : [];\n}\n\n/**\n * Get environment mapping for a connector type.\n *\n * For OAuth connectors, reads from `oauth.environmentMapping`.\n * For special connectors (e.g. computer), reads from `bridgeMapping`.\n */\nexport function getConnectorEnvironmentMapping(\n type: ConnectorType,\n): Record<string, string> {\n const config = CONNECTOR_TYPES[type];\n return config.oauth?.environmentMapping ?? config.bridgeMapping ?? {};\n}\n\n/**\n * Get connector label and derived env var names for a connector secret.\n * Performs a reverse lookup from secret name to the connector type and\n * environment mapping that references it.\n *\n * Example: getConnectorDerivedNames(\"GITHUB_ACCESS_TOKEN\")\n * → { connectorLabel: \"GitHub\", envVarNames: [\"GH_TOKEN\", \"GITHUB_TOKEN\"] }\n */\nexport function getConnectorDerivedNames(\n secretName: string,\n): { connectorLabel: string; envVarNames: string[] } | null {\n const allTypes = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n\n for (const type of allTypes) {\n const config = CONNECTOR_TYPES[type];\n\n // Check if this secret belongs to any auth method of this connector\n const authMethods = config.authMethods as Record<\n string,\n ConnectorAuthMethodConfig\n >;\n let found = false;\n for (const method of Object.values(authMethods)) {\n if (method.secrets && secretName in method.secrets) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n continue;\n }\n\n // Find all env var names that reference this secret\n const mapping = getConnectorEnvironmentMapping(type);\n const envVarNames = Object.entries(mapping)\n .filter(([, valueRef]) => valueRef === `$secrets.${secretName}`)\n .map(([envVar]) => envVar);\n\n if (envVarNames.length > 0) {\n return { connectorLabel: config.label, envVarNames };\n }\n }\n\n return null;\n}\n\n/**\n * Get the set of environment variable names that connected connectors can provide.\n * Used by pre-run checks to exclude connector-provided secrets from \"missing\" lists.\n *\n * Example: getConnectorProvidedSecretNames([\"github\"])\n * → Set { \"GH_TOKEN\", \"GITHUB_TOKEN\" }\n */\nexport function getConnectorProvidedSecretNames(\n connectedTypes: string[],\n): Set<string> {\n const provided = new Set<string>();\n\n for (const rawType of connectedTypes) {\n const parsed = connectorTypeSchema.safeParse(rawType);\n if (!parsed.success) {\n continue;\n }\n const mapping = getConnectorEnvironmentMapping(parsed.data);\n for (const envVar of Object.keys(mapping)) {\n provided.add(envVar);\n }\n }\n\n return provided;\n}\n\n/**\n * Get OAuth configuration for a connector type\n */\nexport function getConnectorOAuthConfig(\n type: ConnectorType,\n): ConnectorOAuthConfig | undefined {\n const config = CONNECTOR_TYPES[type];\n return \"oauth\" in config ? config.oauth : undefined;\n}\n\n/**\n * Check if stored OAuth scopes cover all required scopes for a connector type.\n * Returns true if no OAuth config exists (non-OAuth connector) or all required scopes are present.\n * Returns false if storedScopes is null (legacy connector) or missing any required scope.\n */\nexport function hasRequiredScopes(\n connectorType: ConnectorType,\n storedScopes: string[] | null,\n): boolean {\n const oauthConfig = getConnectorOAuthConfig(connectorType);\n if (!oauthConfig) return true;\n if (oauthConfig.scopes.length === 0) return true;\n if (!storedScopes) return false;\n const storedSet = new Set(storedScopes);\n return oauthConfig.scopes.every((s) => storedSet.has(s));\n}\n\n/**\n * Compute the diff between currently required scopes and stored scopes for a connector.\n */\nexport interface ScopeDiff {\n addedScopes: string[];\n removedScopes: string[];\n currentScopes: string[];\n storedScopes: string[];\n}\n\nexport function getScopeDiff(\n connectorType: ConnectorType,\n storedScopes: string[] | null,\n): ScopeDiff {\n const oauthConfig = getConnectorOAuthConfig(connectorType);\n const currentScopes = oauthConfig?.scopes ?? [];\n const stored = storedScopes ?? [];\n const storedSet = new Set(stored);\n const currentSet = new Set(currentScopes);\n\n return {\n addedScopes: currentScopes.filter((s) => !storedSet.has(s)),\n removedScopes: stored.filter((s) => !currentSet.has(s)),\n currentScopes,\n storedScopes: stored,\n };\n}\n\n/**\n * Get all secret/variable names managed by connectors across ALL auth methods.\n * Unlike `getConnectorProvidedSecretNames` (which only reads environmentMapping),\n * this function also includes api-token auth method secrets.\n *\n * Used to hide connector-managed secrets from the secrets & variables list.\n */\nexport function getConnectorManagedSecretNames(\n types: ConnectorType[],\n): Set<string> {\n const managed = new Set<string>();\n for (const type of types) {\n const config = CONNECTOR_TYPES[type];\n for (const method of Object.values(config.authMethods)) {\n for (const name of Object.keys(method.secrets)) {\n managed.add(name);\n }\n }\n // Also include environmentMapping keys (OAuth-derived env vars like GH_TOKEN)\n const mapping = getConnectorEnvironmentMapping(type);\n for (const envVar of Object.keys(mapping)) {\n managed.add(envVar);\n }\n }\n return managed;\n}\n\n/**\n * Reverse lookup: given a secret/env-var name, find which connector type manages it.\n * Checks both authMethods.secrets keys and environmentMapping keys.\n * Returns null if no connector manages this name.\n */\nexport function getConnectorTypeForSecretName(\n name: string,\n): ConnectorType | null {\n const allTypes = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n for (const type of allTypes) {\n const config = CONNECTOR_TYPES[type];\n // Check authMethods secrets\n for (const method of Object.values(config.authMethods)) {\n if (name in method.secrets) {\n return type;\n }\n }\n // Check environmentMapping keys\n const mapping = getConnectorEnvironmentMapping(type);\n if (name in mapping) {\n return type;\n }\n }\n return null;\n}\n\n/**\n * Get required secret names for a connector's api-token auth method.\n * Returns null if the connector type does not support api-token auth.\n * Note: Returns ALL required field names regardless of storage type (secret or variable).\n */\nexport function getApiTokenRequiredSecretNames(\n type: ConnectorType,\n): string[] | null {\n const config = CONNECTOR_TYPES[type];\n const apiTokenConfig = config.authMethods[\"api-token\"] as\n | ConnectorAuthMethodConfig\n | undefined;\n if (!apiTokenConfig) return null;\n\n return Object.entries(apiTokenConfig.secrets)\n .filter(([, cfg]) => cfg.required)\n .map(([name]) => name);\n}\n\n/**\n * Get required field names grouped by storage type for a connector's api-token auth method.\n * Returns null if the connector type does not support api-token auth.\n */\nexport function getApiTokenFieldsByType(\n type: ConnectorType,\n): { secrets: string[]; variables: string[] } | null {\n const config = CONNECTOR_TYPES[type];\n const apiTokenConfig = config.authMethods[\"api-token\"] as\n | ConnectorAuthMethodConfig\n | undefined;\n if (!apiTokenConfig) return null;\n\n const secretNames: string[] = [];\n const variableNames: string[] = [];\n for (const [name, cfg] of Object.entries(apiTokenConfig.secrets)) {\n if (!cfg.required) continue;\n if (cfg.type === \"variable\") {\n variableNames.push(name);\n } else {\n secretNames.push(name);\n }\n }\n return { secrets: secretNames, variables: variableNames };\n}\n\n/**\n * Derive which connector types are \"connected\" via api-token based on present user secret and variable names.\n * A connector type is considered connected if all its required api-token fields exist\n * (secrets checked against userSecretNames, variables checked against userVariableNames).\n */\nexport function deriveApiTokenConnectedTypes(\n userSecretNames: Set<string>,\n userVariableNames?: Set<string>,\n): ConnectorType[] {\n const allTypes = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n const connected: ConnectorType[] = [];\n const varNames = userVariableNames ?? new Set<string>();\n\n for (const type of allTypes) {\n const fields = getApiTokenFieldsByType(type);\n if (!fields) continue;\n if (fields.secrets.length === 0 && fields.variables.length === 0) continue;\n const secretsOk = fields.secrets.every((name) => userSecretNames.has(name));\n const variablesOk = fields.variables.every((name) => varNames.has(name));\n if (secretsOk && variablesOk) {\n connected.push(type);\n }\n }\n\n return connected;\n}\n\n/**\n * Connector response schema\n */\nexport const connectorResponseSchema = z.object({\n id: z.uuid().nullable(),\n type: connectorTypeSchema,\n authMethod: z.string(),\n externalId: z.string().nullable(),\n externalUsername: z.string().nullable(),\n externalEmail: z.string().nullable(),\n oauthScopes: z.array(z.string()).nullable(),\n needsReconnect: z.boolean(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type ConnectorResponse = z.infer<typeof connectorResponseSchema>;\n\n/**\n * List connectors response\n */\nexport const connectorListResponseSchema = z.object({\n connectors: z.array(connectorResponseSchema),\n configuredTypes: z.array(connectorTypeSchema),\n connectorProvidedSecretNames: z.array(z.string()),\n});\n\nexport type ConnectorListResponse = z.infer<typeof connectorListResponseSchema>;\n\n/**\n * Scope diff response schema\n */\nexport const scopeDiffResponseSchema = z.object({\n addedScopes: z.array(z.string()),\n removedScopes: z.array(z.string()),\n currentScopes: z.array(z.string()),\n storedScopes: z.array(z.string()),\n});\n\nexport type ScopeDiffResponse = z.infer<typeof scopeDiffResponseSchema>;\n\n/**\n * Connector session status enum\n */\nexport const connectorSessionStatusSchema = z.enum([\n \"pending\",\n \"complete\",\n \"expired\",\n \"error\",\n]);\n\nexport type ConnectorSessionStatus = z.infer<\n typeof connectorSessionStatusSchema\n>;\n\n/**\n * Connector session response schema\n */\nexport const connectorSessionResponseSchema = z.object({\n id: z.uuid(),\n code: z.string(),\n type: connectorTypeSchema,\n status: connectorSessionStatusSchema,\n verificationUrl: z.string(),\n expiresIn: z.number(),\n interval: z.number(),\n errorMessage: z.string().nullable().optional(),\n});\n\nexport type ConnectorSessionResponse = z.infer<\n typeof connectorSessionResponseSchema\n>;\n\n/**\n * Connector session status response (for polling)\n */\nexport const connectorSessionStatusResponseSchema = z.object({\n status: connectorSessionStatusSchema,\n errorMessage: z.string().nullable().optional(),\n});\n\nexport type ConnectorSessionStatusResponse = z.infer<\n typeof connectorSessionStatusResponseSchema\n>;\n\n/**\n * Computer connector create response\n */\nexport const computerConnectorCreateResponseSchema = z.object({\n id: z.uuid(),\n ngrokToken: z.string(),\n bridgeToken: z.string(),\n endpointPrefix: z.string(),\n domain: z.string(),\n});\n\nexport type ComputerConnectorCreateResponse = z.infer<\n typeof computerConnectorCreateResponseSchema\n>;\n","/**\n * Firewall config loader.\n *\n * Checks builtin (generated) configs first, then falls back to fetching\n * firewall YAML files from GitHub repositories.\n */\n\nimport { parse as parseYaml } from \"yaml\";\nimport { resolveFirewallRef, parseGitHubTreeUrl } from \"./github-url\";\nimport {\n firewallConfigSchema,\n type FirewallConfig,\n} from \"./contracts/firewalls\";\nimport { builtinFirewalls } from \"./firewalls\";\n\n/** Minimal fetch function signature for dependency injection in tests */\nexport type FetchFn = (url: string) => Promise<Response>;\n\n/** Max response size for firewall YAML files (128KB) */\nconst MAX_RESPONSE_SIZE = 128 * 1024;\n\n/**\n * Build the raw GitHub URL for a firewall's YAML config file.\n *\n * @param ref - Bare firewall name or full GitHub URL\n * @returns Raw GitHub URL pointing to firewall.yaml\n */\nexport function buildFirewallYamlUrl(ref: string): string {\n const url = resolveFirewallRef(ref);\n const parsed = parseGitHubTreeUrl(url);\n if (!parsed) {\n throw new Error(`Invalid firewall URL after resolution: ${url}`);\n }\n const pathPrefix = parsed.path ? `${parsed.path}/` : \"\";\n return `https://raw.githubusercontent.com/${parsed.owner}/${parsed.repo}/${parsed.branch}/${pathPrefix}firewall.yaml`;\n}\n\n/**\n * Fetch and parse a firewall config.\n *\n * For builtin firewalls (e.g. \"github\"), returns the bundled config directly\n * without any network request. For custom firewalls, fetches from GitHub.\n *\n * @param ref - Bare firewall name (e.g. \"github\") or full GitHub URL\n * @param fetchFn - Optional fetch function (defaults to global fetch, injectable for tests)\n * @returns Validated FirewallConfig\n * @throws Error if fetch fails, YAML is invalid, or schema validation fails\n */\nexport async function fetchFirewallConfig(\n ref: string,\n fetchFn: FetchFn = fetch,\n): Promise<FirewallConfig> {\n // Check builtin configs first (bare name only, not full URLs)\n const trimmed = ref.trim();\n const builtin = !trimmed.includes(\"/\")\n ? builtinFirewalls[trimmed]\n : undefined;\n if (builtin) {\n return builtin;\n }\n\n const rawUrl = buildFirewallYamlUrl(ref);\n\n const res = await fetchFn(rawUrl);\n if (!res.ok) {\n throw new Error(\n `Failed to fetch firewall config for \"${ref}\" from ${rawUrl}: ${res.status} ${res.statusText}`,\n );\n }\n\n const contentLength = res.headers.get(\"content-length\");\n if (contentLength && parseInt(contentLength, 10) > MAX_RESPONSE_SIZE) {\n throw new Error(\n `Firewall config \"${ref}\" exceeds maximum size (${MAX_RESPONSE_SIZE} bytes)`,\n );\n }\n\n const content = await res.text();\n if (content.length > MAX_RESPONSE_SIZE) {\n throw new Error(\n `Firewall config \"${ref}\" exceeds maximum size (${MAX_RESPONSE_SIZE} bytes)`,\n );\n }\n\n let yamlData: unknown;\n try {\n yamlData = parseYaml(content);\n } catch (e) {\n throw new Error(\n `Invalid YAML in firewall config \"${ref}\": ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n const result = firewallConfigSchema.safeParse(yamlData);\n if (!result.success) {\n const issues = result.error.issues\n .map((i) => `${i.path.join(\".\")}: ${i.message}`)\n .join(\"; \");\n throw new Error(`Invalid firewall config \"${ref}\": ${issues}`);\n }\n\n return result.data;\n}\n","/**\n * GitHub URL parsing utilities\n *\n * Provides parsing for GitHub tree URLs used in skills and other resources.\n */\n\nexport interface ParsedGitHubTreeUrl {\n owner: string;\n repo: string;\n branch: string;\n path: string;\n /** Last segment of path (used for mount directory name) */\n skillName: string;\n /** Full path after github.com/ (unique identifier) */\n fullPath: string;\n}\n\n/**\n * Parse a GitHub tree URL into its components\n * Expected format: https://github.com/{owner}/{repo}/tree/{branch}/{path}\n *\n * Note: Branch names containing slashes (e.g., feature/foo) may not parse correctly.\n * The fullPath field is always correct and used for unique storage naming.\n *\n * @param url - GitHub tree URL\n * @returns Parsed URL components, or null if URL format is invalid\n */\nexport function parseGitHubTreeUrl(url: string): ParsedGitHubTreeUrl | null {\n // Normalize: strip trailing slashes for consistent matching\n let normalizedUrl = url;\n while (normalizedUrl.endsWith(\"/\")) {\n normalizedUrl = normalizedUrl.slice(0, -1);\n }\n\n // First, extract the full path after github.com/ (always correct)\n const fullPathMatch = normalizedUrl.match(/^https:\\/\\/github\\.com\\/(.+)$/);\n if (!fullPathMatch) {\n return null;\n }\n const fullPath = fullPathMatch[1]!;\n\n // Parse components (may be incorrect for branches with slashes)\n const regex =\n /^https:\\/\\/github\\.com\\/([^/]+)\\/([^/]+)\\/tree\\/([^/]+)(?:\\/(.+))?$/;\n const match = normalizedUrl.match(regex);\n\n if (!match) {\n return null;\n }\n\n const [, owner, repo, branch, pathPart] = match;\n const resolvedPath = pathPart ?? \"\";\n const pathSegments = resolvedPath.split(\"/\").filter(Boolean);\n const skillName = pathSegments[pathSegments.length - 1] || repo!;\n\n return {\n owner: owner!,\n repo: repo!,\n branch: branch!,\n path: resolvedPath,\n skillName,\n fullPath,\n };\n}\n\n/**\n * Get skill name from path (last segment)\n */\nexport function getSkillNameFromPath(path: string): string {\n const segments = path.split(\"/\").filter(Boolean);\n return segments[segments.length - 1] || path;\n}\n\n/**\n * Parsed GitHub URL supporting multiple formats\n */\nexport interface ParsedGitHubUrl {\n owner: string;\n repo: string;\n /** Branch name, or null if not specified (use default branch) */\n branch: string | null;\n /** Path within repo, or null if root directory */\n path: string | null;\n /** Full path after github.com/ (unique identifier) */\n fullPath: string;\n}\n\n/**\n * Parse any GitHub repository URL into components.\n * Supports multiple URL formats:\n * - https://github.com/owner/repo (plain repo, uses default branch)\n * - https://github.com/owner/repo/tree/branch (root directory with branch)\n * - https://github.com/owner/repo/tree/branch/path (subdirectory)\n *\n * Note: Branch names containing slashes (e.g., feature/foo) may not parse correctly.\n *\n * @param url - GitHub URL\n * @returns Parsed URL components, or null if URL format is invalid\n */\nexport function parseGitHubUrl(url: string): ParsedGitHubUrl | null {\n // Normalize: strip trailing slashes for consistent matching\n let normalizedUrl = url;\n while (normalizedUrl.endsWith(\"/\")) {\n normalizedUrl = normalizedUrl.slice(0, -1);\n }\n\n // Extract full path after github.com/\n const fullPathMatch = normalizedUrl.match(/^https:\\/\\/github\\.com\\/(.+)$/);\n if (!fullPathMatch) {\n return null;\n }\n const fullPath = fullPathMatch[1]!;\n\n // Pattern 1: Plain repo URL (https://github.com/owner/repo)\n const plainMatch = normalizedUrl.match(\n /^https:\\/\\/github\\.com\\/([^/]+)\\/([^/]+)$/,\n );\n if (plainMatch) {\n return {\n owner: plainMatch[1]!,\n repo: plainMatch[2]!,\n branch: null,\n path: null,\n fullPath,\n };\n }\n\n // Pattern 2: Tree URL with optional path\n // https://github.com/owner/repo/tree/branch or https://github.com/owner/repo/tree/branch/path\n const treeMatch = normalizedUrl.match(\n /^https:\\/\\/github\\.com\\/([^/]+)\\/([^/]+)\\/tree\\/([^/]+)(?:\\/(.+))?$/,\n );\n if (treeMatch) {\n return {\n owner: treeMatch[1]!,\n repo: treeMatch[2]!,\n branch: treeMatch[3]!,\n path: treeMatch[4] ?? null,\n fullPath,\n };\n }\n\n return null;\n}\n\n/** Default owner for bare skill name resolution */\nexport const DEFAULT_SKILLS_OWNER = \"vm0-ai\";\n/** Default repository for bare skill name resolution */\nexport const DEFAULT_SKILLS_REPO = \"vm0-skills\";\n/** Default branch for bare skill name resolution */\nexport const DEFAULT_SKILLS_BRANCH = \"main\";\n\n/** Default owner for bare firewall config name resolution */\nexport const DEFAULT_FIREWALLS_OWNER = \"vm0-ai\";\n/** Default repository for bare firewall config name resolution */\nexport const DEFAULT_FIREWALLS_REPO = \"vm0-firewalls\";\n/** Default branch for bare firewall config name resolution */\nexport const DEFAULT_FIREWALLS_BRANCH = \"main\";\n\n/**\n * Resolve a skill reference to a full GitHub tree URL.\n *\n * Supports two formats:\n * - **Bare name** (no `/` and no `https://`): e.g. `\"slack\"` →\n * `https://github.com/vm0-ai/vm0-skills/tree/main/slack`\n * - **Full GitHub URL**: validated by `parseGitHubUrl()` and returned as-is.\n *\n * @param input - Bare skill name or full GitHub URL\n * @returns Canonical full GitHub URL\n * @throws Error if input is empty or not a valid GitHub URL\n */\nexport function resolveSkillRef(input: string): string {\n const trimmed = input.trim();\n\n if (!trimmed) {\n throw new Error(\"Skill reference cannot be empty\");\n }\n\n // Bare name: no \"/\" and no \"https://\"\n if (!trimmed.includes(\"/\") && !trimmed.startsWith(\"https://\")) {\n return `https://github.com/${DEFAULT_SKILLS_OWNER}/${DEFAULT_SKILLS_REPO}/tree/${DEFAULT_SKILLS_BRANCH}/${trimmed}`;\n }\n\n // Full GitHub URL: validate with flexible parser\n const parsed = parseGitHubUrl(trimmed);\n if (!parsed) {\n throw new Error(\n `Invalid skill URL: ${trimmed}. Expected a bare skill name (e.g. \"slack\") or a GitHub URL (https://github.com/{owner}/{repo}[/tree/{branch}[/path]])`,\n );\n }\n\n // Plain repo URL (no branch): normalize to tree URL with default branch\n if (!parsed.branch) {\n return `https://github.com/${parsed.owner}/${parsed.repo}/tree/${DEFAULT_SKILLS_BRANCH}`;\n }\n\n return trimmed;\n}\n\n/**\n * Resolve a firewall config reference to a full GitHub tree URL.\n *\n * Supports two formats:\n * - **Bare name** (no `/` and no `https://`): e.g. `\"custom-api\"` →\n * `https://github.com/vm0-ai/vm0-firewalls/tree/main/custom-api`\n * - **Full GitHub URL**: validated by `parseGitHubUrl()` and returned as-is.\n *\n * @param input - Bare firewall name or full GitHub URL\n * @returns Canonical full GitHub URL\n * @throws Error if input is empty or not a valid GitHub URL\n */\n/** Bare firewall name: alphanumeric, hyphens, dots, underscores. At least 1 char. */\nconst FIREWALL_NAME_PATTERN = /^[a-zA-Z0-9]([a-zA-Z0-9\\-_.]*[a-zA-Z0-9])?$/;\n\nexport function resolveFirewallRef(input: string): string {\n const trimmed = input.trim();\n\n if (!trimmed) {\n throw new Error(\"Firewall reference cannot be empty\");\n }\n\n // Bare name: no \"/\" and no \"https://\"\n if (!trimmed.includes(\"/\") && !trimmed.startsWith(\"https://\")) {\n if (!FIREWALL_NAME_PATTERN.test(trimmed)) {\n throw new Error(\n `Invalid firewall name \"${trimmed}\": must be alphanumeric with hyphens, dots, or underscores`,\n );\n }\n return `https://github.com/${DEFAULT_FIREWALLS_OWNER}/${DEFAULT_FIREWALLS_REPO}/tree/${DEFAULT_FIREWALLS_BRANCH}/${trimmed}`;\n }\n\n // Full GitHub URL: validate with flexible parser\n const parsed = parseGitHubUrl(trimmed);\n if (!parsed) {\n throw new Error(\n `Invalid firewall URL: ${trimmed}. Expected a bare firewall name (e.g. \"custom-api\") or a GitHub URL (https://github.com/{owner}/{repo}[/tree/{branch}[/path]])`,\n );\n }\n\n // Plain repo URL (no branch): normalize to tree URL with default branch\n if (!parsed.branch) {\n return `https://github.com/${parsed.owner}/${parsed.repo}/tree/${DEFAULT_FIREWALLS_BRANCH}`;\n }\n\n return trimmed;\n}\n","// Auto-generated from AgentMail API docs.\n// Source: https://docs.agentmail.to/api-reference\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:agentmail\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const agentmailFirewall: FirewallConfig = {\n name: \"agentmail\",\n description: \"AgentMail API\",\n placeholders: {\n AGENTMAIL_TOKEN: \"am_00000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.agentmail.to\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.AGENTMAIL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Ahrefs API docs.\n// Source: https://docs.ahrefs.com/docs/api/reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:ahrefs\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const ahrefsFirewall: FirewallConfig = {\n name: \"ahrefs\",\n description: \"Ahrefs API\",\n placeholders: {\n AHREFS_TOKEN: \"Vm0PlaceHolder0000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.ahrefs.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.AHREFS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Airtable API docs.\n// Source: https://airtable.com/developers/web/api/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:airtable\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const airtableFirewall: FirewallConfig = {\n name: \"airtable\",\n description: \"Airtable API\",\n placeholders: {\n AIRTABLE_TOKEN:\n \"patVm0PlaceHolder.0000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.airtable.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.AIRTABLE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Asana API docs.\n// Source: https://developers.asana.com/docs/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:asana\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const asanaFirewall: FirewallConfig = {\n name: \"asana\",\n description: \"Asana API\",\n placeholders: {\n ASANA_TOKEN: \"Vm0PlaceHolder0000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://app.asana.com/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.ASANA_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Axiom API docs.\n// Source: https://axiom.co/docs/reference/tokens\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:axiom\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const axiomFirewall: FirewallConfig = {\n name: \"axiom\",\n description: \"Axiom API\",\n placeholders: {\n AXIOM_TOKEN: \"xaat-00000000-0000-0000-0000-000000000000\",\n },\n apis: [\n {\n base: \"https://api.axiom.co\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.AXIOM_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Brave Search API docs.\n// Source: https://api-dashboard.search.brave.com/documentation/guides/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:brave-search\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const braveSearchFirewall: FirewallConfig = {\n name: \"brave-search\",\n description: \"Brave Search API\",\n placeholders: {\n BRAVE_API_KEY: \"BSAIVm0PlaceHolder00000000\",\n },\n apis: [\n {\n base: \"https://api.search.brave.com\",\n auth: {\n headers: {\n \"X-Subscription-Token\": \"${{ secrets.BRAVE_API_KEY }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from ClickUp API docs.\n// Source: https://developer.clickup.com/docs/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:clickup\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const clickupFirewall: FirewallConfig = {\n name: \"clickup\",\n description: \"ClickUp API\",\n placeholders: {\n CLICKUP_TOKEN: \"pk_0000000_VM0PLACEHOLDER0000000000000000000A\",\n },\n apis: [\n {\n base: \"https://api.clickup.com/api/v2\",\n auth: {\n headers: {\n Authorization: \"${{ secrets.CLICKUP_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Cloudflare API docs.\n// Source: https://developers.cloudflare.com/fundamentals/api/how-to/make-api-calls/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:cloudflare\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const cloudflareFirewall: FirewallConfig = {\n name: \"cloudflare\",\n description: \"Cloudflare API\",\n placeholders: {\n CLOUDFLARE_TOKEN: \"vm0placeholder0000000000000000000000000a\",\n },\n apis: [\n {\n base: \"https://api.cloudflare.com/client\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CLOUDFLARE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Confluence Cloud's official OpenAPI spec.\n// Source: https://developer.atlassian.com/cloud/confluence/swagger.v3.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:confluence\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const confluenceFirewall: FirewallConfig = {\n name: \"confluence\",\n description: \"Confluence Cloud API\",\n placeholders: {\n CONFLUENCE_TOKEN:\n \"ATATT3xVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.atlassian.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CONFLUENCE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"manage:confluence-configuration\",\n description: \"Manage global settings.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel/custom\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel/custom\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/systemInfo\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme/selected\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme/{themeKey}\",\n ],\n },\n {\n name: \"read:audit-log:confluence\",\n description: \"View audit records.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/audit\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/audit\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/audit/export\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/audit/retention\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/audit/since\",\n ],\n },\n {\n name: \"read:confluence-content.all\",\n description:\n \"Read all content, including content body (expansions permitted). Note, APIs using this scope may also return data allowed by read:confluence-space.summary. However, this scope is not a substitute for read:confluence-space.summary.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}/convert/async/{to}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}/convert/{to}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/bulk/tasks\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/bulk/tasks\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/{id}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/{to}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state/content\",\n ],\n },\n {\n name: \"read:confluence-content.permission\",\n description: \"Read content permissions.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/permission/check\",\n ],\n },\n {\n name: \"read:confluence-content.summary\",\n description:\n \"Read a summary of the content, which is the content without expansions. Note, APIs using this scope may also return data allowed by read:confluence-space.summary. However, this scope is not a substitute for read:confluence-space.summary.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/analytics/content/{contentId}/viewers\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/analytics/content/{contentId}/views\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/descendant\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/descendant/{type}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/notification/child-created\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/notification/created\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/label\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/to/{targetType}/{targetKey}/from/{sourceType}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/template/blueprint\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/template/page\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/template/{contentTemplateId}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}\",\n ],\n },\n {\n name: \"read:confluence-groups\",\n description: \"Read user groups.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/group\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/group/by-id\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/group/picker\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/group/{groupId}/membersByGroupId\",\n ],\n },\n {\n name: \"read:confluence-space.summary\",\n description:\n \"Read a summary of space information without expansions.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/longtask/{id}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/settings\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state/settings\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme\",\n ],\n },\n {\n name: \"read:confluence-user\",\n description: \"Read users.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/anonymous\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/bulk\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/current\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/memberof\",\n ],\n },\n {\n name: \"read:content-details:confluence\",\n description: \"View content details.\",\n rules: [\"GET /ex/confluence/{cloudId}/wiki/rest/api/search/user\"],\n },\n {\n name: \"read:content.metadata:confluence\",\n description: \"View content summaries.\",\n rules: [\"GET /ex/confluence/{cloudId}/wiki/rest/api/longtask\"],\n },\n {\n name: \"read:space.permission:confluence\",\n description: \"View space permissions.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/custom-content\",\n ],\n },\n {\n name: \"read:user:confluence\",\n description: \"View user details.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/watch\",\n ],\n },\n {\n name: \"read:user.property:confluence\",\n description: \"View user properties.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content-states\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}\",\n ],\n },\n {\n name: \"read:watcher:confluence\",\n description: \"View content watchers.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/watch\",\n ],\n },\n {\n name: \"readonly:content.attachment:confluence\",\n description:\n \"Download attachments of a Confluence page or blogpost that you have access to.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}/download\",\n ],\n },\n {\n name: \"search:confluence\",\n description:\n \"Search Confluence. Note, APIs using this scope may also return data allowed by read:confluence-space.summary and read:confluence-content.summary. However, this scope is not a substitute for read:confluence-space.summary or read:confluence-content.summary.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/search\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/search\",\n ],\n },\n {\n name: \"write:audit-log:confluence\",\n description: \"Create audit records.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/audit\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/audit/retention\",\n ],\n },\n {\n name: \"write:confluence-content\",\n description:\n \"Permits the creation of pages, blogs, comments and questions.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/archive\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/blueprint/instance/{draftId}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/blueprint/instance/{draftId}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/copy\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label/{label}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/pageTree\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/pagehierarchy/copy\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state/available\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/version\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/version/{versionNumber}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{pageId}/move/{position}/{targetId}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/template\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/template\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/template/{contentTemplateId}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}\",\n ],\n },\n {\n name: \"write:confluence-file\",\n description: \"Upload attachments.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}/data\",\n ],\n },\n {\n name: \"write:confluence-groups\",\n description: \"Create, remove and update user groups.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/group\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/group/by-id\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/group/userByGroupId\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/group/userByGroupId\",\n ],\n },\n {\n name: \"write:confluence-props\",\n description: \"Write content properties.\",\n rules: [\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}\",\n ],\n },\n {\n name: \"write:confluence-space\",\n description: \"Create, update and delete space information.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/_private\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/settings\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme\",\n ],\n },\n {\n name: \"write:space.permission:confluence\",\n description: \"Update space permissions.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/custom-content\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/{id}\",\n ],\n },\n {\n name: \"write:user.property:confluence\",\n description: \"Create, update and delete user properties.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from DeepSeek API docs.\n// Source: https://api-docs.deepseek.com/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:deepseek\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const deepseekFirewall: FirewallConfig = {\n name: \"deepseek\",\n description: \"DeepSeek API\",\n placeholders: {\n DEEPSEEK_TOKEN: \"sk-Vm0PlaceHolder0000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.deepseek.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DEEPSEEK_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Discord API docs.\n// Source: https://discord.com/developers/docs/reference#authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:discord\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const discordFirewall: FirewallConfig = {\n name: \"discord\",\n description: \"Discord API\",\n placeholders: {\n DISCORD_BOT_TOKEN:\n \"Vm0PlaceHolder0000000000.000000.Vm0PlaceHolder0000000000000\",\n },\n apis: [\n {\n base: \"https://discord.com/api\",\n auth: {\n headers: {\n Authorization: \"Bot ${{ secrets.DISCORD_BOT_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from ElevenLabs API docs.\n// Source: https://elevenlabs.io/docs/api-reference/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:elevenlabs\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const elevenlabsFirewall: FirewallConfig = {\n name: \"elevenlabs\",\n description: \"ElevenLabs API\",\n placeholders: {\n ELEVENLABS_TOKEN: \"Vm0PlaceHolder00000000000000000a\",\n },\n apis: [\n {\n base: \"https://api.elevenlabs.io\",\n auth: {\n headers: {\n \"xi-api-key\": \"${{ secrets.ELEVENLABS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from fal.ai API docs.\n// Source: https://fal.ai/docs/reference/platform-apis/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:fal\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const falFirewall: FirewallConfig = {\n name: \"fal\",\n description: \"fal.ai API\",\n placeholders: {\n FAL_TOKEN: \"Vm0PlaceHolder00:sk_live_Vm0PlaceHolder00000000000000\",\n },\n apis: [\n {\n base: \"https://api.fal.ai\",\n auth: {\n headers: {\n Authorization: \"Key ${{ secrets.FAL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Figma's official OpenAPI spec.\n// Source: https://github.com/figma/rest-api-spec\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:figma\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const figmaFirewall: FirewallConfig = {\n name: \"figma\",\n description: \"Figma API\",\n placeholders: {\n FIGMA_TOKEN: \"figd_Vm0PlaceHolder00000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.figma.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.FIGMA_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"current_user:read\",\n description: \"Read your name, email, and profile image.\",\n rules: [\"GET /v1/me\"],\n },\n {\n name: \"file_comments:read\",\n description: \"Read the comments for files.\",\n rules: [\n \"GET /v1/files/{file_key}/comments\",\n \"GET /v1/files/{file_key}/comments/{comment_id}/reactions\",\n ],\n },\n {\n name: \"file_comments:write\",\n description:\n \"Post and delete comments and comment reactions in files.\",\n rules: [\n \"POST /v1/files/{file_key}/comments\",\n \"DELETE /v1/files/{file_key}/comments/{comment_id}\",\n \"POST /v1/files/{file_key}/comments/{comment_id}/reactions\",\n \"DELETE /v1/files/{file_key}/comments/{comment_id}/reactions\",\n ],\n },\n {\n name: \"file_content:read\",\n description:\n \"Read the contents of files, such as nodes and the editor type.\",\n rules: [\n \"GET /v1/files/{file_key}\",\n \"GET /v1/files/{file_key}/images\",\n \"GET /v1/files/{file_key}/nodes\",\n \"GET /v1/images/{file_key}\",\n ],\n },\n {\n name: \"file_dev_resources:read\",\n description: \"Read dev resources in files.\",\n rules: [\"GET /v1/files/{file_key}/dev_resources\"],\n },\n {\n name: \"file_dev_resources:write\",\n description: \"Write to dev resources in files.\",\n rules: [\n \"POST /v1/dev_resources\",\n \"PUT /v1/dev_resources\",\n \"DELETE /v1/files/{file_key}/dev_resources/{dev_resource_id}\",\n ],\n },\n {\n name: \"file_metadata:read\",\n description: \"Read metadata of files.\",\n rules: [\"GET /v1/files/{file_key}/meta\"],\n },\n {\n name: \"file_variables:read\",\n description:\n \"Read variables in Figma file. Note: this is only available to members in Enterprise organizations.\",\n rules: [\n \"GET /v1/files/{file_key}/variables/local\",\n \"GET /v1/files/{file_key}/variables/published\",\n ],\n },\n {\n name: \"file_variables:write\",\n description:\n \"Write to variables in Figma file. Note: this is only available to members in Enterprise organizations.\",\n rules: [\"POST /v1/files/{file_key}/variables\"],\n },\n {\n name: \"file_versions:read\",\n description: \"Read the version history for files you can access.\",\n rules: [\"GET /v1/files/{file_key}/versions\"],\n },\n {\n name: \"files:read\",\n description:\n \"Deprecated. Read files, projects, users, versions, comments, components & styles, and webhooks.\",\n rules: [\n \"GET /v1/component_sets/{key}\",\n \"GET /v1/components/{key}\",\n \"GET /v1/files/{file_key}\",\n \"GET /v1/files/{file_key}/comments\",\n \"GET /v1/files/{file_key}/comments/{comment_id}/reactions\",\n \"GET /v1/files/{file_key}/component_sets\",\n \"GET /v1/files/{file_key}/components\",\n \"GET /v1/files/{file_key}/images\",\n \"GET /v1/files/{file_key}/meta\",\n \"GET /v1/files/{file_key}/nodes\",\n \"GET /v1/files/{file_key}/styles\",\n \"GET /v1/files/{file_key}/versions\",\n \"GET /v1/images/{file_key}\",\n \"GET /v1/me\",\n \"GET /v1/projects/{project_id}/files\",\n \"GET /v1/styles/{key}\",\n \"GET /v1/teams/{team_id}/component_sets\",\n \"GET /v1/teams/{team_id}/components\",\n \"GET /v1/teams/{team_id}/projects\",\n \"GET /v1/teams/{team_id}/styles\",\n \"GET /v2/teams/{team_id}/webhooks\",\n \"GET /v2/webhooks/{webhook_id}\",\n \"GET /v2/webhooks/{webhook_id}/requests\",\n ],\n },\n {\n name: \"library_analytics:read\",\n description: \"Read library analytics data.\",\n rules: [\n \"GET /v1/analytics/libraries/{file_key}/component/actions\",\n \"GET /v1/analytics/libraries/{file_key}/component/usages\",\n \"GET /v1/analytics/libraries/{file_key}/style/actions\",\n \"GET /v1/analytics/libraries/{file_key}/style/usages\",\n \"GET /v1/analytics/libraries/{file_key}/variable/actions\",\n \"GET /v1/analytics/libraries/{file_key}/variable/usages\",\n ],\n },\n {\n name: \"library_assets:read\",\n description:\n \"Read data of individual published components and styles.\",\n rules: [\n \"GET /v1/component_sets/{key}\",\n \"GET /v1/components/{key}\",\n \"GET /v1/styles/{key}\",\n ],\n },\n {\n name: \"library_content:read\",\n description: \"Read published components and styles of files.\",\n rules: [\n \"GET /v1/files/{file_key}/component_sets\",\n \"GET /v1/files/{file_key}/components\",\n \"GET /v1/files/{file_key}/styles\",\n ],\n },\n {\n name: \"org:activity_log_read\",\n description: \"Read activity logs in the organization.\",\n rules: [\"GET /v1/activity_logs\"],\n },\n {\n name: \"projects:read\",\n description: \"List projects and files in projects.\",\n rules: [\n \"GET /v1/projects/{project_id}/files\",\n \"GET /v1/teams/{team_id}/projects\",\n ],\n },\n {\n name: \"team_library_content:read\",\n description: \"Read published components and styles of teams.\",\n rules: [\n \"GET /v1/teams/{team_id}/component_sets\",\n \"GET /v1/teams/{team_id}/components\",\n \"GET /v1/teams/{team_id}/styles\",\n ],\n },\n {\n name: \"webhooks:read\",\n description: \"Read metadata of webhooks.\",\n rules: [\n \"GET /v2/teams/{team_id}/webhooks\",\n \"GET /v2/webhooks\",\n \"GET /v2/webhooks/{webhook_id}\",\n \"GET /v2/webhooks/{webhook_id}/requests\",\n ],\n },\n {\n name: \"webhooks:write\",\n description: \"Create and manage webhooks.\",\n rules: [\n \"POST /v2/webhooks\",\n \"PUT /v2/webhooks/{webhook_id}\",\n \"DELETE /v2/webhooks/{webhook_id}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Firecrawl API docs.\n// Source: https://docs.firecrawl.dev/api-reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:firecrawl\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const firecrawlFirewall: FirewallConfig = {\n name: \"firecrawl\",\n description: \"Firecrawl API\",\n placeholders: {\n FIRECRAWL_TOKEN: \"fc-Vm0PlaceHolder00000000000000000a\",\n },\n apis: [\n {\n base: \"https://api.firecrawl.dev\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.FIRECRAWL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from GitHub's official permissions data.\n// Source: github/docs/src/github-apps/data/fpt-2026-03-10/server-to-server-permissions.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:github\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const githubFirewall: FirewallConfig = {\n name: \"github\",\n description: \"GitHub API\",\n placeholders: {\n GITHUB_TOKEN: \"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\",\n GH_TOKEN: \"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\",\n },\n apis: [\n {\n base: \"https://api.github.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GITHUB_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"enterprise_teams:read\",\n description: \"Enterprise teams\",\n rules: [\n \"GET /enterprises/{enterprise}/teams\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n \"GET /enterprises/{enterprise}/teams/{team_slug}\",\n ],\n },\n {\n name: \"enterprise_teams:write\",\n description: \"Enterprise teams\",\n rules: [\n \"POST /enterprises/{enterprise}/teams\",\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add\",\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove\",\n \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add\",\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove\",\n \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n \"PATCH /enterprises/{enterprise}/teams/{team_slug}\",\n \"DELETE /enterprises/{enterprise}/teams/{team_slug}\",\n ],\n },\n {\n name: \"organization_api_insights:read\",\n description: \"API Insights\",\n rules: [\n \"GET /orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}\",\n \"GET /orgs/{org}/insights/api/subject-stats\",\n \"GET /orgs/{org}/insights/api/summary-stats\",\n \"GET /orgs/{org}/insights/api/summary-stats/users/{user_id}\",\n \"GET /orgs/{org}/insights/api/summary-stats/{actor_type}/{actor_id}\",\n \"GET /orgs/{org}/insights/api/time-stats\",\n \"GET /orgs/{org}/insights/api/time-stats/users/{user_id}\",\n \"GET /orgs/{org}/insights/api/time-stats/{actor_type}/{actor_id}\",\n \"GET /orgs/{org}/insights/api/user-stats/{user_id}\",\n ],\n },\n {\n name: \"organization_administration:read\",\n description: \"Administration\",\n rules: [\n \"GET /organizations/{org}/actions/cache/retention-limit\",\n \"GET /organizations/{org}/actions/cache/storage-limit\",\n \"GET /organizations/{org}/dependabot/repository-access\",\n \"GET /organizations/{org}/settings/billing/budgets\",\n \"GET /organizations/{org}/settings/billing/budgets/{budget_id}\",\n \"GET /organizations/{org}/settings/billing/premium_request/usage\",\n \"GET /organizations/{org}/settings/billing/usage\",\n \"GET /organizations/{org}/settings/billing/usage/summary\",\n \"GET /orgs/{org}/actions/cache/usage\",\n \"GET /orgs/{org}/actions/cache/usage-by-repository\",\n \"GET /orgs/{org}/actions/hosted-runners\",\n \"GET /orgs/{org}/actions/hosted-runners/images/github-owned\",\n \"GET /orgs/{org}/actions/hosted-runners/images/partner\",\n \"GET /orgs/{org}/actions/hosted-runners/limits\",\n \"GET /orgs/{org}/actions/hosted-runners/machine-sizes\",\n \"GET /orgs/{org}/actions/hosted-runners/platforms\",\n \"GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n \"GET /orgs/{org}/actions/oidc/customization/properties/repo\",\n \"GET /orgs/{org}/actions/oidc/customization/sub\",\n \"GET /orgs/{org}/actions/permissions\",\n \"GET /orgs/{org}/actions/permissions/artifact-and-log-retention\",\n \"GET /orgs/{org}/actions/permissions/fork-pr-contributor-approval\",\n \"GET /orgs/{org}/actions/permissions/fork-pr-workflows-private-repos\",\n \"GET /orgs/{org}/actions/permissions/repositories\",\n \"GET /orgs/{org}/actions/permissions/selected-actions\",\n \"GET /orgs/{org}/actions/permissions/self-hosted-runners\",\n \"GET /orgs/{org}/actions/permissions/self-hosted-runners/repositories\",\n \"GET /orgs/{org}/actions/permissions/workflow\",\n \"GET /orgs/{org}/code-security/configurations\",\n \"GET /orgs/{org}/code-security/configurations/defaults\",\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}\",\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\",\n \"GET /orgs/{org}/copilot/billing\",\n \"GET /orgs/{org}/copilot/billing/seats\",\n \"GET /orgs/{org}/copilot/metrics\",\n \"GET /orgs/{org}/installations\",\n \"GET /orgs/{org}/interaction-limits\",\n \"GET /orgs/{org}/members/{username}/copilot\",\n \"GET /orgs/{org}/secret-scanning/pattern-configurations\",\n \"GET /orgs/{org}/security-managers\",\n \"GET /orgs/{org}/settings/immutable-releases\",\n \"GET /orgs/{org}/settings/immutable-releases/repositories\",\n \"GET /orgs/{org}/team/{team_slug}/copilot/metrics\",\n ],\n },\n {\n name: \"organization_administration:write\",\n description: \"Administration\",\n rules: [\n \"PUT /organizations/{org}/actions/cache/retention-limit\",\n \"PUT /organizations/{org}/actions/cache/storage-limit\",\n \"PATCH /organizations/{org}/dependabot/repository-access\",\n \"PUT /organizations/{org}/dependabot/repository-access/default-level\",\n \"PATCH /organizations/{org}/settings/billing/budgets/{budget_id}\",\n \"DELETE /organizations/{org}/settings/billing/budgets/{budget_id}\",\n \"PATCH /orgs/{org}\",\n \"DELETE /orgs/{org}\",\n \"POST /orgs/{org}/actions/hosted-runners\",\n \"PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n \"DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n \"POST /orgs/{org}/actions/oidc/customization/properties/repo\",\n \"DELETE /orgs/{org}/actions/oidc/customization/properties/repo/{custom_property_name}\",\n \"PUT /orgs/{org}/actions/oidc/customization/sub\",\n \"PUT /orgs/{org}/actions/permissions\",\n \"PUT /orgs/{org}/actions/permissions/artifact-and-log-retention\",\n \"PUT /orgs/{org}/actions/permissions/fork-pr-contributor-approval\",\n \"PUT /orgs/{org}/actions/permissions/fork-pr-workflows-private-repos\",\n \"PUT /orgs/{org}/actions/permissions/repositories\",\n \"PUT /orgs/{org}/actions/permissions/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}\",\n \"PUT /orgs/{org}/actions/permissions/selected-actions\",\n \"PUT /orgs/{org}/actions/permissions/self-hosted-runners\",\n \"PUT /orgs/{org}/actions/permissions/self-hosted-runners/repositories\",\n \"PUT /orgs/{org}/actions/permissions/self-hosted-runners/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/permissions/self-hosted-runners/repositories/{repository_id}\",\n \"PUT /orgs/{org}/actions/permissions/workflow\",\n \"POST /orgs/{org}/code-security/configurations\",\n \"DELETE /orgs/{org}/code-security/configurations/detach\",\n \"PATCH /orgs/{org}/code-security/configurations/{configuration_id}\",\n \"DELETE /orgs/{org}/code-security/configurations/{configuration_id}\",\n \"POST /orgs/{org}/code-security/configurations/{configuration_id}/attach\",\n \"PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults\",\n \"POST /orgs/{org}/copilot/billing/selected_teams\",\n \"DELETE /orgs/{org}/copilot/billing/selected_teams\",\n \"POST /orgs/{org}/copilot/billing/selected_users\",\n \"DELETE /orgs/{org}/copilot/billing/selected_users\",\n \"PUT /orgs/{org}/interaction-limits\",\n \"DELETE /orgs/{org}/interaction-limits\",\n \"GET /orgs/{org}/rulesets\",\n \"POST /orgs/{org}/rulesets\",\n \"GET /orgs/{org}/rulesets/rule-suites\",\n \"GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}\",\n \"GET /orgs/{org}/rulesets/{ruleset_id}\",\n \"PUT /orgs/{org}/rulesets/{ruleset_id}\",\n \"DELETE /orgs/{org}/rulesets/{ruleset_id}\",\n \"GET /orgs/{org}/rulesets/{ruleset_id}/history\",\n \"GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}\",\n \"PATCH /orgs/{org}/secret-scanning/pattern-configurations\",\n \"PUT /orgs/{org}/security-managers/teams/{team_slug}\",\n \"DELETE /orgs/{org}/security-managers/teams/{team_slug}\",\n \"PUT /orgs/{org}/settings/immutable-releases\",\n \"PUT /orgs/{org}/settings/immutable-releases/repositories\",\n \"PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\",\n \"POST /orgs/{org}/{security_product}/{enablement}\",\n ],\n },\n {\n name: \"organization_user_blocking:read\",\n description: \"Blocking users\",\n rules: [\n \"GET /orgs/{org}/blocks\",\n \"GET /orgs/{org}/blocks/{username}\",\n ],\n },\n {\n name: \"organization_user_blocking:write\",\n description: \"Blocking users\",\n rules: [\n \"PUT /orgs/{org}/blocks/{username}\",\n \"DELETE /orgs/{org}/blocks/{username}\",\n ],\n },\n {\n name: \"organization_campaigns:read\",\n description: \"Campaigns\",\n rules: [\n \"GET /orgs/{org}/campaigns\",\n \"GET /orgs/{org}/campaigns/{campaign_number}\",\n ],\n },\n {\n name: \"organization_campaigns:write\",\n description: \"Campaigns\",\n rules: [\n \"POST /orgs/{org}/campaigns\",\n \"PATCH /orgs/{org}/campaigns/{campaign_number}\",\n \"DELETE /orgs/{org}/campaigns/{campaign_number}\",\n ],\n },\n {\n name: \"organization_copilot_agent_settings:read\",\n description: \"Copilot agent settings\",\n rules: [\n \"GET /orgs/{org}/copilot/coding-agent/permissions\",\n \"GET /orgs/{org}/copilot/coding-agent/permissions/repositories\",\n ],\n },\n {\n name: \"organization_copilot_agent_settings:write\",\n description: \"Copilot agent settings\",\n rules: [\n \"PUT /orgs/{org}/copilot/coding-agent/permissions\",\n \"PUT /orgs/{org}/copilot/coding-agent/permissions/repositories\",\n \"PUT /orgs/{org}/copilot/coding-agent/permissions/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/copilot/coding-agent/permissions/repositories/{repository_id}\",\n ],\n },\n {\n name: \"org_copilot_content_exclusion:read\",\n description: \"Copilot content exclusion\",\n rules: [\"GET /orgs/{org}/copilot/content_exclusion\"],\n },\n {\n name: \"org_copilot_content_exclusion:write\",\n description: \"Copilot content exclusion\",\n rules: [\"PUT /orgs/{org}/copilot/content_exclusion\"],\n },\n {\n name: \"organization_custom_org_roles:read\",\n description: \"Custom organization roles\",\n rules: [\n \"GET /orgs/{org}/organization-roles\",\n \"GET /orgs/{org}/organization-roles/{role_id}\",\n ],\n },\n {\n name: \"organization_custom_properties:read\",\n description: \"Custom properties\",\n rules: [\n \"GET /orgs/{org}/properties/schema\",\n \"GET /orgs/{org}/properties/schema/{custom_property_name}\",\n \"GET /orgs/{org}/properties/values\",\n ],\n },\n {\n name: \"organization_custom_properties:admin\",\n description: \"Custom properties\",\n rules: [\n \"PATCH /orgs/{org}/properties/schema\",\n \"PUT /orgs/{org}/properties/schema/{custom_property_name}\",\n \"DELETE /orgs/{org}/properties/schema/{custom_property_name}\",\n ],\n },\n {\n name: \"organization_custom_properties:write\",\n description: \"Custom properties\",\n rules: [\"PATCH /orgs/{org}/properties/values\"],\n },\n {\n name: \"organization_events:read\",\n description: \"Events\",\n rules: [\"GET /users/{username}/events/orgs/{org}\"],\n },\n {\n name: \"organization_copilot_seat_management:read\",\n description: \"GitHub Copilot Business\",\n rules: [\n \"GET /orgs/{org}/copilot/billing\",\n \"GET /orgs/{org}/copilot/billing/seats\",\n \"GET /orgs/{org}/copilot/metrics\",\n \"GET /orgs/{org}/members/{username}/copilot\",\n \"GET /orgs/{org}/team/{team_slug}/copilot/metrics\",\n ],\n },\n {\n name: \"organization_copilot_seat_management:write\",\n description: \"GitHub Copilot Business\",\n rules: [\n \"POST /orgs/{org}/copilot/billing/selected_teams\",\n \"DELETE /orgs/{org}/copilot/billing/selected_teams\",\n \"POST /orgs/{org}/copilot/billing/selected_users\",\n \"DELETE /orgs/{org}/copilot/billing/selected_users\",\n ],\n },\n {\n name: \"organization_runner_custom_images:read\",\n description: \"Hosted runner custom images\",\n rules: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom\",\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\",\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions\",\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\",\n ],\n },\n {\n name: \"organization_runner_custom_images:write\",\n description: \"Hosted runner custom images\",\n rules: [\n \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\",\n \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\",\n ],\n },\n {\n name: \"issue_fields:read\",\n description: \"Issue Fields\",\n rules: [\"GET /orgs/{org}/issue-fields\"],\n },\n {\n name: \"issue_fields:write\",\n description: \"Issue Fields\",\n rules: [\n \"POST /orgs/{org}/issue-fields\",\n \"PATCH /orgs/{org}/issue-fields/{issue_field_id}\",\n \"DELETE /orgs/{org}/issue-fields/{issue_field_id}\",\n ],\n },\n {\n name: \"issue_types:read\",\n description: \"Issue Types\",\n rules: [\"GET /orgs/{org}/issue-types\"],\n },\n {\n name: \"issue_types:write\",\n description: \"Issue Types\",\n rules: [\n \"POST /orgs/{org}/issue-types\",\n \"PUT /orgs/{org}/issue-types/{issue_type_id}\",\n \"DELETE /orgs/{org}/issue-types/{issue_type_id}\",\n ],\n },\n {\n name: \"members:read\",\n description: \"Members\",\n rules: [\n \"GET /orgs/{org}/failed_invitations\",\n \"GET /orgs/{org}/invitations\",\n \"GET /orgs/{org}/invitations/{invitation_id}/teams\",\n \"GET /orgs/{org}/members\",\n \"GET /orgs/{org}/members/{username}\",\n \"GET /orgs/{org}/memberships/{username}\",\n \"GET /orgs/{org}/organization-roles/{role_id}/teams\",\n \"GET /orgs/{org}/organization-roles/{role_id}/users\",\n \"GET /orgs/{org}/outside_collaborators\",\n \"GET /orgs/{org}/public_members\",\n \"GET /orgs/{org}/public_members/{username}\",\n \"GET /orgs/{org}/teams\",\n \"GET /orgs/{org}/teams/{team_slug}\",\n \"GET /orgs/{org}/teams/{team_slug}/invitations\",\n \"GET /orgs/{org}/teams/{team_slug}/members\",\n \"GET /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n \"GET /orgs/{org}/teams/{team_slug}/repos\",\n \"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"GET /orgs/{org}/teams/{team_slug}/teams\",\n \"GET /teams/{team_id}\",\n \"GET /teams/{team_id}/invitations\",\n \"GET /teams/{team_id}/members\",\n \"GET /teams/{team_id}/members/{username}\",\n \"GET /teams/{team_id}/memberships/{username}\",\n \"GET /teams/{team_id}/repos\",\n \"GET /teams/{team_id}/repos/{owner}/{repo}\",\n \"PUT /teams/{team_id}/repos/{owner}/{repo}\",\n \"DELETE /teams/{team_id}/repos/{owner}/{repo}\",\n \"GET /teams/{team_id}/teams\",\n \"GET /user/memberships/orgs/{org}\",\n ],\n },\n {\n name: \"members:write\",\n description: \"Members\",\n rules: [\n \"POST /orgs/{org}/invitations\",\n \"DELETE /orgs/{org}/invitations/{invitation_id}\",\n \"DELETE /orgs/{org}/members/{username}\",\n \"PUT /orgs/{org}/memberships/{username}\",\n \"DELETE /orgs/{org}/memberships/{username}\",\n \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}\",\n \"PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\",\n \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\",\n \"DELETE /orgs/{org}/organization-roles/users/{username}\",\n \"PUT /orgs/{org}/organization-roles/users/{username}/{role_id}\",\n \"DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}\",\n \"PUT /orgs/{org}/outside_collaborators/{username}\",\n \"DELETE /orgs/{org}/outside_collaborators/{username}\",\n \"PUT /orgs/{org}/public_members/{username}\",\n \"DELETE /orgs/{org}/public_members/{username}\",\n \"POST /orgs/{org}/teams\",\n \"PATCH /orgs/{org}/teams/{team_slug}\",\n \"DELETE /orgs/{org}/teams/{team_slug}\",\n \"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n \"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n \"PATCH /teams/{team_id}\",\n \"DELETE /teams/{team_id}\",\n \"PUT /teams/{team_id}/members/{username}\",\n \"DELETE /teams/{team_id}/members/{username}\",\n \"PUT /teams/{team_id}/memberships/{username}\",\n \"DELETE /teams/{team_id}/memberships/{username}\",\n \"PATCH /user/memberships/orgs/{org}\",\n ],\n },\n {\n name: \"organization_network_configurations:read\",\n description: \"Network configurations\",\n rules: [\n \"GET /orgs/{org}/settings/network-configurations\",\n \"GET /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n \"GET /orgs/{org}/settings/network-settings/{network_settings_id}\",\n ],\n },\n {\n name: \"organization_network_configurations:write\",\n description: \"Network configurations\",\n rules: [\n \"POST /orgs/{org}/settings/network-configurations\",\n \"PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n \"DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n ],\n },\n {\n name: \"organization_codespaces_secrets:read\",\n description: \"Organization codespaces secrets\",\n rules: [\n \"GET /orgs/{org}/codespaces/secrets\",\n \"GET /orgs/{org}/codespaces/secrets/public-key\",\n \"GET /orgs/{org}/codespaces/secrets/{secret_name}\",\n \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n ],\n },\n {\n name: \"organization_codespaces_secrets:write\",\n description: \"Organization codespaces secrets\",\n rules: [\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}\",\n \"DELETE /orgs/{org}/codespaces/secrets/{secret_name}\",\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"organization_codespaces_settings:write\",\n description: \"Organization codespaces settings\",\n rules: [\n \"PUT /orgs/{org}/codespaces/access\",\n \"POST /orgs/{org}/codespaces/access/selected_users\",\n \"DELETE /orgs/{org}/codespaces/access/selected_users\",\n ],\n },\n {\n name: \"organization_codespaces:read\",\n description: \"Organization codespaces\",\n rules: [\n \"GET /orgs/{org}/codespaces\",\n \"GET /orgs/{org}/members/{username}/codespaces\",\n ],\n },\n {\n name: \"organization_codespaces:write\",\n description: \"Organization codespaces\",\n rules: [\n \"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\",\n \"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\",\n ],\n },\n {\n name: \"organization_dependabot_secrets:read\",\n description: \"Organization dependabot secrets\",\n rules: [\n \"GET /orgs/{org}/dependabot/secrets\",\n \"GET /orgs/{org}/dependabot/secrets/public-key\",\n \"GET /orgs/{org}/dependabot/secrets/{secret_name}\",\n \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n ],\n },\n {\n name: \"organization_dependabot_secrets:write\",\n description: \"Organization dependabot secrets\",\n rules: [\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}\",\n \"DELETE /orgs/{org}/dependabot/secrets/{secret_name}\",\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"organization_private_registries:read\",\n description: \"Organization private registries\",\n rules: [\n \"GET /orgs/{org}/private-registries\",\n \"GET /orgs/{org}/private-registries/public-key\",\n \"GET /orgs/{org}/private-registries/{secret_name}\",\n ],\n },\n {\n name: \"organization_private_registries:write\",\n description: \"Organization private registries\",\n rules: [\n \"POST /orgs/{org}/private-registries\",\n \"PATCH /orgs/{org}/private-registries/{secret_name}\",\n \"DELETE /orgs/{org}/private-registries/{secret_name}\",\n ],\n },\n {\n name: \"organization_personal_access_token_requests:read\",\n description: \"Personal access token requests\",\n rules: [\n \"GET /orgs/{org}/personal-access-token-requests\",\n \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\",\n ],\n },\n {\n name: \"organization_personal_access_token_requests:write\",\n description: \"Personal access token requests\",\n rules: [\n \"POST /orgs/{org}/personal-access-token-requests\",\n \"POST /orgs/{org}/personal-access-token-requests/{pat_request_id}\",\n ],\n },\n {\n name: \"organization_personal_access_tokens:read\",\n description: \"Personal access tokens\",\n rules: [\n \"GET /orgs/{org}/personal-access-tokens\",\n \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\",\n ],\n },\n {\n name: \"organization_personal_access_tokens:write\",\n description: \"Personal access tokens\",\n rules: [\n \"POST /orgs/{org}/personal-access-tokens\",\n \"POST /orgs/{org}/personal-access-tokens/{pat_id}\",\n ],\n },\n {\n name: \"organization_projects:read\",\n description: \"Projects\",\n rules: [\n \"GET /orgs/{org}/projectsV2\",\n \"GET /orgs/{org}/projectsV2/{project_number}\",\n \"GET /orgs/{org}/projectsV2/{project_number}/fields\",\n \"GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}\",\n \"GET /orgs/{org}/projectsV2/{project_number}/items\",\n \"GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n \"GET /orgs/{org}/projectsV2/{project_number}/views/{view_number}/items\",\n ],\n },\n {\n name: \"organization_projects:write\",\n description: \"Projects\",\n rules: [\n \"POST /orgs/{org}/projectsV2/{project_number}/drafts\",\n \"POST /orgs/{org}/projectsV2/{project_number}/fields\",\n \"POST /orgs/{org}/projectsV2/{project_number}/items\",\n \"PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n \"DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n \"POST /orgs/{org}/projectsV2/{project_number}/views\",\n ],\n },\n {\n name: \"organization_secrets:read\",\n description: \"Secrets\",\n rules: [\n \"GET /orgs/{org}/actions/secrets\",\n \"GET /orgs/{org}/actions/secrets/public-key\",\n \"GET /orgs/{org}/actions/secrets/{secret_name}\",\n \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n ],\n },\n {\n name: \"organization_secrets:write\",\n description: \"Secrets\",\n rules: [\n \"PUT /orgs/{org}/actions/secrets/{secret_name}\",\n \"DELETE /orgs/{org}/actions/secrets/{secret_name}\",\n \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"organization_self_hosted_runners:read\",\n description: \"Self-hosted runners\",\n rules: [\n \"GET /orgs/{org}/actions/runner-groups\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\",\n \"GET /orgs/{org}/actions/runners\",\n \"GET /orgs/{org}/actions/runners/downloads\",\n \"GET /orgs/{org}/actions/runners/{runner_id}\",\n \"GET /orgs/{org}/actions/runners/{runner_id}/labels\",\n ],\n },\n {\n name: \"organization_self_hosted_runners:write\",\n description: \"Self-hosted runners\",\n rules: [\n \"POST /orgs/{org}/actions/runner-groups\",\n \"PATCH /orgs/{org}/actions/runner-groups/{runner_group_id}\",\n \"DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}\",\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\",\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}\",\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\",\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id}\",\n \"DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id}\",\n \"POST /orgs/{org}/actions/runners/generate-jitconfig\",\n \"POST /orgs/{org}/actions/runners/registration-token\",\n \"POST /orgs/{org}/actions/runners/remove-token\",\n \"DELETE /orgs/{org}/actions/runners/{runner_id}\",\n \"POST /orgs/{org}/actions/runners/{runner_id}/labels\",\n \"PUT /orgs/{org}/actions/runners/{runner_id}/labels\",\n \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels\",\n \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}\",\n ],\n },\n {\n name: \"organization_actions_variables:read\",\n description: \"Variables\",\n rules: [\n \"GET /orgs/{org}/actions/variables\",\n \"GET /orgs/{org}/actions/variables/{name}\",\n \"GET /orgs/{org}/actions/variables/{name}/repositories\",\n ],\n },\n {\n name: \"organization_actions_variables:write\",\n description: \"Variables\",\n rules: [\n \"POST /orgs/{org}/actions/variables\",\n \"PATCH /orgs/{org}/actions/variables/{name}\",\n \"DELETE /orgs/{org}/actions/variables/{name}\",\n \"PUT /orgs/{org}/actions/variables/{name}/repositories\",\n \"PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"organization_hooks:read\",\n description: \"Webhooks\",\n rules: [\n \"GET /orgs/{org}/hooks\",\n \"GET /orgs/{org}/hooks/{hook_id}\",\n \"GET /orgs/{org}/hooks/{hook_id}/config\",\n \"GET /orgs/{org}/hooks/{hook_id}/deliveries\",\n \"GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}\",\n ],\n },\n {\n name: \"organization_hooks:write\",\n description: \"Webhooks\",\n rules: [\n \"POST /orgs/{org}/hooks\",\n \"PATCH /orgs/{org}/hooks/{hook_id}\",\n \"DELETE /orgs/{org}/hooks/{hook_id}\",\n \"PATCH /orgs/{org}/hooks/{hook_id}/config\",\n \"POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\",\n \"POST /orgs/{org}/hooks/{hook_id}/pings\",\n ],\n },\n {\n name: \"actions:read\",\n description: \"Actions\",\n rules: [\n \"GET /repos/{owner}/{repo}/actions/artifacts\",\n \"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\",\n \"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}\",\n \"GET /repos/{owner}/{repo}/actions/cache/storage-limit\",\n \"GET /repos/{owner}/{repo}/actions/cache/usage\",\n \"GET /repos/{owner}/{repo}/actions/caches\",\n \"GET /repos/{owner}/{repo}/actions/jobs/{job_id}\",\n \"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs\",\n \"GET /repos/{owner}/{repo}/actions/oidc/customization/sub\",\n \"GET /repos/{owner}/{repo}/actions/runs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing\",\n \"GET /repos/{owner}/{repo}/actions/workflows\",\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}\",\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\",\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing\",\n \"GET /repos/{owner}/{repo}/environments\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\",\n ],\n },\n {\n name: \"actions:write\",\n description: \"Actions\",\n rules: [\n \"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\",\n \"DELETE /repos/{owner}/{repo}/actions/caches\",\n \"DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}\",\n \"POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun\",\n \"PUT /repos/{owner}/{repo}/actions/oidc/customization/sub\",\n \"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel\",\n \"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs\",\n \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable\",\n \"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\",\n \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable\",\n ],\n },\n {\n name: \"administration:write\",\n description: \"Administration\",\n rules: [\n \"POST /orgs/{org}/repos\",\n \"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"PATCH /repos/{owner}/{repo}\",\n \"DELETE /repos/{owner}/{repo}\",\n \"PUT /repos/{owner}/{repo}/actions/cache/retention-limit\",\n \"PUT /repos/{owner}/{repo}/actions/cache/storage-limit\",\n \"PUT /repos/{owner}/{repo}/actions/permissions\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/access\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/artifact-and-log-retention\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/fork-pr-contributor-approval\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/fork-pr-workflows-private-repos\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/selected-actions\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/workflow\",\n \"POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig\",\n \"POST /repos/{owner}/{repo}/actions/runners/registration-token\",\n \"POST /repos/{owner}/{repo}/actions/runners/remove-token\",\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}\",\n \"POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n \"PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}\",\n \"POST /repos/{owner}/{repo}/autolinks\",\n \"DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}\",\n \"PUT /repos/{owner}/{repo}/automated-security-fixes\",\n \"DELETE /repos/{owner}/{repo}/automated-security-fixes\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n \"PATCH /repos/{owner}/{repo}/code-scanning/default-setup\",\n \"PUT /repos/{owner}/{repo}/collaborators/{username}\",\n \"DELETE /repos/{owner}/{repo}/collaborators/{username}\",\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}\",\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\",\n \"POST /repos/{owner}/{repo}/forks\",\n \"PUT /repos/{owner}/{repo}/immutable-releases\",\n \"DELETE /repos/{owner}/{repo}/immutable-releases\",\n \"PUT /repos/{owner}/{repo}/interaction-limits\",\n \"DELETE /repos/{owner}/{repo}/interaction-limits\",\n \"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}\",\n \"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}\",\n \"POST /repos/{owner}/{repo}/keys\",\n \"DELETE /repos/{owner}/{repo}/keys/{key_id}\",\n \"POST /repos/{owner}/{repo}/pages\",\n \"PUT /repos/{owner}/{repo}/pages\",\n \"DELETE /repos/{owner}/{repo}/pages\",\n \"GET /repos/{owner}/{repo}/pages/health\",\n \"PUT /repos/{owner}/{repo}/private-vulnerability-reporting\",\n \"DELETE /repos/{owner}/{repo}/private-vulnerability-reporting\",\n \"POST /repos/{owner}/{repo}/rulesets\",\n \"PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}\",\n \"DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}\",\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\",\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}\",\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks\",\n \"PUT /repos/{owner}/{repo}/topics\",\n \"POST /repos/{owner}/{repo}/transfer\",\n \"PUT /repos/{owner}/{repo}/vulnerability-alerts\",\n \"DELETE /repos/{owner}/{repo}/vulnerability-alerts\",\n \"POST /repos/{template_owner}/{template_repo}/generate\",\n \"PUT /teams/{team_id}/repos/{owner}/{repo}\",\n \"DELETE /teams/{team_id}/repos/{owner}/{repo}\",\n \"POST /user/repos\",\n \"PATCH /user/repository_invitations/{invitation_id}\",\n \"DELETE /user/repository_invitations/{invitation_id}\",\n ],\n },\n {\n name: \"administration:read\",\n description: \"Administration\",\n rules: [\n \"GET /repos/{owner}/{repo}/actions/cache/retention-limit\",\n \"GET /repos/{owner}/{repo}/actions/permissions\",\n \"GET /repos/{owner}/{repo}/actions/permissions/access\",\n \"GET /repos/{owner}/{repo}/actions/permissions/artifact-and-log-retention\",\n \"GET /repos/{owner}/{repo}/actions/permissions/fork-pr-contributor-approval\",\n \"GET /repos/{owner}/{repo}/actions/permissions/fork-pr-workflows-private-repos\",\n \"GET /repos/{owner}/{repo}/actions/permissions/selected-actions\",\n \"GET /repos/{owner}/{repo}/actions/permissions/workflow\",\n \"GET /repos/{owner}/{repo}/actions/runners\",\n \"GET /repos/{owner}/{repo}/actions/runners/downloads\",\n \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}\",\n \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n \"GET /repos/{owner}/{repo}/autolinks\",\n \"GET /repos/{owner}/{repo}/autolinks/{autolink_id}\",\n \"GET /repos/{owner}/{repo}/automated-security-fixes\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n \"GET /repos/{owner}/{repo}/code-scanning/default-setup\",\n \"GET /repos/{owner}/{repo}/code-security-configuration\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\",\n \"GET /repos/{owner}/{repo}/immutable-releases\",\n \"GET /repos/{owner}/{repo}/interaction-limits\",\n \"GET /repos/{owner}/{repo}/invitations\",\n \"GET /repos/{owner}/{repo}/keys\",\n \"GET /repos/{owner}/{repo}/keys/{key_id}\",\n \"GET /repos/{owner}/{repo}/rulesets/rule-suites\",\n \"GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}\",\n \"GET /repos/{owner}/{repo}/teams\",\n \"GET /repos/{owner}/{repo}/traffic/clones\",\n \"GET /repos/{owner}/{repo}/traffic/popular/paths\",\n \"GET /repos/{owner}/{repo}/traffic/popular/referrers\",\n \"GET /repos/{owner}/{repo}/traffic/views\",\n \"GET /repos/{owner}/{repo}/vulnerability-alerts\",\n \"GET /user/repository_invitations\",\n ],\n },\n {\n name: \"artifact_metadata:write\",\n description: \"Artifact metadata\",\n rules: [\n \"POST /orgs/{org}/artifacts/metadata/deployment-record\",\n \"POST /orgs/{org}/artifacts/metadata/deployment-record/cluster/{cluster}\",\n \"POST /orgs/{org}/artifacts/metadata/storage-record\",\n ],\n },\n {\n name: \"artifact_metadata:read\",\n description: \"Artifact metadata\",\n rules: [\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/deployment-records\",\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records\",\n ],\n },\n {\n name: \"attestations:write\",\n description: \"Attestations\",\n rules: [\n \"POST /orgs/{org}/attestations/delete-request\",\n \"DELETE /orgs/{org}/attestations/digest/{subject_digest}\",\n \"DELETE /orgs/{org}/attestations/{attestation_id}\",\n \"POST /repos/{owner}/{repo}/attestations\",\n \"POST /users/{username}/attestations/delete-request\",\n \"DELETE /users/{username}/attestations/digest/{subject_digest}\",\n \"DELETE /users/{username}/attestations/{attestation_id}\",\n ],\n },\n {\n name: \"attestations:read\",\n description: \"Attestations\",\n rules: [\n \"GET /orgs/{org}/attestations/repositories\",\n \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\",\n ],\n },\n {\n name: \"checks:write\",\n description: \"Checks\",\n rules: [\n \"POST /repos/{owner}/{repo}/check-runs\",\n \"PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}\",\n \"POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest\",\n \"POST /repos/{owner}/{repo}/check-suites\",\n \"PATCH /repos/{owner}/{repo}/check-suites/preferences\",\n \"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest\",\n ],\n },\n {\n name: \"checks:read\",\n description: \"Checks\",\n rules: [\n \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}\",\n \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\",\n \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}\",\n \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\",\n ],\n },\n {\n name: \"security_events:read\",\n description: \"Code scanning alerts\",\n rules: [\n \"GET /orgs/{org}/code-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n \"GET /repos/{owner}/{repo}/code-scanning/analyses\",\n \"GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\",\n \"GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}\",\n ],\n },\n {\n name: \"security_events:write\",\n description: \"Code scanning alerts\",\n rules: [\n \"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\",\n \"DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\",\n \"POST /repos/{owner}/{repo}/code-scanning/sarifs\",\n ],\n },\n {\n name: \"codespaces_lifecycle_admin:write\",\n description: \"Codespaces lifecycle admin\",\n rules: [\n \"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\",\n \"POST /user/codespaces/{codespace_name}/exports\",\n \"POST /user/codespaces/{codespace_name}/start\",\n \"POST /user/codespaces/{codespace_name}/stop\",\n ],\n },\n {\n name: \"codespaces_lifecycle_admin:read\",\n description: \"Codespaces lifecycle admin\",\n rules: [\"GET /user/codespaces/{codespace_name}/exports/{export_id}\"],\n },\n {\n name: \"codespaces_metadata:read\",\n description: \"Codespaces metadata\",\n rules: [\n \"GET /repos/{owner}/{repo}/codespaces/devcontainers\",\n \"GET /repos/{owner}/{repo}/codespaces/machines\",\n \"GET /user/codespaces/{codespace_name}/machines\",\n ],\n },\n {\n name: \"codespaces_secrets:write\",\n description: \"Codespaces secrets\",\n rules: [\n \"GET /repos/{owner}/{repo}/codespaces/secrets\",\n \"GET /repos/{owner}/{repo}/codespaces/secrets/public-key\",\n \"GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n \"PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n \"DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n ],\n },\n {\n name: \"codespaces:read\",\n description: \"Codespaces\",\n rules: [\n \"GET /orgs/{org}/codespaces\",\n \"GET /orgs/{org}/members/{username}/codespaces\",\n \"GET /repos/{owner}/{repo}/codespaces\",\n \"GET /user/codespaces\",\n \"GET /user/codespaces/{codespace_name}\",\n ],\n },\n {\n name: \"codespaces:write\",\n description: \"Codespaces\",\n rules: [\n \"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\",\n \"POST /repos/{owner}/{repo}/codespaces\",\n \"GET /repos/{owner}/{repo}/codespaces/new\",\n \"GET /repos/{owner}/{repo}/codespaces/permissions_check\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces\",\n \"POST /user/codespaces\",\n \"PATCH /user/codespaces/{codespace_name}\",\n \"DELETE /user/codespaces/{codespace_name}\",\n \"POST /user/codespaces/{codespace_name}/publish\",\n ],\n },\n {\n name: \"statuses:read\",\n description: \"Commit statuses\",\n rules: [\n \"GET /repos/{owner}/{repo}/commits/{ref}/status\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\",\n ],\n },\n {\n name: \"statuses:write\",\n description: \"Commit statuses\",\n rules: [\"POST /repos/{owner}/{repo}/statuses/{sha}\"],\n },\n {\n name: \"contents:read\",\n description: \"Contents\",\n rules: [\n \"POST /markdown\",\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/deployment-records\",\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records\",\n \"GET /repos/{owner}/{repo}/activity\",\n \"GET /repos/{owner}/{repo}/branches\",\n \"GET /repos/{owner}/{repo}/branches/{branch}\",\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases\",\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\",\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}\",\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}\",\n \"GET /repos/{owner}/{repo}/codeowners/errors\",\n \"GET /repos/{owner}/{repo}/commits\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head\",\n \"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n \"GET /repos/{owner}/{repo}/commits/{ref}\",\n \"GET /repos/{owner}/{repo}/community/profile\",\n \"GET /repos/{owner}/{repo}/compare/{basehead+}\",\n \"GET /repos/{owner}/{repo}/contents/{path*}\",\n \"GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead+}\",\n \"GET /repos/{owner}/{repo}/dependency-graph/sbom\",\n \"POST /repos/{owner}/{repo}/forks\",\n \"GET /repos/{owner}/{repo}/git/blobs/{file_sha}\",\n \"GET /repos/{owner}/{repo}/git/commits/{commit_sha}\",\n \"GET /repos/{owner}/{repo}/git/matching-refs/{ref+}\",\n \"GET /repos/{owner}/{repo}/git/ref/{ref+}\",\n \"GET /repos/{owner}/{repo}/git/tags/{tag_sha}\",\n \"GET /repos/{owner}/{repo}/git/trees/{tree_sha}\",\n \"GET /repos/{owner}/{repo}/import\",\n \"GET /repos/{owner}/{repo}/import/authors\",\n \"GET /repos/{owner}/{repo}/import/large_files\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}\",\n \"GET /repos/{owner}/{repo}/readme\",\n \"GET /repos/{owner}/{repo}/readme/{dir}\",\n \"GET /repos/{owner}/{repo}/releases\",\n \"GET /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n \"GET /repos/{owner}/{repo}/releases/latest\",\n \"GET /repos/{owner}/{repo}/releases/tags/{tag}\",\n \"GET /repos/{owner}/{repo}/releases/{release_id}\",\n \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\",\n \"GET /repos/{owner}/{repo}/tarball/{ref}\",\n \"GET /repos/{owner}/{repo}/zipball/{ref}\",\n \"POST /repos/{template_owner}/{template_repo}/generate\",\n ],\n },\n {\n name: \"contents:write\",\n description: \"Contents\",\n rules: [\n \"POST /orgs/{org}/artifacts/metadata/deployment-record\",\n \"POST /orgs/{org}/artifacts/metadata/deployment-record/cluster/{cluster}\",\n \"POST /orgs/{org}/artifacts/metadata/storage-record\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/rename\",\n \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits\",\n \"DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\",\n \"POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses\",\n \"PATCH /repos/{owner}/{repo}/comments/{comment_id}\",\n \"DELETE /repos/{owner}/{repo}/comments/{comment_id}\",\n \"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n \"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}\",\n \"PUT /repos/{owner}/{repo}/contents/{path*}\",\n \"DELETE /repos/{owner}/{repo}/contents/{path*}\",\n \"POST /repos/{owner}/{repo}/dependency-graph/snapshots\",\n \"POST /repos/{owner}/{repo}/dispatches\",\n \"POST /repos/{owner}/{repo}/git/blobs\",\n \"POST /repos/{owner}/{repo}/git/commits\",\n \"POST /repos/{owner}/{repo}/git/refs\",\n \"PATCH /repos/{owner}/{repo}/git/refs/{ref+}\",\n \"DELETE /repos/{owner}/{repo}/git/refs/{ref+}\",\n \"POST /repos/{owner}/{repo}/git/tags\",\n \"POST /repos/{owner}/{repo}/git/trees\",\n \"PUT /repos/{owner}/{repo}/import\",\n \"PATCH /repos/{owner}/{repo}/import\",\n \"DELETE /repos/{owner}/{repo}/import\",\n \"PATCH /repos/{owner}/{repo}/import/authors/{author_id}\",\n \"PATCH /repos/{owner}/{repo}/import/lfs\",\n \"POST /repos/{owner}/{repo}/merge-upstream\",\n \"POST /repos/{owner}/{repo}/merges\",\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge\",\n \"POST /repos/{owner}/{repo}/releases\",\n \"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n \"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n \"POST /repos/{owner}/{repo}/releases/generate-notes\",\n \"PATCH /repos/{owner}/{repo}/releases/{release_id}\",\n \"DELETE /repos/{owner}/{repo}/releases/{release_id}\",\n \"POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses\",\n ],\n },\n {\n name: \"repository_custom_properties:write\",\n description: \"Custom properties\",\n rules: [\"PATCH /repos/{owner}/{repo}/properties/values\"],\n },\n {\n name: \"vulnerability_alerts:read\",\n description: \"Dependabot alerts\",\n rules: [\n \"GET /orgs/{org}/dependabot/alerts\",\n \"GET /repos/{owner}/{repo}/dependabot/alerts\",\n \"GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\",\n ],\n },\n {\n name: \"vulnerability_alerts:write\",\n description: \"Dependabot alerts\",\n rules: [\n \"PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\",\n ],\n },\n {\n name: \"dependabot_secrets:read\",\n description: \"Dependabot secrets\",\n rules: [\n \"GET /repos/{owner}/{repo}/dependabot/secrets\",\n \"GET /repos/{owner}/{repo}/dependabot/secrets/public-key\",\n \"GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n ],\n },\n {\n name: \"dependabot_secrets:write\",\n description: \"Dependabot secrets\",\n rules: [\n \"PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n \"DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n ],\n },\n {\n name: \"deployments:write\",\n description: \"Deployments\",\n rules: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\",\n \"POST /repos/{owner}/{repo}/deployments\",\n \"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}\",\n \"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n ],\n },\n {\n name: \"deployments:read\",\n description: \"Deployments\",\n rules: [\n \"GET /repos/{owner}/{repo}/deployments\",\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}\",\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}\",\n ],\n },\n {\n name: \"environments:read\",\n description: \"Environments\",\n rules: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n ],\n },\n {\n name: \"environments:write\",\n description: \"Environments\",\n rules: [\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n \"PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n ],\n },\n {\n name: \"issues:read\",\n description: \"Issues\",\n rules: [\n \"GET /repos/{owner}/{repo}/assignees\",\n \"GET /repos/{owner}/{repo}/assignees/{assignee}\",\n \"GET /repos/{owner}/{repo}/issues\",\n \"GET /repos/{owner}/{repo}/issues/comments\",\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/issues/events\",\n \"GET /repos/{owner}/{repo}/issues/events/{event_id}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/issue-field-values\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/parent\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n \"GET /repos/{owner}/{repo}/labels\",\n \"GET /repos/{owner}/{repo}/labels/{name}\",\n \"GET /repos/{owner}/{repo}/milestones\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n ],\n },\n {\n name: \"issues:write\",\n description: \"Issues\",\n rules: [\n \"POST /repos/{owner}/{repo}/issues\",\n \"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"PUT /repos/{owner}/{repo}/issues/comments/{comment_id}/pin\",\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/pin\",\n \"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}\",\n \"PATCH /repos/{owner}/{repo}/issues/{issue_number}\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\",\n \"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n \"PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority\",\n \"POST /repos/{owner}/{repo}/labels\",\n \"PATCH /repos/{owner}/{repo}/labels/{name}\",\n \"DELETE /repos/{owner}/{repo}/labels/{name}\",\n \"POST /repos/{owner}/{repo}/milestones\",\n \"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"POST /repositories/{repository_id}/issues/{issue_number}/issue-field-values\",\n \"PUT /repositories/{repository_id}/issues/{issue_number}/issue-field-values\",\n \"DELETE /repositories/{repository_id}/issues/{issue_number}/issue-field-values/{issue_field_id}\",\n ],\n },\n {\n name: \"metadata:read\",\n description: \"Metadata\",\n rules: [\n \"GET /orgs/{org}/repos\",\n \"GET /repos/{owner}/{repo}\",\n \"GET /repos/{owner}/{repo}/collaborators\",\n \"GET /repos/{owner}/{repo}/collaborators/{username}\",\n \"GET /repos/{owner}/{repo}/collaborators/{username}/permission\",\n \"GET /repos/{owner}/{repo}/comments\",\n \"GET /repos/{owner}/{repo}/comments/{comment_id}\",\n \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n \"GET /repos/{owner}/{repo}/contributors\",\n \"GET /repos/{owner}/{repo}/events\",\n \"GET /repos/{owner}/{repo}/forks\",\n \"GET /repos/{owner}/{repo}/languages\",\n \"GET /repos/{owner}/{repo}/license\",\n \"GET /repos/{owner}/{repo}/private-vulnerability-reporting\",\n \"GET /repos/{owner}/{repo}/properties/values\",\n \"GET /repos/{owner}/{repo}/rules/branches/{branch}\",\n \"GET /repos/{owner}/{repo}/rulesets\",\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}\",\n \"GET /repos/{owner}/{repo}/stargazers\",\n \"GET /repos/{owner}/{repo}/stats/code_frequency\",\n \"GET /repos/{owner}/{repo}/stats/commit_activity\",\n \"GET /repos/{owner}/{repo}/stats/contributors\",\n \"GET /repos/{owner}/{repo}/stats/participation\",\n \"GET /repos/{owner}/{repo}/stats/punch_card\",\n \"GET /repos/{owner}/{repo}/subscribers\",\n \"GET /repos/{owner}/{repo}/tags\",\n \"GET /repos/{owner}/{repo}/topics\",\n \"GET /repositories\",\n \"GET /search/labels\",\n \"GET /user/installations/{installation_id}/repositories\",\n \"GET /user/repos\",\n \"GET /users/{username}/repos\",\n ],\n },\n {\n name: \"pages:read\",\n description: \"Pages\",\n rules: [\n \"GET /repos/{owner}/{repo}/pages\",\n \"GET /repos/{owner}/{repo}/pages/builds\",\n \"GET /repos/{owner}/{repo}/pages/builds/latest\",\n \"GET /repos/{owner}/{repo}/pages/builds/{build_id}\",\n \"GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}\",\n ],\n },\n {\n name: \"pages:write\",\n description: \"Pages\",\n rules: [\n \"POST /repos/{owner}/{repo}/pages\",\n \"PUT /repos/{owner}/{repo}/pages\",\n \"DELETE /repos/{owner}/{repo}/pages\",\n \"POST /repos/{owner}/{repo}/pages/builds\",\n \"POST /repos/{owner}/{repo}/pages/deployments\",\n \"POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel\",\n \"GET /repos/{owner}/{repo}/pages/health\",\n ],\n },\n {\n name: \"pull_requests:read\",\n description: \"Pull requests\",\n rules: [\n \"GET /repos/{owner}/{repo}/assignees\",\n \"GET /repos/{owner}/{repo}/assignees/{assignee}\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\",\n \"GET /repos/{owner}/{repo}/issues/comments\",\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"GET /repos/{owner}/{repo}/issues/events/{event_id}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n \"GET /repos/{owner}/{repo}/labels\",\n \"GET /repos/{owner}/{repo}/labels/{name}\",\n \"GET /repos/{owner}/{repo}/milestones\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n \"GET /repos/{owner}/{repo}/pulls\",\n \"GET /repos/{owner}/{repo}/pulls/comments\",\n \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/merge\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\",\n ],\n },\n {\n name: \"pull_requests:write\",\n description: \"Pull requests\",\n rules: [\n \"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"PATCH /repos/{owner}/{repo}/issues/{issue_number}\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\",\n \"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\",\n \"POST /repos/{owner}/{repo}/labels\",\n \"PATCH /repos/{owner}/{repo}/labels/{name}\",\n \"DELETE /repos/{owner}/{repo}/labels/{name}\",\n \"POST /repos/{owner}/{repo}/milestones\",\n \"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"POST /repos/{owner}/{repo}/pulls\",\n \"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n \"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}\",\n \"PATCH /repos/{owner}/{repo}/pulls/{pull_number}\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events\",\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch\",\n \"POST /repositories/{repository_id}/issues/{issue_number}/issue-field-values\",\n \"PUT /repositories/{repository_id}/issues/{issue_number}/issue-field-values\",\n \"DELETE /repositories/{repository_id}/issues/{issue_number}/issue-field-values/{issue_field_id}\",\n ],\n },\n {\n name: \"repository_advisories:write\",\n description: \"Repository security advisories\",\n rules: [\n \"GET /orgs/{org}/security-advisories\",\n \"POST /repos/{owner}/{repo}/security-advisories\",\n \"POST /repos/{owner}/{repo}/security-advisories/reports\",\n \"PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}\",\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve\",\n ],\n },\n {\n name: \"repository_advisories:read\",\n description: \"Repository security advisories\",\n rules: [\n \"GET /repos/{owner}/{repo}/security-advisories\",\n \"GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}\",\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks\",\n ],\n },\n {\n name: \"secret_scanning_alerts:read\",\n description: \"Secret scanning alerts\",\n rules: [\n \"GET /orgs/{org}/secret-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\",\n \"GET /repos/{owner}/{repo}/secret-scanning/scan-history\",\n ],\n },\n {\n name: \"secret_scanning_alerts:write\",\n description: \"Secret scanning alerts\",\n rules: [\n \"PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\",\n ],\n },\n {\n name: \"secrets:read\",\n description: \"Secrets\",\n rules: [\n \"GET /repos/{owner}/{repo}/actions/organization-secrets\",\n \"GET /repos/{owner}/{repo}/actions/secrets\",\n \"GET /repos/{owner}/{repo}/actions/secrets/public-key\",\n \"GET /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n ],\n },\n {\n name: \"secrets:write\",\n description: \"Secrets\",\n rules: [\n \"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n \"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n ],\n },\n {\n name: \"actions_variables:read\",\n description: \"Variables\",\n rules: [\n \"GET /repos/{owner}/{repo}/actions/organization-variables\",\n \"GET /repos/{owner}/{repo}/actions/variables\",\n \"GET /repos/{owner}/{repo}/actions/variables/{name}\",\n ],\n },\n {\n name: \"actions_variables:write\",\n description: \"Variables\",\n rules: [\n \"POST /repos/{owner}/{repo}/actions/variables\",\n \"PATCH /repos/{owner}/{repo}/actions/variables/{name}\",\n \"DELETE /repos/{owner}/{repo}/actions/variables/{name}\",\n ],\n },\n {\n name: \"repository_hooks:read\",\n description: \"Webhooks\",\n rules: [\n \"GET /repos/{owner}/{repo}/hooks\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/config\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}\",\n \"POST /repos/{owner}/{repo}/hooks/{hook_id}/pings\",\n \"POST /repos/{owner}/{repo}/hooks/{hook_id}/tests\",\n ],\n },\n {\n name: \"repository_hooks:write\",\n description: \"Webhooks\",\n rules: [\n \"POST /repos/{owner}/{repo}/hooks\",\n \"PATCH /repos/{owner}/{repo}/hooks/{hook_id}\",\n \"DELETE /repos/{owner}/{repo}/hooks/{hook_id}\",\n \"PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config\",\n \"POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\",\n ],\n },\n {\n name: \"workflows:write\",\n description: \"Workflows\",\n rules: [\n \"PUT /repos/{owner}/{repo}/contents/{path*}\",\n \"DELETE /repos/{owner}/{repo}/contents/{path*}\",\n \"POST /repos/{owner}/{repo}/git/refs\",\n \"PATCH /repos/{owner}/{repo}/git/refs/{ref+}\",\n \"POST /repos/{owner}/{repo}/releases\",\n ],\n },\n {\n name: \"blocking:read\",\n description: \"Block another user\",\n rules: [\"GET /user/blocks\", \"GET /user/blocks/{username}\"],\n },\n {\n name: \"blocking:write\",\n description: \"Block another user\",\n rules: [\n \"PUT /user/blocks/{username}\",\n \"DELETE /user/blocks/{username}\",\n ],\n },\n {\n name: \"codespaces_user_secrets:read\",\n description: \"Codespaces user secrets\",\n rules: [\n \"GET /user/codespaces/secrets\",\n \"GET /user/codespaces/secrets/public-key\",\n \"GET /user/codespaces/secrets/{secret_name}\",\n \"GET /user/codespaces/secrets/{secret_name}/repositories\",\n ],\n },\n {\n name: \"codespaces_user_secrets:write\",\n description: \"Codespaces user secrets\",\n rules: [\n \"PUT /user/codespaces/secrets/{secret_name}\",\n \"DELETE /user/codespaces/secrets/{secret_name}\",\n \"PUT /user/codespaces/secrets/{secret_name}/repositories\",\n \"PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n \"DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"emails:write\",\n description: \"Email addresses\",\n rules: [\n \"PATCH /user/email/visibility\",\n \"POST /user/emails\",\n \"DELETE /user/emails\",\n ],\n },\n {\n name: \"emails:read\",\n description: \"Email addresses\",\n rules: [\"GET /user/emails\", \"GET /user/public_emails\"],\n },\n {\n name: \"followers:read\",\n description: \"Followers\",\n rules: [\n \"GET /user/followers\",\n \"GET /user/following\",\n \"GET /user/following/{username}\",\n ],\n },\n {\n name: \"followers:write\",\n description: \"Followers\",\n rules: [\n \"PUT /user/following/{username}\",\n \"DELETE /user/following/{username}\",\n ],\n },\n {\n name: \"gpg_keys:read\",\n description: \"GPG keys\",\n rules: [\"GET /user/gpg_keys\", \"GET /user/gpg_keys/{gpg_key_id}\"],\n },\n {\n name: \"gpg_keys:write\",\n description: \"GPG keys\",\n rules: [\"POST /user/gpg_keys\", \"DELETE /user/gpg_keys/{gpg_key_id}\"],\n },\n {\n name: \"gists:write\",\n description: \"Gists\",\n rules: [\n \"POST /gists\",\n \"PATCH /gists/{gist_id}\",\n \"DELETE /gists/{gist_id}\",\n \"POST /gists/{gist_id}/comments\",\n \"PATCH /gists/{gist_id}/comments/{comment_id}\",\n \"DELETE /gists/{gist_id}/comments/{comment_id}\",\n \"POST /gists/{gist_id}/forks\",\n \"PUT /gists/{gist_id}/star\",\n \"DELETE /gists/{gist_id}/star\",\n ],\n },\n {\n name: \"keys:read\",\n description: \"Git SSH keys\",\n rules: [\n \"GET /user/keys\",\n \"GET /user/keys/{key_id}\",\n \"GET /users/{username}/keys\",\n ],\n },\n {\n name: \"keys:write\",\n description: \"Git SSH keys\",\n rules: [\"POST /user/keys\", \"DELETE /user/keys/{key_id}\"],\n },\n {\n name: \"interaction_limits:read\",\n description: \"Interaction limits\",\n rules: [\"GET /user/interaction-limits\"],\n },\n {\n name: \"interaction_limits:write\",\n description: \"Interaction limits\",\n rules: [\n \"PUT /user/interaction-limits\",\n \"DELETE /user/interaction-limits\",\n ],\n },\n {\n name: \"plan:read\",\n description: \"Plan\",\n rules: [\n \"GET /users/{username}/settings/billing/premium_request/usage\",\n \"GET /users/{username}/settings/billing/usage\",\n \"GET /users/{username}/settings/billing/usage/summary\",\n ],\n },\n {\n name: \"private_repository_invitations:read\",\n description: \"Private repository invitations\",\n rules: [\"GET /repos/{owner}/{repo}/invitations\"],\n },\n {\n name: \"profile:write\",\n description: \"Profile\",\n rules: [\n \"PATCH /user\",\n \"POST /user/social_accounts\",\n \"DELETE /user/social_accounts\",\n ],\n },\n {\n name: \"git_signing_ssh_public_keys:read\",\n description: \"SSH signing keys\",\n rules: [\n \"GET /user/ssh_signing_keys\",\n \"GET /user/ssh_signing_keys/{ssh_signing_key_id}\",\n ],\n },\n {\n name: \"git_signing_ssh_public_keys:write\",\n description: \"SSH signing keys\",\n rules: [\n \"POST /user/ssh_signing_keys\",\n \"DELETE /user/ssh_signing_keys/{ssh_signing_key_id}\",\n ],\n },\n {\n name: \"starring:read\",\n description: \"Starring\",\n rules: [\n \"GET /user/starred\",\n \"GET /user/starred/{owner}/{repo}\",\n \"GET /users/{username}/starred\",\n ],\n },\n {\n name: \"starring:write\",\n description: \"Starring\",\n rules: [\n \"PUT /user/starred/{owner}/{repo}\",\n \"DELETE /user/starred/{owner}/{repo}\",\n ],\n },\n {\n name: \"watching:read\",\n description: \"Watching\",\n rules: [\n \"GET /user/subscriptions\",\n \"GET /users/{username}/subscriptions\",\n ],\n },\n ],\n },\n {\n base: \"https://uploads.github.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GITHUB_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"contents:write\",\n description: \"Upload release assets\",\n rules: [\"POST /repos/{owner}/{repo}/releases/{release_id}/assets\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from GitLab API docs.\n// Source: https://docs.gitlab.com/api/rest/authentication/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:gitlab\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const gitlabFirewall: FirewallConfig = {\n name: \"gitlab\",\n description: \"GitLab API\",\n placeholders: {\n GITLAB_TOKEN: \"glpat-Vm0PlaceHolder000000\",\n },\n apis: [\n {\n base: \"https://gitlab.com/api\",\n auth: {\n headers: {\n \"PRIVATE-TOKEN\": \"${{ secrets.GITLAB_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://gmail.googleapis.com/$discovery/rest?version=v1\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:gmail\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const gmailFirewall: FirewallConfig = {\n name: \"gmail\",\n description: \"Gmail API\",\n placeholders: {\n GMAIL_TOKEN:\n \"ya29.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://gmail.googleapis.com/gmail\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GMAIL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"gmail\",\n description:\n \"Read, compose, send, and permanently delete all your email from Gmail\",\n rules: [\n \"GET /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"GET /v1/users/{userId}/drafts/{id}\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"DELETE /v1/users/{userId}/drafts/{id}\",\n \"GET /v1/users/{userId}/history\",\n \"GET /v1/users/{userId}/labels\",\n \"POST /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"PUT /v1/users/{userId}/labels/{id}\",\n \"PATCH /v1/users/{userId}/labels/{id}\",\n \"DELETE /v1/users/{userId}/labels/{id}\",\n \"GET /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/batchDelete\",\n \"POST /v1/users/{userId}/messages/batchModify\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n \"GET /v1/users/{userId}/messages/{id}\",\n \"DELETE /v1/users/{userId}/messages/{id}\",\n \"POST /v1/users/{userId}/messages/{id}/modify\",\n \"POST /v1/users/{userId}/messages/{id}/trash\",\n \"POST /v1/users/{userId}/messages/{id}/untrash\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/profile\",\n \"GET /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"GET /v1/users/{userId}/settings/delegates\",\n \"GET /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"GET /v1/users/{userId}/settings/filters\",\n \"GET /v1/users/{userId}/settings/filters/{id}\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"GET /v1/users/{userId}/settings/imap\",\n \"GET /v1/users/{userId}/settings/language\",\n \"GET /v1/users/{userId}/settings/pop\",\n \"GET /v1/users/{userId}/settings/sendAs\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"GET /v1/users/{userId}/settings/vacation\",\n \"POST /v1/users/{userId}/stop\",\n \"GET /v1/users/{userId}/threads\",\n \"GET /v1/users/{userId}/threads/{id}\",\n \"DELETE /v1/users/{userId}/threads/{id}\",\n \"POST /v1/users/{userId}/threads/{id}/modify\",\n \"POST /v1/users/{userId}/threads/{id}/trash\",\n \"POST /v1/users/{userId}/threads/{id}/untrash\",\n \"POST /v1/users/{userId}/watch\",\n ],\n },\n {\n name: \"gmail.addons.current.action.compose\",\n description:\n \"Manage drafts and send emails when you interact with the add-on\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"DELETE /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.addons.current.message.action\",\n description:\n \"View your email messages when you interact with the add-on\",\n rules: [\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/threads/{id}\",\n ],\n },\n {\n name: \"gmail.addons.current.message.metadata\",\n description:\n \"View your email message metadata when the add-on is running\",\n rules: [\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/threads/{id}\",\n ],\n },\n {\n name: \"gmail.addons.current.message.readonly\",\n description: \"View your email messages when the add-on is running\",\n rules: [\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/threads/{id}\",\n ],\n },\n {\n name: \"gmail.compose\",\n description: \"Manage drafts and send emails\",\n rules: [\n \"GET /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"GET /v1/users/{userId}/drafts/{id}\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"DELETE /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n \"GET /v1/users/{userId}/profile\",\n ],\n },\n {\n name: \"gmail.insert\",\n description: \"Add emails into your Gmail mailbox\",\n rules: [\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n ],\n },\n {\n name: \"gmail.labels\",\n description: \"See and edit your email labels\",\n rules: [\n \"GET /v1/users/{userId}/labels\",\n \"POST /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"PUT /v1/users/{userId}/labels/{id}\",\n \"PATCH /v1/users/{userId}/labels/{id}\",\n \"DELETE /v1/users/{userId}/labels/{id}\",\n ],\n },\n {\n name: \"gmail.metadata\",\n description:\n \"View your email message metadata such as labels and headers, but not the email body\",\n rules: [\n \"GET /v1/users/{userId}/history\",\n \"GET /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"GET /v1/users/{userId}/messages\",\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/profile\",\n \"POST /v1/users/{userId}/stop\",\n \"GET /v1/users/{userId}/threads\",\n \"GET /v1/users/{userId}/threads/{id}\",\n \"POST /v1/users/{userId}/watch\",\n ],\n },\n {\n name: \"gmail.modify\",\n description: \"Read, compose, and send emails from your Gmail account\",\n rules: [\n \"GET /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"GET /v1/users/{userId}/drafts/{id}\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"DELETE /v1/users/{userId}/drafts/{id}\",\n \"GET /v1/users/{userId}/history\",\n \"GET /v1/users/{userId}/labels\",\n \"POST /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"PUT /v1/users/{userId}/labels/{id}\",\n \"PATCH /v1/users/{userId}/labels/{id}\",\n \"DELETE /v1/users/{userId}/labels/{id}\",\n \"GET /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/batchModify\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n \"GET /v1/users/{userId}/messages/{id}\",\n \"POST /v1/users/{userId}/messages/{id}/modify\",\n \"POST /v1/users/{userId}/messages/{id}/trash\",\n \"POST /v1/users/{userId}/messages/{id}/untrash\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/profile\",\n \"GET /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"GET /v1/users/{userId}/settings/delegates\",\n \"GET /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"GET /v1/users/{userId}/settings/filters\",\n \"GET /v1/users/{userId}/settings/filters/{id}\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"GET /v1/users/{userId}/settings/imap\",\n \"GET /v1/users/{userId}/settings/language\",\n \"GET /v1/users/{userId}/settings/pop\",\n \"GET /v1/users/{userId}/settings/sendAs\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"GET /v1/users/{userId}/settings/vacation\",\n \"POST /v1/users/{userId}/stop\",\n \"GET /v1/users/{userId}/threads\",\n \"GET /v1/users/{userId}/threads/{id}\",\n \"POST /v1/users/{userId}/threads/{id}/modify\",\n \"POST /v1/users/{userId}/threads/{id}/trash\",\n \"POST /v1/users/{userId}/threads/{id}/untrash\",\n \"POST /v1/users/{userId}/watch\",\n ],\n },\n {\n name: \"gmail.readonly\",\n description: \"View your email messages and settings\",\n rules: [\n \"GET /v1/users/{userId}/drafts\",\n \"GET /v1/users/{userId}/drafts/{id}\",\n \"GET /v1/users/{userId}/history\",\n \"GET /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"GET /v1/users/{userId}/messages\",\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/profile\",\n \"GET /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"GET /v1/users/{userId}/settings/delegates\",\n \"GET /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"GET /v1/users/{userId}/settings/filters\",\n \"GET /v1/users/{userId}/settings/filters/{id}\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"GET /v1/users/{userId}/settings/imap\",\n \"GET /v1/users/{userId}/settings/language\",\n \"GET /v1/users/{userId}/settings/pop\",\n \"GET /v1/users/{userId}/settings/sendAs\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"GET /v1/users/{userId}/settings/vacation\",\n \"POST /v1/users/{userId}/stop\",\n \"GET /v1/users/{userId}/threads\",\n \"GET /v1/users/{userId}/threads/{id}\",\n \"POST /v1/users/{userId}/watch\",\n ],\n },\n {\n name: \"gmail.send\",\n description: \"Send email on your behalf\",\n rules: [\"POST /v1/users/{userId}/messages/send\"],\n },\n {\n name: \"gmail.settings.basic\",\n description:\n \"See, edit, create, or change your email settings and filters in Gmail\",\n rules: [\n \"GET /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"POST /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"DELETE /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"PATCH /v1/users/{userId}/settings/cse/identities/{emailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"POST /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:disable\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:enable\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:obliterate\",\n \"GET /v1/users/{userId}/settings/delegates\",\n \"GET /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"GET /v1/users/{userId}/settings/filters\",\n \"POST /v1/users/{userId}/settings/filters\",\n \"GET /v1/users/{userId}/settings/filters/{id}\",\n \"DELETE /v1/users/{userId}/settings/filters/{id}\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"GET /v1/users/{userId}/settings/imap\",\n \"PUT /v1/users/{userId}/settings/imap\",\n \"GET /v1/users/{userId}/settings/language\",\n \"PUT /v1/users/{userId}/settings/language\",\n \"GET /v1/users/{userId}/settings/pop\",\n \"PUT /v1/users/{userId}/settings/pop\",\n \"GET /v1/users/{userId}/settings/sendAs\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"PUT /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"PATCH /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"DELETE /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault\",\n \"GET /v1/users/{userId}/settings/vacation\",\n \"PUT /v1/users/{userId}/settings/vacation\",\n ],\n },\n {\n name: \"gmail.settings.sharing\",\n description:\n \"Manage your sensitive mail settings, including who can manage your mail\",\n rules: [\n \"PUT /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"POST /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"DELETE /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"PATCH /v1/users/{userId}/settings/cse/identities/{emailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"POST /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:disable\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:enable\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:obliterate\",\n \"POST /v1/users/{userId}/settings/delegates\",\n \"DELETE /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"POST /v1/users/{userId}/settings/forwardingAddresses\",\n \"DELETE /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"POST /v1/users/{userId}/settings/sendAs\",\n \"PUT /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"PATCH /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"DELETE /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"DELETE /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/verify\",\n ],\n },\n ],\n },\n {\n base: \"https://gmail.googleapis.com/upload/gmail\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GMAIL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"gmail\",\n description:\n \"Read, compose, send, and permanently delete all your email from Gmail\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.addons.current.action.compose\",\n description:\n \"Manage drafts and send emails when you interact with the add-on\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.compose\",\n description: \"Manage drafts and send emails\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.insert\",\n description: \"Add emails into your Gmail mailbox\",\n rules: [\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n ],\n },\n {\n name: \"gmail.modify\",\n description: \"Read, compose, and send emails from your Gmail account\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.send\",\n description: \"Send email on your behalf\",\n rules: [\"POST /v1/users/{userId}/messages/send\"],\n },\n ],\n },\n {\n base: \"https://gmail.googleapis.com/resumable/upload/gmail\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GMAIL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"gmail\",\n description:\n \"Read, compose, send, and permanently delete all your email from Gmail\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.addons.current.action.compose\",\n description:\n \"Manage drafts and send emails when you interact with the add-on\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.compose\",\n description: \"Manage drafts and send emails\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.insert\",\n description: \"Add emails into your Gmail mailbox\",\n rules: [\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n ],\n },\n {\n name: \"gmail.modify\",\n description: \"Read, compose, and send emails from your Gmail account\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.send\",\n description: \"Send email on your behalf\",\n rules: [\"POST /v1/users/{userId}/messages/send\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:google-calendar\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const googleCalendarFirewall: FirewallConfig = {\n name: \"google-calendar\",\n description: \"Google Calendar API\",\n placeholders: {\n GOOGLE_CALENDAR_TOKEN:\n \"ya29.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://www.googleapis.com/calendar\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_CALENDAR_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"calendar\",\n description:\n \"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\n rules: [\n \"POST /v3/calendars\",\n \"GET /v3/calendars/{calendarId}\",\n \"PUT /v3/calendars/{calendarId}\",\n \"PATCH /v3/calendars/{calendarId}\",\n \"DELETE /v3/calendars/{calendarId}\",\n \"GET /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl/watch\",\n \"GET /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"PUT /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"PATCH /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"DELETE /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"POST /v3/calendars/{calendarId}/clear\",\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/import\",\n \"POST /v3/calendars/{calendarId}/events/quickAdd\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"PUT /v3/calendars/{calendarId}/events/{eventId}\",\n \"PATCH /v3/calendars/{calendarId}/events/{eventId}\",\n \"DELETE /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/calendars/{calendarId}/events/{eventId}/move\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"POST /v3/freeBusy\",\n \"GET /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList/watch\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n \"PUT /v3/users/me/calendarList/{calendarId}\",\n \"PATCH /v3/users/me/calendarList/{calendarId}\",\n \"DELETE /v3/users/me/calendarList/{calendarId}\",\n \"GET /v3/users/me/settings\",\n \"POST /v3/users/me/settings/watch\",\n \"GET /v3/users/me/settings/{setting}\",\n ],\n },\n {\n name: \"calendar.acls\",\n description:\n \"See and change the sharing permissions of Google calendars you own\",\n rules: [\n \"GET /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl/watch\",\n \"GET /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"PUT /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"PATCH /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"DELETE /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"POST /v3/channels/stop\",\n ],\n },\n {\n name: \"calendar.acls.readonly\",\n description:\n \"See the sharing permissions of Google calendars you own\",\n rules: [\n \"GET /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl/watch\",\n \"GET /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"POST /v3/channels/stop\",\n ],\n },\n {\n name: \"calendar.app.created\",\n description:\n \"Make secondary Google calendars, and see, create, change, and delete events on them\",\n rules: [\n \"POST /v3/calendars\",\n \"GET /v3/calendars/{calendarId}\",\n \"PUT /v3/calendars/{calendarId}\",\n \"PATCH /v3/calendars/{calendarId}\",\n \"DELETE /v3/calendars/{calendarId}\",\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/import\",\n \"POST /v3/calendars/{calendarId}/events/quickAdd\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"PUT /v3/calendars/{calendarId}/events/{eventId}\",\n \"PATCH /v3/calendars/{calendarId}/events/{eventId}\",\n \"DELETE /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n \"PUT /v3/users/me/calendarList/{calendarId}\",\n \"PATCH /v3/users/me/calendarList/{calendarId}\",\n \"DELETE /v3/users/me/calendarList/{calendarId}\",\n ],\n },\n {\n name: \"calendar.calendarlist\",\n description:\n \"See, add, and remove Google calendars you’re subscribed to\",\n rules: [\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"GET /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList/watch\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n \"PUT /v3/users/me/calendarList/{calendarId}\",\n \"PATCH /v3/users/me/calendarList/{calendarId}\",\n \"DELETE /v3/users/me/calendarList/{calendarId}\",\n ],\n },\n {\n name: \"calendar.calendarlist.readonly\",\n description: \"See the list of Google calendars you’re subscribed to\",\n rules: [\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"GET /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList/watch\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n ],\n },\n {\n name: \"calendar.calendars\",\n description:\n \"See and change the properties of Google calendars you have access to, and create secondary calendars\",\n rules: [\n \"POST /v3/calendars\",\n \"GET /v3/calendars/{calendarId}\",\n \"PUT /v3/calendars/{calendarId}\",\n \"PATCH /v3/calendars/{calendarId}\",\n \"DELETE /v3/calendars/{calendarId}\",\n \"POST /v3/calendars/{calendarId}/clear\",\n ],\n },\n {\n name: \"calendar.calendars.readonly\",\n description:\n \"See the title, description, default time zone, and other properties of Google calendars you have access to\",\n rules: [\"GET /v3/calendars/{calendarId}\"],\n },\n {\n name: \"calendar.events\",\n description: \"View and edit events on all your calendars\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/import\",\n \"POST /v3/calendars/{calendarId}/events/quickAdd\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"PUT /v3/calendars/{calendarId}/events/{eventId}\",\n \"PATCH /v3/calendars/{calendarId}/events/{eventId}\",\n \"DELETE /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/calendars/{calendarId}/events/{eventId}/move\",\n \"POST /v3/channels/stop\",\n ],\n },\n {\n name: \"calendar.events.freebusy\",\n description:\n \"See the availability on Google calendars you have access to\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"POST /v3/freeBusy\",\n ],\n },\n {\n name: \"calendar.events.owned\",\n description:\n \"See, create, change, and delete events on Google calendars you own\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/import\",\n \"POST /v3/calendars/{calendarId}/events/quickAdd\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"PUT /v3/calendars/{calendarId}/events/{eventId}\",\n \"PATCH /v3/calendars/{calendarId}/events/{eventId}\",\n \"DELETE /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/calendars/{calendarId}/events/{eventId}/move\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n ],\n },\n {\n name: \"calendar.events.owned.readonly\",\n description: \"See the events on Google calendars you own\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n ],\n },\n {\n name: \"calendar.events.public.readonly\",\n description: \"See the events on public calendars\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n ],\n },\n {\n name: \"calendar.events.readonly\",\n description: \"View events on all your calendars\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n ],\n },\n {\n name: \"calendar.freebusy\",\n description: \"View your availability in your calendars\",\n rules: [\"POST /v3/freeBusy\"],\n },\n {\n name: \"calendar.readonly\",\n description:\n \"See and download any calendar you can access using your Google Calendar\",\n rules: [\n \"GET /v3/calendars/{calendarId}\",\n \"GET /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"POST /v3/freeBusy\",\n \"GET /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList/watch\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n \"GET /v3/users/me/settings\",\n \"POST /v3/users/me/settings/watch\",\n \"GET /v3/users/me/settings/{setting}\",\n ],\n },\n {\n name: \"calendar.settings.readonly\",\n description: \"View your Calendar settings\",\n rules: [\n \"POST /v3/channels/stop\",\n \"GET /v3/users/me/settings\",\n \"POST /v3/users/me/settings/watch\",\n \"GET /v3/users/me/settings/{setting}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://docs.googleapis.com/$discovery/rest?version=v1\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:google-docs\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const googleDocsFirewall: FirewallConfig = {\n name: \"google-docs\",\n description: \"Google Docs API\",\n placeholders: {\n GOOGLE_DOCS_TOKEN:\n \"ya29.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://docs.googleapis.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_DOCS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"documents\",\n description:\n \"See, edit, create, and delete all your Google Docs documents\",\n rules: [\n \"POST /v1/documents\",\n \"GET /v1/documents/{documentId}\",\n \"POST /v1/documents/{documentId}:batchUpdate\",\n ],\n },\n {\n name: \"documents.readonly\",\n description: \"See all your Google Docs documents\",\n rules: [\"GET /v1/documents/{documentId}\"],\n },\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"POST /v1/documents\",\n \"GET /v1/documents/{documentId}\",\n \"POST /v1/documents/{documentId}:batchUpdate\",\n ],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"POST /v1/documents\",\n \"GET /v1/documents/{documentId}\",\n \"POST /v1/documents/{documentId}:batchUpdate\",\n ],\n },\n {\n name: \"drive.readonly\",\n description: \"See and download all your Google Drive files\",\n rules: [\"GET /v1/documents/{documentId}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://www.googleapis.com/discovery/v1/apis/drive/v2/rest\n// Source: https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:google-drive\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const googleDriveFirewall: FirewallConfig = {\n name: \"google-drive\",\n description: \"Google Drive API\",\n placeholders: {\n GOOGLE_DRIVE_TOKEN:\n \"ya29.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://www.googleapis.com/drive\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_DRIVE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/drives\",\n \"POST /v2/drives\",\n \"GET /v2/drives/{driveId}\",\n \"PUT /v2/drives/{driveId}\",\n \"DELETE /v2/drives/{driveId}\",\n \"POST /v2/drives/{driveId}/hide\",\n \"POST /v2/drives/{driveId}/unhide\",\n \"GET /v2/files\",\n \"POST /v2/files\",\n \"GET /v2/files/generateIds\",\n \"DELETE /v2/files/trash\",\n \"GET /v2/files/{fileId}\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"DELETE /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/comments\",\n \"POST /v2/files/{fileId}/comments\",\n \"GET /v2/files/{fileId}/comments/{commentId}\",\n \"PUT /v2/files/{fileId}/comments/{commentId}\",\n \"PATCH /v2/files/{fileId}/comments/{commentId}\",\n \"DELETE /v2/files/{fileId}/comments/{commentId}\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies\",\n \"POST /v2/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PUT /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PATCH /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"DELETE /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"GET /v2/files/{fileId}/export\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"POST /v2/files/{fileId}/modifyLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"POST /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"DELETE /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"POST /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"PUT /v2/files/{fileId}/permissions/{permissionId}\",\n \"PATCH /v2/files/{fileId}/permissions/{permissionId}\",\n \"DELETE /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"POST /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"PUT /v2/files/{fileId}/properties/{propertyKey}\",\n \"PATCH /v2/files/{fileId}/properties/{propertyKey}\",\n \"DELETE /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"PUT /v2/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v2/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/trash\",\n \"POST /v2/files/{fileId}/untrash\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"POST /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"DELETE /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v2/teamdrives\",\n \"POST /v2/teamdrives\",\n \"GET /v2/teamdrives/{teamDriveId}\",\n \"PUT /v2/teamdrives/{teamDriveId}\",\n \"DELETE /v2/teamdrives/{teamDriveId}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/drives\",\n \"POST /v3/drives\",\n \"GET /v3/drives/{driveId}\",\n \"PATCH /v3/drives/{driveId}\",\n \"DELETE /v3/drives/{driveId}\",\n \"POST /v3/drives/{driveId}/hide\",\n \"POST /v3/drives/{driveId}/unhide\",\n \"GET /v3/files\",\n \"POST /v3/files\",\n \"GET /v3/files/generateIds\",\n \"DELETE /v3/files/trash\",\n \"GET /v3/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n \"DELETE /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"POST /v3/files/{fileId}/accessproposals/{proposalId}:resolve\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/comments\",\n \"POST /v3/files/{fileId}/comments\",\n \"GET /v3/files/{fileId}/comments/{commentId}\",\n \"PATCH /v3/files/{fileId}/comments/{commentId}\",\n \"DELETE /v3/files/{fileId}/comments/{commentId}\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies\",\n \"POST /v3/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PATCH /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"DELETE /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v3/files/{fileId}/copy\",\n \"POST /v3/files/{fileId}/download\",\n \"GET /v3/files/{fileId}/export\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"POST /v3/files/{fileId}/modifyLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"POST /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"PATCH /v3/files/{fileId}/permissions/{permissionId}\",\n \"DELETE /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v3/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n \"GET /v3/operations/{name}\",\n \"GET /v3/teamdrives\",\n \"POST /v3/teamdrives\",\n \"GET /v3/teamdrives/{teamDriveId}\",\n \"PATCH /v3/teamdrives/{teamDriveId}\",\n \"DELETE /v3/teamdrives/{teamDriveId}\",\n ],\n },\n {\n name: \"drive.appdata\",\n description:\n \"See, create, and delete its own configuration data in your Google Drive\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"POST /v2/files\",\n \"GET /v2/files/generateIds\",\n \"GET /v2/files/{fileId}\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"DELETE /v2/files/{fileId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"GET /v2/files/{fileId}/parents\",\n \"POST /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"POST /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"PUT /v2/files/{fileId}/properties/{propertyKey}\",\n \"PATCH /v2/files/{fileId}/properties/{propertyKey}\",\n \"DELETE /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"PUT /v2/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v2/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/trash\",\n \"POST /v2/files/{fileId}/untrash\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"POST /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"POST /v3/files\",\n \"GET /v3/files/generateIds\",\n \"GET /v3/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n \"DELETE /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"POST /v3/files/{fileId}/copy\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v3/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n ],\n },\n {\n name: \"drive.apps.readonly\",\n description: \"View your Google Drive apps\",\n rules: [\n \"GET /v2/apps\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/trash\",\n \"POST /v2/files/{fileId}/untrash\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/apps\",\n \"GET /v3/apps/{appId}\",\n ],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"POST /v2/files\",\n \"GET /v2/files/generateIds\",\n \"GET /v2/files/{fileId}\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"DELETE /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/comments\",\n \"POST /v2/files/{fileId}/comments\",\n \"GET /v2/files/{fileId}/comments/{commentId}\",\n \"PUT /v2/files/{fileId}/comments/{commentId}\",\n \"PATCH /v2/files/{fileId}/comments/{commentId}\",\n \"DELETE /v2/files/{fileId}/comments/{commentId}\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies\",\n \"POST /v2/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PUT /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PATCH /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"DELETE /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"GET /v2/files/{fileId}/export\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"POST /v2/files/{fileId}/modifyLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"POST /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"DELETE /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"POST /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"PUT /v2/files/{fileId}/permissions/{permissionId}\",\n \"PATCH /v2/files/{fileId}/permissions/{permissionId}\",\n \"DELETE /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"POST /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"PUT /v2/files/{fileId}/properties/{propertyKey}\",\n \"PATCH /v2/files/{fileId}/properties/{propertyKey}\",\n \"DELETE /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"PUT /v2/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v2/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/trash\",\n \"POST /v2/files/{fileId}/untrash\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"POST /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"DELETE /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"POST /v3/files\",\n \"GET /v3/files/generateIds\",\n \"GET /v3/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n \"DELETE /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"POST /v3/files/{fileId}/accessproposals/{proposalId}:resolve\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/comments\",\n \"POST /v3/files/{fileId}/comments\",\n \"GET /v3/files/{fileId}/comments/{commentId}\",\n \"PATCH /v3/files/{fileId}/comments/{commentId}\",\n \"DELETE /v3/files/{fileId}/comments/{commentId}\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies\",\n \"POST /v3/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PATCH /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"DELETE /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v3/files/{fileId}/copy\",\n \"POST /v3/files/{fileId}/download\",\n \"GET /v3/files/{fileId}/export\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"POST /v3/files/{fileId}/modifyLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"POST /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"PATCH /v3/files/{fileId}/permissions/{permissionId}\",\n \"DELETE /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v3/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n \"GET /v3/operations/{name}\",\n ],\n },\n {\n name: \"drive.meet.readonly\",\n description:\n \"See and download your Google Drive files that were created or edited by Google Meet.\",\n rules: [\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/comments\",\n \"GET /v2/files/{fileId}/comments/{commentId}\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"GET /v2/files/{fileId}/export\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/comments\",\n \"GET /v3/files/{fileId}/comments/{commentId}\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"GET /v3/files/{fileId}/export\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n \"GET /v3/operations/{name}\",\n ],\n },\n {\n name: \"drive.metadata\",\n description: \"View and manage metadata of files in your Google Drive\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"POST /v2/files/{fileId}/modifyLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"POST /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"PUT /v2/files/{fileId}/properties/{propertyKey}\",\n \"PATCH /v2/files/{fileId}/properties/{propertyKey}\",\n \"DELETE /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"POST /v3/files/{fileId}/modifyLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n ],\n },\n {\n name: \"drive.metadata.readonly\",\n description: \"See information about your Google Drive files\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n ],\n },\n {\n name: \"drive.photos.readonly\",\n description:\n \"View the photos, videos and albums in your Google Photos\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"POST /v3/files/{fileId}/copy\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n ],\n },\n {\n name: \"drive.readonly\",\n description: \"See and download all your Google Drive files\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/drives\",\n \"GET /v2/drives/{driveId}\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/comments\",\n \"GET /v2/files/{fileId}/comments/{commentId}\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"GET /v2/files/{fileId}/export\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v2/teamdrives\",\n \"GET /v2/teamdrives/{teamDriveId}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/drives\",\n \"GET /v3/drives/{driveId}\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/comments\",\n \"GET /v3/files/{fileId}/comments/{commentId}\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v3/files/{fileId}/download\",\n \"GET /v3/files/{fileId}/export\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n \"GET /v3/operations/{name}\",\n \"GET /v3/teamdrives\",\n \"GET /v3/teamdrives/{teamDriveId}\",\n ],\n },\n {\n name: \"drive.scripts\",\n description: \"Modify your Google Apps Script scripts' behavior\",\n rules: [\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n ],\n },\n {\n base: \"https://www.googleapis.com/upload/drive\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_DRIVE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.appdata\",\n description:\n \"See, create, and delete its own configuration data in your Google Drive\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.apps.readonly\",\n description: \"View your Google Drive apps\",\n rules: [\"POST /v2/files\", \"PUT /v2/files/{fileId}\"],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.metadata\",\n description: \"View and manage metadata of files in your Google Drive\",\n rules: [\"PUT /v2/files/{fileId}\", \"PATCH /v3/files/{fileId}\"],\n },\n {\n name: \"drive.scripts\",\n description: \"Modify your Google Apps Script scripts' behavior\",\n rules: [\"PUT /v2/files/{fileId}\", \"PATCH /v3/files/{fileId}\"],\n },\n ],\n },\n {\n base: \"https://www.googleapis.com/resumable/upload/drive\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_DRIVE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.appdata\",\n description:\n \"See, create, and delete its own configuration data in your Google Drive\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.apps.readonly\",\n description: \"View your Google Drive apps\",\n rules: [\"POST /v2/files\", \"PUT /v2/files/{fileId}\"],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.metadata\",\n description: \"View and manage metadata of files in your Google Drive\",\n rules: [\"PUT /v2/files/{fileId}\", \"PATCH /v3/files/{fileId}\"],\n },\n {\n name: \"drive.scripts\",\n description: \"Modify your Google Apps Script scripts' behavior\",\n rules: [\"PUT /v2/files/{fileId}\", \"PATCH /v3/files/{fileId}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://sheets.googleapis.com/$discovery/rest?version=v4\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:google-sheets\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const googleSheetsFirewall: FirewallConfig = {\n name: \"google-sheets\",\n description: \"Google Sheets API\",\n placeholders: {\n GOOGLE_SHEETS_TOKEN:\n \"ya29.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://sheets.googleapis.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_SHEETS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"POST /v4/spreadsheets\",\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/developerMetadata:search\",\n \"POST /v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"PUT /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:append\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:clear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}:getByDataFilter\",\n ],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"POST /v4/spreadsheets\",\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/developerMetadata:search\",\n \"POST /v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"PUT /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:append\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:clear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}:getByDataFilter\",\n ],\n },\n {\n name: \"drive.readonly\",\n description: \"See and download all your Google Drive files\",\n rules: [\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n ],\n },\n {\n name: \"spreadsheets\",\n description:\n \"See, edit, create, and delete all your Google Sheets spreadsheets\",\n rules: [\n \"POST /v4/spreadsheets\",\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/developerMetadata:search\",\n \"POST /v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"PUT /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:append\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:clear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}:getByDataFilter\",\n ],\n },\n {\n name: \"spreadsheets.readonly\",\n description: \"See all your Google Sheets spreadsheets\",\n rules: [\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from HubSpot API docs.\n// Source: https://developers.hubspot.com/docs/api-reference/auth-oauth-v1/guide\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:hubspot\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const hubspotFirewall: FirewallConfig = {\n name: \"hubspot\",\n description: \"HubSpot API\",\n placeholders: {\n HUBSPOT_TOKEN: \"Vm0PlaceHolder00000000000000000a\",\n },\n apis: [\n {\n base: \"https://api.hubapi.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.HUBSPOT_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Jira Cloud's official OpenAPI spec.\n// Source: https://developer.atlassian.com/cloud/jira/platform/swagger-v3.v3.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:jira\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const jiraFirewall: FirewallConfig = {\n name: \"jira\",\n description: \"Jira Cloud API\",\n placeholders: {\n JIRA_TOKEN:\n \"ATATT3xVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.atlassian.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.JIRA_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"manage:jira-configuration\",\n description:\n \"Configure Jira settings that require the Jira administrators permission, for example, create projects and custom fields, view workflows, manage issue link types.\",\n rules: [\n \"GET /ex/jira/{cloudId}/rest/api/3/announcementBanner\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/announcementBanner\",\n \"POST /ex/jira/{cloudId}/rest/api/3/app/field/context/configuration/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration\",\n \"GET /ex/jira/{cloudId}/rest/api/3/application-properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/application-properties/advanced-settings\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/application-properties/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/applicationrole\",\n \"GET /ex/jira/{cloudId}/rest/api/3/applicationrole/{key}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/auditing/record\",\n \"GET /ex/jira/{cloudId}/rest/api/3/avatar/{type}/system\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes\",\n \"POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/clone\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields/{fieldId}/parameters\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/projects\",\n \"GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking\",\n \"GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options\",\n \"GET /ex/jira/{cloudId}/rest/api/3/events\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/association\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/association\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/issuetypemapping\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/mapping\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/projectmapping\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype/remove\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/move\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}/issue\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project/remove\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}/issue\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{id}/restore\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{id}/trash\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration\",\n \"POST /ex/jira/{cloudId}/rest/api/3/fieldconfiguration\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/mapping\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping\",\n \"POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping/delete\",\n \"POST /ex/jira/{cloudId}/rest/api/3/group\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/group\",\n \"GET /ex/jira/{cloudId}/rest/api/3/group/member\",\n \"POST /ex/jira/{cloudId}/rest/api/3/group/user\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/group/user\",\n \"GET /ex/jira/{cloudId}/rest/api/3/instance/license\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issueLinkType\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/default\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/member\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/search\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{issueSecuritySchemeId}/members\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member/{memberId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetype\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/avatar2\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetypescheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/mapping\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/move\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/{issueTypeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/mapping\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/default\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/remove\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/sanitize\",\n \"GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount\",\n \"GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount/product/{applicationKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/mypreferences\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/mypreferences\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/mypreferences\",\n \"GET /ex/jira/{cloudId}/rest/api/3/mypreferences/locale\",\n \"GET /ex/jira/{cloudId}/rest/api/3/notificationscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/notificationscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}/notification\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}/notification/{notificationId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissions\",\n \"POST /ex/jira/{cloudId}/rest/api/3/permissionscheme\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/priority\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/priority/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/priority/move\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priority/search\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/priority/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/priority/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priorityscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/priorityscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/priorityscheme/mappings\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/priorities/available\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/priorities\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/projects\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project-template\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project-template/edit-template\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project-template/live-template\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project-template/remove-template\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project-template/save-template\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/delete\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/restore\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/resolution\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/resolution/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/resolution/move\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/resolution/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/resolution/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/role\",\n \"POST /ex/jira/{cloudId}/rest/api/3/role\",\n \"GET /ex/jira/{cloudId}/rest/api/3/role/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/role/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/role/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/role/{id}/actors\",\n \"POST /ex/jira/{cloudId}/rest/api/3/role/{id}/actors\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}/actors\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screenscheme\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/securitylevel/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/settings/columns\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/settings/columns\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses\",\n \"POST /ex/jira/{cloudId}/rest/api/3/statuses\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/statuses\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/statuses\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/byNames\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/project/{projectId}/issueTypeUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/projectUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/workflowUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{owningObjectId}/avatar/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/user\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/user\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/user/columns\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/user/columns\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflow\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflow/history\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflow/history/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/rule/config\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflow/rule/config\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflow/{entityId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/project/{projectId}/issueTypeUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/projectUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/workflowSchemes\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflows/capabilities\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/create\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/create/validation\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflows/defaultEditor\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/preview\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflows/search\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/update\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/update/validation\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/project/switch\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/read\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update/mappings\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/createdraft\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/publish\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{workflowSchemeId}/projectUsages\",\n ],\n },\n {\n name: \"manage:jira-project\",\n description:\n \"Create and edit project settings and create new project-level objects, for example, versions, components.\",\n rules: [\n \"POST /ex/jira/{cloudId}/rest/api/3/component\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/component/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/component/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/contexts\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/screens\",\n \"POST /ex/jira/{cloudId}/rest/api/3/forge/panel/action/bulk/async\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/archive\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar2\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features/{featureKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/projectCategory\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/addToDefault/{fieldId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens/tabs\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/availableFields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}/move\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/move/{pos}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screenscheme\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/version\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/version/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/version/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/mergeto/{moveIssuesTo}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/version/{id}/move\",\n \"POST /ex/jira/{cloudId}/rest/api/3/version/{id}/removeAndSwap\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/search\",\n ],\n },\n {\n name: \"manage:jira-webhook\",\n description:\n \"Manage Jira webhooks. Enables an OAuth app to register and unregister dynamic webhooks in Jira. It also provides for fetching of registered webhooks.\",\n rules: [\n \"GET /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"POST /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"GET /ex/jira/{cloudId}/rest/api/3/webhook/failed\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh\",\n ],\n },\n {\n name: \"read:jira-user\",\n description:\n \"View user information in Jira that you have access to, including usernames, email addresses, and avatars.\",\n rules: [\n \"GET /ex/jira/{cloudId}/rest/api/3/configuration\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/analyse\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/eval\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate\",\n \"GET /ex/jira/{cloudId}/rest/api/3/group\",\n \"GET /ex/jira/{cloudId}/rest/api/3/group/bulk\",\n \"GET /ex/jira/{cloudId}/rest/api/3/groups/picker\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/pdcleaner\",\n \"GET /ex/jira/{cloudId}/rest/api/3/myself\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/assignable/multiProjectSearch\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/assignable/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/bulk\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/bulk/migration\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/columns\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/groups\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/permission/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/picker\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/search/query\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/search/query/key\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/viewissue/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/users\",\n \"GET /ex/jira/{cloudId}/rest/api/3/users/search\",\n ],\n },\n {\n name: \"read:jira-work\",\n description:\n \"Read project and issue data. Search for issues and objects associated with issues (such as attachments and worklogs).\",\n rules: [\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/content/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/meta\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/thumbnail/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/human\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/raw\",\n \"GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition\",\n \"GET /ex/jira/{cloudId}/rest/api/3/bulk/queue/{taskId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/changelog/bulkfetch\",\n \"GET /ex/jira/{cloudId}/rest/api/3/classification-levels\",\n \"POST /ex/jira/{cloudId}/rest/api/3/comment/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/component\",\n \"GET /ex/jira/{cloudId}/rest/api/3/component/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/component/{id}/relatedIssueCounts\",\n \"GET /ex/jira/{cloudId}/rest/api/3/customFieldOption/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/gadgets\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget\",\n \"POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/data-policy\",\n \"GET /ex/jira/{cloudId}/rest/api/3/data-policy/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/analyse\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/eval\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/search/trashed\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/edit\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/favourite\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/my\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/groupuserpicker\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/bulkfetch\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/limit/report\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/picker\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/watching\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/editmeta\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issueLinkType\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issues/archive/export\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/alternatives\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata\",\n \"GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata/suggestions\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/match\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/parse\",\n \"GET /ex/jira/{cloudId}/rest/api/3/label\",\n \"GET /ex/jira/{cloudId}/rest/api/3/mypermissions\",\n \"POST /ex/jira/{cloudId}/rest/api/3/permissions/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissionscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priority\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priority/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/recent\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/type\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/type/accessible\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}/accessible\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatars\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-config\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/component\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/components\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/roledetails\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/statuses\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/version\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/versions\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/hierarchy\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/issuesecuritylevelscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/notificationscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/securitylevel\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectCategory\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projects/fields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/key\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectKey\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectName\",\n \"GET /ex/jira/{cloudId}/rest/api/3/resolution\",\n \"GET /ex/jira/{cloudId}/rest/api/3/resolution/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/resolution/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/search\",\n \"POST /ex/jira/{cloudId}/rest/api/3/search\",\n \"POST /ex/jira/{cloudId}/rest/api/3/search/approximate-count\",\n \"GET /ex/jira/{cloudId}/rest/api/3/search/jql\",\n \"POST /ex/jira/{cloudId}/rest/api/3/search/jql\",\n \"GET /ex/jira/{cloudId}/rest/api/3/status\",\n \"GET /ex/jira/{cloudId}/rest/api/3/status/{idOrName}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuscategory\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuscategory/{idOrKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/task/{taskId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/uiModifications\",\n \"POST /ex/jira/{cloudId}/rest/api/3/uiModifications\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/uiModifications/{uiModificationId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/avatar/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/owner/{entityId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/version/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedIssueCounts\",\n \"GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork\",\n \"GET /ex/jira/{cloudId}/rest/api/3/version/{id}/unresolvedIssueCount\",\n \"GET /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"POST /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"GET /ex/jira/{cloudId}/rest/api/3/webhook/failed\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh\",\n \"GET /ex/jira/{cloudId}/rest/api/3/worklog/deleted\",\n \"POST /ex/jira/{cloudId}/rest/api/3/worklog/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/worklog/updated\",\n ],\n },\n {\n name: \"write:jira-work\",\n description:\n \"Create and edit issues in Jira, post comments, create worklogs, and delete issues.\",\n rules: [\n \"DELETE /ex/jira/{cloudId}/rest/api/3/attachment/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/delete\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/move\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/unwatch\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/watch\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/dashboard\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/dashboard/bulk/edit\",\n \"POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/dashboard/{id}/copy\",\n \"POST /ex/jira/{cloudId}/rest/api/3/filter\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/owner\",\n \"POST /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/archive\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/archive\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/bulk\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/properties\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/properties/multi\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/unarchive\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/assignee\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/attachments\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/notify\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/move\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issueLink\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/plans/plan\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/archive\",\n \"POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/duplicate\",\n \"POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/trash\",\n \"POST /ex/jira/{cloudId}/rest/api/3/task/{taskId}/cancel\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/version/{versionId}/relatedwork/{relatedWorkId}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Linear API docs.\n// Source: https://developers.linear.app/docs/graphql/working-with-the-graphql-api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:linear\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const linearFirewall: FirewallConfig = {\n name: \"linear\",\n description: \"Linear API\",\n placeholders: {\n LINEAR_TOKEN: \"lin_api_Vm0PlaceHolder00000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.linear.app\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.LINEAR_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Monday.com API docs.\n// Source: https://developer.monday.com/api-reference/docs/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:monday\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const mondayFirewall: FirewallConfig = {\n name: \"monday\",\n description: \"Monday.com API\",\n placeholders: {\n MONDAY_TOKEN:\n \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IlZtMFBsYWNlSG9sZGVyIiwiaWF0IjoxNTE2MjM5MDIyfQ.Vm0PlaceHolder00000000000000000000000000000a\",\n },\n apis: [\n {\n base: \"https://api.monday.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.MONDAY_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Neon API docs.\n// Source: https://api-docs.neon.tech/reference/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:neon\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const neonFirewall: FirewallConfig = {\n name: \"neon\",\n description: \"Neon API\",\n placeholders: {\n NEON_ACCESS_TOKEN: \"Vm0PlaceHolder00000000000000000a\",\n },\n apis: [\n {\n base: \"https://console.neon.tech/api/v2\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.NEON_ACCESS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Notion's official OpenAPI spec.\n// Source: https://developers.notion.com/openapi.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:notion\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const notionFirewall: FirewallConfig = {\n name: \"notion\",\n description: \"Notion API\",\n placeholders: {\n NOTION_TOKEN: \"ntn_00000000000Vm0PlaceHolder000000000000000000Aaa\",\n },\n apis: [\n {\n base: \"https://api.notion.com/v1\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.NOTION_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"insert_comments\",\n description: \"Create comments\",\n rules: [\"POST /comments\"],\n },\n {\n name: \"insert_content\",\n description:\n \"Create pages, databases, blocks, data sources, and upload files\",\n rules: [\n \"PATCH /blocks/{block_id}/children\",\n \"POST /data_sources\",\n \"POST /databases\",\n \"POST /file_uploads\",\n \"POST /file_uploads/{file_upload_id}/complete\",\n \"POST /file_uploads/{file_upload_id}/send\",\n \"POST /pages\",\n \"POST /views\",\n \"POST /views/{view_id}/queries\",\n ],\n },\n {\n name: \"read_comments\",\n description: \"Read comments\",\n rules: [\"GET /comments\", \"GET /comments/{comment_id}\"],\n },\n {\n name: \"read_content\",\n description: \"Read pages, databases, blocks, data sources, and files\",\n rules: [\n \"GET /blocks/{block_id}\",\n \"GET /blocks/{block_id}/children\",\n \"GET /data_sources/{data_source_id}\",\n \"POST /data_sources/{data_source_id}/query\",\n \"GET /data_sources/{data_source_id}/templates\",\n \"GET /databases/{database_id}\",\n \"GET /file_uploads\",\n \"GET /file_uploads/{file_upload_id}\",\n \"GET /pages/{page_id}\",\n \"GET /pages/{page_id}/markdown\",\n \"GET /pages/{page_id}/properties/{property_id}\",\n \"POST /search\",\n \"GET /views\",\n \"GET /views/{view_id}\",\n \"GET /views/{view_id}/queries/{query_id}\",\n ],\n },\n {\n name: \"read_users\",\n description: \"Read user information\",\n rules: [\"GET /users\", \"GET /users/me\", \"GET /users/{user_id}\"],\n },\n {\n name: \"update_content\",\n description:\n \"Update and delete pages, databases, blocks, and data sources\",\n rules: [\n \"PATCH /blocks/{block_id}\",\n \"DELETE /blocks/{block_id}\",\n \"PATCH /data_sources/{data_source_id}\",\n \"PATCH /databases/{database_id}\",\n \"PATCH /pages/{page_id}\",\n \"PATCH /pages/{page_id}/markdown\",\n \"POST /pages/{page_id}/move\",\n \"PATCH /views/{view_id}\",\n \"DELETE /views/{view_id}\",\n \"DELETE /views/{view_id}/queries/{query_id}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from OpenAI API docs.\n// Source: https://platform.openai.com/docs/api-reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:openai\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const openaiFirewall: FirewallConfig = {\n name: \"openai\",\n description: \"OpenAI API\",\n placeholders: {\n OPENAI_TOKEN:\n \"sk-proj-Vm0PlaceHolder000000000000000000000000000000000000000000000000000000000000T3BlbkFJVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.openai.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.OPENAI_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Perplexity API docs.\n// Source: https://docs.perplexity.ai/docs/admin/api-key-management\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:perplexity\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const perplexityFirewall: FirewallConfig = {\n name: \"perplexity\",\n description: \"Perplexity API\",\n placeholders: {\n PERPLEXITY_TOKEN: \"pplx-Vm0PlaceHolder0000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.perplexity.ai\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.PERPLEXITY_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from PostHog API docs.\n// Source: https://posthog.com/docs/api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:posthog\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const posthogFirewall: FirewallConfig = {\n name: \"posthog\",\n description: \"PostHog API\",\n placeholders: {\n POSTHOG_TOKEN: \"phx_Vm0PlaceHolder00000000000000000000000000000000a\",\n },\n apis: [\n {\n base: \"https://us.posthog.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.POSTHOG_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n {\n base: \"https://eu.posthog.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.POSTHOG_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Resend API docs.\n// Source: https://resend.com/docs/api-reference/api-keys/create-api-key\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:resend\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const resendFirewall: FirewallConfig = {\n name: \"resend\",\n description: \"Resend API\",\n placeholders: {\n RESEND_TOKEN: \"re_Vm0PlaceHolder000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.resend.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.RESEND_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Sentry API docs.\n// Source: https://docs.sentry.io/api/auth/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:sentry\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const sentryFirewall: FirewallConfig = {\n name: \"sentry\",\n description: \"Sentry API\",\n placeholders: {\n SENTRY_TOKEN: \"Vm0PlaceHolder00000000000000000a\",\n },\n apis: [\n {\n base: \"https://sentry.io/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SENTRY_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from SerpApi docs.\n// Source: https://serpapi.com/search-api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:serpapi\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const serpapiFirewall: FirewallConfig = {\n name: \"serpapi\",\n description: \"SerpApi\",\n placeholders: {\n SERPAPI_TOKEN: \"Vm0PlaceHolder00000000000000000000000000000000000a\",\n },\n apis: [\n {\n base: \"https://serpapi.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SERPAPI_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Slack API method-to-scope mappings.\n// Source: slack-ruby/slack-api-ref (auto-synced daily from docs.slack.dev)\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:slack\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const slackFirewall: FirewallConfig = {\n name: \"slack\",\n description: \"Slack API\",\n placeholders: {\n SLACK_TOKEN: \"xoxb-000000000000-0000000000000-Vm0PlaceHolder0000000000\",\n },\n apis: [\n {\n base: \"https://slack.com/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SLACK_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"admin\",\n rules: [\n \"POST /admin.audit.anomaly.allow.getItem\",\n \"POST /admin.audit.anomaly.allow.updateItem\",\n \"GET /team.accessLogs\",\n \"GET /team.billableInfo\",\n \"GET /team.integrationLogs\",\n ],\n },\n {\n name: \"admin.analytics:read\",\n rules: [\n \"GET /admin.analytics.getFile\",\n \"GET /admin.analytics.messages.activity\",\n \"GET /admin.analytics.messages.metadata\",\n ],\n },\n {\n name: \"admin.app_activities:read\",\n rules: [\"POST /admin.apps.activities.list\"],\n },\n {\n name: \"admin.apps:read\",\n rules: [\n \"GET /admin.apps.approved.list\",\n \"POST /admin.apps.config.lookup\",\n \"GET /admin.apps.requests.list\",\n \"GET /admin.apps.restricted.list\",\n ],\n },\n {\n name: \"admin.apps:write\",\n rules: [\n \"POST /admin.apps.approve\",\n \"POST /admin.apps.clearResolution\",\n \"POST /admin.apps.config.set\",\n \"POST /admin.apps.requests.cancel\",\n \"POST /admin.apps.restrict\",\n \"POST /admin.apps.uninstall\",\n ],\n },\n {\n name: \"admin.barriers:read\",\n rules: [\"GET /admin.barriers.list\"],\n },\n {\n name: \"admin.barriers:write\",\n rules: [\n \"POST /admin.barriers.create\",\n \"POST /admin.barriers.delete\",\n \"POST /admin.barriers.update\",\n ],\n },\n {\n name: \"admin.conversations:manage_objects\",\n rules: [\n \"POST /admin.conversations.createForObjects\",\n \"POST /admin.conversations.linkObjects\",\n \"POST /admin.conversations.unlinkObjects\",\n ],\n },\n {\n name: \"admin.conversations:read\",\n rules: [\n \"POST /admin.conversations.ekm.listOriginalConnectedChannelInfo\",\n \"POST /admin.conversations.getConversationPrefs\",\n \"POST /admin.conversations.getCustomRetention\",\n \"POST /admin.conversations.getTeams\",\n \"POST /admin.conversations.lookup\",\n \"GET /admin.conversations.restrictAccess.listGroups\",\n \"POST /admin.conversations.search\",\n ],\n },\n {\n name: \"admin.conversations:write\",\n rules: [\n \"POST /admin.conversations.archive\",\n \"POST /admin.conversations.bulkArchive\",\n \"POST /admin.conversations.bulkDelete\",\n \"POST /admin.conversations.bulkMove\",\n \"GET /admin.conversations.bulkSetExcludeFromSlackAi\",\n \"POST /admin.conversations.convertToPrivate\",\n \"POST /admin.conversations.convertToPublic\",\n \"POST /admin.conversations.create\",\n \"POST /admin.conversations.delete\",\n \"POST /admin.conversations.disconnectShared\",\n \"POST /admin.conversations.invite\",\n \"POST /admin.conversations.removeCustomRetention\",\n \"POST /admin.conversations.rename\",\n \"GET /admin.conversations.restrictAccess.addGroup\",\n \"GET /admin.conversations.restrictAccess.removeGroup\",\n \"POST /admin.conversations.setConversationPrefs\",\n \"POST /admin.conversations.setCustomRetention\",\n \"POST /admin.conversations.setTeams\",\n \"POST /admin.conversations.unarchive\",\n ],\n },\n {\n name: \"admin.invites:read\",\n rules: [\n \"POST /admin.inviteRequests.approved.list\",\n \"POST /admin.inviteRequests.denied.list\",\n \"POST /admin.inviteRequests.list\",\n ],\n },\n {\n name: \"admin.invites:write\",\n rules: [\n \"POST /admin.inviteRequests.approve\",\n \"POST /admin.inviteRequests.deny\",\n ],\n },\n {\n name: \"admin.roles:read\",\n rules: [\"GET /admin.roles.listAssignments\"],\n },\n {\n name: \"admin.roles:write\",\n rules: [\n \"POST /admin.roles.addAssignments\",\n \"POST /admin.roles.removeAssignments\",\n ],\n },\n {\n name: \"admin.teams:read\",\n rules: [\n \"GET /admin.emoji.list\",\n \"GET /admin.teams.admins.list\",\n \"POST /admin.teams.list\",\n \"GET /admin.teams.owners.list\",\n \"POST /admin.teams.settings.info\",\n ],\n },\n {\n name: \"admin.teams:write\",\n rules: [\n \"GET /admin.emoji.add\",\n \"GET /admin.emoji.addAlias\",\n \"GET /admin.emoji.remove\",\n \"GET /admin.emoji.rename\",\n \"POST /admin.teams.create\",\n \"GET /admin.teams.settings.setDefaultChannels\",\n \"POST /admin.teams.settings.setDescription\",\n \"POST /admin.teams.settings.setDiscoverability\",\n \"GET /admin.teams.settings.setIcon\",\n \"POST /admin.teams.settings.setName\",\n \"POST /admin.usergroups.addTeams\",\n ],\n },\n {\n name: \"admin.usergroups:read\",\n rules: [\"POST /admin.usergroups.listChannels\"],\n },\n {\n name: \"admin.usergroups:write\",\n rules: [\n \"POST /admin.usergroups.addChannels\",\n \"POST /admin.usergroups.removeChannels\",\n ],\n },\n {\n name: \"admin.users:read\",\n rules: [\n \"POST /admin.auth.policy.getEntities\",\n \"GET /admin.users.getExpiration\",\n \"POST /admin.users.list\",\n \"POST /admin.users.session.getSettings\",\n \"POST /admin.users.session.list\",\n \"POST /admin.users.unsupportedVersions.export\",\n ],\n },\n {\n name: \"admin.users:write\",\n rules: [\n \"POST /admin.auth.policy.assignEntities\",\n \"POST /admin.auth.policy.removeEntities\",\n \"POST /admin.users.assign\",\n \"POST /admin.users.invite\",\n \"POST /admin.users.remove\",\n \"POST /admin.users.session.clearSettings\",\n \"POST /admin.users.session.invalidate\",\n \"POST /admin.users.session.reset\",\n \"POST /admin.users.session.resetBulk\",\n \"POST /admin.users.session.setSettings\",\n \"POST /admin.users.setAdmin\",\n \"POST /admin.users.setExpiration\",\n \"POST /admin.users.setOwner\",\n \"POST /admin.users.setRegular\",\n ],\n },\n {\n name: \"admin.workflows:read\",\n rules: [\n \"POST /admin.functions.list\",\n \"POST /admin.functions.permissions.lookup\",\n \"POST /admin.functions.permissions.set\",\n \"POST /admin.workflows.permissions.lookup\",\n \"POST /admin.workflows.search\",\n ],\n },\n {\n name: \"admin.workflows:write\",\n rules: [\n \"POST /admin.workflows.collaborators.add\",\n \"POST /admin.workflows.collaborators.remove\",\n \"POST /admin.workflows.unpublish\",\n ],\n },\n {\n name: \"assistant:write\",\n rules: [\n \"POST /assistant.threads.setSuggestedPrompts\",\n \"POST /assistant.threads.setTitle\",\n ],\n },\n {\n name: \"bookmarks:read\",\n rules: [\"POST /bookmarks.list\", \"POST /workflows.featured.list\"],\n },\n {\n name: \"bookmarks:write\",\n rules: [\n \"POST /bookmarks.add\",\n \"POST /bookmarks.edit\",\n \"POST /bookmarks.remove\",\n \"POST /workflows.featured.add\",\n \"POST /workflows.featured.remove\",\n \"POST /workflows.featured.set\",\n ],\n },\n {\n name: \"calls:read\",\n rules: [\"POST /calls.info\"],\n },\n {\n name: \"calls:write\",\n rules: [\n \"POST /calls.add\",\n \"POST /calls.end\",\n \"POST /calls.participants.add\",\n \"POST /calls.participants.remove\",\n \"POST /calls.update\",\n ],\n },\n {\n name: \"canvases:read\",\n rules: [\"POST /canvases.sections.lookup\"],\n },\n {\n name: \"canvases:write\",\n rules: [\n \"POST /canvases.access.delete\",\n \"POST /canvases.access.set\",\n \"POST /canvases.create\",\n \"POST /canvases.delete\",\n \"POST /canvases.edit\",\n \"POST /conversations.canvases.create\",\n ],\n },\n {\n name: \"channels:history\",\n rules: [\"GET /conversations.history\", \"GET /conversations.replies\"],\n },\n {\n name: \"channels:join\",\n rules: [\"POST /conversations.join\"],\n },\n {\n name: \"channels:manage\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"channels:read\",\n rules: [\n \"GET /conversations.info\",\n \"GET /conversations.list\",\n \"GET /conversations.members\",\n \"GET /users.conversations\",\n ],\n },\n {\n name: \"channels:write\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.join\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"channels:write.invites\",\n rules: [\"POST /conversations.invite\"],\n },\n {\n name: \"channels:write.topic\",\n rules: [\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n ],\n },\n {\n name: \"chat:write\",\n rules: [\n \"POST /assistant.threads.setStatus\",\n \"POST /chat.appendStream\",\n \"POST /chat.delete\",\n \"POST /chat.deleteScheduledMessage\",\n \"POST /chat.meMessage\",\n \"POST /chat.postEphemeral\",\n \"POST /chat.postMessage\",\n \"POST /chat.scheduleMessage\",\n \"POST /chat.startStream\",\n \"POST /chat.stopStream\",\n \"POST /chat.update\",\n ],\n },\n {\n name: \"client\",\n rules: [\n \"POST /admin.workflows.triggers.types.permissions.lookup\",\n \"POST /admin.workflows.triggers.types.permissions.set\",\n ],\n },\n {\n name: \"conversations.connect:manage\",\n rules: [\n \"POST /conversations.approveSharedInvite\",\n \"GET /conversations.declineSharedInvite\",\n \"POST /conversations.externalInvitePermissions.set\",\n \"POST /conversations.listConnectInvites\",\n \"POST /conversations.requestSharedInvite.approve\",\n \"POST /conversations.requestSharedInvite.deny\",\n \"POST /conversations.requestSharedInvite.list\",\n \"POST /team.externalTeams.disconnect\",\n \"GET /team.externalTeams.list\",\n \"POST /users.discoverableContacts.lookup\",\n ],\n },\n {\n name: \"conversations.connect:write\",\n rules: [\n \"POST /conversations.acceptSharedInvite\",\n \"GET /conversations.inviteShared\",\n ],\n },\n {\n name: \"datastore:read\",\n rules: [\n \"POST /apps.datastore.bulkGet\",\n \"POST /apps.datastore.count\",\n \"POST /apps.datastore.get\",\n \"POST /apps.datastore.query\",\n ],\n },\n {\n name: \"datastore:write\",\n rules: [\n \"POST /apps.datastore.bulkDelete\",\n \"POST /apps.datastore.bulkPut\",\n \"POST /apps.datastore.delete\",\n \"POST /apps.datastore.put\",\n \"POST /apps.datastore.update\",\n ],\n },\n {\n name: \"dnd:read\",\n rules: [\"GET /dnd.info\", \"GET /dnd.teamInfo\"],\n },\n {\n name: \"dnd:write\",\n rules: [\n \"POST /dnd.endDnd\",\n \"POST /dnd.endSnooze\",\n \"GET /dnd.setSnooze\",\n ],\n },\n {\n name: \"emoji:read\",\n rules: [\"GET /emoji.list\"],\n },\n {\n name: \"files:read\",\n rules: [\"GET /files.info\", \"GET /files.list\"],\n },\n {\n name: \"files:write\",\n rules: [\n \"POST /files.comments.delete\",\n \"POST /files.completeUploadExternal\",\n \"POST /files.delete\",\n \"POST /files.getUploadURLExternal\",\n \"POST /files.revokePublicURL\",\n \"POST /files.sharedPublicURL\",\n \"POST /files.upload\",\n ],\n },\n {\n name: \"groups:history\",\n rules: [\"GET /conversations.history\", \"GET /conversations.replies\"],\n },\n {\n name: \"groups:read\",\n rules: [\n \"GET /conversations.info\",\n \"GET /conversations.list\",\n \"GET /conversations.members\",\n \"GET /users.conversations\",\n ],\n },\n {\n name: \"groups:write\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"groups:write.invites\",\n rules: [\"POST /conversations.invite\"],\n },\n {\n name: \"groups:write.topic\",\n rules: [\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n ],\n },\n {\n name: \"hosting:read\",\n rules: [\"POST /apps.activities.list\"],\n },\n {\n name: \"identity:read\",\n rules: [\"GET /users.identity\"],\n },\n {\n name: \"im:history\",\n rules: [\"GET /conversations.history\", \"GET /conversations.replies\"],\n },\n {\n name: \"im:read\",\n rules: [\n \"GET /conversations.info\",\n \"GET /conversations.list\",\n \"GET /conversations.members\",\n \"GET /users.conversations\",\n ],\n },\n {\n name: \"im:write\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"im:write.topic\",\n rules: [\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n ],\n },\n {\n name: \"links:write\",\n rules: [\"POST /chat.unfurl\"],\n },\n {\n name: \"lists:read\",\n rules: [\n \"POST /slackLists.download.get\",\n \"POST /slackLists.download.start\",\n \"POST /slackLists.items.info\",\n \"POST /slackLists.items.list\",\n ],\n },\n {\n name: \"lists:write\",\n rules: [\n \"POST /slackLists.access.delete\",\n \"POST /slackLists.access.set\",\n \"POST /slackLists.create\",\n \"POST /slackLists.items.create\",\n \"POST /slackLists.items.delete\",\n \"POST /slackLists.items.deleteMultiple\",\n \"POST /slackLists.items.update\",\n \"POST /slackLists.update\",\n ],\n },\n {\n name: \"mpim:history\",\n rules: [\"GET /conversations.history\", \"GET /conversations.replies\"],\n },\n {\n name: \"mpim:read\",\n rules: [\n \"GET /conversations.info\",\n \"GET /conversations.list\",\n \"GET /conversations.members\",\n \"GET /users.conversations\",\n ],\n },\n {\n name: \"mpim:write\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"mpim:write.topic\",\n rules: [\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n ],\n },\n {\n name: \"openid\",\n rules: [\"POST /openid.connect.userInfo\"],\n },\n {\n name: \"pins:read\",\n rules: [\"GET /pins.list\"],\n },\n {\n name: \"pins:write\",\n rules: [\"POST /pins.add\", \"POST /pins.remove\"],\n },\n {\n name: \"reactions:read\",\n rules: [\"GET /reactions.get\", \"GET /reactions.list\"],\n },\n {\n name: \"reactions:write\",\n rules: [\"POST /reactions.add\", \"POST /reactions.remove\"],\n },\n {\n name: \"reminders:read\",\n rules: [\"GET /reminders.info\", \"GET /reminders.list\"],\n },\n {\n name: \"reminders:write\",\n rules: [\n \"POST /reminders.add\",\n \"POST /reminders.complete\",\n \"POST /reminders.delete\",\n ],\n },\n {\n name: \"remote_files:read\",\n rules: [\"GET /files.remote.info\", \"GET /files.remote.list\"],\n },\n {\n name: \"remote_files:share\",\n rules: [\"GET /files.remote.share\"],\n },\n {\n name: \"remote_files:write\",\n rules: [\n \"POST /files.remote.add\",\n \"POST /files.remote.remove\",\n \"POST /files.remote.update\",\n ],\n },\n {\n name: \"search:read\",\n rules: [\n \"POST /assistant.search.info\",\n \"GET /search.all\",\n \"GET /search.files\",\n \"GET /search.messages\",\n ],\n },\n {\n name: \"search:read.files\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"search:read.im\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"search:read.mpim\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"search:read.private\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"search:read.public\",\n rules: [\n \"POST /assistant.search.context\",\n \"POST /assistant.search.info\",\n ],\n },\n {\n name: \"search:read.users\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"stars:read\",\n rules: [\"GET /stars.list\"],\n },\n {\n name: \"stars:write\",\n rules: [\"POST /stars.add\", \"POST /stars.remove\"],\n },\n {\n name: \"team.billing:read\",\n rules: [\"POST /team.billing.info\"],\n },\n {\n name: \"team.preferences:read\",\n rules: [\"POST /team.preferences.list\"],\n },\n {\n name: \"team:read\",\n rules: [\n \"GET /team.externalTeams.list\",\n \"GET /team.info\",\n \"POST /users.discoverableContacts.lookup\",\n ],\n },\n {\n name: \"tokens.basic\",\n rules: [\"GET /migration.exchange\"],\n },\n {\n name: \"triggers:read\",\n rules: [\"POST /workflows.triggers.permissions.list\"],\n },\n {\n name: \"triggers:write\",\n rules: [\n \"POST /workflows.triggers.permissions.add\",\n \"POST /workflows.triggers.permissions.remove\",\n \"POST /workflows.triggers.permissions.set\",\n ],\n },\n {\n name: \"usergroups:read\",\n rules: [\"GET /usergroups.list\", \"GET /usergroups.users.list\"],\n },\n {\n name: \"usergroups:write\",\n rules: [\n \"POST /usergroups.create\",\n \"POST /usergroups.disable\",\n \"POST /usergroups.enable\",\n \"POST /usergroups.update\",\n \"POST /usergroups.users.update\",\n ],\n },\n {\n name: \"users.profile:read\",\n rules: [\"GET /team.profile.get\", \"GET /users.profile.get\"],\n },\n {\n name: \"users.profile:write\",\n rules: [\n \"GET /users.deletePhoto\",\n \"POST /users.profile.set\",\n \"POST /users.setPhoto\",\n ],\n },\n {\n name: \"users:read\",\n rules: [\n \"GET /bots.info\",\n \"GET /users.getPresence\",\n \"GET /users.info\",\n \"GET /users.list\",\n ],\n },\n {\n name: \"users:read.email\",\n rules: [\"GET /users.lookupByEmail\"],\n },\n {\n name: \"users:write\",\n rules: [\n \"POST /apps.user.connection.update\",\n \"POST /users.setActive\",\n \"POST /users.setPresence\",\n ],\n },\n {\n name: \"no_scopes_required\",\n description:\n \"Methods that require a valid token but no specific scope\",\n rules: [\n \"POST /api.test\",\n \"POST /apps.auth.external.delete\",\n \"POST /apps.auth.external.get\",\n \"POST /apps.connections.open\",\n \"POST /apps.event.authorizations.list\",\n \"POST /apps.manifest.create\",\n \"POST /apps.manifest.delete\",\n \"POST /apps.manifest.export\",\n \"POST /apps.manifest.update\",\n \"POST /apps.manifest.validate\",\n \"POST /apps.uninstall\",\n \"GET /auth.revoke\",\n \"POST /auth.teams.list\",\n \"POST /auth.test\",\n \"GET /chat.getPermalink\",\n \"POST /chat.scheduledMessages.list\",\n \"POST /dialog.open\",\n \"POST /functions.completeError\",\n \"POST /functions.completeSuccess\",\n \"POST /functions.distributions.permissions.add\",\n \"POST /functions.distributions.permissions.list\",\n \"POST /functions.distributions.permissions.remove\",\n \"POST /functions.distributions.permissions.set\",\n \"POST /functions.workflows.steps.list\",\n \"POST /functions.workflows.steps.responses.export\",\n \"POST /oauth.access\",\n \"POST /oauth.v2.access\",\n \"POST /oauth.v2.exchange\",\n \"POST /oauth.v2.user.access\",\n \"POST /openid.connect.token\",\n \"GET /rtm.connect\",\n \"GET /rtm.start\",\n \"POST /tooling.tokens.rotate\",\n \"POST /views.open\",\n \"POST /views.publish\",\n \"POST /views.push\",\n \"POST /views.update\",\n ],\n },\n ],\n },\n {\n base: \"https://files.slack.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SLACK_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"files:read\",\n description: \"Download files from Slack\",\n rules: [\"GET /{path+}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Stripe API docs.\n// Source: https://docs.stripe.com/api/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:stripe\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const stripeFirewall: FirewallConfig = {\n name: \"stripe\",\n description: \"Stripe API\",\n placeholders: {\n STRIPE_TOKEN: \"sk_live_Vm0PlaceHolder00000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.stripe.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.STRIPE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Supabase Management API docs.\n// Source: https://supabase.com/docs/reference/api/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:supabase\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const supabaseFirewall: FirewallConfig = {\n name: \"supabase\",\n description: \"Supabase Management API\",\n placeholders: {\n SUPABASE_ACCESS_TOKEN: \"sbp_oauth_0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b\",\n },\n apis: [\n {\n base: \"https://api.supabase.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SUPABASE_ACCESS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Tavily API docs.\n// Source: https://docs.tavily.com/documentation/api-reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:tavily\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const tavilyFirewall: FirewallConfig = {\n name: \"tavily\",\n description: \"Tavily API\",\n placeholders: {\n TAVILY_TOKEN: \"tvly-Vm0PlaceHolder0000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.tavily.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.TAVILY_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Todoist API docs.\n// Source: https://developer.todoist.com/guides/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:todoist\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const todoistFirewall: FirewallConfig = {\n name: \"todoist\",\n description: \"Todoist API\",\n placeholders: {\n TODOIST_TOKEN: \"0000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.todoist.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.TODOIST_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Vercel's official OpenAPI spec.\n// Source: https://openapi.vercel.sh/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:vercel\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const vercelFirewall: FirewallConfig = {\n name: \"vercel\",\n description: \"Vercel API\",\n placeholders: {\n VERCEL_TOKEN:\n \"vcp_Vm0PlaceHolder000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.vercel.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.VERCEL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"access-groups:read\",\n rules: [\n \"GET /v1/access-groups\",\n \"GET /v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\",\n \"GET /v1/access-groups/{idOrName}\",\n \"GET /v1/access-groups/{idOrName}/members\",\n \"GET /v1/access-groups/{idOrName}/projects\",\n ],\n },\n {\n name: \"access-groups:write\",\n rules: [\n \"POST /v1/access-groups\",\n \"POST /v1/access-groups/{accessGroupIdOrName}/projects\",\n \"PATCH /v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\",\n \"DELETE /v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\",\n \"POST /v1/access-groups/{idOrName}\",\n \"DELETE /v1/access-groups/{idOrName}\",\n ],\n },\n {\n name: \"aliases:read\",\n rules: [\n \"GET /v2/deployments/{id}/aliases\",\n \"GET /v4/aliases\",\n \"GET /v4/aliases/{idOrAlias}\",\n ],\n },\n {\n name: \"aliases:write\",\n rules: [\n \"PATCH /aliases/{id}/protection-bypass\",\n \"DELETE /v2/aliases/{aliasId}\",\n \"POST /v2/deployments/{id}/aliases\",\n ],\n },\n {\n name: \"artifacts:read\",\n rules: [\n \"GET /v8/artifacts/status\",\n \"GET /v8/artifacts/{hash}\",\n \"HEAD /v8/artifacts/{hash}\",\n ],\n },\n {\n name: \"artifacts:write\",\n rules: [\n \"POST /v8/artifacts\",\n \"POST /v8/artifacts/events\",\n \"PUT /v8/artifacts/{hash}\",\n ],\n },\n {\n name: \"authentication:read\",\n rules: [\"GET /v5/user/tokens\", \"GET /v5/user/tokens/{tokenId}\"],\n },\n {\n name: \"authentication:write\",\n rules: [\"POST /v3/user/tokens\", \"DELETE /v3/user/tokens/{tokenId}\"],\n },\n {\n name: \"billing:read\",\n rules: [\n \"GET /v1/billing/charges\",\n \"GET /v1/billing/contract-commitments\",\n ],\n },\n {\n name: \"billing:write\",\n rules: [\"POST /v1/billing/buy\"],\n },\n {\n name: \"bulk-redirects:read\",\n rules: [\"GET /v1/bulk-redirects\", \"GET /v1/bulk-redirects/versions\"],\n },\n {\n name: \"bulk-redirects:write\",\n rules: [\n \"PUT /v1/bulk-redirects\",\n \"PATCH /v1/bulk-redirects\",\n \"DELETE /v1/bulk-redirects\",\n \"POST /v1/bulk-redirects/restore\",\n \"POST /v1/bulk-redirects/versions\",\n ],\n },\n {\n name: \"certs:read\",\n rules: [\"GET /v8/certs/{id}\"],\n },\n {\n name: \"certs:write\",\n rules: [\"POST /v8/certs\", \"PUT /v8/certs\", \"DELETE /v8/certs/{id}\"],\n },\n {\n name: \"checks-v2:read\",\n rules: [\n \"GET /v2/deployments/{deploymentId}/check-runs\",\n \"GET /v2/deployments/{deploymentId}/check-runs/{checkRunId}\",\n \"GET /v2/projects/{projectIdOrName}/checks\",\n \"GET /v2/projects/{projectIdOrName}/checks/{checkId}\",\n \"GET /v2/projects/{projectIdOrName}/checks/{checkId}/runs\",\n ],\n },\n {\n name: \"checks-v2:write\",\n rules: [\n \"POST /v2/deployments/{deploymentId}/check-runs\",\n \"PATCH /v2/deployments/{deploymentId}/check-runs/{checkRunId}\",\n \"POST /v2/projects/{projectIdOrName}/checks\",\n \"PATCH /v2/projects/{projectIdOrName}/checks/{checkId}\",\n \"DELETE /v2/projects/{projectIdOrName}/checks/{checkId}\",\n ],\n },\n {\n name: \"checks:read\",\n rules: [\n \"GET /v1/deployments/{deploymentId}/checks\",\n \"GET /v1/deployments/{deploymentId}/checks/{checkId}\",\n ],\n },\n {\n name: \"checks:write\",\n rules: [\n \"POST /v1/deployments/{deploymentId}/checks\",\n \"PATCH /v1/deployments/{deploymentId}/checks/{checkId}\",\n \"POST /v1/deployments/{deploymentId}/checks/{checkId}/rerequest\",\n ],\n },\n {\n name: \"connect:read\",\n rules: [\n \"GET /v1/connect/networks\",\n \"GET /v1/connect/networks/{networkId}\",\n ],\n },\n {\n name: \"connect:write\",\n rules: [\n \"POST /v1/connect/networks\",\n \"PATCH /v1/connect/networks/{networkId}\",\n \"DELETE /v1/connect/networks/{networkId}\",\n \"PATCH /v1/projects/{idOrName}/shared-connect-links\",\n ],\n },\n {\n name: \"deployments:read\",\n rules: [\n \"GET /v13/deployments/{idOrUrl}\",\n \"GET /v3/deployments/{idOrUrl}/events\",\n \"GET /v6/deployments\",\n \"GET /v6/deployments/{id}/files\",\n \"GET /v8/deployments/{id}/files/{fileId}\",\n ],\n },\n {\n name: \"deployments:write\",\n rules: [\n \"PATCH /v1/deployments/{deploymentId}/integrations/{integrationConfigurationId}/resources/{resourceId}/actions/{action}\",\n \"PATCH /v12/deployments/{id}/cancel\",\n \"POST /v13/deployments\",\n \"DELETE /v13/deployments/{id}\",\n \"POST /v2/files\",\n ],\n },\n {\n name: \"dns:read\",\n rules: [\"GET /v5/domains/{domain}/records\"],\n },\n {\n name: \"dns:write\",\n rules: [\n \"PATCH /v1/domains/records/{recordId}\",\n \"POST /v2/domains/{domain}/records\",\n \"DELETE /v2/domains/{domain}/records/{recordId}\",\n ],\n },\n {\n name: \"domains-registrar:read\",\n rules: [\n \"GET /v1/registrar/domains/{domain}/auth-code\",\n \"GET /v1/registrar/domains/{domain}/availability\",\n \"GET /v1/registrar/domains/{domain}/contact-info/schema\",\n \"GET /v1/registrar/domains/{domain}/price\",\n \"GET /v1/registrar/domains/{domain}/transfer\",\n \"GET /v1/registrar/orders/{orderId}\",\n \"GET /v1/registrar/tlds/supported\",\n \"GET /v1/registrar/tlds/{tld}\",\n \"GET /v1/registrar/tlds/{tld}/price\",\n ],\n },\n {\n name: \"domains-registrar:write\",\n rules: [\n \"POST /v1/registrar/domains/availability\",\n \"POST /v1/registrar/domains/buy\",\n \"PATCH /v1/registrar/domains/{domain}/auto-renew\",\n \"POST /v1/registrar/domains/{domain}/buy\",\n \"PATCH /v1/registrar/domains/{domain}/nameservers\",\n \"POST /v1/registrar/domains/{domain}/renew\",\n \"POST /v1/registrar/domains/{domain}/transfer\",\n ],\n },\n {\n name: \"domains:read\",\n rules: [\n \"GET /v5/domains\",\n \"GET /v5/domains/{domain}\",\n \"GET /v6/domains/{domain}/config\",\n ],\n },\n {\n name: \"domains:write\",\n rules: [\n \"PATCH /v3/domains/{domain}\",\n \"DELETE /v6/domains/{domain}\",\n \"POST /v7/domains\",\n ],\n },\n {\n name: \"drains:read\",\n rules: [\"GET /v1/drains\", \"GET /v1/drains/{id}\"],\n },\n {\n name: \"drains:write\",\n rules: [\n \"POST /v1/drains\",\n \"POST /v1/drains/test\",\n \"PATCH /v1/drains/{id}\",\n \"DELETE /v1/drains/{id}\",\n ],\n },\n {\n name: \"edge-cache:write\",\n rules: [\n \"POST /v1/edge-cache/dangerously-delete-by-src-images\",\n \"POST /v1/edge-cache/dangerously-delete-by-tags\",\n \"POST /v1/edge-cache/invalidate-by-src-images\",\n \"POST /v1/edge-cache/invalidate-by-tags\",\n ],\n },\n {\n name: \"edge-config:read\",\n rules: [\n \"GET /v1/edge-config\",\n \"GET /v1/edge-config/{edgeConfigId}\",\n \"GET /v1/edge-config/{edgeConfigId}/backups\",\n \"GET /v1/edge-config/{edgeConfigId}/backups/{edgeConfigBackupVersionId}\",\n \"GET /v1/edge-config/{edgeConfigId}/item/{edgeConfigItemKey}\",\n \"GET /v1/edge-config/{edgeConfigId}/items\",\n \"GET /v1/edge-config/{edgeConfigId}/schema\",\n \"GET /v1/edge-config/{edgeConfigId}/token/{token}\",\n \"GET /v1/edge-config/{edgeConfigId}/tokens\",\n ],\n },\n {\n name: \"edge-config:write\",\n rules: [\n \"POST /v1/edge-config\",\n \"PUT /v1/edge-config/{edgeConfigId}\",\n \"DELETE /v1/edge-config/{edgeConfigId}\",\n \"PATCH /v1/edge-config/{edgeConfigId}/items\",\n \"POST /v1/edge-config/{edgeConfigId}/schema\",\n \"DELETE /v1/edge-config/{edgeConfigId}/schema\",\n \"POST /v1/edge-config/{edgeConfigId}/token\",\n \"DELETE /v1/edge-config/{edgeConfigId}/tokens\",\n ],\n },\n {\n name: \"environment:read\",\n rules: [\n \"GET /v1/env\",\n \"GET /v1/env/{id}\",\n \"GET /v9/projects/{idOrName}/custom-environments\",\n \"GET /v9/projects/{idOrName}/custom-environments/{environmentSlugOrId}\",\n ],\n },\n {\n name: \"environment:write\",\n rules: [\n \"POST /v1/env\",\n \"PATCH /v1/env\",\n \"DELETE /v1/env\",\n \"PATCH /v1/env/{id}/unlink/{projectId}\",\n \"POST /v9/projects/{idOrName}/custom-environments\",\n \"PATCH /v9/projects/{idOrName}/custom-environments/{environmentSlugOrId}\",\n \"DELETE /v9/projects/{idOrName}/custom-environments/{environmentSlugOrId}\",\n ],\n },\n {\n name: \"feature-flags:read\",\n rules: [\n \"GET /v1/deployments/{deploymentId}/feature-flags\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/flags\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}/versions\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/sdk-keys\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/segments\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/segments/{segmentIdOrSlug}\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/settings\",\n \"GET /v1/teams/{teamId}/feature-flags/flags\",\n \"GET /v1/teams/{teamId}/feature-flags/settings\",\n ],\n },\n {\n name: \"feature-flags:write\",\n rules: [\n \"PUT /v1/projects/{projectIdOrName}/feature-flags/flags\",\n \"PATCH /v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}\",\n \"DELETE /v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}\",\n \"PUT /v1/projects/{projectIdOrName}/feature-flags/sdk-keys\",\n \"DELETE /v1/projects/{projectIdOrName}/feature-flags/sdk-keys/{hashKey}\",\n \"PUT /v1/projects/{projectIdOrName}/feature-flags/segments\",\n \"PATCH /v1/projects/{projectIdOrName}/feature-flags/segments/{segmentIdOrSlug}\",\n \"DELETE /v1/projects/{projectIdOrName}/feature-flags/segments/{segmentIdOrSlug}\",\n \"PATCH /v1/projects/{projectIdOrName}/feature-flags/settings\",\n ],\n },\n {\n name: \"integrations:read\",\n rules: [\n \"GET /v1/integrations/configuration/{id}\",\n \"GET /v1/integrations/configuration/{id}/products\",\n \"GET /v1/integrations/configurations\",\n \"GET /v1/integrations/git-namespaces\",\n \"GET /v1/integrations/integration/{integrationIdOrSlug}/products/{productIdOrSlug}/plans\",\n \"GET /v1/integrations/search-repo\",\n ],\n },\n {\n name: \"integrations:write\",\n rules: [\n \"PATCH /v1/deployments/{deploymentId}/integrations/{integrationConfigurationId}/resources/{resourceId}/actions/{action}\",\n \"DELETE /v1/integrations/configuration/{id}\",\n \"POST /v1/integrations/installations/{integrationConfigurationId}/resources/{resourceId}/connections\",\n \"POST /v1/storage/stores/integration/direct\",\n ],\n },\n {\n name: \"logDrains:read\",\n rules: [\n \"GET /v1/log-drains\",\n \"GET /v1/log-drains/{id}\",\n \"GET /v2/integrations/log-drains\",\n ],\n },\n {\n name: \"logDrains:write\",\n rules: [\n \"DELETE /v1/integrations/log-drains/{id}\",\n \"POST /v1/log-drains\",\n \"DELETE /v1/log-drains/{id}\",\n \"POST /v2/integrations/log-drains\",\n ],\n },\n {\n name: \"logs:read\",\n rules: [\n \"GET /v1/projects/{projectId}/deployments/{deploymentId}/runtime-logs\",\n ],\n },\n {\n name: \"marketplace:read\",\n rules: [\n \"GET /v1/installations/{integrationConfigurationId}/account\",\n \"GET /v1/installations/{integrationConfigurationId}/billing/invoices/{invoiceId}\",\n \"GET /v1/installations/{integrationConfigurationId}/member/{memberId}\",\n \"GET /v1/installations/{integrationConfigurationId}/resources\",\n \"GET /v1/installations/{integrationConfigurationId}/resources/{resourceId}\",\n \"GET /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/edge-config\",\n \"HEAD /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/edge-config\",\n ],\n },\n {\n name: \"marketplace:write\",\n rules: [\n \"PATCH /v1/installations/{integrationConfigurationId}\",\n \"POST /v1/installations/{integrationConfigurationId}/billing\",\n \"POST /v1/installations/{integrationConfigurationId}/billing/balance\",\n \"POST /v1/installations/{integrationConfigurationId}/billing/finalize\",\n \"POST /v1/installations/{integrationConfigurationId}/billing/invoices\",\n \"POST /v1/installations/{integrationConfigurationId}/billing/invoices/{invoiceId}/actions\",\n \"POST /v1/installations/{integrationConfigurationId}/events\",\n \"PUT /v1/installations/{integrationConfigurationId}/products/{integrationProductIdOrSlug}/resources/{resourceId}/secrets\",\n \"PUT /v1/installations/{integrationConfigurationId}/resources/{resourceId}\",\n \"PATCH /v1/installations/{integrationConfigurationId}/resources/{resourceId}\",\n \"DELETE /v1/installations/{integrationConfigurationId}/resources/{resourceId}\",\n \"PUT /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/edge-config\",\n \"POST /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items\",\n \"PATCH /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items/{itemId}\",\n \"DELETE /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items/{itemId}\",\n \"PUT /v1/installations/{integrationConfigurationId}/resources/{resourceId}/secrets\",\n ],\n },\n {\n name: \"project-routes:read\",\n rules: [\n \"GET /v1/projects/{projectId}/routes\",\n \"GET /v1/projects/{projectId}/routes/versions\",\n ],\n },\n {\n name: \"project-routes:write\",\n rules: [\n \"POST /v1/projects/{projectId}/routes\",\n \"PUT /v1/projects/{projectId}/routes\",\n \"DELETE /v1/projects/{projectId}/routes\",\n \"POST /v1/projects/{projectId}/routes/generate\",\n \"POST /v1/projects/{projectId}/routes/versions\",\n \"PATCH /v1/projects/{projectId}/routes/{routeId}\",\n ],\n },\n {\n name: \"projectMembers:read\",\n rules: [\"GET /v1/projects/{idOrName}/members\"],\n },\n {\n name: \"projectMembers:write\",\n rules: [\n \"POST /v1/projects/{idOrName}/members\",\n \"DELETE /v1/projects/{idOrName}/members/{uid}\",\n ],\n },\n {\n name: \"projects:read\",\n rules: [\n \"GET /v1/projects/{idOrName}/env/{id}\",\n \"GET /v1/projects/{projectId}/promote/aliases\",\n \"GET /v10/projects\",\n \"GET /v10/projects/{idOrName}/env\",\n \"GET /v9/projects/{idOrName}\",\n \"GET /v9/projects/{idOrName}/domains\",\n \"GET /v9/projects/{idOrName}/domains/{domain}\",\n ],\n },\n {\n name: \"projects:write\",\n rules: [\n \"PUT /projects/transfer-request/{code}\",\n \"POST /projects/{idOrName}/transfer-request\",\n \"POST /v1/projects/{idOrName}/domains/{domain}/move\",\n \"DELETE /v1/projects/{idOrName}/env\",\n \"PATCH /v1/projects/{idOrName}/protection-bypass\",\n \"POST /v1/projects/{projectId}/pause\",\n \"POST /v1/projects/{projectId}/rollback/{deploymentId}\",\n \"POST /v1/projects/{projectId}/unpause\",\n \"POST /v10/projects/{idOrName}/domains\",\n \"POST /v10/projects/{idOrName}/env\",\n \"POST /v10/projects/{projectId}/promote/{deploymentId}\",\n \"POST /v11/projects\",\n \"PATCH /v9/projects/{idOrName}\",\n \"DELETE /v9/projects/{idOrName}\",\n \"PATCH /v9/projects/{idOrName}/domains/{domain}\",\n \"DELETE /v9/projects/{idOrName}/domains/{domain}\",\n \"POST /v9/projects/{idOrName}/domains/{domain}/verify\",\n \"PATCH /v9/projects/{idOrName}/env/{id}\",\n \"DELETE /v9/projects/{idOrName}/env/{id}\",\n ],\n },\n {\n name: \"rolling-release:read\",\n rules: [\n \"GET /v1/projects/{idOrName}/rolling-release\",\n \"GET /v1/projects/{idOrName}/rolling-release/billing\",\n \"GET /v1/projects/{idOrName}/rolling-release/config\",\n ],\n },\n {\n name: \"rolling-release:write\",\n rules: [\n \"POST /v1/projects/{idOrName}/rolling-release/approve-stage\",\n \"POST /v1/projects/{idOrName}/rolling-release/complete\",\n \"PATCH /v1/projects/{idOrName}/rolling-release/config\",\n \"DELETE /v1/projects/{idOrName}/rolling-release/config\",\n ],\n },\n {\n name: \"sandboxes:read\",\n rules: [\n \"GET /v1/sandboxes\",\n \"GET /v1/sandboxes/snapshots\",\n \"GET /v1/sandboxes/snapshots/{snapshotId}\",\n \"GET /v1/sandboxes/{sandboxId}\",\n \"GET /v1/sandboxes/{sandboxId}/cmd\",\n \"GET /v1/sandboxes/{sandboxId}/cmd/{cmdId}\",\n \"GET /v1/sandboxes/{sandboxId}/cmd/{cmdId}/logs\",\n ],\n },\n {\n name: \"sandboxes:write\",\n rules: [\n \"POST /v1/sandboxes\",\n \"DELETE /v1/sandboxes/snapshots/{snapshotId}\",\n \"POST /v1/sandboxes/{sandboxId}/cmd\",\n \"POST /v1/sandboxes/{sandboxId}/extend-timeout\",\n \"POST /v1/sandboxes/{sandboxId}/fs/mkdir\",\n \"POST /v1/sandboxes/{sandboxId}/fs/read\",\n \"POST /v1/sandboxes/{sandboxId}/fs/write\",\n \"POST /v1/sandboxes/{sandboxId}/network-policy\",\n \"POST /v1/sandboxes/{sandboxId}/snapshot\",\n \"POST /v1/sandboxes/{sandboxId}/stop\",\n \"POST /v1/sandboxes/{sandboxId}/{cmdId}/kill\",\n ],\n },\n {\n name: \"security:read\",\n rules: [\n \"GET /v1/security/firewall/attack-status\",\n \"GET /v1/security/firewall/bypass\",\n \"GET /v1/security/firewall/config/{configVersion}\",\n ],\n },\n {\n name: \"security:write\",\n rules: [\n \"POST /v1/security/attack-mode\",\n \"POST /v1/security/firewall/bypass\",\n \"DELETE /v1/security/firewall/bypass\",\n \"PUT /v1/security/firewall/config\",\n \"PATCH /v1/security/firewall/config\",\n ],\n },\n {\n name: \"static-ips:write\",\n rules: [\"PATCH /v1/projects/{idOrName}/shared-connect-links\"],\n },\n {\n name: \"teams:read\",\n rules: [\n \"GET /v1/teams/{teamId}/request/{userId}\",\n \"GET /v2/teams\",\n \"GET /v2/teams/{teamId}\",\n \"GET /v3/teams/{teamId}/members\",\n ],\n },\n {\n name: \"teams:write\",\n rules: [\n \"POST /v1/teams\",\n \"DELETE /v1/teams/{teamId}\",\n \"POST /v1/teams/{teamId}/dsync-roles\",\n \"DELETE /v1/teams/{teamId}/invites/{inviteId}\",\n \"POST /v1/teams/{teamId}/members/teams/join\",\n \"PATCH /v1/teams/{teamId}/members/{uid}\",\n \"DELETE /v1/teams/{teamId}/members/{uid}\",\n \"POST /v1/teams/{teamId}/request\",\n \"PATCH /v2/teams/{teamId}\",\n \"POST /v2/teams/{teamId}/members\",\n ],\n },\n {\n name: \"user:read\",\n rules: [\"GET /v1/events/types\", \"GET /v2/user\", \"GET /v3/events\"],\n },\n {\n name: \"user:write\",\n rules: [\"DELETE /v1/user\"],\n },\n {\n name: \"webhooks:read\",\n rules: [\"GET /v1/webhooks\", \"GET /v1/webhooks/{id}\"],\n },\n {\n name: \"webhooks:write\",\n rules: [\"POST /v1/webhooks\", \"DELETE /v1/webhooks/{id}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from X (Twitter) API docs.\n// Source: https://docs.x.com/fundamentals/authentication/oauth-2-0/bearer-tokens\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:x\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const xFirewall: FirewallConfig = {\n name: \"x\",\n description: \"X (Twitter) API\",\n placeholders: {\n X_TOKEN:\n \"AAAAAAAAAAAAAAAAAAAAAAVm0PlaceHolder0000000000000000000000000000000000000000000000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://api.x.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.X_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from YouTube Data API docs.\n// Source: https://developers.google.com/youtube/v3/getting-started\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:youtube\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const youtubeFirewall: FirewallConfig = {\n name: \"youtube\",\n description: \"YouTube Data API\",\n placeholders: {\n YOUTUBE_TOKEN: \"AIzaSyBVm0PlaceHolder000000000000000000\",\n },\n apis: [\n {\n base: \"https://www.googleapis.com/youtube\",\n auth: {\n headers: {\n \"X-Goog-Api-Key\": \"${{ secrets.YOUTUBE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Zapier NLA API docs.\n// Source: https://nla.zapier.com/docs/authentication/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:zapier\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const zapierFirewall: FirewallConfig = {\n name: \"zapier\",\n description: \"Zapier NLA API\",\n placeholders: {\n ZAPIER_TOKEN: \"Vm0PlaceHolder0000000000000000000000000000\",\n },\n apis: [\n {\n base: \"https://nla.zapier.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.ZAPIER_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from ZapSign API docs.\n// Source: https://docs.zapsign.com.br/english/authentication/autenticacao\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:zapsign\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const zapsignFirewall: FirewallConfig = {\n name: \"zapsign\",\n description: \"ZapSign API\",\n placeholders: {\n ZAPSIGN_TOKEN: \"00000000-0000-0000-0000-00000000\",\n },\n apis: [\n {\n base: \"https://api.zapsign.com.br\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.ZAPSIGN_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from ZeptoMail API docs.\n// Source: https://www.zoho.com/zeptomail/help/api/email-sending.html\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:zeptomail\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const zeptomailFirewall: FirewallConfig = {\n name: \"zeptomail\",\n description: \"ZeptoMail API\",\n placeholders: {\n ZEPTOMAIL_TOKEN: \"vm0placeholder00000000000000000a\",\n },\n apis: [\n {\n base: \"https://api.zeptomail.com\",\n auth: {\n headers: {\n Authorization: \"Zoho-enczapikey ${{ secrets.ZEPTOMAIL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","/**\n * Builtin firewall configs registry.\n *\n * Generated configs are imported here and exposed as a lookup map.\n * The firewall loader checks this registry before falling back to\n * remote GitHub fetch.\n */\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\nimport { agentmailFirewall } from \"./agentmail.generated\";\nimport { ahrefsFirewall } from \"./ahrefs.generated\";\nimport { airtableFirewall } from \"./airtable.generated\";\nimport { asanaFirewall } from \"./asana.generated\";\nimport { axiomFirewall } from \"./axiom.generated\";\nimport { braveSearchFirewall } from \"./brave-search.generated\";\nimport { clickupFirewall } from \"./clickup.generated\";\nimport { cloudflareFirewall } from \"./cloudflare.generated\";\nimport { confluenceFirewall } from \"./confluence.generated\";\nimport { deepseekFirewall } from \"./deepseek.generated\";\nimport { discordFirewall } from \"./discord.generated\";\nimport { elevenlabsFirewall } from \"./elevenlabs.generated\";\nimport { falFirewall } from \"./fal.generated\";\nimport { figmaFirewall } from \"./figma.generated\";\nimport { firecrawlFirewall } from \"./firecrawl.generated\";\nimport { githubFirewall } from \"./github.generated\";\nimport { gitlabFirewall } from \"./gitlab.generated\";\nimport { gmailFirewall } from \"./gmail.generated\";\nimport { googleCalendarFirewall } from \"./google-calendar.generated\";\nimport { googleDocsFirewall } from \"./google-docs.generated\";\nimport { googleDriveFirewall } from \"./google-drive.generated\";\nimport { googleSheetsFirewall } from \"./google-sheets.generated\";\nimport { hubspotFirewall } from \"./hubspot.generated\";\nimport { jiraFirewall } from \"./jira.generated\";\nimport { linearFirewall } from \"./linear.generated\";\nimport { mondayFirewall } from \"./monday.generated\";\nimport { neonFirewall } from \"./neon.generated\";\nimport { notionFirewall } from \"./notion.generated\";\nimport { openaiFirewall } from \"./openai.generated\";\nimport { perplexityFirewall } from \"./perplexity.generated\";\nimport { posthogFirewall } from \"./posthog.generated\";\nimport { resendFirewall } from \"./resend.generated\";\nimport { sentryFirewall } from \"./sentry.generated\";\nimport { serpapiFirewall } from \"./serpapi.generated\";\nimport { slackFirewall } from \"./slack.generated\";\nimport { stripeFirewall } from \"./stripe.generated\";\nimport { supabaseFirewall } from \"./supabase.generated\";\nimport { tavilyFirewall } from \"./tavily.generated\";\nimport { todoistFirewall } from \"./todoist.generated\";\nimport { vercelFirewall } from \"./vercel.generated\";\nimport { xFirewall } from \"./x.generated\";\nimport { youtubeFirewall } from \"./youtube.generated\";\nimport { zapierFirewall } from \"./zapier.generated\";\nimport { zapsignFirewall } from \"./zapsign.generated\";\nimport { zeptomailFirewall } from \"./zeptomail.generated\";\n\nexport const builtinFirewalls: Record<string, FirewallConfig> = {\n agentmail: agentmailFirewall,\n ahrefs: ahrefsFirewall,\n airtable: airtableFirewall,\n asana: asanaFirewall,\n axiom: axiomFirewall,\n \"brave-search\": braveSearchFirewall,\n clickup: clickupFirewall,\n cloudflare: cloudflareFirewall,\n confluence: confluenceFirewall,\n deepseek: deepseekFirewall,\n discord: discordFirewall,\n elevenlabs: elevenlabsFirewall,\n fal: falFirewall,\n figma: figmaFirewall,\n firecrawl: firecrawlFirewall,\n github: githubFirewall,\n gitlab: gitlabFirewall,\n gmail: gmailFirewall,\n \"google-calendar\": googleCalendarFirewall,\n \"google-docs\": googleDocsFirewall,\n \"google-drive\": googleDriveFirewall,\n \"google-sheets\": googleSheetsFirewall,\n hubspot: hubspotFirewall,\n jira: jiraFirewall,\n linear: linearFirewall,\n monday: mondayFirewall,\n neon: neonFirewall,\n notion: notionFirewall,\n openai: openaiFirewall,\n perplexity: perplexityFirewall,\n posthog: posthogFirewall,\n resend: resendFirewall,\n sentry: sentryFirewall,\n serpapi: serpapiFirewall,\n slack: slackFirewall,\n stripe: stripeFirewall,\n supabase: supabaseFirewall,\n tavily: tavilyFirewall,\n todoist: todoistFirewall,\n vercel: vercelFirewall,\n x: xFirewall,\n youtube: youtubeFirewall,\n zapier: zapierFirewall,\n zapsign: zapsignFirewall,\n zeptomail: zeptomailFirewall,\n};\n","import { type FirewallConfig, type ExpandedFirewallConfig } from \"./firewalls\";\nimport { fetchFirewallConfig, type FetchFn } from \"../firewall-loader\";\n\nexport interface FirewallSelection {\n permissions: string[] | \"all\";\n}\n\nconst VALID_RULE_METHODS = new Set([\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"HEAD\",\n \"OPTIONS\",\n \"ANY\",\n]);\n\nexport function validateRule(\n rule: string,\n permName: string,\n serviceName: string,\n): void {\n const parts = rule.split(\" \", 2);\n if (parts.length !== 2 || !parts[1]) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": must be \"METHOD /path\"`,\n );\n }\n const [method, path] = parts as [string, string];\n if (!VALID_RULE_METHODS.has(method)) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": unknown method \"${method}\" (must be uppercase)`,\n );\n }\n if (!path.startsWith(\"/\")) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": path must start with \"/\"`,\n );\n }\n if (path.includes(\"?\") || path.includes(\"#\")) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": path must not contain query string or fragment`,\n );\n }\n const segments = path.split(\"/\").filter(Boolean);\n const paramNames = new Set<string>();\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i]!;\n if (seg.startsWith(\"{\") && seg.endsWith(\"}\")) {\n const name = seg.slice(1, -1);\n const isGreedy = name.endsWith(\"+\") || name.endsWith(\"*\");\n const baseName = isGreedy ? name.slice(0, -1) : name;\n if (!baseName) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": empty parameter name`,\n );\n }\n if (paramNames.has(baseName)) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": duplicate parameter name \"{${baseName}}\"`,\n );\n }\n paramNames.add(baseName);\n if (isGreedy && i !== segments.length - 1) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": {${name}} must be the last segment`,\n );\n }\n }\n }\n}\n\nexport function validateBaseUrl(base: string, serviceName: string): void {\n let url: URL;\n try {\n url = new URL(base);\n } catch {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": not a valid URL`,\n );\n }\n if (url.search) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain query string`,\n );\n }\n if (url.hash) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain fragment`,\n );\n }\n}\n\n/**\n * Collect available permission names from a firewall config.\n * Validates uniqueness and that \"all\" is not used as a permission name.\n */\nexport function collectAndValidatePermissions(\n ref: string,\n serviceConfig: FirewallConfig,\n): Set<string> {\n if (serviceConfig.apis.length === 0) {\n throw new Error(\n `Firewall \"${serviceConfig.name}\" (ref \"${ref}\") has no api entries`,\n );\n }\n const available = new Set<string>();\n for (const api of serviceConfig.apis) {\n validateBaseUrl(api.base, serviceConfig.name);\n if (!api.permissions || api.permissions.length === 0) {\n throw new Error(\n `API entry \"${api.base}\" in firewall \"${serviceConfig.name}\" (ref \"${ref}\") has no permissions`,\n );\n }\n // Uniqueness is enforced within a single api_entry. The same permission\n // name across different api_entries is allowed (e.g., \"full-access\" on\n // both slack.com/api and files.slack.com).\n const seen = new Set<string>();\n for (const perm of api.permissions) {\n if (!perm.name) {\n throw new Error(\n `Firewall \"${serviceConfig.name}\" (ref \"${ref}\") has a permission with empty name`,\n );\n }\n if (perm.name === \"all\") {\n throw new Error(\n `Firewall \"${serviceConfig.name}\" (ref \"${ref}\") has a permission named \"all\", which is a reserved keyword`,\n );\n }\n if (seen.has(perm.name)) {\n throw new Error(\n `Duplicate permission name \"${perm.name}\" in API entry \"${api.base}\" of firewall \"${serviceConfig.name}\" (ref \"${ref}\")`,\n );\n }\n if (perm.rules.length === 0) {\n throw new Error(\n `Permission \"${perm.name}\" in firewall \"${serviceConfig.name}\" (ref \"${ref}\") has no rules`,\n );\n }\n for (const rule of perm.rules) {\n validateRule(rule, perm.name, serviceConfig.name);\n }\n seen.add(perm.name);\n available.add(perm.name);\n }\n }\n return available;\n}\n\n/**\n * Expand experimental_firewalls from map format to ExpandedFirewallConfig[] in-place.\n * Validates permission names and filters api_entries to only include selected permissions.\n * Mutates the config object so the API receives pre-expanded firewall objects.\n *\n * Input (from vm0.yaml): Record<ref, { permissions: string[] | \"all\" }>\n * Output (for API): ExpandedFirewallConfig[]\n *\n * The union type in the `as` cast covers both shapes since this function\n * transforms the field from one to the other. Already-expanded arrays are\n * skipped via the Array.isArray guard.\n *\n * Supports GitHub-hosted YAML configs (by bare name or full GitHub URL).\n *\n * @param config - Compose config object to mutate\n * @param fetchFn - Optional fetch function for HTTP requests (injectable for tests)\n */\nexport async function expandFirewallConfigs(\n config: unknown,\n fetchFn?: FetchFn,\n): Promise<void> {\n const compose = config as {\n agents?: Record<\n string,\n {\n experimental_firewalls?:\n | Record<string, FirewallSelection>\n | ExpandedFirewallConfig[];\n }\n >;\n };\n if (!compose?.agents) return;\n\n for (const agent of Object.values(compose.agents)) {\n const configs = agent.experimental_firewalls;\n if (!configs) continue;\n // Skip if already expanded (array, not map)\n if (Array.isArray(configs)) continue;\n\n const expanded: ExpandedFirewallConfig[] = [];\n\n // Resolve all firewall configs in parallel\n const entries = Object.entries(configs);\n const resolvedConfigs = await Promise.all(\n entries.map(([ref]) => fetchFirewallConfig(ref, fetchFn)),\n );\n\n for (let i = 0; i < entries.length; i++) {\n const [ref, selection] = entries[i]!;\n const serviceConfig = resolvedConfigs[i]!;\n const availablePermissions = collectAndValidatePermissions(\n ref,\n serviceConfig,\n );\n\n // Validate selected permissions exist\n if (selection.permissions !== \"all\") {\n for (const name of selection.permissions) {\n if (!availablePermissions.has(name)) {\n const available = [...availablePermissions].join(\", \");\n throw new Error(\n `Permission \"${name}\" does not exist in firewall \"${serviceConfig.name}\" (ref \"${ref}\"). Available: ${available}`,\n );\n }\n }\n }\n\n // Filter api_entries: keep only selected permissions, drop empty entries\n const selectedSet =\n selection.permissions === \"all\" ? null : new Set(selection.permissions);\n\n const filteredApis = serviceConfig.apis\n .map((api) => ({\n ...api,\n permissions: selectedSet\n ? (api.permissions ?? []).filter((p) => selectedSet.has(p.name))\n : api.permissions,\n }))\n .filter((api) => (api.permissions ?? []).length > 0);\n\n // Drop firewall config entirely if no api_entries remain\n if (filteredApis.length === 0) continue;\n\n const entry: ExpandedFirewallConfig = {\n name: serviceConfig.name,\n ref,\n apis: filteredApis,\n };\n if (serviceConfig.description !== undefined)\n entry.description = serviceConfig.description;\n if (serviceConfig.placeholders !== undefined)\n entry.placeholders = serviceConfig.placeholders;\n expanded.push(entry);\n }\n\n agent.experimental_firewalls = expanded;\n }\n}\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * User preferences schemas (shared across contracts)\n */\nexport const sendModeSchema = z.enum([\"enter\", \"cmd-enter\"]);\nexport type SendMode = z.infer<typeof sendModeSchema>;\n\nexport const userPreferencesResponseSchema = z.object({\n timezone: z.string().nullable(),\n notifyEmail: z.boolean(),\n notifySlack: z.boolean(),\n pinnedAgentIds: z.array(z.string()),\n sendMode: sendModeSchema,\n});\n\nexport type UserPreferencesResponse = z.infer<\n typeof userPreferencesResponseSchema\n>;\n\nexport const updateUserPreferencesRequestSchema = z\n .object({\n timezone: z.string().min(1).optional(),\n notifyEmail: z.boolean().optional(),\n notifySlack: z.boolean().optional(),\n pinnedAgentIds: z.array(z.string()).optional(),\n sendMode: sendModeSchema.optional(),\n })\n .refine(\n (data) =>\n data.timezone !== undefined ||\n data.notifyEmail !== undefined ||\n data.notifySlack !== undefined ||\n data.pinnedAgentIds !== undefined ||\n data.sendMode !== undefined,\n {\n message: \"At least one preference must be provided\",\n },\n );\n\nexport type UpdateUserPreferencesRequest = z.infer<\n typeof updateUserPreferencesRequestSchema\n>;\n\n/**\n * Zero user preferences contract for /api/zero/user-preferences\n *\n * GET: Get current user's preferences\n * POST: Update user preferences\n */\nexport const zeroUserPreferencesContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/user-preferences\",\n headers: authHeadersSchema,\n responses: {\n 200: userPreferencesResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get user preferences\",\n },\n update: {\n method: \"POST\",\n path: \"/api/zero/user-preferences\",\n headers: authHeadersSchema,\n body: updateUserPreferencesRequestSchema,\n responses: {\n 200: userPreferencesResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update user preferences\",\n },\n});\n\nexport type ZeroUserPreferencesContract = typeof zeroUserPreferencesContract;\n","import { z } from \"zod\";\n\n/**\n * Org list item schema\n */\nexport const orgListItemSchema = z.object({\n slug: z.string(),\n role: z.string(),\n});\nexport type OrgListItem = z.infer<typeof orgListItemSchema>;\n\n/**\n * Org list response schema\n */\nexport const orgListResponseSchema = z.object({\n orgs: z.array(orgListItemSchema),\n active: z.string().optional(),\n});\nexport type OrgListResponse = z.infer<typeof orgListResponseSchema>;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Onboarding status response schema\n */\nexport const onboardingStatusResponseSchema = z.object({\n needsOnboarding: z.boolean(),\n isAdmin: z.boolean(),\n hasOrg: z.boolean(),\n hasDefaultAgent: z.boolean(),\n defaultAgentId: z.string().nullable(),\n defaultAgentMetadata: z\n .object({\n displayName: z.string().optional(),\n description: z.string().optional(),\n sound: z.string().optional(),\n })\n .nullable(),\n defaultAgentSkills: z.array(z.string()),\n});\n\nexport type OnboardingStatusResponse = z.infer<\n typeof onboardingStatusResponseSchema\n>;\n\n/**\n * Onboarding status contract for GET /api/zero/onboarding/status\n */\nexport const onboardingStatusContract = c.router({\n getStatus: {\n method: \"GET\",\n path: \"/api/zero/onboarding/status\",\n headers: authHeadersSchema,\n responses: {\n 200: onboardingStatusResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"Get onboarding status for current user\",\n },\n});\n\nexport type OnboardingStatusContract = typeof onboardingStatusContract;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nexport const skillFrontmatterSchema = z.object({\n name: z.string().optional(),\n description: z.string().optional(),\n vm0_secrets: z.array(z.string()).optional(),\n vm0_vars: z.array(z.string()).optional(),\n});\n\nconst resolvedSkillSchema = z.object({\n storageName: z.string(),\n versionHash: z.string(),\n frontmatter: skillFrontmatterSchema,\n});\n\nexport const skillsResolveContract = c.router({\n resolve: {\n method: \"POST\",\n path: \"/api/skills/resolve\",\n headers: authHeadersSchema,\n body: z.object({\n skills: z.array(z.url()).min(1).max(100),\n }),\n responses: {\n 200: z.object({\n resolved: z.record(z.string(), resolvedSkillSchema),\n unresolved: z.array(z.string()),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n },\n summary: \"Batch resolve skill URLs to cached version info\",\n },\n});\n\nexport type SkillsResolveContract = typeof skillsResolveContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { firewallPoliciesSchema } from \"./firewalls\";\n\nconst c = initContract();\n\n/**\n * Zero agent response schema\n */\nexport const zeroAgentResponseSchema = z.object({\n agentId: z.string(),\n description: z.string().nullable(),\n displayName: z.string().nullable(),\n sound: z.string().nullable(),\n connectors: z.array(z.string()),\n firewallPolicies: firewallPoliciesSchema.nullable(),\n});\n\n/**\n * Create/update zero agent request schema\n */\nexport const zeroAgentRequestSchema = z.object({\n description: z.string().optional(),\n displayName: z.string().optional(),\n sound: z.string().optional(),\n connectors: z.array(z.string()),\n});\n\n/**\n * Partial metadata update request schema (for PATCH)\n */\nexport const zeroAgentMetadataRequestSchema = z.object({\n displayName: z.string().optional(),\n description: z.string().optional(),\n sound: z.string().optional(),\n});\n\n/**\n * Zero agent instructions response schema\n */\nexport const zeroAgentInstructionsResponseSchema = z.object({\n content: z.string().nullable(),\n filename: z.string().nullable(),\n});\n\n/**\n * Zero agent instructions update request schema\n */\nexport const zeroAgentInstructionsRequestSchema = z.object({\n content: z.string(),\n});\n\n/**\n * Contract for GET/POST /api/zero/agents (list/create agents)\n */\nexport const zeroAgentsMainContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/agents\",\n headers: authHeadersSchema,\n body: zeroAgentRequestSchema,\n responses: {\n 201: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Create zero agent\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/agents\",\n headers: authHeadersSchema,\n responses: {\n 200: z.array(zeroAgentResponseSchema),\n 401: apiErrorSchema,\n },\n summary: \"List zero agents\",\n },\n});\n\n/**\n * Contract for GET/PUT/PATCH/DELETE /api/zero/agents/:id\n */\nexport const zeroAgentsByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n responses: {\n 200: zeroAgentResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get zero agent by id\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n body: zeroAgentRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Update zero agent\",\n },\n updateMetadata: {\n method: \"PATCH\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n body: zeroAgentMetadataRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update zero agent metadata\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete zero agent by id\",\n },\n});\n\n/**\n * Update firewall policies request schema\n */\nexport const zeroAgentFirewallPoliciesRequestSchema = z.object({\n agentId: z.string(),\n policies: firewallPoliciesSchema,\n});\n\n/**\n * Contract for PUT /api/zero/firewall-policies\n */\nexport const zeroAgentFirewallPoliciesContract = c.router({\n update: {\n method: \"PUT\",\n path: \"/api/zero/firewall-policies\",\n headers: authHeadersSchema,\n body: zeroAgentFirewallPoliciesRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update zero agent firewall policies (admin only)\",\n },\n});\n\n/**\n * Contract for GET/PUT /api/zero/agents/:id/instructions\n */\nexport const zeroAgentInstructionsContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id/instructions\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n responses: {\n 200: zeroAgentInstructionsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get zero agent instructions\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id/instructions\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n body: zeroAgentInstructionsRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Update zero agent instructions\",\n },\n});\n\n// Export types\nexport type ZeroAgentResponse = z.infer<typeof zeroAgentResponseSchema>;\nexport type ZeroAgentRequest = z.infer<typeof zeroAgentRequestSchema>;\nexport type ZeroAgentMetadataRequest = z.infer<\n typeof zeroAgentMetadataRequestSchema\n>;\nexport type ZeroAgentInstructionsResponse = z.infer<\n typeof zeroAgentInstructionsResponseSchema\n>;\nexport type ZeroAgentInstructionsRequest = z.infer<\n typeof zeroAgentInstructionsRequestSchema\n>;\nexport type ZeroAgentFirewallPoliciesRequest = z.infer<\n typeof zeroAgentFirewallPoliciesRequestSchema\n>;\n\nexport type ZeroAgentsMainContract = typeof zeroAgentsMainContract;\nexport type ZeroAgentsByIdContract = typeof zeroAgentsByIdContract;\nexport type ZeroAgentInstructionsContract =\n typeof zeroAgentInstructionsContract;\nexport type ZeroAgentFirewallPoliciesContract =\n typeof zeroAgentFirewallPoliciesContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n computerConnectorCreateResponseSchema,\n connectorListResponseSchema,\n connectorResponseSchema,\n connectorSessionResponseSchema,\n connectorSessionStatusResponseSchema,\n connectorTypeSchema,\n scopeDiffResponseSchema,\n} from \"./connectors\";\n\nconst c = initContract();\n\n/**\n * Zero contract for GET /api/zero/connectors\n * Proxies to GET /api/connectors\n */\nexport const zeroConnectorsMainContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/connectors\",\n headers: authHeadersSchema,\n responses: {\n 200: connectorListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all connectors (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for GET/DELETE /api/zero/connectors/:type\n * Proxies to GET/DELETE /api/connectors/:type\n */\nexport const zeroConnectorsByTypeContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/connectors/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 200: connectorResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get connector by type (zero proxy)\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/connectors/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Disconnect a connector (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for GET /api/zero/connectors/:type/scope-diff\n * App-layer endpoint (direct service call, no proxy)\n */\nexport const zeroConnectorScopeDiffContract = c.router({\n getScopeDiff: {\n method: \"GET\",\n path: \"/api/zero/connectors/:type/scope-diff\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 200: scopeDiffResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get scope diff for a connector\",\n },\n});\n\nconst connectorSearchAuthMethodSchema = z.enum([\"oauth\", \"api-token\"]);\n\nexport type ConnectorSearchAuthMethod = z.infer<\n typeof connectorSearchAuthMethodSchema\n>;\n\nconst connectorSearchItemSchema = z.object({\n id: z.string(),\n label: z.string(),\n description: z.string(),\n authMethods: z.array(connectorSearchAuthMethodSchema),\n});\n\nconst connectorSearchResponseSchema = z.object({\n connectors: z.array(connectorSearchItemSchema),\n});\n\n/**\n * Zero contract for GET /api/zero/connectors/search\n * Returns all available connector type definitions with optional keyword search\n */\nexport const zeroConnectorsSearchContract = c.router({\n search: {\n method: \"GET\",\n path: \"/api/zero/connectors/search\",\n headers: authHeadersSchema,\n query: z.object({ keyword: z.string().optional() }),\n responses: {\n 200: connectorSearchResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"Search available connector types\",\n },\n});\n\n/**\n * Zero contract for POST /api/zero/connectors/:type/sessions\n * Proxies to POST /api/connectors/:type/sessions (OAuth device flow)\n */\nexport const zeroConnectorSessionsContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/sessions\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n body: z.object({}).optional(),\n responses: {\n 200: connectorSessionResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n },\n summary: \"Create connector session for device flow (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for GET /api/zero/connectors/:type/sessions/:sessionId\n * Proxies to GET /api/connectors/:type/sessions/:sessionId (poll session)\n */\nexport const zeroConnectorSessionByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/connectors/:type/sessions/:sessionId\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: connectorTypeSchema,\n sessionId: z.uuid(),\n }),\n responses: {\n 200: connectorSessionStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get connector session status (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for POST/GET/DELETE /api/zero/connectors/computer\n * Proxies to /api/connectors/computer (computer connector CRUD)\n */\nexport const zeroComputerConnectorContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/connectors/computer\",\n headers: authHeadersSchema,\n body: z.object({}).optional(),\n responses: {\n 200: computerConnectorCreateResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create computer connector (zero proxy)\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/connectors/computer\",\n headers: authHeadersSchema,\n responses: {\n 200: connectorResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get computer connector status (zero proxy)\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/connectors/computer\",\n headers: authHeadersSchema,\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete computer connector (zero proxy)\",\n },\n});\n\nexport type ZeroConnectorsMainContract = typeof zeroConnectorsMainContract;\nexport type ZeroConnectorsByTypeContract = typeof zeroConnectorsByTypeContract;\nexport type ZeroConnectorScopeDiffContract =\n typeof zeroConnectorScopeDiffContract;\nexport type ZeroConnectorsSearchContract = typeof zeroConnectorsSearchContract;\nexport type ZeroConnectorSessionsContract =\n typeof zeroConnectorSessionsContract;\nexport type ZeroConnectorSessionByIdContract =\n typeof zeroConnectorSessionByIdContract;\nexport type ZeroComputerConnectorContract =\n typeof zeroComputerConnectorContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgResponseSchema, updateOrgRequestSchema } from \"./orgs\";\nimport { orgMessageResponseSchema } from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Zero contract for /api/zero/org\n * Proxies to /api/org\n */\nexport const zeroOrgContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/org\",\n headers: authHeadersSchema,\n responses: {\n 200: orgResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get current org (zero proxy)\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/org\",\n headers: authHeadersSchema,\n body: updateOrgRequestSchema,\n responses: {\n 200: orgResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update org slug (zero proxy)\",\n },\n});\n\nexport type ZeroOrgContract = typeof zeroOrgContract;\n\n/**\n * Zero contract for POST /api/zero/org/leave\n * Proxies to POST /api/org/leave\n */\nexport const zeroOrgLeaveContract = c.router({\n leave: {\n method: \"POST\",\n path: \"/api/zero/org/leave\",\n headers: authHeadersSchema,\n body: z.object({}),\n responses: {\n 200: orgMessageResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Leave the current org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgLeaveContract = typeof zeroOrgLeaveContract;\n\n/**\n * Zero contract for DELETE /api/zero/org/delete\n */\nexport const zeroOrgDeleteContract = c.router({\n delete: {\n method: \"POST\",\n path: \"/api/zero/org/delete\",\n headers: authHeadersSchema,\n body: z.object({ slug: z.string() }),\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete the current org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgDeleteContract = typeof zeroOrgDeleteContract;\n","import { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgListResponseSchema } from \"./org-list\";\n\nconst c = initContract();\n\n/**\n * Zero contract for GET /api/zero/org/list\n * Lists all accessible orgs for the authenticated user.\n */\nexport const zeroOrgListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/org/list\",\n headers: authHeadersSchema,\n responses: {\n 200: orgListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all accessible orgs for the authenticated user\",\n },\n});\n\nexport type ZeroOrgListContract = typeof zeroOrgListContract;\n","import { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n orgMembersResponseSchema,\n inviteOrgMemberRequestSchema,\n removeOrgMemberRequestSchema,\n updateOrgMemberRoleRequestSchema,\n orgMessageResponseSchema,\n} from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Zero contract for /api/zero/org/members\n * Proxies to /api/org/members\n */\nexport const zeroOrgMembersContract = c.router({\n members: {\n method: \"GET\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n responses: {\n 200: orgMembersResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get org members (zero proxy)\",\n },\n updateRole: {\n method: \"PATCH\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n body: updateOrgMemberRoleRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update a member's role (zero proxy)\",\n },\n removeMember: {\n method: \"DELETE\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n body: removeOrgMemberRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Remove a member from the org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgMembersContract = typeof zeroOrgMembersContract;\n\n/**\n * Zero contract for POST /api/zero/org/invite\n * Proxies to POST /api/org/invite\n */\nexport const zeroOrgInviteContract = c.router({\n invite: {\n method: \"POST\",\n path: \"/api/zero/org/invite\",\n headers: authHeadersSchema,\n body: inviteOrgMemberRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Invite a member to the org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgInviteContract = typeof zeroOrgInviteContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { composeResponseSchema, composeListItemSchema } from \"./composes\";\n\nconst c = initContract();\n\n/**\n * Zero composes main contract (GET /api/zero/composes)\n * Proxies to composesMainContract.getByName\n */\nexport const zeroComposesMainContract = c.router({\n getByName: {\n method: \"GET\",\n path: \"/api/zero/composes\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Missing name query parameter\"),\n org: z.string().optional(),\n }),\n responses: {\n 200: composeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get agent compose by name (zero proxy)\",\n },\n});\n\n/**\n * Zero composes by ID contract (GET/DELETE /api/zero/composes/:id)\n * Proxies to composesByIdContract\n */\nexport const zeroComposesByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Compose ID is required\"),\n }),\n responses: {\n 200: composeResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent compose by ID (zero proxy)\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().uuid(\"Compose ID is required\"),\n }),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Delete agent compose (zero proxy)\",\n },\n});\n\n/**\n * Zero composes list contract (GET /api/zero/composes/list)\n * Proxies to composesListContract\n */\nexport const zeroComposesListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/composes/list\",\n headers: authHeadersSchema,\n query: z.object({\n org: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n composes: z.array(composeListItemSchema),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List all agent composes (zero proxy)\",\n },\n});\n\n// Type exports\nexport type ZeroComposesMainContract = typeof zeroComposesMainContract;\nexport type ZeroComposesByIdContract = typeof zeroComposesByIdContract;\nexport type ZeroComposesListContract = typeof zeroComposesListContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n createRunResponseSchema,\n getRunResponseSchema,\n cancelRunResponseSchema,\n agentEventsResponseSchema,\n queueResponseSchema,\n unifiedRunRequestSchema,\n} from \"./runs\";\n\n/**\n * Zero run request schema — subset of unified schema.\n * Server-side defaults are injected by createZeroRun():\n * memoryName, artifactName, disallowedTools.\n * Fields not used by zero triggers are omitted:\n * triggerSource, artifactVersion, vars, secrets, volumeVersions.\n */\nconst zeroRunRequestSchema = unifiedRunRequestSchema\n .omit({\n triggerSource: true,\n memoryName: true,\n artifactName: true,\n artifactVersion: true,\n disallowedTools: true,\n volumeVersions: true,\n vars: true,\n secrets: true,\n agentComposeId: true,\n })\n .extend({\n agentId: z.string().optional(),\n });\n\nconst c = initContract();\n\n/**\n * Zero runs main contract (POST /api/zero/runs)\n * Proxies to runsMainContract.create\n */\nexport const zeroRunsMainContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/runs\",\n headers: authHeadersSchema,\n body: zeroRunRequestSchema,\n responses: {\n 201: createRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Create and execute agent run (zero proxy)\",\n },\n});\n\n/**\n * Zero runs by ID contract (GET /api/zero/runs/:id)\n * Proxies to runsByIdContract\n */\nexport const zeroRunsByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/runs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n responses: {\n 200: getRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run by ID (zero proxy)\",\n },\n});\n\n/**\n * Zero runs cancel contract (POST /api/zero/runs/:id/cancel)\n * Proxies to runsCancelContract\n */\nexport const zeroRunsCancelContract = c.router({\n cancel: {\n method: \"POST\",\n path: \"/api/zero/runs/:id/cancel\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n body: z.undefined(),\n responses: {\n 200: cancelRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Cancel a pending or running run (zero proxy)\",\n },\n});\n\n/**\n * Zero runs queue contract (GET /api/zero/runs/queue)\n * Proxies to runsQueueContract\n */\nexport const zeroRunsQueueContract = c.router({\n getQueue: {\n method: \"GET\",\n path: \"/api/zero/runs/queue\",\n headers: authHeadersSchema,\n responses: {\n 200: queueResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get org run queue status (zero proxy)\",\n },\n});\n\n/**\n * Zero run agent events contract (GET /api/zero/runs/:id/telemetry/agent)\n * Proxies to runAgentEventsContract\n */\nexport const zeroRunAgentEventsContract = c.router({\n getAgentEvents: {\n method: \"GET\",\n path: \"/api/zero/runs/:id/telemetry/agent\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: agentEventsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent events with pagination (zero proxy)\",\n },\n});\n\n// Type exports\nexport type ZeroRunsMainContract = typeof zeroRunsMainContract;\nexport type ZeroRunsByIdContract = typeof zeroRunsByIdContract;\nexport type ZeroRunsCancelContract = typeof zeroRunsCancelContract;\nexport type ZeroRunsQueueContract = typeof zeroRunsQueueContract;\nexport type ZeroRunAgentEventsContract = typeof zeroRunAgentEventsContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Schedule response schema — shared by all schedule endpoints\n */\nexport const scheduleResponseSchema = z.object({\n id: z.string().uuid(),\n agentId: z.string().uuid(),\n orgSlug: z.string(),\n userId: z.string(),\n name: z.string(),\n triggerType: z.enum([\"cron\", \"once\", \"loop\"]),\n cronExpression: z.string().nullable(),\n atTime: z.string().nullable(),\n intervalSeconds: z.number().nullable(),\n timezone: z.string(),\n prompt: z.string(),\n description: z.string().nullable(),\n appendSystemPrompt: z.string().nullable(),\n vars: z.record(z.string(), z.string()).nullable(),\n secretNames: z.array(z.string()).nullable(),\n artifactName: z.string().nullable(),\n artifactVersion: z.string().nullable(),\n volumeVersions: z.record(z.string(), z.string()).nullable(),\n enabled: z.boolean(),\n notifyEmail: z.boolean(),\n notifySlack: z.boolean(),\n slackChannelId: z.string().nullable(),\n nextRunAt: z.string().nullable(),\n lastRunAt: z.string().nullable(),\n retryStartedAt: z.string().nullable(),\n consecutiveFailures: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const scheduleListResponseSchema = z.object({\n schedules: z.array(scheduleResponseSchema),\n});\n\nexport const deployScheduleResponseSchema = z.object({\n schedule: scheduleResponseSchema,\n created: z.boolean(),\n});\n\n/**\n * Zero deploy schedule request — requires agentId (compose UUID).\n */\nconst zeroDeployScheduleRequestSchema = z\n .object({\n name: z.string().min(1).max(64, \"Schedule name max 64 chars\"),\n cronExpression: z.string().optional(),\n atTime: z.string().optional(),\n intervalSeconds: z.number().int().min(0).optional(),\n timezone: z.string().default(\"UTC\"),\n prompt: z.string().min(1, \"Prompt required\"),\n description: z.string().optional(),\n appendSystemPrompt: z.string().optional(),\n artifactName: z.string().optional(),\n artifactVersion: z.string().optional(),\n volumeVersions: z.record(z.string(), z.string()).optional(),\n agentId: z.string().uuid(\"Invalid agent ID\"),\n enabled: z.boolean().optional(),\n notifyEmail: z.boolean().optional(),\n notifySlack: z.boolean().optional(),\n slackChannelId: z.string().nullable().optional(),\n })\n .refine(\n (data) => {\n const triggers = [\n data.cronExpression,\n data.atTime,\n data.intervalSeconds,\n ].filter((v) => v !== undefined);\n return triggers.length === 1;\n },\n {\n message:\n \"Exactly one of 'cronExpression', 'atTime', or 'intervalSeconds' must be specified\",\n },\n );\n\n/**\n * Zero schedules main contract (GET/POST /api/zero/schedules)\n */\nexport const zeroSchedulesMainContract = c.router({\n deploy: {\n method: \"POST\",\n path: \"/api/zero/schedules\",\n headers: authHeadersSchema,\n body: zeroDeployScheduleRequestSchema,\n responses: {\n 200: deployScheduleResponseSchema,\n 201: deployScheduleResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Deploy schedule (zero proxy)\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/schedules\",\n headers: authHeadersSchema,\n responses: {\n 200: scheduleListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List all schedules (zero proxy)\",\n },\n});\n\n/**\n * Zero schedules by name contract (DELETE /api/zero/schedules/:name)\n */\nexport const zeroSchedulesByNameContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/schedules/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: z.string().min(1, \"Schedule name required\"),\n }),\n query: z.object({\n agentId: z.string().uuid(\"Invalid agent ID\"),\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete schedule (zero proxy)\",\n },\n});\n\n/**\n * Zero schedules enable/disable contract\n */\nexport const zeroSchedulesEnableContract = c.router({\n enable: {\n method: \"POST\",\n path: \"/api/zero/schedules/:name/enable\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: z.string().min(1, \"Schedule name required\"),\n }),\n body: z.object({\n agentId: z.string().uuid(\"Invalid agent ID\"),\n }),\n responses: {\n 200: scheduleResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Enable schedule (zero proxy)\",\n },\n disable: {\n method: \"POST\",\n path: \"/api/zero/schedules/:name/disable\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: z.string().min(1, \"Schedule name required\"),\n }),\n body: z.object({\n agentId: z.string().uuid(\"Invalid agent ID\"),\n }),\n responses: {\n 200: scheduleResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Disable schedule (zero proxy)\",\n },\n});\n\n// Contract type exports\nexport type ZeroSchedulesMainContract = typeof zeroSchedulesMainContract;\nexport type ZeroSchedulesByNameContract = typeof zeroSchedulesByNameContract;\nexport type ZeroSchedulesEnableContract = typeof zeroSchedulesEnableContract;\n\n// Inferred types from response schemas\nexport type ScheduleResponse = z.infer<typeof scheduleResponseSchema>;\nexport type ScheduleListResponse = z.infer<typeof scheduleListResponseSchema>;\nexport type DeployScheduleResponse = z.infer<\n typeof deployScheduleResponseSchema\n>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n modelProviderListResponseSchema,\n upsertModelProviderRequestSchema,\n upsertModelProviderResponseSchema,\n modelProviderResponseSchema,\n modelProviderTypeSchema,\n updateModelRequestSchema,\n} from \"./model-providers\";\n\nconst c = initContract();\n\n/**\n * Zero model providers main contract for /api/zero/model-providers\n *\n * GET: List org-level model providers (any member)\n * POST: Create or update an org-level model provider (admin only)\n */\nexport const zeroModelProvidersMainContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/model-providers\",\n headers: authHeadersSchema,\n responses: {\n 200: modelProviderListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List org-level model providers\",\n },\n upsert: {\n method: \"POST\",\n path: \"/api/zero/model-providers\",\n headers: authHeadersSchema,\n body: upsertModelProviderRequestSchema,\n responses: {\n 200: upsertModelProviderResponseSchema,\n 201: upsertModelProviderResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update an org-level model provider (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersMainContract =\n typeof zeroModelProvidersMainContract;\n\n/**\n * Zero model providers by type contract for /api/zero/model-providers/:type\n *\n * DELETE: Delete an org-level model provider (admin only)\n */\nexport const zeroModelProvidersByTypeContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/model-providers/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: modelProviderTypeSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete an org-level model provider (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersByTypeContract =\n typeof zeroModelProvidersByTypeContract;\n\n/**\n * Zero model providers default contract for /api/zero/model-providers/:type/default\n *\n * POST: Set org-level model provider as default (admin only)\n */\nexport const zeroModelProvidersDefaultContract = c.router({\n setDefault: {\n method: \"POST\",\n path: \"/api/zero/model-providers/:type/default\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: modelProviderTypeSchema,\n }),\n body: z.undefined(),\n responses: {\n 200: modelProviderResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Set org-level model provider as default (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersDefaultContract =\n typeof zeroModelProvidersDefaultContract;\n\n/**\n * Zero model providers update model contract for /api/zero/model-providers/:type/model\n *\n * PATCH: Update model selection for org-level provider (admin only)\n */\nexport const zeroModelProvidersUpdateModelContract = c.router({\n updateModel: {\n method: \"PATCH\",\n path: \"/api/zero/model-providers/:type/model\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: modelProviderTypeSchema,\n }),\n body: updateModelRequestSchema,\n responses: {\n 200: modelProviderResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update model selection for org-level provider (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersUpdateModelContract =\n typeof zeroModelProvidersUpdateModelContract;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n secretResponseSchema,\n secretListResponseSchema,\n secretNameSchema,\n setSecretRequestSchema,\n} from \"./secrets\";\nimport {\n variableResponseSchema,\n variableListResponseSchema,\n variableNameSchema,\n setVariableRequestSchema,\n} from \"./variables\";\n\nconst c = initContract();\n\n/**\n * Zero secrets contract for /api/zero/secrets\n *\n * GET: List all secrets (metadata only)\n * POST: Create or update a secret (platform → infra proxy)\n */\nexport const zeroSecretsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/secrets\",\n headers: authHeadersSchema,\n responses: {\n 200: secretListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all secrets (metadata only)\",\n },\n set: {\n method: \"POST\",\n path: \"/api/zero/secrets\",\n headers: authHeadersSchema,\n body: setSecretRequestSchema,\n responses: {\n 200: secretResponseSchema,\n 201: secretResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update a secret\",\n },\n});\n\nexport type ZeroSecretsContract = typeof zeroSecretsContract;\n\n/**\n * Zero secrets by name contract for /api/zero/secrets/[name]\n *\n * DELETE: Delete a secret by name\n */\nexport const zeroSecretsByNameContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/secrets/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: secretNameSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete a secret by name\",\n },\n});\n\nexport type ZeroSecretsByNameContract = typeof zeroSecretsByNameContract;\n\n/**\n * Zero variables contract for /api/zero/variables\n *\n * GET: List all variables (includes values)\n * POST: Create or update a variable (platform → infra proxy)\n */\nexport const zeroVariablesContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/variables\",\n headers: authHeadersSchema,\n responses: {\n 200: variableListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all variables (includes values)\",\n },\n set: {\n method: \"POST\",\n path: \"/api/zero/variables\",\n headers: authHeadersSchema,\n body: setVariableRequestSchema,\n responses: {\n 200: variableResponseSchema,\n 201: variableResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update a variable\",\n },\n});\n\nexport type ZeroVariablesContract = typeof zeroVariablesContract;\n\n/**\n * Zero variables by name contract for /api/zero/variables/[name]\n *\n * DELETE: Delete a variable by name\n */\nexport const zeroVariablesByNameContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/variables/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: variableNameSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete a variable by name\",\n },\n});\n\nexport type ZeroVariablesByNameContract = typeof zeroVariablesByNameContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { storedChatMessageSchema } from \"./sessions\";\n\nconst c = initContract();\n\n/**\n * Zero session response schema — uses `agentId` instead of `agentComposeId`.\n */\nconst zeroSessionResponseSchema = z.object({\n id: z.string(),\n agentId: z.string(),\n conversationId: z.string().nullable(),\n artifactName: z.string().nullable(),\n secretNames: z.array(z.string()).nullable(),\n chatMessages: z.array(storedChatMessageSchema).optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Zero sessions proxy contract.\n * GET /api/zero/sessions/:id → forwards to GET /api/agent/sessions/:id\n */\nexport const zeroSessionsByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/sessions/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Session ID is required\"),\n }),\n responses: {\n 200: zeroSessionResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get session by ID (zero proxy)\",\n },\n});\n\nexport type ZeroSessionsByIdContract = typeof zeroSessionsByIdContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Integration Slack message contract\n * POST /api/zero/integrations/slack/message\n *\n * Sends a Slack message via the org's installed bot token.\n * Requires `integration-slack:write` capability.\n */\nexport const integrationsSlackMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/message\",\n headers: authHeadersSchema,\n body: z.object({\n channel: z.string().min(1, \"Channel ID is required\"),\n text: z.string().optional(),\n threadTs: z.string().optional(),\n blocks: z.array(z.object({ type: z.string() }).passthrough()).optional(),\n }),\n responses: {\n 200: z.object({\n ok: z.literal(true),\n ts: z.string().optional(),\n channel: z.string().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Send a Slack message via org bot token\",\n },\n});\n\nexport type IntegrationsSlackMessageContract =\n typeof integrationsSlackMessageContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n// ---------------------------------------------------------------------------\n// Response schemas\n// ---------------------------------------------------------------------------\n\nconst autoRechargeSchema = z.object({\n enabled: z.boolean(),\n threshold: z.number().nullable(),\n amount: z.number().nullable(),\n});\n\nconst billingStatusResponseSchema = z.object({\n tier: z.string(),\n credits: z.number(),\n subscriptionStatus: z.string().nullable(),\n currentPeriodEnd: z.string().nullable(),\n hasSubscription: z.boolean(),\n autoRecharge: autoRechargeSchema,\n});\n\nconst checkoutResponseSchema = z.object({\n url: z.string(),\n});\n\nconst portalResponseSchema = z.object({\n url: z.string(),\n});\n\n// ---------------------------------------------------------------------------\n// Request schemas\n// ---------------------------------------------------------------------------\n\nconst checkoutRequestSchema = z.object({\n tier: z.enum([\"pro\", \"team\"]),\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n});\n\nconst portalRequestSchema = z.object({\n returnUrl: z.string().min(1),\n});\n\nconst autoRechargeUpdateRequestSchema = z.object({\n enabled: z.boolean(),\n threshold: z.number().int().positive().optional(),\n amount: z.number().int().min(1000).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Contracts\n// ---------------------------------------------------------------------------\n\n/**\n * Zero contract for GET /api/zero/billing/status\n */\nexport const zeroBillingStatusContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/status\",\n headers: authHeadersSchema,\n responses: {\n 200: billingStatusResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get billing status for current org\",\n },\n});\n\nexport type ZeroBillingStatusContract = typeof zeroBillingStatusContract;\n\n/**\n * Zero contract for POST /api/zero/billing/checkout\n */\nexport const zeroBillingCheckoutContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/checkout\",\n headers: authHeadersSchema,\n body: checkoutRequestSchema,\n responses: {\n 200: checkoutResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe checkout session\",\n },\n});\n\nexport type ZeroBillingCheckoutContract = typeof zeroBillingCheckoutContract;\n\n/**\n * Zero contract for POST /api/zero/billing/portal\n */\nexport const zeroBillingPortalContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/portal\",\n headers: authHeadersSchema,\n body: portalRequestSchema,\n responses: {\n 200: portalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe billing portal session\",\n },\n});\n\nexport type ZeroBillingPortalContract = typeof zeroBillingPortalContract;\n\n/**\n * Zero contract for /api/zero/billing/auto-recharge\n */\nexport const zeroBillingAutoRechargeContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/auto-recharge\",\n headers: authHeadersSchema,\n responses: {\n 200: autoRechargeSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get auto-recharge configuration\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/billing/auto-recharge\",\n headers: authHeadersSchema,\n body: autoRechargeUpdateRequestSchema,\n responses: {\n 200: autoRechargeSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update auto-recharge configuration\",\n },\n});\n\nexport type ZeroBillingAutoRechargeContract =\n typeof zeroBillingAutoRechargeContract;\n\n// Inferred types from Zod schemas\nexport type BillingStatusResponse = z.infer<typeof billingStatusResponseSchema>;\nexport type AutoRechargeConfig = z.infer<typeof autoRechargeSchema>;\nexport type CheckoutResponse = z.infer<typeof checkoutResponseSchema>;\nexport type PortalResponse = z.infer<typeof portalResponseSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst memberUsageSchema = z.object({\n userId: z.string(),\n email: z.string(),\n inputTokens: z.number(),\n outputTokens: z.number(),\n cacheReadInputTokens: z.number(),\n cacheCreationInputTokens: z.number(),\n creditsCharged: z.number(),\n});\n\nconst usageMembersResponseSchema = z.object({\n period: z\n .object({\n start: z.string(),\n end: z.string(),\n })\n .nullable(),\n members: z.array(memberUsageSchema),\n});\n\n/**\n * Zero contract for GET /api/zero/usage/members\n */\nexport const zeroUsageMembersContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/usage/members\",\n headers: authHeadersSchema,\n responses: {\n 200: usageMembersResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get per-member usage for current billing period\",\n },\n});\n\nexport type ZeroUsageMembersContract = typeof zeroUsageMembersContract;\n\n// Inferred types from Zod schemas\nexport type MemberUsage = z.infer<typeof memberUsageSchema>;\nexport type UsageMembersResponse = z.infer<typeof usageMembersResponseSchema>;\n","/**\n * Storage name generation functions for agent instructions and skills.\n * These functions create standardized storage names used across CLI and Web packages.\n */\n\n/**\n * Sentinel userId for org-level storages (volumes).\n * Volumes are shared resources within an org — they use this constant\n * instead of a real userId so the (orgId, userId, name, type)\n * constraint keeps them unique per org, not per user.\n */\nexport const VOLUME_ORG_USER_ID = \"__org__\";\n\n/**\n * Sentinel orgId for system-level storages (shared across all orgs).\n * Used for official skills that are cached globally, not per-org.\n */\nexport const SYSTEM_ORG_ID = \"__system__\";\n\n/**\n * Generate the storage name for agent instructions.\n * Format: agent-instructions@{agentName}\n *\n * @param agentName - Name of the agent (compose name)\n * @returns Storage name for the instructions\n */\nexport function getInstructionsStorageName(agentName: string): string {\n return `agent-instructions@${agentName}`;\n}\n\n/**\n * Generate the storage name for an agent skill.\n * Format: agent-skills@{fullPath}\n *\n * @param fullPath - Full path from GitHub URL (e.g., \"owner/repo/tree/branch/path\")\n * @returns Storage name for the skill\n */\nexport function getSkillStorageName(fullPath: string): string {\n return `agent-skills@${fullPath}`;\n}\n","/**\n * Framework utilities\n *\n * Defines supported agent frameworks and validation functions.\n */\n\n/**\n * Supported framework identifiers\n */\nexport const SUPPORTED_FRAMEWORKS = [\"claude-code\"] as const;\n\nexport type SupportedFramework = (typeof SUPPORTED_FRAMEWORKS)[number];\n\n/**\n * Check if a framework is supported\n */\nexport function isSupportedFramework(\n framework: string | undefined,\n): framework is SupportedFramework {\n if (!framework) return false;\n return SUPPORTED_FRAMEWORKS.includes(framework as SupportedFramework);\n}\n\n/**\n * Assert that a framework is supported, throwing an error if not\n *\n * @param framework - The framework to validate\n * @param context - Optional context for the error message (e.g., function name)\n * @throws Error if framework is not supported\n */\nexport function assertSupportedFramework(\n framework: string | undefined,\n context?: string,\n): asserts framework is SupportedFramework {\n if (!isSupportedFramework(framework)) {\n const contextMsg = context ? ` in ${context}` : \"\";\n throw new Error(\n `Unsupported framework \"${framework}\"${contextMsg}. Supported frameworks: ${SUPPORTED_FRAMEWORKS.join(\", \")}`,\n );\n }\n}\n\n/**\n * Get a validated framework, defaulting to claude-code if undefined\n *\n * Use this for functions where undefined framework should default to claude-code.\n * Throws an error for unknown frameworks.\n *\n * @param framework - The framework to validate (undefined defaults to claude-code)\n * @returns The validated framework\n * @throws Error if framework is defined but not supported\n */\nexport function getValidatedFramework(\n framework: string | undefined,\n): SupportedFramework {\n if (framework === undefined) {\n return \"claude-code\";\n }\n assertSupportedFramework(framework);\n return framework;\n}\n\n/**\n * Framework display names for UI\n */\nconst FRAMEWORK_DISPLAY_NAMES: Record<SupportedFramework, string> = {\n \"claude-code\": \"Claude Code\",\n};\n\n/**\n * Get the display name for a framework\n *\n * @param framework - The framework identifier\n * @returns The human-readable display name\n * @throws Error if framework is not supported\n */\nexport function getFrameworkDisplayName(framework: string): string {\n assertSupportedFramework(framework);\n return FRAMEWORK_DISPLAY_NAMES[framework];\n}\n\n/**\n * Canonical instructions filename for each framework.\n */\nconst FRAMEWORK_INSTRUCTIONS_FILENAMES: Record<SupportedFramework, string> = {\n \"claude-code\": \"CLAUDE.md\",\n};\n\n/**\n * Get the canonical instructions filename for a framework\n *\n * Each framework expects instructions at a specific filename:\n * - claude-code: CLAUDE.md (read from ~/.claude/)\n *\n * Used by CLI (upload) and web API (read) to ensure a symmetric contract.\n *\n * @param framework - The framework name (undefined defaults to claude-code)\n * @returns The canonical filename for instructions\n * @throws Error if framework is defined but not supported\n */\nexport function getInstructionsFilename(framework?: string): string {\n const validated = getValidatedFramework(framework);\n return FRAMEWORK_INSTRUCTIONS_FILENAMES[validated];\n}\n","/**\n * Feature switch system\n *\n * Provides centralized feature flag management with user-identity based overrides.\n * User IDs are stored as SHA-1 hashes to avoid exposing plain-text identifiers in source code.\n */\n\nimport { FeatureSwitchKey } from \"./feature-switch-key\";\n\nexport interface FeatureSwitch {\n readonly maintainer: string;\n readonly enabled: boolean;\n readonly enabledUserHashes?: readonly string[];\n readonly enabledEmailHashes?: readonly string[];\n}\n\nconst sha1Cache = new Map<string, string>();\n\nasync function sha1(input: string): Promise<string> {\n const cached = sha1Cache.get(input);\n if (cached) return cached;\n\n const data = new TextEncoder().encode(input);\n const hashBuffer = await crypto.subtle.digest(\"SHA-1\", data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hex = hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n sha1Cache.set(input, hex);\n return hex;\n}\n\n/**\n * Compute the SHA-1 hash of an email address (lowercased).\n * Used for email-based feature switch targeting.\n */\nexport async function computeEmailHash(email: string): Promise<string> {\n return sha1(email.toLowerCase());\n}\n\nconst STAFF_USER_HASHES: readonly string[] = [\n \"afc25aa601481d794372ed765038148d3a160e2a\",\n \"1e7de00267c699185653df499f68e8383013ca08\",\n \"b397fa9b0330b421a5113ac88dd2b01ca2067cfe\",\n \"d938bb6e49cb8ccfaa962942d69c9ccd1ee239af\",\n \"67a65740246389d7fecf7702f8b7d6914ad38dc5\",\n \"55651a8b2c85b35ff0629fa3d4718b9476069d0f\",\n];\n\n/**\n * Registry of all feature switches\n */\nconst FEATURE_SWITCHES: Record<FeatureSwitchKey, FeatureSwitch> = {\n [FeatureSwitchKey.Pricing]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.Dummy]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: true,\n },\n [FeatureSwitchKey.Agents]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: true,\n },\n [FeatureSwitchKey.Secrets]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n },\n [FeatureSwitchKey.Artifacts]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n },\n [FeatureSwitchKey.ApiKeys]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n },\n [FeatureSwitchKey.AhrefsConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.CanvaConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.ComputerConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.DeelConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.DocuSignConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.DropboxConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.FigmaConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.MercuryConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.NeonConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.GarminConnectConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n\n [FeatureSwitchKey.RedditConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.IntervalsIcuConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.SupabaseConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.CloseConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.WebflowConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.OutlookMailConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.OutlookCalendarConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.MetaAdsConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.StripeConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.PosthogConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.MailchimpConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.ResendConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.GitHubIntegration]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.TelegramIntegration]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.DataExport]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.ShowSystemPrompt]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n [FeatureSwitchKey.Usage]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n },\n};\n\n/**\n * Evaluate all feature switches at once for the given user.\n *\n * Computes the user hash once and checks all switches synchronously,\n * avoiding per-key async overhead.\n */\nexport async function getAllFeatureStates(\n userId?: string,\n email?: string,\n): Promise<Record<FeatureSwitchKey, boolean>> {\n const switches = Object.values(FEATURE_SWITCHES);\n const userHash =\n userId && switches.some((s) => s.enabledUserHashes?.length)\n ? await sha1(userId)\n : undefined;\n const emailHash =\n email && switches.some((s) => s.enabledEmailHashes?.length)\n ? await sha1(email.toLowerCase())\n : undefined;\n\n const result = {} as Record<FeatureSwitchKey, boolean>;\n for (const key of Object.values(FeatureSwitchKey)) {\n const fs = FEATURE_SWITCHES[key];\n if (fs.enabled) {\n result[key] = true;\n } else if (userHash && fs.enabledUserHashes?.includes(userHash)) {\n result[key] = true;\n } else if (emailHash && fs.enabledEmailHashes?.includes(emailHash)) {\n result[key] = true;\n } else {\n result[key] = false;\n }\n }\n return result;\n}\n\n/**\n * Check if a feature is enabled for the given user.\n *\n * When `userId` is provided and the switch has `enabledUserHashes`,\n * the userId is SHA-1 hashed and compared against the stored hashes.\n * When `email` is provided and the switch has `enabledEmailHashes`,\n * the email is SHA-1 hashed (lowercased) and compared.\n */\nexport async function isFeatureEnabled(\n key: FeatureSwitchKey,\n userId?: string,\n email?: string,\n): Promise<boolean> {\n const featureSwitch = FEATURE_SWITCHES[key];\n if (featureSwitch.enabled) {\n return true;\n }\n if (userId && featureSwitch.enabledUserHashes?.length) {\n const hash = await sha1(userId);\n if (featureSwitch.enabledUserHashes.includes(hash)) return true;\n }\n if (email && featureSwitch.enabledEmailHashes?.length) {\n const hash = await sha1(email.toLowerCase());\n if (featureSwitch.enabledEmailHashes.includes(hash)) return true;\n }\n return false;\n}\n","import { parse as parseYaml } from \"yaml\";\nimport { resolveSkillRef, parseGitHubTreeUrl } from \"./github-url\";\n\n/**\n * Parsed skill frontmatter from SKILL.md\n */\nexport interface SkillFrontmatter {\n name?: string;\n description?: string;\n vm0_secrets?: string[];\n vm0_vars?: string[];\n}\n\n/**\n * Parse frontmatter from SKILL.md content.\n * Extracts YAML between --- markers at the start of the file.\n *\n * @param content - Raw content of SKILL.md file\n * @returns Parsed frontmatter fields\n */\nexport function parseSkillFrontmatter(content: string): SkillFrontmatter {\n const frontmatterMatch = content.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!frontmatterMatch) {\n return {};\n }\n\n const yamlContent = frontmatterMatch[1];\n if (!yamlContent) {\n return {};\n }\n\n const parsed: unknown = parseYaml(yamlContent);\n\n if (!parsed || typeof parsed !== \"object\") {\n return {};\n }\n\n const data = parsed as Record<string, unknown>;\n\n return {\n name: typeof data.name === \"string\" ? data.name : undefined,\n description:\n typeof data.description === \"string\" ? data.description : undefined,\n vm0_secrets: Array.isArray(data.vm0_secrets)\n ? data.vm0_secrets.filter((s): s is string => typeof s === \"string\")\n : undefined,\n vm0_vars: Array.isArray(data.vm0_vars)\n ? data.vm0_vars.filter((s): s is string => typeof s === \"string\")\n : undefined,\n };\n}\n\n/**\n * Sync skill-declared environment variables with an agent's environment.\n *\n * - Adds `${{ secrets.X }}` / `${{ vars.X }}` entries for skill-declared vars\n * that are missing from the environment.\n * - Removes entries that were previously added by skills (detected by the\n * self-referencing template pattern `KEY = ${{ secrets.KEY }}`) but are no\n * longer declared by any current skill.\n *\n * @param skills - Array of skill GitHub tree URLs\n * @param environment - Current agent environment (mutated in place)\n */\nexport async function mergeSkillEnvironment(\n skills: string[],\n environment: Record<string, string>,\n): Promise<void> {\n const skillDeclared = await collectSkillDeclaredVars(skills);\n\n // Remove stale skill-added entries that are no longer declared by any skill.\n // Skill-added entries have a self-referencing template pattern:\n // KEY = \"${{ secrets.KEY }}\" or KEY = \"${{ vars.KEY }}\"\n for (const key of Object.keys(environment)) {\n const value = environment[key];\n const isSkillAdded =\n value === `\\${{ secrets.${key} }}` || value === `\\${{ vars.${key} }}`;\n if (isSkillAdded && !skillDeclared.has(key)) {\n delete environment[key];\n }\n }\n\n // Add missing entries for current skills\n for (const [name, source] of skillDeclared) {\n if (!(name in environment)) {\n environment[name] =\n source === \"secret\"\n ? `\\${{ secrets.${name} }}`\n : `\\${{ vars.${name} }}`;\n }\n }\n}\n\n/**\n * Collect all env var names declared by the given skills.\n * Returns a map of name → \"secret\" | \"var\".\n */\nasync function collectSkillDeclaredVars(\n skills: string[],\n): Promise<Map<string, \"secret\" | \"var\">> {\n const declared = new Map<string, \"secret\" | \"var\">();\n const results = await Promise.allSettled(\n skills.map((url) => fetchSkillMdContent(url)),\n );\n\n for (const result of results) {\n if (result.status !== \"fulfilled\" || !result.value) {\n continue;\n }\n const fm = parseSkillFrontmatter(result.value);\n if (fm.vm0_secrets) {\n for (const name of fm.vm0_secrets) {\n declared.set(name, \"secret\");\n }\n }\n if (fm.vm0_vars) {\n for (const name of fm.vm0_vars) {\n declared.set(name, \"var\");\n }\n }\n }\n\n return declared;\n}\n\n/**\n * Build the raw GitHub URL for a skill's SKILL.md file.\n * Accepts bare skill names (e.g. \"slack\") or full GitHub tree URLs.\n */\nfunction buildSkillMdUrl(url: string): string | null {\n const resolved = resolveSkillRef(url);\n\n const parsed = parseGitHubTreeUrl(resolved);\n if (!parsed) {\n return null;\n }\n const pathPrefix = parsed.path ? `${parsed.path}/` : \"\";\n return `https://raw.githubusercontent.com/${parsed.owner}/${parsed.repo}/${parsed.branch}/${pathPrefix}SKILL.md`;\n}\n\n/**\n * Fetch the raw SKILL.md content from a GitHub skill URL.\n * Returns null if the URL is invalid or the fetch fails.\n */\nasync function fetchSkillMdContent(skillUrl: string): Promise<string | null> {\n const rawUrl = buildSkillMdUrl(skillUrl);\n if (!rawUrl) {\n return null;\n }\n const res = await fetch(rawUrl);\n if (!res.ok) {\n return null;\n }\n return res.text();\n}\n\n/**\n * Fetch and parse SKILL.md frontmatter from a GitHub skill URL.\n * Returns null if the URL is invalid or the fetch fails.\n */\nexport async function fetchSkillFrontmatter(\n skillUrl: string,\n): Promise<SkillFrontmatter | null> {\n const content = await fetchSkillMdContent(skillUrl);\n if (!content) {\n return null;\n }\n return parseSkillFrontmatter(content);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n runsMainContract,\n runEventsContract,\n runsCancelContract,\n runsQueueContract,\n type RunsListResponse,\n type CancelRunResponse,\n type QueueResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type { CreateRunResponse, GetEventsResponse } from \"../core/types\";\n\n/**\n * Create a run with unified request format\n * Supports new runs, checkpoint resume, and session continue\n * Note: Environment variables are expanded server-side from vars\n */\nexport async function createRun(body: {\n // Shortcuts (mutually exclusive)\n checkpointId?: string;\n sessionId?: string;\n // Base parameters\n agentComposeId?: string;\n agentComposeVersionId?: string;\n conversationId?: string;\n artifactName?: string;\n artifactVersion?: string;\n memoryName?: string;\n vars?: Record<string, string>;\n secrets?: Record<string, string>;\n volumeVersions?: Record<string, string>;\n // Model provider for automatic secret injection\n modelProvider?: string;\n // Debug flag (internal use only)\n debugNoMockClaude?: boolean;\n // Environment validation flag - when true, validates secrets/vars before running\n checkEnv?: boolean;\n // Append text to the agent's system prompt\n appendSystemPrompt?: string;\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools?: string[];\n // Tools to make available in Claude CLI (passed as --tools)\n tools?: string[];\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings?: string;\n // Required\n prompt: string;\n}): Promise<CreateRunResponse> {\n const config = await getClientConfig();\n const client = initClient(runsMainContract, config);\n\n const result = await client.create({ body });\n\n if (result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to create run\");\n}\n\nexport async function getEvents(\n runId: string,\n options?: { since?: number; limit?: number },\n): Promise<GetEventsResponse> {\n const config = await getClientConfig();\n const client = initClient(runEventsContract, config);\n\n const result = await client.getEvents({\n params: { id: runId },\n query: {\n since: options?.since ?? -1,\n limit: options?.limit ?? 100,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch events\");\n}\n\n/**\n * List runs with optional filters\n */\nexport async function listRuns(params?: {\n status?: string; // comma-separated: \"pending,running\"\n agent?: string;\n since?: string; // ISO timestamp\n until?: string; // ISO timestamp\n limit?: number;\n}): Promise<RunsListResponse> {\n const config = await getClientConfig();\n const client = initClient(runsMainContract, config);\n\n const result = await client.list({\n query: {\n status: params?.status,\n agent: params?.agent,\n since: params?.since,\n until: params?.until,\n limit: params?.limit ?? 50,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list runs\");\n}\n\n/**\n * Get org run queue status\n */\nexport async function getRunQueue(): Promise<QueueResponse> {\n const config = await getClientConfig();\n const client = initClient(runsQueueContract, config);\n\n const result = await client.getQueue({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get run queue\");\n}\n\n/**\n * Cancel (kill) a run\n */\nexport async function cancelRun(runId: string): Promise<CancelRunResponse> {\n const config = await getClientConfig();\n const client = initClient(runsCancelContract, config);\n\n const result = await client.cancel({\n params: { id: runId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to cancel run\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n sessionsByIdContract,\n checkpointsByIdContract,\n type ApiErrorResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type { GetSessionResponse, GetCheckpointResponse } from \"../core/types\";\n\n/**\n * Get session by ID\n * Used by run continue to fetch session info including secretNames\n */\nexport async function getSession(\n sessionId: string,\n): Promise<GetSessionResponse> {\n const config = await getClientConfig();\n const client = initClient(sessionsByIdContract, config);\n\n const result = await client.getById({\n params: { id: sessionId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n const errorBody = result.body as ApiErrorResponse;\n const message = errorBody.error?.message || `Session not found: ${sessionId}`;\n throw new Error(message);\n}\n\n/**\n * Get checkpoint by ID\n * Used by run resume to fetch checkpoint info including secretNames\n */\nexport async function getCheckpoint(\n checkpointId: string,\n): Promise<GetCheckpointResponse> {\n const config = await getClientConfig();\n const client = initClient(checkpointsByIdContract, config);\n\n const result = await client.getById({\n params: { id: checkpointId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Checkpoint not found: ${checkpointId}`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n storagesPrepareContract,\n storagesCommitContract,\n storagesDownloadContract,\n storagesListContract,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * Prepare storage for direct S3 upload\n */\nexport async function prepareStorage(body: {\n storageName: string;\n storageType: \"volume\" | \"artifact\" | \"memory\";\n files: Array<{ path: string; hash: string; size: number }>;\n force?: boolean;\n}): Promise<{\n versionId: string;\n existing: boolean;\n uploads?: {\n archive: { key: string; presignedUrl: string };\n manifest: { key: string; presignedUrl: string };\n };\n}> {\n const config = await getClientConfig();\n const client = initClient(storagesPrepareContract, config);\n\n const result = await client.prepare({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to prepare storage\");\n}\n\n/**\n * Commit storage after S3 upload\n */\nexport async function commitStorage(body: {\n storageName: string;\n storageType: \"volume\" | \"artifact\" | \"memory\";\n versionId: string;\n files: Array<{ path: string; hash: string; size: number }>;\n}): Promise<{\n success: true;\n versionId: string;\n storageName: string;\n size: number;\n fileCount: number;\n deduplicated?: boolean;\n}> {\n const config = await getClientConfig();\n const client = initClient(storagesCommitContract, config);\n\n const result = await client.commit({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to commit storage\");\n}\n\n/**\n * Get download URL for storage (volume or artifact)\n */\nexport async function getStorageDownload(query: {\n name: string;\n type: \"volume\" | \"artifact\" | \"memory\";\n version?: string;\n}): Promise<\n | {\n url: string;\n versionId: string;\n fileCount: number;\n size: number;\n }\n | {\n empty: true;\n versionId: string;\n fileCount: 0;\n size: 0;\n }\n> {\n const config = await getClientConfig();\n const client = initClient(storagesDownloadContract, config);\n\n const result = await client.download({\n query: {\n name: query.name,\n type: query.type,\n version: query.version,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Storage \"${query.name}\" not found`);\n}\n\n/**\n * List storages (volumes or artifacts)\n */\nexport async function listStorages(query: {\n type: \"volume\" | \"artifact\" | \"memory\";\n}): Promise<\n Array<{\n name: string;\n size: number;\n fileCount: number;\n updatedAt: string;\n }>\n> {\n const config = await getClientConfig();\n const client = initClient(storagesListContract, config);\n\n const result = await client.list({ query });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Failed to list ${query.type}s`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroUserPreferencesContract,\n type UserPreferencesResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * Get current user's preferences\n */\nexport async function getZeroUserPreferences(): Promise<UserPreferencesResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroUserPreferencesContract, config);\n\n const result = await client.get({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get user preferences\");\n}\n\n/**\n * Update user preferences\n */\nexport async function updateZeroUserPreferences(body: {\n timezone?: string;\n notifyEmail?: boolean;\n notifySlack?: boolean;\n}): Promise<UserPreferencesResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroUserPreferencesContract, config);\n\n const result = await client.update({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to update user preferences\");\n}\n","import { getBaseUrl } from \"./client-factory\";\nimport { getActiveToken, getActiveOrg } from \"../config\";\n\n/**\n * Append ?org=<activeOrg> to a path if activeOrg is configured\n * and the path doesn't already include an org param.\n */\nasync function appendOrgParam(path: string): Promise<string> {\n const activeOrg = await getActiveOrg();\n if (!activeOrg) {\n throw new Error(\n \"No active organization configured. Run: vm0 org use <slug>\",\n );\n }\n\n // Check if org param already exists\n const queryStart = path.indexOf(\"?\");\n if (queryStart !== -1) {\n const params = new URLSearchParams(path.slice(queryStart));\n if (params.has(\"org\")) {\n return path;\n }\n return `${path}&org=${encodeURIComponent(activeOrg)}`;\n }\n\n return `${path}?org=${encodeURIComponent(activeOrg)}`;\n}\n\n/**\n * Get headers for raw HTTP requests (used for non-ts-rest endpoints)\n */\nasync function getRawHeaders(): Promise<Record<string, string>> {\n const token = await getActiveToken();\n if (!token) {\n throw new Error(\"Not authenticated. Run: vm0 auth login\");\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n\n // Add Vercel bypass secret if available\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n return headers;\n}\n\n/**\n * Generic POST request\n */\nexport async function httpPost(path: string, body: unknown): Promise<Response> {\n const baseUrl = await getBaseUrl();\n const headers = await getRawHeaders();\n const orgPath = await appendOrgParam(path);\n\n return fetch(`${baseUrl}${orgPath}`, {\n method: \"POST\",\n headers: {\n ...headers,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n}\n","import { httpPost } from \"../core/http\";\nimport type { SkillFrontmatter } from \"@vm0/core\";\nimport chalk from \"chalk\";\n\ninterface ResolvedSkill {\n storageName: string;\n versionHash: string;\n frontmatter: SkillFrontmatter;\n}\n\ninterface ResolveSkillsResponse {\n resolved: Record<string, ResolvedSkill>;\n unresolved: string[];\n}\n\nfunction isResolveSkillsResponse(\n value: unknown,\n): value is ResolveSkillsResponse {\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as Record<string, unknown>;\n return (\n typeof obj.resolved === \"object\" &&\n obj.resolved !== null &&\n Array.isArray(obj.unresolved)\n );\n}\n\n/**\n * Batch-resolve skill URLs against the server's skill cache.\n * Returns resolved skills (cached) and unresolved skills (need download).\n * Gracefully degrades: any error returns all skills as unresolved.\n */\nexport async function resolveSkills(\n skillUrls: string[],\n): Promise<ResolveSkillsResponse> {\n try {\n const response = await httpPost(\"/api/skills/resolve\", {\n skills: skillUrls,\n });\n if (!response.ok) {\n console.error(\n chalk.dim(\" Skill resolve unavailable, downloading all skills\"),\n );\n return { resolved: {}, unresolved: skillUrls };\n }\n const body: unknown = await response.json();\n if (!isResolveSkillsResponse(body)) {\n console.error(\n chalk.dim(\n \" Skill resolve returned unexpected format, downloading all skills\",\n ),\n );\n return { resolved: {}, unresolved: skillUrls };\n }\n return body;\n } catch {\n console.error(\n chalk.dim(\" Skill resolve unavailable, downloading all skills\"),\n );\n return { resolved: {}, unresolved: skillUrls };\n }\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroOrgContract,\n zeroOrgListContract,\n zeroOrgMembersContract,\n zeroOrgInviteContract,\n zeroOrgLeaveContract,\n zeroOrgDeleteContract,\n type OrgResponse,\n type OrgMembersResponse,\n type OrgListResponse,\n} from \"@vm0/core\";\nimport {\n getClientConfig,\n getBaseUrl,\n handleError,\n} from \"../core/client-factory\";\nimport { getToken } from \"../config\";\n\n/**\n * Get client config that always uses the user token (vm0_live_),\n * not the org token. Used for org list operations.\n */\nasync function getUserTokenClientConfig(): Promise<{\n baseUrl: string;\n baseHeaders: Record<string, string>;\n jsonQuery: false;\n}> {\n const baseUrl = await getBaseUrl();\n const token = await getToken();\n if (!token) {\n throw new Error(\"Not authenticated. Run: vm0 auth login\");\n }\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return { baseUrl, baseHeaders: headers, jsonQuery: false };\n}\n\n/**\n * Get current org info via zero API\n */\nexport async function getZeroOrg(): Promise<OrgResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgContract, config);\n\n const result = await client.get({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get organization\");\n}\n\n/**\n * Update org slug via zero API\n */\nexport async function updateZeroOrg(body: {\n slug: string;\n force?: boolean;\n}): Promise<OrgResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgContract, config);\n\n const result = await client.update({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to update organization\");\n}\n\n/**\n * List all accessible orgs (always uses user token)\n */\nexport async function listZeroOrgs(): Promise<OrgListResponse> {\n const config = await getUserTokenClientConfig();\n const client = initClient(zeroOrgListContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list organizations\");\n}\n\n/**\n * Get org members via zero API\n */\nexport async function getZeroOrgMembers(): Promise<OrgMembersResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgMembersContract, config);\n\n const result = await client.members({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get organization members\");\n}\n\n/**\n * Invite a member to the org via zero API\n */\nexport async function inviteZeroOrgMember(email: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgInviteContract, config);\n\n const result = await client.invite({\n body: { email },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to invite member\");\n}\n\n/**\n * Remove a member from the org via zero API\n */\nexport async function removeZeroOrgMember(email: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgMembersContract, config);\n\n const result = await client.removeMember({\n body: { email },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to remove member\");\n}\n\n/**\n * Leave the current org via zero API\n */\nexport async function leaveZeroOrg(): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgLeaveContract, config);\n\n const result = await client.leave({\n body: {},\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to leave organization\");\n}\n\n/**\n * Delete the current org via zero API\n */\nexport async function deleteZeroOrg(slug: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgDeleteContract, config);\n\n const result = await client.delete({\n body: { slug },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to delete organization\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { zeroSecretsContract, zeroSecretsByNameContract } from \"@vm0/core\";\nimport type { SecretResponse, SecretListResponse } from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List user-level secrets via zero API (metadata only, no values)\n */\nexport async function listZeroSecrets(): Promise<SecretListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list secrets\");\n}\n\n/**\n * Set (create or update) a user-level secret via zero API\n */\nexport async function setZeroSecret(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<SecretResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set secret\");\n}\n\n/**\n * Delete a user-level secret by name via zero API\n */\nexport async function deleteZeroSecret(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Secret \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { zeroVariablesContract, zeroVariablesByNameContract } from \"@vm0/core\";\nimport type { VariableResponse, VariableListResponse } from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List user-level variables via zero API (includes values)\n */\nexport async function listZeroVariables(): Promise<VariableListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list variables\");\n}\n\n/**\n * Set (create or update) a user-level variable via zero API\n */\nexport async function setZeroVariable(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<VariableResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set variable\");\n}\n\n/**\n * Delete a user-level variable by name via zero API\n */\nexport async function deleteZeroVariable(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Variable \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { zeroSecretsContract, zeroSecretsByNameContract } from \"@vm0/core\";\nimport type { SecretResponse, SecretListResponse } from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List org-level secrets via zero API (metadata only, no values)\n */\nexport async function listZeroOrgSecrets(): Promise<SecretListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org secrets\");\n}\n\n/**\n * Set (create or update) an org-level secret via zero API\n */\nexport async function setZeroOrgSecret(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<SecretResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org secret\");\n}\n\n/**\n * Delete an org-level secret by name via zero API\n */\nexport async function deleteZeroOrgSecret(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org secret \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { zeroVariablesContract, zeroVariablesByNameContract } from \"@vm0/core\";\nimport type { VariableResponse, VariableListResponse } from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List org-level variables via zero API (includes values)\n */\nexport async function listZeroOrgVariables(): Promise<VariableListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org variables\");\n}\n\n/**\n * Set (create or update) an org-level variable via zero API\n */\nexport async function setZeroOrgVariable(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<VariableResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org variable\");\n}\n\n/**\n * Delete an org-level variable by name via zero API\n */\nexport async function deleteZeroOrgVariable(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org variable \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroModelProvidersMainContract,\n zeroModelProvidersByTypeContract,\n zeroModelProvidersDefaultContract,\n zeroModelProvidersUpdateModelContract,\n type ModelProviderType,\n type ModelProviderListResponse,\n type ModelProviderResponse,\n type UpsertModelProviderResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List all org-level model providers via zero API\n */\nexport async function listZeroOrgModelProviders(): Promise<ModelProviderListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org model providers\");\n}\n\n/**\n * Create or update an org-level model provider via zero API (admin only)\n */\nexport async function upsertZeroOrgModelProvider(body: {\n type: ModelProviderType;\n secret?: string;\n authMethod?: string;\n secrets?: Record<string, string>;\n selectedModel?: string;\n}): Promise<UpsertModelProviderResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersMainContract, config);\n\n const result = await client.upsert({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org model provider\");\n}\n\n/**\n * Delete an org-level model provider via zero API (admin only)\n */\nexport async function deleteZeroOrgModelProvider(\n type: ModelProviderType,\n): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersByTypeContract, config);\n\n const result = await client.delete({\n params: { type },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org model provider \"${type}\" not found`);\n}\n\n/**\n * Set an org-level model provider as default for its framework via zero API (admin only)\n */\nexport async function setZeroOrgModelProviderDefault(\n type: ModelProviderType,\n): Promise<ModelProviderResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersDefaultContract, config);\n\n const result = await client.setDefault({\n params: { type },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to set default org model provider\");\n}\n\n/**\n * Update model selection for an existing org-level provider via zero API (admin only)\n */\nexport async function updateZeroOrgModelProviderModel(\n type: ModelProviderType,\n selectedModel?: string,\n): Promise<ModelProviderResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersUpdateModelContract, config);\n\n const result = await client.updateModel({\n params: { type },\n body: { selectedModel },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to update org model provider\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroAgentsMainContract,\n zeroAgentsByIdContract,\n zeroAgentInstructionsContract,\n type ZeroAgentResponse,\n type ZeroAgentRequest,\n type ZeroAgentInstructionsResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function createZeroAgent(\n body: ZeroAgentRequest,\n): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsMainContract, config);\n const result = await client.create({ body });\n if (result.status === 201) return result.body;\n handleError(result, \"Failed to create zero agent\");\n}\n\nexport async function listZeroAgents(): Promise<ZeroAgentResponse[]> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsMainContract, config);\n const result = await client.list({ headers: {} });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to list zero agents\");\n}\n\nexport async function getZeroAgent(id: string): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Zero agent \"${id}\" not found`);\n}\n\nexport async function updateZeroAgent(\n id: string,\n body: ZeroAgentRequest,\n): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.update({ params: { id }, body });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to update zero agent \"${id}\"`);\n}\n\nexport async function deleteZeroAgent(id: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.delete({ params: { id } });\n if (result.status === 204) return;\n handleError(result, `Zero agent \"${id}\" not found`);\n}\n\nexport async function getZeroAgentInstructions(\n id: string,\n): Promise<ZeroAgentInstructionsResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentInstructionsContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to get instructions for zero agent \"${id}\"`);\n}\n\nexport async function updateZeroAgentInstructions(\n id: string,\n content: string,\n): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentInstructionsContract, config);\n const result = await client.update({\n params: { id },\n body: { content },\n });\n if (result.status === 200) return;\n handleError(result, `Failed to update instructions for zero agent \"${id}\"`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroConnectorsMainContract,\n zeroConnectorsByTypeContract,\n zeroConnectorSessionsContract,\n zeroConnectorSessionByIdContract,\n zeroComputerConnectorContract,\n type ConnectorListResponse,\n type ConnectorResponse,\n type ConnectorSessionResponse,\n type ConnectorSessionStatusResponse,\n type ComputerConnectorCreateResponse,\n type ConnectorType,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List all connectors for the authenticated user (zero proxy)\n */\nexport async function listZeroConnectors(): Promise<ConnectorListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list connectors\");\n}\n\n/**\n * Get a connector by type (zero proxy)\n * Returns null if not connected (404 response)\n */\nexport async function getZeroConnector(\n type: ConnectorType,\n): Promise<ConnectorResponse | null> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsByTypeContract, config);\n\n const result = await client.get({\n params: { type },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n if (result.status === 404) {\n return null;\n }\n\n handleError(result, `Failed to get connector \"${type}\"`);\n}\n\n/**\n * Delete (disconnect) a connector by type (zero proxy)\n */\nexport async function deleteZeroConnector(type: ConnectorType): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsByTypeContract, config);\n\n const result = await client.delete({\n params: { type },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Connector \"${type}\" not found`);\n}\n\n/**\n * Create a connector session for OAuth device flow (zero proxy)\n */\nexport async function createZeroConnectorSession(\n type: ConnectorType,\n): Promise<ConnectorSessionResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorSessionsContract, config);\n\n const result = await client.create({\n params: { type },\n body: {},\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to create connector session\");\n}\n\n/**\n * Get connector session status (zero proxy)\n */\nexport async function getZeroConnectorSession(\n type: ConnectorType,\n sessionId: string,\n): Promise<ConnectorSessionStatusResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorSessionByIdContract, config);\n\n const result = await client.get({\n params: { type, sessionId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get connector session status\");\n}\n\n/**\n * Create a computer connector (zero proxy)\n */\nexport async function createZeroComputerConnector(): Promise<ComputerConnectorCreateResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroComputerConnectorContract, config);\n\n const result = await client.create({\n body: {},\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to create computer connector\");\n}\n\n/**\n * Delete (disconnect) a computer connector (zero proxy)\n */\nexport async function deleteZeroComputerConnector(): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroComputerConnectorContract, config);\n\n const result = await client.delete({});\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, \"Computer connector not found\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroSchedulesMainContract,\n zeroSchedulesByNameContract,\n zeroSchedulesEnableContract,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type {\n ScheduleResponse,\n ScheduleListResponse,\n DeployScheduleResponse,\n} from \"@vm0/core\";\nimport { getComposeByName } from \"./composes\";\n\n/**\n * Deploy zero schedule (create or update)\n */\nexport async function deployZeroSchedule(body: {\n name: string;\n agentId: string;\n cronExpression?: string;\n atTime?: string;\n intervalSeconds?: number;\n timezone?: string;\n prompt: string;\n description?: string;\n appendSystemPrompt?: string;\n artifactName?: string;\n artifactVersion?: string;\n volumeVersions?: Record<string, string>;\n enabled?: boolean;\n notifyEmail?: boolean;\n notifySlack?: boolean;\n}): Promise<DeployScheduleResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesMainContract, config);\n\n const result = await client.deploy({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to deploy schedule\");\n}\n\n/**\n * List all zero schedules\n */\nexport async function listZeroSchedules(): Promise<ScheduleListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list schedules\");\n}\n\n/**\n * Delete zero schedule by name\n */\nexport async function deleteZeroSchedule(params: {\n name: string;\n agentId: string;\n}): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesByNameContract, config);\n\n const result = await client.delete({\n params: { name: params.name },\n query: { agentId: params.agentId },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Schedule \"${params.name}\" not found on remote`);\n}\n\n/**\n * Enable zero schedule\n */\nexport async function enableZeroSchedule(params: {\n name: string;\n agentId: string;\n}): Promise<ScheduleResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesEnableContract, config);\n\n const result = await client.enable({\n params: { name: params.name },\n body: { agentId: params.agentId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Failed to enable schedule \"${params.name}\"`);\n}\n\n/**\n * Disable zero schedule\n */\nexport async function disableZeroSchedule(params: {\n name: string;\n agentId: string;\n}): Promise<ScheduleResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesEnableContract, config);\n\n const result = await client.disable({\n params: { name: params.name },\n body: { agentId: params.agentId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Failed to disable schedule \"${params.name}\"`);\n}\n\n/**\n * Resolve a zero schedule by agent name using the list API.\n * Searches across all user's schedules and finds by agentId.\n *\n * Returns the full ScheduleResponse so callers can access any field.\n * When an agent has multiple schedules, scheduleName is required for disambiguation.\n * When an agent has exactly one schedule, scheduleName is optional.\n *\n * @throws Error if agent has no schedule or disambiguation is needed\n */\nexport async function resolveZeroScheduleByAgent(\n agentName: string,\n scheduleName?: string,\n): Promise<ScheduleResponse> {\n const compose = await getComposeByName(agentName);\n if (!compose) {\n throw new Error(`Agent not found: ${agentName}`);\n }\n\n const { schedules } = await listZeroSchedules();\n\n const agentSchedules = schedules.filter((s) => s.agentId === compose.id);\n\n if (agentSchedules.length === 0) {\n throw new Error(`No schedule found for agent \"${agentName}\"`);\n }\n\n if (scheduleName) {\n const match = agentSchedules.find((s) => s.name === scheduleName);\n if (!match) {\n const available = agentSchedules.map((s) => s.name).join(\", \");\n throw new Error(\n `Schedule \"${scheduleName}\" not found for agent \"${agentName}\". Available schedules: ${available}`,\n );\n }\n return match;\n }\n\n if (agentSchedules.length === 1) {\n return agentSchedules[0]!;\n }\n\n const available = agentSchedules.map((s) => s.name).join(\", \");\n throw new Error(\n `Agent \"${agentName}\" has multiple schedules. Use --name to specify which one: ${available}`,\n );\n}\n","import chalk from \"chalk\";\nimport { RUN_ERROR_GUIDANCE } from \"@vm0/core\";\nimport { ApiRequestError } from \"../api/core/client-factory\";\n\n/**\n * Wraps a Commander.js action handler with centralized error handling.\n *\n * Catches errors thrown by the action, formats them consistently,\n * and calls process.exit(1). Commands with specific error handling\n * should use an inner try/catch and re-throw for generic handling.\n */\nexport function withErrorHandler<T extends unknown[]>(\n fn: (...args: T) => Promise<void>,\n): (...args: T) => Promise<void> {\n return async (...args: T) => {\n try {\n await fn(...args);\n } catch (error) {\n if (error instanceof ApiRequestError) {\n if (error.code === \"UNAUTHORIZED\") {\n console.error(chalk.red(\"✗ Not authenticated\"));\n console.error(chalk.dim(\" Run: vm0 auth login\"));\n } else {\n const guidance = RUN_ERROR_GUIDANCE[error.code];\n if (guidance) {\n console.error(chalk.red(`✗ ${guidance.title}`));\n console.error(chalk.dim(` ${guidance.guidance}`));\n if (guidance.cliHint) {\n console.error(chalk.dim(` Run: ${guidance.cliHint}`));\n }\n } else {\n console.error(chalk.red(`✗ ${error.status}: ${error.message}`));\n }\n }\n } else if (error instanceof Error) {\n console.error(chalk.red(`✗ ${error.message}`));\n } else {\n console.error(chalk.red(\"✗ An unexpected error occurred\"));\n }\n\n if (error instanceof Error && error.cause instanceof Error) {\n console.error(chalk.dim(` Cause: ${error.cause.message}`));\n }\n\n process.exit(1);\n }\n };\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrg, updateZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Rename your organization slug\")\n .argument(\"<slug>\", \"The new organization slug\")\n .option(\n \"--force\",\n \"Force change existing organization (may break references)\",\n )\n .action(\n withErrorHandler(async (slug: string, options: { force?: boolean }) => {\n try {\n const existingOrg = await getZeroOrg();\n\n if (!options.force) {\n throw new Error(\n `You already have an organization: ${existingOrg.slug}`,\n {\n cause: new Error(\n `To change, use: vm0 zero org set ${slug} --force`,\n ),\n },\n );\n }\n\n const org = await updateZeroOrg({ slug, force: true });\n await saveConfig({ activeOrg: org.slug });\n console.log(chalk.green(`✓ Organization updated to ${org.slug}`));\n console.log();\n console.log(\"Your agents will now be namespaced as:\");\n console.log(chalk.cyan(` ${org.slug}/<agent-name>`));\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"already exists\")\n ) {\n throw new Error(\n `Organization \"${slug}\" is already taken. Please choose a different slug.`,\n );\n }\n throw error;\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgs } from \"../../../lib/api\";\nimport { getActiveOrg } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .description(\"List all accessible organizations\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgs();\n const activeOrg = await getActiveOrg();\n\n console.log(chalk.bold(\"Available organizations:\"));\n for (const org of result.orgs) {\n const isCurrent = org.slug === activeOrg;\n const marker = isCurrent ? chalk.green(\"* \") : \" \";\n const roleLabel = org.role ? ` (${org.role})` : \"\";\n const currentLabel = isCurrent ? chalk.dim(\" ← current\") : \"\";\n console.log(`${marker}${org.slug}${roleLabel}${currentLabel}`);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgs } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const useCommand = new Command()\n .name(\"use\")\n .description(\"Switch to a different organization\")\n .argument(\"<slug>\", \"Organization slug to switch to\")\n .action(\n withErrorHandler(async (slug: string) => {\n const orgList = await listZeroOrgs();\n const target = orgList.orgs.find((s) => s.slug === slug);\n if (!target) {\n throw new Error(`Organization '${slug}' not found or not accessible.`);\n }\n\n await saveConfig({ activeOrg: slug });\n console.log(chalk.green(`✓ Switched to organization: ${slug}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrgMembers } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const membersCommand = new Command()\n .name(\"members\")\n .description(\"View organization members\")\n .action(\n withErrorHandler(async () => {\n const status = await getZeroOrgMembers();\n\n console.log(chalk.bold(`Organization: ${status.slug}`));\n console.log(` Role: ${status.role}`);\n console.log(\n ` Created: ${new Date(status.createdAt).toLocaleDateString()}`,\n );\n console.log();\n console.log(chalk.bold(\"Members:\"));\n for (const member of status.members) {\n const roleTag =\n member.role === \"admin\"\n ? chalk.yellow(` (${member.role})`)\n : chalk.dim(` (${member.role})`);\n console.log(` ${member.email}${roleTag}`);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { inviteZeroOrgMember } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const inviteCommand = new Command()\n .name(\"invite\")\n .description(\"Invite a member to the current organization\")\n .requiredOption(\"--email <email>\", \"Email address of the member to invite\")\n .action(\n withErrorHandler(async (options: { email: string }) => {\n await inviteZeroOrgMember(options.email);\n console.log(chalk.green(`✓ Invitation sent to ${options.email}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { removeZeroOrgMember } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Remove a member from the current organization\")\n .argument(\"<email>\", \"Email address of the member to remove\")\n .action(\n withErrorHandler(async (email: string) => {\n await removeZeroOrgMember(email);\n console.log(chalk.green(`✓ Removed ${email} from organization`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { leaveZeroOrg, listZeroOrgs } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const leaveCommand = new Command()\n .name(\"leave\")\n .description(\"Leave the current organization\")\n .action(\n withErrorHandler(async () => {\n await leaveZeroOrg();\n\n const { orgs } = await listZeroOrgs();\n if (orgs.length === 0) {\n await saveConfig({ activeOrg: undefined });\n console.log(chalk.green(\"✓ Left organization.\"));\n console.log(\n chalk.yellow(\"No remaining organizations. Run: vm0 auth login\"),\n );\n return;\n }\n\n const nextOrg = orgs[0]!.slug;\n await saveConfig({ activeOrg: nextOrg });\n console.log(chalk.green(`✓ Left organization. Switched to: ${nextOrg}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrg } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete the current organization (admin only)\")\n .argument(\"<slug>\", \"Organization slug to confirm deletion\")\n .action(\n withErrorHandler(async (slug: string) => {\n await deleteZeroOrg(slug);\n console.log(chalk.green(`✓ Organization '${slug}' has been deleted.`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { removeCommand } from \"./remove\";\n\nexport const zeroOrgSecretCommand = new Command()\n .name(\"secret\")\n .description(\"Manage org-level secrets (admin)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(removeCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgSecrets } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level secrets\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgSecrets();\n\n if (result.secrets.length === 0) {\n console.log(chalk.dim(\"No org secrets found\"));\n console.log();\n console.log(\"To add an org secret:\");\n console.log(\n chalk.cyan(\" vm0 zero org secret set MY_API_KEY --body <value>\"),\n );\n return;\n }\n\n console.log(chalk.bold(\"Org Secrets:\"));\n console.log();\n\n for (const secret of result.secrets) {\n console.log(` ${chalk.cyan(secret.name)}`);\n if (secret.description) {\n console.log(` ${chalk.dim(secret.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.secrets.length} secret(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgSecret } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptPassword,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update an org-level secret (admin only)\")\n .argument(\"<name>\", \"Secret name (uppercase, e.g., MY_API_KEY)\")\n .option(\n \"-b, --body <value>\",\n \"Secret value (required in non-interactive mode)\",\n )\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n options: { body?: string; description?: string },\n ) => {\n let value: string;\n\n if (options.body !== undefined) {\n value = options.body;\n } else if (isInteractive()) {\n const prompted = await promptPassword(\"Enter secret value:\");\n if (prompted === undefined) {\n process.exit(0);\n }\n value = prompted;\n } else {\n throw new Error(\"--body is required in non-interactive mode\", {\n cause: new Error(\n `Usage: vm0 zero org secret set ${name} --body \"your-secret-value\"`,\n ),\n });\n }\n\n let secret;\n try {\n secret = await setZeroOrgSecret({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid secret names: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Org secret \"${secret.name}\" saved`));\n console.log();\n console.log(\"Use in vm0.yaml:\");\n console.log(chalk.cyan(` environment:`));\n console.log(chalk.cyan(` ${name}: \\${{ secrets.${name} }}`));\n },\n ),\n );\n","import prompts from \"prompts\";\n\n/**\n * Check if the current environment supports interactive prompts\n * Returns true if stdout is a TTY (interactive terminal)\n */\nexport function isInteractive(): boolean {\n return process.stdout.isTTY === true;\n}\n\n/**\n * Prompt for text input with optional default value\n * @param message - The prompt message\n * @param initial - Optional default value\n * @param validate - Optional validation function\n * @returns The user's input, or undefined if cancelled or non-interactive\n */\nexport async function promptText(\n message: string,\n initial?: string,\n validate?: (value: string) => boolean | string,\n): Promise<string | undefined> {\n // In non-interactive mode, return undefined immediately\n if (!isInteractive()) {\n return undefined;\n }\n\n const response = await prompts(\n {\n type: \"text\",\n name: \"value\",\n message,\n initial,\n validate,\n },\n {\n onCancel: () => {\n // Return undefined on Ctrl+C\n return false;\n },\n },\n );\n\n return response.value;\n}\n\n/**\n * Prompt for yes/no confirmation\n * @param message - The prompt message\n * @param initial - Default value (true = yes, false = no)\n * @returns true if confirmed, false if declined, undefined if cancelled or non-interactive\n */\nexport async function promptConfirm(\n message: string,\n initial = true,\n): Promise<boolean | undefined> {\n // In non-interactive mode, return undefined immediately\n if (!isInteractive()) {\n return undefined;\n }\n\n const response = await prompts(\n {\n type: \"confirm\",\n name: \"value\",\n message,\n initial,\n },\n {\n onCancel: () => {\n return false;\n },\n },\n );\n\n return response.value;\n}\n\n/**\n * Choice option for select prompts\n */\ninterface SelectChoice<T> {\n title: string;\n value: T;\n description?: string;\n}\n\n/**\n * Prompt for selecting from a list of options\n * @param message - The prompt message\n * @param choices - Array of choices with title, value, and optional description\n * @param initial - Index of the default selection (0-based)\n * @returns The selected value, or undefined if cancelled or non-interactive\n */\nexport async function promptSelect<T>(\n message: string,\n choices: SelectChoice<T>[],\n initial?: number,\n): Promise<T | undefined> {\n // In non-interactive mode, return undefined immediately\n if (!isInteractive()) {\n return undefined;\n }\n\n const response = await prompts(\n {\n type: \"select\",\n name: \"value\",\n message,\n choices,\n initial,\n },\n {\n onCancel: () => {\n return false;\n },\n },\n );\n\n return response.value;\n}\n\n/**\n * Prompt for password/secret input (masked)\n * @param message - The prompt message\n * @returns The user's input, or undefined if cancelled or non-interactive\n */\nexport async function promptPassword(\n message: string,\n): Promise<string | undefined> {\n // In non-interactive mode, return undefined immediately\n if (!isInteractive()) {\n return undefined;\n }\n\n const response = await prompts(\n {\n type: \"password\",\n name: \"value\",\n message,\n },\n {\n onCancel: () => {\n return false;\n },\n },\n );\n\n return response.value;\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgSecret } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptConfirm,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Delete an org-level secret (admin only)\")\n .argument(\"<name>\", \"Secret name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete org secret \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroOrgSecret(name);\n console.log(chalk.green(`✓ Org secret \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { removeCommand } from \"./remove\";\n\nexport const zeroOrgVariableCommand = new Command()\n .name(\"variable\")\n .description(\"Manage org-level variables (admin)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(removeCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgVariables } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\n/**\n * Truncate value for display if too long\n */\nfunction truncateValue(value: string, maxLength: number = 60): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength - 15) + \"... [truncated]\";\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level variables\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgVariables();\n\n if (result.variables.length === 0) {\n console.log(chalk.dim(\"No org variables found\"));\n console.log();\n console.log(\"To add an org variable:\");\n console.log(chalk.cyan(\" vm0 zero org variable set MY_VAR <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Org Variables:\"));\n console.log();\n\n for (const variable of result.variables) {\n const displayValue = truncateValue(variable.value);\n console.log(` ${chalk.cyan(variable.name)} = ${displayValue}`);\n if (variable.description) {\n console.log(` ${chalk.dim(variable.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.variables.length} variable(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgVariable } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update an org-level variable (admin only)\")\n .argument(\"<name>\", \"Variable name (uppercase, e.g., MY_VAR)\")\n .argument(\"<value>\", \"Variable value\")\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n value: string,\n options: { description?: string },\n ) => {\n let variable;\n try {\n variable = await setZeroOrgVariable({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid variable names: MY_VAR, API_URL, DEBUG_MODE\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Org variable \"${variable.name}\" saved`));\n console.log();\n console.log(\"Use in vm0.yaml:\");\n console.log(chalk.cyan(` environment:`));\n console.log(chalk.cyan(` ${name}: \\${{ vars.${name} }}`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgVariable } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptConfirm,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Delete an org-level variable (admin only)\")\n .argument(\"<name>\", \"Variable name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete org variable \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroOrgVariable(name);\n console.log(chalk.green(`✓ Org variable \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setupCommand } from \"./setup\";\nimport { removeCommand } from \"./remove\";\nimport { setDefaultCommand } from \"./set-default\";\n\nexport const zeroOrgModelProviderCommand = new Command()\n .name(\"model-provider\")\n .description(\"Manage org-level model providers\")\n .addCommand(listCommand)\n .addCommand(setupCommand)\n .addCommand(removeCommand)\n .addCommand(setDefaultCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgModelProviders } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level model providers\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgModelProviders();\n\n if (result.modelProviders.length === 0) {\n console.log(chalk.dim(\"No org-level model providers configured\"));\n console.log();\n console.log(\"To add an org-level model provider:\");\n console.log(chalk.cyan(\" vm0 zero org model-provider setup\"));\n return;\n }\n\n // Group by framework\n const byFramework = result.modelProviders.reduce(\n (acc, p) => {\n const fw = p.framework;\n if (!acc[fw]) {\n acc[fw] = [];\n }\n acc[fw].push(p);\n return acc;\n },\n {} as Record<string, typeof result.modelProviders>,\n );\n\n console.log(chalk.bold(\"Org Model Providers:\"));\n console.log();\n\n for (const [framework, providers] of Object.entries(byFramework)) {\n console.log(` ${chalk.cyan(framework)}:`);\n for (const provider of providers) {\n const defaultTag = provider.isDefault\n ? chalk.green(\" (default)\")\n : \"\";\n const modelTag = provider.selectedModel\n ? chalk.dim(` [${provider.selectedModel}]`)\n : \"\";\n console.log(` ${provider.type}${defaultTag}${modelTag}`);\n console.log(\n chalk.dim(\n ` Updated: ${new Date(provider.updatedAt).toLocaleString()}`,\n ),\n );\n }\n console.log();\n }\n\n console.log(\n chalk.dim(`Total: ${result.modelProviders.length} provider(s)`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport {\n listZeroOrgModelProviders,\n upsertZeroOrgModelProvider,\n updateZeroOrgModelProviderModel,\n setZeroOrgModelProviderDefault,\n} from \"../../../../lib/api\";\nimport {\n MODEL_PROVIDER_TYPES,\n hasModelSelection,\n hasAuthMethods,\n getSelectableProviderTypes,\n type ModelProviderType,\n} from \"@vm0/core\";\nimport { isInteractive } from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport {\n type SetupInput,\n handleNonInteractiveMode,\n promptForModelSelection,\n promptForAuthMethod,\n promptForSecrets,\n collectSecrets,\n} from \"../../../../lib/domain/model-provider/shared\";\n\nasync function handleInteractiveMode(): Promise<SetupInput | null> {\n if (!isInteractive()) {\n throw new Error(\"Interactive mode requires a TTY\", {\n cause: new Error(\n 'Use non-interactive mode: vm0 zero org model-provider setup --type <type> --secret \"<value>\"',\n ),\n });\n }\n\n // Fetch configured org providers to annotate choices\n const { modelProviders: configuredProviders } =\n await listZeroOrgModelProviders();\n const configuredTypes = new Set(configuredProviders.map((p) => p.type));\n\n // Build provider choices with configuration status (only selectable providers)\n const annotatedChoices = getSelectableProviderTypes().map((type) => {\n const config = MODEL_PROVIDER_TYPES[type];\n const isConfigured = configuredTypes.has(type);\n const isExperimental = hasAuthMethods(type);\n let title: string = config.label;\n if (isConfigured) {\n title = `${title} ✓`;\n }\n if (isExperimental) {\n title = `${title} ${chalk.dim(\"(experimental)\")}`;\n }\n return {\n title,\n value: type,\n };\n });\n\n const typeResponse = await prompts(\n {\n type: \"select\",\n name: \"type\",\n message: \"Select provider type:\",\n choices: annotatedChoices,\n },\n { onCancel: () => process.exit(0) },\n );\n\n const type = typeResponse.type as ModelProviderType;\n\n // Check if provider is already configured using the list we already fetched\n const existingProvider = configuredProviders.find((p) => p.type === type);\n\n if (existingProvider) {\n console.log();\n console.log(`\"${type}\" is already configured`);\n console.log();\n\n const actionResponse = await prompts(\n {\n type: \"select\",\n name: \"action\",\n message: \"\",\n choices: [\n { title: \"Keep existing secret\", value: \"keep\" },\n { title: \"Update secret\", value: \"update\" },\n ],\n },\n { onCancel: () => process.exit(0) },\n );\n\n if (actionResponse.action === \"keep\") {\n const selectedModel = await promptForModelSelection(type);\n return {\n type,\n keepExistingSecret: true,\n selectedModel,\n isInteractiveMode: true,\n };\n }\n // Fall through to secret prompt for \"update\"\n }\n\n const config = MODEL_PROVIDER_TYPES[type];\n\n console.log();\n if (\"helpText\" in config) {\n console.log(chalk.dim(config.helpText));\n }\n console.log();\n\n // Handle multi-auth providers\n if (hasAuthMethods(type)) {\n const authMethod = await promptForAuthMethod(type);\n const secrets = await promptForSecrets(type, authMethod);\n const selectedModel = await promptForModelSelection(type);\n\n return {\n type,\n authMethod,\n secrets,\n selectedModel,\n isInteractiveMode: true,\n };\n }\n\n // Single-secret provider (legacy)\n const secretLabel = \"secretLabel\" in config ? config.secretLabel : \"secret\";\n\n const secretResponse = await prompts(\n {\n type: \"password\",\n name: \"secret\",\n message: `Enter your ${secretLabel}:`,\n validate: (value: string) =>\n value.length > 0 || `${secretLabel} is required`,\n },\n { onCancel: () => process.exit(0) },\n );\n\n const secret = secretResponse.secret as string;\n const selectedModel = await promptForModelSelection(type);\n\n return { type, secret, selectedModel, isInteractiveMode: true };\n}\n\nasync function promptSetAsDefault(\n type: ModelProviderType,\n framework: string,\n isDefault: boolean,\n): Promise<void> {\n if (isDefault) return;\n\n const response = await prompts(\n {\n type: \"confirm\",\n name: \"setDefault\",\n message: \"Set this provider as default?\",\n initial: false,\n },\n { onCancel: () => process.exit(0) },\n );\n\n if (response.setDefault) {\n await setZeroOrgModelProviderDefault(type);\n console.log(chalk.green(`✓ Default for ${framework} set to \"${type}\"`));\n }\n}\n\nexport const setupCommand = new Command()\n .name(\"setup\")\n .description(\"Configure an org-level model provider\")\n .option(\"-t, --type <type>\", \"Provider type (for non-interactive mode)\")\n .option(\n \"-s, --secret <value>\",\n \"Secret value (can be used multiple times, supports VALUE or KEY=VALUE format)\",\n collectSecrets,\n [],\n )\n .option(\n \"-a, --auth-method <method>\",\n \"Auth method (required for multi-auth providers like aws-bedrock)\",\n )\n .option(\"-m, --model <model>\", \"Model selection (for non-interactive mode)\")\n .action(\n withErrorHandler(\n async (options: {\n type?: string;\n secret?: string[];\n authMethod?: string;\n model?: string;\n }) => {\n let input: SetupInput;\n const secretArgs = options.secret ?? [];\n\n if (options.type && secretArgs.length > 0) {\n input = handleNonInteractiveMode({\n type: options.type,\n secret: secretArgs,\n authMethod: options.authMethod,\n model: options.model,\n commandPrefix: \"vm0 zero org model-provider setup\",\n });\n } else if (options.type || secretArgs.length > 0) {\n throw new Error(\"Both --type and --secret are required\");\n } else {\n const result = await handleInteractiveMode();\n if (result === null) {\n return;\n }\n input = result;\n }\n\n // Handle \"keep existing secret\" flow\n if (input.keepExistingSecret) {\n const provider = await updateZeroOrgModelProviderModel(\n input.type,\n input.selectedModel,\n );\n\n const defaultNote = provider.isDefault\n ? ` (default for ${provider.framework})`\n : \"\";\n const modelNote = provider.selectedModel\n ? ` with model: ${provider.selectedModel}`\n : \"\";\n\n if (!hasModelSelection(input.type)) {\n console.log(\n chalk.green(`✓ Org model provider \"${input.type}\" unchanged`),\n );\n } else {\n console.log(\n chalk.green(\n `✓ Org model provider \"${input.type}\" updated${defaultNote}${modelNote}`,\n ),\n );\n }\n if (input.isInteractiveMode) {\n await promptSetAsDefault(\n input.type,\n provider.framework,\n provider.isDefault,\n );\n }\n return;\n }\n\n // Standard upsert flow with secret\n const { provider, created } = await upsertZeroOrgModelProvider({\n type: input.type,\n secret: input.secret,\n authMethod: input.authMethod,\n secrets: input.secrets,\n selectedModel: input.selectedModel,\n });\n\n const action = created ? \"created\" : \"updated\";\n const defaultNote = provider.isDefault\n ? ` (default for ${provider.framework})`\n : \"\";\n const modelNote = provider.selectedModel\n ? ` with model: ${provider.selectedModel}`\n : \"\";\n console.log(\n chalk.green(\n `✓ Org model provider \"${input.type}\" ${action}${defaultNote}${modelNote}`,\n ),\n );\n if (input.isInteractiveMode) {\n await promptSetAsDefault(\n input.type,\n provider.framework,\n provider.isDefault,\n );\n }\n },\n ),\n );\n","import chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport {\n MODEL_PROVIDER_TYPES,\n getModels,\n getDefaultModel,\n hasModelSelection,\n allowsCustomModel,\n getCustomModelPlaceholder,\n hasAuthMethods,\n getAuthMethodsForType,\n getDefaultAuthMethod,\n getSecretsForAuthMethod,\n type ModelProviderType,\n} from \"@vm0/core\";\n\nexport interface SetupInput {\n type: ModelProviderType;\n secret?: string;\n // Multi-auth support\n authMethod?: string;\n secrets?: Record<string, string>;\n selectedModel?: string;\n keepExistingSecret?: boolean;\n isInteractiveMode?: boolean;\n}\n\nfunction validateProviderType(typeStr: string): ModelProviderType {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(typeStr)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${typeStr}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n return typeStr as ModelProviderType;\n}\n\nfunction validateModel(\n type: ModelProviderType,\n modelStr: string,\n): string | never {\n const models = getModels(type);\n\n // Allow any model if provider supports custom models\n if (allowsCustomModel(type)) {\n return modelStr;\n }\n\n if (models && !models.includes(modelStr)) {\n throw new Error(`Invalid model \"${modelStr}\"`, {\n cause: new Error(`Valid models: ${models.join(\", \")}`),\n });\n }\n return modelStr;\n}\n\nfunction validateAuthMethod(\n type: ModelProviderType,\n authMethodStr: string,\n): string | never {\n const authMethods = getAuthMethodsForType(type);\n if (!authMethods || !(authMethodStr in authMethods)) {\n const validMethods = authMethods\n ? Object.keys(authMethods).join(\", \")\n : \"none\";\n throw new Error(`Invalid auth method \"${authMethodStr}\"`, {\n cause: new Error(`Valid auth methods: ${validMethods}`),\n });\n }\n return authMethodStr;\n}\n\n/**\n * Parse secret arguments into a secrets object.\n * Supports two formats:\n * - Single value (e.g., \"sk-xxx\") - auto-mapped to the provider's secret name\n * - KEY=VALUE format (e.g., \"AWS_REGION=us-east-1\") - explicit mapping\n */\nfunction parseSecrets(\n type: ModelProviderType,\n authMethod: string,\n secretArgs: string[],\n): Record<string, string> {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n const secretNames = Object.keys(secretsConfig);\n\n // Single value without = sign: only allowed for single-secret auth methods\n const firstArg = secretArgs[0];\n if (secretArgs.length === 1 && firstArg && !firstArg.includes(\"=\")) {\n if (secretNames.length !== 1) {\n throw new Error(\n \"Must use KEY=VALUE format for multi-secret auth methods\",\n { cause: new Error(`Required secrets: ${secretNames.join(\", \")}`) },\n );\n }\n const firstSecretName = secretNames[0];\n if (!firstSecretName) {\n throw new Error(\"No secrets defined for this auth method\");\n }\n return { [firstSecretName]: firstArg };\n }\n\n // KEY=VALUE format\n const secrets: Record<string, string> = {};\n for (const arg of secretArgs) {\n const eqIndex = arg.indexOf(\"=\");\n if (eqIndex === -1) {\n throw new Error(`Invalid secret format \"${arg}\"`, {\n cause: new Error(\"Use KEY=VALUE format (e.g., AWS_REGION=us-east-1)\"),\n });\n }\n const key = arg.slice(0, eqIndex);\n const value = arg.slice(eqIndex + 1);\n secrets[key] = value;\n }\n return secrets;\n}\n\n/**\n * Validate secrets against the auth method config.\n */\nfunction validateSecrets(\n type: ModelProviderType,\n authMethod: string,\n secrets: Record<string, string>,\n): void {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n // Check required fields\n for (const [name, fieldConfig] of Object.entries(secretsConfig)) {\n if (fieldConfig.required && !secrets[name]) {\n const requiredNames = Object.entries(secretsConfig)\n .filter(([, fc]) => fc.required)\n .map(([n]) => n)\n .join(\", \");\n throw new Error(`Missing required secret: ${name}`, {\n cause: new Error(`Required secrets: ${requiredNames}`),\n });\n }\n }\n\n // Check for unknown fields\n for (const name of Object.keys(secrets)) {\n if (!(name in secretsConfig)) {\n const validNames = Object.keys(secretsConfig).join(\", \");\n throw new Error(`Unknown secret: ${name}`, {\n cause: new Error(`Valid secrets: ${validNames}`),\n });\n }\n }\n}\n\nexport function handleNonInteractiveMode(options: {\n type: string;\n secret: string[];\n authMethod?: string;\n model?: string;\n commandPrefix?: string;\n}): SetupInput {\n const type = validateProviderType(options.type);\n const cmdPrefix = options.commandPrefix ?? \"vm0 org model-provider setup\";\n\n let selectedModel: string | undefined;\n\n if (options.model) {\n selectedModel = validateModel(type, options.model);\n } else if (hasModelSelection(type)) {\n const defaultModel = getDefaultModel(type);\n // Empty defaultModel means \"auto\" mode - don't set selectedModel\n selectedModel = defaultModel || undefined;\n }\n\n // Handle multi-auth providers\n if (hasAuthMethods(type)) {\n // Determine auth method\n let authMethod: string;\n if (options.authMethod) {\n authMethod = validateAuthMethod(type, options.authMethod);\n } else {\n const defaultAuthMethod = getDefaultAuthMethod(type);\n const authMethods = getAuthMethodsForType(type);\n if (!defaultAuthMethod || !authMethods) {\n throw new Error(`Provider \"${type}\" requires --auth-method`);\n }\n // If there's only one auth method, use it; otherwise require explicit selection\n const authMethodNames = Object.keys(authMethods);\n if (authMethodNames.length === 1) {\n authMethod = authMethodNames[0]!;\n } else {\n const methods = authMethodNames.join(\", \");\n throw new Error(\n `--auth-method is required for \"${type}\" (multiple auth methods available)`,\n {\n cause: new Error(\n `Available: ${methods}. Example: ${cmdPrefix} --type ${type} --auth-method ${authMethodNames[0]} --secret KEY=VALUE`,\n ),\n },\n );\n }\n }\n\n // Parse and validate secrets\n const secrets = parseSecrets(type, authMethod, options.secret);\n validateSecrets(type, authMethod, secrets);\n\n return {\n type,\n authMethod,\n secrets,\n selectedModel,\n isInteractiveMode: false,\n };\n }\n\n // Single-secret provider (legacy)\n // Accept single value or KEY=VALUE format\n const secretArgs = options.secret;\n const firstArg = secretArgs[0];\n if (!firstArg) {\n throw new Error(\"Secret is required\");\n }\n\n // If KEY=VALUE format, extract the value\n let secret: string;\n if (firstArg.includes(\"=\")) {\n secret = firstArg.slice(firstArg.indexOf(\"=\") + 1);\n } else {\n secret = firstArg;\n }\n\n return {\n type,\n secret,\n selectedModel,\n isInteractiveMode: false,\n };\n}\n\nexport async function promptForModelSelection(\n type: ModelProviderType,\n): Promise<string | undefined> {\n if (!hasModelSelection(type)) {\n return undefined;\n }\n\n const models = getModels(type) ?? [];\n const defaultModel = getDefaultModel(type);\n const supportsCustomModel = allowsCustomModel(type);\n\n // Build choices\n const modelChoices: { title: string; value: string }[] = [];\n\n // Add auto option if defaultModel is empty string\n if (defaultModel === \"\") {\n modelChoices.push({ title: \"auto (Recommended)\", value: \"\" });\n }\n\n // Add predefined models\n for (const model of models) {\n modelChoices.push({\n title: model === defaultModel ? `${model} (Recommended)` : model,\n value: model,\n });\n }\n\n // Add custom model option if supported\n if (supportsCustomModel) {\n modelChoices.push({ title: \"Custom model ID\", value: \"__custom__\" });\n }\n\n const modelResponse = await prompts(\n {\n type: \"select\",\n name: \"model\",\n message: \"Select model:\",\n choices: modelChoices,\n },\n { onCancel: () => process.exit(0) },\n );\n\n const selected = modelResponse.model as string;\n\n // Handle custom model input\n if (selected === \"__custom__\") {\n const placeholder = getCustomModelPlaceholder(type);\n if (placeholder) {\n console.log(chalk.dim(`Example: ${placeholder}`));\n }\n const customResponse = await prompts(\n {\n type: \"text\",\n name: \"customModel\",\n message: \"Enter model ID:\",\n validate: (value: string) => value.length > 0 || \"Model ID is required\",\n },\n { onCancel: () => process.exit(0) },\n );\n return customResponse.customModel as string;\n }\n\n // Return undefined for auto mode (empty string)\n return selected === \"\" ? undefined : selected;\n}\n\n/**\n * Prompt for auth method selection (only for multi-auth providers)\n */\nexport async function promptForAuthMethod(\n type: ModelProviderType,\n): Promise<string> {\n const authMethods = getAuthMethodsForType(type);\n const defaultAuthMethod = getDefaultAuthMethod(type);\n\n if (!authMethods) {\n return \"default\";\n }\n\n const choices = Object.entries(authMethods).map(([method, config]) => ({\n title:\n method === defaultAuthMethod\n ? `${config.label} (Recommended)`\n : config.label,\n value: method,\n }));\n\n const response = await prompts(\n {\n type: \"select\",\n name: \"authMethod\",\n message: \"Select authentication method:\",\n choices,\n },\n { onCancel: () => process.exit(0) },\n );\n\n return response.authMethod as string;\n}\n\n/**\n * Determine if a secret should be masked (password type)\n * Non-secret values like region should be visible\n */\nfunction isSensitiveSecret(name: string): boolean {\n const nonSecretPatterns = [\"REGION\", \"ENDPOINT\", \"URL\"];\n return !nonSecretPatterns.some((pattern) =>\n name.toUpperCase().includes(pattern),\n );\n}\n\nexport async function promptForSecrets(\n type: ModelProviderType,\n authMethod: string,\n): Promise<Record<string, string>> {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n const secrets: Record<string, string> = {};\n\n for (const [name, fieldConfig] of Object.entries(secretsConfig)) {\n if (fieldConfig.helpText) {\n console.log(chalk.dim(fieldConfig.helpText));\n }\n\n const isSensitive = isSensitiveSecret(name);\n const placeholder =\n \"placeholder\" in fieldConfig ? (fieldConfig.placeholder as string) : \"\";\n\n if (fieldConfig.required) {\n const response = await prompts(\n {\n type: isSensitive ? \"password\" : \"text\",\n name: \"value\",\n message: `${fieldConfig.label}:`,\n initial: placeholder ? \"\" : undefined,\n validate: (value: string) =>\n value.length > 0 || `${fieldConfig.label} is required`,\n },\n { onCancel: () => process.exit(0) },\n );\n secrets[name] = response.value as string;\n } else {\n // Optional field\n const response = await prompts(\n {\n type: isSensitive ? \"password\" : \"text\",\n name: \"value\",\n message: `${fieldConfig.label} (optional):`,\n },\n { onCancel: () => process.exit(0) },\n );\n const value = response.value as string;\n if (value && value.trim()) {\n secrets[name] = value.trim();\n }\n }\n }\n\n return secrets;\n}\n\n/**\n * Collect secret values from repeatable --secret option\n */\nexport function collectSecrets(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgModelProvider } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { MODEL_PROVIDER_TYPES, type ModelProviderType } from \"@vm0/core\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Remove an org-level model provider\")\n .argument(\"<type>\", \"Model provider type to remove\")\n .action(\n withErrorHandler(async (type: string) => {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${type}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n\n await deleteZeroOrgModelProvider(type as ModelProviderType);\n console.log(chalk.green(`✓ Org model provider \"${type}\" removed`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgModelProviderDefault } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { MODEL_PROVIDER_TYPES, type ModelProviderType } from \"@vm0/core\";\n\nexport const setDefaultCommand = new Command()\n .name(\"set-default\")\n .description(\"Set an org-level model provider as default for its framework\")\n .argument(\"<type>\", \"Model provider type to set as default\")\n .action(\n withErrorHandler(async (type: string) => {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${type}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n\n const provider = await setZeroOrgModelProviderDefault(\n type as ModelProviderType,\n );\n console.log(\n chalk.green(\n `✓ Default for ${provider.framework} set to \"${provider.type}\"`,\n ),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport { createCommand } from \"./create\";\nimport { editCommand } from \"./edit\";\nimport { viewCommand } from \"./view\";\nimport { listCommand } from \"./list\";\nimport { deleteCommand } from \"./delete\";\n\nexport const agentCommand = new Command(\"agent\")\n .description(\"Manage zero agents\")\n .addCommand(createCommand)\n .addCommand(editCommand)\n .addCommand(viewCommand)\n .addCommand(listCommand)\n .addCommand(deleteCommand);\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport { createZeroAgent, updateZeroAgentInstructions } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a new zero agent\")\n .requiredOption(\n \"--connectors <items>\",\n \"Comma-separated connector short names (e.g. github,linear)\",\n )\n .option(\"--display-name <name>\", \"Agent display name\")\n .option(\"--description <text>\", \"Agent description\")\n .option(\n \"--sound <tone>\",\n \"Agent tone: professional, friendly, direct, supportive\",\n )\n .option(\"--instructions-file <path>\", \"Path to instructions file\")\n .action(\n withErrorHandler(\n async (options: {\n connectors: string;\n displayName?: string;\n description?: string;\n sound?: string;\n instructionsFile?: string;\n }) => {\n const connectors = options.connectors.split(\",\").map((s) => s.trim());\n\n const agent = await createZeroAgent({\n connectors,\n displayName: options.displayName,\n description: options.description,\n sound: options.sound,\n });\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agent.agentId, content);\n }\n\n console.log(chalk.green(`✓ Zero agent '${agent.agentId}' created`));\n console.log(` Agent ID: ${agent.agentId}`);\n console.log(` Connectors: ${agent.connectors.join(\", \")}`);\n if (agent.displayName) {\n console.log(` Display Name: ${agent.displayName}`);\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport {\n getZeroAgent,\n updateZeroAgent,\n updateZeroAgentInstructions,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const editCommand = new Command()\n .name(\"edit\")\n .description(\"Edit a zero agent\")\n .argument(\"<name>\", \"Agent name\")\n .option(\n \"--connectors <items>\",\n \"Comma-separated connector short names (e.g. github,linear)\",\n )\n .option(\"--display-name <name>\", \"New display name\")\n .option(\"--description <text>\", \"New description\")\n .option(\n \"--sound <tone>\",\n \"New tone: professional, friendly, direct, supportive\",\n )\n .option(\"--instructions-file <path>\", \"Path to new instructions file\")\n .action(\n withErrorHandler(\n async (\n name: string,\n options: {\n connectors?: string;\n displayName?: string;\n description?: string;\n sound?: string;\n instructionsFile?: string;\n },\n ) => {\n const hasAgentUpdate =\n options.connectors !== undefined ||\n options.displayName !== undefined ||\n options.description !== undefined ||\n options.sound !== undefined;\n\n if (!hasAgentUpdate && !options.instructionsFile) {\n throw new Error(\n \"At least one option is required (--connectors, --display-name, --description, --sound, --instructions-file)\",\n );\n }\n\n if (hasAgentUpdate) {\n const current = await getZeroAgent(name);\n const connectors = options.connectors\n ? options.connectors.split(\",\").map((s) => s.trim())\n : current.connectors;\n\n await updateZeroAgent(name, {\n connectors,\n displayName:\n options.displayName !== undefined\n ? options.displayName\n : (current.displayName ?? undefined),\n description:\n options.description !== undefined\n ? options.description\n : (current.description ?? undefined),\n sound:\n options.sound !== undefined\n ? options.sound\n : (current.sound ?? undefined),\n });\n }\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(name, content);\n }\n\n console.log(chalk.green(`✓ Zero agent '${name}' updated`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroAgent, getZeroAgentInstructions } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const viewCommand = new Command()\n .name(\"view\")\n .description(\"View a zero agent\")\n .argument(\"<name>\", \"Agent name\")\n .option(\"--instructions\", \"Also show instructions content\")\n .action(\n withErrorHandler(\n async (name: string, options: { instructions?: boolean }) => {\n const agent = await getZeroAgent(name);\n\n console.log(chalk.bold(agent.agentId));\n if (agent.displayName) console.log(chalk.dim(agent.displayName));\n console.log();\n console.log(`Agent ID: ${agent.agentId}`);\n console.log(`Connectors: ${agent.connectors.join(\", \") || \"-\"}`);\n if (agent.description)\n console.log(`Description: ${agent.description}`);\n if (agent.sound) console.log(`Sound: ${agent.sound}`);\n\n if (options.instructions) {\n console.log();\n const result = await getZeroAgentInstructions(name);\n if (result.content) {\n console.log(chalk.dim(\"── Instructions ──\"));\n console.log(result.content);\n } else {\n console.log(chalk.dim(\"No instructions set\"));\n }\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroAgents } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all zero agents\")\n .action(\n withErrorHandler(async () => {\n const agents = await listZeroAgents();\n\n if (agents.length === 0) {\n console.log(chalk.dim(\"No zero agents found\"));\n console.log(\n chalk.dim(\n ' Create one with: vm0 zero agent create --connectors github --display-name \"My Agent\"',\n ),\n );\n return;\n }\n\n const idWidth = Math.max(8, ...agents.map((a) => a.agentId.length));\n const displayWidth = Math.max(\n 12,\n ...agents.map((a) => (a.displayName ?? \"\").length),\n );\n\n const header = [\n \"AGENT ID\".padEnd(idWidth),\n \"DISPLAY NAME\".padEnd(displayWidth),\n \"CONNECTORS\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const agent of agents) {\n const row = [\n agent.agentId.padEnd(idWidth),\n (agent.displayName ?? \"-\").padEnd(displayWidth),\n agent.connectors.join(\", \") || \"-\",\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroAgent, deleteZeroAgent } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a zero agent\")\n .argument(\"<name>\", \"Agent name\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n await getZeroAgent(name);\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete zero agent '${name}'?`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroAgent(name);\n console.log(chalk.green(`✓ Zero agent '${name}' deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { connectCommand } from \"./connect\";\nimport { listCommand } from \"./list\";\nimport { statusCommand } from \"./status\";\nimport { disconnectCommand } from \"./disconnect\";\n\nexport const zeroConnectorCommand = new Command()\n .name(\"connector\")\n .description(\"Manage third-party service connections (zero)\")\n .addCommand(listCommand)\n .addCommand(statusCommand)\n .addCommand(connectCommand)\n .addCommand(disconnectCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n connectorTypeSchema,\n isFeatureEnabled,\n type ConnectorType,\n} from \"@vm0/core\";\nimport {\n createZeroConnectorSession,\n getZeroConnectorSession,\n createZeroComputerConnector,\n deleteZeroComputerConnector,\n setZeroSecret,\n} from \"../../../lib/api\";\nimport { getBaseUrl } from \"../../../lib/api/core/client-factory\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n checkComputerDependencies,\n startComputerServices,\n} from \"../../../lib/computer/start-services\";\nimport { promptSelect, promptPassword } from \"../../../lib/utils/prompt-utils\";\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Render markdown help text for terminal display\n */\nfunction renderHelpText(text: string): string {\n return text\n .replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n (_m, label: string, url: string) => `${label} (${chalk.cyan(url)})`,\n )\n .replace(/\\*\\*([^*]+)\\*\\*/g, (_m, content: string) => chalk.bold(content))\n .replace(/^> (.+)$/gm, (_m, content: string) =>\n chalk.yellow(` ${content}`),\n );\n}\n\n/**\n * Handle the API token connection flow\n */\nasync function connectViaApiToken(\n connectorType: ConnectorType,\n tokenValue?: string,\n): Promise<void> {\n const config = CONNECTOR_TYPES[connectorType];\n const apiTokenConfig = config.authMethods[\"api-token\"];\n if (!apiTokenConfig) {\n throw new Error(\n `${config.label} does not support API token authentication`,\n );\n }\n\n const secretEntries = Object.entries(apiTokenConfig.secrets);\n const inputSecrets: Record<string, string> = {};\n\n if (tokenValue && secretEntries.length === 1) {\n // Direct token via --token flag\n const [secretName] = secretEntries[0]!;\n inputSecrets[secretName] = tokenValue;\n } else {\n // Interactive: show instructions, then prompt for each secret\n if (apiTokenConfig.helpText) {\n console.log();\n console.log(renderHelpText(apiTokenConfig.helpText));\n console.log();\n }\n\n for (const [secretName, secretConfig] of secretEntries) {\n if (!secretConfig.required) continue;\n\n const value = await promptPassword(\n `${secretConfig.label}${secretConfig.placeholder ? chalk.dim(` (${secretConfig.placeholder})`) : \"\"}:`,\n );\n\n if (!value) {\n throw new Error(\"Cancelled\");\n }\n\n inputSecrets[secretName] = value;\n }\n }\n\n for (const [name, value] of Object.entries(inputSecrets)) {\n await setZeroSecret({\n name,\n value,\n description: `API token for ${config.label} connector`,\n });\n }\n console.log(\n chalk.green(`\\n✓ ${config.label} connected successfully via API token!`),\n );\n}\n\n/**\n * Handle computer connector flow\n */\nasync function connectComputer(): Promise<void> {\n await checkComputerDependencies();\n console.log(chalk.cyan(\"Setting up computer connector...\"));\n\n const credentials = await createZeroComputerConnector();\n await startComputerServices(credentials);\n\n console.log(chalk.cyan(\"Disconnecting computer connector...\"));\n await deleteZeroComputerConnector();\n console.log(chalk.green(\"✓ Disconnected computer\"));\n}\n\n/**\n * Resolve which auth method to use for a connector\n */\nasync function resolveAuthMethod(\n connectorType: ConnectorType,\n tokenFlag?: string,\n): Promise<\"oauth\" | \"api-token\"> {\n const config = CONNECTOR_TYPES[connectorType];\n const oauthFlag = CONNECTOR_TYPES[connectorType].featureFlag;\n const oauthAvailable =\n \"oauth\" in config.authMethods &&\n (!oauthFlag || (await isFeatureEnabled(oauthFlag)));\n const apiTokenAvailable = \"api-token\" in config.authMethods;\n\n if (tokenFlag) {\n if (!apiTokenAvailable) {\n throw new Error(\n `${config.label} does not support API token authentication`,\n );\n }\n return \"api-token\";\n }\n\n if (oauthAvailable && apiTokenAvailable) {\n const selected = await promptSelect<\"oauth\" | \"api-token\">(\n `How would you like to connect ${config.label}?`,\n [\n { title: \"OAuth (Sign in with browser)\", value: \"oauth\" },\n {\n title: `API Token (${config.authMethods[\"api-token\"]!.label})`,\n value: \"api-token\",\n },\n ],\n );\n if (!selected) {\n throw new Error(\"Cancelled\");\n }\n return selected;\n }\n\n if (apiTokenAvailable) return \"api-token\";\n if (oauthAvailable) return \"oauth\";\n\n throw new Error(\n `${config.label} has no available auth methods. OAuth may not be enabled yet.`,\n );\n}\n\n/**\n * Handle OAuth device flow\n */\nasync function connectViaOAuth(connectorType: ConnectorType): Promise<void> {\n console.log(`Connecting ${chalk.cyan(connectorType)}...`);\n\n const session = await createZeroConnectorSession(connectorType);\n const apiUrl = await getBaseUrl();\n const verificationUrl = `${apiUrl}${session.verificationUrl}`;\n\n console.log(chalk.green(\"\\nSession created\"));\n console.log(chalk.cyan(`\\nTo connect, visit: ${verificationUrl}`));\n console.log(\n `\\nThe session expires in ${Math.floor(session.expiresIn / 60)} minutes.`,\n );\n console.log(\"\\nWaiting for authorization...\");\n\n const startTime = Date.now();\n const maxWaitTime = session.expiresIn * 1000;\n const pollInterval = (session.interval || 5) * 1000;\n let isFirstPoll = true;\n\n while (Date.now() - startTime < maxWaitTime) {\n if (!isFirstPoll) {\n await delay(pollInterval);\n }\n isFirstPoll = false;\n\n const status = await getZeroConnectorSession(connectorType, session.id);\n\n switch (status.status) {\n case \"complete\":\n console.log(\n chalk.green(`\\n\\n${connectorType} connected successfully!`),\n );\n return;\n case \"expired\":\n throw new Error(\"Session expired, please try again\");\n case \"error\":\n throw new Error(\n `Connection failed: ${status.errorMessage || \"Unknown error\"}`,\n );\n case \"pending\":\n process.stdout.write(chalk.dim(\".\"));\n break;\n }\n }\n\n throw new Error(\"Session timed out, please try again\");\n}\n\nexport const connectCommand = new Command()\n .name(\"connect\")\n .description(\"Connect a third-party service (e.g., GitHub)\")\n .argument(\"<type>\", \"Connector type (e.g., github)\")\n .option(\"--token <value>\", \"API token value (skip interactive prompt)\")\n .action(\n withErrorHandler(async (type: string, options: { token?: string }) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connectorType = parseResult.data;\n\n if (connectorType === \"computer\") {\n await connectComputer();\n return;\n }\n\n const authMethod = await resolveAuthMethod(connectorType, options.token);\n\n if (authMethod === \"api-token\") {\n await connectViaApiToken(connectorType, options.token);\n return;\n }\n\n await connectViaOAuth(connectorType);\n }),\n );\n","import { spawn } from \"child_process\";\nimport { access, constants } from \"fs/promises\";\nimport { createServer } from \"net\";\nimport type { AddressInfo } from \"net\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport chalk from \"chalk\";\nimport { startNgrokTunnels, stopNgrokTunnels } from \"./ngrok\";\n\ninterface ComputerConnectorCredentials {\n ngrokToken: string;\n bridgeToken: string;\n endpointPrefix: string;\n domain: string;\n}\n\nconst CHROME_CANDIDATES = [\n // macOS absolute paths\n \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\",\n \"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary\",\n \"/Applications/Chromium.app/Contents/MacOS/Chromium\",\n // Linux / PATH-based\n \"google-chrome\",\n \"google-chrome-stable\",\n \"chromium-browser\",\n \"chromium\",\n \"chrome\",\n];\n\nasync function getRandomPort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.listen(0, \"127.0.0.1\", () => {\n const { port } = server.address() as AddressInfo;\n server.close(() => resolve(port));\n });\n server.on(\"error\", reject);\n });\n}\n\nasync function findBinary(...candidates: string[]): Promise<string | null> {\n for (const candidate of candidates) {\n if (candidate.startsWith(\"/\")) {\n try {\n await access(candidate, constants.X_OK);\n return candidate;\n } catch {\n // not found, try next\n }\n } else {\n const found = await new Promise<boolean>((resolve) => {\n const child = spawn(\"which\", [candidate]);\n child.on(\"close\", (code) => resolve(code === 0));\n });\n if (found) return candidate;\n }\n }\n return null;\n}\n\nexport async function checkComputerDependencies(): Promise<void> {\n const wsgidavBinary = await findBinary(\"wsgidav\");\n if (!wsgidavBinary) {\n throw new Error(\n \"wsgidav not found\\n\\nInstall with: pip install wsgidav[cheroot]\",\n );\n }\n\n const chromeBinary = await findBinary(...CHROME_CANDIDATES);\n if (!chromeBinary) {\n throw new Error(\"Chrome not found\\n\\nInstall Google Chrome or Chromium\");\n }\n}\n\nexport async function startComputerServices(\n credentials: ComputerConnectorCredentials,\n): Promise<void> {\n console.log(chalk.cyan(\"Starting computer connector services...\"));\n\n const wsgidavBinary = await findBinary(\"wsgidav\");\n if (!wsgidavBinary) {\n throw new Error(\n \"wsgidav not found\\n\\nInstall with: pip install wsgidav[cheroot]\",\n );\n }\n\n const chromeBinary = await findBinary(...CHROME_CANDIDATES);\n if (!chromeBinary) {\n throw new Error(\"Chrome not found\\n\\nInstall Google Chrome or Chromium\");\n }\n\n const webdavPort = await getRandomPort();\n const cdpPort = await getRandomPort();\n\n const downloadsPath = join(homedir(), \"Downloads\");\n const wsgidav = spawn(\n wsgidavBinary,\n [\n \"--host=127.0.0.1\",\n `--port=${webdavPort}`,\n `--root=${downloadsPath}`,\n \"--auth=anonymous\",\n \"--no-config\",\n ],\n { stdio: [\"ignore\", \"pipe\", \"pipe\"] },\n );\n wsgidav.stdout?.on(\"data\", (data: Buffer) => process.stdout.write(data));\n wsgidav.stderr?.on(\"data\", (data: Buffer) => process.stderr.write(data));\n console.log(chalk.green(\"✓ WebDAV server started\"));\n\n const chrome = spawn(\n chromeBinary,\n [\n `--remote-debugging-port=${cdpPort}`,\n \"--remote-debugging-address=127.0.0.1\",\n \"--headless=new\",\n \"--no-sandbox\",\n \"--disable-gpu\",\n ],\n { stdio: [\"ignore\", \"pipe\", \"pipe\"] },\n );\n chrome.stdout?.on(\"data\", (data: Buffer) => process.stdout.write(data));\n chrome.stderr?.on(\"data\", (data: Buffer) => process.stderr.write(data));\n console.log(chalk.green(\"✓ Chrome started\"));\n\n try {\n await startNgrokTunnels(\n credentials.ngrokToken,\n credentials.endpointPrefix,\n webdavPort,\n cdpPort,\n );\n console.log(\n chalk.green(\n `✓ ngrok tunnels: webdav.${credentials.domain}, chrome.${credentials.domain}`,\n ),\n );\n\n console.log();\n console.log(chalk.green(\"✓ Computer connector active\"));\n console.log(` WebDAV: ~/Downloads → webdav.${credentials.domain}`);\n console.log(\n ` Chrome CDP: port ${cdpPort} → chrome.${credentials.domain}`,\n );\n console.log();\n console.log(chalk.dim(\"Press ^C twice to disconnect\"));\n console.log();\n\n let sigintCount = 0;\n await new Promise<void>((resolve) => {\n const keepAlive = setInterval(() => {}, 60_000);\n const done = () => {\n clearInterval(keepAlive);\n process.removeListener(\"SIGINT\", onSigint);\n resolve();\n };\n const onSigint = () => {\n sigintCount++;\n if (sigintCount === 1) {\n console.log(chalk.dim(\"\\nPress ^C again to disconnect and exit...\"));\n } else {\n done();\n }\n };\n process.on(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", done);\n });\n } finally {\n console.log();\n console.log(chalk.cyan(\"Stopping services...\"));\n wsgidav.kill(\"SIGTERM\");\n chrome.kill(\"SIGTERM\");\n await stopNgrokTunnels();\n console.log(chalk.green(\"✓ Services stopped\"));\n }\n}\n","import ngrok from \"@ngrok/ngrok\";\n\nexport async function startNgrokTunnels(\n ngrokToken: string,\n endpointPrefix: string,\n webdavPort: number,\n cdpPort: number,\n): Promise<void> {\n await ngrok.forward({\n addr: `localhost:${webdavPort}`,\n authtoken: ngrokToken,\n domain: `webdav.${endpointPrefix}.internal`,\n });\n\n await ngrok.forward({\n addr: `localhost:${cdpPort}`,\n authtoken: ngrokToken,\n domain: `chrome.${endpointPrefix}.internal`,\n });\n}\n\nexport async function stopNgrokTunnels(): Promise<void> {\n await ngrok.kill();\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n hasRequiredScopes,\n isFeatureEnabled,\n type ConnectorType,\n} from \"@vm0/core\";\nimport { listZeroConnectors } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all connectors and their status\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroConnectors();\n const connectedMap = new Map(result.connectors.map((c) => [c.type, c]));\n\n const allTypesRaw = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n const allTypes: ConnectorType[] = [];\n for (const type of allTypesRaw) {\n const flag = CONNECTOR_TYPES[type].featureFlag;\n const hasApiToken = \"api-token\" in CONNECTOR_TYPES[type].authMethods;\n if (flag && !(await isFeatureEnabled(flag)) && !hasApiToken) {\n continue;\n }\n allTypes.push(type);\n }\n\n // Calculate column widths\n const typeWidth = Math.max(4, ...allTypes.map((t) => t.length));\n const statusText = \"STATUS\";\n const statusWidth = statusText.length;\n\n // Print header\n const header = [\n \"TYPE\".padEnd(typeWidth),\n statusText.padEnd(statusWidth),\n \"ACCOUNT\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n // Print rows\n for (const type of allTypes) {\n const connector = connectedMap.get(type);\n const scopeMismatch =\n connector !== undefined &&\n connector.authMethod === \"oauth\" &&\n !hasRequiredScopes(type, connector.oauthScopes);\n const status = connector\n ? connector.needsReconnect\n ? chalk.yellow(\"!\".padEnd(statusWidth))\n : scopeMismatch\n ? chalk.yellow(\"!\".padEnd(statusWidth))\n : chalk.green(\"✓\".padEnd(statusWidth))\n : chalk.dim(\"-\".padEnd(statusWidth));\n const account = connector?.needsReconnect\n ? chalk.yellow(\"(reconnect needed)\")\n : scopeMismatch\n ? chalk.yellow(\"(permissions update available)\")\n : connector?.externalUsername\n ? `@${connector.externalUsername}`\n : chalk.dim(\"-\");\n\n const row = [type.padEnd(typeWidth), status, account].join(\" \");\n console.log(row);\n }\n\n // Always show connect hint\n console.log();\n console.log(chalk.dim(\"To connect a service:\"));\n console.log(chalk.dim(\" vm0 zero connector connect <type>\"));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n connectorTypeSchema,\n getScopeDiff,\n hasRequiredScopes,\n} from \"@vm0/core\";\nimport { getZeroConnector } from \"../../../lib/api\";\nimport { formatDateTime } from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst LABEL_WIDTH = 16;\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"Show detailed status of a connector\")\n .argument(\"<type>\", \"Connector type (e.g., github)\")\n .action(\n withErrorHandler(async (type: string) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connector = await getZeroConnector(parseResult.data);\n\n console.log(`Connector: ${chalk.cyan(type)}`);\n console.log();\n\n if (connector) {\n console.log(\n `${\"Status:\".padEnd(LABEL_WIDTH)}${chalk.green(\"connected\")}`,\n );\n console.log(\n `${\"Account:\".padEnd(LABEL_WIDTH)}@${connector.externalUsername}`,\n );\n console.log(\n `${\"Auth Method:\".padEnd(LABEL_WIDTH)}${connector.authMethod}`,\n );\n\n if (connector.oauthScopes && connector.oauthScopes.length > 0) {\n console.log(\n `${\"OAuth Scopes:\".padEnd(LABEL_WIDTH)}${connector.oauthScopes.join(\", \")}`,\n );\n }\n\n if (\n connector.authMethod === \"oauth\" &&\n !hasRequiredScopes(parseResult.data, connector.oauthScopes)\n ) {\n const diff = getScopeDiff(parseResult.data, connector.oauthScopes);\n console.log(\n `${\"Permissions:\".padEnd(LABEL_WIDTH)}${chalk.yellow(\"update available\")}`,\n );\n if (diff.addedScopes.length > 0) {\n console.log(\n `${\" Added:\".padEnd(LABEL_WIDTH)}${diff.addedScopes.join(\", \")}`,\n );\n }\n if (diff.removedScopes.length > 0) {\n console.log(\n `${\" Removed:\".padEnd(LABEL_WIDTH)}${diff.removedScopes.join(\", \")}`,\n );\n }\n }\n\n console.log(\n `${\"Connected:\".padEnd(LABEL_WIDTH)}${formatDateTime(connector.createdAt)}`,\n );\n\n if (connector.updatedAt !== connector.createdAt) {\n console.log(\n `${\"Last Updated:\".padEnd(LABEL_WIDTH)}${formatDateTime(connector.updatedAt)}`,\n );\n }\n\n console.log();\n console.log(chalk.dim(\"To disconnect:\"));\n console.log(chalk.dim(` vm0 zero connector disconnect ${type}`));\n } else {\n console.log(\n `${\"Status:\".padEnd(LABEL_WIDTH)}${chalk.dim(\"not connected\")}`,\n );\n console.log();\n console.log(chalk.dim(\"To connect:\"));\n console.log(chalk.dim(` vm0 zero connector connect ${type}`));\n }\n }),\n );\n","/**\n * Format a date string as relative time (e.g., \"in 2h\", \"3d ago\")\n */\nexport function formatRelativeTime(dateStr: string | null): string {\n if (!dateStr) return \"-\";\n\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n const diffAbs = Math.abs(diffMs);\n\n const minutes = Math.floor(diffAbs / (1000 * 60));\n const hours = Math.floor(diffAbs / (1000 * 60 * 60));\n const days = Math.floor(diffAbs / (1000 * 60 * 60 * 24));\n\n const isPast = diffMs < 0;\n\n if (days > 0) {\n return isPast ? `${days}d ago` : `in ${days}d`;\n } else if (hours > 0) {\n return isPast ? `${hours}h ago` : `in ${hours}h`;\n } else if (minutes > 0) {\n return isPast ? `${minutes}m ago` : `in ${minutes}m`;\n } else {\n return isPast ? \"just now\" : \"soon\";\n }\n}\n\n/**\n * Format a date string with both absolute and relative time\n * e.g., \"2025-01-14 09:00 (in 2h)\"\n * Uses local timezone, but doesn't include timezone in output (shown separately)\n */\nexport function formatDateTime(dateStr: string | null): string {\n if (!dateStr) return \"-\";\n\n const date = new Date(dateStr);\n\n // Format: YYYY-MM-DD HH:MM (no seconds, no timezone - shown separately)\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n\n const formatted = `${year}-${month}-${day} ${hours}:${minutes}`;\n const relative = formatRelativeTime(dateStr);\n\n return `${formatted} (${relative})`;\n}\n\n/**\n * Frequency type for schedule wizard\n */\nexport type ScheduleFrequency =\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"once\"\n | \"loop\";\n\n/**\n * Generate cron expression from user-friendly inputs\n * @param frequency - Schedule frequency type\n * @param time - Time in HH:MM format (24-hour)\n * @param day - Day of week (0-6, Sun=0) for weekly, or day of month (1-31) for monthly\n * @returns Cron expression string\n */\nexport function generateCronExpression(\n frequency: Exclude<ScheduleFrequency, \"once\" | \"loop\">,\n time: string,\n day?: number,\n): string {\n const [hourStr, minuteStr] = time.split(\":\");\n const hour = parseInt(hourStr ?? \"0\", 10);\n const minute = parseInt(minuteStr ?? \"0\", 10);\n\n switch (frequency) {\n case \"daily\":\n return `${minute} ${hour} * * *`;\n case \"weekly\":\n return `${minute} ${hour} * * ${day ?? 1}`;\n case \"monthly\":\n return `${minute} ${hour} ${day ?? 1} * *`;\n }\n}\n\n/**\n * Detect system timezone using Intl API\n * @returns IANA timezone identifier (e.g., \"America/New_York\")\n */\nexport function detectTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\n/**\n * Validate time format (HH:MM, 24-hour)\n * @param time - Time string to validate\n * @returns true if valid, error message if invalid\n */\nexport function validateTimeFormat(time: string): boolean | string {\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) {\n return \"Invalid format. Use HH:MM (e.g., 09:00)\";\n }\n\n const hour = parseInt(match[1]!, 10);\n const minute = parseInt(match[2]!, 10);\n\n if (hour < 0 || hour > 23) {\n return \"Hour must be 0-23\";\n }\n if (minute < 0 || minute > 59) {\n return \"Minute must be 0-59\";\n }\n if (minute % 5 !== 0) {\n return \"Minute must be a multiple of 5 (0, 5, 10, ..., 55)\";\n }\n\n return true;\n}\n\n/**\n * Validate date format (YYYY-MM-DD)\n * @param date - Date string to validate\n * @returns true if valid, error message if invalid\n */\nexport function validateDateFormat(date: string): boolean | string {\n const match = date.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!match) {\n return \"Invalid format. Use YYYY-MM-DD (e.g., 2025-01-15)\";\n }\n\n const year = parseInt(match[1]!, 10);\n const month = parseInt(match[2]!, 10);\n const day = parseInt(match[3]!, 10);\n\n if (year < 2000 || year > 2100) {\n return \"Year must be between 2000 and 2100\";\n }\n if (month < 1 || month > 12) {\n return \"Month must be 1-12\";\n }\n if (day < 1 || day > 31) {\n return \"Day must be 1-31\";\n }\n\n // Validate the date is actually valid (e.g., not Feb 30)\n const testDate = new Date(year, month - 1, day);\n if (\n testDate.getFullYear() !== year ||\n testDate.getMonth() !== month - 1 ||\n testDate.getDate() !== day\n ) {\n return \"Invalid date\";\n }\n\n return true;\n}\n\n/**\n * Get tomorrow's date in local timezone as YYYY-MM-DD\n * @returns Date string in YYYY-MM-DD format\n */\nexport function getTomorrowDateLocal(): string {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n const year = tomorrow.getFullYear();\n const month = String(tomorrow.getMonth() + 1).padStart(2, \"0\");\n const day = String(tomorrow.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Get current time in local timezone as HH:MM\n * @returns Time string in HH:MM format\n */\nexport function getCurrentTimeLocal(): string {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, \"0\");\n const minutes = String(now.getMinutes()).padStart(2, \"0\");\n return `${hours}:${minutes}`;\n}\n\n/**\n * Convert a human-readable datetime string to ISO format\n * Supports formats: \"YYYY-MM-DD HH:MM\" or full ISO string\n * @param dateTimeStr - DateTime string (e.g., \"2025-01-15 14:30\")\n * @returns ISO format string (e.g., \"2025-01-15T14:30:00.000Z\")\n */\nexport function toISODateTime(dateTimeStr: string): string {\n // If already in ISO format, return as-is\n if (dateTimeStr.includes(\"T\") && dateTimeStr.endsWith(\"Z\")) {\n return dateTimeStr;\n }\n\n // Convert \"YYYY-MM-DD HH:MM\" to ISO\n const isoStr = dateTimeStr.replace(\" \", \"T\") + \":00\";\n const date = new Date(isoStr);\n return date.toISOString();\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { CONNECTOR_TYPES, connectorTypeSchema } from \"@vm0/core\";\nimport { deleteZeroConnector } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const disconnectCommand = new Command()\n .name(\"disconnect\")\n .description(\"Disconnect a third-party service\")\n .argument(\"<type>\", \"Connector type to disconnect (e.g., github)\")\n .action(\n withErrorHandler(async (type: string) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connectorType = parseResult.data;\n await deleteZeroConnector(connectorType);\n console.log(chalk.green(`✓ Disconnected ${type}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getZeroUserPreferences,\n updateZeroUserPreferences,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n isInteractive,\n promptText,\n promptConfirm,\n} from \"../../../lib/utils/prompt-utils\";\n\n/**\n * Detect system timezone using Intl API\n */\nfunction detectTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\n/**\n * Validate timezone using Intl.DateTimeFormat\n */\nfunction isValidTimezone(timezone: string): boolean {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: timezone });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Parse on/off flag value\n */\nfunction parseOnOff(flag: string, value: string): boolean {\n const lower = value.toLowerCase();\n if (lower === \"on\" || lower === \"true\" || lower === \"1\") return true;\n if (lower === \"off\" || lower === \"false\" || lower === \"0\") return false;\n throw new Error(\n `Invalid value for --${flag}: \"${value}\". Use \"on\" or \"off\".`,\n );\n}\n\n/**\n * Display current preferences\n */\nfunction displayPreferences(prefs: {\n timezone: string | null;\n notifyEmail: boolean;\n notifySlack: boolean;\n}): void {\n console.log(chalk.bold(\"Current preferences:\"));\n console.log(\n ` Timezone: ${prefs.timezone ? chalk.cyan(prefs.timezone) : chalk.dim(\"not set\")}`,\n );\n console.log(\n ` Email notify: ${prefs.notifyEmail ? chalk.green(\"on\") : chalk.dim(\"off\")}`,\n );\n console.log(\n ` Slack notify: ${prefs.notifySlack ? chalk.green(\"on\") : chalk.dim(\"off\")}`,\n );\n}\n\ninterface PreferenceOpts {\n timezone?: string;\n notifyEmail?: string;\n notifySlack?: string;\n}\n\n/**\n * Build updates from CLI flags, exiting on invalid input\n */\nfunction buildUpdates(opts: PreferenceOpts): {\n timezone?: string;\n notifyEmail?: boolean;\n notifySlack?: boolean;\n} | null {\n const hasTimezone = opts.timezone !== undefined;\n const hasNotifyEmail = opts.notifyEmail !== undefined;\n const hasNotifySlack = opts.notifySlack !== undefined;\n\n if (!hasTimezone && !hasNotifyEmail && !hasNotifySlack) return null;\n\n const updates: {\n timezone?: string;\n notifyEmail?: boolean;\n notifySlack?: boolean;\n } = {};\n\n if (hasTimezone) {\n if (!isValidTimezone(opts.timezone!)) {\n throw new Error(`Invalid timezone: ${opts.timezone}`, {\n cause: new Error(\n \"Use an IANA timezone identifier (e.g., America/New_York, Asia/Shanghai)\",\n ),\n });\n }\n updates.timezone = opts.timezone;\n }\n\n if (hasNotifyEmail) {\n updates.notifyEmail = parseOnOff(\"notify-email\", opts.notifyEmail!);\n }\n\n if (hasNotifySlack) {\n updates.notifySlack = parseOnOff(\"notify-slack\", opts.notifySlack!);\n }\n\n return updates;\n}\n\n/**\n * Print confirmation after a successful update\n */\nfunction printUpdateResult(\n updates: { timezone?: string; notifyEmail?: boolean; notifySlack?: boolean },\n result: {\n timezone: string | null;\n notifyEmail: boolean;\n notifySlack: boolean;\n },\n): void {\n if (updates.timezone !== undefined) {\n console.log(\n chalk.green(\n `Timezone set to ${chalk.cyan(result.timezone ?? updates.timezone)}`,\n ),\n );\n }\n if (updates.notifyEmail !== undefined) {\n console.log(\n chalk.green(\n `Email notifications ${result.notifyEmail ? \"enabled\" : \"disabled\"}`,\n ),\n );\n }\n if (updates.notifySlack !== undefined) {\n console.log(\n chalk.green(\n `Slack notifications ${result.notifySlack ? \"enabled\" : \"disabled\"}`,\n ),\n );\n }\n}\n\n/**\n * Interactive prompts when no flags provided\n */\nasync function interactiveSetup(prefs: {\n timezone: string | null;\n notifyEmail: boolean;\n}): Promise<void> {\n if (!prefs.timezone) {\n const detectedTz = detectTimezone();\n console.log(chalk.dim(`\\nSystem timezone detected: ${detectedTz}`));\n const tz = await promptText(\n \"Set timezone? (enter timezone or leave empty to skip)\",\n detectedTz,\n );\n if (tz?.trim()) {\n if (!isValidTimezone(tz.trim())) {\n throw new Error(`Invalid timezone: ${tz.trim()}`);\n }\n await updateZeroUserPreferences({ timezone: tz.trim() });\n console.log(chalk.green(`Timezone set to ${chalk.cyan(tz.trim())}`));\n }\n }\n\n if (!prefs.notifyEmail) {\n const enable = await promptConfirm(\n \"\\nEnable email notifications for scheduled runs?\",\n false,\n );\n if (enable) {\n await updateZeroUserPreferences({ notifyEmail: true });\n console.log(chalk.green(\"Email notifications enabled\"));\n }\n }\n}\n\n/**\n * vm0 zero preference\n *\n * View or update user preferences (timezone, notifications).\n */\nexport const zeroPreferenceCommand = new Command()\n .name(\"preference\")\n .description(\"View or update your preferences\")\n .option(\"--timezone <timezone>\", \"IANA timezone (e.g., America/New_York)\")\n .option(\"--notify-email <on|off>\", \"Enable or disable email notifications\")\n .option(\"--notify-slack <on|off>\", \"Enable or disable Slack notifications\")\n .action(\n withErrorHandler(async (opts: PreferenceOpts) => {\n const updates = buildUpdates(opts);\n\n if (updates) {\n const result = await updateZeroUserPreferences(updates);\n printUpdateResult(updates, result);\n return;\n }\n\n // No flags: display current preferences\n const prefs = await getZeroUserPreferences();\n displayPreferences(prefs);\n\n if (isInteractive()) {\n await interactiveSetup(prefs);\n } else if (!prefs.timezone) {\n console.log();\n console.log(\n `To set timezone: ${chalk.cyan(\"vm0 zero preference --timezone <timezone>\")}`,\n );\n console.log(\n chalk.dim(\"Example: vm0 zero preference --timezone America/New_York\"),\n );\n }\n }),\n );\n","import { Command } from \"commander\";\nimport { setupCommand } from \"./setup\";\nimport { listCommand } from \"./list\";\nimport { statusCommand } from \"./status\";\nimport { deleteCommand } from \"./delete\";\nimport { enableCommand } from \"./enable\";\nimport { disableCommand } from \"./disable\";\n\nexport const zeroScheduleCommand = new Command()\n .name(\"schedule\")\n .description(\"Manage zero agent schedules\")\n .addCommand(setupCommand)\n .addCommand(listCommand)\n .addCommand(statusCommand)\n .addCommand(deleteCommand)\n .addCommand(enableCommand)\n .addCommand(disableCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n isInteractive,\n promptText,\n promptSelect,\n promptConfirm,\n} from \"../../../lib/utils/prompt-utils\";\nimport {\n generateCronExpression,\n detectTimezone,\n validateTimeFormat,\n validateDateFormat,\n getTomorrowDateLocal,\n getCurrentTimeLocal,\n toISODateTime,\n type ScheduleFrequency,\n} from \"../../../lib/domain/schedule-utils\";\nimport {\n getComposeByName,\n deployZeroSchedule,\n listZeroSchedules,\n enableZeroSchedule,\n getZeroUserPreferences,\n ApiRequestError,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst FREQUENCY_CHOICES = [\n { title: \"Daily\", value: \"daily\" as const, description: \"Run every day\" },\n {\n title: \"Weekly\",\n value: \"weekly\" as const,\n description: \"Run once per week\",\n },\n {\n title: \"Monthly\",\n value: \"monthly\" as const,\n description: \"Run once per month\",\n },\n {\n title: \"One-time\",\n value: \"once\" as const,\n description: \"Run once at specific time\",\n },\n {\n title: \"Loop\",\n value: \"loop\" as const,\n description: \"Run repeatedly at fixed intervals\",\n },\n];\n\nconst DAY_OF_WEEK_CHOICES = [\n { title: \"Monday\", value: 1 },\n { title: \"Tuesday\", value: 2 },\n { title: \"Wednesday\", value: 3 },\n { title: \"Thursday\", value: 4 },\n { title: \"Friday\", value: 5 },\n { title: \"Saturday\", value: 6 },\n { title: \"Sunday\", value: 0 },\n];\n\nfunction parseDayOption(\n day: string,\n frequency: ScheduleFrequency,\n): number | undefined {\n if (frequency === \"weekly\") {\n const dayMap: Record<string, number> = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6,\n };\n return dayMap[day.toLowerCase()];\n } else if (frequency === \"monthly\") {\n const num = parseInt(day, 10);\n if (num >= 1 && num <= 31) {\n return num;\n }\n }\n return undefined;\n}\n\nfunction formatInTimezone(isoDate: string, timezone: string): string {\n const date = new Date(isoDate);\n const parts = new Intl.DateTimeFormat(\"en-CA\", {\n timeZone: timezone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n }).formatToParts(date);\n\n const get = (type: string) => parts.find((p) => p.type === type)?.value ?? \"\";\n return `${get(\"year\")}-${get(\"month\")}-${get(\"day\")} ${get(\"hour\")}:${get(\"minute\")}`;\n}\n\nfunction parseFrequencyFromCron(\n cron: string,\n): { frequency: ScheduleFrequency; day?: number; time: string } | null {\n const parts = cron.split(\" \");\n if (parts.length !== 5) return null;\n\n const [minute, hour, dayOfMonth, , dayOfWeek] = parts;\n const time = `${hour!.padStart(2, \"0\")}:${minute!.padStart(2, \"0\")}`;\n\n if (dayOfMonth === \"*\" && dayOfWeek === \"*\") {\n return { frequency: \"daily\", time };\n } else if (dayOfMonth === \"*\" && dayOfWeek !== \"*\") {\n return { frequency: \"weekly\", day: parseInt(dayOfWeek!, 10), time };\n } else if (dayOfMonth !== \"*\" && dayOfWeek === \"*\") {\n return { frequency: \"monthly\", day: parseInt(dayOfMonth!, 10), time };\n }\n\n return null;\n}\n\ninterface SetupOptions {\n name?: string;\n frequency?: string;\n time?: string;\n day?: string;\n interval?: string;\n timezone?: string;\n prompt?: string;\n artifactName: string;\n enable?: boolean;\n notifyEmail?: boolean;\n notifySlack?: boolean;\n}\n\ninterface ExistingScheduleDefaults {\n frequency?: ScheduleFrequency;\n day?: number;\n time?: string;\n intervalSeconds?: number;\n}\n\ninterface ScheduleListItem {\n name: string;\n agentId: string;\n triggerType?: \"cron\" | \"once\" | \"loop\";\n cronExpression?: string | null;\n atTime?: string | null;\n intervalSeconds?: number | null;\n timezone: string;\n prompt: string;\n enabled?: boolean;\n notifyEmail?: boolean;\n notifySlack?: boolean;\n}\n\nfunction getExistingDefaults(\n existingSchedule: ScheduleListItem | undefined,\n): ExistingScheduleDefaults {\n const defaults: ExistingScheduleDefaults = {};\n\n if (existingSchedule?.triggerType === \"loop\") {\n defaults.frequency = \"loop\";\n defaults.intervalSeconds = existingSchedule.intervalSeconds ?? undefined;\n } else if (existingSchedule?.cronExpression) {\n const parsed = parseFrequencyFromCron(existingSchedule.cronExpression);\n if (parsed) {\n defaults.frequency = parsed.frequency;\n defaults.day = parsed.day;\n defaults.time = parsed.time;\n }\n } else if (existingSchedule?.atTime) {\n defaults.frequency = \"once\";\n }\n\n return defaults;\n}\n\nasync function gatherFrequency(\n optionFrequency: string | undefined,\n existingFrequency: ScheduleFrequency | undefined,\n): Promise<ScheduleFrequency | null> {\n let frequency = optionFrequency as ScheduleFrequency | undefined;\n\n if (\n frequency &&\n [\"daily\", \"weekly\", \"monthly\", \"once\", \"loop\"].includes(frequency)\n ) {\n return frequency;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--frequency is required (daily|weekly|monthly|once|loop)\");\n }\n\n const defaultIndex = existingFrequency\n ? FREQUENCY_CHOICES.findIndex((c) => c.value === existingFrequency)\n : 0;\n\n frequency = await promptSelect<ScheduleFrequency>(\n \"Schedule frequency\",\n FREQUENCY_CHOICES,\n defaultIndex >= 0 ? defaultIndex : 0,\n );\n\n return frequency || null;\n}\n\nasync function gatherDay(\n frequency: ScheduleFrequency,\n optionDay: string | undefined,\n existingDay: number | undefined,\n): Promise<number | null> {\n if (frequency !== \"weekly\" && frequency !== \"monthly\") {\n return null;\n }\n\n if (optionDay) {\n const day = parseDayOption(optionDay, frequency);\n if (day === undefined) {\n throw new Error(\n `Invalid day: ${optionDay}. Use mon-sun for weekly or 1-31 for monthly.`,\n );\n }\n return day;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--day is required for weekly/monthly\");\n }\n\n if (frequency === \"weekly\") {\n const defaultDayIndex =\n existingDay !== undefined\n ? DAY_OF_WEEK_CHOICES.findIndex((c) => c.value === existingDay)\n : 0;\n const day = await promptSelect(\n \"Day of week\",\n DAY_OF_WEEK_CHOICES,\n defaultDayIndex >= 0 ? defaultDayIndex : 0,\n );\n return day ?? null;\n }\n\n const dayStr = await promptText(\n \"Day of month (1-31)\",\n existingDay?.toString() || \"1\",\n );\n if (!dayStr) return null;\n\n const day = parseInt(dayStr, 10);\n if (isNaN(day) || day < 1 || day > 31) {\n throw new Error(\"Day must be between 1 and 31\");\n }\n return day;\n}\n\nasync function gatherRecurringTime(\n optionTime: string | undefined,\n existingTime: string | undefined,\n): Promise<string | undefined> {\n if (optionTime) {\n const validation = validateTimeFormat(optionTime);\n if (validation !== true) {\n throw new Error(`Invalid time: ${validation}`);\n }\n return optionTime;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--time is required (HH:MM format)\");\n }\n\n return await promptText(\n \"Time (HH:MM)\",\n existingTime || \"09:00\",\n validateTimeFormat,\n );\n}\n\nasync function gatherOneTimeSchedule(\n optionDay: string | undefined,\n optionTime: string | undefined,\n existingTime: string | undefined,\n): Promise<string | null> {\n if (optionDay && optionTime) {\n if (!validateDateFormat(optionDay)) {\n throw new Error(\n `Invalid date format: ${optionDay}. Use YYYY-MM-DD format.`,\n );\n }\n if (!validateTimeFormat(optionTime)) {\n throw new Error(`Invalid time format: ${optionTime}. Use HH:MM format.`);\n }\n return `${optionDay} ${optionTime}`;\n }\n\n if (!isInteractive()) {\n throw new Error(\"One-time schedules require interactive mode\", {\n cause: new Error(\n \"Or provide --day (YYYY-MM-DD) and --time (HH:MM) flags\",\n ),\n });\n }\n\n const tomorrowDate = getTomorrowDateLocal();\n const date = await promptText(\n \"Date (YYYY-MM-DD, default tomorrow)\",\n tomorrowDate,\n validateDateFormat,\n );\n if (!date) return null;\n\n const currentTime = getCurrentTimeLocal();\n const time = await promptText(\n \"Time (HH:MM)\",\n existingTime || currentTime,\n validateTimeFormat,\n );\n if (!time) return null;\n\n return `${date} ${time}`;\n}\n\nasync function gatherTimezone(\n optionTimezone: string | undefined,\n existingTimezone: string | undefined | null,\n): Promise<string | undefined> {\n if (optionTimezone) return optionTimezone;\n\n let userTimezone: string | null = null;\n try {\n const prefs = await getZeroUserPreferences();\n userTimezone = prefs.timezone;\n } catch {\n console.log(\n chalk.dim(\"Could not fetch timezone preference, using detected timezone\"),\n );\n }\n\n const defaultTimezone = userTimezone || detectTimezone();\n\n if (!isInteractive()) {\n return defaultTimezone;\n }\n\n return await promptText(\"Timezone\", existingTimezone || defaultTimezone);\n}\n\nasync function gatherPromptText(\n optionPrompt: string | undefined,\n existingPrompt: string | undefined | null,\n): Promise<string | undefined> {\n if (optionPrompt) return optionPrompt;\n\n if (!isInteractive()) {\n throw new Error(\"--prompt is required\");\n }\n\n return await promptText(\n \"Prompt to run\",\n existingPrompt || \"let's start working.\",\n );\n}\n\nasync function gatherNotificationPreferences(\n optionNotifyEmail: boolean | undefined,\n optionNotifySlack: boolean | undefined,\n existingSchedule: ScheduleListItem | undefined,\n): Promise<{ notifyEmail?: boolean; notifySlack?: boolean }> {\n if (optionNotifyEmail !== undefined && optionNotifySlack !== undefined) {\n return {\n notifyEmail: optionNotifyEmail,\n notifySlack: optionNotifySlack,\n };\n }\n\n if (!isInteractive()) {\n return {\n notifyEmail: optionNotifyEmail,\n notifySlack: optionNotifySlack,\n };\n }\n\n const notifyEmail =\n optionNotifyEmail ??\n (await promptConfirm(\n \"Enable email notifications?\",\n existingSchedule?.notifyEmail ?? true,\n ));\n\n const notifySlack =\n optionNotifySlack ??\n (await promptConfirm(\n \"Enable Slack notifications?\",\n existingSchedule?.notifySlack ?? true,\n ));\n\n return { notifyEmail, notifySlack };\n}\n\nasync function gatherInterval(\n optionInterval: string | undefined,\n existingInterval: number | undefined,\n): Promise<number | null> {\n if (optionInterval) {\n const val = parseInt(optionInterval, 10);\n if (isNaN(val) || val < 0) {\n throw new Error(\n \"Invalid interval. Must be a non-negative integer (seconds)\",\n );\n }\n return val;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--interval is required for loop schedules (seconds)\");\n }\n\n const defaultVal =\n existingInterval !== undefined ? String(existingInterval) : \"300\";\n const result = await promptText(\n \"Interval in seconds (time between runs)\",\n defaultVal,\n (v: string) => {\n const n = parseInt(v, 10);\n if (isNaN(n) || n < 0) return \"Must be a non-negative integer\";\n return true;\n },\n );\n if (!result) return null;\n return parseInt(result, 10);\n}\n\nasync function gatherTiming(\n frequency: ScheduleFrequency,\n options: SetupOptions,\n defaults: ExistingScheduleDefaults,\n): Promise<{\n day: number | undefined;\n time: string | undefined;\n atTime: string | undefined;\n intervalSeconds: number | undefined;\n} | null> {\n if (frequency === \"loop\") {\n const intervalSeconds = await gatherInterval(\n options.interval,\n defaults.intervalSeconds,\n );\n if (intervalSeconds === null) return null;\n return {\n day: undefined,\n time: undefined,\n atTime: undefined,\n intervalSeconds,\n };\n }\n\n if (frequency === \"once\") {\n const result = await gatherOneTimeSchedule(\n options.day,\n options.time,\n defaults.time,\n );\n if (!result) return null;\n return {\n day: undefined,\n time: undefined,\n atTime: result,\n intervalSeconds: undefined,\n };\n }\n\n const day =\n (await gatherDay(frequency, options.day, defaults.day)) ?? undefined;\n if (day === null && (frequency === \"weekly\" || frequency === \"monthly\")) {\n return null;\n }\n\n const time = await gatherRecurringTime(options.time, defaults.time);\n if (!time) return null;\n\n return { day, time, atTime: undefined, intervalSeconds: undefined };\n}\n\nasync function findExistingSchedule(\n agentId: string,\n scheduleName: string,\n): Promise<ScheduleListItem | undefined> {\n const { schedules } = await listZeroSchedules();\n return schedules.find(\n (s) => s.agentId === agentId && s.name === scheduleName,\n );\n}\n\ninterface DeployResult {\n created: boolean;\n schedule: {\n triggerType?: \"cron\" | \"once\" | \"loop\";\n timezone: string;\n cronExpression?: string | null;\n nextRunAt?: string | null;\n atTime?: string | null;\n intervalSeconds?: number | null;\n };\n}\n\nasync function buildAndDeploy(params: {\n scheduleName: string;\n agentId: string;\n agentName: string;\n frequency: ScheduleFrequency;\n time: string | undefined;\n day: number | undefined;\n atTime: string | undefined;\n intervalSeconds: number | undefined;\n timezone: string;\n prompt: string;\n artifactName: string;\n notifyEmail?: boolean;\n notifySlack?: boolean;\n}): Promise<DeployResult> {\n let cronExpression: string | undefined;\n let atTimeISO: string | undefined;\n\n if (params.frequency === \"loop\") {\n // Loop mode: intervalSeconds is passed directly\n } else if (params.atTime) {\n atTimeISO = toISODateTime(params.atTime);\n } else if (params.time && params.frequency !== \"once\") {\n cronExpression = generateCronExpression(\n params.frequency,\n params.time,\n params.day,\n );\n }\n\n console.log(\n `\\nDeploying schedule for agent ${chalk.cyan(params.agentName)}...`,\n );\n\n const deployResult = await deployZeroSchedule({\n name: params.scheduleName,\n agentId: params.agentId,\n cronExpression,\n atTime: atTimeISO,\n intervalSeconds: params.intervalSeconds,\n timezone: params.timezone,\n prompt: params.prompt,\n artifactName: params.artifactName,\n ...(params.notifyEmail !== undefined && {\n notifyEmail: params.notifyEmail,\n }),\n ...(params.notifySlack !== undefined && {\n notifySlack: params.notifySlack,\n }),\n });\n\n return deployResult;\n}\n\nfunction displayDeployResult(\n agentName: string,\n deployResult: DeployResult,\n): void {\n if (deployResult.created) {\n console.log(\n chalk.green(`✓ Created schedule for agent ${chalk.cyan(agentName)}`),\n );\n } else {\n console.log(\n chalk.green(`✓ Updated schedule for agent ${chalk.cyan(agentName)}`),\n );\n }\n\n console.log(chalk.dim(` Timezone: ${deployResult.schedule.timezone}`));\n\n if (\n deployResult.schedule.triggerType === \"loop\" &&\n deployResult.schedule.intervalSeconds != null\n ) {\n console.log(\n chalk.dim(\n ` Mode: Loop (interval ${deployResult.schedule.intervalSeconds}s)`,\n ),\n );\n } else if (deployResult.schedule.cronExpression) {\n console.log(chalk.dim(` Cron: ${deployResult.schedule.cronExpression}`));\n if (deployResult.schedule.nextRunAt) {\n const nextRun = formatInTimezone(\n deployResult.schedule.nextRunAt,\n deployResult.schedule.timezone,\n );\n console.log(chalk.dim(` Next run: ${nextRun}`));\n }\n } else if (deployResult.schedule.atTime) {\n const atTimeFormatted = formatInTimezone(\n deployResult.schedule.atTime,\n deployResult.schedule.timezone,\n );\n console.log(chalk.dim(` At: ${atTimeFormatted}`));\n }\n}\n\nasync function tryEnableSchedule(\n scheduleName: string,\n agentId: string,\n agentName: string,\n): Promise<void> {\n try {\n await enableZeroSchedule({ name: scheduleName, agentId });\n console.log(\n chalk.green(`✓ Enabled schedule for agent ${chalk.cyan(agentName)}`),\n );\n } catch (error) {\n console.error(chalk.yellow(\"⚠ Failed to enable schedule\"));\n if (error instanceof ApiRequestError) {\n if (error.code === \"SCHEDULE_PAST\") {\n console.error(chalk.dim(\" Scheduled time has already passed\"));\n } else {\n console.error(chalk.dim(` ${error.message}`));\n }\n } else if (error instanceof Error) {\n console.error(chalk.dim(` ${error.message}`));\n }\n console.log(\n ` To enable manually: ${chalk.cyan(`vm0 zero schedule enable ${agentName}`)}`,\n );\n }\n}\n\nfunction showEnableHint(agentName: string): void {\n console.log();\n console.log(\n ` To enable: ${chalk.cyan(`vm0 zero schedule enable ${agentName}`)}`,\n );\n}\n\nasync function handleScheduleEnabling(params: {\n scheduleName: string;\n agentId: string;\n agentName: string;\n enableFlag: boolean;\n shouldPromptEnable: boolean;\n}): Promise<void> {\n const { scheduleName, agentId, agentName, enableFlag, shouldPromptEnable } =\n params;\n\n if (enableFlag) {\n await tryEnableSchedule(scheduleName, agentId, agentName);\n return;\n }\n\n if (shouldPromptEnable && isInteractive()) {\n const enableNow = await promptConfirm(\"Enable this schedule?\", true);\n if (enableNow) {\n await tryEnableSchedule(scheduleName, agentId, agentName);\n } else {\n showEnableHint(agentName);\n }\n return;\n }\n\n if (shouldPromptEnable) {\n showEnableHint(agentName);\n }\n}\n\nexport const setupCommand = new Command()\n .name(\"setup\")\n .description(\"Create or edit a schedule for a zero agent\")\n .argument(\"<agent-name>\", \"Agent name to configure schedule for\")\n .option(\"-n, --name <schedule-name>\", 'Schedule name (default: \"default\")')\n .option(\"-f, --frequency <type>\", \"Frequency: daily|weekly|monthly|once|loop\")\n .option(\"-t, --time <HH:MM>\", \"Time to run (24-hour format)\")\n .option(\"-d, --day <day>\", \"Day of week (mon-sun) or day of month (1-31)\")\n .option(\"-i, --interval <seconds>\", \"Interval in seconds for loop mode\")\n .option(\"-z, --timezone <tz>\", \"IANA timezone\")\n .option(\"-p, --prompt <text>\", \"Prompt to run\")\n .option(\"--artifact-name <name>\", \"Artifact name\", \"artifact\")\n .option(\"-e, --enable\", \"Enable schedule immediately after creation\")\n .option(\"--notify-email\", \"Enable email notifications (default: true)\")\n .option(\"--no-notify-email\", \"Disable email notifications\")\n .option(\"--notify-slack\", \"Enable Slack notifications (default: true)\")\n .option(\"--no-notify-slack\", \"Disable Slack notifications\")\n .action(\n withErrorHandler(async (agentName: string, options: SetupOptions) => {\n // 1. Resolve agent name to compose ID\n const compose = await getComposeByName(agentName);\n if (!compose) {\n throw new Error(`Agent not found: ${agentName}`);\n }\n const agentId = compose.id;\n const scheduleName = options.name || \"default\";\n\n // 2. Check for existing schedule\n const existingSchedule = await findExistingSchedule(\n agentId,\n scheduleName,\n );\n\n console.log(\n chalk.dim(\n existingSchedule\n ? `Editing existing schedule for agent ${agentName}`\n : `Creating new schedule for agent ${agentName}`,\n ),\n );\n\n const defaults = getExistingDefaults(existingSchedule);\n\n // 3. Gather frequency\n const frequency = await gatherFrequency(\n options.frequency,\n defaults.frequency,\n );\n if (!frequency) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 4. Gather day and time\n const timing = await gatherTiming(frequency, options, defaults);\n if (!timing) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n const { day, time, atTime, intervalSeconds } = timing;\n\n // 5. Gather timezone\n const timezone = await gatherTimezone(\n options.timezone,\n existingSchedule?.timezone,\n );\n if (!timezone) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 6. Gather prompt\n const promptText_ = await gatherPromptText(\n options.prompt,\n existingSchedule?.prompt,\n );\n if (!promptText_) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 7. Gather notification preferences\n const { notifyEmail, notifySlack } = await gatherNotificationPreferences(\n options.notifyEmail,\n options.notifySlack,\n existingSchedule,\n );\n\n // 8. Build trigger and deploy\n const deployResult = await buildAndDeploy({\n scheduleName,\n agentId,\n agentName,\n frequency,\n time,\n day,\n atTime,\n intervalSeconds,\n timezone,\n prompt: promptText_,\n artifactName: options.artifactName,\n notifyEmail,\n notifySlack,\n });\n\n // 9. Display deployment result\n displayDeployResult(agentName, deployResult);\n\n // 10. Handle schedule enabling\n const shouldPromptEnable =\n deployResult.created ||\n (existingSchedule !== undefined && !existingSchedule.enabled);\n\n await handleScheduleEnabling({\n scheduleName,\n agentId,\n agentName,\n enableFlag: options.enable ?? false,\n shouldPromptEnable,\n });\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroSchedules } from \"../../../lib/api\";\nimport { formatRelativeTime } from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all zero schedules\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroSchedules();\n\n if (result.schedules.length === 0) {\n console.log(chalk.dim(\"No schedules found\"));\n console.log(\n chalk.dim(\" Create one with: vm0 zero schedule setup <agent-name>\"),\n );\n return;\n }\n\n const agentWidth = Math.max(\n 5,\n ...result.schedules.map((s) => s.agentId.length),\n );\n const scheduleWidth = Math.max(\n 8,\n ...result.schedules.map((s) => s.name.length),\n );\n const triggerWidth = Math.max(\n 7,\n ...result.schedules.map((s) =>\n s.cronExpression\n ? s.cronExpression.length + s.timezone.length + 3\n : s.atTime?.length || 0,\n ),\n );\n\n const header = [\n \"AGENT\".padEnd(agentWidth),\n \"SCHEDULE\".padEnd(scheduleWidth),\n \"TRIGGER\".padEnd(triggerWidth),\n \"STATUS\".padEnd(8),\n \"NEXT RUN\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const schedule of result.schedules) {\n const trigger = schedule.cronExpression\n ? `${schedule.cronExpression} (${schedule.timezone})`\n : schedule.atTime || \"-\";\n\n const status = schedule.enabled\n ? chalk.green(\"enabled\")\n : chalk.yellow(\"disabled\");\n\n const nextRun = schedule.enabled\n ? formatRelativeTime(schedule.nextRunAt)\n : \"-\";\n\n const row = [\n schedule.agentId.padEnd(agentWidth),\n schedule.name.padEnd(scheduleWidth),\n trigger.padEnd(triggerWidth),\n status.padEnd(8 + (schedule.enabled ? 0 : 2)),\n nextRun,\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { resolveZeroScheduleByAgent } from \"../../../lib/api\";\nimport {\n formatDateTime,\n detectTimezone,\n} from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport type { ScheduleResponse } from \"@vm0/core\";\n\n/**\n * Format date with styled relative time (adds chalk formatting)\n */\nfunction formatDateTimeStyled(dateStr: string | null): string {\n if (!dateStr) return chalk.dim(\"-\");\n const formatted = formatDateTime(dateStr);\n return formatted.replace(/\\(([^)]+)\\)$/, chalk.dim(\"($1)\"));\n}\n\n/**\n * Format trigger (cron or at) - timezone shown separately\n */\nfunction formatTrigger(schedule: ScheduleResponse): string {\n if (schedule.triggerType === \"loop\" && schedule.intervalSeconds !== null) {\n return `interval ${schedule.intervalSeconds}s ${chalk.dim(\"(loop)\")}`;\n }\n if (schedule.cronExpression) {\n return schedule.cronExpression;\n }\n if (schedule.atTime) {\n return `${schedule.atTime} ${chalk.dim(\"(one-time)\")}`;\n }\n return chalk.dim(\"-\");\n}\n\n/**\n * Print run configuration section\n */\nfunction printRunConfiguration(schedule: ScheduleResponse): void {\n const statusText = schedule.enabled\n ? chalk.green(\"enabled\")\n : chalk.yellow(\"disabled\");\n console.log(`${\"Status:\".padEnd(16)}${statusText}`);\n\n console.log(\n `${\"Agent:\".padEnd(16)}${schedule.agentId} ${chalk.dim(`(${schedule.orgSlug})`)}`,\n );\n\n const promptPreview =\n schedule.prompt.length > 60\n ? schedule.prompt.slice(0, 57) + \"...\"\n : schedule.prompt;\n console.log(`${\"Prompt:\".padEnd(16)}${chalk.dim(promptPreview)}`);\n\n if (schedule.vars && Object.keys(schedule.vars).length > 0) {\n console.log(\n `${\"Variables:\".padEnd(16)}${Object.keys(schedule.vars).join(\", \")}`,\n );\n }\n\n if (schedule.secretNames && schedule.secretNames.length > 0) {\n console.log(`${\"Secrets:\".padEnd(16)}${schedule.secretNames.join(\", \")}`);\n }\n\n if (schedule.artifactName) {\n const artifactInfo = schedule.artifactVersion\n ? `${schedule.artifactName}:${schedule.artifactVersion}`\n : schedule.artifactName;\n console.log(`${\"Artifact:\".padEnd(16)}${artifactInfo}`);\n }\n\n if (\n schedule.volumeVersions &&\n Object.keys(schedule.volumeVersions).length > 0\n ) {\n console.log(\n `${\"Volumes:\".padEnd(16)}${Object.keys(schedule.volumeVersions).join(\", \")}`,\n );\n }\n}\n\n/**\n * Print time schedule section\n */\nfunction printTimeSchedule(schedule: ScheduleResponse): void {\n console.log();\n console.log(`${\"Trigger:\".padEnd(16)}${formatTrigger(schedule)}`);\n console.log(`${\"Timezone:\".padEnd(16)}${detectTimezone()}`);\n\n if (schedule.enabled) {\n console.log(\n `${\"Next Run:\".padEnd(16)}${formatDateTimeStyled(schedule.nextRunAt)}`,\n );\n }\n\n if (schedule.triggerType === \"loop\") {\n const failureText =\n schedule.consecutiveFailures > 0\n ? chalk.yellow(`${schedule.consecutiveFailures}/3`)\n : chalk.dim(\"0/3\");\n console.log(`${\"Failures:\".padEnd(16)}${failureText}`);\n }\n}\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"Show detailed status of a zero schedule\")\n .argument(\"<agent-name>\", \"Agent name\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const schedule = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n console.log();\n console.log(`Schedule for agent: ${chalk.cyan(agentName)}`);\n console.log(chalk.dim(\"━\".repeat(50)));\n\n printRunConfiguration(schedule);\n printTimeSchedule(schedule);\n\n console.log();\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n deleteZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a zero schedule\")\n .argument(\"<agent-name>\", \"Agent name\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(\n async (agentName: string, options: { name?: string; yes?: boolean }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete schedule for agent ${chalk.cyan(agentName)}?`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(\n chalk.green(`✓ Deleted schedule for agent ${chalk.cyan(agentName)}`),\n );\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n enableZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const enableCommand = new Command()\n .name(\"enable\")\n .description(\"Enable a zero schedule\")\n .argument(\"<agent-name>\", \"Agent name\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n await enableZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(\n chalk.green(`✓ Enabled schedule for agent ${chalk.cyan(agentName)}`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n disableZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const disableCommand = new Command()\n .name(\"disable\")\n .description(\"Disable a zero schedule\")\n .argument(\"<agent-name>\", \"Agent name\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n await disableZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(\n chalk.green(`✓ Disabled schedule for agent ${chalk.cyan(agentName)}`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroSecretCommand = new Command()\n .name(\"secret\")\n .description(\"Manage secrets\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(deleteCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getConnectorDerivedNames } from \"@vm0/core\";\nimport { listZeroSecrets } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all secrets\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroSecrets();\n\n if (result.secrets.length === 0) {\n console.log(chalk.dim(\"No secrets found\"));\n console.log();\n console.log(\"To add a secret:\");\n console.log(\n chalk.cyan(\" vm0 zero secret set MY_API_KEY --body <value>\"),\n );\n return;\n }\n\n console.log(chalk.bold(\"Secrets:\"));\n console.log();\n\n for (const secret of result.secrets) {\n let typeIndicator = \"\";\n let derivedLine: string | null = null;\n\n if (secret.type === \"model-provider\") {\n typeIndicator = chalk.dim(\" [model-provider]\");\n } else if (secret.type === \"connector\") {\n const derived = getConnectorDerivedNames(secret.name);\n if (derived) {\n typeIndicator = chalk.dim(` [${derived.connectorLabel} connector]`);\n derivedLine = chalk.dim(\n `Available as: ${derived.envVarNames.join(\", \")}`,\n );\n } else {\n typeIndicator = chalk.dim(\" [connector]\");\n }\n } else if (secret.type === \"user\") {\n const derived = getConnectorDerivedNames(secret.name);\n if (derived) {\n typeIndicator = chalk.dim(` [${derived.connectorLabel} connector]`);\n derivedLine = chalk.dim(\n `Available as: ${derived.envVarNames.join(\", \")}`,\n );\n }\n }\n\n console.log(` ${chalk.cyan(secret.name)}${typeIndicator}`);\n if (derivedLine) {\n console.log(` ${derivedLine}`);\n }\n if (secret.description) {\n console.log(` ${chalk.dim(secret.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.secrets.length} secret(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroSecret } from \"../../../lib/api\";\nimport { isInteractive, promptPassword } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update a secret\")\n .argument(\"<name>\", \"Secret name (uppercase, e.g., MY_API_KEY)\")\n .option(\n \"-b, --body <value>\",\n \"Secret value (required in non-interactive mode)\",\n )\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n options: { body?: string; description?: string },\n ) => {\n let value: string;\n\n if (options.body !== undefined) {\n value = options.body;\n } else if (isInteractive()) {\n const prompted = await promptPassword(\"Enter secret value:\");\n if (prompted === undefined) {\n process.exit(0);\n }\n value = prompted;\n } else {\n throw new Error(\"--body is required in non-interactive mode\", {\n cause: new Error(\n `Usage: vm0 zero secret set ${name} --body \"your-secret-value\"`,\n ),\n });\n }\n\n let secret;\n try {\n secret = await setZeroSecret({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid secret names: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Secret \"${secret.name}\" saved`));\n console.log();\n console.log(\"Use in vm0.yaml:\");\n console.log(chalk.cyan(` environment:`));\n console.log(chalk.cyan(` ${name}: \\${{ secrets.${name} }}`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroSecret } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete a secret\")\n .argument(\"<name>\", \"Secret name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete secret \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroSecret(name);\n console.log(chalk.green(`✓ Secret \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroVariableCommand = new Command()\n .name(\"variable\")\n .description(\"Manage variables\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(deleteCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroVariables } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\n/**\n * Truncate value for display if too long\n */\nfunction truncateValue(value: string, maxLength: number = 60): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength - 15) + \"... [truncated]\";\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all variables\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroVariables();\n\n if (result.variables.length === 0) {\n console.log(chalk.dim(\"No variables found\"));\n console.log();\n console.log(\"To add a variable:\");\n console.log(chalk.cyan(\" vm0 zero variable set MY_VAR <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Variables:\"));\n console.log();\n\n for (const variable of result.variables) {\n const displayValue = truncateValue(variable.value);\n console.log(` ${chalk.cyan(variable.name)} = ${displayValue}`);\n if (variable.description) {\n console.log(` ${chalk.dim(variable.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.variables.length} variable(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroVariable } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update a variable\")\n .argument(\"<name>\", \"Variable name (uppercase, e.g., MY_VAR)\")\n .argument(\"<value>\", \"Variable value\")\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n value: string,\n options: { description?: string },\n ) => {\n let variable;\n try {\n variable = await setZeroVariable({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid variable names: MY_VAR, API_URL, DEBUG_MODE\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Variable \"${variable.name}\" saved`));\n console.log();\n console.log(\"Use in vm0.yaml:\");\n console.log(chalk.cyan(` environment:`));\n console.log(chalk.cyan(` ${name}: \\${{ vars.${name} }}`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroVariable } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete a variable\")\n .argument(\"<name>\", \"Variable name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete variable \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroVariable(name);\n console.log(chalk.green(`✓ Variable \"${name}\" deleted`));\n }),\n );\n"],"mappings":"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ACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA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A,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YAC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YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,2DAA2D;AAAA,QACrE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,2CAA2C;AAAA,QACrD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,+CAA+C;AAAA,QACzD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;A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AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,uCAAuC;AAAA,QACjD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AA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A,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YAC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A,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAA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A,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YAC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","names":["Command","chalk","z","z","z","z","z","z","z","z","z","c","z","z","c","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","z","z","z","z","z","c","z","artifactSnapshotSchema","volumeVersionsSnapshotSchema","z","c","z","storedChatMessageSchema","z","c","z","c","z","c","z","z","z","z","z","c","z","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","c","c","z","c","z","z","z","c","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","parseYaml","parseYaml","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","available","chalk","chalk","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","Command","chalk","listCommand","Command","chalk","Command","chalk","setCommand","Command","chalk","Command","chalk","removeCommand","Command","chalk","Command","listCommand","setCommand","removeCommand","Command","Command","chalk","listCommand","Command","chalk","Command","chalk","setCommand","Command","chalk","Command","chalk","removeCommand","Command","chalk","Command","listCommand","setCommand","removeCommand","Command","Command","chalk","listCommand","Command","chalk","Command","chalk","prompts","chalk","prompts","prompts","chalk","type","config","chalk","prompts","selectedModel","Command","provider","defaultNote","modelNote","Command","chalk","removeCommand","Command","chalk","Command","chalk","Command","chalk","Command","listCommand","removeCommand","Command","Command","Command","chalk","Command","chalk","Command","readFileSync","chalk","Command","readFileSync","chalk","Command","chalk","Command","chalk","Command","chalk","listCommand","Command","chalk","Command","chalk","deleteCommand","Command","chalk","Command","listCommand","deleteCommand","Command","Command","chalk","homedir","join","chalk","chalk","join","homedir","chalk","Command","Command","chalk","listCommand","Command","c","chalk","Command","chalk","statusCommand","Command","chalk","Command","chalk","Command","chalk","Command","listCommand","statusCommand","Command","chalk","detectTimezone","chalk","Command","Command","Command","chalk","c","day","chalk","setupCommand","Command","Command","chalk","listCommand","Command","chalk","Command","chalk","chalk","statusCommand","Command","Command","chalk","deleteCommand","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","chalk","Command","setupCommand","listCommand","statusCommand","deleteCommand","Command","Command","chalk","listCommand","Command","chalk","Command","chalk","setCommand","Command","chalk","Command","chalk","deleteCommand","Command","chalk","Command","listCommand","setCommand","deleteCommand","Command","Command","chalk","truncateValue","listCommand","Command","chalk","Command","chalk","setCommand","Command","chalk","Command","chalk","deleteCommand","Command","chalk","Command","listCommand","setCommand","deleteCommand"]}
|