diff --git a/.gitignore b/.gitignore index eed4da8..592ba87 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ yarn.lock # Cache .cache/ *.tsbuildinfo +.turbo/ # Environment .env diff --git a/README.md b/README.md index e887657..1c80520 100644 --- a/README.md +++ b/README.md @@ -11,5 +11,15 @@ Documentation lives in `docs/` (Mintlify). Start with: Quickstart (local dev): ```bash -sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 8787 +sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 2468 +``` + +Extract API keys from local agent configs (Claude Code, Codex, OpenCode, Amp): + +```bash +# Print env vars +sandbox-agent credentials extract-env + +# Export to current shell +eval "$(sandbox-agent credentials extract-env --export)" ``` diff --git a/docs/cli.mdx b/docs/cli.mdx index 227d171..0e81e7d 100644 --- a/docs/cli.mdx +++ b/docs/cli.mdx @@ -8,7 +8,7 @@ The `sandbox-agent` CLI mirrors the HTTP API so you can script everything withou ## Server flags ```bash -sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 8787 +sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 2468 ``` - `--token`: global token for all requests. @@ -22,7 +22,7 @@ sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 8787 agents list ```bash -sandbox-agent agents list --endpoint http://127.0.0.1:8787 +sandbox-agent agents list --endpoint http://127.0.0.1:2468 ``` @@ -30,7 +30,7 @@ sandbox-agent agents list --endpoint http://127.0.0.1:8787 agents install ```bash -sandbox-agent agents install claude --reinstall --endpoint http://127.0.0.1:8787 +sandbox-agent agents install claude --reinstall --endpoint http://127.0.0.1:2468 ``` @@ -38,7 +38,7 @@ sandbox-agent agents install claude --reinstall --endpoint http://127.0.0.1:8787 agents modes ```bash -sandbox-agent agents modes claude --endpoint http://127.0.0.1:8787 +sandbox-agent agents modes claude --endpoint http://127.0.0.1:2468 ``` @@ -52,7 +52,7 @@ sandbox-agent sessions create my-session \ --agent claude \ --agent-mode build \ --permission-mode default \ - --endpoint http://127.0.0.1:8787 + --endpoint http://127.0.0.1:2468 ``` @@ -62,7 +62,7 @@ sandbox-agent sessions create my-session \ ```bash sandbox-agent sessions send-message my-session \ --message "Summarize the repository" \ - --endpoint http://127.0.0.1:8787 + --endpoint http://127.0.0.1:2468 ``` @@ -70,7 +70,7 @@ sandbox-agent sessions send-message my-session \ sessions events ```bash -sandbox-agent sessions events my-session --offset 0 --limit 50 --endpoint http://127.0.0.1:8787 +sandbox-agent sessions events my-session --offset 0 --limit 50 --endpoint http://127.0.0.1:2468 ``` @@ -78,7 +78,7 @@ sandbox-agent sessions events my-session --offset 0 --limit 50 --endpoint http:/ sessions events-sse ```bash -sandbox-agent sessions events-sse my-session --offset 0 --endpoint http://127.0.0.1:8787 +sandbox-agent sessions events-sse my-session --offset 0 --endpoint http://127.0.0.1:2468 ``` @@ -88,7 +88,7 @@ sandbox-agent sessions events-sse my-session --offset 0 --endpoint http://127.0. ```bash sandbox-agent sessions reply-question my-session QUESTION_ID \ --answers "yes" \ - --endpoint http://127.0.0.1:8787 + --endpoint http://127.0.0.1:2468 ``` @@ -96,7 +96,7 @@ sandbox-agent sessions reply-question my-session QUESTION_ID \ sessions reject-question ```bash -sandbox-agent sessions reject-question my-session QUESTION_ID --endpoint http://127.0.0.1:8787 +sandbox-agent sessions reject-question my-session QUESTION_ID --endpoint http://127.0.0.1:2468 ``` @@ -106,6 +106,6 @@ sandbox-agent sessions reject-question my-session QUESTION_ID --endpoint http:// ```bash sandbox-agent sessions reply-permission my-session PERMISSION_ID \ --reply once \ - --endpoint http://127.0.0.1:8787 + --endpoint http://127.0.0.1:2468 ``` diff --git a/docs/deployments/cloudflare-sandboxes.mdx b/docs/deployments/cloudflare-sandboxes.mdx index e52b872..b2d910b 100644 --- a/docs/deployments/cloudflare-sandboxes.mdx +++ b/docs/deployments/cloudflare-sandboxes.mdx @@ -15,7 +15,7 @@ export SANDBOX_TOKEN="..." cargo run -p sandbox-agent -- \ --token "$SANDBOX_TOKEN" \ --host 0.0.0.0 \ - --port 8787 + --port 2468 ``` 4. Connect your client to the sandbox endpoint. diff --git a/docs/deployments/daytona.mdx b/docs/deployments/daytona.mdx index e6518a7..e86e380 100644 --- a/docs/deployments/daytona.mdx +++ b/docs/deployments/daytona.mdx @@ -7,7 +7,7 @@ description: "Run the daemon in a Daytona workspace." 1. Create a Daytona workspace with Rust and curl available. 2. Install or build the sandbox-agent binary. -3. Start the daemon and expose port `8787` (or your preferred port). +3. Start the daemon and expose port `2468` (or your preferred port). ```bash export SANDBOX_TOKEN="..." @@ -15,7 +15,7 @@ export SANDBOX_TOKEN="..." cargo run -p sandbox-agent -- \ --token "$SANDBOX_TOKEN" \ --host 0.0.0.0 \ - --port 8787 + --port 2468 ``` 4. Use your Daytona port forwarding to reach the daemon from your client. diff --git a/docs/deployments/docker.mdx b/docs/deployments/docker.mdx index 7e21130..2cd8ede 100644 --- a/docs/deployments/docker.mdx +++ b/docs/deployments/docker.mdx @@ -18,10 +18,10 @@ The binary will be written to `./artifacts/sandbox-agent-x86_64-unknown-linux-mu ## Run the daemon ```bash -docker run --rm -p 8787:8787 \ +docker run --rm -p 2468:2468 \ -v "$PWD/artifacts:/artifacts" \ debian:bookworm-slim \ - /artifacts/sandbox-agent-x86_64-unknown-linux-musl --token "$SANDBOX_TOKEN" --host 0.0.0.0 --port 8787 + /artifacts/sandbox-agent-x86_64-unknown-linux-musl --token "$SANDBOX_TOKEN" --host 0.0.0.0 --port 2468 ``` -You can now access the API at `http://localhost:8787`. +You can now access the API at `http://localhost:2468`. diff --git a/docs/deployments/e2b.mdx b/docs/deployments/e2b.mdx index 9cb9214..09d78d6 100644 --- a/docs/deployments/e2b.mdx +++ b/docs/deployments/e2b.mdx @@ -19,7 +19,7 @@ export SANDBOX_TOKEN="..." cargo run -p sandbox-agent -- \ --token "$SANDBOX_TOKEN" \ --host 0.0.0.0 \ - --port 8787 + --port 2468 ``` 4. Configure your client to connect to the sandbox endpoint. diff --git a/docs/deployments/vercel-sandboxes.mdx b/docs/deployments/vercel-sandboxes.mdx index c09941a..6e262d9 100644 --- a/docs/deployments/vercel-sandboxes.mdx +++ b/docs/deployments/vercel-sandboxes.mdx @@ -15,7 +15,7 @@ export SANDBOX_TOKEN="..." cargo run -p sandbox-agent -- \ --token "$SANDBOX_TOKEN" \ --host 0.0.0.0 \ - --port 8787 + --port 2468 ``` 4. Configure your client to use the sandbox URL. diff --git a/docs/frontend.mdx b/docs/frontend.mdx index 147c5dc..b6a62bd 100644 --- a/docs/frontend.mdx +++ b/docs/frontend.mdx @@ -14,7 +14,7 @@ pnpm --filter @sandbox-agent/web dev The UI expects: -- Endpoint (e.g. `http://127.0.0.1:8787`) +- Endpoint (e.g. `http://127.0.0.1:2468`) - Optional token If you see CORS errors, enable CORS on the daemon with `--cors-allow-origin` and related flags. diff --git a/docs/http-api.mdx b/docs/http-api.mdx index 9466e38..14b1f3b 100644 --- a/docs/http-api.mdx +++ b/docs/http-api.mdx @@ -5,6 +5,18 @@ description: "Endpoint reference for the sandbox agent daemon." All endpoints are under `/v1`. Authentication uses the daemon-level token via `Authorization: Bearer ` or `x-sandbox-token`. +## Health + +
+GET /v1/health - Connectivity check + +Response: + +```json +{ "status": "ok" } +``` +
+ ## Sessions
diff --git a/docs/index.mdx b/docs/index.mdx index 258897f..53ee39e 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -18,18 +18,18 @@ Sandbox Agent SDK is a universal API and daemon for running coding agents inside Run the daemon locally: ```bash -sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 8787 +sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 2468 ``` Send a message: ```bash -curl -X POST "http://127.0.0.1:8787/v1/sessions/my-session" \ +curl -X POST "http://127.0.0.1:2468/v1/sessions/my-session" \ -H "Authorization: Bearer $SANDBOX_TOKEN" \ -H "Content-Type: application/json" \ -d '{"agent":"claude"}' -curl -X POST "http://127.0.0.1:8787/v1/sessions/my-session/messages" \ +curl -X POST "http://127.0.0.1:2468/v1/sessions/my-session/messages" \ -H "Authorization: Bearer $SANDBOX_TOKEN" \ -H "Content-Type: application/json" \ -d '{"message":"Explain the repo structure."}' diff --git a/docs/quickstart.mdx b/docs/quickstart.mdx index d6fea23..a6a3715 100644 --- a/docs/quickstart.mdx +++ b/docs/quickstart.mdx @@ -8,13 +8,13 @@ description: "Start the daemon and send your first message." Use the installed binary, or `cargo run` in development. ```bash -sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 8787 +sandbox-agent --token "$SANDBOX_TOKEN" --host 127.0.0.1 --port 2468 ``` If you want to run without auth (local dev only): ```bash -sandbox-agent --no-token --host 127.0.0.1 --port 8787 +sandbox-agent --no-token --host 127.0.0.1 --port 2468 ``` ### CORS (frontend usage) @@ -35,7 +35,7 @@ sandbox-agent \ ## 2. Create a session ```bash -curl -X POST "http://127.0.0.1:8787/v1/sessions/my-session" \ +curl -X POST "http://127.0.0.1:2468/v1/sessions/my-session" \ -H "Authorization: Bearer $SANDBOX_TOKEN" \ -H "Content-Type: application/json" \ -d '{"agent":"claude","agentMode":"build","permissionMode":"default"}' @@ -44,7 +44,7 @@ curl -X POST "http://127.0.0.1:8787/v1/sessions/my-session" \ ## 3. Send a message ```bash -curl -X POST "http://127.0.0.1:8787/v1/sessions/my-session/messages" \ +curl -X POST "http://127.0.0.1:2468/v1/sessions/my-session/messages" \ -H "Authorization: Bearer $SANDBOX_TOKEN" \ -H "Content-Type: application/json" \ -d '{"message":"Summarize the repository and suggest next steps."}' @@ -53,14 +53,14 @@ curl -X POST "http://127.0.0.1:8787/v1/sessions/my-session/messages" \ ## 4. Read events ```bash -curl "http://127.0.0.1:8787/v1/sessions/my-session/events?offset=0&limit=50" \ +curl "http://127.0.0.1:2468/v1/sessions/my-session/events?offset=0&limit=50" \ -H "Authorization: Bearer $SANDBOX_TOKEN" ``` For streaming output, use SSE: ```bash -curl "http://127.0.0.1:8787/v1/sessions/my-session/events/sse?offset=0" \ +curl "http://127.0.0.1:2468/v1/sessions/my-session/events/sse?offset=0" \ -H "Authorization: Bearer $SANDBOX_TOKEN" ``` @@ -69,7 +69,7 @@ curl "http://127.0.0.1:8787/v1/sessions/my-session/events/sse?offset=0" \ The CLI mirrors the HTTP API: ```bash -sandbox-agent sessions create my-session --agent claude --endpoint http://127.0.0.1:8787 --token "$SANDBOX_TOKEN" +sandbox-agent sessions create my-session --agent claude --endpoint http://127.0.0.1:2468 --token "$SANDBOX_TOKEN" -sandbox-agent sessions send-message my-session --message "Hello" --endpoint http://127.0.0.1:8787 --token "$SANDBOX_TOKEN" +sandbox-agent sessions send-message my-session --message "Hello" --endpoint http://127.0.0.1:2468 --token "$SANDBOX_TOKEN" ``` diff --git a/docs/typescript-sdk.mdx b/docs/typescript-sdk.mdx index 5ced7ee..066e5d1 100644 --- a/docs/typescript-sdk.mdx +++ b/docs/typescript-sdk.mdx @@ -8,7 +8,7 @@ The TypeScript SDK is generated from the OpenAPI spec produced by the Rust serve ## Generate types ```bash -pnpm --filter @sandbox-agent/typescript-sdk generate +pnpm --filter sandbox-agent generate ``` This runs: @@ -19,10 +19,10 @@ This runs: ## Usage ```ts -import { SandboxDaemonClient } from "@sandbox-agent/typescript-sdk"; +import { SandboxDaemonClient } from "sandbox-agent"; const client = new SandboxDaemonClient({ - baseUrl: "http://127.0.0.1:8787", + baseUrl: "http://127.0.0.1:2468", token: process.env.SANDBOX_TOKEN, }); diff --git a/engine/packages/sandbox-agent/src/main.rs b/engine/packages/sandbox-agent/src/main.rs index 8ec7458..e2e716c 100644 --- a/engine/packages/sandbox-agent/src/main.rs +++ b/engine/packages/sandbox-agent/src/main.rs @@ -98,6 +98,9 @@ enum AgentsCommand { enum CredentialsCommand { /// Extract credentials using local discovery rules. Extract(CredentialsExtractArgs), + /// Output credentials as environment variable assignments. + #[command(name = "extract-env")] + ExtractEnv(CredentialsExtractEnvArgs), } #[derive(Subcommand, Debug)] @@ -239,6 +242,17 @@ struct CredentialsExtractArgs { reveal: bool, } +#[derive(Args, Debug)] +struct CredentialsExtractEnvArgs { + /// Prefix each line with "export " for shell sourcing. + #[arg(long, short = 'e')] + export: bool, + #[arg(long, short = 'd')] + home_dir: Option, + #[arg(long, short = 'n')] + no_oauth: bool, +} + #[derive(Debug, Error)] enum CliError { #[error("missing --token or --no-token for server mode")] @@ -455,6 +469,33 @@ fn run_credentials(command: &CredentialsCommand) -> Result<(), CliError> { write_stdout_line(&pretty)?; Ok(()) } + CredentialsCommand::ExtractEnv(args) => { + let mut options = CredentialExtractionOptions::new(); + if let Some(home_dir) = args.home_dir.clone() { + options.home_dir = Some(home_dir); + } + if args.no_oauth { + options.include_oauth = false; + } + + let credentials = extract_all_credentials(&options); + let prefix = if args.export { "export " } else { "" }; + + if let Some(cred) = &credentials.anthropic { + write_stdout_line(&format!("{}ANTHROPIC_API_KEY={}", prefix, cred.api_key))?; + write_stdout_line(&format!("{}CLAUDE_API_KEY={}", prefix, cred.api_key))?; + } + if let Some(cred) = &credentials.openai { + write_stdout_line(&format!("{}OPENAI_API_KEY={}", prefix, cred.api_key))?; + write_stdout_line(&format!("{}CODEX_API_KEY={}", prefix, cred.api_key))?; + } + for (provider, cred) in &credentials.other { + let var_name = format!("{}_API_KEY", provider.to_uppercase().replace('-', "_")); + write_stdout_line(&format!("{}{}={}", prefix, var_name, cred.api_key))?; + } + + Ok(()) + } } } diff --git a/engine/packages/sandbox-agent/src/router.rs b/engine/packages/sandbox-agent/src/router.rs index 85fe62d..0c51188 100644 --- a/engine/packages/sandbox-agent/src/router.rs +++ b/engine/packages/sandbox-agent/src/router.rs @@ -76,6 +76,7 @@ pub fn build_router(state: AppState) -> Router { let shared = Arc::new(state); let mut v1_router = Router::new() + .route("/health", get(get_health)) .route("/agents", get(list_agents)) .route("/agents/:agent/install", post(install_agent)) .route("/agents/:agent/modes", get(get_agent_modes)) @@ -107,6 +108,7 @@ pub fn build_router(state: AppState) -> Router { #[derive(OpenApi)] #[openapi( paths( + get_health, install_agent, get_agent_modes, list_agents, @@ -125,6 +127,7 @@ pub fn build_router(state: AppState) -> Router { AgentModesResponse, AgentInfo, AgentListResponse, + HealthResponse, CreateSessionRequest, CreateSessionResponse, MessageRequest, @@ -153,6 +156,7 @@ pub fn build_router(state: AppState) -> Router { ) ), tags( + (name = "meta", description = "Service metadata"), (name = "agents", description = "Agent management"), (name = "sessions", description = "Session management") ) @@ -1202,12 +1206,6 @@ fn extract_token(headers: &HeaderMap) -> Option { } } - if let Some(value) = headers.get("x-sandbox-token") { - if let Ok(value) = value.to_str() { - return Some(value.to_string()); - } - } - None } @@ -1249,6 +1247,12 @@ pub struct AgentListResponse { pub agents: Vec, } +#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)] +#[serde(rename_all = "camelCase")] +pub struct HealthResponse { + pub status: String, +} + #[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)] #[serde(rename_all = "camelCase")] pub struct CreateSessionRequest { @@ -1390,6 +1394,18 @@ async fn get_agent_modes( Ok(Json(AgentModesResponse { modes })) } +#[utoipa::path( + get, + path = "/v1/health", + responses((status = 200, body = HealthResponse)), + tag = "meta" +)] +async fn get_health() -> Json { + Json(HealthResponse { + status: "ok".to_string(), + }) +} + #[utoipa::path( get, path = "/v1/agents", diff --git a/frontend/packages/web/index.html b/frontend/packages/web/index.html index 02d4f4d..9c6d335 100644 --- a/frontend/packages/web/index.html +++ b/frontend/packages/web/index.html @@ -3,65 +3,50 @@ - Sandbox Agent Console + Sandbox Agent diff --git a/frontend/packages/web/package.json b/frontend/packages/web/package.json index 48fc778..662ebf8 100644 --- a/frontend/packages/web/package.json +++ b/frontend/packages/web/package.json @@ -6,11 +6,11 @@ "type": "module", "scripts": { "dev": "vite", - "build": "pnpm --filter @sandbox-agent/typescript-sdk build && vite build", + "build": "pnpm --filter sandbox-agent build && vite build", "preview": "vite preview" }, "devDependencies": { - "@sandbox-agent/typescript-sdk": "workspace:*", + "sandbox-agent": "workspace:*", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.1", diff --git a/frontend/packages/web/src/App.tsx b/frontend/packages/web/src/App.tsx index c898002..8a03dc3 100644 --- a/frontend/packages/web/src/App.tsx +++ b/frontend/packages/web/src/App.tsx @@ -152,7 +152,7 @@ const escapeSingleQuotes = (value: string) => value.replace(/'/g, `'\\''`); const buildCurl = (method: string, url: string, body?: string, token?: string) => { const headers: string[] = []; if (token) { - headers.push(`-H 'x-sandbox-token: ${escapeSingleQuotes(token)}'`); + headers.push(`-H 'Authorization: Bearer ${escapeSingleQuotes(token)}'`); } if (body) { headers.push(`-H 'Content-Type: application/json'`); @@ -180,7 +180,7 @@ const formatTime = (value: string) => { }; export default function App() { - const [endpoint, setEndpoint] = useState("http://localhost:8787"); + const [endpoint, setEndpoint] = useState("http://localhost:2468"); const [token, setToken] = useState(""); const [connected, setConnected] = useState(false); const [connecting, setConnecting] = useState(false); @@ -242,7 +242,7 @@ export default function App() { headers["Content-Type"] = "application/json"; } if (token) { - headers["x-sandbox-token"] = token; + headers.Authorization = `Bearer ${token}`; } const curl = buildCurl(method, url, bodyText, token); const logId = logIdRef.current++; @@ -289,13 +289,9 @@ export default function App() { setConnecting(true); setConnectError(null); try { - const data = await apiFetch(`${API_PREFIX}/agents`); - const list = (data as { agents?: AgentInfo[] })?.agents ?? []; - setAgents(list); - if (list.length > 0) { - setAgentId(list[0]?.id ?? "claude"); - } + await apiFetch(`${API_PREFIX}/health`); setConnected(true); + await refreshAgents(); } catch (error) { const message = error instanceof Error ? error.message : "Unable to connect"; setConnectError(message); @@ -606,8 +602,9 @@ export default function App() { one place.
- sandbox-agent --host 0.0.0.0 --port 8787 --token <token> --cors-allowed-origin - http://localhost:5173 --cors-allowed-methods GET,POST --cors-allowed-headers Authorization,x-sandbox-token + sandbox-agent --host 0.0.0.0 --port 2468 --token <token> --cors-allow-origin + http://localhost:5173 --cors-allow-method GET --cors-allow-method POST --cors-allow-header Authorization + --cors-allow-header Content-Type
CORS required for browser access @@ -630,7 +627,7 @@ export default function App() { Endpoint setEndpoint(event.target.value)} /> @@ -639,7 +636,7 @@ export default function App() { Token (optional) setToken(event.target.value)} /> diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..8592209 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2333 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + turbo: + specifier: ^2.4.0 + version: 2.7.6 + + frontend/packages/web: + dependencies: + lucide-react: + specifier: ^0.469.0 + version: 0.469.0(react@18.3.1) + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/react': + specifier: ^18.3.3 + version: 18.3.27 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.7(@types/react@18.3.27) + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.7.0(vite@5.4.21(@types/node@22.19.7)) + sandbox-agent: + specifier: workspace:* + version: link:../../../sdks/typescript + typescript: + specifier: ^5.7.3 + version: 5.9.3 + vite: + specifier: ^5.4.7 + version: 5.4.21(@types/node@22.19.7) + + resources/agent-schemas: + dependencies: + '@anthropic-ai/claude-code': + specifier: latest + version: 2.1.19 + '@openai/codex': + specifier: latest + version: 0.89.0 + cheerio: + specifier: ^1.0.0 + version: 1.2.0 + ts-json-schema-generator: + specifier: ^2.4.0 + version: 2.4.0 + typescript: + specifier: ^5.7.0 + version: 5.9.3 + devDependencies: + '@types/node': + specifier: ^22.0.0 + version: 22.19.7 + tsx: + specifier: ^4.19.0 + version: 4.21.0 + + sdks/typescript: + devDependencies: + '@types/node': + specifier: ^22.0.0 + version: 22.19.7 + openapi-typescript: + specifier: ^6.7.0 + version: 6.7.6 + typescript: + specifier: ^5.7.0 + version: 5.9.3 + +packages: + + '@anthropic-ai/claude-code@2.1.19': + resolution: {integrity: sha512-/bUlQuX/6nKr1Zqfi/9Q6xf7WonUBk72ZfKKENU4WVrIFWqTv/0JJsoW/dHol9QBNHvyfKIeBbYu4avHNRAnuQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + '@babel/code-frame@7.28.6': + resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.6': + resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.6': + resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.6': + resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.6': + resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.6': + resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.6': + resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@openai/codex@0.89.0': + resolution: {integrity: sha512-mIX0FLKTT26sWqLcpwb2GvRI89snDNvUbgTxEtrPMP/wXRtYasTLROY0UBL1qLHVrm532mU4RLepNITqBPvAOQ==} + engines: {node: '>=16'} + hasBin: true + + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + + '@rollup/rollup-android-arm-eabi@4.56.0': + resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.56.0': + resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.56.0': + resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.56.0': + resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.56.0': + resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.56.0': + resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.56.0': + resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.56.0': + resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.56.0': + resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.56.0': + resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.56.0': + resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.56.0': + resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.56.0': + resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.56.0': + resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.56.0': + resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.56.0': + resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.56.0': + resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.56.0': + resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.56.0': + resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.56.0': + resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.56.0': + resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.56.0': + resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.56.0': + resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.56.0': + resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.56.0': + resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==} + cpu: [x64] + os: [win32] + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@22.19.7': + resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} + + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} + peerDependencies: + '@types/react': ^18.0.0 + + '@types/react@18.3.27': + resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==} + + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + baseline-browser-mapping@2.9.18: + resolution: {integrity: sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==} + hasBin: true + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + caniuse-lite@1.0.30001766: + resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.2.0: + resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} + engines: {node: '>=20.18.1'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.278: + resolution: {integrity: sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} + engines: {node: 20 || >=22} + hasBin: true + + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@0.469.0: + resolution: {integrity: sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + openapi-typescript@6.7.6: + resolution: {integrity: sha512-c/hfooPx+RBIOPM09GSxABOZhYPblDoyaGhqBkD/59vtpN21jEuWKDlM0KYTvqJVlSYjKs0tBcIdeXKChlSPtw==} + hasBin: true + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} + engines: {node: 20 || >=22} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.56.0: + resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-json-schema-generator@2.4.0: + resolution: {integrity: sha512-HbmNsgs58CfdJq0gpteRTxPXG26zumezOs+SB9tgky6MpqiFgQwieCn2MW70+sxpHouZ/w9LW0V6L4ZQO4y1Ug==} + engines: {node: '>=18.0.0'} + hasBin: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + + turbo-darwin-64@2.7.6: + resolution: {integrity: sha512-bYu0qnWju2Ha3EbIkPCk1SMLT3sltKh1P/Jy5FER6BmH++H5z+T5MHh3W1Xoers9rk4N1VdKvog9FO1pxQyjhw==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.7.6: + resolution: {integrity: sha512-KCxTf3Y1hgNLYIWRLw8bwH8Zie9RyCGoxAlXYsCBI/YNqBSR+ZZK9KYzFxAqDaVaNvTwLFv3rJRGsXOFWg4+Uw==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.7.6: + resolution: {integrity: sha512-vjoU8zIfNgvJR3cMitgw7inEoi6bmuVuFawDl5yKtxjAEhDktFdRBpGS3WojD4l3BklBbIK689ssXcGf21LxRA==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.7.6: + resolution: {integrity: sha512-TcMpBvTqZf+1DptrVYLbZls7WY1UVNDTGaf0bo7/GCgWYv5eZHCVo4Td7kCJeDU4glbXg67REX0md0S0V6ghMg==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.7.6: + resolution: {integrity: sha512-1/MhkYldiihjneY8QnnDMbAkHXn/udTWSVYS94EMlkE9AShozsLTTOT1gDOpX06EfEW5njP09suhMvxbvwuwpQ==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.7.6: + resolution: {integrity: sha512-0wDVnUJLFAWm4ZzOQFDkbyyUqaszorTGf3Rdc22IRIyJTTLd6ajqdb+cWD89UZ1RKr953+PZR1gqgWQY4PDuhA==} + cpu: [arm64] + os: [win32] + + turbo@2.7.6: + resolution: {integrity: sha512-PO9AvJLEsNLO+EYhF4zB+v10hOjsJe5kJW+S6tTbRv+TW7gf1Qer4mfjP9h3/y9h8ZiPvOrenxnEgDtFgaM5zw==} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + + undici@7.19.1: + resolution: {integrity: sha512-Gpq0iNm5M6cQWlyHQv9MV+uOj1jWk7LpkoE5vSp/7zjb4zMdAcUD+VL5y0nH4p9EbUklq00eVIIX/XcDHzu5xg==} + engines: {node: '>=20.18.1'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + +snapshots: + + '@anthropic-ai/claude-code@2.1.19': + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + + '@babel/code-frame@7.28.6': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.6': {} + + '@babel/core@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/generator': 7.28.6 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/template': 7.28.6 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.6': + dependencies: + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.28.6 + + '@babel/parser@7.28.6': + dependencies: + '@babel/types': 7.28.6 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + + '@babel/traverse@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/generator': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.6 + '@babel/template': 7.28.6 + '@babel/types': 7.28.6 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true + + '@fastify/busboy@2.1.1': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@openai/codex@0.89.0': {} + + '@rolldown/pluginutils@1.0.0-beta.27': {} + + '@rollup/rollup-android-arm-eabi@4.56.0': + optional: true + + '@rollup/rollup-android-arm64@4.56.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.56.0': + optional: true + + '@rollup/rollup-darwin-x64@4.56.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.56.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.56.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.56.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.56.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.56.0': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.56.0': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.56.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.56.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.56.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.56.0': + optional: true + + '@rollup/rollup-openbsd-x64@4.56.0': + optional: true + + '@rollup/rollup-openharmony-arm64@4.56.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.56.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.56.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.56.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.56.0': + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.6 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.6 + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@22.19.7': + dependencies: + undici-types: 6.21.0 + + '@types/prop-types@15.7.15': {} + + '@types/react-dom@18.3.7(@types/react@18.3.27)': + dependencies: + '@types/react': 18.3.27 + + '@types/react@18.3.27': + dependencies: + '@types/prop-types': 15.7.15 + csstype: 3.2.3 + + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.7))': + dependencies: + '@babel/core': 7.28.6 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 5.4.21(@types/node@22.19.7) + transitivePeerDependencies: + - supports-color + + ansi-colors@4.1.3: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + argparse@2.0.1: {} + + baseline-browser-mapping@2.9.18: {} + + boolbase@1.0.0: {} + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.9.18 + caniuse-lite: 1.0.30001766 + electron-to-chromium: 1.5.278 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + + caniuse-lite@1.0.30001766: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.2.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.1.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 7.19.1 + whatwg-mimetype: 4.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@13.1.0: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-what@6.2.2: {} + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.278: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encoding-sniffer@0.2.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + entities@4.5.0: {} + + entities@6.0.1: {} + + entities@7.0.1: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + escalade@3.2.0: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.1.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.1 + + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json5@2.2.3: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@11.2.4: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lucide-react@0.469.0(react@18.3.1): + dependencies: + react: 18.3.1 + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + + minipass@7.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + node-releases@2.0.27: {} + + normalize-path@3.0.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + openapi-typescript@6.7.6: + dependencies: + ansi-colors: 4.1.3 + fast-glob: 3.3.3 + js-yaml: 4.1.1 + supports-color: 9.4.0 + undici: 5.29.0 + yargs-parser: 21.1.1 + + package-json-from-dist@1.0.1: {} + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + path-key@3.1.1: {} + + path-scurry@2.0.1: + dependencies: + lru-cache: 11.2.4 + minipass: 7.1.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + queue-microtask@1.2.3: {} + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-refresh@0.17.0: {} + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + resolve-pkg-maps@1.0.0: {} + + reusify@1.1.0: {} + + rollup@4.56.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.56.0 + '@rollup/rollup-android-arm64': 4.56.0 + '@rollup/rollup-darwin-arm64': 4.56.0 + '@rollup/rollup-darwin-x64': 4.56.0 + '@rollup/rollup-freebsd-arm64': 4.56.0 + '@rollup/rollup-freebsd-x64': 4.56.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.56.0 + '@rollup/rollup-linux-arm-musleabihf': 4.56.0 + '@rollup/rollup-linux-arm64-gnu': 4.56.0 + '@rollup/rollup-linux-arm64-musl': 4.56.0 + '@rollup/rollup-linux-loong64-gnu': 4.56.0 + '@rollup/rollup-linux-loong64-musl': 4.56.0 + '@rollup/rollup-linux-ppc64-gnu': 4.56.0 + '@rollup/rollup-linux-ppc64-musl': 4.56.0 + '@rollup/rollup-linux-riscv64-gnu': 4.56.0 + '@rollup/rollup-linux-riscv64-musl': 4.56.0 + '@rollup/rollup-linux-s390x-gnu': 4.56.0 + '@rollup/rollup-linux-x64-gnu': 4.56.0 + '@rollup/rollup-linux-x64-musl': 4.56.0 + '@rollup/rollup-openbsd-x64': 4.56.0 + '@rollup/rollup-openharmony-arm64': 4.56.0 + '@rollup/rollup-win32-arm64-msvc': 4.56.0 + '@rollup/rollup-win32-ia32-msvc': 4.56.0 + '@rollup/rollup-win32-x64-gnu': 4.56.0 + '@rollup/rollup-win32-x64-msvc': 4.56.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + + source-map-js@1.2.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + supports-color@9.4.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-json-schema-generator@2.4.0: + dependencies: + '@types/json-schema': 7.0.15 + commander: 13.1.0 + glob: 11.1.0 + json5: 2.2.3 + normalize-path: 3.0.0 + safe-stable-stringify: 2.5.0 + tslib: 2.8.1 + typescript: 5.9.3 + + tslib@2.8.1: {} + + tsx@4.21.0: + dependencies: + esbuild: 0.27.2 + get-tsconfig: 4.13.0 + optionalDependencies: + fsevents: 2.3.3 + + turbo-darwin-64@2.7.6: + optional: true + + turbo-darwin-arm64@2.7.6: + optional: true + + turbo-linux-64@2.7.6: + optional: true + + turbo-linux-arm64@2.7.6: + optional: true + + turbo-windows-64@2.7.6: + optional: true + + turbo-windows-arm64@2.7.6: + optional: true + + turbo@2.7.6: + optionalDependencies: + turbo-darwin-64: 2.7.6 + turbo-darwin-arm64: 2.7.6 + turbo-linux-64: 2.7.6 + turbo-linux-arm64: 2.7.6 + turbo-windows-64: 2.7.6 + turbo-windows-arm64: 2.7.6 + + typescript@5.9.3: {} + + undici-types@6.21.0: {} + + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + + undici@7.19.1: {} + + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + vite@5.4.21(@types/node@22.19.7): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.56.0 + optionalDependencies: + '@types/node': 22.19.7 + fsevents: 2.3.3 + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + yallist@3.1.1: {} + + yargs-parser@21.1.1: {} diff --git a/resources/agent-schemas/package.json b/resources/agent-schemas/package.json index 206e6bb..3707816 100644 --- a/resources/agent-schemas/package.json +++ b/resources/agent-schemas/package.json @@ -4,11 +4,11 @@ "type": "module", "license": "Apache-2.0", "scripts": { - "extract": "tsx ../../src/agents/index.ts", - "extract:opencode": "tsx ../../src/agents/index.ts --agent=opencode", - "extract:claude": "tsx ../../src/agents/index.ts --agent=claude", - "extract:codex": "tsx ../../src/agents/index.ts --agent=codex", - "extract:amp": "tsx ../../src/agents/index.ts --agent=amp" + "extract": "tsx src/index.ts", + "extract:opencode": "tsx src/index.ts --agent=opencode", + "extract:claude": "tsx src/index.ts --agent=claude", + "extract:codex": "tsx src/index.ts --agent=codex", + "extract:amp": "tsx src/index.ts --agent=amp" }, "dependencies": { "ts-json-schema-generator": "^2.4.0", diff --git a/src/agents/amp.ts b/resources/agent-schemas/src/amp.ts similarity index 100% rename from src/agents/amp.ts rename to resources/agent-schemas/src/amp.ts diff --git a/src/agents/cache.ts b/resources/agent-schemas/src/cache.ts similarity index 100% rename from src/agents/cache.ts rename to resources/agent-schemas/src/cache.ts diff --git a/src/agents/claude.ts b/resources/agent-schemas/src/claude.ts similarity index 100% rename from src/agents/claude.ts rename to resources/agent-schemas/src/claude.ts diff --git a/src/agents/codex.ts b/resources/agent-schemas/src/codex.ts similarity index 100% rename from src/agents/codex.ts rename to resources/agent-schemas/src/codex.ts diff --git a/src/agents/index.ts b/resources/agent-schemas/src/index.ts similarity index 100% rename from src/agents/index.ts rename to resources/agent-schemas/src/index.ts diff --git a/src/agents/normalize.ts b/resources/agent-schemas/src/normalize.ts similarity index 100% rename from src/agents/normalize.ts rename to resources/agent-schemas/src/normalize.ts diff --git a/src/agents/opencode.ts b/resources/agent-schemas/src/opencode.ts similarity index 100% rename from src/agents/opencode.ts rename to resources/agent-schemas/src/opencode.ts diff --git a/sdks/typescript/package.json b/sdks/typescript/package.json index 660f1e7..2d2445a 100644 --- a/sdks/typescript/package.json +++ b/sdks/typescript/package.json @@ -1,5 +1,5 @@ { - "name": "@sandbox-agent/typescript-sdk", + "name": "sandbox-agent", "version": "0.1.0", "private": true, "license": "Apache-2.0", diff --git a/sdks/typescript/src/client.ts b/sdks/typescript/src/client.ts index 6d40f4b..f0f9e3d 100644 --- a/sdks/typescript/src/client.ts +++ b/sdks/typescript/src/client.ts @@ -1,4 +1,4 @@ -import type { components } from "./generated/openapi"; +import type { components } from "./generated/openapi.js"; export type AgentInstallRequest = components["schemas"]["AgentInstallRequest"]; export type AgentModeInfo = components["schemas"]["AgentModeInfo"]; diff --git a/sdks/typescript/src/generated/openapi.json b/sdks/typescript/src/generated/openapi.json new file mode 100644 index 0000000..e80a668 --- /dev/null +++ b/sdks/typescript/src/generated/openapi.json @@ -0,0 +1,1417 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "sandbox-agent-core", + "description": "", + "contact": { + "name": "Sandbox Agent Contributors" + }, + "license": { + "name": "Apache-2.0" + }, + "version": "0.1.0" + }, + "paths": { + "/v1/agents": { + "get": { + "tags": [ + "agents" + ], + "operationId": "list_agents", + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentListResponse" + } + } + } + } + } + } + }, + "/v1/agents/{agent}/install": { + "post": { + "tags": [ + "agents" + ], + "operationId": "install_agent", + "parameters": [ + { + "name": "agent", + "in": "path", + "description": "Agent id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentInstallRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Agent installed" + }, + "400": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "404": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "500": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/v1/agents/{agent}/modes": { + "get": { + "tags": [ + "agents" + ], + "operationId": "get_agent_modes", + "parameters": [ + { + "name": "agent", + "in": "path", + "description": "Agent id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentModesResponse" + } + } + } + }, + "400": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/v1/sessions/{session_id}": { + "post": { + "tags": [ + "sessions" + ], + "operationId": "create_session", + "parameters": [ + { + "name": "session_id", + "in": "path", + "description": "Client session id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSessionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSessionResponse" + } + } + } + }, + "400": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "409": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/v1/sessions/{session_id}/events": { + "get": { + "tags": [ + "sessions" + ], + "operationId": "get_events", + "parameters": [ + { + "name": "session_id", + "in": "path", + "description": "Session id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "offset", + "in": "query", + "description": "Last seen event id (exclusive)", + "required": false, + "schema": { + "type": "integer", + "format": "int64", + "nullable": true, + "minimum": 0 + } + }, + { + "name": "limit", + "in": "query", + "description": "Max events to return", + "required": false, + "schema": { + "type": "integer", + "format": "int64", + "nullable": true, + "minimum": 0 + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventsResponse" + } + } + } + }, + "404": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/v1/sessions/{session_id}/events/sse": { + "get": { + "tags": [ + "sessions" + ], + "operationId": "get_events_sse", + "parameters": [ + { + "name": "session_id", + "in": "path", + "description": "Session id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "offset", + "in": "query", + "description": "Last seen event id (exclusive)", + "required": false, + "schema": { + "type": "integer", + "format": "int64", + "nullable": true, + "minimum": 0 + } + } + ], + "responses": { + "200": { + "description": "SSE event stream" + } + } + } + }, + "/v1/sessions/{session_id}/messages": { + "post": { + "tags": [ + "sessions" + ], + "operationId": "post_message", + "parameters": [ + { + "name": "session_id", + "in": "path", + "description": "Session id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MessageRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Message accepted" + }, + "404": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/v1/sessions/{session_id}/permissions/{permission_id}/reply": { + "post": { + "tags": [ + "sessions" + ], + "operationId": "reply_permission", + "parameters": [ + { + "name": "session_id", + "in": "path", + "description": "Session id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "permission_id", + "in": "path", + "description": "Permission id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionReplyRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Permission reply accepted" + }, + "404": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/v1/sessions/{session_id}/questions/{question_id}/reject": { + "post": { + "tags": [ + "sessions" + ], + "operationId": "reject_question", + "parameters": [ + { + "name": "session_id", + "in": "path", + "description": "Session id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "question_id", + "in": "path", + "description": "Question id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Question rejected" + }, + "404": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/v1/sessions/{session_id}/questions/{question_id}/reply": { + "post": { + "tags": [ + "sessions" + ], + "operationId": "reply_question", + "parameters": [ + { + "name": "session_id", + "in": "path", + "description": "Session id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "question_id", + "in": "path", + "description": "Question id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QuestionReplyRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Question answered" + }, + "404": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "AgentError": { + "type": "object", + "required": [ + "type", + "message" + ], + "properties": { + "agent": { + "type": "string", + "nullable": true + }, + "details": { + "nullable": true + }, + "message": { + "type": "string" + }, + "session_id": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/ErrorType" + } + } + }, + "AgentInfo": { + "type": "object", + "required": [ + "id", + "installed" + ], + "properties": { + "id": { + "type": "string" + }, + "installed": { + "type": "boolean" + }, + "path": { + "type": "string", + "nullable": true + }, + "version": { + "type": "string", + "nullable": true + } + } + }, + "AgentInstallRequest": { + "type": "object", + "properties": { + "reinstall": { + "type": "boolean", + "nullable": true + } + } + }, + "AgentListResponse": { + "type": "object", + "required": [ + "agents" + ], + "properties": { + "agents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentInfo" + } + } + } + }, + "AgentModeInfo": { + "type": "object", + "required": [ + "id", + "name", + "description" + ], + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "AgentModesResponse": { + "type": "object", + "required": [ + "modes" + ], + "properties": { + "modes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentModeInfo" + } + } + } + }, + "AttachmentSource": { + "oneOf": [ + { + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "path": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "path" + ] + } + } + }, + { + "type": "object", + "required": [ + "url", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "url" + ] + }, + "url": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "data", + "type" + ], + "properties": { + "data": { + "type": "string" + }, + "encoding": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "data" + ] + } + } + } + ], + "discriminator": { + "propertyName": "type" + } + }, + "CrashInfo": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "details": { + "nullable": true + }, + "kind": { + "type": "string", + "nullable": true + }, + "message": { + "type": "string" + } + } + }, + "CreateSessionRequest": { + "type": "object", + "required": [ + "agent" + ], + "properties": { + "agent": { + "type": "string" + }, + "agentMode": { + "type": "string", + "nullable": true + }, + "agentVersion": { + "type": "string", + "nullable": true + }, + "model": { + "type": "string", + "nullable": true + }, + "permissionMode": { + "type": "string", + "nullable": true + }, + "variant": { + "type": "string", + "nullable": true + } + } + }, + "CreateSessionResponse": { + "type": "object", + "required": [ + "healthy" + ], + "properties": { + "agentSessionId": { + "type": "string", + "nullable": true + }, + "error": { + "allOf": [ + { + "$ref": "#/components/schemas/AgentError" + } + ], + "nullable": true + }, + "healthy": { + "type": "boolean" + } + } + }, + "ErrorType": { + "type": "string", + "enum": [ + "invalid_request", + "unsupported_agent", + "agent_not_installed", + "install_failed", + "agent_process_exited", + "token_invalid", + "permission_denied", + "session_not_found", + "session_already_exists", + "mode_not_supported", + "stream_error", + "timeout" + ] + }, + "EventsQuery": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "format": "int64", + "nullable": true, + "minimum": 0 + }, + "offset": { + "type": "integer", + "format": "int64", + "nullable": true, + "minimum": 0 + } + } + }, + "EventsResponse": { + "type": "object", + "required": [ + "events", + "hasMore" + ], + "properties": { + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UniversalEvent" + } + }, + "hasMore": { + "type": "boolean" + } + } + }, + "MessageRequest": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + }, + "PermissionReply": { + "type": "string", + "enum": [ + "once", + "always", + "reject" + ] + }, + "PermissionReplyRequest": { + "type": "object", + "required": [ + "reply" + ], + "properties": { + "reply": { + "$ref": "#/components/schemas/PermissionReply" + } + } + }, + "PermissionRequest": { + "type": "object", + "required": [ + "id", + "sessionId", + "permission", + "patterns", + "always" + ], + "properties": { + "always": { + "type": "array", + "items": { + "type": "string" + } + }, + "id": { + "type": "string" + }, + "metadata": { + "type": "object", + "additionalProperties": {} + }, + "patterns": { + "type": "array", + "items": { + "type": "string" + } + }, + "permission": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "tool": { + "allOf": [ + { + "$ref": "#/components/schemas/PermissionToolRef" + } + ], + "nullable": true + } + } + }, + "PermissionToolRef": { + "type": "object", + "required": [ + "messageId", + "callId" + ], + "properties": { + "callId": { + "type": "string" + }, + "messageId": { + "type": "string" + } + } + }, + "ProblemDetails": { + "type": "object", + "required": [ + "type", + "title", + "status" + ], + "properties": { + "detail": { + "type": "string", + "nullable": true + }, + "instance": { + "type": "string", + "nullable": true + }, + "status": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "QuestionInfo": { + "type": "object", + "required": [ + "question", + "options" + ], + "properties": { + "custom": { + "type": "boolean", + "nullable": true + }, + "header": { + "type": "string", + "nullable": true + }, + "multiSelect": { + "type": "boolean", + "nullable": true + }, + "options": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QuestionOption" + } + }, + "question": { + "type": "string" + } + } + }, + "QuestionOption": { + "type": "object", + "required": [ + "label" + ], + "properties": { + "description": { + "type": "string", + "nullable": true + }, + "label": { + "type": "string" + } + } + }, + "QuestionReplyRequest": { + "type": "object", + "required": [ + "answers" + ], + "properties": { + "answers": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "QuestionRequest": { + "type": "object", + "required": [ + "id", + "sessionId", + "questions" + ], + "properties": { + "id": { + "type": "string" + }, + "questions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QuestionInfo" + } + }, + "sessionId": { + "type": "string" + }, + "tool": { + "allOf": [ + { + "$ref": "#/components/schemas/QuestionToolRef" + } + ], + "nullable": true + } + } + }, + "QuestionToolRef": { + "type": "object", + "required": [ + "messageId", + "callId" + ], + "properties": { + "callId": { + "type": "string" + }, + "messageId": { + "type": "string" + } + } + }, + "Started": { + "type": "object", + "properties": { + "details": { + "nullable": true + }, + "message": { + "type": "string", + "nullable": true + } + } + }, + "UniversalEvent": { + "type": "object", + "required": [ + "id", + "timestamp", + "sessionId", + "agent", + "data" + ], + "properties": { + "agent": { + "type": "string" + }, + "agentSessionId": { + "type": "string", + "nullable": true + }, + "data": { + "$ref": "#/components/schemas/UniversalEventData" + }, + "id": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "sessionId": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + } + }, + "UniversalEventData": { + "oneOf": [ + { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "$ref": "#/components/schemas/UniversalMessage" + } + } + }, + { + "type": "object", + "required": [ + "started" + ], + "properties": { + "started": { + "$ref": "#/components/schemas/Started" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/components/schemas/CrashInfo" + } + } + }, + { + "type": "object", + "required": [ + "questionAsked" + ], + "properties": { + "questionAsked": { + "$ref": "#/components/schemas/QuestionRequest" + } + } + }, + { + "type": "object", + "required": [ + "permissionAsked" + ], + "properties": { + "permissionAsked": { + "$ref": "#/components/schemas/PermissionRequest" + } + } + }, + { + "type": "object", + "required": [ + "raw" + ], + "properties": { + "raw": {} + } + } + ] + }, + "UniversalMessage": { + "oneOf": [ + { + "$ref": "#/components/schemas/UniversalMessageParsed" + }, + { + "type": "object", + "required": [ + "raw" + ], + "properties": { + "error": { + "type": "string", + "nullable": true + }, + "raw": {} + } + } + ] + }, + "UniversalMessageParsed": { + "type": "object", + "required": [ + "role", + "parts" + ], + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "metadata": { + "type": "object", + "additionalProperties": {} + }, + "parts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UniversalMessagePart" + } + }, + "role": { + "type": "string" + } + } + }, + "UniversalMessagePart": { + "oneOf": [ + { + "type": "object", + "required": [ + "text", + "type" + ], + "properties": { + "text": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "text" + ] + } + } + }, + { + "type": "object", + "required": [ + "name", + "input", + "type" + ], + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "input": {}, + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "tool_call" + ] + } + } + }, + { + "type": "object", + "required": [ + "output", + "type" + ], + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "is_error": { + "type": "boolean", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "output": {}, + "type": { + "type": "string", + "enum": [ + "tool_result" + ] + } + } + }, + { + "type": "object", + "required": [ + "arguments", + "type" + ], + "properties": { + "arguments": {}, + "id": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "raw": { + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "function_call" + ] + } + } + }, + { + "type": "object", + "required": [ + "result", + "type" + ], + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "is_error": { + "type": "boolean", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "raw": { + "nullable": true + }, + "result": {}, + "type": { + "type": "string", + "enum": [ + "function_result" + ] + } + } + }, + { + "type": "object", + "required": [ + "source", + "type" + ], + "properties": { + "filename": { + "type": "string", + "nullable": true + }, + "mime_type": { + "type": "string", + "nullable": true + }, + "raw": { + "nullable": true + }, + "source": { + "$ref": "#/components/schemas/AttachmentSource" + }, + "type": { + "type": "string", + "enum": [ + "file" + ] + } + } + }, + { + "type": "object", + "required": [ + "source", + "type" + ], + "properties": { + "alt": { + "type": "string", + "nullable": true + }, + "mime_type": { + "type": "string", + "nullable": true + }, + "raw": { + "nullable": true + }, + "source": { + "$ref": "#/components/schemas/AttachmentSource" + }, + "type": { + "type": "string", + "enum": [ + "image" + ] + } + } + }, + { + "type": "object", + "required": [ + "message", + "type" + ], + "properties": { + "message": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "error" + ] + } + } + }, + { + "type": "object", + "required": [ + "raw", + "type" + ], + "properties": { + "raw": {}, + "type": { + "type": "string", + "enum": [ + "unknown" + ] + } + } + } + ], + "discriminator": { + "propertyName": "type" + } + } + } + }, + "tags": [ + { + "name": "agents", + "description": "Agent management" + }, + { + "name": "sessions", + "description": "Session management" + } + ] +} \ No newline at end of file diff --git a/sdks/typescript/src/generated/openapi.ts b/sdks/typescript/src/generated/openapi.ts index 3a58fc7..70c7fe1 100644 --- a/sdks/typescript/src/generated/openapi.ts +++ b/sdks/typescript/src/generated/openapi.ts @@ -1,250 +1,57 @@ -/* eslint-disable */ -// This file is generated by openapi-typescript. Do not edit by hand. +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + + +/** OneOf type helpers */ +type Without = { [P in Exclude]?: never }; +type XOR = (T | U) extends object ? (Without & U) | (Without & T) : T | U; +type OneOf = T extends [infer Only] ? Only : T extends [infer A, infer B, ...infer Rest] ? OneOf<[XOR, ...Rest]> : never; export interface paths { "/v1/agents": { - get: { - responses: { - 200: { - content: { - "application/json": components["schemas"]["AgentListResponse"]; - }; - }; - }; - }; + get: operations["list_agents"]; }; "/v1/agents/{agent}/install": { - post: { - parameters: { - path: { - agent: string; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["AgentInstallRequest"]; - }; - }; - responses: { - 204: { - description: string; - }; - 400: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - 404: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - 500: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - }; - }; + post: operations["install_agent"]; }; "/v1/agents/{agent}/modes": { - get: { - parameters: { - path: { - agent: string; - }; - }; - responses: { - 200: { - content: { - "application/json": components["schemas"]["AgentModesResponse"]; - }; - }; - 400: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - }; - }; + get: operations["get_agent_modes"]; }; "/v1/sessions/{session_id}": { - post: { - parameters: { - path: { - session_id: string; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CreateSessionRequest"]; - }; - }; - responses: { - 200: { - content: { - "application/json": components["schemas"]["CreateSessionResponse"]; - }; - }; - 400: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - 409: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - }; - }; - }; - "/v1/sessions/{session_id}/messages": { - post: { - parameters: { - path: { - session_id: string; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["MessageRequest"]; - }; - }; - responses: { - 204: { - description: string; - }; - 404: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - }; - }; + post: operations["create_session"]; }; "/v1/sessions/{session_id}/events": { - get: { - parameters: { - path: { - session_id: string; - }; - query?: { - offset?: number | null; - limit?: number | null; - }; - }; - responses: { - 200: { - content: { - "application/json": components["schemas"]["EventsResponse"]; - }; - }; - 404: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - }; - }; + get: operations["get_events"]; }; "/v1/sessions/{session_id}/events/sse": { - get: { - parameters: { - path: { - session_id: string; - }; - query?: { - offset?: number | null; - }; - }; - responses: { - 200: { - description: string; - }; - }; - }; + get: operations["get_events_sse"]; }; - "/v1/sessions/{session_id}/questions/{question_id}/reply": { - post: { - parameters: { - path: { - session_id: string; - question_id: string; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["QuestionReplyRequest"]; - }; - }; - responses: { - 204: { - description: string; - }; - 404: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - }; - }; - }; - "/v1/sessions/{session_id}/questions/{question_id}/reject": { - post: { - parameters: { - path: { - session_id: string; - question_id: string; - }; - }; - responses: { - 204: { - description: string; - }; - 404: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - }; - }; + "/v1/sessions/{session_id}/messages": { + post: operations["post_message"]; }; "/v1/sessions/{session_id}/permissions/{permission_id}/reply": { - post: { - parameters: { - path: { - session_id: string; - permission_id: string; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PermissionReplyRequest"]; - }; - }; - responses: { - 204: { - description: string; - }; - 404: { - content: { - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - }; - }; + post: operations["reply_permission"]; + }; + "/v1/sessions/{session_id}/questions/{question_id}/reject": { + post: operations["reject_question"]; + }; + "/v1/sessions/{session_id}/questions/{question_id}/reply": { + post: operations["reply_question"]; }; } +export type webhooks = Record; + export interface components { schemas: { AgentError: { - type: components["schemas"]["ErrorType"]; - message: string; agent?: string | null; + details?: unknown; + message: string; session_id?: string | null; - details?: unknown | null; + type: components["schemas"]["ErrorType"]; }; AgentInfo: { id: string; @@ -259,31 +66,31 @@ export interface components { agents: components["schemas"]["AgentInfo"][]; }; AgentModeInfo: { + description: string; id: string; name: string; - description: string; }; AgentModesResponse: { modes: components["schemas"]["AgentModeInfo"][]; }; - AttachmentSource: - | { - type: "path"; - path: string; - } - | { - type: "url"; - url: string; - } - | { - type: "data"; - data: string; - encoding?: string | null; - }; + AttachmentSource: { + path: string; + /** @enum {string} */ + type: "path"; + } | { + /** @enum {string} */ + type: "url"; + url: string; + } | ({ + data: string; + encoding?: string | null; + /** @enum {string} */ + type: "data"; + }); CrashInfo: { - message: string; + details?: unknown; kind?: string | null; - details?: unknown | null; + message: string; }; CreateSessionRequest: { agent: string; @@ -291,31 +98,20 @@ export interface components { agentVersion?: string | null; model?: string | null; permissionMode?: string | null; - token?: string | null; - validateToken?: boolean | null; variant?: string | null; }; CreateSessionResponse: { - healthy: boolean; - error?: components["schemas"]["AgentError"] | null; agentSessionId?: string | null; + error?: components["schemas"]["AgentError"] | null; + healthy: boolean; }; - ErrorType: - | "invalid_request" - | "unsupported_agent" - | "agent_not_installed" - | "install_failed" - | "agent_process_exited" - | "token_invalid" - | "permission_denied" - | "session_not_found" - | "session_already_exists" - | "mode_not_supported" - | "stream_error" - | "timeout"; + /** @enum {string} */ + ErrorType: "invalid_request" | "unsupported_agent" | "agent_not_installed" | "install_failed" | "agent_process_exited" | "token_invalid" | "permission_denied" | "session_not_found" | "session_already_exists" | "mode_not_supported" | "stream_error" | "timeout"; EventsQuery: { - offset?: number | null; + /** Format: int64 */ limit?: number | null; + /** Format: int64 */ + offset?: number | null; }; EventsResponse: { events: components["schemas"]["UniversalEvent"][]; @@ -324,141 +120,152 @@ export interface components { MessageRequest: { message: string; }; + /** @enum {string} */ PermissionReply: "once" | "always" | "reject"; PermissionReplyRequest: { reply: components["schemas"]["PermissionReply"]; }; PermissionRequest: { - id: string; - sessionId: string; - permission: string; - patterns: string[]; always: string[]; - metadata?: Record; + id: string; + metadata?: { + [key: string]: unknown; + }; + patterns: string[]; + permission: string; + sessionId: string; tool?: components["schemas"]["PermissionToolRef"] | null; }; PermissionToolRef: { - messageId: string; callId: string; + messageId: string; }; ProblemDetails: { - type: string; - title: string; - status: number; detail?: string | null; instance?: string | null; + /** Format: int32 */ + status: number; + title: string; + type: string; [key: string]: unknown; }; QuestionInfo: { - question: string; - options: components["schemas"]["QuestionOption"][]; + custom?: boolean | null; header?: string | null; multiSelect?: boolean | null; - custom?: boolean | null; + options: components["schemas"]["QuestionOption"][]; + question: string; }; QuestionOption: { - label: string; description?: string | null; + label: string; }; QuestionReplyRequest: { answers: string[][]; }; QuestionRequest: { id: string; - sessionId: string; questions: components["schemas"]["QuestionInfo"][]; + sessionId: string; tool?: components["schemas"]["QuestionToolRef"] | null; }; QuestionToolRef: { - messageId: string; callId: string; + messageId: string; }; Started: { + details?: unknown; message?: string | null; - details?: unknown | null; }; UniversalEvent: { - id: number; - timestamp: string; - sessionId: string; agent: string; agentSessionId?: string | null; data: components["schemas"]["UniversalEventData"]; + /** Format: int64 */ + id: number; + sessionId: string; + timestamp: string; }; - UniversalEventData: - | { message: components["schemas"]["UniversalMessage"] } - | { started: components["schemas"]["Started"] } - | { error: components["schemas"]["CrashInfo"] } - | { questionAsked: components["schemas"]["QuestionRequest"] } - | { permissionAsked: components["schemas"]["PermissionRequest"] } - | { raw: unknown }; - UniversalMessage: - | components["schemas"]["UniversalMessageParsed"] - | { - raw: unknown; - error?: string | null; - }; + UniversalEventData: { + message: components["schemas"]["UniversalMessage"]; + } | { + started: components["schemas"]["Started"]; + } | { + error: components["schemas"]["CrashInfo"]; + } | { + questionAsked: components["schemas"]["QuestionRequest"]; + } | { + permissionAsked: components["schemas"]["PermissionRequest"]; + } | { + raw: unknown; + }; + UniversalMessage: OneOf<[components["schemas"]["UniversalMessageParsed"], { + error?: string | null; + raw: unknown; + }]>; UniversalMessageParsed: { - role: string; - parts: components["schemas"]["UniversalMessagePart"][]; id?: string | null; - metadata?: Record; + metadata?: { + [key: string]: unknown; + }; + parts: components["schemas"]["UniversalMessagePart"][]; + role: string; + }; + UniversalMessagePart: { + text: string; + /** @enum {string} */ + type: "text"; + } | ({ + id?: string | null; + input: unknown; + name: string; + /** @enum {string} */ + type: "tool_call"; + }) | ({ + id?: string | null; + is_error?: boolean | null; + name?: string | null; + output: unknown; + /** @enum {string} */ + type: "tool_result"; + }) | ({ + arguments: unknown; + id?: string | null; + name?: string | null; + raw?: unknown; + /** @enum {string} */ + type: "function_call"; + }) | ({ + id?: string | null; + is_error?: boolean | null; + name?: string | null; + raw?: unknown; + result: unknown; + /** @enum {string} */ + type: "function_result"; + }) | ({ + filename?: string | null; + mime_type?: string | null; + raw?: unknown; + source: components["schemas"]["AttachmentSource"]; + /** @enum {string} */ + type: "file"; + }) | ({ + alt?: string | null; + mime_type?: string | null; + raw?: unknown; + source: components["schemas"]["AttachmentSource"]; + /** @enum {string} */ + type: "image"; + }) | { + message: string; + /** @enum {string} */ + type: "error"; + } | { + raw: unknown; + /** @enum {string} */ + type: "unknown"; }; - UniversalMessagePart: - | { - type: "text"; - text: string; - } - | { - type: "tool_call"; - name: string; - input: unknown; - id?: string | null; - } - | { - type: "tool_result"; - output: unknown; - id?: string | null; - name?: string | null; - is_error?: boolean | null; - } - | { - type: "function_call"; - arguments: unknown; - id?: string | null; - name?: string | null; - raw?: unknown | null; - } - | { - type: "function_result"; - result: unknown; - id?: string | null; - name?: string | null; - is_error?: boolean | null; - raw?: unknown | null; - } - | { - type: "file"; - source: components["schemas"]["AttachmentSource"]; - mime_type?: string | null; - filename?: string | null; - raw?: unknown | null; - } - | { - type: "image"; - source: components["schemas"]["AttachmentSource"]; - mime_type?: string | null; - alt?: string | null; - raw?: unknown | null; - } - | { - type: "error"; - message: string; - } - | { - type: "unknown"; - raw: unknown; - }; }; responses: never; parameters: never; @@ -467,4 +274,244 @@ export interface components { pathItems: never; } -export type webhooks = never; +export type $defs = Record; + +export type external = Record; + +export interface operations { + + list_agents: { + responses: { + 200: { + content: { + "application/json": components["schemas"]["AgentListResponse"]; + }; + }; + }; + }; + install_agent: { + parameters: { + path: { + /** @description Agent id */ + agent: string; + }; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AgentInstallRequest"]; + }; + }; + responses: { + /** @description Agent installed */ + 204: { + content: never; + }; + 400: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + 404: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + 500: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + }; + }; + get_agent_modes: { + parameters: { + path: { + /** @description Agent id */ + agent: string; + }; + }; + responses: { + 200: { + content: { + "application/json": components["schemas"]["AgentModesResponse"]; + }; + }; + 400: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + }; + }; + create_session: { + parameters: { + path: { + /** @description Client session id */ + session_id: string; + }; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CreateSessionRequest"]; + }; + }; + responses: { + 200: { + content: { + "application/json": components["schemas"]["CreateSessionResponse"]; + }; + }; + 400: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + 409: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + }; + }; + get_events: { + parameters: { + query?: { + /** @description Last seen event id (exclusive) */ + offset?: number | null; + /** @description Max events to return */ + limit?: number | null; + }; + path: { + /** @description Session id */ + session_id: string; + }; + }; + responses: { + 200: { + content: { + "application/json": components["schemas"]["EventsResponse"]; + }; + }; + 404: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + }; + }; + get_events_sse: { + parameters: { + query?: { + /** @description Last seen event id (exclusive) */ + offset?: number | null; + }; + path: { + /** @description Session id */ + session_id: string; + }; + }; + responses: { + /** @description SSE event stream */ + 200: { + content: never; + }; + }; + }; + post_message: { + parameters: { + path: { + /** @description Session id */ + session_id: string; + }; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MessageRequest"]; + }; + }; + responses: { + /** @description Message accepted */ + 204: { + content: never; + }; + 404: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + }; + }; + reply_permission: { + parameters: { + path: { + /** @description Session id */ + session_id: string; + /** @description Permission id */ + permission_id: string; + }; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionReplyRequest"]; + }; + }; + responses: { + /** @description Permission reply accepted */ + 204: { + content: never; + }; + 404: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + }; + }; + reject_question: { + parameters: { + path: { + /** @description Session id */ + session_id: string; + /** @description Question id */ + question_id: string; + }; + }; + responses: { + /** @description Question rejected */ + 204: { + content: never; + }; + 404: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + }; + }; + reply_question: { + parameters: { + path: { + /** @description Session id */ + session_id: string; + /** @description Question id */ + question_id: string; + }; + }; + requestBody: { + content: { + "application/json": components["schemas"]["QuestionReplyRequest"]; + }; + }; + responses: { + /** @description Question answered */ + 204: { + content: never; + }; + 404: { + content: { + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; + }; + }; +} diff --git a/sdks/typescript/src/index.ts b/sdks/typescript/src/index.ts index 8ee391b..ea7a4ef 100644 --- a/sdks/typescript/src/index.ts +++ b/sdks/typescript/src/index.ts @@ -1,4 +1,4 @@ -export { SandboxDaemonClient, SandboxDaemonError, createSandboxDaemonClient } from "./client"; +export { SandboxDaemonClient, SandboxDaemonError, createSandboxDaemonClient } from "./client.js"; export type { AgentInfo, AgentInstallRequest, @@ -15,5 +15,5 @@ export type { ProblemDetails, QuestionReplyRequest, UniversalEvent, -} from "./client"; -export type { components, paths } from "./generated/openapi"; +} from "./client.js"; +export type { components, paths } from "./generated/openapi.js"; diff --git a/spec.md b/spec.md index 3a767b5..e25283e 100644 --- a/spec.md +++ b/spec.md @@ -89,7 +89,7 @@ POST /v1/sessions/{} (will install agent if not already installed) agentSessionId?: string } - The client-provided session id is primary; `agentSessionId` is the underlying agent id (may be unknown until first prompt). -- Auth uses the daemon-level token (`Authorization` / `x-sandbox-token`); per-session tokens are not supported. +- Auth uses the daemon-level token (`Authorization`); per-session tokens are not supported. // agentMode vs permissionMode: // - agentMode = what the agent DOES (behavior, system prompt) diff --git a/todo.md b/todo.md index f0d1aa2..3bfd79b 100644 --- a/todo.md +++ b/todo.md @@ -75,6 +75,7 @@ - [x] Add instructions to run sandbox-agent (including CORS) - [x] Implement full agent UI covering all features - [x] Add HTTP request log with copyable curl command +- [x] Add Content-Type header to CORS callout command ## TypeScript SDK - [x] Generate OpenAPI from utoipa and run `openapi-typescript`