diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index aada95f2..00000000
--- a/.editorconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-root = true
-
-[*]
-charset = utf-8
-insert_final_newline = true
-end_of_line = lf
-indent_style = space
-indent_size = 2
-max_line_length = 80
diff --git a/.github/workflows/notify-discord.yml b/.github/workflows/notify-discord.yml
deleted file mode 100644
index c9032c30..00000000
--- a/.github/workflows/notify-discord.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-name: discord
-
-on:
- release:
- types: [published] # fires only when a release is published
-
-jobs:
- notify:
- runs-on: ubuntu-latest
- steps:
- - name: Send nicely-formatted embed to Discord
- uses: SethCohen/github-releases-to-discord@v1
- with:
- webhook_url: ${{ secrets.DISCORD_WEBHOOK }}
diff --git a/.github/workflows/opencode.yml b/.github/workflows/opencode.yml
deleted file mode 100644
index cbe35f61..00000000
--- a/.github/workflows/opencode.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-name: opencode
-
-on:
- issue_comment:
- types: [created]
-
-jobs:
- opencode:
- if: |
- contains(github.event.comment.body, ' /oc') ||
- startsWith(github.event.comment.body, '/oc') ||
- contains(github.event.comment.body, ' /opencode') ||
- startsWith(github.event.comment.body, '/opencode')
- runs-on: ubuntu-latest
- permissions:
- contents: read
- id-token: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 1
-
- - name: Run opencode
- uses: sst/opencode/github@latest
- env:
- ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
- with:
- model: anthropic/claude-sonnet-4-20250514
diff --git a/.github/workflows/publish-github-action.yml b/.github/workflows/publish-github-action.yml
deleted file mode 100644
index cfd14148..00000000
--- a/.github/workflows/publish-github-action.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: publish-github-action
-
-on:
- workflow_dispatch:
- push:
- tags:
- - "github-v*.*.*"
- - "!github-v1"
-
-concurrency: ${{ github.workflow }}-${{ github.ref }}
-
-permissions:
- contents: write
-
-jobs:
- publish:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
-
- - run: git fetch --force --tags
-
- - name: Publish
- run: |
- git config --global user.email "opencode@sst.dev"
- git config --global user.name "opencode"
- ./script/publish
- working-directory: ./github
diff --git a/.github/workflows/publish-vscode.yml b/.github/workflows/publish-vscode.yml
deleted file mode 100644
index 9f98f906..00000000
--- a/.github/workflows/publish-vscode.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: publish-vscode
-
-on:
- workflow_dispatch:
- push:
- tags:
- - "vscode-v*.*.*"
-
-concurrency: ${{ github.workflow }}-${{ github.ref }}
-
-permissions:
- contents: write
-
-jobs:
- publish:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
-
- - uses: oven-sh/setup-bun@v2
- with:
- bun-version: 1.2.17
-
- - run: git fetch --force --tags
- - run: bun install -g @vscode/vsce
-
- - name: Publish
- run: |
- bun install
- ./script/publish
- working-directory: ./sdks/vscode
- env:
- VSCE_PAT: ${{ secrets.VSCE_PAT }}
- OPENVSX_TOKEN: ${{ secrets.OPENVSX_TOKEN }}
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 97b943c9..7a15729d 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -1,17 +1,12 @@
name: publish
-run-name: "${{ format('v{0}', inputs.version) }}"
on:
workflow_dispatch:
- inputs:
- version:
- description: "Version to publish"
- required: true
- type: string
- title:
- description: "Custom title for this run"
- required: false
- type: string
+ push:
+ branches:
+ - dev
+ tags:
+ - "*"
concurrency: ${{ github.workflow }}-${{ github.ref }}
@@ -37,16 +32,7 @@ jobs:
- uses: oven-sh/setup-bun@v2
with:
- bun-version: 1.2.19
-
- - name: Cache ~/.bun
- id: cache-bun
- uses: actions/cache@v3
- with:
- path: ~/.bun
- key: ${{ runner.os }}-bun-${{ hashFiles('bun.lock') }}
- restore-keys: |
- ${{ runner.os }}-bun-
+ bun-version: 1.2.17
- name: Install makepkg
run: |
@@ -62,12 +48,15 @@ jobs:
git config --global user.email "opencode@sst.dev"
git config --global user.name "opencode"
- - name: Install dependencies
- run: bun install
-
- name: Publish
run: |
- OPENCODE_VERSION=${{ inputs.version }} ./script/publish.ts
+ bun install
+ if [ "${{ startsWith(github.ref, 'refs/tags/') }}" = "true" ]; then
+ ./script/publish.ts
+ else
+ ./script/publish.ts --snapshot
+ fi
+ working-directory: ./packages/opencode
env:
GITHUB_TOKEN: ${{ secrets.SST_GITHUB_TOKEN }}
AUR_KEY: ${{ secrets.AUR_KEY }}
diff --git a/.github/workflows/stats.yml b/.github/workflows/stats.yml
deleted file mode 100644
index ab7f24e2..00000000
--- a/.github/workflows/stats.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: stats
-
-on:
- schedule:
- - cron: "0 12 * * *" # Run daily at 12:00 UTC
- workflow_dispatch: # Allow manual trigger
-
-jobs:
- stats:
- runs-on: ubuntu-latest
- permissions:
- contents: write
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup Bun
- uses: oven-sh/setup-bun@v2
- with:
- bun-version: latest
-
- - name: Run stats script
- run: bun script/stats.ts
-
- - name: Commit stats
- run: |
- git config --local user.email "action@github.com"
- git config --local user.name "GitHub Action"
- git add STATS.md
- git diff --staged --quiet || git commit -m "ignore: update download stats $(date -I)"
- git push
- env:
- POSTHOG_KEY: ${{ secrets.POSTHOG_KEY }}
diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml
deleted file mode 100644
index 01aa398b..00000000
--- a/.github/workflows/typecheck.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: Typecheck
-
-on:
- pull_request:
- branches: [dev]
- workflow_dispatch:
-
-jobs:
- typecheck:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Setup Bun
- uses: oven-sh/setup-bun@v1
- with:
- bun-version: 1.2.19
-
- - name: Install dependencies
- run: bun install
-
- - name: Run typecheck
- run: bun typecheck
diff --git a/.gitignore b/.gitignore
index 2728097b..a07a7493 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,7 @@
.DS_Store
node_modules
+.opencode
.sst
.env
.idea
.vscode
-openapi.json
-playground
diff --git a/.opencode/agent/example-driven-docs-writer.md b/.opencode/agent/example-driven-docs-writer.md
deleted file mode 100644
index fec57d05..00000000
--- a/.opencode/agent/example-driven-docs-writer.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-description: >-
- Use this agent when you need to create or improve documentation that requires
- concrete examples to illustrate every concept. Examples include:
-
AI coding agent, built for the terminal.
@@ -30,23 +30,7 @@ brew install sst/tap/opencode # macOS paru -S opencode-bin # Arch Linux ``` -> [!TIP] -> Remove versions older than 0.1.x before installing. - -#### Installation Directory - -The install script respects the following priority order for the installation path: - -1. `$OPENCODE_INSTALL_DIR` - Custom installation directory -2. `$XDG_BIN_DIR` - XDG Base Directory Specification compliant path -3. `$HOME/bin` - Standard user binary directory (if exists or can be created) -4. `$HOME/.opencode/bin` - Default fallback - -```bash -# Examples -OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/install | bash -XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash -``` +> **Note:** Remove versions older than 0.1.x before installing ### Documentation @@ -54,25 +38,7 @@ For more info on how to configure opencode [**head over to our docs**](https://o ### Contributing -opencode is an opinionated tool so any fundamental feature needs to go through a -design process with the core team. - -> [!IMPORTANT] -> We do not accept PRs for core features. - -However we still merge a ton of PRs - you can contribute: - -- Bug fixes -- Improvements to LLM performance -- Support for new providers -- Fixes for env specific quirks -- Missing standard behavior -- Documentation - -Take a look at the git history to see what kind of PRs we end up merging. - -> [!NOTE] -> If you do not follow the above guidelines we might close your PR. +For any new features we'd appreciate it if you could open an issue first to discuss what you'd like to implement. We're pretty responsive there and it'll save you from working on something that we don't end up using. No need to do this for simpler fixes. To run opencode locally you need. @@ -83,12 +49,19 @@ And run. ```bash $ bun install -$ bun dev +$ bun run packages/opencode/src/index.ts ``` #### Development Notes -**API Client**: After making changes to the TypeScript API endpoints in `packages/opencode/src/server/server.ts`, you will need the opencode team to generate a new stainless sdk for the clients. +**API Client Generation**: After making changes to the TypeScript API endpoints in `packages/opencode/src/server/server.ts`, you need to regenerate the Go client and OpenAPI specification: + +```bash +$ cd packages/tui +$ go generate ./pkg/client/ +``` + +This updates the generated Go client code that the TUI uses to communicate with the backend server. ### FAQ @@ -97,14 +70,18 @@ $ bun dev It's very similar to Claude Code in terms of capability. Here are the key differences: - 100% open source -- Not coupled to any provider. Although Anthropic is recommended, opencode can be used with OpenAI, Google or even local models. As models evolve the gaps between them will close and pricing will drop so being provider-agnostic is important. +- Not coupled to any provider. Although Anthropic is recommended, opencode can be used with OpenAI, Google or even local models. As models evolve the gaps between them will close and pricing will drop so being provider agnostic is important. - A focus on TUI. opencode is built by neovim users and the creators of [terminal.shop](https://terminal.shop); we are going to push the limits of what's possible in the terminal. - A client/server architecture. This for example can allow opencode to run on your computer, while you can drive it remotely from a mobile app. Meaning that the TUI frontend is just one of the possible clients. +#### What about Windows support? + +There are some minor problems blocking opencode from working on windows. We are working on on them now. You'll need to use WSL for now. + #### What's the other repo? The other confusingly named repo has no relation to this one. You can [read the story behind it here](https://x.com/thdxr/status/1933561254481666466). --- -**Join our community** [Discord](https://discord.gg/opencode) | [YouTube](https://www.youtube.com/c/sst-dev) | [X.com](https://x.com/SST_dev) +**Join our community** [YouTube](https://www.youtube.com/c/sst-dev) | [X.com](https://x.com/SST_dev) diff --git a/STATS.md b/STATS.md deleted file mode 100644 index 1313dc49..00000000 --- a/STATS.md +++ /dev/null @@ -1,42 +0,0 @@ -# Download Stats - -| Date | GitHub Downloads | npm Downloads | Total | -| ---------- | ---------------- | ---------------- | ---------------- | -| 2025-06-29 | 18,789 (+0) | 39,420 (+0) | 58,209 (+0) | -| 2025-06-30 | 20,127 (+1,338) | 41,059 (+1,639) | 61,186 (+2,977) | -| 2025-07-01 | 22,108 (+1,981) | 43,745 (+2,686) | 65,853 (+4,667) | -| 2025-07-02 | 24,814 (+2,706) | 46,168 (+2,423) | 70,982 (+5,129) | -| 2025-07-03 | 27,834 (+3,020) | 49,955 (+3,787) | 77,789 (+6,807) | -| 2025-07-04 | 30,608 (+2,774) | 54,758 (+4,803) | 85,366 (+7,577) | -| 2025-07-05 | 32,524 (+1,916) | 58,371 (+3,613) | 90,895 (+5,529) | -| 2025-07-06 | 33,766 (+1,242) | 59,694 (+1,323) | 93,460 (+2,565) | -| 2025-07-08 | 38,052 (+4,286) | 64,468 (+4,774) | 102,520 (+9,060) | -| 2025-07-09 | 40,924 (+2,872) | 67,935 (+3,467) | 108,859 (+6,339) | -| 2025-07-10 | 43,796 (+2,872) | 71,402 (+3,467) | 115,198 (+6,339) | -| 2025-07-11 | 46,982 (+3,186) | 77,462 (+6,060) | 124,444 (+9,246) | -| 2025-07-12 | 49,302 (+2,320) | 82,177 (+4,715) | 131,479 (+7,035) | -| 2025-07-13 | 50,803 (+1,501) | 86,394 (+4,217) | 137,197 (+5,718) | -| 2025-07-14 | 53,283 (+2,480) | 87,860 (+1,466) | 141,143 (+3,946) | -| 2025-07-15 | 57,590 (+4,307) | 91,036 (+3,176) | 148,626 (+7,483) | -| 2025-07-16 | 62,313 (+4,723) | 95,258 (+4,222) | 157,571 (+8,945) | -| 2025-07-17 | 66,684 (+4,371) | 100,048 (+4,790) | 166,732 (+9,161) | -| 2025-07-18 | 70,379 (+3,695) | 102,587 (+2,539) | 172,966 (+6,234) | -| 2025-07-19 | 73,497 (+3,117) | 105,904 (+3,317) | 179,401 (+6,434) | -| 2025-07-20 | 76,453 (+2,956) | 109,044 (+3,140) | 185,497 (+6,096) | -| 2025-07-21 | 80,197 (+3,744) | 113,537 (+4,493) | 193,734 (+8,237) | -| 2025-07-22 | 84,251 (+4,054) | 118,073 (+4,536) | 202,324 (+8,590) | -| 2025-07-23 | 88,589 (+4,338) | 121,436 (+3,363) | 210,025 (+7,701) | -| 2025-07-24 | 92,469 (+3,880) | 124,091 (+2,655) | 216,560 (+6,535) | -| 2025-07-25 | 96,417 (+3,948) | 126,985 (+2,894) | 223,402 (+6,842) | -| 2025-07-26 | 100,646 (+4,229) | 131,411 (+4,426) | 232,057 (+8,655) | -| 2025-07-27 | 102,644 (+1,998) | 134,736 (+3,325) | 237,380 (+5,323) | -| 2025-07-28 | 105,446 (+2,802) | 136,016 (+1,280) | 241,462 (+4,082) | -| 2025-07-29 | 108,998 (+3,552) | 137,542 (+1,526) | 246,540 (+5,078) | -| 2025-07-30 | 113,544 (+4,546) | 140,317 (+2,775) | 253,861 (+7,321) | -| 2025-07-31 | 118,339 (+4,795) | 143,344 (+3,027) | 261,683 (+7,822) | -| 2025-08-01 | 123,539 (+5,200) | 146,680 (+3,336) | 270,219 (+8,536) | -| 2025-08-02 | 127,864 (+4,325) | 149,236 (+2,556) | 277,100 (+6,881) | -| 2025-08-03 | 131,397 (+3,533) | 150,451 (+1,215) | 281,848 (+4,748) | -| 2025-08-04 | 136,266 (+4,869) | 153,260 (+2,809) | 289,526 (+7,678) | -| 2025-08-05 | 141,596 (+5,330) | 155,752 (+2,492) | 297,348 (+7,822) | -| 2025-08-06 | 147,067 (+5,471) | 158,309 (+2,557) | 305,376 (+8,028) | diff --git a/bun.lock b/bun.lock index 39c91701..1dabf9a6 100644 --- a/bun.lock +++ b/bun.lock @@ -5,106 +5,63 @@ "name": "opencode", "devDependencies": { "prettier": "3.5.3", - "sst": "3.17.8", + "sst": "3.17.6", }, }, "packages/function": { "name": "@opencode/function", - "version": "0.3.130", - "dependencies": { - "@ai-sdk/anthropic": "2.0.0", - "@ai-sdk/openai": "2.0.2", - "@ai-sdk/openai-compatible": "1.0.1", - "@octokit/auth-app": "8.0.1", - "@octokit/rest": "22.0.0", - "ai": "catalog:", - "hono": "catalog:", - "jose": "6.0.11", - }, + "version": "0.0.1", "devDependencies": { "@cloudflare/workers-types": "4.20250522.0", "@types/node": "catalog:", - "openai": "5.11.0", "typescript": "catalog:", }, }, "packages/opencode": { "name": "opencode", - "version": "0.3.130", + "version": "0.0.5", "bin": { "opencode": "./bin/opencode", }, "dependencies": { - "@actions/core": "1.11.1", - "@actions/github": "6.0.1", - "@clack/prompts": "1.0.0-alpha.1", - "@hono/zod-validator": "0.4.2", - "@modelcontextprotocol/sdk": "1.15.1", - "@octokit/graphql": "9.0.1", - "@octokit/rest": "22.0.0", + "@clack/prompts": "0.11.0", + "@flystorage/file-storage": "1.1.0", + "@flystorage/local-fs": "1.1.0", + "@hono/zod-validator": "0.5.0", "@openauthjs/openauth": "0.4.3", - "@opencode-ai/plugin": "workspace:*", - "@opencode-ai/sdk": "workspace:*", "@standard-schema/spec": "1.0.0", - "@zip.js/zip.js": "2.7.62", "ai": "catalog:", "decimal.js": "10.5.0", "diff": "8.0.2", - "gray-matter": "4.0.3", - "hono": "catalog:", + "env-paths": "3.0.0", + "hono": "4.7.10", "hono-openapi": "0.4.8", - "isomorphic-git": "1.32.1", - "jsonc-parser": "3.3.1", - "minimatch": "10.0.3", "open": "10.1.2", - "remeda": "catalog:", - "tree-sitter": "0.22.4", - "tree-sitter-bash": "0.23.3", + "remeda": "2.22.3", + "ts-lsp-client": "1.0.3", "turndown": "7.2.0", "vscode-jsonrpc": "8.2.1", + "vscode-languageclient": "8", "xdg-basedir": "5.1.0", "yargs": "18.0.0", "zod": "catalog:", - "zod-openapi": "4.1.0", + "zod-openapi": "4.2.4", + "zod-validation-error": "3.5.2", }, "devDependencies": { "@ai-sdk/amazon-bedrock": "2.2.10", "@ai-sdk/anthropic": "1.2.12", - "@octokit/webhooks-types": "7.6.1", - "@standard-schema/spec": "1.0.0", "@tsconfig/bun": "1.0.7", "@types/bun": "latest", "@types/turndown": "5.0.5", "@types/yargs": "17.0.33", "typescript": "catalog:", - "vscode-languageserver-types": "3.17.5", "zod-to-json-schema": "3.24.5", }, }, - "packages/plugin": { - "name": "@opencode-ai/plugin", - "version": "0.3.130", - "dependencies": { - "@opencode-ai/sdk": "workspace:*", - }, - "devDependencies": { - "@hey-api/openapi-ts": "0.80.1", - "@tsconfig/node22": "catalog:", - "typescript": "catalog:", - }, - }, - "packages/sdk/js": { - "name": "@opencode-ai/sdk", - "version": "0.3.130", - "devDependencies": { - "@hey-api/openapi-ts": "0.80.1", - "@tsconfig/node22": "catalog:", - "typescript": "catalog:", - }, - }, "packages/web": { "name": "@opencode/web", - "version": "0.3.130", + "version": "0.0.1", "dependencies": { "@astrojs/cloudflare": "^12.5.4", "@astrojs/markdown-remark": "6.3.1", @@ -120,13 +77,11 @@ "lang-map": "0.4.0", "luxon": "3.6.1", "marked": "15.0.12", - "marked-shiki": "1.2.1", "rehype-autolink-headings": "7.1.0", - "remeda": "2.26.0", "sharp": "0.32.5", "shiki": "3.4.2", "solid-js": "1.9.7", - "toolbeam-docs-theme": "0.4.3", + "toolbeam-docs-theme": "0.3.0", }, "devDependencies": { "@types/node": "catalog:", @@ -139,57 +94,48 @@ "sharp", "esbuild", ], + "patchedDependencies": { + "ai@4.3.16": "patches/ai@4.3.16.patch", + }, + "overrides": { + "zod": "3.24.2", + }, "catalog": { - "@tsconfig/node22": "22.0.2", "@types/node": "22.13.9", - "ai": "5.0.0-beta.34", - "hono": "4.7.10", - "remeda": "2.26.0", + "ai": "4.3.16", "typescript": "5.8.2", - "zod": "3.25.49", + "zod": "3.24.2", }, "packages": { - "@actions/core": ["@actions/core@1.11.1", "", { "dependencies": { "@actions/exec": "^1.1.1", "@actions/http-client": "^2.0.1" } }, "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A=="], - - "@actions/exec": ["@actions/exec@1.1.1", "", { "dependencies": { "@actions/io": "^1.0.1" } }, "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w=="], - - "@actions/github": ["@actions/github@6.0.1", "", { "dependencies": { "@actions/http-client": "^2.2.0", "@octokit/core": "^5.0.1", "@octokit/plugin-paginate-rest": "^9.2.2", "@octokit/plugin-rest-endpoint-methods": "^10.4.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "undici": "^5.28.5" } }, "sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw=="], - - "@actions/http-client": ["@actions/http-client@2.2.3", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="], - - "@actions/io": ["@actions/io@1.1.3", "", {}, "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q=="], - "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@2.2.10", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-icLGO7Q0NinnHIPgT+y1QjHVwH4HwV+brWbvM+FfCG2Afpa89PyKa3Ret91kGjZpBgM/xnj1B7K5eM+rRlsXQA=="], - "@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.0", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-uyyaO4KhxoIKZztREqLPh+6/K3ZJx/rp72JKoUEL9/kC+vfQTThUfPnY/bUryUpcnawx8IY/tSoYNOi/8PCv7w=="], + "@ai-sdk/anthropic": ["@ai-sdk/anthropic@1.2.12", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-YSzjlko7JvuiyQFmI9RN1tNZdEiZxc+6xld/0tq/VkJaHpEzGAb1yiNxxvmYVcjvfu/PcvCxAAYXmTYQQ63IHQ=="], - "@ai-sdk/gateway": ["@ai-sdk/gateway@1.0.0-beta.19", "", { "dependencies": { "@ai-sdk/provider": "2.0.0-beta.2", "@ai-sdk/provider-utils": "3.0.0-beta.10" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-felWPMuECZRGx8xnmvH5dW3jywKTkGnw/tXN8szphGzEDr/BfxywuXijfPBG2WBUS6frPXsvSLDRdCm5W38PXA=="], + "@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="], - "@ai-sdk/openai": ["@ai-sdk/openai@2.0.2", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-D4zYz2uR90aooKQvX1XnS00Z7PkbrcY+snUvPfm5bCabTG7bzLrVtD56nJ5bSaZG8lmuOMfXpyiEEArYLyWPpw=="], + "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="], - "@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@1.0.1", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-luHVcU+yKzwv3ekKgbP3v+elUVxb2Rt+8c6w9qi7g2NYG2/pEL21oIrnaEnc6UtTZLLZX9EFBcpq2N1FQKDIMw=="], + "@ai-sdk/react": ["@ai-sdk/react@1.2.12", "", { "dependencies": { "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/ui-utils": "1.2.11", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["zod"] }, "sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g=="], - "@ai-sdk/provider": ["@ai-sdk/provider@2.0.0", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA=="], - - "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.0", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.3", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-BoQZtGcBxkeSH1zK+SRYNDtJPIPpacTeiMZqnG4Rv6xXjEwM0FH4MGs9c+PlhyEWmQCzjRM2HAotEydFhD4dYw=="], + "@ai-sdk/ui-utils": ["@ai-sdk/ui-utils@1.2.11", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w=="], "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], "@apidevtools/json-schema-ref-parser": ["@apidevtools/json-schema-ref-parser@11.9.3", "", { "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.0" } }, "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ=="], - "@astrojs/cloudflare": ["@astrojs/cloudflare@12.6.0", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.1", "@astrojs/underscore-redirects": "1.0.0", "@cloudflare/workers-types": "^4.20250507.0", "tinyglobby": "^0.2.13", "vite": "^6.3.5", "wrangler": "^4.14.1" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-pQ8bokC59GEiXvyXpC4swBNoL7C/EknP+82KFzQwgR/Aeo5N1oPiAoPHgJbpPya/YF4E26WODdCQfBQDvLRfuw=="], + "@astrojs/cloudflare": ["@astrojs/cloudflare@12.5.4", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.1", "@astrojs/underscore-redirects": "0.6.1", "@cloudflare/workers-types": "^4.20250507.0", "tinyglobby": "^0.2.13", "vite": "^6.3.5", "wrangler": "^4.14.1" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-WKUeMP2tIbddEu0tlVEPj8o9m/8CJB6who3a3jupuIyR56ltmW924ZOMYtp/C9uxH7KeDJXrMszRj3LHs9U97w=="], - "@astrojs/compiler": ["@astrojs/compiler@2.12.2", "", {}, "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw=="], + "@astrojs/compiler": ["@astrojs/compiler@2.12.0", "", {}, "sha512-7bCjW6tVDpUurQLeKBUN9tZ5kSv5qYrGmcn0sG0IwacL7isR2ZbyyA3AdZ4uxsuUFOS2SlgReTH7wkxO6zpqWA=="], "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.6.1", "", {}, "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A=="], "@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.1", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.1", "@astrojs/prism": "3.2.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.1.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.1", "remark-smartypants": "^3.0.2", "shiki": "^3.0.0", "smol-toml": "^1.3.1", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-c5F5gGrkczUaTVgmMW9g1YMJGzOtRvjjhw6IfGuxarM6ct09MpwysP10US729dy07gg8y+ofVifezvP3BNsWZg=="], - "@astrojs/mdx": ["@astrojs/mdx@4.3.1", "", { "dependencies": { "@astrojs/markdown-remark": "6.3.3", "@mdx-js/mdx": "^3.1.0", "acorn": "^8.14.1", "es-module-lexer": "^1.6.0", "estree-util-visit": "^2.0.0", "hast-util-to-html": "^9.0.5", "kleur": "^4.1.5", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.1", "remark-smartypants": "^3.0.2", "source-map": "^0.7.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-0ynzkFd5p2IFDLPAfAcGizg44WyS0qUr43nP2vQkvrPlpoPEMeeoi1xWiWsVqQNaZ0FOmNqfUviUn52nm9mLag=="], + "@astrojs/mdx": ["@astrojs/mdx@4.3.0", "", { "dependencies": { "@astrojs/markdown-remark": "6.3.2", "@mdx-js/mdx": "^3.1.0", "acorn": "^8.14.1", "es-module-lexer": "^1.6.0", "estree-util-visit": "^2.0.0", "hast-util-to-html": "^9.0.5", "kleur": "^4.1.5", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.1", "remark-smartypants": "^3.0.2", "source-map": "^0.7.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-OGX2KvPeBzjSSKhkCqrUoDMyzFcjKt5nTE5SFw3RdoLf0nrhyCXBQcCyclzWy1+P+XpOamn+p+hm1EhpCRyPxw=="], "@astrojs/prism": ["@astrojs/prism@3.2.0", "", { "dependencies": { "prismjs": "^1.29.0" } }, "sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw=="], - "@astrojs/sitemap": ["@astrojs/sitemap@3.4.2", "", { "dependencies": { "sitemap": "^8.0.0", "stream-replace-string": "^2.0.0", "zod": "^3.24.4" } }, "sha512-wfN2dZzdkto6yaMtOFa/J9gc60YE3wl3rgSBoNJ+MU3lJVUMsDY9xf9uAVi8Mp/zEQKFDSJlQzBvqQUpw0Hf6g=="], + "@astrojs/sitemap": ["@astrojs/sitemap@3.4.0", "", { "dependencies": { "sitemap": "^8.0.0", "stream-replace-string": "^2.0.0", "zod": "^3.24.2" } }, "sha512-C5m/xsKvRSILKM3hy47n5wKtTQtJXn8epoYuUmCCstaE9XBt20yInym3Bz2uNbEiNfv11bokoW0MqeXPIvjFIQ=="], "@astrojs/solid-js": ["@astrojs/solid-js@5.1.0", "", { "dependencies": { "vite": "^6.3.5", "vite-plugin-solid": "^2.11.6" }, "peerDependencies": { "solid-devtools": "^0.30.1", "solid-js": "^1.8.5" }, "optionalPeers": ["solid-devtools"] }, "sha512-VmPHOU9k7m6HHCT2Y1mNzifilUnttlowBM36frGcfj5wERJE9Ci0QtWJbzdf6AlcoIirb7xVw+ByupU011Di9w=="], @@ -197,26 +143,24 @@ "@astrojs/telemetry": ["@astrojs/telemetry@3.2.1", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-SSVM820Jqc6wjsn7qYfV9qfeQvePtVc1nSofhyap7l0/iakUKywj3hfy3UJAOV4sGV4Q/u450RD4AaCaFvNPlg=="], - "@astrojs/underscore-redirects": ["@astrojs/underscore-redirects@1.0.0", "", {}, "sha512-qZxHwVnmb5FXuvRsaIGaqWgnftjCuMY+GSbaVZdBmE4j8AfgPqKPxYp8SUERyJcjpKCEmO4wD6ybuGH8A2kVRQ=="], + "@astrojs/underscore-redirects": ["@astrojs/underscore-redirects@0.6.1", "", {}, "sha512-4bMLrs2KW+8/vHEE5Ffv2HbxCbbgXO+2N6MpoCsMXUlUoi7pgEEx8kbkzMXJ2dZtWF3gvwm9lvgjnFeanC2LGg=="], "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], - "@aws-sdk/types": ["@aws-sdk/types@3.840.0", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA=="], + "@aws-sdk/types": ["@aws-sdk/types@3.821.0", "", { "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-Znroqdai1a90TlxGaJ+FK1lwC0fHpo97Xjsp5UKGR5JODYm7f9+/fF17ebO1KdoBr/Rm0UIFiF5VmI8ts9F1eA=="], "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - "@babel/compat-data": ["@babel/compat-data@7.28.0", "", {}, "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw=="], + "@babel/compat-data": ["@babel/compat-data@7.27.3", "", {}, "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw=="], - "@babel/core": ["@babel/core@7.28.0", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.6", "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ=="], + "@babel/core": ["@babel/core@7.27.4", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.4", "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", "@babel/traverse": "^7.27.4", "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g=="], - "@babel/generator": ["@babel/generator@7.28.0", "", { "dependencies": { "@babel/parser": "^7.28.0", "@babel/types": "^7.28.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg=="], + "@babel/generator": ["@babel/generator@7.27.3", "", { "dependencies": { "@babel/parser": "^7.27.3", "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q=="], "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.27.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg=="], @@ -229,39 +173,39 @@ "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], - "@babel/helpers": ["@babel/helpers@7.28.2", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw=="], + "@babel/helpers": ["@babel/helpers@7.27.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.27.3" } }, "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ=="], - "@babel/parser": ["@babel/parser@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.0" }, "bin": "./bin/babel-parser.js" }, "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g=="], + "@babel/parser": ["@babel/parser@7.27.4", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": "./bin/babel-parser.js" }, "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g=="], "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w=="], - "@babel/runtime": ["@babel/runtime@7.28.2", "", {}, "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA=="], + "@babel/runtime": ["@babel/runtime@7.27.4", "", {}, "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA=="], "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - "@babel/traverse": ["@babel/traverse@7.28.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", "@babel/types": "^7.28.0", "debug": "^4.3.1" } }, "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg=="], + "@babel/traverse": ["@babel/traverse@7.27.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA=="], - "@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/types": ["@babel/types@7.27.3", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw=="], "@capsizecss/unpack": ["@capsizecss/unpack@2.4.0", "", { "dependencies": { "blob-to-buffer": "^1.2.8", "cross-fetch": "^3.0.4", "fontkit": "^2.0.2" } }, "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q=="], - "@clack/core": ["@clack/core@1.0.0-alpha.1", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-rFbCU83JnN7l3W1nfgCqqme4ZZvTTgsiKQ6FM0l+r0P+o2eJpExcocBUWUIwnDzL76Aca9VhUdWmB2MbUv+Qyg=="], + "@clack/core": ["@clack/core@0.5.0", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow=="], - "@clack/prompts": ["@clack/prompts@1.0.0-alpha.1", "", { "dependencies": { "@clack/core": "1.0.0-alpha.1", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-07MNT0OsxjKOcyVfX8KhXBhJiyUbDP1vuIAcHc+nx5v93MJO23pX3X/k3bWz6T3rpM9dgWPq90i4Jq7gZAyMbw=="], + "@clack/prompts": ["@clack/prompts@0.11.0", "", { "dependencies": { "@clack/core": "0.5.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw=="], "@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.0", "", { "dependencies": { "mime": "^3.0.0" } }, "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA=="], - "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.5.0", "", { "peerDependencies": { "unenv": "2.0.0-rc.19", "workerd": "^1.20250722.0" }, "optionalPeers": ["workerd"] }, "sha512-CZe9B2VbjIQjBTyc+KoZcN1oUcm4T6GgCXoel9O7647djHuSRAa6sM6G+NdxWArATZgeMMbsvn9C50GCcnIatA=="], + "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.3.2", "", { "peerDependencies": { "unenv": "2.0.0-rc.17", "workerd": "^1.20250508.0" }, "optionalPeers": ["workerd"] }, "sha512-MtUgNl+QkQyhQvv5bbWP+BpBC1N0me4CHHuP2H4ktmOMKdB/6kkz/lo+zqiA4mEazb4y+1cwyNjVrQ2DWeE4mg=="], - "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20250730.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-X3egNyTjLQaECYe34x8Al7r4oXAhcN3a8+8qcpNCcq1sgtuHIeAwS9potgRR/mwkGfmrJn7nfAyDKC4vrkniQQ=="], + "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20250525.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-L5l+7sSJJT2+riR5rS3Q3PKNNySPjWfRIeaNGMVRi1dPO6QPi4lwuxfRUFNoeUdilZJUVPfSZvTtj9RedsKznQ=="], - "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20250730.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/4bvcaGY/9v0rghgKboGiyPKKGQTbDnQ1EeY0oN0SSQH0Cp3OBzqwni/JRvh8TEaD+5azJnSFLlFZj9w7fo+hw=="], + "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20250525.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y3IbIdrF/vJWh/WBvshwcSyUh175VAiLRW7963S1dXChrZ1N5wuKGQm9xY69cIGVtitpMJWWW3jLq7J/Xxwm0Q=="], - "@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20250730.0", "", { "os": "linux", "cpu": "x64" }, "sha512-I4ZsXYdNkqkJnzNFKADMufiLIzRdIRsN7dSH8UCPw2fYp1BbKA10AkKVqitFwBxIY8eOzQ6Vf7c41AjLQmtJqA=="], + "@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20250525.0", "", { "os": "linux", "cpu": "x64" }, "sha512-KSyQPAby+c6cpENoO0ayCQlY6QIh28l/+QID7VC1SLXfiNHy+hPNsH1vVBTST6CilHVAQSsy9tCZ9O9XECB8yg=="], - "@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20250730.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-tTpO6139jFQ5vxgtBZgS8Y8R1jVidS4n7s37x5xO9bCWLZoL0kTj38UGZ8FENkTeaMxE9Mm//nbQol7TfJ2nZg=="], + "@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20250525.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Nt0FUxS2kQhJUea4hMCNPaetkrAFDhPnNX/ntwcqVlGgnGt75iaAhupWJbU0GB+gIWlKeuClUUnDZqKbicoKyg=="], - "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20250730.0", "", { "os": "win32", "cpu": "x64" }, "sha512-paVHgocuilMzOU+gEyKR/86j/yI+QzmSHRnqdd8OdQ37Hf6SyPX7kQj6VVNRXbzVHWix1WxaJsXfTGK1LK05wA=="], + "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20250525.0", "", { "os": "win32", "cpu": "x64" }, "sha512-mwTj+9f3uIa4NEXR1cOa82PjLa6dbrb3J+KCVJFYIaq7e63VxEzOchCXS4tublT2pmOhmFqkgBMXrxozxNkR2Q=="], "@cloudflare/workers-types": ["@cloudflare/workers-types@4.20250522.0", "", {}, "sha512-9RIffHobc35JWeddzBguGgPa4wLDr5x5F94+0/qy7LiV6pTBQ/M5qGEN9VA16IDT3EUpYI0WKh6VpcmeVEtVtw=="], @@ -269,77 +213,79 @@ "@ctrl/tinycolor": ["@ctrl/tinycolor@4.1.0", "", {}, "sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ=="], - "@emnapi/runtime": ["@emnapi/runtime@1.4.5", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg=="], + "@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.8", "", { "os": "aix", "cpu": "ppc64" }, "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.8", "", { "os": "android", "cpu": "arm" }, "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.5", "", { "os": "android", "cpu": "arm" }, "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.8", "", { "os": "android", "cpu": "arm64" }, "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.5", "", { "os": "android", "cpu": "arm64" }, "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.8", "", { "os": "android", "cpu": "x64" }, "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.5", "", { "os": "android", "cpu": "x64" }, "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.8", "", { "os": "darwin", "cpu": "x64" }, "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.8", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.8", "", { "os": "freebsd", "cpu": "x64" }, "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.8", "", { "os": "linux", "cpu": "arm" }, "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.8", "", { "os": "linux", "cpu": "ia32" }, "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.8", "", { "os": "linux", "cpu": "none" }, "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.8", "", { "os": "linux", "cpu": "none" }, "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.8", "", { "os": "linux", "cpu": "ppc64" }, "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.8", "", { "os": "linux", "cpu": "none" }, "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.8", "", { "os": "linux", "cpu": "s390x" }, "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.8", "", { "os": "linux", "cpu": "x64" }, "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.5", "", { "os": "linux", "cpu": "x64" }, "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.8", "", { "os": "none", "cpu": "arm64" }, "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.5", "", { "os": "none", "cpu": "arm64" }, "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.8", "", { "os": "none", "cpu": "x64" }, "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.5", "", { "os": "none", "cpu": "x64" }, "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.8", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.5", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.8", "", { "os": "openbsd", "cpu": "x64" }, "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.8", "", { "os": "none", "cpu": "arm64" }, "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.8", "", { "os": "sunos", "cpu": "x64" }, "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.8", "", { "os": "win32", "cpu": "arm64" }, "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.8", "", { "os": "win32", "cpu": "ia32" }, "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.5", "", { "os": "win32", "cpu": "x64" }, "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.8", "", { "os": "win32", "cpu": "x64" }, "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw=="], + "@expressive-code/core": ["@expressive-code/core@0.41.2", "", { "dependencies": { "@ctrl/tinycolor": "^4.0.4", "hast-util-select": "^6.0.2", "hast-util-to-html": "^9.0.1", "hast-util-to-text": "^4.0.1", "hastscript": "^9.0.0", "postcss": "^8.4.38", "postcss-nested": "^6.0.1", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1" } }, "sha512-AJW5Tp9czbLqKMzwudL9Rv4js9afXBxkSGLmCNPq1iRgAYcx9NkTPJiSNCesjKRWoVC328AdSu6fqrD22zDgDg=="], - "@expressive-code/core": ["@expressive-code/core@0.41.3", "", { "dependencies": { "@ctrl/tinycolor": "^4.0.4", "hast-util-select": "^6.0.2", "hast-util-to-html": "^9.0.1", "hast-util-to-text": "^4.0.1", "hastscript": "^9.0.0", "postcss": "^8.4.38", "postcss-nested": "^6.0.1", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1" } }, "sha512-9qzohqU7O0+JwMEEgQhnBPOw5DtsQRBXhW++5fvEywsuX44vCGGof1SL5OvPElvNgaWZ4pFZAFSlkNOkGyLwSQ=="], + "@expressive-code/plugin-frames": ["@expressive-code/plugin-frames@0.41.2", "", { "dependencies": { "@expressive-code/core": "^0.41.2" } }, "sha512-pfy0hkJI4nbaONjmksFDcuHmIuyPTFmi1JpABe4q2ajskiJtfBf+WDAL2pg595R9JNoPrrH5+aT9lbkx2noicw=="], - "@expressive-code/plugin-frames": ["@expressive-code/plugin-frames@0.41.3", "", { "dependencies": { "@expressive-code/core": "^0.41.3" } }, "sha512-rFQtmf/3N2CK3Cq/uERweMTYZnBu+CwxBdHuOftEmfA9iBE7gTVvwpbh82P9ZxkPLvc40UMhYt7uNuAZexycRQ=="], + "@expressive-code/plugin-shiki": ["@expressive-code/plugin-shiki@0.41.2", "", { "dependencies": { "@expressive-code/core": "^0.41.2", "shiki": "^3.2.2" } }, "sha512-xD4zwqAkDccXqye+235BH5bN038jYiSMLfUrCOmMlzxPDGWdxJDk5z4uUB/aLfivEF2tXyO2zyaarL3Oqht0fQ=="], - "@expressive-code/plugin-shiki": ["@expressive-code/plugin-shiki@0.41.3", "", { "dependencies": { "@expressive-code/core": "^0.41.3", "shiki": "^3.2.2" } }, "sha512-RlTARoopzhFJIOVHLGvuXJ8DCEme/hjV+ZnRJBIxzxsKVpGPW4Oshqg9xGhWTYdHstTsxO663s0cdBLzZj9TQA=="], - - "@expressive-code/plugin-text-markers": ["@expressive-code/plugin-text-markers@0.41.3", "", { "dependencies": { "@expressive-code/core": "^0.41.3" } }, "sha512-SN8tkIzDpA0HLAscEYD2IVrfLiid6qEdE9QLlGVSxO1KEw7qYvjpbNBQjUjMr5/jvTJ7ys6zysU2vLPHE0sb2g=="], + "@expressive-code/plugin-text-markers": ["@expressive-code/plugin-text-markers@0.41.2", "", { "dependencies": { "@expressive-code/core": "^0.41.2" } }, "sha512-JFWBz2qYxxJOJkkWf96LpeolbnOqJY95TvwYc0hXIHf9oSWV0h0SY268w/5N3EtQaD9KktzDE+VIVwb9jdb3nw=="], "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], + "@flystorage/dynamic-import": ["@flystorage/dynamic-import@1.0.0", "", {}, "sha512-CIbIUrBdaPFyKnkVBaqzksvzNtsMSXITR/G/6zlil3MBnPFq2LX+X4Mv5p2XOmv/3OulFs/ff2SNb+5dc2Twtg=="], + + "@flystorage/file-storage": ["@flystorage/file-storage@1.1.0", "", {}, "sha512-25Gd5EsXDmhHrK5orpRuVqebQms1Cm9m5ACMZ0sVDX+Sbl1V0G88CbcWt7mEoWRYLvQ1U072htqg6Sav76ZlVA=="], + + "@flystorage/local-fs": ["@flystorage/local-fs@1.1.0", "", { "dependencies": { "@flystorage/dynamic-import": "^1.0.0", "@flystorage/file-storage": "^1.1.0", "file-type": "^20.5.0", "mime-types": "^3.0.1" } }, "sha512-dbErRhqmCv2UF0zPdeH7iVWuVeTWAJHuJD/mXDe2V370/SL7XIvdE3ditBHWC+1SzBKXJ0lkykOenwlum+oqIA=="], + "@fontsource/ibm-plex-mono": ["@fontsource/ibm-plex-mono@5.2.5", "", {}, "sha512-G09N3GfuT9qj3Ax2FDZvKqZttzM3v+cco2l8uXamhKyXLdmlaUDH5o88/C3vtTHj2oT7yRKsvxz9F+BXbWKMYA=="], - "@hey-api/json-schema-ref-parser": ["@hey-api/json-schema-ref-parser@1.0.6", "", { "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.0", "lodash": "^4.17.21" } }, "sha512-yktiFZoWPtEW8QKS65eqKwA5MTKp88CyiL8q72WynrBs/73SAaxlSWlA2zW/DZlywZ5hX1OYzrCC0wFdvO9c2w=="], + "@hapi/bourne": ["@hapi/bourne@2.1.0", "", {}, "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q=="], - "@hey-api/openapi-ts": ["@hey-api/openapi-ts@0.80.1", "", { "dependencies": { "@hey-api/json-schema-ref-parser": "1.0.6", "ansi-colors": "4.1.3", "c12": "2.0.1", "color-support": "1.1.3", "commander": "13.0.0", "handlebars": "4.7.8", "open": "10.1.2", "semver": "7.7.2" }, "peerDependencies": { "typescript": "^5.5.3" }, "bin": { "openapi-ts": "bin/index.cjs" } }, "sha512-AC478kg36vmmrseLZNFonZ/cmXXmDzW5yWz4PVg1S8ebJsRtVRJ/QU+mtnXfzf9avN2P0pz/AO4WAe4jyFY2gA=="], - - "@hono/zod-validator": ["@hono/zod-validator@0.4.2", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.19.1" } }, "sha512-1rrlBg+EpDPhzOV4hT9pxr5+xDVmKuz6YJl+la7VCwK6ass5ldyKm5fD+umJdV2zhHD6jROoCCv8NbTwyfhT0g=="], + "@hono/zod-validator": ["@hono/zod-validator@0.5.0", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.19.1" } }, "sha512-ds5bW6DCgAnNHP33E3ieSbaZFd5dkV52ZjyaXtGoR06APFrCtzAsKZxTHwOrJNBdXsi0e5wNwo5L4nVEVnJUdg=="], "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.0.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ=="], @@ -379,15 +325,13 @@ "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.33.5", "", { "os": "win32", "cpu": "x64" }, "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg=="], - "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], - - "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], - - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.12", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.4", "", {}, "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw=="], + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], @@ -397,52 +341,10 @@ "@mixmark-io/domino": ["@mixmark-io/domino@2.2.0", "", {}, "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="], - "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.15.1", "", { "dependencies": { "ajv": "^6.12.6", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-W/XlN9c528yYn+9MQkVjxiTPgPxoxt+oczfjHBDsJx0+59+O7B75Zhsp0B16Xbwbz8ANISDajh6+V7nIcPMc5w=="], - - "@octokit/auth-app": ["@octokit/auth-app@8.0.1", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.1", "@octokit/auth-oauth-user": "^6.0.0", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "toad-cache": "^3.7.0", "universal-github-app-jwt": "^2.2.0", "universal-user-agent": "^7.0.0" } }, "sha512-P2J5pB3pjiGwtJX4WqJVYCtNkcZ+j5T2Wm14aJAEIC3WJOrv12jvBley3G1U/XI8q9o1A7QMG54LiFED2BiFlg=="], - - "@octokit/auth-oauth-app": ["@octokit/auth-oauth-app@9.0.1", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.1", "@octokit/auth-oauth-user": "^6.0.0", "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-TthWzYxuHKLAbmxdFZwFlmwVyvynpyPmjwc+2/cI3cvbT7mHtsAW9b1LvQaNnAuWL+pFnqtxdmrU8QpF633i1g=="], - - "@octokit/auth-oauth-device": ["@octokit/auth-oauth-device@8.0.1", "", { "dependencies": { "@octokit/oauth-methods": "^6.0.0", "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-TOqId/+am5yk9zor0RGibmlqn4V0h8vzjxlw/wYr3qzkQxl8aBPur384D1EyHtqvfz0syeXji4OUvKkHvxk/Gw=="], - - "@octokit/auth-oauth-user": ["@octokit/auth-oauth-user@6.0.0", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.1", "@octokit/oauth-methods": "^6.0.0", "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-GV9IW134PHsLhtUad21WIeP9mlJ+QNpFd6V9vuPWmaiN25HEJeEQUcS4y5oRuqCm9iWDLtfIs+9K8uczBXKr6A=="], - - "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], - - "@octokit/core": ["@octokit/core@7.0.3", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="], - - "@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], - - "@octokit/graphql": ["@octokit/graphql@9.0.1", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="], - - "@octokit/oauth-authorization-url": ["@octokit/oauth-authorization-url@8.0.0", "", {}, "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ=="], - - "@octokit/oauth-methods": ["@octokit/oauth-methods@6.0.0", "", { "dependencies": { "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0" } }, "sha512-Q8nFIagNLIZgM2odAraelMcDssapc+lF+y3OlcIPxyAU+knefO8KmozGqfnma1xegRDP4z5M73ABsamn72bOcA=="], - - "@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], - - "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@13.1.1", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw=="], - - "@octokit/plugin-request-log": ["@octokit/plugin-request-log@6.0.0", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q=="], - - "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@16.0.0", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g=="], - - "@octokit/request": ["@octokit/request@10.0.3", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="], - - "@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], - - "@octokit/rest": ["@octokit/rest@22.0.0", "", { "dependencies": { "@octokit/core": "^7.0.2", "@octokit/plugin-paginate-rest": "^13.0.1", "@octokit/plugin-request-log": "^6.0.0", "@octokit/plugin-rest-endpoint-methods": "^16.0.0" } }, "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA=="], - - "@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], - - "@octokit/webhooks-types": ["@octokit/webhooks-types@7.6.1", "", {}, "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw=="], + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.6.1", "", { "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^4.1.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA=="], "@openauthjs/openauth": ["@openauthjs/openauth@0.4.3", "", { "dependencies": { "@standard-schema/spec": "1.0.0-beta.3", "aws4fetch": "1.0.20", "jose": "5.9.6" }, "peerDependencies": { "arctic": "^2.2.2", "hono": "^4.0.0" } }, "sha512-RlnjqvHzqcbFVymEwhlUEuac4utA5h4nhSK/i2szZuQmxTIqbGUxZ+nM+avM+VV4Ing+/ZaNLKILoXS3yrkOOw=="], - "@opencode-ai/plugin": ["@opencode-ai/plugin@workspace:packages/plugin"], - - "@opencode-ai/sdk": ["@opencode-ai/sdk@workspace:packages/sdk/js"], - "@opencode/function": ["@opencode/function@workspace:packages/function"], "@opencode/web": ["@opencode/web@workspace:packages/web"], @@ -471,53 +373,47 @@ "@pagefind/windows-x64": ["@pagefind/windows-x64@1.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-BR1bIRWOMqkf8IoU576YDhij1Wd/Zf2kX/kCI0b2qzCKC8wcc2GQJaaRMCpzvCCrmliO4vtJ6RITp/AnoYUUmQ=="], - "@poppinss/colors": ["@poppinss/colors@4.1.5", "", { "dependencies": { "kleur": "^4.1.5" } }, "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw=="], + "@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], - "@poppinss/dumper": ["@poppinss/dumper@0.6.4", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@sindresorhus/is": "^7.0.2", "supports-color": "^10.0.0" } }, "sha512-iG0TIdqv8xJ3Lt9O8DrPRxw1MRLjNpoqiSGU03P/wNLP/s0ra0udPJ1J2Tx5M0J3H/cVyEgpbn8xUKRY9j59kQ=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.41.1", "", { "os": "android", "cpu": "arm" }, "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw=="], - "@poppinss/exception": ["@poppinss/exception@1.2.2", "", {}, "sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.41.1", "", { "os": "android", "cpu": "arm64" }, "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA=="], - "@rollup/pluginutils": ["@rollup/pluginutils@5.2.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.41.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.46.2", "", { "os": "android", "cpu": "arm" }, "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.41.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.46.2", "", { "os": "android", "cpu": "arm64" }, "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.41.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.46.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.41.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.46.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.41.1", "", { "os": "linux", "cpu": "arm" }, "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.46.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.41.1", "", { "os": "linux", "cpu": "arm" }, "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.46.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.41.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.46.2", "", { "os": "linux", "cpu": "arm" }, "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.41.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.46.2", "", { "os": "linux", "cpu": "arm" }, "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ=="], + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.46.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng=="], + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.41.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.46.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw=="], - "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.46.2", "", { "os": "linux", "cpu": "none" }, "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.46.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.41.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.46.2", "", { "os": "linux", "cpu": "none" }, "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.41.1", "", { "os": "linux", "cpu": "x64" }, "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.46.2", "", { "os": "linux", "cpu": "none" }, "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.41.1", "", { "os": "linux", "cpu": "x64" }, "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.46.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.41.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.46.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.41.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.46.2", "", { "os": "linux", "cpu": "x64" }, "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA=="], - - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.46.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g=="], - - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.46.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ=="], - - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.46.2", "", { "os": "win32", "cpu": "x64" }, "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.41.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw=="], "@shikijs/core": ["@shikijs/core@3.4.2", "", { "dependencies": { "@shikijs/types": "3.4.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ=="], @@ -535,8 +431,6 @@ "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], - "@sindresorhus/is": ["@sindresorhus/is@7.0.2", "", {}, "sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw=="], - "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.0.4", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.3.1", "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig=="], "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.0.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw=="], @@ -549,15 +443,15 @@ "@smithy/util-utf8": ["@smithy/util-utf8@4.0.0", "", { "dependencies": { "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow=="], - "@speed-highlight/core": ["@speed-highlight/core@1.2.7", "", {}, "sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g=="], - "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], - "@tsconfig/bun": ["@tsconfig/bun@1.0.7", "", {}, "sha512-udGrGJBNQdXGVulehc1aWT73wkR9wdaGBtB6yL70RJsqwW/yJhIg6ZbRlPOfIUiFNrnBuYLBi9CSmMKfDC7dvA=="], + "@tokenizer/inflate": ["@tokenizer/inflate@0.2.7", "", { "dependencies": { "debug": "^4.4.0", "fflate": "^0.8.2", "token-types": "^6.0.0" } }, "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg=="], - "@tsconfig/node22": ["@tsconfig/node22@22.0.2", "", {}, "sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA=="], + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + + "@tsconfig/bun": ["@tsconfig/bun@1.0.7", "", {}, "sha512-udGrGJBNQdXGVulehc1aWT73wkR9wdaGBtB6yL70RJsqwW/yJhIg6ZbRlPOfIUiFNrnBuYLBi9CSmMKfDC7dvA=="], "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], @@ -567,11 +461,13 @@ "@types/babel__traverse": ["@types/babel__traverse@7.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng=="], - "@types/bun": ["@types/bun@1.2.19", "", { "dependencies": { "bun-types": "1.2.19" } }, "sha512-d9ZCmrH3CJ2uYKXQIUuZ/pUnTqIvLDS0SK7pFmbx8ma+ziH/FRMoAq5bYpRG7y+w1gl+HgyNZbtqgMq4W4e2Lg=="], + "@types/bun": ["@types/bun@1.2.17", "", { "dependencies": { "bun-types": "1.2.17" } }, "sha512-l/BYs/JYt+cXA/0+wUhulYJB6a6p//GTPiJ7nV+QHa8iiId4HZmnu/3J/SowP5g0rTiERY2kfGKXEK5Ehltx4Q=="], "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/diff-match-patch": ["@types/diff-match-patch@1.0.36", "", {}, "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg=="], + + "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -595,8 +491,6 @@ "@types/node": ["@types/node@22.13.9", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw=="], - "@types/react": ["@types/react@19.1.9", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA=="], - "@types/sax": ["@types/sax@1.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A=="], "@types/turndown": ["@types/turndown@5.0.5", "", {}, "sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w=="], @@ -609,24 +503,18 @@ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], - "@zip.js/zip.js": ["@zip.js/zip.js@2.7.62", "", {}, "sha512-OaLvZ8j4gCkLn048ypkZu29KX30r8/OfFF2w4Jo5WXFr+J04J+lzJ5TKZBVgFXhlvSkqNFQdfnY1Q8TMTCyBVA=="], - "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], - "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], "acorn-walk": ["acorn-walk@8.3.2", "", {}, "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A=="], - "ai": ["ai@5.0.0-beta.34", "", { "dependencies": { "@ai-sdk/gateway": "1.0.0-beta.19", "@ai-sdk/provider": "2.0.0-beta.2", "@ai-sdk/provider-utils": "3.0.0-beta.10", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-AFJ4p35AxA+1KFtnoouePLaAUpoj0IxIAoq/xgIv88qzYajTg4Sac5KaV4CDHFRLoF0L2cwhlFXt/Ss/zyBKkA=="], - - "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + "ai": ["ai@4.3.16", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/react": "1.2.12", "@ai-sdk/ui-utils": "1.2.11", "@opentelemetry/api": "1.9.0", "jsondiffpatch": "0.6.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["react"] }, "sha512-KUDwlThJ5tr2Vw0A1ZkbDKNME3wzWhuVfAOwIvFUzl1TPVDFAXDFTXio3p+jaKneB+dKNCvFFlolYmmgHttG1g=="], "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], - "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], - "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], "ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], @@ -639,17 +527,21 @@ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "args": ["args@5.0.3", "", { "dependencies": { "camelcase": "5.0.0", "chalk": "2.4.2", "leven": "2.1.0", "mri": "1.1.4" } }, "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA=="], + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], + "as-table": ["as-table@1.0.55", "", { "dependencies": { "printable-characters": "^1.0.42" } }, "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ=="], + "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], "astro": ["astro@5.7.13", "", { "dependencies": { "@astrojs/compiler": "^2.11.0", "@astrojs/internal-helpers": "0.6.1", "@astrojs/markdown-remark": "6.3.1", "@astrojs/telemetry": "3.2.1", "@capsizecss/unpack": "^2.4.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.4", "acorn": "^8.14.1", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.2.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.0.2", "cssesc": "^3.0.0", "debug": "^4.4.0", "deterministic-object-hash": "^2.0.2", "devalue": "^5.1.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.6.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.3.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.17", "magicast": "^0.3.5", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.0", "package-manager-detector": "^1.1.0", "picomatch": "^4.0.2", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.1", "shiki": "^3.2.1", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.12", "tsconfck": "^3.1.5", "ultrahtml": "^1.6.0", "unifont": "~0.5.0", "unist-util-visit": "^5.0.0", "unstorage": "^1.15.0", "vfile": "^6.0.3", "vite": "^6.3.4", "vitefu": "^1.0.6", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.1", "zod": "^3.24.2", "zod-to-json-schema": "^3.24.5", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.33.3" }, "bin": { "astro": "astro.js" } }, "sha512-cRGq2llKOhV3XMcYwQpfBIUcssN6HEK5CRbcMxAfd9OcFhvWE7KUy50zLioAZVVl3AqgUTJoNTlmZfD2eG0G1w=="], - "astro-expressive-code": ["astro-expressive-code@0.41.3", "", { "dependencies": { "rehype-expressive-code": "^0.41.3" }, "peerDependencies": { "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0" } }, "sha512-u+zHMqo/QNLE2eqYRCrK3+XMlKakv33Bzuz+56V1gs8H0y6TZ0hIi3VNbIxeTn51NLn+mJfUV/A0kMNfE4rANw=="], + "astro-expressive-code": ["astro-expressive-code@0.41.2", "", { "dependencies": { "rehype-expressive-code": "^0.41.2" }, "peerDependencies": { "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0" } }, "sha512-HN0jWTnhr7mIV/2e6uu4PPRNNo/k4UEgTLZqbp3MrHU+caCARveG2yZxaZVBmxyiVdYqW5Pd3u3n2zjnshixbw=="], - "async-lock": ["async-lock@1.4.1", "", {}, "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ=="], + "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], @@ -667,9 +559,11 @@ "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - "bare-events": ["bare-events@2.6.0", "", {}, "sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg=="], + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "bare-fs": ["bare-fs@4.1.6", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ=="], + "bare-events": ["bare-events@2.5.4", "", {}, "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA=="], + + "bare-fs": ["bare-fs@4.1.5", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA=="], "bare-os": ["bare-os@3.6.1", "", {}, "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g=="], @@ -685,8 +579,6 @@ "bcp-47-match": ["bcp-47-match@2.0.3", "", {}, "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ=="], - "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], "blake3-wasm": ["blake3-wasm@2.1.5", "", {}, "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g=="], @@ -699,20 +591,20 @@ "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], + "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "brotli": ["brotli@1.3.3", "", { "dependencies": { "base64-js": "^1.1.2" } }, "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg=="], - "browserslist": ["browserslist@4.25.1", "", { "dependencies": { "caniuse-lite": "^1.0.30001726", "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw=="], + "browserslist": ["browserslist@4.25.0", "", { "dependencies": { "caniuse-lite": "^1.0.30001718", "electron-to-chromium": "^1.5.160", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA=="], "buffer": ["buffer@4.9.2", "", { "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="], - "bun-types": ["bun-types@1.2.19", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-uAOTaZSPuYsWIXRpj7o56Let0g/wjihKCkeRqUBhlLVM/Bt+Fj9xTo+LhC1OV1XDaGkz4hNC80et5xgy+9KTHQ=="], + "bun-types": ["bun-types@1.2.17", "", { "dependencies": { "@types/node": "*" } }, "sha512-ElC7ItwT3SCQwYZDYoAH+q6KT4Fxjl8DtZ6qDulUFBmXA8YB4xo+l54J9ZJN+k2pphfn9vk7kfubeSd5QfTVJQ=="], "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "c12": ["c12@2.0.1", "", { "dependencies": { "chokidar": "^4.0.1", "confbox": "^0.1.7", "defu": "^6.1.4", "dotenv": "^16.4.5", "giget": "^1.2.3", "jiti": "^2.3.0", "mlly": "^1.7.1", "ohash": "^1.1.4", "pathe": "^1.1.2", "perfect-debounce": "^1.0.0", "pkg-types": "^1.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A=="], - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -721,7 +613,7 @@ "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001731", "", {}, "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg=="], + "caniuse-lite": ["caniuse-lite@1.0.30001720", "", {}, "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -739,11 +631,7 @@ "chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], - "ci-info": ["ci-info@4.3.0", "", {}, "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ=="], - - "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], - - "clean-git-ref": ["clean-git-ref@2.0.1", "", {}, "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw=="], + "ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], @@ -763,18 +651,10 @@ "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], - "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], - "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], - "commander": ["commander@13.0.0", "", {}, "sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ=="], - "common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], - "confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], - "content-disposition": ["content-disposition@1.0.0", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg=="], "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], @@ -789,15 +669,11 @@ "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], - "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], - "cross-fetch": ["cross-fetch@3.2.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q=="], - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], - "css-selector-parser": ["css-selector-parser@3.1.3", "", {}, "sha512-gJMigczVZqYAk0hPVzx/M4Hm1D9QOtqkdQk9005TNzDIUGzo5cnHEDiKUT7jGPximL/oYb+LIitcHFQ4aKupxg=="], + "css-selector-parser": ["css-selector-parser@3.1.2", "", {}, "sha512-WfUcL99xWDs7b3eZPoRszWVfbNo8ErCF15PTvVROjkShGlAfjIkG6hlfj/sl6/rfo5Q9x9ryJ3VqVnAZDA+gcw=="], "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], @@ -805,11 +681,15 @@ "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + "data-uri-to-buffer": ["data-uri-to-buffer@2.0.2", "", {}, "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA=="], + + "dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], - "decode-named-character-reference": ["decode-named-character-reference@1.2.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q=="], + "decode-named-character-reference": ["decode-named-character-reference@1.1.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w=="], "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], @@ -827,8 +707,6 @@ "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - "deprecation": ["deprecation@2.3.1", "", {}, "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="], - "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], @@ -845,31 +723,31 @@ "diff": ["diff@8.0.2", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="], - "diff3": ["diff3@0.0.3", "", {}, "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g=="], + "diff-match-patch": ["diff-match-patch@1.0.5", "", {}, "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="], "direction": ["direction@2.0.1", "", { "bin": { "direction": "cli.js" } }, "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA=="], "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], - "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], - "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + "duplexify": ["duplexify@4.1.3", "", { "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.2" } }, "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA=="], + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "electron-to-chromium": ["electron-to-chromium@1.5.193", "", {}, "sha512-eePuBZXM9OVCwfYUhd2OzESeNGnWmLyeu0XAEjf7xjijNjHFdeJSzuRUGN4ueT2tEYo5YqjHramKEFxz67p3XA=="], + "electron-to-chromium": ["electron-to-chromium@1.5.161", "", {}, "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA=="], "emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], - "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + "entities": ["entities@6.0.0", "", {}, "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw=="], - "error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="], + "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], @@ -883,15 +761,13 @@ "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.25.8", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.8", "@esbuild/android-arm": "0.25.8", "@esbuild/android-arm64": "0.25.8", "@esbuild/android-x64": "0.25.8", "@esbuild/darwin-arm64": "0.25.8", "@esbuild/darwin-x64": "0.25.8", "@esbuild/freebsd-arm64": "0.25.8", "@esbuild/freebsd-x64": "0.25.8", "@esbuild/linux-arm": "0.25.8", "@esbuild/linux-arm64": "0.25.8", "@esbuild/linux-ia32": "0.25.8", "@esbuild/linux-loong64": "0.25.8", "@esbuild/linux-mips64el": "0.25.8", "@esbuild/linux-ppc64": "0.25.8", "@esbuild/linux-riscv64": "0.25.8", "@esbuild/linux-s390x": "0.25.8", "@esbuild/linux-x64": "0.25.8", "@esbuild/netbsd-arm64": "0.25.8", "@esbuild/netbsd-x64": "0.25.8", "@esbuild/openbsd-arm64": "0.25.8", "@esbuild/openbsd-x64": "0.25.8", "@esbuild/openharmony-arm64": "0.25.8", "@esbuild/sunos-x64": "0.25.8", "@esbuild/win32-arm64": "0.25.8", "@esbuild/win32-ia32": "0.25.8", "@esbuild/win32-x64": "0.25.8" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q=="], + "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - - "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + "escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], @@ -915,7 +791,7 @@ "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], - "eventsource-parser": ["eventsource-parser@3.0.3", "", {}, "sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA=="], + "eventsource-parser": ["eventsource-parser@3.0.2", "", {}, "sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA=="], "exit-hook": ["exit-hook@2.2.1", "", {}, "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw=="], @@ -923,25 +799,27 @@ "express": ["express@5.1.0", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA=="], - "express-rate-limit": ["express-rate-limit@7.5.1", "", { "peerDependencies": { "express": ">= 4.11" } }, "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw=="], + "express-rate-limit": ["express-rate-limit@7.5.0", "", { "peerDependencies": { "express": "^4.11 || 5 || ^5.0.0-beta.1" } }, "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg=="], - "expressive-code": ["expressive-code@0.41.3", "", { "dependencies": { "@expressive-code/core": "^0.41.3", "@expressive-code/plugin-frames": "^0.41.3", "@expressive-code/plugin-shiki": "^0.41.3", "@expressive-code/plugin-text-markers": "^0.41.3" } }, "sha512-YLnD62jfgBZYrXIPQcJ0a51Afv9h8VlWqEGK9uU2T5nL/5rb8SnA86+7+mgCZe5D34Tff5RNEA5hjNVJYHzrFg=="], + "expressive-code": ["expressive-code@0.41.2", "", { "dependencies": { "@expressive-code/core": "^0.41.2", "@expressive-code/plugin-frames": "^0.41.2", "@expressive-code/plugin-shiki": "^0.41.2", "@expressive-code/plugin-text-markers": "^0.41.2" } }, "sha512-aLZiZaqorRtNExtGpUjK9zFH9aTpWeoTXMyLo4b4IcuXfPqtLPPxhRm/QlPb8QqIcMMXnSiGRHSFpQfX0m7HJw=="], - "exsolve": ["exsolve@1.0.7", "", {}, "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw=="], + "exsolve": ["exsolve@1.0.5", "", {}, "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg=="], "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], - "extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="], - - "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], - "fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="], + "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], + + "fdir": ["fdir@6.4.5", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw=="], + + "fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="], + + "file-type": ["file-type@20.5.0", "", { "dependencies": { "@tokenizer/inflate": "^0.2.6", "strtok3": "^10.2.0", "token-types": "^6.0.0", "uint8array-extras": "^1.4.0" } }, "sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg=="], "finalhandler": ["finalhandler@2.1.0", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q=="], @@ -959,8 +837,6 @@ "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], - "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], @@ -975,7 +851,7 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "giget": ["giget@1.2.5", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.5.4", "pathe": "^2.0.3", "tar": "^6.2.1" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug=="], + "get-source": ["get-source@2.0.12", "", { "dependencies": { "data-uri-to-buffer": "^2.0.0", "source-map": "^0.6.1" } }, "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w=="], "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], @@ -983,13 +859,13 @@ "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], + "globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - "gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="], + "h3": ["h3@1.15.3", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.4", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.0", "radix3": "^1.1.2", "ufo": "^1.6.1", "uncrypto": "^0.1.3" } }, "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ=="], - "h3": ["h3@1.15.4", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.2", "radix3": "^1.1.2", "ufo": "^1.6.1", "uncrypto": "^0.1.3" } }, "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ=="], - - "handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="], + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], @@ -1063,8 +939,6 @@ "ieee754": ["ieee754@1.1.13", "", {}, "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="], - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "import-meta-resolve": ["import-meta-resolve@4.1.0", "", {}, "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], @@ -1091,8 +965,6 @@ "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], - "is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], @@ -1115,15 +987,11 @@ "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - - "isomorphic-git": ["isomorphic-git@1.32.1", "", { "dependencies": { "async-lock": "^1.4.1", "clean-git-ref": "^2.0.1", "crc-32": "^1.2.0", "diff3": "0.0.3", "ignore": "^5.1.4", "minimisted": "^2.0.0", "pako": "^1.0.10", "path-browserify": "^1.0.1", "pify": "^4.0.1", "readable-stream": "^3.4.0", "sha.js": "^2.4.9", "simple-get": "^4.0.1" }, "bin": { "isogit": "cli.cjs" } }, "sha512-NZCS7qpLkCZ1M/IrujYBD31sM6pd/fMVArK4fz4I7h6m0rUW2AsYU7S7zXeABuHL6HIfW6l53b4UQ/K441CQjg=="], - - "jiti": ["jiti@2.5.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w=="], - "jmespath": ["jmespath@0.16.0", "", {}, "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="], - "jose": ["jose@6.0.11", "", {}, "sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg=="], + "jose": ["jose@5.2.3", "", {}, "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA=="], + + "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], "js-base64": ["js-base64@3.7.7", "", {}, "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw=="], @@ -1133,17 +1001,15 @@ "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], - "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + "json-rpc-2.0": ["json-rpc-2.0@1.7.0", "", {}, "sha512-asnLgC1qD5ytP+fvBP8uL0rvj+l8P6iYICbzZ8dVxCpESffVjzA7KkYkbKCIbavs7cllwH1ZUaNtJwphdeRqpg=="], - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], "json-schema-walker": ["json-schema-walker@2.0.0", "", { "dependencies": { "@apidevtools/json-schema-ref-parser": "^11.1.0", "clone": "^2.1.2" } }, "sha512-nXN2cMky0Iw7Af28w061hmxaPDaML5/bQD9nwm1lOoIKEGjHcRGxqWe4MfrkYThYAPjSUhmsp4bJNoLAyVn9Xw=="], "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], - - "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + "jsondiffpatch": ["jsondiffpatch@0.6.0", "", { "dependencies": { "@types/diff-match-patch": "^1.0.36", "chalk": "^5.3.0", "diff-match-patch": "^1.0.5" }, "bin": { "jsondiffpatch": "bin/jsondiffpatch.js" } }, "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ=="], "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], @@ -1153,7 +1019,7 @@ "language-map": ["language-map@1.5.0", "", {}, "sha512-n7gFZpe+DwEAX9cXVTw43i3wiudWDDtSn28RmdnS/HCPr284dQI/SztsamWanRr75oSlKSaGbV2nmWCTzGCoVg=="], - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "leven": ["leven@2.1.0", "", {}, "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA=="], "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], @@ -1171,8 +1037,6 @@ "marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], - "marked-shiki": ["marked-shiki@1.2.1", "", { "peerDependencies": { "marked": ">=7.0.0", "shiki": ">=1.0.0" } }, "sha512-yHxYQhPY5oYaIRnROn98foKhuClark7M373/VpLxiy5TrDu9Jd/LsMwo8w+U91Up4oDb9IXFrP0N1MFRz8W/DQ=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "mdast-util-definitions": ["mdast-util-definitions@6.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="], @@ -1299,36 +1163,28 @@ "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], - "miniflare": ["miniflare@4.20250730.0", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "8.14.0", "acorn-walk": "8.3.2", "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", "sharp": "^0.33.5", "stoppable": "1.1.0", "undici": "^7.10.0", "workerd": "1.20250730.0", "ws": "8.18.0", "youch": "4.1.0-beta.10", "zod": "3.22.3" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-avGXBStHQSqcJr8ra1mJ3/OQvnLZ49B1uAILQapAha1DHNZZvXWLIgUVre/WGY6ZOlNGFPh5CJ+dXLm4yuV3Jw=="], + "miniflare": ["miniflare@4.20250525.1", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "8.14.0", "acorn-walk": "8.3.2", "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", "sharp": "^0.33.5", "stoppable": "1.1.0", "undici": "^5.28.5", "workerd": "1.20250525.0", "ws": "8.18.0", "youch": "3.3.4", "zod": "3.22.3" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-4PJlT5WA+hfclFU5Q7xnpG1G1VGYTXaf/3iu6iKQ8IsbSi9QvPTA2bSZ5goCFxmJXDjV4cxttVxB0Wl1CLuQ0w=="], - "minimatch": ["minimatch@10.0.3", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw=="], + "minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - "minimisted": ["minimisted@2.0.1", "", { "dependencies": { "minimist": "^1.2.5" } }, "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA=="], - - "minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], - - "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], - - "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], - "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], + "mri": ["mri@1.1.4", "", {}, "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w=="], "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "mustache": ["mustache@4.2.0", "", { "bin": { "mustache": "bin/mustache" } }, "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="], + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], - "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], @@ -1341,9 +1197,7 @@ "node-fetch-native": ["node-fetch-native@1.6.6", "", {}, "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ=="], - "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], - - "node-mock-http": ["node-mock-http@1.0.2", "", {}, "sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g=="], + "node-mock-http": ["node-mock-http@1.0.0", "", {}, "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ=="], "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], @@ -1351,8 +1205,6 @@ "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], - "nypm": ["nypm@0.5.4", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "tinyexec": "^0.3.2", "ufo": "^1.5.4" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA=="], - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], "object-hash": ["object-hash@2.2.0", "", {}, "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="], @@ -1361,10 +1213,12 @@ "ofetch": ["ofetch@1.4.1", "", { "dependencies": { "destr": "^2.0.3", "node-fetch-native": "^1.6.4", "ufo": "^1.5.4" } }, "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw=="], - "ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], "oidc-token-hash": ["oidc-token-hash@5.1.0", "", {}, "sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA=="], + "on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], @@ -1375,8 +1229,6 @@ "open": ["open@10.1.2", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "is-wsl": "^3.1.0" } }, "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw=="], - "openai": ["openai@5.11.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-+AuTc5pVjlnTuA9zvn8rA/k+1RluPIx9AD4eDcnutv6JNwHHZxIhkFy+tmMKCvmMFDQzfA/r1ujvPWB19DQkYg=="], - "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], "opencode": ["opencode@workspace:packages/opencode"], @@ -1395,7 +1247,7 @@ "pagefind": ["pagefind@1.3.0", "", { "optionalDependencies": { "@pagefind/darwin-arm64": "1.3.0", "@pagefind/darwin-x64": "1.3.0", "@pagefind/linux-arm64": "1.3.0", "@pagefind/linux-x64": "1.3.0", "@pagefind/windows-x64": "1.3.0" }, "bin": { "pagefind": "lib/runner/bin.cjs" } }, "sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw=="], - "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + "pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], @@ -1405,29 +1257,29 @@ "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], - - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], - "pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + "peek-readable": ["peek-readable@7.0.0", "", {}, "sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - "pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="], + "pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - "pkce-challenge": ["pkce-challenge@5.0.0", "", {}, "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ=="], + "pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], - "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "pino-pretty": ["pino-pretty@5.1.3", "", { "dependencies": { "@hapi/bourne": "^2.0.0", "args": "^5.0.1", "chalk": "^4.0.0", "dateformat": "^4.5.1", "fast-safe-stringify": "^2.0.7", "jmespath": "^0.15.0", "joycon": "^3.0.0", "pump": "^3.0.0", "readable-stream": "^3.6.0", "rfdc": "^1.3.0", "split2": "^3.1.1", "strip-json-comments": "^3.1.1" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-Zj+0TVdYKkAAIx9EUCL5e4TttwgsaFvJh2ceIMQeFCY8ak9tseEZQGSgpvyjEj1/iIVGIh5tdhkGEQWSMILKHA=="], + + "pino-std-serializers": ["pino-std-serializers@4.0.0", "", {}, "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q=="], + + "pkce-challenge": ["pkce-challenge@4.1.0", "", {}, "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ=="], "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "postcss": ["postcss@8.5.4", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w=="], "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], @@ -1437,15 +1289,19 @@ "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], + "printable-characters": ["printable-characters@1.0.42", "", {}, "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ=="], + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + "process-warning": ["process-warning@1.0.0", "", {}, "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="], + "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], + "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], "punycode": ["punycode@1.3.2", "", {}, "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="], @@ -1453,6 +1309,8 @@ "querystring": ["querystring@0.2.0", "", {}, "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g=="], + "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], @@ -1461,15 +1319,17 @@ "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], + "react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + "real-require": ["real-require@0.1.0", "", {}, "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg=="], + "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], - "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="], + "recma-jsx": ["recma-jsx@1.0.0", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" } }, "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q=="], "recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="], @@ -1485,7 +1345,7 @@ "rehype-autolink-headings": ["rehype-autolink-headings@7.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-heading-rank": "^3.0.0", "hast-util-is-element": "^3.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw=="], - "rehype-expressive-code": ["rehype-expressive-code@0.41.3", "", { "dependencies": { "expressive-code": "^0.41.3" } }, "sha512-8d9Py4c/V6I/Od2VIXFAdpiO2kc0SV2qTJsRAaqSIcM9aruW4ASLNe2kOEo1inXAAkIhpFzAHTc358HKbvpNUg=="], + "rehype-expressive-code": ["rehype-expressive-code@0.41.2", "", { "dependencies": { "expressive-code": "^0.41.2" } }, "sha512-vHYfWO9WxAw6kHHctddOt+P4266BtyT1mrOIuxJD+1ELuvuJAa5uBIhYt0OVMyOhlvf57hzWOXJkHnMhpaHyxw=="], "rehype-format": ["rehype-format@5.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-format": "^1.0.0" } }, "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ=="], @@ -1511,7 +1371,7 @@ "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], - "remeda": ["remeda@2.26.0", "", { "dependencies": { "type-fest": "^4.41.0" } }, "sha512-lmNNwtaC6Co4m0WTTNoZ/JlpjEqAjPZO0+czC9YVRQUpkbS4x8Hmh+Mn9HPfJfiXqUQ5IXXgSXSOB2pBKAytdA=="], + "remeda": ["remeda@2.22.3", "", { "dependencies": { "type-fest": "^4.40.1" } }, "sha512-Ka6965m9Zu9OLsysWxVf3jdJKmp6+PKzDv7HWHinEevf0JOJ9y02YpjiC/sKxRpCqGhVyvm1U+0YIj+E6DMgKw=="], "restructure": ["restructure@3.0.2", "", {}, "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="], @@ -1523,7 +1383,9 @@ "retext-stringify": ["retext-stringify@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unified": "^11.0.0" } }, "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="], - "rollup": ["rollup@4.46.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.46.2", "@rollup/rollup-android-arm64": "4.46.2", "@rollup/rollup-darwin-arm64": "4.46.2", "@rollup/rollup-darwin-x64": "4.46.2", "@rollup/rollup-freebsd-arm64": "4.46.2", "@rollup/rollup-freebsd-x64": "4.46.2", "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", "@rollup/rollup-linux-arm-musleabihf": "4.46.2", "@rollup/rollup-linux-arm64-gnu": "4.46.2", "@rollup/rollup-linux-arm64-musl": "4.46.2", "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", "@rollup/rollup-linux-ppc64-gnu": "4.46.2", "@rollup/rollup-linux-riscv64-gnu": "4.46.2", "@rollup/rollup-linux-riscv64-musl": "4.46.2", "@rollup/rollup-linux-s390x-gnu": "4.46.2", "@rollup/rollup-linux-x64-gnu": "4.46.2", "@rollup/rollup-linux-x64-musl": "4.46.2", "@rollup/rollup-win32-arm64-msvc": "4.46.2", "@rollup/rollup-win32-ia32-msvc": "4.46.2", "@rollup/rollup-win32-x64-msvc": "4.46.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg=="], + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + + "rollup": ["rollup@4.41.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.41.1", "@rollup/rollup-android-arm64": "4.41.1", "@rollup/rollup-darwin-arm64": "4.41.1", "@rollup/rollup-darwin-x64": "4.41.1", "@rollup/rollup-freebsd-arm64": "4.41.1", "@rollup/rollup-freebsd-x64": "4.41.1", "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", "@rollup/rollup-linux-arm-musleabihf": "4.41.1", "@rollup/rollup-linux-arm64-gnu": "4.41.1", "@rollup/rollup-linux-arm64-musl": "4.41.1", "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-musl": "4.41.1", "@rollup/rollup-linux-s390x-gnu": "4.41.1", "@rollup/rollup-linux-x64-gnu": "4.41.1", "@rollup/rollup-linux-x64-musl": "4.41.1", "@rollup/rollup-win32-arm64-msvc": "4.41.1", "@rollup/rollup-win32-ia32-msvc": "4.41.1", "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw=="], "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], @@ -1533,12 +1395,12 @@ "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], "sax": ["sax@1.2.1", "", {}, "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="], - "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], - "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], @@ -1555,14 +1417,8 @@ "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - "sha.js": ["sha.js@2.4.12", "", { "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" } }, "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w=="], - "sharp": ["sharp@0.32.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.2", "node-addon-api": "^6.1.0", "prebuild-install": "^7.1.1", "semver": "^7.5.4", "simple-get": "^4.0.1", "tar-fs": "^3.0.4", "tunnel-agent": "^0.6.0" } }, "sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ=="], - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], - - "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "shiki": ["shiki@3.4.2", "", { "dependencies": { "@shikijs/core": "3.4.2", "@shikijs/engine-javascript": "3.4.2", "@shikijs/engine-oniguruma": "3.4.2", "@shikijs/langs": "3.4.2", "@shikijs/themes": "3.4.2", "@shikijs/types": "3.4.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-wuxzZzQG8kvZndD7nustrNFIKYJ1jJoWIPaBpVe2+KHSvtzMi4SBjOxrigs8qeqce/l3U0cwiC+VAkLKSunHQQ=="], "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], @@ -1583,45 +1439,51 @@ "sitemap": ["sitemap@8.0.0", "", { "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" }, "bin": { "sitemap": "dist/cli.js" } }, "sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A=="], - "smol-toml": ["smol-toml@1.4.1", "", {}, "sha512-CxdwHXyYTONGHThDbq5XdwbFsuY4wlClRGejfE2NtwUtiHYsP1QtNsHb/hnj31jKYSchztJsaA8pSQoVzkfCFg=="], + "smol-toml": ["smol-toml@1.3.4", "", {}, "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA=="], "solid-js": ["solid-js@1.9.7", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.3.0", "seroval-plugins": "~1.3.0" } }, "sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw=="], "solid-refresh": ["solid-refresh@0.6.3", "", { "dependencies": { "@babel/generator": "^7.23.6", "@babel/helper-module-imports": "^7.22.15", "@babel/types": "^7.23.6" }, "peerDependencies": { "solid-js": "^1.3" } }, "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "sonic-boom": ["sonic-boom@2.8.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg=="], + + "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], - "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + "split2": ["split2@3.2.2", "", { "dependencies": { "readable-stream": "^3.0.0" } }, "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg=="], - "sst": ["sst@3.17.8", "", { "dependencies": { "aws-sdk": "2.1692.0", "aws4fetch": "1.0.18", "jose": "5.2.3", "opencontrol": "0.0.6", "openid-client": "5.6.4" }, "optionalDependencies": { "sst-darwin-arm64": "3.17.8", "sst-darwin-x64": "3.17.8", "sst-linux-arm64": "3.17.8", "sst-linux-x64": "3.17.8", "sst-linux-x86": "3.17.8", "sst-win32-arm64": "3.17.8", "sst-win32-x64": "3.17.8", "sst-win32-x86": "3.17.8" }, "bin": { "sst": "bin/sst.mjs" } }, "sha512-P/a9/ZsjtQRrTBerBMO1ODaVa5HVTmNLrQNJiYvu2Bgd0ov+vefQeHv6oima8HLlPwpDIPS2gxJk8BZrTZMfCA=="], + "sst": ["sst@3.17.6", "", { "dependencies": { "aws-sdk": "2.1692.0", "aws4fetch": "1.0.18", "jose": "5.2.3", "opencontrol": "0.0.6", "openid-client": "5.6.4" }, "optionalDependencies": { "sst-darwin-arm64": "3.17.6", "sst-darwin-x64": "3.17.6", "sst-linux-arm64": "3.17.6", "sst-linux-x64": "3.17.6", "sst-linux-x86": "3.17.6", "sst-win32-arm64": "3.17.6", "sst-win32-x64": "3.17.6", "sst-win32-x86": "3.17.6" }, "bin": { "sst": "bin/sst.mjs" } }, "sha512-p+AcqwfYQUdkxeRjCikQoTMviPCBiGoU7M0vcV6GDVmVis8hzhVw4EFfHTafZC+aWfy1Ke2UQi66vZlEVWuEqA=="], - "sst-darwin-arm64": ["sst-darwin-arm64@3.17.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-50P6YRMnZVItZUfB0+NzqMww2mmm4vB3zhTVtWUtGoXeiw78g1AEnVlmS28gYXPHM1P987jTvR7EON9u9ig/Dg=="], + "sst-darwin-arm64": ["sst-darwin-arm64@3.17.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-6tb7KlcPR7PTi3ofQv8dX/n6Jf7pNP9VfrnYL4HBWnWrcYaZeJ5MWobILfIJ/y2jHgoqmg9e5C3266Eds0JQyw=="], - "sst-darwin-x64": ["sst-darwin-x64@3.17.8", "", { "os": "darwin", "cpu": "x64" }, "sha512-P0pnMHCmpkpcsxkWpilmeoD79LkbkoIcv6H0aeM9ArT/71/JBhvqH+HjMHSJCzni/9uR6er+nH5F+qol0UO6Bw=="], + "sst-darwin-x64": ["sst-darwin-x64@3.17.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-lFakq6/EgTuBSjbl8Kry4pfgAPEIyn6o7ZkyRz3hz5331wUaX88yfjs3tL9JQ8Ey6jBUYxwhP/Q1n7fzIG046g=="], - "sst-linux-arm64": ["sst-linux-arm64@3.17.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-vun54YA/UzprCu9p8BC4rMwFU5Cj9xrHAHYLYUp/yq4H0pfmBIiQM62nsfIKizRThe/TkBFy60EEi9myf6raYA=="], + "sst-linux-arm64": ["sst-linux-arm64@3.17.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-SdTxXMbTEdiwOqp37w31kXv97vHqSx3oK9h/76lKg7V9k5JxPJ6JMefPLhoKWwK0Zh6AndY2zo2oRoEv4SIaDw=="], - "sst-linux-x64": ["sst-linux-x64@3.17.8", "", { "os": "linux", "cpu": "x64" }, "sha512-HqByCaLE2gEJbM20P1QRd+GqDMAiieuU53FaZA1F+AGxQi+kR82NWjrPqFcMj4dMYg8w/TWXuV+G5+PwoUmpDw=="], + "sst-linux-x64": ["sst-linux-x64@3.17.6", "", { "os": "linux", "cpu": "x64" }, "sha512-qneh7uWDiTUYx8X1Y3h2YVw3SJ0ybBBlRrVybIvCM09JqQ8+qq/XjKXGzA/3/EF0Jr7Ug8cARSn9CwxhdQGN7Q=="], - "sst-linux-x86": ["sst-linux-x86@3.17.8", "", { "os": "linux", "cpu": "none" }, "sha512-bCd6QM3MejfSmdvg8I/k+aUJQIZEQJg023qmN78fv00vwlAtfECvY7tjT9E2m3LDp33pXrcRYbFOQzPu+tWFfA=="], + "sst-linux-x86": ["sst-linux-x86@3.17.6", "", { "os": "linux", "cpu": "none" }, "sha512-pU3D5OeqnmfxGqN31DxuwWnc1OayxhkErnITHhZ39D0MTiwbIgCapH26FuLW8B08/uxJWG8djUlOboCRhSBvWA=="], - "sst-win32-arm64": ["sst-win32-arm64@3.17.8", "", { "os": "win32", "cpu": "arm64" }, "sha512-pilx0n8gm4aHJae/vNiqIwZkWF3tdwWzD/ON7hkytw+CVSZ0FXtyFW/yO/+2u3Yw0Kj0lSWPnUqYgm/eHPLwQA=="], + "sst-win32-arm64": ["sst-win32-arm64@3.17.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-Rr3RTYWAsH9sM9CbM/sAZCk7dB1OsSAljjJuuHMvdSAYW3RDpXEza0PBJGxnBID2eOrpswEchzMPL2d8LtL7oA=="], - "sst-win32-x64": ["sst-win32-x64@3.17.8", "", { "os": "win32", "cpu": "x64" }, "sha512-Jb0FVRyiOtESudF1V8ucW65PuHrx/iOHUamIO0JnbujWNHZBTRPB2QHN1dbewgkueYDaCmyS8lvuIImLwYJnzQ=="], + "sst-win32-x64": ["sst-win32-x64@3.17.6", "", { "os": "win32", "cpu": "x64" }, "sha512-yZ3roxwI0Wve9PFzdrrF1kfzCmIMFCCoa8qKeXY7LxCJ4QQIqHbCOccLK1Wv/MIU/mcZHWXTQVCLHw77uaa0GQ=="], - "sst-win32-x86": ["sst-win32-x86@3.17.8", "", { "os": "win32", "cpu": "none" }, "sha512-oVmFa/PoElQmfnGJlB0w6rPXiYuldiagO6AbrLMT/6oAnWerLQ8Uhv9tJWfMh3xtPLImQLTjxDo1v0AIzEv9QA=="], + "sst-win32-x86": ["sst-win32-x86@3.17.6", "", { "os": "win32", "cpu": "none" }, "sha512-zV7TJWPJN9PmIXr15iXFSs0tbGsa52oBR3+xiKrUj2qj9XsZe7HBFwskRnHyiFq0durZY9kk9ZtoVlpuUuzr1g=="], - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + "stacktracey": ["stacktracey@2.1.8", "", { "dependencies": { "as-table": "^1.0.36", "get-source": "^2.0.12" } }, "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw=="], + + "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], "stoppable": ["stoppable@1.1.0", "", {}, "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="], "stream-replace-string": ["stream-replace-string@2.0.0", "", {}, "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="], - "streamx": ["streamx@2.22.1", "", { "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" } }, "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA=="], + "stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="], + + "streamx": ["streamx@2.22.0", "", { "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" } }, "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw=="], "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], @@ -1631,53 +1493,51 @@ "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="], + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + "strtok3": ["strtok3@10.2.2", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^7.0.0" } }, "sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg=="], - "style-to-js": ["style-to-js@1.1.17", "", { "dependencies": { "style-to-object": "1.0.9" } }, "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA=="], + "style-to-js": ["style-to-js@1.1.16", "", { "dependencies": { "style-to-object": "1.0.8" } }, "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw=="], - "style-to-object": ["style-to-object@1.0.9", "", { "dependencies": { "inline-style-parser": "0.2.4" } }, "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw=="], + "style-to-object": ["style-to-object@1.0.8", "", { "dependencies": { "inline-style-parser": "0.2.4" } }, "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g=="], - "supports-color": ["supports-color@10.0.0", "", {}, "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], + "swr": ["swr@2.3.3", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A=="], - "tar-fs": ["tar-fs@3.1.0", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w=="], + "tar-fs": ["tar-fs@3.0.9", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA=="], "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], "text-decoder": ["text-decoder@1.2.3", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA=="], + "thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + + "throttleit": ["throttleit@2.1.0", "", {}, "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw=="], + "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], - "to-buffer": ["to-buffer@1.2.1", "", { "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", "typed-array-buffer": "^1.0.3" } }, "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ=="], - - "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - "toolbeam-docs-theme": ["toolbeam-docs-theme@0.4.3", "", { "peerDependencies": { "@astrojs/starlight": "^0.34.3", "astro": "^5.7.13" } }, "sha512-3um/NsSq4xFeKbKrNGPHIzfTixwnEVvroqA8Q+lecnYHHJ5TtiYTggHDqewOW+I67t0J1IVBwVKUPjxiQfIcog=="], + "token-types": ["token-types@6.0.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA=="], + + "toolbeam-docs-theme": ["toolbeam-docs-theme@0.3.0", "", { "peerDependencies": { "@astrojs/starlight": "^0.34.3", "astro": "^5.7.13" } }, "sha512-qlBkKRp8HVYV7p7jaG9lT2lvQY7c8b9czZ0tnsJUrN2TBTtEyFJymCdkhhpZNC9U4oGZ7lLk0glRJHrndWvVsg=="], "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], - "tree-sitter": ["tree-sitter@0.22.4", "", { "dependencies": { "node-addon-api": "^8.3.0", "node-gyp-build": "^4.8.4" } }, "sha512-usbHZP9/oxNsUY65MQUsduGRqDHQOou1cagUSwjhoSYAmSahjQDAVsh9s+SlZkn8X8+O1FULRGwHu7AFP3kjzg=="], - - "tree-sitter-bash": ["tree-sitter-bash@0.23.3", "", { "dependencies": { "node-addon-api": "^8.2.1", "node-gyp-build": "^4.8.2" }, "peerDependencies": { "tree-sitter": "^0.21.1" }, "optionalPeers": ["tree-sitter"] }, "sha512-36cg/GQ2YmIbeiBeqeuh4fBJ6i4kgVouDaqTxqih5ysPag+zHufyIaxMOFeM8CeplwAK/Luj1o5XHqgdAfoCZg=="], - "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + "ts-lsp-client": ["ts-lsp-client@1.0.3", "", { "dependencies": { "json-rpc-2.0": "^1.7.0", "pino": "^7.0.5", "pino-pretty": "^5.1.3", "tslib": "~2.6.2" } }, "sha512-0ItrsqvNUM9KNFGbeT1N8jSi9gvasGOvxJUXjGf4P2TX0w250AUWLeRStaSrQbYcFDshDtE5d4BshUmYwodDgw=="], + "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="], + "tslib": ["tslib@2.6.3", "", {}, "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="], "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], @@ -1687,13 +1547,11 @@ "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], - "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], - "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], "ufo": ["ufo@1.6.1", "", {}, "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="], - "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + "uint8array-extras": ["uint8array-extras@1.4.0", "", {}, "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ=="], "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], @@ -1703,7 +1561,7 @@ "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], - "unenv": ["unenv@2.0.0-rc.19", "", { "dependencies": { "defu": "^6.1.4", "exsolve": "^1.0.7", "ohash": "^2.0.11", "pathe": "^2.0.3", "ufo": "^1.6.1" } }, "sha512-t/OMHBNAkknVCI7bVB9OWjUUAwhVv9vsPIAGnNUxnu3FxPQN11rjh0sksLMzc3g7IlTgvHmOTl4JM7JHpcv5wA=="], + "unenv": ["unenv@2.0.0-rc.17", "", { "dependencies": { "defu": "^6.1.4", "exsolve": "^1.0.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "ufo": "^1.6.1" } }, "sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg=="], "unicode-properties": ["unicode-properties@1.4.1", "", { "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" } }, "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg=="], @@ -1711,7 +1569,7 @@ "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], - "unifont": ["unifont@0.5.2", "", { "dependencies": { "css-tree": "^3.0.0", "ofetch": "^1.4.1", "ohash": "^2.0.0" } }, "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg=="], + "unifont": ["unifont@0.5.0", "", { "dependencies": { "css-tree": "^3.0.0", "ohash": "^2.0.0" } }, "sha512-4DueXMP5Hy4n607sh+vJ+rajoLu778aU3GzqeTCqsD/EaUcvqZT9wPC8kgK6Vjh22ZskrxyRCR71FwNOaYn6jA=="], "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], @@ -1733,27 +1591,23 @@ "unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], - "universal-github-app-jwt": ["universal-github-app-jwt@2.2.2", "", {}, "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw=="], - - "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - "unstorage": ["unstorage@1.16.1", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.3", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.6", "ofetch": "^1.4.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ=="], + "unstorage": ["unstorage@1.16.0", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.2", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.6", "ofetch": "^1.4.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA=="], "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "url": ["url@0.10.3", "", { "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ=="], + "use-sync-external-store": ["use-sync-external-store@1.5.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A=="], + "util": ["util@0.12.5", "", { "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA=="], "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], "uuid": ["uuid@8.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw=="], - "validate-html-nesting": ["validate-html-nesting@1.2.3", "", {}, "sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw=="], + "validate-html-nesting": ["validate-html-nesting@1.2.2", "", {}, "sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg=="], "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], @@ -1761,17 +1615,21 @@ "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], - "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], - "vite-plugin-solid": ["vite-plugin-solid@2.11.8", "", { "dependencies": { "@babel/core": "^7.23.3", "@types/babel__core": "^7.20.4", "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.6.3", "vitefu": "^1.0.4" }, "peerDependencies": { "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", "solid-js": "^1.7.2", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["@testing-library/jest-dom"] }, "sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg=="], + "vite-plugin-solid": ["vite-plugin-solid@2.11.6", "", { "dependencies": { "@babel/core": "^7.23.3", "@types/babel__core": "^7.20.4", "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.6.3", "vitefu": "^1.0.4" }, "peerDependencies": { "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", "solid-js": "^1.7.2", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["@testing-library/jest-dom"] }, "sha512-Sl5CTqJTGyEeOsmdH6BOgalIZlwH3t4/y0RQuFLMGnvWMBvxb4+lq7x3BSiAw6etf0QexfNJW7HSOO/Qf7pigg=="], - "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], + "vitefu": ["vitefu@1.0.6", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["vite"] }, "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA=="], "vscode-jsonrpc": ["vscode-jsonrpc@8.2.1", "", {}, "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ=="], - "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], + "vscode-languageclient": ["vscode-languageclient@8.1.0", "", { "dependencies": { "minimatch": "^5.1.0", "semver": "^7.3.7", "vscode-languageserver-protocol": "3.17.3" } }, "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing=="], + + "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.3", "", { "dependencies": { "vscode-jsonrpc": "8.1.0", "vscode-languageserver-types": "3.17.3" } }, "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA=="], + + "vscode-languageserver-types": ["vscode-languageserver-types@3.17.3", "", {}, "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA=="], "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], @@ -1779,19 +1637,15 @@ "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "which-pm-runs": ["which-pm-runs@1.1.0", "", {}, "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="], "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], - "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], + "workerd": ["workerd@1.20250525.0", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20250525.0", "@cloudflare/workerd-darwin-arm64": "1.20250525.0", "@cloudflare/workerd-linux-64": "1.20250525.0", "@cloudflare/workerd-linux-arm64": "1.20250525.0", "@cloudflare/workerd-windows-64": "1.20250525.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-SXJgLREy/Aqw2J71Oah0Pbu+SShbqbTExjVQyRBTM1r7MG7fS5NUlknhnt6sikjA/t4cO09Bi8OJqHdTkrcnYQ=="], - "workerd": ["workerd@1.20250730.0", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20250730.0", "@cloudflare/workerd-darwin-arm64": "1.20250730.0", "@cloudflare/workerd-linux-64": "1.20250730.0", "@cloudflare/workerd-linux-arm64": "1.20250730.0", "@cloudflare/workerd-windows-64": "1.20250730.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-w6e0WM2YGfYQGmg0dewZeLUYIxAzMYK1R31vaS4HHHjgT32Xqj0eVQH+leegzY51RZPNCvw5pe8DFmW4MGf8Fg=="], - - "wrangler": ["wrangler@4.27.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.5.0", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20250730.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.19", "workerd": "1.20250730.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20250730.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-YNHZyMNWebFt9jD6dc20tQrCmnSzJj3SoB0FFa90w11Cx4lbP3d+rUZYjb18Zt+OGSMay1wT2PzwT2vCTskkmg=="], + "wrangler": ["wrangler@4.19.1", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.3.2", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20250525.1", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.17", "workerd": "1.20250525.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20250525.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-b+ed2SJKauHgndl4Im1wHE+FeSSlrdlEZNuvpc8q/94k4EmRxRkXnwBAsVWuicBxG3HStFLQPGGlvL8wGKTtHw=="], "wrap-ansi": ["wrap-ansi@9.0.0", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q=="], @@ -1821,59 +1675,43 @@ "yoctocolors": ["yoctocolors@2.1.1", "", {}, "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ=="], - "youch": ["youch@4.1.0-beta.10", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@poppinss/dumper": "^0.6.4", "@speed-highlight/core": "^1.2.7", "cookie": "^1.0.2", "youch-core": "^0.3.3" } }, "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ=="], + "youch": ["youch@3.3.4", "", { "dependencies": { "cookie": "^0.7.1", "mustache": "^4.2.0", "stacktracey": "^2.1.8" } }, "sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg=="], - "youch-core": ["youch-core@0.3.3", "", { "dependencies": { "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } }, "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA=="], + "zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], - "zod": ["zod@3.25.49", "", {}, "sha512-JMMPMy9ZBk3XFEdbM3iL1brx4NUSejd6xr3ELrrGEfGb355gjhiAWtG3K5o+AViV/3ZfkIrCzXsZn6SbLwTR8Q=="], - - "zod-openapi": ["zod-openapi@4.1.0", "", { "peerDependencies": { "zod": "^3.21.4" } }, "sha512-bRCwRYhEO9CmFLyKgJX8h6j1dRtRiwOe+TLzMVPyV0pRW5vRIgb1rLgIGcuRZ5z3MmSVrZqbv3yva4IJrtZK4g=="], + "zod-openapi": ["zod-openapi@4.2.4", "", { "peerDependencies": { "zod": "^3.21.4" } }, "sha512-tsrQpbpqFCXqVXUzi3TPwFhuMtLN3oNZobOtYnK6/5VkXsNdnIgyNr4r8no4wmYluaxzN3F7iS+8xCW8BmMQ8g=="], "zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], "zod-to-ts": ["zod-to-ts@1.2.0", "", { "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" } }, "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA=="], + "zod-validation-error": ["zod-validation-error@3.5.2", "", { "peerDependencies": { "zod": "^3.25.0" } }, "sha512-mdi7YOLtram5dzJ5aDtm1AG9+mxRma1iaMrZdYIpFO7epdKBUwLHIxTF8CPDeCQ828zAXYtizrKlEJAtzgfgrw=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@actions/github/@octokit/core": ["@octokit/core@5.2.2", "", { "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg=="], - - "@actions/github/@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@9.2.2", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ=="], - - "@actions/github/@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@10.4.1", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg=="], - - "@actions/github/@octokit/request": ["@octokit/request@8.4.1", "", { "dependencies": { "@octokit/endpoint": "^9.0.6", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw=="], - - "@actions/github/@octokit/request-error": ["@octokit/request-error@5.1.1", "", { "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" } }, "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g=="], - - "@ai-sdk/amazon-bedrock/@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="], - - "@ai-sdk/amazon-bedrock/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="], - "@ai-sdk/amazon-bedrock/aws4fetch": ["aws4fetch@1.0.20", "", {}, "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g=="], - "@ai-sdk/gateway/@ai-sdk/provider": ["@ai-sdk/provider@2.0.0-beta.2", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-vqhtZA7R24q1XnmfmIb1fZSmHMIaJH1BVQ+0kFnNJgqWsc+V8i+yfetZ37gUc4fXATFmBuS/6O7+RPoHsZ2Fqg=="], + "@ampproject/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], - "@ai-sdk/gateway/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.0-beta.10", "", { "dependencies": { "@ai-sdk/provider": "2.0.0-beta.2", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.3", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-e6WSsgM01au04/1L/v5daXHn00eKjPBQXl3jq3BfvQbQ1jo8Rls2pvrdkyVc25jBW4TV4Zm+tw+v6NAh5NPXMA=="], + "@astrojs/mdx/@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.2", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.1", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.1.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.2.1", "smol-toml": "^1.3.1", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q=="], - "@ampproject/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], - - "@astrojs/mdx/@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.3", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.1", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.1.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.2.1", "smol-toml": "^1.3.4", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-DDRtD1sPvAuA7ms2btc9A7/7DApKqgLMNrE6kh5tmkfy8utD0Z738gqd3p5aViYYdUtHIyEJ1X4mCMxfCfu15w=="], - - "@astrojs/mdx/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + "@aws-crypto/crc32/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + "@aws-crypto/util/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@aws-sdk/types/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], + "@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@jridgewell/gen-mapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], - - "@mdx-js/mdx/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + "@jridgewell/gen-mapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], "@openauthjs/openauth/@standard-schema/spec": ["@standard-schema/spec@1.0.0-beta.3", "", {}, "sha512-0ifF3BjA1E8SY9C+nUew8RefNOIq0cDlYALPty4rhUm8Rrl6tCM8hBT4bhGhx7I7iXD0uAgt50lgo8dD73ACMw=="], @@ -1885,14 +1723,28 @@ "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "ai/@ai-sdk/provider": ["@ai-sdk/provider@2.0.0-beta.2", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-vqhtZA7R24q1XnmfmIb1fZSmHMIaJH1BVQ+0kFnNJgqWsc+V8i+yfetZ37gUc4fXATFmBuS/6O7+RPoHsZ2Fqg=="], + "@smithy/eventstream-codec/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "ai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.0-beta.10", "", { "dependencies": { "@ai-sdk/provider": "2.0.0-beta.2", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.3", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-e6WSsgM01au04/1L/v5daXHn00eKjPBQXl3jq3BfvQbQ1jo8Rls2pvrdkyVc25jBW4TV4Zm+tw+v6NAh5NPXMA=="], + "@smithy/is-array-buffer/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@smithy/types/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@smithy/util-buffer-from/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@smithy/util-hex-encoding/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@smithy/util-utf8/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@swc/helpers/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "args/camelcase": ["camelcase@5.0.0", "", {}, "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA=="], + + "args/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + "astro/diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="], "astro/sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "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-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], @@ -1901,109 +1753,55 @@ "bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - "estree-util-to-js/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "giget/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "gray-matter/js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], + "get-source/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "hast-util-to-parse5/property-information": ["property-information@6.5.0", "", {}, "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig=="], - "http-errors/statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "miniflare/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], "miniflare/sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "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-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], - "miniflare/undici": ["undici@7.13.0", "", {}, "sha512-l+zSMssRqrzDcb3fjMkjjLGmuiiK2pMIcV++mJaAc9vhjSGpvM7h43QgP+OAMb1GImHmbPyG2tBXeuyG5iY4gA=="], - - "miniflare/zod": ["zod@3.22.3", "", {}, "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug=="], - - "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - - "mlly/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "nypm/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "opencode/@ai-sdk/anthropic": ["@ai-sdk/anthropic@1.2.12", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-YSzjlko7JvuiyQFmI9RN1tNZdEiZxc+6xld/0tq/VkJaHpEzGAb1yiNxxvmYVcjvfu/PcvCxAAYXmTYQQ63IHQ=="], - - "opencontrol/@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.6.1", "", { "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^4.1.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" } }, "sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA=="], - "opencontrol/hono": ["hono@4.7.4", "", {}, "sha512-Pst8FuGqz3L7tFF+u9Pu70eI0xa5S3LPUmrNd5Jm8nTHze9FxLTK9Kaj5g/k4UcwuJSXTP65SyHOPLrffpcAJg=="], - "opencontrol/zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="], - "opencontrol/zod-to-json-schema": ["zod-to-json-schema@3.24.3", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A=="], "openid-client/jose": ["jose@4.15.9", "", {}, "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - "pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + "pino-abstract-transport/split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], + + "pino-pretty/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "pino-pretty/jmespath": ["jmespath@0.15.0", "", {}, "sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w=="], "prebuild-install/tar-fs": ["tar-fs@2.1.3", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg=="], "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + "router/path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="], "sitemap/@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="], "sitemap/sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="], - "sst/jose": ["jose@5.2.3", "", {}, "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA=="], - - "tar/chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], - - "to-buffer/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - - "tree-sitter/node-addon-api": ["node-addon-api@8.5.0", "", {}, "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A=="], - - "tree-sitter-bash/node-addon-api": ["node-addon-api@8.5.0", "", {}, "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A=="], - - "unenv/ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], - - "unenv/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "unicode-trie/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], - - "unifont/ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "token-types/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "unstorage/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "uri-js/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + "vscode-languageserver-protocol/vscode-jsonrpc": ["vscode-jsonrpc@8.1.0", "", {}, "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw=="], "wrangler/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], - "xml2js/sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="], - "yargs/yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], - "@actions/github/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@4.0.0", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="], - - "@actions/github/@octokit/core/@octokit/graphql": ["@octokit/graphql@7.1.1", "", { "dependencies": { "@octokit/request": "^8.4.1", "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" } }, "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g=="], - - "@actions/github/@octokit/core/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], - - "@actions/github/@octokit/core/before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="], - - "@actions/github/@octokit/core/universal-user-agent": ["universal-user-agent@6.0.1", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="], - - "@actions/github/@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], - - "@actions/github/@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="], - - "@actions/github/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@9.0.6", "", { "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw=="], - - "@actions/github/@octokit/request/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], - - "@actions/github/@octokit/request/universal-user-agent": ["universal-user-agent@6.0.1", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="], - - "@actions/github/@octokit/request-error/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], + "youch/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], "@astrojs/mdx/@astrojs/markdown-remark/@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="], @@ -2015,17 +1813,13 @@ "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "args/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], - "opencode/@ai-sdk/anthropic/@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="], + "args/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - "opencode/@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="], + "bl/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - "opencontrol/@modelcontextprotocol/sdk/pkce-challenge": ["pkce-challenge@4.1.0", "", {}, "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ=="], - - "opencontrol/@modelcontextprotocol/sdk/zod": ["zod@3.25.49", "", {}, "sha512-JMMPMy9ZBk3XFEdbM3iL1brx4NUSejd6xr3ELrrGEfGb355gjhiAWtG3K5o+AViV/3ZfkIrCzXsZn6SbLwTR8Q=="], - - "opencontrol/@modelcontextprotocol/sdk/zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], + "pino-pretty/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "prebuild-install/tar-fs/tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], @@ -2079,18 +1873,14 @@ "wrangler/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], - "@actions/github/@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - - "@actions/github/@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@20.0.0", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="], - - "@actions/github/@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@20.0.0", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="], - - "@actions/github/@octokit/request-error/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - - "@actions/github/@octokit/request/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], - "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "args/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "args/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + + "args/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], } } diff --git a/github/README.md b/github/README.md deleted file mode 100644 index 47213a30..00000000 --- a/github/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# opencode GitHub Action - -A GitHub Action that integrates [opencode](https://opencode.ai) directly into your GitHub workflow. - -Mention `/opencode` in your comment, and opencode will execute tasks within your GitHub Actions runner. - -## Features - -#### Explain an issues - -Leave the following comment on a GitHub issue. `opencode` will read the entire thread, including all comments, and reply with a clear explanation. - -``` -/opencode explain this issue -``` - -#### Fix an issues - -Leave the following comment on a GitHub issue. opencode will create a new branch, implement the changes, and open a PR with the changes. - -``` -/opencode fix this -``` - -#### Review PRs and make changes - -Leave the following comment on a GitHub PR. opencode will implement the requested change and commit it to the same PR. - -``` -Delete the attachment from S3 when the note is removed /oc -``` - -## Installation - -Run the following command in the terminal from your GitHub repo: - -```bash -opencode github install -``` - -This will walk you through installing the GitHub app, creating the workflow, and setting up secrets. - -### Manual Setup - -1. Install the GitHub app https://github.com/apps/opencode-agent. Make sure it is installed on the target repository. -2. Add the following workflow file to `.github/workflows/opencode.yml` in your repo. Set the appropriate `model` and required API keys in `env`. - - ```yml - name: opencode - - on: - issue_comment: - types: [created] - - jobs: - opencode: - if: | - contains(github.event.comment.body, '/oc') || - contains(github.event.comment.body, '/opencode') - runs-on: ubuntu-latest - permissions: - id-token: write - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - name: Run opencode - uses: sst/opencode/github@latest - env: - ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} - with: - model: anthropic/claude-sonnet-4-20250514 - ``` - -3. Store the API keys in secrets. In your organization or project **settings**, expand **Secrets and variables** on the left and select **Actions**. Add the required API keys. - -## Support - -This is an early release. If you encounter issues or have feedback, please create an issue at https://github.com/sst/opencode/issues. - -## Development - -To test locally: - -1. Navigate to a test repo (e.g. `hello-world`): - - ```bash - cd hello-world - ``` - -2. Run: - - ```bash - MODEL=anthropic/claude-sonnet-4-20250514 \ - ANTHROPIC_API_KEY=sk-ant-api03-1234567890 \ - GITHUB_RUN_ID=dummy \ - bun /path/to/opencode/packages/opencode/src/index.ts github run \ - --token 'github_pat_1234567890' \ - --event '{"eventName":"issue_comment",...}' - ``` - - - `MODEL`: The model used by opencode. Same as the `MODEL` defined in the GitHub workflow. - - `ANTHROPIC_API_KEY`: Your model provider API key. Same as the keys defined in the GitHub workflow. - - `GITHUB_RUN_ID`: Dummy value to emulate GitHub action environment. - - `/path/to/opencode`: Path to your cloned opencode repo. `bun /path/to/opencode/packages/opencode/src/index.ts` runs your local version of `opencode`. - - `--token`: A GitHub persontal access token. This token is used to verify you have `admin` or `write` access to the test repo. Generate a token [here](https://github.com/settings/personal-access-tokens). - - `--event`: Mock GitHub event payload (see templates below). - -### Issue comment event - -``` ---event '{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4},"comment":{"id":1,"body":"hey opencode, summarize thread"}}}' -``` - -Replace: - -- `"owner":"sst"` with repo owner -- `"repo":"hello-world"` with repo name -- `"actor":"fwang"` with the GitHub username of commentor -- `"number":4` with the GitHub issue id -- `"body":"hey opencode, summarize thread"` with comment body - -### Issue comment with image attachment. - -``` ---event '{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4},"comment":{"id":1,"body":"hey opencode, what is in my image "}}}' -``` - -Replace the image URL `https://github.com/user-attachments/assets/xxxxxxxx` with a valid GitHub attachment (you can generate one by commenting with an image in any issue). - -### PR comment event - -``` ---event '{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4,"pull_request":{}},"comment":{"id":1,"body":"hey opencode, summarize thread"}}}' -``` diff --git a/github/action.yml b/github/action.yml deleted file mode 100644 index 0b7367de..00000000 --- a/github/action.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: "opencode GitHub Action" -description: "Run opencode in GitHub Actions workflows" -branding: - icon: "code" - color: "orange" - -inputs: - model: - description: "Model to use" - required: true - - share: - description: "Share the opencode session (defaults to true for public repos)" - required: false - -runs: - using: "composite" - steps: - - name: Install opencode - shell: bash - run: curl -fsSL https://opencode.ai/install | bash - - - name: Run opencode - shell: bash - id: run_opencode - run: opencode github run - env: - MODEL: ${{ inputs.model }} - SHARE: ${{ inputs.share }} diff --git a/github/script/publish b/github/script/publish deleted file mode 100755 index ac0e09ef..00000000 --- a/github/script/publish +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -# Get the latest Git tag -latest_tag=$(git tag --sort=committerdate | grep -E '^github-v[0-9]+\.[0-9]+\.[0-9]+$' | tail -1) -if [ -z "$latest_tag" ]; then - echo "No tags found" - exit 1 -fi -echo "Latest tag: $latest_tag" - -# Update latest tag -git tag -d latest -git push origin :refs/tags/latest -git tag -a latest $latest_tag -m "Update latest to $latest_tag" -git push origin latest \ No newline at end of file diff --git a/infra/app.ts b/infra/app.ts index 2b09516d..1123e3a6 100644 --- a/infra/app.ts +++ b/infra/app.ts @@ -4,18 +4,13 @@ export const domain = (() => { return `${$app.stage}.dev.opencode.ai` })() -const GITHUB_APP_ID = new sst.Secret("GITHUB_APP_ID") -const GITHUB_APP_PRIVATE_KEY = new sst.Secret("GITHUB_APP_PRIVATE_KEY") const bucket = new sst.cloudflare.Bucket("Bucket") export const api = new sst.cloudflare.Worker("Api", { domain: `api.${domain}`, handler: "packages/function/src/api.ts", - environment: { - WEB_DOMAIN: domain, - }, url: true, - link: [bucket, GITHUB_APP_ID, GITHUB_APP_PRIVATE_KEY], + link: [bucket], transform: { worker: (args) => { args.logpush = true @@ -41,20 +36,6 @@ new sst.cloudflare.x.Astro("Web", { domain, path: "packages/web", environment: { - // For astro config - SST_STAGE: $app.stage, VITE_API_URL: api.url, }, }) - -const OPENCODE_API_KEY = new sst.Secret("OPENCODE_API_KEY") -const ANTHROPIC_API_KEY = new sst.Secret("ANTHROPIC_API_KEY") -const OPENAI_API_KEY = new sst.Secret("OPENAI_API_KEY") -const ZHIPU_API_KEY = new sst.Secret("ZHIPU_API_KEY") - -export const gateway = new sst.cloudflare.Worker("GatewayApi", { - domain: `api.gateway.${domain}`, - handler: "packages/function/src/gateway.ts", - url: true, - link: [OPENCODE_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY, ZHIPU_API_KEY], -}) diff --git a/install b/install index 46de9e35..e18bd7bb 100755 --- a/install +++ b/install @@ -48,7 +48,7 @@ if [ -z "$requested_version" ]; then url="https://github.com/sst/opencode/releases/latest/download/$filename" specific_version=$(curl -s https://api.github.com/repos/sst/opencode/releases/latest | awk -F'"' '/"tag_name": "/ {gsub(/^v/, "", $4); print $4}') - if [[ $? -ne 0 || -z "$specific_version" ]]; then + if [[ $? -ne 0 ]]; then echo "${RED}Failed to fetch version information${NC}" exit 1 fi @@ -186,3 +186,4 @@ if [ -n "${GITHUB_ACTIONS-}" ] && [ "${GITHUB_ACTIONS}" == "true" ]; then echo "$INSTALL_DIR" >> $GITHUB_PATH print_message info "Added $INSTALL_DIR to \$GITHUB_PATH" fi + diff --git a/opencode.json b/opencode.json index 59f14ac7..57b94008 100644 --- a/opencode.json +++ b/opencode.json @@ -1,13 +1,19 @@ { "$schema": "https://opencode.ai/config.json", - "mcp": { - "context7": { - "type": "remote", - "url": "https://mcp.context7.com/sse" - }, - "weather": { - "type": "local", - "command": ["opencode", "x", "@h1deya/mcp-server-weather"] + "experimental": { + "hook": { + "file_edited": { + ".json": [ + { + "command": ["bun", "run", "prettier", "$FILE"] + } + ] + }, + "session_completed": [ + { + "command": ["touch", "./node_modules/foo"] + } + ] } } } diff --git a/package.json b/package.json index 7054e287..ed4fcded 100644 --- a/package.json +++ b/package.json @@ -5,29 +5,23 @@ "type": "module", "packageManager": "bun@1.2.14", "scripts": { - "dev": "bun run --conditions=development packages/opencode/src/index.ts", "typecheck": "bun run --filter='*' typecheck", - "stainless": "./scripts/stainless", - "postinstall": "./script/hooks" + "postinstall": "./scripts/hooks" }, "workspaces": { "packages": [ - "packages/*", - "packages/sdk/js" + "packages/*" ], "catalog": { - "@types/node": "22.13.9", - "@tsconfig/node22": "22.0.2", - "ai": "5.0.0-beta.34", - "hono": "4.7.10", "typescript": "5.8.2", - "zod": "3.25.49", - "remeda": "2.26.0" + "@types/node": "22.13.9", + "zod": "3.24.2", + "ai": "4.3.16" } }, "devDependencies": { "prettier": "3.5.3", - "sst": "3.17.8" + "sst": "3.17.6" }, "repository": { "type": "git", @@ -35,13 +29,17 @@ }, "license": "MIT", "prettier": { - "semi": false, - "printWidth": 120 + "semi": false + }, + "overrides": { + "zod": "3.24.2" }, "trustedDependencies": [ "esbuild", "protobufjs", "sharp" ], - "patchedDependencies": {} + "patchedDependencies": { + "ai@4.3.16": "patches/ai@4.3.16.patch" + } } diff --git a/packages/function/package.json b/packages/function/package.json index 52d621eb..81a1edc9 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,23 +1,12 @@ { "name": "@opencode/function", - "version": "0.3.130", + "version": "0.0.1", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", "devDependencies": { "@cloudflare/workers-types": "4.20250522.0", - "@types/node": "catalog:", - "openai": "5.11.0", - "typescript": "catalog:" - }, - "dependencies": { - "@ai-sdk/anthropic": "2.0.0", - "@ai-sdk/openai": "2.0.2", - "@ai-sdk/openai-compatible": "1.0.1", - "@octokit/auth-app": "8.0.1", - "@octokit/rest": "22.0.0", - "ai": "catalog:", - "hono": "catalog:", - "jose": "6.0.11" + "typescript": "catalog:", + "@types/node": "catalog:" } } diff --git a/packages/function/src/api.ts b/packages/function/src/api.ts index 74ca22fa..1d0e2cd0 100644 --- a/packages/function/src/api.ts +++ b/packages/function/src/api.ts @@ -1,15 +1,9 @@ -import { Hono } from "hono" import { DurableObject } from "cloudflare:workers" import { randomUUID } from "node:crypto" -import { jwtVerify, createRemoteJWKSet } from "jose" -import { createAppAuth } from "@octokit/auth-app" -import { Octokit } from "@octokit/rest" -import { Resource } from "sst" type Env = { SYNC_SERVER: DurableObjectNamespace
-function isPrime(n) {
- if (n <= 1) return false
- for (let i = 2; i * i <= n; i++) {
- if (n % i === 0) return false
- }
- return true
-}
-
-client.Event.List(ctx context.Context) (opencode.EventListResponse, error)
-
-# App
-
-Response Types:
-
-- opencode.App
-- opencode.Mode
-- opencode.Model
-- opencode.Provider
-- opencode.AppProvidersResponse
-
-Methods:
-
-- client.App.Get(ctx context.Context) (opencode.App, error)
-- client.App.Init(ctx context.Context) (bool, error)
-- client.App.Log(ctx context.Context, body opencode.AppLogParams) (bool, error)
-- client.App.Modes(ctx context.Context) ([]opencode.Mode, error)
-- client.App.Providers(ctx context.Context) (opencode.AppProvidersResponse, error)
-
-# Find
-
-Response Types:
-
-- opencode.Symbol
-- opencode.FindTextResponse
-
-Methods:
-
-- client.Find.Files(ctx context.Context, query opencode.FindFilesParams) ([]string, error)
-- client.Find.Symbols(ctx context.Context, query opencode.FindSymbolsParams) ([]opencode.Symbol, error)
-- client.Find.Text(ctx context.Context, query opencode.FindTextParams) ([]opencode.FindTextResponse, error)
-
-# File
-
-Response Types:
-
-- opencode.File
-- opencode.FileReadResponse
-
-Methods:
-
-- client.File.Read(ctx context.Context, query opencode.FileReadParams) (opencode.FileReadResponse, error)
-- client.File.Status(ctx context.Context) ([]opencode.File, error)
-
-# Config
-
-Response Types:
-
-- opencode.Config
-- opencode.KeybindsConfig
-- opencode.McpLocalConfig
-- opencode.McpRemoteConfig
-- opencode.ModeConfig
-
-Methods:
-
-- client.Config.Get(ctx context.Context) (opencode.Config, error)
-
-# Session
-
-Params Types:
-
-- opencode.FilePartInputParam
-- opencode.FilePartSourceUnionParam
-- opencode.FilePartSourceTextParam
-- opencode.FileSourceParam
-- opencode.SymbolSourceParam
-- opencode.TextPartInputParam
-
-Response Types:
-
-- opencode.AssistantMessage
-- opencode.FilePart
-- opencode.FilePartSource
-- opencode.FilePartSourceText
-- opencode.FileSource
-- opencode.Message
-- opencode.Part
-- opencode.Session
-- opencode.SnapshotPart
-- opencode.StepFinishPart
-- opencode.StepStartPart
-- opencode.SymbolSource
-- opencode.TextPart
-- opencode.ToolPart
-- opencode.ToolStateCompleted
-- opencode.ToolStateError
-- opencode.ToolStatePending
-- opencode.ToolStateRunning
-- opencode.UserMessage
-- opencode.SessionMessageResponse
-- opencode.SessionMessagesResponse
-
-Methods:
-
-- client.Session.New(ctx context.Context) (opencode.Session, error)
-- client.Session.List(ctx context.Context) ([]opencode.Session, error)
-- client.Session.Delete(ctx context.Context, id string) (bool, error)
-- client.Session.Abort(ctx context.Context, id string) (bool, error)
-- client.Session.Chat(ctx context.Context, id string, body opencode.SessionChatParams) (opencode.AssistantMessage, error)
-- client.Session.Init(ctx context.Context, id string, body opencode.SessionInitParams) (bool, error)
-- client.Session.Message(ctx context.Context, id string, messageID string) (opencode.SessionMessageResponse, error)
-- client.Session.Messages(ctx context.Context, id string) ([]opencode.SessionMessagesResponse, error)
-- client.Session.Revert(ctx context.Context, id string, body opencode.SessionRevertParams) (opencode.Session, error)
-- client.Session.Share(ctx context.Context, id string) (opencode.Session, error)
-- client.Session.Summarize(ctx context.Context, id string, body opencode.SessionSummarizeParams) (bool, error)
-- client.Session.Unrevert(ctx context.Context, id string) (opencode.Session, error)
-- client.Session.Unshare(ctx context.Context, id string) (opencode.Session, error)
-
-## Permissions
-
-Response Types:
-
-- opencode.Permission
-
-Methods:
-
-- client.Session.Permissions.Respond(ctx context.Context, id string, permissionID string, body opencode.SessionPermissionRespondParams) (bool, error)
-
-# Tui
-
-Methods:
-
-- client.Tui.AppendPrompt(ctx context.Context, body opencode.TuiAppendPromptParams) (bool, error)
-- client.Tui.ClearPrompt(ctx context.Context) (bool, error)
-- client.Tui.ExecuteCommand(ctx context.Context, body opencode.TuiExecuteCommandParams) (bool, error)
-- client.Tui.OpenHelp(ctx context.Context) (bool, error)
-- client.Tui.OpenModels(ctx context.Context) (bool, error)
-- client.Tui.OpenSessions(ctx context.Context) (bool, error)
-- client.Tui.OpenThemes(ctx context.Context) (bool, error)
-- client.Tui.SubmitPrompt(ctx context.Context) (bool, error)
diff --git a/packages/sdk/go/app.go b/packages/sdk/go/app.go
deleted file mode 100644
index 0a7d14e7..00000000
--- a/packages/sdk/go/app.go
+++ /dev/null
@@ -1,370 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "net/http"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
- "github.com/sst/opencode-sdk-go/internal/param"
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-// AppService contains methods and other services that help with interacting with
-// the opencode API.
-//
-// Note, unlike clients, this service does not read variables from the environment
-// automatically. You should not instantiate this service directly, and instead use
-// the [NewAppService] method instead.
-type AppService struct {
- Options []option.RequestOption
-}
-
-// NewAppService generates a new service that applies the given options to each
-// request. These options are applied after the parent client's options (if there
-// is one), and before any request-specific options.
-func NewAppService(opts ...option.RequestOption) (r *AppService) {
- r = &AppService{}
- r.Options = opts
- return
-}
-
-// Get app info
-func (r *AppService) Get(ctx context.Context, opts ...option.RequestOption) (res *App, err error) {
- opts = append(r.Options[:], opts...)
- path := "app"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
- return
-}
-
-// Initialize the app
-func (r *AppService) Init(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "app/init"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Write a log entry to the server logs
-func (r *AppService) Log(ctx context.Context, body AppLogParams, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "log"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
- return
-}
-
-// List all modes
-func (r *AppService) Modes(ctx context.Context, opts ...option.RequestOption) (res *[]Mode, err error) {
- opts = append(r.Options[:], opts...)
- path := "mode"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
- return
-}
-
-// List all providers
-func (r *AppService) Providers(ctx context.Context, opts ...option.RequestOption) (res *AppProvidersResponse, err error) {
- opts = append(r.Options[:], opts...)
- path := "config/providers"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
- return
-}
-
-type App struct {
- Git bool `json:"git,required"`
- Hostname string `json:"hostname,required"`
- Path AppPath `json:"path,required"`
- Time AppTime `json:"time,required"`
- JSON appJSON `json:"-"`
-}
-
-// appJSON contains the JSON metadata for the struct [App]
-type appJSON struct {
- Git apijson.Field
- Hostname apijson.Field
- Path apijson.Field
- Time apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *App) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r appJSON) RawJSON() string {
- return r.raw
-}
-
-type AppPath struct {
- Config string `json:"config,required"`
- Cwd string `json:"cwd,required"`
- Data string `json:"data,required"`
- Root string `json:"root,required"`
- State string `json:"state,required"`
- JSON appPathJSON `json:"-"`
-}
-
-// appPathJSON contains the JSON metadata for the struct [AppPath]
-type appPathJSON struct {
- Config apijson.Field
- Cwd apijson.Field
- Data apijson.Field
- Root apijson.Field
- State apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AppPath) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r appPathJSON) RawJSON() string {
- return r.raw
-}
-
-type AppTime struct {
- Initialized float64 `json:"initialized"`
- JSON appTimeJSON `json:"-"`
-}
-
-// appTimeJSON contains the JSON metadata for the struct [AppTime]
-type appTimeJSON struct {
- Initialized apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AppTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r appTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type Mode struct {
- Name string `json:"name,required"`
- Tools map[string]bool `json:"tools,required"`
- Model ModeModel `json:"model"`
- Prompt string `json:"prompt"`
- Temperature float64 `json:"temperature"`
- TopP float64 `json:"topP"`
- JSON modeJSON `json:"-"`
-}
-
-// modeJSON contains the JSON metadata for the struct [Mode]
-type modeJSON struct {
- Name apijson.Field
- Tools apijson.Field
- Model apijson.Field
- Prompt apijson.Field
- Temperature apijson.Field
- TopP apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *Mode) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r modeJSON) RawJSON() string {
- return r.raw
-}
-
-type ModeModel struct {
- ModelID string `json:"modelID,required"`
- ProviderID string `json:"providerID,required"`
- JSON modeModelJSON `json:"-"`
-}
-
-// modeModelJSON contains the JSON metadata for the struct [ModeModel]
-type modeModelJSON struct {
- ModelID apijson.Field
- ProviderID apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ModeModel) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r modeModelJSON) RawJSON() string {
- return r.raw
-}
-
-type Model struct {
- ID string `json:"id,required"`
- Attachment bool `json:"attachment,required"`
- Cost ModelCost `json:"cost,required"`
- Limit ModelLimit `json:"limit,required"`
- Name string `json:"name,required"`
- Options map[string]interface{} `json:"options,required"`
- Reasoning bool `json:"reasoning,required"`
- ReleaseDate string `json:"release_date,required"`
- Temperature bool `json:"temperature,required"`
- ToolCall bool `json:"tool_call,required"`
- JSON modelJSON `json:"-"`
-}
-
-// modelJSON contains the JSON metadata for the struct [Model]
-type modelJSON struct {
- ID apijson.Field
- Attachment apijson.Field
- Cost apijson.Field
- Limit apijson.Field
- Name apijson.Field
- Options apijson.Field
- Reasoning apijson.Field
- ReleaseDate apijson.Field
- Temperature apijson.Field
- ToolCall apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *Model) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r modelJSON) RawJSON() string {
- return r.raw
-}
-
-type ModelCost struct {
- Input float64 `json:"input,required"`
- Output float64 `json:"output,required"`
- CacheRead float64 `json:"cache_read"`
- CacheWrite float64 `json:"cache_write"`
- JSON modelCostJSON `json:"-"`
-}
-
-// modelCostJSON contains the JSON metadata for the struct [ModelCost]
-type modelCostJSON struct {
- Input apijson.Field
- Output apijson.Field
- CacheRead apijson.Field
- CacheWrite apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ModelCost) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r modelCostJSON) RawJSON() string {
- return r.raw
-}
-
-type ModelLimit struct {
- Context float64 `json:"context,required"`
- Output float64 `json:"output,required"`
- JSON modelLimitJSON `json:"-"`
-}
-
-// modelLimitJSON contains the JSON metadata for the struct [ModelLimit]
-type modelLimitJSON struct {
- Context apijson.Field
- Output apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ModelLimit) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r modelLimitJSON) RawJSON() string {
- return r.raw
-}
-
-type Provider struct {
- ID string `json:"id,required"`
- Env []string `json:"env,required"`
- Models map[string]Model `json:"models,required"`
- Name string `json:"name,required"`
- API string `json:"api"`
- Npm string `json:"npm"`
- JSON providerJSON `json:"-"`
-}
-
-// providerJSON contains the JSON metadata for the struct [Provider]
-type providerJSON struct {
- ID apijson.Field
- Env apijson.Field
- Models apijson.Field
- Name apijson.Field
- API apijson.Field
- Npm apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *Provider) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r providerJSON) RawJSON() string {
- return r.raw
-}
-
-type AppProvidersResponse struct {
- Default map[string]string `json:"default,required"`
- Providers []Provider `json:"providers,required"`
- JSON appProvidersResponseJSON `json:"-"`
-}
-
-// appProvidersResponseJSON contains the JSON metadata for the struct
-// [AppProvidersResponse]
-type appProvidersResponseJSON struct {
- Default apijson.Field
- Providers apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AppProvidersResponse) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r appProvidersResponseJSON) RawJSON() string {
- return r.raw
-}
-
-type AppLogParams struct {
- // Log level
- Level param.Field[AppLogParamsLevel] `json:"level,required"`
- // Log message
- Message param.Field[string] `json:"message,required"`
- // Service name for the log entry
- Service param.Field[string] `json:"service,required"`
- // Additional metadata for the log entry
- Extra param.Field[map[string]interface{}] `json:"extra"`
-}
-
-func (r AppLogParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-// Log level
-type AppLogParamsLevel string
-
-const (
- AppLogParamsLevelDebug AppLogParamsLevel = "debug"
- AppLogParamsLevelInfo AppLogParamsLevel = "info"
- AppLogParamsLevelError AppLogParamsLevel = "error"
- AppLogParamsLevelWarn AppLogParamsLevel = "warn"
-)
-
-func (r AppLogParamsLevel) IsKnown() bool {
- switch r {
- case AppLogParamsLevelDebug, AppLogParamsLevelInfo, AppLogParamsLevelError, AppLogParamsLevelWarn:
- return true
- }
- return false
-}
diff --git a/packages/sdk/go/app_test.go b/packages/sdk/go/app_test.go
deleted file mode 100644
index 16bb8ff8..00000000
--- a/packages/sdk/go/app_test.go
+++ /dev/null
@@ -1,131 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "errors"
- "os"
- "testing"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal/testutil"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-func TestAppGet(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.App.Get(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestAppInit(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.App.Init(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestAppLogWithOptionalParams(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.App.Log(context.TODO(), opencode.AppLogParams{
- Level: opencode.F(opencode.AppLogParamsLevelDebug),
- Message: opencode.F("message"),
- Service: opencode.F("service"),
- Extra: opencode.F(map[string]interface{}{
- "foo": "bar",
- }),
- })
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestAppModes(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.App.Modes(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestAppProviders(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.App.Providers(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
diff --git a/packages/sdk/go/client.go b/packages/sdk/go/client.go
deleted file mode 100644
index 6baf21a8..00000000
--- a/packages/sdk/go/client.go
+++ /dev/null
@@ -1,125 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "net/http"
- "os"
-
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-// Client creates a struct with services and top level methods that help with
-// interacting with the opencode API. You should not instantiate this client
-// directly, and instead use the [NewClient] method instead.
-type Client struct {
- Options []option.RequestOption
- Event *EventService
- App *AppService
- Find *FindService
- File *FileService
- Config *ConfigService
- Session *SessionService
- Tui *TuiService
-}
-
-// DefaultClientOptions read from the environment (OPENCODE_BASE_URL). This should
-// be used to initialize new clients.
-func DefaultClientOptions() []option.RequestOption {
- defaults := []option.RequestOption{option.WithEnvironmentProduction()}
- if o, ok := os.LookupEnv("OPENCODE_BASE_URL"); ok {
- defaults = append(defaults, option.WithBaseURL(o))
- }
- return defaults
-}
-
-// NewClient generates a new client with the default option read from the
-// environment (OPENCODE_BASE_URL). The option passed in as arguments are applied
-// after these default arguments, and all option will be passed down to the
-// services and requests that this client makes.
-func NewClient(opts ...option.RequestOption) (r *Client) {
- opts = append(DefaultClientOptions(), opts...)
-
- r = &Client{Options: opts}
-
- r.Event = NewEventService(opts...)
- r.App = NewAppService(opts...)
- r.Find = NewFindService(opts...)
- r.File = NewFileService(opts...)
- r.Config = NewConfigService(opts...)
- r.Session = NewSessionService(opts...)
- r.Tui = NewTuiService(opts...)
-
- return
-}
-
-// Execute makes a request with the given context, method, URL, request params,
-// response, and request options. This is useful for hitting undocumented endpoints
-// while retaining the base URL, auth, retries, and other options from the client.
-//
-// If a byte slice or an [io.Reader] is supplied to params, it will be used as-is
-// for the request body.
-//
-// The params is by default serialized into the body using [encoding/json]. If your
-// type implements a MarshalJSON function, it will be used instead to serialize the
-// request. If a URLQuery method is implemented, the returned [url.Values] will be
-// used as query strings to the url.
-//
-// If your params struct uses [param.Field], you must provide either [MarshalJSON],
-// [URLQuery], and/or [MarshalForm] functions. It is undefined behavior to use a
-// struct uses [param.Field] without specifying how it is serialized.
-//
-// Any "…Params" object defined in this library can be used as the request
-// argument. Note that 'path' arguments will not be forwarded into the url.
-//
-// The response body will be deserialized into the res variable, depending on its
-// type:
-//
-// - A pointer to a [*http.Response] is populated by the raw response.
-// - A pointer to a byte array will be populated with the contents of the request
-// body.
-// - A pointer to any other type uses this library's default JSON decoding, which
-// respects UnmarshalJSON if it is defined on the type.
-// - A nil value will not read the response body.
-//
-// For even greater flexibility, see [option.WithResponseInto] and
-// [option.WithResponseBodyInto].
-func (r *Client) Execute(ctx context.Context, method string, path string, params interface{}, res interface{}, opts ...option.RequestOption) error {
- opts = append(r.Options, opts...)
- return requestconfig.ExecuteNewRequest(ctx, method, path, params, res, opts...)
-}
-
-// Get makes a GET request with the given URL, params, and optionally deserializes
-// to a response. See [Execute] documentation on the params and response.
-func (r *Client) Get(ctx context.Context, path string, params interface{}, res interface{}, opts ...option.RequestOption) error {
- return r.Execute(ctx, http.MethodGet, path, params, res, opts...)
-}
-
-// Post makes a POST request with the given URL, params, and optionally
-// deserializes to a response. See [Execute] documentation on the params and
-// response.
-func (r *Client) Post(ctx context.Context, path string, params interface{}, res interface{}, opts ...option.RequestOption) error {
- return r.Execute(ctx, http.MethodPost, path, params, res, opts...)
-}
-
-// Put makes a PUT request with the given URL, params, and optionally deserializes
-// to a response. See [Execute] documentation on the params and response.
-func (r *Client) Put(ctx context.Context, path string, params interface{}, res interface{}, opts ...option.RequestOption) error {
- return r.Execute(ctx, http.MethodPut, path, params, res, opts...)
-}
-
-// Patch makes a PATCH request with the given URL, params, and optionally
-// deserializes to a response. See [Execute] documentation on the params and
-// response.
-func (r *Client) Patch(ctx context.Context, path string, params interface{}, res interface{}, opts ...option.RequestOption) error {
- return r.Execute(ctx, http.MethodPatch, path, params, res, opts...)
-}
-
-// Delete makes a DELETE request with the given URL, params, and optionally
-// deserializes to a response. See [Execute] documentation on the params and
-// response.
-func (r *Client) Delete(ctx context.Context, path string, params interface{}, res interface{}, opts ...option.RequestOption) error {
- return r.Execute(ctx, http.MethodDelete, path, params, res, opts...)
-}
diff --git a/packages/sdk/go/client_test.go b/packages/sdk/go/client_test.go
deleted file mode 100644
index 0f5b8205..00000000
--- a/packages/sdk/go/client_test.go
+++ /dev/null
@@ -1,332 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "fmt"
- "io"
- "net/http"
- "reflect"
- "testing"
- "time"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-type closureTransport struct {
- fn func(req *http.Request) (*http.Response, error)
-}
-
-func (t *closureTransport) RoundTrip(req *http.Request) (*http.Response, error) {
- return t.fn(req)
-}
-
-func TestUserAgentHeader(t *testing.T) {
- var userAgent string
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- userAgent = req.Header.Get("User-Agent")
- return &http.Response{
- StatusCode: http.StatusOK,
- }, nil
- },
- },
- }),
- )
- client.Session.List(context.Background())
- if userAgent != fmt.Sprintf("Opencode/Go %s", internal.PackageVersion) {
- t.Errorf("Expected User-Agent to be correct, but got: %#v", userAgent)
- }
-}
-
-func TestRetryAfter(t *testing.T) {
- retryCountHeaders := make([]string, 0)
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- retryCountHeaders = append(retryCountHeaders, req.Header.Get("X-Stainless-Retry-Count"))
- return &http.Response{
- StatusCode: http.StatusTooManyRequests,
- Header: http.Header{
- http.CanonicalHeaderKey("Retry-After"): []string{"0.1"},
- },
- }, nil
- },
- },
- }),
- )
- _, err := client.Session.List(context.Background())
- if err == nil {
- t.Error("Expected there to be a cancel error")
- }
-
- attempts := len(retryCountHeaders)
- if attempts != 3 {
- t.Errorf("Expected %d attempts, got %d", 3, attempts)
- }
-
- expectedRetryCountHeaders := []string{"0", "1", "2"}
- if !reflect.DeepEqual(retryCountHeaders, expectedRetryCountHeaders) {
- t.Errorf("Expected %v retry count headers, got %v", expectedRetryCountHeaders, retryCountHeaders)
- }
-}
-
-func TestDeleteRetryCountHeader(t *testing.T) {
- retryCountHeaders := make([]string, 0)
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- retryCountHeaders = append(retryCountHeaders, req.Header.Get("X-Stainless-Retry-Count"))
- return &http.Response{
- StatusCode: http.StatusTooManyRequests,
- Header: http.Header{
- http.CanonicalHeaderKey("Retry-After"): []string{"0.1"},
- },
- }, nil
- },
- },
- }),
- option.WithHeaderDel("X-Stainless-Retry-Count"),
- )
- _, err := client.Session.List(context.Background())
- if err == nil {
- t.Error("Expected there to be a cancel error")
- }
-
- expectedRetryCountHeaders := []string{"", "", ""}
- if !reflect.DeepEqual(retryCountHeaders, expectedRetryCountHeaders) {
- t.Errorf("Expected %v retry count headers, got %v", expectedRetryCountHeaders, retryCountHeaders)
- }
-}
-
-func TestOverwriteRetryCountHeader(t *testing.T) {
- retryCountHeaders := make([]string, 0)
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- retryCountHeaders = append(retryCountHeaders, req.Header.Get("X-Stainless-Retry-Count"))
- return &http.Response{
- StatusCode: http.StatusTooManyRequests,
- Header: http.Header{
- http.CanonicalHeaderKey("Retry-After"): []string{"0.1"},
- },
- }, nil
- },
- },
- }),
- option.WithHeader("X-Stainless-Retry-Count", "42"),
- )
- _, err := client.Session.List(context.Background())
- if err == nil {
- t.Error("Expected there to be a cancel error")
- }
-
- expectedRetryCountHeaders := []string{"42", "42", "42"}
- if !reflect.DeepEqual(retryCountHeaders, expectedRetryCountHeaders) {
- t.Errorf("Expected %v retry count headers, got %v", expectedRetryCountHeaders, retryCountHeaders)
- }
-}
-
-func TestRetryAfterMs(t *testing.T) {
- attempts := 0
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- attempts++
- return &http.Response{
- StatusCode: http.StatusTooManyRequests,
- Header: http.Header{
- http.CanonicalHeaderKey("Retry-After-Ms"): []string{"100"},
- },
- }, nil
- },
- },
- }),
- )
- _, err := client.Session.List(context.Background())
- if err == nil {
- t.Error("Expected there to be a cancel error")
- }
- if want := 3; attempts != want {
- t.Errorf("Expected %d attempts, got %d", want, attempts)
- }
-}
-
-func TestContextCancel(t *testing.T) {
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- <-req.Context().Done()
- return nil, req.Context().Err()
- },
- },
- }),
- )
- cancelCtx, cancel := context.WithCancel(context.Background())
- cancel()
- _, err := client.Session.List(cancelCtx)
- if err == nil {
- t.Error("Expected there to be a cancel error")
- }
-}
-
-func TestContextCancelDelay(t *testing.T) {
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- <-req.Context().Done()
- return nil, req.Context().Err()
- },
- },
- }),
- )
- cancelCtx, cancel := context.WithTimeout(context.Background(), 2*time.Millisecond)
- defer cancel()
- _, err := client.Session.List(cancelCtx)
- if err == nil {
- t.Error("expected there to be a cancel error")
- }
-}
-
-func TestContextDeadline(t *testing.T) {
- testTimeout := time.After(3 * time.Second)
- testDone := make(chan struct{})
-
- deadline := time.Now().Add(100 * time.Millisecond)
- deadlineCtx, cancel := context.WithDeadline(context.Background(), deadline)
- defer cancel()
-
- go func() {
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- <-req.Context().Done()
- return nil, req.Context().Err()
- },
- },
- }),
- )
- _, err := client.Session.List(deadlineCtx)
- if err == nil {
- t.Error("expected there to be a deadline error")
- }
- close(testDone)
- }()
-
- select {
- case <-testTimeout:
- t.Fatal("client didn't finish in time")
- case <-testDone:
- if diff := time.Since(deadline); diff < -30*time.Millisecond || 30*time.Millisecond < diff {
- t.Fatalf("client did not return within 30ms of context deadline, got %s", diff)
- }
- }
-}
-
-func TestContextDeadlineStreaming(t *testing.T) {
- testTimeout := time.After(3 * time.Second)
- testDone := make(chan struct{})
-
- deadline := time.Now().Add(100 * time.Millisecond)
- deadlineCtx, cancel := context.WithDeadline(context.Background(), deadline)
- defer cancel()
-
- go func() {
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- return &http.Response{
- StatusCode: 200,
- Status: "200 OK",
- Body: io.NopCloser(
- io.Reader(readerFunc(func([]byte) (int, error) {
- <-req.Context().Done()
- return 0, req.Context().Err()
- })),
- ),
- }, nil
- },
- },
- }),
- )
- stream := client.Event.ListStreaming(deadlineCtx)
- for stream.Next() {
- _ = stream.Current()
- }
- if stream.Err() == nil {
- t.Error("expected there to be a deadline error")
- }
- close(testDone)
- }()
-
- select {
- case <-testTimeout:
- t.Fatal("client didn't finish in time")
- case <-testDone:
- if diff := time.Since(deadline); diff < -30*time.Millisecond || 30*time.Millisecond < diff {
- t.Fatalf("client did not return within 30ms of context deadline, got %s", diff)
- }
- }
-}
-
-func TestContextDeadlineStreamingWithRequestTimeout(t *testing.T) {
- testTimeout := time.After(3 * time.Second)
- testDone := make(chan struct{})
- deadline := time.Now().Add(100 * time.Millisecond)
-
- go func() {
- client := opencode.NewClient(
- option.WithHTTPClient(&http.Client{
- Transport: &closureTransport{
- fn: func(req *http.Request) (*http.Response, error) {
- return &http.Response{
- StatusCode: 200,
- Status: "200 OK",
- Body: io.NopCloser(
- io.Reader(readerFunc(func([]byte) (int, error) {
- <-req.Context().Done()
- return 0, req.Context().Err()
- })),
- ),
- }, nil
- },
- },
- }),
- )
- stream := client.Event.ListStreaming(context.Background(), option.WithRequestTimeout((100 * time.Millisecond)))
- for stream.Next() {
- _ = stream.Current()
- }
- if stream.Err() == nil {
- t.Error("expected there to be a deadline error")
- }
- close(testDone)
- }()
-
- select {
- case <-testTimeout:
- t.Fatal("client didn't finish in time")
- case <-testDone:
- if diff := time.Since(deadline); diff < -30*time.Millisecond || 30*time.Millisecond < diff {
- t.Fatalf("client did not return within 30ms of context deadline, got %s", diff)
- }
- }
-}
-
-type readerFunc func([]byte) (int, error)
-
-func (f readerFunc) Read(p []byte) (int, error) { return f(p) }
-func (f readerFunc) Close() error { return nil }
diff --git a/packages/sdk/go/config.go b/packages/sdk/go/config.go
deleted file mode 100644
index 911bb2a3..00000000
--- a/packages/sdk/go/config.go
+++ /dev/null
@@ -1,1054 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "net/http"
- "reflect"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
- "github.com/tidwall/gjson"
-)
-
-// ConfigService contains methods and other services that help with interacting
-// with the opencode API.
-//
-// Note, unlike clients, this service does not read variables from the environment
-// automatically. You should not instantiate this service directly, and instead use
-// the [NewConfigService] method instead.
-type ConfigService struct {
- Options []option.RequestOption
-}
-
-// NewConfigService generates a new service that applies the given options to each
-// request. These options are applied after the parent client's options (if there
-// is one), and before any request-specific options.
-func NewConfigService(opts ...option.RequestOption) (r *ConfigService) {
- r = &ConfigService{}
- r.Options = opts
- return
-}
-
-// Get config info
-func (r *ConfigService) Get(ctx context.Context, opts ...option.RequestOption) (res *Config, err error) {
- opts = append(r.Options[:], opts...)
- path := "config"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
- return
-}
-
-type Config struct {
- // JSON schema reference for configuration validation
- Schema string `json:"$schema"`
- // Modes configuration, see https://opencode.ai/docs/modes
- Agent ConfigAgent `json:"agent"`
- // @deprecated Use 'share' field instead. Share newly created sessions
- // automatically
- Autoshare bool `json:"autoshare"`
- // Automatically update to the latest version
- Autoupdate bool `json:"autoupdate"`
- // Disable providers that are loaded automatically
- DisabledProviders []string `json:"disabled_providers"`
- Experimental ConfigExperimental `json:"experimental"`
- Formatter map[string]ConfigFormatter `json:"formatter"`
- // Additional instruction files or patterns to include
- Instructions []string `json:"instructions"`
- // Custom keybind configurations
- Keybinds KeybindsConfig `json:"keybinds"`
- // @deprecated Always uses stretch layout.
- Layout ConfigLayout `json:"layout"`
- Lsp map[string]ConfigLsp `json:"lsp"`
- // MCP (Model Context Protocol) server configurations
- Mcp map[string]ConfigMcp `json:"mcp"`
- // Modes configuration, see https://opencode.ai/docs/modes
- Mode ConfigMode `json:"mode"`
- // Model to use in the format of provider/model, eg anthropic/claude-2
- Model string `json:"model"`
- Permission ConfigPermission `json:"permission"`
- Plugin []string `json:"plugin"`
- // Custom provider configurations and model overrides
- Provider map[string]ConfigProvider `json:"provider"`
- // Control sharing behavior:'manual' allows manual sharing via commands, 'auto'
- // enables automatic sharing, 'disabled' disables all sharing
- Share ConfigShare `json:"share"`
- // Small model to use for tasks like title generation in the
- // format of provider/model
- SmallModel string `json:"small_model"`
- // Theme name to use for the interface
- Theme string `json:"theme"`
- // Custom username to display in conversations instead of system username
- Username string `json:"username"`
- JSON configJSON `json:"-"`
-}
-
-// configJSON contains the JSON metadata for the struct [Config]
-type configJSON struct {
- Schema apijson.Field
- Agent apijson.Field
- Autoshare apijson.Field
- Autoupdate apijson.Field
- DisabledProviders apijson.Field
- Experimental apijson.Field
- Formatter apijson.Field
- Instructions apijson.Field
- Keybinds apijson.Field
- Layout apijson.Field
- Lsp apijson.Field
- Mcp apijson.Field
- Mode apijson.Field
- Model apijson.Field
- Permission apijson.Field
- Plugin apijson.Field
- Provider apijson.Field
- Share apijson.Field
- SmallModel apijson.Field
- Theme apijson.Field
- Username apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *Config) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configJSON) RawJSON() string {
- return r.raw
-}
-
-// Modes configuration, see https://opencode.ai/docs/modes
-type ConfigAgent struct {
- General ConfigAgentGeneral `json:"general"`
- ExtraFields map[string]ConfigAgent `json:"-,extras"`
- JSON configAgentJSON `json:"-"`
-}
-
-// configAgentJSON contains the JSON metadata for the struct [ConfigAgent]
-type configAgentJSON struct {
- General apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigAgent) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configAgentJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigAgentGeneral struct {
- Description string `json:"description,required"`
- JSON configAgentGeneralJSON `json:"-"`
- ModeConfig
-}
-
-// configAgentGeneralJSON contains the JSON metadata for the struct
-// [ConfigAgentGeneral]
-type configAgentGeneralJSON struct {
- Description apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigAgentGeneral) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configAgentGeneralJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigExperimental struct {
- Hook ConfigExperimentalHook `json:"hook"`
- JSON configExperimentalJSON `json:"-"`
-}
-
-// configExperimentalJSON contains the JSON metadata for the struct
-// [ConfigExperimental]
-type configExperimentalJSON struct {
- Hook apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigExperimental) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configExperimentalJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigExperimentalHook struct {
- FileEdited map[string][]ConfigExperimentalHookFileEdited `json:"file_edited"`
- SessionCompleted []ConfigExperimentalHookSessionCompleted `json:"session_completed"`
- JSON configExperimentalHookJSON `json:"-"`
-}
-
-// configExperimentalHookJSON contains the JSON metadata for the struct
-// [ConfigExperimentalHook]
-type configExperimentalHookJSON struct {
- FileEdited apijson.Field
- SessionCompleted apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigExperimentalHook) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configExperimentalHookJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigExperimentalHookFileEdited struct {
- Command []string `json:"command,required"`
- Environment map[string]string `json:"environment"`
- JSON configExperimentalHookFileEditedJSON `json:"-"`
-}
-
-// configExperimentalHookFileEditedJSON contains the JSON metadata for the struct
-// [ConfigExperimentalHookFileEdited]
-type configExperimentalHookFileEditedJSON struct {
- Command apijson.Field
- Environment apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigExperimentalHookFileEdited) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configExperimentalHookFileEditedJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigExperimentalHookSessionCompleted struct {
- Command []string `json:"command,required"`
- Environment map[string]string `json:"environment"`
- JSON configExperimentalHookSessionCompletedJSON `json:"-"`
-}
-
-// configExperimentalHookSessionCompletedJSON contains the JSON metadata for the
-// struct [ConfigExperimentalHookSessionCompleted]
-type configExperimentalHookSessionCompletedJSON struct {
- Command apijson.Field
- Environment apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigExperimentalHookSessionCompleted) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configExperimentalHookSessionCompletedJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigFormatter struct {
- Command []string `json:"command"`
- Disabled bool `json:"disabled"`
- Environment map[string]string `json:"environment"`
- Extensions []string `json:"extensions"`
- JSON configFormatterJSON `json:"-"`
-}
-
-// configFormatterJSON contains the JSON metadata for the struct [ConfigFormatter]
-type configFormatterJSON struct {
- Command apijson.Field
- Disabled apijson.Field
- Environment apijson.Field
- Extensions apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigFormatter) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configFormatterJSON) RawJSON() string {
- return r.raw
-}
-
-// @deprecated Always uses stretch layout.
-type ConfigLayout string
-
-const (
- ConfigLayoutAuto ConfigLayout = "auto"
- ConfigLayoutStretch ConfigLayout = "stretch"
-)
-
-func (r ConfigLayout) IsKnown() bool {
- switch r {
- case ConfigLayoutAuto, ConfigLayoutStretch:
- return true
- }
- return false
-}
-
-type ConfigLsp struct {
- // This field can have the runtime type of [[]string].
- Command interface{} `json:"command"`
- Disabled bool `json:"disabled"`
- // This field can have the runtime type of [map[string]string].
- Env interface{} `json:"env"`
- // This field can have the runtime type of [[]string].
- Extensions interface{} `json:"extensions"`
- // This field can have the runtime type of [map[string]interface{}].
- Initialization interface{} `json:"initialization"`
- JSON configLspJSON `json:"-"`
- union ConfigLspUnion
-}
-
-// configLspJSON contains the JSON metadata for the struct [ConfigLsp]
-type configLspJSON struct {
- Command apijson.Field
- Disabled apijson.Field
- Env apijson.Field
- Extensions apijson.Field
- Initialization apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r configLspJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *ConfigLsp) UnmarshalJSON(data []byte) (err error) {
- *r = ConfigLsp{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [ConfigLspUnion] interface which you can cast to the specific
-// types for more type safety.
-//
-// Possible runtime types of the union are [ConfigLspDisabled], [ConfigLspObject].
-func (r ConfigLsp) AsUnion() ConfigLspUnion {
- return r.union
-}
-
-// Union satisfied by [ConfigLspDisabled] or [ConfigLspObject].
-type ConfigLspUnion interface {
- implementsConfigLsp()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*ConfigLspUnion)(nil)).Elem(),
- "",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ConfigLspDisabled{}),
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ConfigLspObject{}),
- },
- )
-}
-
-type ConfigLspDisabled struct {
- Disabled ConfigLspDisabledDisabled `json:"disabled,required"`
- JSON configLspDisabledJSON `json:"-"`
-}
-
-// configLspDisabledJSON contains the JSON metadata for the struct
-// [ConfigLspDisabled]
-type configLspDisabledJSON struct {
- Disabled apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigLspDisabled) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configLspDisabledJSON) RawJSON() string {
- return r.raw
-}
-
-func (r ConfigLspDisabled) implementsConfigLsp() {}
-
-type ConfigLspDisabledDisabled bool
-
-const (
- ConfigLspDisabledDisabledTrue ConfigLspDisabledDisabled = true
-)
-
-func (r ConfigLspDisabledDisabled) IsKnown() bool {
- switch r {
- case ConfigLspDisabledDisabledTrue:
- return true
- }
- return false
-}
-
-type ConfigLspObject struct {
- Command []string `json:"command,required"`
- Disabled bool `json:"disabled"`
- Env map[string]string `json:"env"`
- Extensions []string `json:"extensions"`
- Initialization map[string]interface{} `json:"initialization"`
- JSON configLspObjectJSON `json:"-"`
-}
-
-// configLspObjectJSON contains the JSON metadata for the struct [ConfigLspObject]
-type configLspObjectJSON struct {
- Command apijson.Field
- Disabled apijson.Field
- Env apijson.Field
- Extensions apijson.Field
- Initialization apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigLspObject) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configLspObjectJSON) RawJSON() string {
- return r.raw
-}
-
-func (r ConfigLspObject) implementsConfigLsp() {}
-
-type ConfigMcp struct {
- // Type of MCP server connection
- Type ConfigMcpType `json:"type,required"`
- // This field can have the runtime type of [[]string].
- Command interface{} `json:"command"`
- // Enable or disable the MCP server on startup
- Enabled bool `json:"enabled"`
- // This field can have the runtime type of [map[string]string].
- Environment interface{} `json:"environment"`
- // This field can have the runtime type of [map[string]string].
- Headers interface{} `json:"headers"`
- // URL of the remote MCP server
- URL string `json:"url"`
- JSON configMcpJSON `json:"-"`
- union ConfigMcpUnion
-}
-
-// configMcpJSON contains the JSON metadata for the struct [ConfigMcp]
-type configMcpJSON struct {
- Type apijson.Field
- Command apijson.Field
- Enabled apijson.Field
- Environment apijson.Field
- Headers apijson.Field
- URL apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r configMcpJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *ConfigMcp) UnmarshalJSON(data []byte) (err error) {
- *r = ConfigMcp{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [ConfigMcpUnion] interface which you can cast to the specific
-// types for more type safety.
-//
-// Possible runtime types of the union are [McpLocalConfig], [McpRemoteConfig].
-func (r ConfigMcp) AsUnion() ConfigMcpUnion {
- return r.union
-}
-
-// Union satisfied by [McpLocalConfig] or [McpRemoteConfig].
-type ConfigMcpUnion interface {
- implementsConfigMcp()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*ConfigMcpUnion)(nil)).Elem(),
- "type",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(McpLocalConfig{}),
- DiscriminatorValue: "local",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(McpRemoteConfig{}),
- DiscriminatorValue: "remote",
- },
- )
-}
-
-// Type of MCP server connection
-type ConfigMcpType string
-
-const (
- ConfigMcpTypeLocal ConfigMcpType = "local"
- ConfigMcpTypeRemote ConfigMcpType = "remote"
-)
-
-func (r ConfigMcpType) IsKnown() bool {
- switch r {
- case ConfigMcpTypeLocal, ConfigMcpTypeRemote:
- return true
- }
- return false
-}
-
-// Modes configuration, see https://opencode.ai/docs/modes
-type ConfigMode struct {
- Build ModeConfig `json:"build"`
- Plan ModeConfig `json:"plan"`
- ExtraFields map[string]ModeConfig `json:"-,extras"`
- JSON configModeJSON `json:"-"`
-}
-
-// configModeJSON contains the JSON metadata for the struct [ConfigMode]
-type configModeJSON struct {
- Build apijson.Field
- Plan apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigMode) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configModeJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigPermission struct {
- Bash ConfigPermissionBashUnion `json:"bash"`
- Edit ConfigPermissionEdit `json:"edit"`
- JSON configPermissionJSON `json:"-"`
-}
-
-// configPermissionJSON contains the JSON metadata for the struct
-// [ConfigPermission]
-type configPermissionJSON struct {
- Bash apijson.Field
- Edit apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigPermission) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configPermissionJSON) RawJSON() string {
- return r.raw
-}
-
-// Union satisfied by [ConfigPermissionBashString] or [ConfigPermissionBashMap].
-type ConfigPermissionBashUnion interface {
- implementsConfigPermissionBashUnion()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*ConfigPermissionBashUnion)(nil)).Elem(),
- "",
- apijson.UnionVariant{
- TypeFilter: gjson.String,
- Type: reflect.TypeOf(ConfigPermissionBashString("")),
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ConfigPermissionBashMap{}),
- },
- )
-}
-
-type ConfigPermissionBashString string
-
-const (
- ConfigPermissionBashStringAsk ConfigPermissionBashString = "ask"
- ConfigPermissionBashStringAllow ConfigPermissionBashString = "allow"
-)
-
-func (r ConfigPermissionBashString) IsKnown() bool {
- switch r {
- case ConfigPermissionBashStringAsk, ConfigPermissionBashStringAllow:
- return true
- }
- return false
-}
-
-func (r ConfigPermissionBashString) implementsConfigPermissionBashUnion() {}
-
-type ConfigPermissionBashMap map[string]ConfigPermissionBashMapItem
-
-func (r ConfigPermissionBashMap) implementsConfigPermissionBashUnion() {}
-
-type ConfigPermissionBashMapItem string
-
-const (
- ConfigPermissionBashMapAsk ConfigPermissionBashMapItem = "ask"
- ConfigPermissionBashMapAllow ConfigPermissionBashMapItem = "allow"
-)
-
-func (r ConfigPermissionBashMapItem) IsKnown() bool {
- switch r {
- case ConfigPermissionBashMapAsk, ConfigPermissionBashMapAllow:
- return true
- }
- return false
-}
-
-type ConfigPermissionEdit string
-
-const (
- ConfigPermissionEditAsk ConfigPermissionEdit = "ask"
- ConfigPermissionEditAllow ConfigPermissionEdit = "allow"
-)
-
-func (r ConfigPermissionEdit) IsKnown() bool {
- switch r {
- case ConfigPermissionEditAsk, ConfigPermissionEditAllow:
- return true
- }
- return false
-}
-
-type ConfigProvider struct {
- Models map[string]ConfigProviderModel `json:"models,required"`
- ID string `json:"id"`
- API string `json:"api"`
- Env []string `json:"env"`
- Name string `json:"name"`
- Npm string `json:"npm"`
- Options ConfigProviderOptions `json:"options"`
- JSON configProviderJSON `json:"-"`
-}
-
-// configProviderJSON contains the JSON metadata for the struct [ConfigProvider]
-type configProviderJSON struct {
- Models apijson.Field
- ID apijson.Field
- API apijson.Field
- Env apijson.Field
- Name apijson.Field
- Npm apijson.Field
- Options apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigProvider) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configProviderJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigProviderModel struct {
- ID string `json:"id"`
- Attachment bool `json:"attachment"`
- Cost ConfigProviderModelsCost `json:"cost"`
- Limit ConfigProviderModelsLimit `json:"limit"`
- Name string `json:"name"`
- Options map[string]interface{} `json:"options"`
- Reasoning bool `json:"reasoning"`
- ReleaseDate string `json:"release_date"`
- Temperature bool `json:"temperature"`
- ToolCall bool `json:"tool_call"`
- JSON configProviderModelJSON `json:"-"`
-}
-
-// configProviderModelJSON contains the JSON metadata for the struct
-// [ConfigProviderModel]
-type configProviderModelJSON struct {
- ID apijson.Field
- Attachment apijson.Field
- Cost apijson.Field
- Limit apijson.Field
- Name apijson.Field
- Options apijson.Field
- Reasoning apijson.Field
- ReleaseDate apijson.Field
- Temperature apijson.Field
- ToolCall apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigProviderModel) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configProviderModelJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigProviderModelsCost struct {
- Input float64 `json:"input,required"`
- Output float64 `json:"output,required"`
- CacheRead float64 `json:"cache_read"`
- CacheWrite float64 `json:"cache_write"`
- JSON configProviderModelsCostJSON `json:"-"`
-}
-
-// configProviderModelsCostJSON contains the JSON metadata for the struct
-// [ConfigProviderModelsCost]
-type configProviderModelsCostJSON struct {
- Input apijson.Field
- Output apijson.Field
- CacheRead apijson.Field
- CacheWrite apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigProviderModelsCost) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configProviderModelsCostJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigProviderModelsLimit struct {
- Context float64 `json:"context,required"`
- Output float64 `json:"output,required"`
- JSON configProviderModelsLimitJSON `json:"-"`
-}
-
-// configProviderModelsLimitJSON contains the JSON metadata for the struct
-// [ConfigProviderModelsLimit]
-type configProviderModelsLimitJSON struct {
- Context apijson.Field
- Output apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigProviderModelsLimit) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configProviderModelsLimitJSON) RawJSON() string {
- return r.raw
-}
-
-type ConfigProviderOptions struct {
- APIKey string `json:"apiKey"`
- BaseURL string `json:"baseURL"`
- ExtraFields map[string]interface{} `json:"-,extras"`
- JSON configProviderOptionsJSON `json:"-"`
-}
-
-// configProviderOptionsJSON contains the JSON metadata for the struct
-// [ConfigProviderOptions]
-type configProviderOptionsJSON struct {
- APIKey apijson.Field
- BaseURL apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ConfigProviderOptions) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r configProviderOptionsJSON) RawJSON() string {
- return r.raw
-}
-
-// Control sharing behavior:'manual' allows manual sharing via commands, 'auto'
-// enables automatic sharing, 'disabled' disables all sharing
-type ConfigShare string
-
-const (
- ConfigShareManual ConfigShare = "manual"
- ConfigShareAuto ConfigShare = "auto"
- ConfigShareDisabled ConfigShare = "disabled"
-)
-
-func (r ConfigShare) IsKnown() bool {
- switch r {
- case ConfigShareManual, ConfigShareAuto, ConfigShareDisabled:
- return true
- }
- return false
-}
-
-type KeybindsConfig struct {
- // Exit the application
- AppExit string `json:"app_exit,required"`
- // Show help dialog
- AppHelp string `json:"app_help,required"`
- // Open external editor
- EditorOpen string `json:"editor_open,required"`
- // Close file
- FileClose string `json:"file_close,required"`
- // Split/unified diff
- FileDiffToggle string `json:"file_diff_toggle,required"`
- // List files
- FileList string `json:"file_list,required"`
- // Search file
- FileSearch string `json:"file_search,required"`
- // Clear input field
- InputClear string `json:"input_clear,required"`
- // Insert newline in input
- InputNewline string `json:"input_newline,required"`
- // Paste from clipboard
- InputPaste string `json:"input_paste,required"`
- // Submit input
- InputSubmit string `json:"input_submit,required"`
- // Leader key for keybind combinations
- Leader string `json:"leader,required"`
- // Copy message
- MessagesCopy string `json:"messages_copy,required"`
- // Navigate to first message
- MessagesFirst string `json:"messages_first,required"`
- // Scroll messages down by half page
- MessagesHalfPageDown string `json:"messages_half_page_down,required"`
- // Scroll messages up by half page
- MessagesHalfPageUp string `json:"messages_half_page_up,required"`
- // Navigate to last message
- MessagesLast string `json:"messages_last,required"`
- // Toggle layout
- MessagesLayoutToggle string `json:"messages_layout_toggle,required"`
- // Navigate to next message
- MessagesNext string `json:"messages_next,required"`
- // Scroll messages down by one page
- MessagesPageDown string `json:"messages_page_down,required"`
- // Scroll messages up by one page
- MessagesPageUp string `json:"messages_page_up,required"`
- // Navigate to previous message
- MessagesPrevious string `json:"messages_previous,required"`
- // Redo message
- MessagesRedo string `json:"messages_redo,required"`
- // @deprecated use messages_undo. Revert message
- MessagesRevert string `json:"messages_revert,required"`
- // Undo message
- MessagesUndo string `json:"messages_undo,required"`
- // List available models
- ModelList string `json:"model_list,required"`
- // Create/update AGENTS.md
- ProjectInit string `json:"project_init,required"`
- // Compact the session
- SessionCompact string `json:"session_compact,required"`
- // Export session to editor
- SessionExport string `json:"session_export,required"`
- // Interrupt current session
- SessionInterrupt string `json:"session_interrupt,required"`
- // List all sessions
- SessionList string `json:"session_list,required"`
- // Create a new session
- SessionNew string `json:"session_new,required"`
- // Share current session
- SessionShare string `json:"session_share,required"`
- // Unshare current session
- SessionUnshare string `json:"session_unshare,required"`
- // Next mode
- SwitchMode string `json:"switch_mode,required"`
- // Previous Mode
- SwitchModeReverse string `json:"switch_mode_reverse,required"`
- // List available themes
- ThemeList string `json:"theme_list,required"`
- // Toggle tool details
- ToolDetails string `json:"tool_details,required"`
- JSON keybindsConfigJSON `json:"-"`
-}
-
-// keybindsConfigJSON contains the JSON metadata for the struct [KeybindsConfig]
-type keybindsConfigJSON struct {
- AppExit apijson.Field
- AppHelp apijson.Field
- EditorOpen apijson.Field
- FileClose apijson.Field
- FileDiffToggle apijson.Field
- FileList apijson.Field
- FileSearch apijson.Field
- InputClear apijson.Field
- InputNewline apijson.Field
- InputPaste apijson.Field
- InputSubmit apijson.Field
- Leader apijson.Field
- MessagesCopy apijson.Field
- MessagesFirst apijson.Field
- MessagesHalfPageDown apijson.Field
- MessagesHalfPageUp apijson.Field
- MessagesLast apijson.Field
- MessagesLayoutToggle apijson.Field
- MessagesNext apijson.Field
- MessagesPageDown apijson.Field
- MessagesPageUp apijson.Field
- MessagesPrevious apijson.Field
- MessagesRedo apijson.Field
- MessagesRevert apijson.Field
- MessagesUndo apijson.Field
- ModelList apijson.Field
- ProjectInit apijson.Field
- SessionCompact apijson.Field
- SessionExport apijson.Field
- SessionInterrupt apijson.Field
- SessionList apijson.Field
- SessionNew apijson.Field
- SessionShare apijson.Field
- SessionUnshare apijson.Field
- SwitchMode apijson.Field
- SwitchModeReverse apijson.Field
- ThemeList apijson.Field
- ToolDetails apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *KeybindsConfig) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r keybindsConfigJSON) RawJSON() string {
- return r.raw
-}
-
-type McpLocalConfig struct {
- // Command and arguments to run the MCP server
- Command []string `json:"command,required"`
- // Type of MCP server connection
- Type McpLocalConfigType `json:"type,required"`
- // Enable or disable the MCP server on startup
- Enabled bool `json:"enabled"`
- // Environment variables to set when running the MCP server
- Environment map[string]string `json:"environment"`
- JSON mcpLocalConfigJSON `json:"-"`
-}
-
-// mcpLocalConfigJSON contains the JSON metadata for the struct [McpLocalConfig]
-type mcpLocalConfigJSON struct {
- Command apijson.Field
- Type apijson.Field
- Enabled apijson.Field
- Environment apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *McpLocalConfig) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r mcpLocalConfigJSON) RawJSON() string {
- return r.raw
-}
-
-func (r McpLocalConfig) implementsConfigMcp() {}
-
-// Type of MCP server connection
-type McpLocalConfigType string
-
-const (
- McpLocalConfigTypeLocal McpLocalConfigType = "local"
-)
-
-func (r McpLocalConfigType) IsKnown() bool {
- switch r {
- case McpLocalConfigTypeLocal:
- return true
- }
- return false
-}
-
-type McpRemoteConfig struct {
- // Type of MCP server connection
- Type McpRemoteConfigType `json:"type,required"`
- // URL of the remote MCP server
- URL string `json:"url,required"`
- // Enable or disable the MCP server on startup
- Enabled bool `json:"enabled"`
- // Headers to send with the request
- Headers map[string]string `json:"headers"`
- JSON mcpRemoteConfigJSON `json:"-"`
-}
-
-// mcpRemoteConfigJSON contains the JSON metadata for the struct [McpRemoteConfig]
-type mcpRemoteConfigJSON struct {
- Type apijson.Field
- URL apijson.Field
- Enabled apijson.Field
- Headers apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *McpRemoteConfig) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r mcpRemoteConfigJSON) RawJSON() string {
- return r.raw
-}
-
-func (r McpRemoteConfig) implementsConfigMcp() {}
-
-// Type of MCP server connection
-type McpRemoteConfigType string
-
-const (
- McpRemoteConfigTypeRemote McpRemoteConfigType = "remote"
-)
-
-func (r McpRemoteConfigType) IsKnown() bool {
- switch r {
- case McpRemoteConfigTypeRemote:
- return true
- }
- return false
-}
-
-type ModeConfig struct {
- Disable bool `json:"disable"`
- Model string `json:"model"`
- Prompt string `json:"prompt"`
- Temperature float64 `json:"temperature"`
- Tools map[string]bool `json:"tools"`
- TopP float64 `json:"top_p"`
- JSON modeConfigJSON `json:"-"`
-}
-
-// modeConfigJSON contains the JSON metadata for the struct [ModeConfig]
-type modeConfigJSON struct {
- Disable apijson.Field
- Model apijson.Field
- Prompt apijson.Field
- Temperature apijson.Field
- Tools apijson.Field
- TopP apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ModeConfig) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r modeConfigJSON) RawJSON() string {
- return r.raw
-}
diff --git a/packages/sdk/go/config_test.go b/packages/sdk/go/config_test.go
deleted file mode 100644
index 86e058a9..00000000
--- a/packages/sdk/go/config_test.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "errors"
- "os"
- "testing"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal/testutil"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-func TestConfigGet(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Config.Get(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
diff --git a/packages/sdk/go/event.go b/packages/sdk/go/event.go
deleted file mode 100644
index 9823cdc5..00000000
--- a/packages/sdk/go/event.go
+++ /dev/null
@@ -1,1397 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "net/http"
- "reflect"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
- "github.com/sst/opencode-sdk-go/packages/ssestream"
- "github.com/sst/opencode-sdk-go/shared"
- "github.com/tidwall/gjson"
-)
-
-// EventService contains methods and other services that help with interacting with
-// the opencode API.
-//
-// Note, unlike clients, this service does not read variables from the environment
-// automatically. You should not instantiate this service directly, and instead use
-// the [NewEventService] method instead.
-type EventService struct {
- Options []option.RequestOption
-}
-
-// NewEventService generates a new service that applies the given options to each
-// request. These options are applied after the parent client's options (if there
-// is one), and before any request-specific options.
-func NewEventService(opts ...option.RequestOption) (r *EventService) {
- r = &EventService{}
- r.Options = opts
- return
-}
-
-// Get events
-func (r *EventService) ListStreaming(ctx context.Context, opts ...option.RequestOption) (stream *ssestream.Stream[EventListResponse]) {
- var (
- raw *http.Response
- err error
- )
- opts = append(r.Options[:], opts...)
- path := "event"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &raw, opts...)
- return ssestream.NewStream[EventListResponse](ssestream.NewDecoder(raw), err)
-}
-
-type EventListResponse struct {
- // This field can have the runtime type of
- // [EventListResponseEventInstallationUpdatedProperties],
- // [EventListResponseEventLspClientDiagnosticsProperties],
- // [EventListResponseEventMessageUpdatedProperties],
- // [EventListResponseEventMessageRemovedProperties],
- // [EventListResponseEventMessagePartUpdatedProperties],
- // [EventListResponseEventMessagePartRemovedProperties],
- // [EventListResponseEventStorageWriteProperties],
- // [EventListResponseEventFileEditedProperties], [interface{}], [Permission],
- // [EventListResponseEventPermissionRepliedProperties],
- // [EventListResponseEventSessionUpdatedProperties],
- // [EventListResponseEventSessionDeletedProperties],
- // [EventListResponseEventSessionIdleProperties],
- // [EventListResponseEventSessionErrorProperties],
- // [EventListResponseEventFileWatcherUpdatedProperties],
- // [EventListResponseEventIdeInstalledProperties].
- Properties interface{} `json:"properties,required"`
- Type EventListResponseType `json:"type,required"`
- JSON eventListResponseJSON `json:"-"`
- union EventListResponseUnion
-}
-
-// eventListResponseJSON contains the JSON metadata for the struct
-// [EventListResponse]
-type eventListResponseJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r eventListResponseJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *EventListResponse) UnmarshalJSON(data []byte) (err error) {
- *r = EventListResponse{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [EventListResponseUnion] interface which you can cast to the
-// specific types for more type safety.
-//
-// Possible runtime types of the union are
-// [EventListResponseEventInstallationUpdated],
-// [EventListResponseEventLspClientDiagnostics],
-// [EventListResponseEventMessageUpdated], [EventListResponseEventMessageRemoved],
-// [EventListResponseEventMessagePartUpdated],
-// [EventListResponseEventMessagePartRemoved],
-// [EventListResponseEventStorageWrite], [EventListResponseEventFileEdited],
-// [EventListResponseEventServerConnected],
-// [EventListResponseEventPermissionUpdated],
-// [EventListResponseEventPermissionReplied],
-// [EventListResponseEventSessionUpdated], [EventListResponseEventSessionDeleted],
-// [EventListResponseEventSessionIdle], [EventListResponseEventSessionError],
-// [EventListResponseEventFileWatcherUpdated],
-// [EventListResponseEventIdeInstalled].
-func (r EventListResponse) AsUnion() EventListResponseUnion {
- return r.union
-}
-
-// Union satisfied by [EventListResponseEventInstallationUpdated],
-// [EventListResponseEventLspClientDiagnostics],
-// [EventListResponseEventMessageUpdated], [EventListResponseEventMessageRemoved],
-// [EventListResponseEventMessagePartUpdated],
-// [EventListResponseEventMessagePartRemoved],
-// [EventListResponseEventStorageWrite], [EventListResponseEventFileEdited],
-// [EventListResponseEventServerConnected],
-// [EventListResponseEventPermissionUpdated],
-// [EventListResponseEventPermissionReplied],
-// [EventListResponseEventSessionUpdated], [EventListResponseEventSessionDeleted],
-// [EventListResponseEventSessionIdle], [EventListResponseEventSessionError],
-// [EventListResponseEventFileWatcherUpdated] or
-// [EventListResponseEventIdeInstalled].
-type EventListResponseUnion interface {
- implementsEventListResponse()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*EventListResponseUnion)(nil)).Elem(),
- "type",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventInstallationUpdated{}),
- DiscriminatorValue: "installation.updated",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventLspClientDiagnostics{}),
- DiscriminatorValue: "lsp.client.diagnostics",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventMessageUpdated{}),
- DiscriminatorValue: "message.updated",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventMessageRemoved{}),
- DiscriminatorValue: "message.removed",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventMessagePartUpdated{}),
- DiscriminatorValue: "message.part.updated",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventMessagePartRemoved{}),
- DiscriminatorValue: "message.part.removed",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventStorageWrite{}),
- DiscriminatorValue: "storage.write",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventFileEdited{}),
- DiscriminatorValue: "file.edited",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventServerConnected{}),
- DiscriminatorValue: "server.connected",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventPermissionUpdated{}),
- DiscriminatorValue: "permission.updated",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventPermissionReplied{}),
- DiscriminatorValue: "permission.replied",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventSessionUpdated{}),
- DiscriminatorValue: "session.updated",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventSessionDeleted{}),
- DiscriminatorValue: "session.deleted",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventSessionIdle{}),
- DiscriminatorValue: "session.idle",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventSessionError{}),
- DiscriminatorValue: "session.error",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventFileWatcherUpdated{}),
- DiscriminatorValue: "file.watcher.updated",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventIdeInstalled{}),
- DiscriminatorValue: "ide.installed",
- },
- )
-}
-
-type EventListResponseEventInstallationUpdated struct {
- Properties EventListResponseEventInstallationUpdatedProperties `json:"properties,required"`
- Type EventListResponseEventInstallationUpdatedType `json:"type,required"`
- JSON eventListResponseEventInstallationUpdatedJSON `json:"-"`
-}
-
-// eventListResponseEventInstallationUpdatedJSON contains the JSON metadata for the
-// struct [EventListResponseEventInstallationUpdated]
-type eventListResponseEventInstallationUpdatedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventInstallationUpdated) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventInstallationUpdatedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventInstallationUpdated) implementsEventListResponse() {}
-
-type EventListResponseEventInstallationUpdatedProperties struct {
- Version string `json:"version,required"`
- JSON eventListResponseEventInstallationUpdatedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventInstallationUpdatedPropertiesJSON contains the JSON
-// metadata for the struct [EventListResponseEventInstallationUpdatedProperties]
-type eventListResponseEventInstallationUpdatedPropertiesJSON struct {
- Version apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventInstallationUpdatedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventInstallationUpdatedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventInstallationUpdatedType string
-
-const (
- EventListResponseEventInstallationUpdatedTypeInstallationUpdated EventListResponseEventInstallationUpdatedType = "installation.updated"
-)
-
-func (r EventListResponseEventInstallationUpdatedType) IsKnown() bool {
- switch r {
- case EventListResponseEventInstallationUpdatedTypeInstallationUpdated:
- return true
- }
- return false
-}
-
-type EventListResponseEventLspClientDiagnostics struct {
- Properties EventListResponseEventLspClientDiagnosticsProperties `json:"properties,required"`
- Type EventListResponseEventLspClientDiagnosticsType `json:"type,required"`
- JSON eventListResponseEventLspClientDiagnosticsJSON `json:"-"`
-}
-
-// eventListResponseEventLspClientDiagnosticsJSON contains the JSON metadata for
-// the struct [EventListResponseEventLspClientDiagnostics]
-type eventListResponseEventLspClientDiagnosticsJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventLspClientDiagnostics) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventLspClientDiagnosticsJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventLspClientDiagnostics) implementsEventListResponse() {}
-
-type EventListResponseEventLspClientDiagnosticsProperties struct {
- Path string `json:"path,required"`
- ServerID string `json:"serverID,required"`
- JSON eventListResponseEventLspClientDiagnosticsPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventLspClientDiagnosticsPropertiesJSON contains the JSON
-// metadata for the struct [EventListResponseEventLspClientDiagnosticsProperties]
-type eventListResponseEventLspClientDiagnosticsPropertiesJSON struct {
- Path apijson.Field
- ServerID apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventLspClientDiagnosticsProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventLspClientDiagnosticsPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventLspClientDiagnosticsType string
-
-const (
- EventListResponseEventLspClientDiagnosticsTypeLspClientDiagnostics EventListResponseEventLspClientDiagnosticsType = "lsp.client.diagnostics"
-)
-
-func (r EventListResponseEventLspClientDiagnosticsType) IsKnown() bool {
- switch r {
- case EventListResponseEventLspClientDiagnosticsTypeLspClientDiagnostics:
- return true
- }
- return false
-}
-
-type EventListResponseEventMessageUpdated struct {
- Properties EventListResponseEventMessageUpdatedProperties `json:"properties,required"`
- Type EventListResponseEventMessageUpdatedType `json:"type,required"`
- JSON eventListResponseEventMessageUpdatedJSON `json:"-"`
-}
-
-// eventListResponseEventMessageUpdatedJSON contains the JSON metadata for the
-// struct [EventListResponseEventMessageUpdated]
-type eventListResponseEventMessageUpdatedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventMessageUpdated) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventMessageUpdatedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventMessageUpdated) implementsEventListResponse() {}
-
-type EventListResponseEventMessageUpdatedProperties struct {
- Info Message `json:"info,required"`
- JSON eventListResponseEventMessageUpdatedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventMessageUpdatedPropertiesJSON contains the JSON metadata
-// for the struct [EventListResponseEventMessageUpdatedProperties]
-type eventListResponseEventMessageUpdatedPropertiesJSON struct {
- Info apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventMessageUpdatedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventMessageUpdatedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventMessageUpdatedType string
-
-const (
- EventListResponseEventMessageUpdatedTypeMessageUpdated EventListResponseEventMessageUpdatedType = "message.updated"
-)
-
-func (r EventListResponseEventMessageUpdatedType) IsKnown() bool {
- switch r {
- case EventListResponseEventMessageUpdatedTypeMessageUpdated:
- return true
- }
- return false
-}
-
-type EventListResponseEventMessageRemoved struct {
- Properties EventListResponseEventMessageRemovedProperties `json:"properties,required"`
- Type EventListResponseEventMessageRemovedType `json:"type,required"`
- JSON eventListResponseEventMessageRemovedJSON `json:"-"`
-}
-
-// eventListResponseEventMessageRemovedJSON contains the JSON metadata for the
-// struct [EventListResponseEventMessageRemoved]
-type eventListResponseEventMessageRemovedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventMessageRemoved) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventMessageRemovedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventMessageRemoved) implementsEventListResponse() {}
-
-type EventListResponseEventMessageRemovedProperties struct {
- MessageID string `json:"messageID,required"`
- SessionID string `json:"sessionID,required"`
- JSON eventListResponseEventMessageRemovedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventMessageRemovedPropertiesJSON contains the JSON metadata
-// for the struct [EventListResponseEventMessageRemovedProperties]
-type eventListResponseEventMessageRemovedPropertiesJSON struct {
- MessageID apijson.Field
- SessionID apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventMessageRemovedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventMessageRemovedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventMessageRemovedType string
-
-const (
- EventListResponseEventMessageRemovedTypeMessageRemoved EventListResponseEventMessageRemovedType = "message.removed"
-)
-
-func (r EventListResponseEventMessageRemovedType) IsKnown() bool {
- switch r {
- case EventListResponseEventMessageRemovedTypeMessageRemoved:
- return true
- }
- return false
-}
-
-type EventListResponseEventMessagePartUpdated struct {
- Properties EventListResponseEventMessagePartUpdatedProperties `json:"properties,required"`
- Type EventListResponseEventMessagePartUpdatedType `json:"type,required"`
- JSON eventListResponseEventMessagePartUpdatedJSON `json:"-"`
-}
-
-// eventListResponseEventMessagePartUpdatedJSON contains the JSON metadata for the
-// struct [EventListResponseEventMessagePartUpdated]
-type eventListResponseEventMessagePartUpdatedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventMessagePartUpdated) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventMessagePartUpdatedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventMessagePartUpdated) implementsEventListResponse() {}
-
-type EventListResponseEventMessagePartUpdatedProperties struct {
- Part Part `json:"part,required"`
- JSON eventListResponseEventMessagePartUpdatedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventMessagePartUpdatedPropertiesJSON contains the JSON
-// metadata for the struct [EventListResponseEventMessagePartUpdatedProperties]
-type eventListResponseEventMessagePartUpdatedPropertiesJSON struct {
- Part apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventMessagePartUpdatedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventMessagePartUpdatedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventMessagePartUpdatedType string
-
-const (
- EventListResponseEventMessagePartUpdatedTypeMessagePartUpdated EventListResponseEventMessagePartUpdatedType = "message.part.updated"
-)
-
-func (r EventListResponseEventMessagePartUpdatedType) IsKnown() bool {
- switch r {
- case EventListResponseEventMessagePartUpdatedTypeMessagePartUpdated:
- return true
- }
- return false
-}
-
-type EventListResponseEventMessagePartRemoved struct {
- Properties EventListResponseEventMessagePartRemovedProperties `json:"properties,required"`
- Type EventListResponseEventMessagePartRemovedType `json:"type,required"`
- JSON eventListResponseEventMessagePartRemovedJSON `json:"-"`
-}
-
-// eventListResponseEventMessagePartRemovedJSON contains the JSON metadata for the
-// struct [EventListResponseEventMessagePartRemoved]
-type eventListResponseEventMessagePartRemovedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventMessagePartRemoved) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventMessagePartRemovedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventMessagePartRemoved) implementsEventListResponse() {}
-
-type EventListResponseEventMessagePartRemovedProperties struct {
- MessageID string `json:"messageID,required"`
- PartID string `json:"partID,required"`
- SessionID string `json:"sessionID,required"`
- JSON eventListResponseEventMessagePartRemovedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventMessagePartRemovedPropertiesJSON contains the JSON
-// metadata for the struct [EventListResponseEventMessagePartRemovedProperties]
-type eventListResponseEventMessagePartRemovedPropertiesJSON struct {
- MessageID apijson.Field
- PartID apijson.Field
- SessionID apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventMessagePartRemovedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventMessagePartRemovedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventMessagePartRemovedType string
-
-const (
- EventListResponseEventMessagePartRemovedTypeMessagePartRemoved EventListResponseEventMessagePartRemovedType = "message.part.removed"
-)
-
-func (r EventListResponseEventMessagePartRemovedType) IsKnown() bool {
- switch r {
- case EventListResponseEventMessagePartRemovedTypeMessagePartRemoved:
- return true
- }
- return false
-}
-
-type EventListResponseEventStorageWrite struct {
- Properties EventListResponseEventStorageWriteProperties `json:"properties,required"`
- Type EventListResponseEventStorageWriteType `json:"type,required"`
- JSON eventListResponseEventStorageWriteJSON `json:"-"`
-}
-
-// eventListResponseEventStorageWriteJSON contains the JSON metadata for the struct
-// [EventListResponseEventStorageWrite]
-type eventListResponseEventStorageWriteJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventStorageWrite) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventStorageWriteJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventStorageWrite) implementsEventListResponse() {}
-
-type EventListResponseEventStorageWriteProperties struct {
- Key string `json:"key,required"`
- Content interface{} `json:"content"`
- JSON eventListResponseEventStorageWritePropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventStorageWritePropertiesJSON contains the JSON metadata for
-// the struct [EventListResponseEventStorageWriteProperties]
-type eventListResponseEventStorageWritePropertiesJSON struct {
- Key apijson.Field
- Content apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventStorageWriteProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventStorageWritePropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventStorageWriteType string
-
-const (
- EventListResponseEventStorageWriteTypeStorageWrite EventListResponseEventStorageWriteType = "storage.write"
-)
-
-func (r EventListResponseEventStorageWriteType) IsKnown() bool {
- switch r {
- case EventListResponseEventStorageWriteTypeStorageWrite:
- return true
- }
- return false
-}
-
-type EventListResponseEventFileEdited struct {
- Properties EventListResponseEventFileEditedProperties `json:"properties,required"`
- Type EventListResponseEventFileEditedType `json:"type,required"`
- JSON eventListResponseEventFileEditedJSON `json:"-"`
-}
-
-// eventListResponseEventFileEditedJSON contains the JSON metadata for the struct
-// [EventListResponseEventFileEdited]
-type eventListResponseEventFileEditedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventFileEdited) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventFileEditedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventFileEdited) implementsEventListResponse() {}
-
-type EventListResponseEventFileEditedProperties struct {
- File string `json:"file,required"`
- JSON eventListResponseEventFileEditedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventFileEditedPropertiesJSON contains the JSON metadata for
-// the struct [EventListResponseEventFileEditedProperties]
-type eventListResponseEventFileEditedPropertiesJSON struct {
- File apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventFileEditedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventFileEditedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventFileEditedType string
-
-const (
- EventListResponseEventFileEditedTypeFileEdited EventListResponseEventFileEditedType = "file.edited"
-)
-
-func (r EventListResponseEventFileEditedType) IsKnown() bool {
- switch r {
- case EventListResponseEventFileEditedTypeFileEdited:
- return true
- }
- return false
-}
-
-type EventListResponseEventServerConnected struct {
- Properties interface{} `json:"properties,required"`
- Type EventListResponseEventServerConnectedType `json:"type,required"`
- JSON eventListResponseEventServerConnectedJSON `json:"-"`
-}
-
-// eventListResponseEventServerConnectedJSON contains the JSON metadata for the
-// struct [EventListResponseEventServerConnected]
-type eventListResponseEventServerConnectedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventServerConnected) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventServerConnectedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventServerConnected) implementsEventListResponse() {}
-
-type EventListResponseEventServerConnectedType string
-
-const (
- EventListResponseEventServerConnectedTypeServerConnected EventListResponseEventServerConnectedType = "server.connected"
-)
-
-func (r EventListResponseEventServerConnectedType) IsKnown() bool {
- switch r {
- case EventListResponseEventServerConnectedTypeServerConnected:
- return true
- }
- return false
-}
-
-type EventListResponseEventPermissionUpdated struct {
- Properties Permission `json:"properties,required"`
- Type EventListResponseEventPermissionUpdatedType `json:"type,required"`
- JSON eventListResponseEventPermissionUpdatedJSON `json:"-"`
-}
-
-// eventListResponseEventPermissionUpdatedJSON contains the JSON metadata for the
-// struct [EventListResponseEventPermissionUpdated]
-type eventListResponseEventPermissionUpdatedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventPermissionUpdated) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventPermissionUpdatedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventPermissionUpdated) implementsEventListResponse() {}
-
-type EventListResponseEventPermissionUpdatedType string
-
-const (
- EventListResponseEventPermissionUpdatedTypePermissionUpdated EventListResponseEventPermissionUpdatedType = "permission.updated"
-)
-
-func (r EventListResponseEventPermissionUpdatedType) IsKnown() bool {
- switch r {
- case EventListResponseEventPermissionUpdatedTypePermissionUpdated:
- return true
- }
- return false
-}
-
-type EventListResponseEventPermissionReplied struct {
- Properties EventListResponseEventPermissionRepliedProperties `json:"properties,required"`
- Type EventListResponseEventPermissionRepliedType `json:"type,required"`
- JSON eventListResponseEventPermissionRepliedJSON `json:"-"`
-}
-
-// eventListResponseEventPermissionRepliedJSON contains the JSON metadata for the
-// struct [EventListResponseEventPermissionReplied]
-type eventListResponseEventPermissionRepliedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventPermissionReplied) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventPermissionRepliedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventPermissionReplied) implementsEventListResponse() {}
-
-type EventListResponseEventPermissionRepliedProperties struct {
- PermissionID string `json:"permissionID,required"`
- Response string `json:"response,required"`
- SessionID string `json:"sessionID,required"`
- JSON eventListResponseEventPermissionRepliedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventPermissionRepliedPropertiesJSON contains the JSON metadata
-// for the struct [EventListResponseEventPermissionRepliedProperties]
-type eventListResponseEventPermissionRepliedPropertiesJSON struct {
- PermissionID apijson.Field
- Response apijson.Field
- SessionID apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventPermissionRepliedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventPermissionRepliedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventPermissionRepliedType string
-
-const (
- EventListResponseEventPermissionRepliedTypePermissionReplied EventListResponseEventPermissionRepliedType = "permission.replied"
-)
-
-func (r EventListResponseEventPermissionRepliedType) IsKnown() bool {
- switch r {
- case EventListResponseEventPermissionRepliedTypePermissionReplied:
- return true
- }
- return false
-}
-
-type EventListResponseEventSessionUpdated struct {
- Properties EventListResponseEventSessionUpdatedProperties `json:"properties,required"`
- Type EventListResponseEventSessionUpdatedType `json:"type,required"`
- JSON eventListResponseEventSessionUpdatedJSON `json:"-"`
-}
-
-// eventListResponseEventSessionUpdatedJSON contains the JSON metadata for the
-// struct [EventListResponseEventSessionUpdated]
-type eventListResponseEventSessionUpdatedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionUpdated) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionUpdatedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventSessionUpdated) implementsEventListResponse() {}
-
-type EventListResponseEventSessionUpdatedProperties struct {
- Info Session `json:"info,required"`
- JSON eventListResponseEventSessionUpdatedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventSessionUpdatedPropertiesJSON contains the JSON metadata
-// for the struct [EventListResponseEventSessionUpdatedProperties]
-type eventListResponseEventSessionUpdatedPropertiesJSON struct {
- Info apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionUpdatedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionUpdatedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventSessionUpdatedType string
-
-const (
- EventListResponseEventSessionUpdatedTypeSessionUpdated EventListResponseEventSessionUpdatedType = "session.updated"
-)
-
-func (r EventListResponseEventSessionUpdatedType) IsKnown() bool {
- switch r {
- case EventListResponseEventSessionUpdatedTypeSessionUpdated:
- return true
- }
- return false
-}
-
-type EventListResponseEventSessionDeleted struct {
- Properties EventListResponseEventSessionDeletedProperties `json:"properties,required"`
- Type EventListResponseEventSessionDeletedType `json:"type,required"`
- JSON eventListResponseEventSessionDeletedJSON `json:"-"`
-}
-
-// eventListResponseEventSessionDeletedJSON contains the JSON metadata for the
-// struct [EventListResponseEventSessionDeleted]
-type eventListResponseEventSessionDeletedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionDeleted) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionDeletedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventSessionDeleted) implementsEventListResponse() {}
-
-type EventListResponseEventSessionDeletedProperties struct {
- Info Session `json:"info,required"`
- JSON eventListResponseEventSessionDeletedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventSessionDeletedPropertiesJSON contains the JSON metadata
-// for the struct [EventListResponseEventSessionDeletedProperties]
-type eventListResponseEventSessionDeletedPropertiesJSON struct {
- Info apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionDeletedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionDeletedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventSessionDeletedType string
-
-const (
- EventListResponseEventSessionDeletedTypeSessionDeleted EventListResponseEventSessionDeletedType = "session.deleted"
-)
-
-func (r EventListResponseEventSessionDeletedType) IsKnown() bool {
- switch r {
- case EventListResponseEventSessionDeletedTypeSessionDeleted:
- return true
- }
- return false
-}
-
-type EventListResponseEventSessionIdle struct {
- Properties EventListResponseEventSessionIdleProperties `json:"properties,required"`
- Type EventListResponseEventSessionIdleType `json:"type,required"`
- JSON eventListResponseEventSessionIdleJSON `json:"-"`
-}
-
-// eventListResponseEventSessionIdleJSON contains the JSON metadata for the struct
-// [EventListResponseEventSessionIdle]
-type eventListResponseEventSessionIdleJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionIdle) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionIdleJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventSessionIdle) implementsEventListResponse() {}
-
-type EventListResponseEventSessionIdleProperties struct {
- SessionID string `json:"sessionID,required"`
- JSON eventListResponseEventSessionIdlePropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventSessionIdlePropertiesJSON contains the JSON metadata for
-// the struct [EventListResponseEventSessionIdleProperties]
-type eventListResponseEventSessionIdlePropertiesJSON struct {
- SessionID apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionIdleProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionIdlePropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventSessionIdleType string
-
-const (
- EventListResponseEventSessionIdleTypeSessionIdle EventListResponseEventSessionIdleType = "session.idle"
-)
-
-func (r EventListResponseEventSessionIdleType) IsKnown() bool {
- switch r {
- case EventListResponseEventSessionIdleTypeSessionIdle:
- return true
- }
- return false
-}
-
-type EventListResponseEventSessionError struct {
- Properties EventListResponseEventSessionErrorProperties `json:"properties,required"`
- Type EventListResponseEventSessionErrorType `json:"type,required"`
- JSON eventListResponseEventSessionErrorJSON `json:"-"`
-}
-
-// eventListResponseEventSessionErrorJSON contains the JSON metadata for the struct
-// [EventListResponseEventSessionError]
-type eventListResponseEventSessionErrorJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionError) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventSessionError) implementsEventListResponse() {}
-
-type EventListResponseEventSessionErrorProperties struct {
- Error EventListResponseEventSessionErrorPropertiesError `json:"error"`
- SessionID string `json:"sessionID"`
- JSON eventListResponseEventSessionErrorPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventSessionErrorPropertiesJSON contains the JSON metadata for
-// the struct [EventListResponseEventSessionErrorProperties]
-type eventListResponseEventSessionErrorPropertiesJSON struct {
- Error apijson.Field
- SessionID apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionErrorProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionErrorPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventSessionErrorPropertiesError struct {
- // This field can have the runtime type of [shared.ProviderAuthErrorData],
- // [shared.UnknownErrorData], [interface{}].
- Data interface{} `json:"data,required"`
- Name EventListResponseEventSessionErrorPropertiesErrorName `json:"name,required"`
- JSON eventListResponseEventSessionErrorPropertiesErrorJSON `json:"-"`
- union EventListResponseEventSessionErrorPropertiesErrorUnion
-}
-
-// eventListResponseEventSessionErrorPropertiesErrorJSON contains the JSON metadata
-// for the struct [EventListResponseEventSessionErrorPropertiesError]
-type eventListResponseEventSessionErrorPropertiesErrorJSON struct {
- Data apijson.Field
- Name apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r eventListResponseEventSessionErrorPropertiesErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *EventListResponseEventSessionErrorPropertiesError) UnmarshalJSON(data []byte) (err error) {
- *r = EventListResponseEventSessionErrorPropertiesError{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [EventListResponseEventSessionErrorPropertiesErrorUnion]
-// interface which you can cast to the specific types for more type safety.
-//
-// Possible runtime types of the union are [shared.ProviderAuthError],
-// [shared.UnknownError],
-// [EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthError],
-// [shared.MessageAbortedError].
-func (r EventListResponseEventSessionErrorPropertiesError) AsUnion() EventListResponseEventSessionErrorPropertiesErrorUnion {
- return r.union
-}
-
-// Union satisfied by [shared.ProviderAuthError], [shared.UnknownError],
-// [EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthError] or
-// [shared.MessageAbortedError].
-type EventListResponseEventSessionErrorPropertiesErrorUnion interface {
- ImplementsEventListResponseEventSessionErrorPropertiesError()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*EventListResponseEventSessionErrorPropertiesErrorUnion)(nil)).Elem(),
- "name",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(shared.ProviderAuthError{}),
- DiscriminatorValue: "ProviderAuthError",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(shared.UnknownError{}),
- DiscriminatorValue: "UnknownError",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthError{}),
- DiscriminatorValue: "MessageOutputLengthError",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(shared.MessageAbortedError{}),
- DiscriminatorValue: "MessageAbortedError",
- },
- )
-}
-
-type EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthError struct {
- Data interface{} `json:"data,required"`
- Name EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorName `json:"name,required"`
- JSON eventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorJSON `json:"-"`
-}
-
-// eventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorJSON
-// contains the JSON metadata for the struct
-// [EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthError]
-type eventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorJSON struct {
- Data apijson.Field
- Name apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthError) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthError) ImplementsEventListResponseEventSessionErrorPropertiesError() {
-}
-
-type EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorName string
-
-const (
- EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorNameMessageOutputLengthError EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorName = "MessageOutputLengthError"
-)
-
-func (r EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorName) IsKnown() bool {
- switch r {
- case EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthErrorNameMessageOutputLengthError:
- return true
- }
- return false
-}
-
-type EventListResponseEventSessionErrorPropertiesErrorName string
-
-const (
- EventListResponseEventSessionErrorPropertiesErrorNameProviderAuthError EventListResponseEventSessionErrorPropertiesErrorName = "ProviderAuthError"
- EventListResponseEventSessionErrorPropertiesErrorNameUnknownError EventListResponseEventSessionErrorPropertiesErrorName = "UnknownError"
- EventListResponseEventSessionErrorPropertiesErrorNameMessageOutputLengthError EventListResponseEventSessionErrorPropertiesErrorName = "MessageOutputLengthError"
- EventListResponseEventSessionErrorPropertiesErrorNameMessageAbortedError EventListResponseEventSessionErrorPropertiesErrorName = "MessageAbortedError"
-)
-
-func (r EventListResponseEventSessionErrorPropertiesErrorName) IsKnown() bool {
- switch r {
- case EventListResponseEventSessionErrorPropertiesErrorNameProviderAuthError, EventListResponseEventSessionErrorPropertiesErrorNameUnknownError, EventListResponseEventSessionErrorPropertiesErrorNameMessageOutputLengthError, EventListResponseEventSessionErrorPropertiesErrorNameMessageAbortedError:
- return true
- }
- return false
-}
-
-type EventListResponseEventSessionErrorType string
-
-const (
- EventListResponseEventSessionErrorTypeSessionError EventListResponseEventSessionErrorType = "session.error"
-)
-
-func (r EventListResponseEventSessionErrorType) IsKnown() bool {
- switch r {
- case EventListResponseEventSessionErrorTypeSessionError:
- return true
- }
- return false
-}
-
-type EventListResponseEventFileWatcherUpdated struct {
- Properties EventListResponseEventFileWatcherUpdatedProperties `json:"properties,required"`
- Type EventListResponseEventFileWatcherUpdatedType `json:"type,required"`
- JSON eventListResponseEventFileWatcherUpdatedJSON `json:"-"`
-}
-
-// eventListResponseEventFileWatcherUpdatedJSON contains the JSON metadata for the
-// struct [EventListResponseEventFileWatcherUpdated]
-type eventListResponseEventFileWatcherUpdatedJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventFileWatcherUpdated) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventFileWatcherUpdatedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventFileWatcherUpdated) implementsEventListResponse() {}
-
-type EventListResponseEventFileWatcherUpdatedProperties struct {
- Event EventListResponseEventFileWatcherUpdatedPropertiesEvent `json:"event,required"`
- File string `json:"file,required"`
- JSON eventListResponseEventFileWatcherUpdatedPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventFileWatcherUpdatedPropertiesJSON contains the JSON
-// metadata for the struct [EventListResponseEventFileWatcherUpdatedProperties]
-type eventListResponseEventFileWatcherUpdatedPropertiesJSON struct {
- Event apijson.Field
- File apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventFileWatcherUpdatedProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventFileWatcherUpdatedPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventFileWatcherUpdatedPropertiesEvent string
-
-const (
- EventListResponseEventFileWatcherUpdatedPropertiesEventRename EventListResponseEventFileWatcherUpdatedPropertiesEvent = "rename"
- EventListResponseEventFileWatcherUpdatedPropertiesEventChange EventListResponseEventFileWatcherUpdatedPropertiesEvent = "change"
-)
-
-func (r EventListResponseEventFileWatcherUpdatedPropertiesEvent) IsKnown() bool {
- switch r {
- case EventListResponseEventFileWatcherUpdatedPropertiesEventRename, EventListResponseEventFileWatcherUpdatedPropertiesEventChange:
- return true
- }
- return false
-}
-
-type EventListResponseEventFileWatcherUpdatedType string
-
-const (
- EventListResponseEventFileWatcherUpdatedTypeFileWatcherUpdated EventListResponseEventFileWatcherUpdatedType = "file.watcher.updated"
-)
-
-func (r EventListResponseEventFileWatcherUpdatedType) IsKnown() bool {
- switch r {
- case EventListResponseEventFileWatcherUpdatedTypeFileWatcherUpdated:
- return true
- }
- return false
-}
-
-type EventListResponseEventIdeInstalled struct {
- Properties EventListResponseEventIdeInstalledProperties `json:"properties,required"`
- Type EventListResponseEventIdeInstalledType `json:"type,required"`
- JSON eventListResponseEventIdeInstalledJSON `json:"-"`
-}
-
-// eventListResponseEventIdeInstalledJSON contains the JSON metadata for the struct
-// [EventListResponseEventIdeInstalled]
-type eventListResponseEventIdeInstalledJSON struct {
- Properties apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventIdeInstalled) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventIdeInstalledJSON) RawJSON() string {
- return r.raw
-}
-
-func (r EventListResponseEventIdeInstalled) implementsEventListResponse() {}
-
-type EventListResponseEventIdeInstalledProperties struct {
- Ide string `json:"ide,required"`
- JSON eventListResponseEventIdeInstalledPropertiesJSON `json:"-"`
-}
-
-// eventListResponseEventIdeInstalledPropertiesJSON contains the JSON metadata for
-// the struct [EventListResponseEventIdeInstalledProperties]
-type eventListResponseEventIdeInstalledPropertiesJSON struct {
- Ide apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *EventListResponseEventIdeInstalledProperties) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r eventListResponseEventIdeInstalledPropertiesJSON) RawJSON() string {
- return r.raw
-}
-
-type EventListResponseEventIdeInstalledType string
-
-const (
- EventListResponseEventIdeInstalledTypeIdeInstalled EventListResponseEventIdeInstalledType = "ide.installed"
-)
-
-func (r EventListResponseEventIdeInstalledType) IsKnown() bool {
- switch r {
- case EventListResponseEventIdeInstalledTypeIdeInstalled:
- return true
- }
- return false
-}
-
-type EventListResponseType string
-
-const (
- EventListResponseTypeInstallationUpdated EventListResponseType = "installation.updated"
- EventListResponseTypeLspClientDiagnostics EventListResponseType = "lsp.client.diagnostics"
- EventListResponseTypeMessageUpdated EventListResponseType = "message.updated"
- EventListResponseTypeMessageRemoved EventListResponseType = "message.removed"
- EventListResponseTypeMessagePartUpdated EventListResponseType = "message.part.updated"
- EventListResponseTypeMessagePartRemoved EventListResponseType = "message.part.removed"
- EventListResponseTypeStorageWrite EventListResponseType = "storage.write"
- EventListResponseTypeFileEdited EventListResponseType = "file.edited"
- EventListResponseTypeServerConnected EventListResponseType = "server.connected"
- EventListResponseTypePermissionUpdated EventListResponseType = "permission.updated"
- EventListResponseTypePermissionReplied EventListResponseType = "permission.replied"
- EventListResponseTypeSessionUpdated EventListResponseType = "session.updated"
- EventListResponseTypeSessionDeleted EventListResponseType = "session.deleted"
- EventListResponseTypeSessionIdle EventListResponseType = "session.idle"
- EventListResponseTypeSessionError EventListResponseType = "session.error"
- EventListResponseTypeFileWatcherUpdated EventListResponseType = "file.watcher.updated"
- EventListResponseTypeIdeInstalled EventListResponseType = "ide.installed"
-)
-
-func (r EventListResponseType) IsKnown() bool {
- switch r {
- case EventListResponseTypeInstallationUpdated, EventListResponseTypeLspClientDiagnostics, EventListResponseTypeMessageUpdated, EventListResponseTypeMessageRemoved, EventListResponseTypeMessagePartUpdated, EventListResponseTypeMessagePartRemoved, EventListResponseTypeStorageWrite, EventListResponseTypeFileEdited, EventListResponseTypeServerConnected, EventListResponseTypePermissionUpdated, EventListResponseTypePermissionReplied, EventListResponseTypeSessionUpdated, EventListResponseTypeSessionDeleted, EventListResponseTypeSessionIdle, EventListResponseTypeSessionError, EventListResponseTypeFileWatcherUpdated, EventListResponseTypeIdeInstalled:
- return true
- }
- return false
-}
diff --git a/packages/sdk/go/examples/.keep b/packages/sdk/go/examples/.keep
deleted file mode 100644
index d8c73e93..00000000
--- a/packages/sdk/go/examples/.keep
+++ /dev/null
@@ -1,4 +0,0 @@
-File generated from our OpenAPI spec by Stainless.
-
-This directory can be used to store example files demonstrating usage of this SDK.
-It is ignored by Stainless code generation and its content (other than this keep file) won't be touched.
\ No newline at end of file
diff --git a/packages/sdk/go/field.go b/packages/sdk/go/field.go
deleted file mode 100644
index 56d2f890..00000000
--- a/packages/sdk/go/field.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package opencode
-
-import (
- "github.com/sst/opencode-sdk-go/internal/param"
- "io"
-)
-
-// F is a param field helper used to initialize a [param.Field] generic struct.
-// This helps specify null, zero values, and overrides, as well as normal values.
-// You can read more about this in our [README].
-//
-// [README]: https://pkg.go.dev/github.com/sst/opencode-sdk-go#readme-request-fields
-func F[T any](value T) param.Field[T] { return param.Field[T]{Value: value, Present: true} }
-
-// Null is a param field helper which explicitly sends null to the API.
-func Null[T any]() param.Field[T] { return param.Field[T]{Null: true, Present: true} }
-
-// Raw is a param field helper for specifying values for fields when the
-// type you are looking to send is different from the type that is specified in
-// the SDK. For example, if the type of the field is an integer, but you want
-// to send a float, you could do that by setting the corresponding field with
-// Raw[int](0.5).
-func Raw[T any](value any) param.Field[T] { return param.Field[T]{Raw: value, Present: true} }
-
-// Int is a param field helper which helps specify integers. This is
-// particularly helpful when specifying integer constants for fields.
-func Int(value int64) param.Field[int64] { return F(value) }
-
-// String is a param field helper which helps specify strings.
-func String(value string) param.Field[string] { return F(value) }
-
-// Float is a param field helper which helps specify floats.
-func Float(value float64) param.Field[float64] { return F(value) }
-
-// Bool is a param field helper which helps specify bools.
-func Bool(value bool) param.Field[bool] { return F(value) }
-
-// FileParam is a param field helper which helps files with a mime content-type.
-func FileParam(reader io.Reader, filename string, contentType string) param.Field[io.Reader] {
- return F[io.Reader](&file{reader, filename, contentType})
-}
-
-type file struct {
- io.Reader
- name string
- contentType string
-}
-
-func (f *file) ContentType() string { return f.contentType }
-func (f *file) Filename() string { return f.name }
diff --git a/packages/sdk/go/file.go b/packages/sdk/go/file.go
deleted file mode 100644
index 0a8a4b2b..00000000
--- a/packages/sdk/go/file.go
+++ /dev/null
@@ -1,142 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "net/http"
- "net/url"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
- "github.com/sst/opencode-sdk-go/internal/apiquery"
- "github.com/sst/opencode-sdk-go/internal/param"
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-// FileService contains methods and other services that help with interacting with
-// the opencode API.
-//
-// Note, unlike clients, this service does not read variables from the environment
-// automatically. You should not instantiate this service directly, and instead use
-// the [NewFileService] method instead.
-type FileService struct {
- Options []option.RequestOption
-}
-
-// NewFileService generates a new service that applies the given options to each
-// request. These options are applied after the parent client's options (if there
-// is one), and before any request-specific options.
-func NewFileService(opts ...option.RequestOption) (r *FileService) {
- r = &FileService{}
- r.Options = opts
- return
-}
-
-// Read a file
-func (r *FileService) Read(ctx context.Context, query FileReadParams, opts ...option.RequestOption) (res *FileReadResponse, err error) {
- opts = append(r.Options[:], opts...)
- path := "file"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
- return
-}
-
-// Get file status
-func (r *FileService) Status(ctx context.Context, opts ...option.RequestOption) (res *[]File, err error) {
- opts = append(r.Options[:], opts...)
- path := "file/status"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
- return
-}
-
-type File struct {
- Added int64 `json:"added,required"`
- Path string `json:"path,required"`
- Removed int64 `json:"removed,required"`
- Status FileStatus `json:"status,required"`
- JSON fileJSON `json:"-"`
-}
-
-// fileJSON contains the JSON metadata for the struct [File]
-type fileJSON struct {
- Added apijson.Field
- Path apijson.Field
- Removed apijson.Field
- Status apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *File) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r fileJSON) RawJSON() string {
- return r.raw
-}
-
-type FileStatus string
-
-const (
- FileStatusAdded FileStatus = "added"
- FileStatusDeleted FileStatus = "deleted"
- FileStatusModified FileStatus = "modified"
-)
-
-func (r FileStatus) IsKnown() bool {
- switch r {
- case FileStatusAdded, FileStatusDeleted, FileStatusModified:
- return true
- }
- return false
-}
-
-type FileReadResponse struct {
- Content string `json:"content,required"`
- Type FileReadResponseType `json:"type,required"`
- JSON fileReadResponseJSON `json:"-"`
-}
-
-// fileReadResponseJSON contains the JSON metadata for the struct
-// [FileReadResponse]
-type fileReadResponseJSON struct {
- Content apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FileReadResponse) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r fileReadResponseJSON) RawJSON() string {
- return r.raw
-}
-
-type FileReadResponseType string
-
-const (
- FileReadResponseTypeRaw FileReadResponseType = "raw"
- FileReadResponseTypePatch FileReadResponseType = "patch"
-)
-
-func (r FileReadResponseType) IsKnown() bool {
- switch r {
- case FileReadResponseTypeRaw, FileReadResponseTypePatch:
- return true
- }
- return false
-}
-
-type FileReadParams struct {
- Path param.Field[string] `query:"path,required"`
-}
-
-// URLQuery serializes [FileReadParams]'s query parameters as `url.Values`.
-func (r FileReadParams) URLQuery() (v url.Values) {
- return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
- ArrayFormat: apiquery.ArrayQueryFormatComma,
- NestedFormat: apiquery.NestedQueryFormatBrackets,
- })
-}
diff --git a/packages/sdk/go/file_test.go b/packages/sdk/go/file_test.go
deleted file mode 100644
index 60212ea2..00000000
--- a/packages/sdk/go/file_test.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "errors"
- "os"
- "testing"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal/testutil"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-func TestFileRead(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.File.Read(context.TODO(), opencode.FileReadParams{
- Path: opencode.F("path"),
- })
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestFileStatus(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.File.Status(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
diff --git a/packages/sdk/go/find.go b/packages/sdk/go/find.go
deleted file mode 100644
index a993a353..00000000
--- a/packages/sdk/go/find.go
+++ /dev/null
@@ -1,326 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "net/http"
- "net/url"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
- "github.com/sst/opencode-sdk-go/internal/apiquery"
- "github.com/sst/opencode-sdk-go/internal/param"
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-// FindService contains methods and other services that help with interacting with
-// the opencode API.
-//
-// Note, unlike clients, this service does not read variables from the environment
-// automatically. You should not instantiate this service directly, and instead use
-// the [NewFindService] method instead.
-type FindService struct {
- Options []option.RequestOption
-}
-
-// NewFindService generates a new service that applies the given options to each
-// request. These options are applied after the parent client's options (if there
-// is one), and before any request-specific options.
-func NewFindService(opts ...option.RequestOption) (r *FindService) {
- r = &FindService{}
- r.Options = opts
- return
-}
-
-// Find files
-func (r *FindService) Files(ctx context.Context, query FindFilesParams, opts ...option.RequestOption) (res *[]string, err error) {
- opts = append(r.Options[:], opts...)
- path := "find/file"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
- return
-}
-
-// Find workspace symbols
-func (r *FindService) Symbols(ctx context.Context, query FindSymbolsParams, opts ...option.RequestOption) (res *[]Symbol, err error) {
- opts = append(r.Options[:], opts...)
- path := "find/symbol"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
- return
-}
-
-// Find text in files
-func (r *FindService) Text(ctx context.Context, query FindTextParams, opts ...option.RequestOption) (res *[]FindTextResponse, err error) {
- opts = append(r.Options[:], opts...)
- path := "find"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
- return
-}
-
-type Symbol struct {
- Kind float64 `json:"kind,required"`
- Location SymbolLocation `json:"location,required"`
- Name string `json:"name,required"`
- JSON symbolJSON `json:"-"`
-}
-
-// symbolJSON contains the JSON metadata for the struct [Symbol]
-type symbolJSON struct {
- Kind apijson.Field
- Location apijson.Field
- Name apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *Symbol) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolJSON) RawJSON() string {
- return r.raw
-}
-
-type SymbolLocation struct {
- Range SymbolLocationRange `json:"range,required"`
- Uri string `json:"uri,required"`
- JSON symbolLocationJSON `json:"-"`
-}
-
-// symbolLocationJSON contains the JSON metadata for the struct [SymbolLocation]
-type symbolLocationJSON struct {
- Range apijson.Field
- Uri apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SymbolLocation) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolLocationJSON) RawJSON() string {
- return r.raw
-}
-
-type SymbolLocationRange struct {
- End SymbolLocationRangeEnd `json:"end,required"`
- Start SymbolLocationRangeStart `json:"start,required"`
- JSON symbolLocationRangeJSON `json:"-"`
-}
-
-// symbolLocationRangeJSON contains the JSON metadata for the struct
-// [SymbolLocationRange]
-type symbolLocationRangeJSON struct {
- End apijson.Field
- Start apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SymbolLocationRange) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolLocationRangeJSON) RawJSON() string {
- return r.raw
-}
-
-type SymbolLocationRangeEnd struct {
- Character float64 `json:"character,required"`
- Line float64 `json:"line,required"`
- JSON symbolLocationRangeEndJSON `json:"-"`
-}
-
-// symbolLocationRangeEndJSON contains the JSON metadata for the struct
-// [SymbolLocationRangeEnd]
-type symbolLocationRangeEndJSON struct {
- Character apijson.Field
- Line apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SymbolLocationRangeEnd) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolLocationRangeEndJSON) RawJSON() string {
- return r.raw
-}
-
-type SymbolLocationRangeStart struct {
- Character float64 `json:"character,required"`
- Line float64 `json:"line,required"`
- JSON symbolLocationRangeStartJSON `json:"-"`
-}
-
-// symbolLocationRangeStartJSON contains the JSON metadata for the struct
-// [SymbolLocationRangeStart]
-type symbolLocationRangeStartJSON struct {
- Character apijson.Field
- Line apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SymbolLocationRangeStart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolLocationRangeStartJSON) RawJSON() string {
- return r.raw
-}
-
-type FindTextResponse struct {
- AbsoluteOffset float64 `json:"absolute_offset,required"`
- LineNumber float64 `json:"line_number,required"`
- Lines FindTextResponseLines `json:"lines,required"`
- Path FindTextResponsePath `json:"path,required"`
- Submatches []FindTextResponseSubmatch `json:"submatches,required"`
- JSON findTextResponseJSON `json:"-"`
-}
-
-// findTextResponseJSON contains the JSON metadata for the struct
-// [FindTextResponse]
-type findTextResponseJSON struct {
- AbsoluteOffset apijson.Field
- LineNumber apijson.Field
- Lines apijson.Field
- Path apijson.Field
- Submatches apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FindTextResponse) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r findTextResponseJSON) RawJSON() string {
- return r.raw
-}
-
-type FindTextResponseLines struct {
- Text string `json:"text,required"`
- JSON findTextResponseLinesJSON `json:"-"`
-}
-
-// findTextResponseLinesJSON contains the JSON metadata for the struct
-// [FindTextResponseLines]
-type findTextResponseLinesJSON struct {
- Text apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FindTextResponseLines) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r findTextResponseLinesJSON) RawJSON() string {
- return r.raw
-}
-
-type FindTextResponsePath struct {
- Text string `json:"text,required"`
- JSON findTextResponsePathJSON `json:"-"`
-}
-
-// findTextResponsePathJSON contains the JSON metadata for the struct
-// [FindTextResponsePath]
-type findTextResponsePathJSON struct {
- Text apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FindTextResponsePath) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r findTextResponsePathJSON) RawJSON() string {
- return r.raw
-}
-
-type FindTextResponseSubmatch struct {
- End float64 `json:"end,required"`
- Match FindTextResponseSubmatchesMatch `json:"match,required"`
- Start float64 `json:"start,required"`
- JSON findTextResponseSubmatchJSON `json:"-"`
-}
-
-// findTextResponseSubmatchJSON contains the JSON metadata for the struct
-// [FindTextResponseSubmatch]
-type findTextResponseSubmatchJSON struct {
- End apijson.Field
- Match apijson.Field
- Start apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FindTextResponseSubmatch) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r findTextResponseSubmatchJSON) RawJSON() string {
- return r.raw
-}
-
-type FindTextResponseSubmatchesMatch struct {
- Text string `json:"text,required"`
- JSON findTextResponseSubmatchesMatchJSON `json:"-"`
-}
-
-// findTextResponseSubmatchesMatchJSON contains the JSON metadata for the struct
-// [FindTextResponseSubmatchesMatch]
-type findTextResponseSubmatchesMatchJSON struct {
- Text apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FindTextResponseSubmatchesMatch) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r findTextResponseSubmatchesMatchJSON) RawJSON() string {
- return r.raw
-}
-
-type FindFilesParams struct {
- Query param.Field[string] `query:"query,required"`
-}
-
-// URLQuery serializes [FindFilesParams]'s query parameters as `url.Values`.
-func (r FindFilesParams) URLQuery() (v url.Values) {
- return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
- ArrayFormat: apiquery.ArrayQueryFormatComma,
- NestedFormat: apiquery.NestedQueryFormatBrackets,
- })
-}
-
-type FindSymbolsParams struct {
- Query param.Field[string] `query:"query,required"`
-}
-
-// URLQuery serializes [FindSymbolsParams]'s query parameters as `url.Values`.
-func (r FindSymbolsParams) URLQuery() (v url.Values) {
- return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
- ArrayFormat: apiquery.ArrayQueryFormatComma,
- NestedFormat: apiquery.NestedQueryFormatBrackets,
- })
-}
-
-type FindTextParams struct {
- Pattern param.Field[string] `query:"pattern,required"`
-}
-
-// URLQuery serializes [FindTextParams]'s query parameters as `url.Values`.
-func (r FindTextParams) URLQuery() (v url.Values) {
- return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
- ArrayFormat: apiquery.ArrayQueryFormatComma,
- NestedFormat: apiquery.NestedQueryFormatBrackets,
- })
-}
diff --git a/packages/sdk/go/find_test.go b/packages/sdk/go/find_test.go
deleted file mode 100644
index e2f1caa1..00000000
--- a/packages/sdk/go/find_test.go
+++ /dev/null
@@ -1,86 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "errors"
- "os"
- "testing"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal/testutil"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-func TestFindFiles(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Find.Files(context.TODO(), opencode.FindFilesParams{
- Query: opencode.F("query"),
- })
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestFindSymbols(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Find.Symbols(context.TODO(), opencode.FindSymbolsParams{
- Query: opencode.F("query"),
- })
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestFindText(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Find.Text(context.TODO(), opencode.FindTextParams{
- Pattern: opencode.F("pattern"),
- })
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
diff --git a/packages/sdk/go/go.mod b/packages/sdk/go/go.mod
deleted file mode 100644
index 2817d301..00000000
--- a/packages/sdk/go/go.mod
+++ /dev/null
@@ -1,13 +0,0 @@
-module github.com/sst/opencode-sdk-go
-
-go 1.21
-
-require (
- github.com/tidwall/gjson v1.14.4
- github.com/tidwall/sjson v1.2.5
-)
-
-require (
- github.com/tidwall/match v1.1.1 // indirect
- github.com/tidwall/pretty v1.2.1 // indirect
-)
diff --git a/packages/sdk/go/go.sum b/packages/sdk/go/go.sum
deleted file mode 100644
index a70a5e0a..00000000
--- a/packages/sdk/go/go.sum
+++ /dev/null
@@ -1,10 +0,0 @@
-github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
-github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM=
-github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
-github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
-github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
-github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
-github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
-github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
-github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
-github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
diff --git a/packages/sdk/go/internal/apierror/apierror.go b/packages/sdk/go/internal/apierror/apierror.go
deleted file mode 100644
index 24307fc3..00000000
--- a/packages/sdk/go/internal/apierror/apierror.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package apierror
-
-import (
- "fmt"
- "net/http"
- "net/http/httputil"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
-)
-
-// Error represents an error that originates from the API, i.e. when a request is
-// made and the API returns a response with a HTTP status code. Other errors are
-// not wrapped by this SDK.
-type Error struct {
- JSON errorJSON `json:"-"`
- StatusCode int
- Request *http.Request
- Response *http.Response
-}
-
-// errorJSON contains the JSON metadata for the struct [Error]
-type errorJSON struct {
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *Error) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r errorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *Error) Error() string {
- // Attempt to re-populate the response body
- return fmt.Sprintf("%s \"%s\": %d %s %s", r.Request.Method, r.Request.URL, r.Response.StatusCode, http.StatusText(r.Response.StatusCode), r.JSON.RawJSON())
-}
-
-func (r *Error) DumpRequest(body bool) []byte {
- if r.Request.GetBody != nil {
- r.Request.Body, _ = r.Request.GetBody()
- }
- out, _ := httputil.DumpRequestOut(r.Request, body)
- return out
-}
-
-func (r *Error) DumpResponse(body bool) []byte {
- out, _ := httputil.DumpResponse(r.Response, body)
- return out
-}
diff --git a/packages/sdk/go/internal/apiform/encoder.go b/packages/sdk/go/internal/apiform/encoder.go
deleted file mode 100644
index 243a1a12..00000000
--- a/packages/sdk/go/internal/apiform/encoder.go
+++ /dev/null
@@ -1,383 +0,0 @@
-package apiform
-
-import (
- "fmt"
- "io"
- "mime/multipart"
- "net/textproto"
- "path"
- "reflect"
- "sort"
- "strconv"
- "strings"
- "sync"
- "time"
-
- "github.com/sst/opencode-sdk-go/internal/param"
-)
-
-var encoders sync.Map // map[encoderEntry]encoderFunc
-
-func Marshal(value interface{}, writer *multipart.Writer) error {
- e := &encoder{dateFormat: time.RFC3339}
- return e.marshal(value, writer)
-}
-
-func MarshalRoot(value interface{}, writer *multipart.Writer) error {
- e := &encoder{root: true, dateFormat: time.RFC3339}
- return e.marshal(value, writer)
-}
-
-type encoder struct {
- dateFormat string
- root bool
-}
-
-type encoderFunc func(key string, value reflect.Value, writer *multipart.Writer) error
-
-type encoderField struct {
- tag parsedStructTag
- fn encoderFunc
- idx []int
-}
-
-type encoderEntry struct {
- reflect.Type
- dateFormat string
- root bool
-}
-
-func (e *encoder) marshal(value interface{}, writer *multipart.Writer) error {
- val := reflect.ValueOf(value)
- if !val.IsValid() {
- return nil
- }
- typ := val.Type()
- enc := e.typeEncoder(typ)
- return enc("", val, writer)
-}
-
-func (e *encoder) typeEncoder(t reflect.Type) encoderFunc {
- entry := encoderEntry{
- Type: t,
- dateFormat: e.dateFormat,
- root: e.root,
- }
-
- if fi, ok := encoders.Load(entry); ok {
- return fi.(encoderFunc)
- }
-
- // To deal with recursive types, populate the map with an
- // indirect func before we build it. This type waits on the
- // real func (f) to be ready and then calls it. This indirect
- // func is only used for recursive types.
- var (
- wg sync.WaitGroup
- f encoderFunc
- )
- wg.Add(1)
- fi, loaded := encoders.LoadOrStore(entry, encoderFunc(func(key string, v reflect.Value, writer *multipart.Writer) error {
- wg.Wait()
- return f(key, v, writer)
- }))
- if loaded {
- return fi.(encoderFunc)
- }
-
- // Compute the real encoder and replace the indirect func with it.
- f = e.newTypeEncoder(t)
- wg.Done()
- encoders.Store(entry, f)
- return f
-}
-
-func (e *encoder) newTypeEncoder(t reflect.Type) encoderFunc {
- if t.ConvertibleTo(reflect.TypeOf(time.Time{})) {
- return e.newTimeTypeEncoder()
- }
- if t.ConvertibleTo(reflect.TypeOf((*io.Reader)(nil)).Elem()) {
- return e.newReaderTypeEncoder()
- }
- e.root = false
- switch t.Kind() {
- case reflect.Pointer:
- inner := t.Elem()
-
- innerEncoder := e.typeEncoder(inner)
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- if !v.IsValid() || v.IsNil() {
- return nil
- }
- return innerEncoder(key, v.Elem(), writer)
- }
- case reflect.Struct:
- return e.newStructTypeEncoder(t)
- case reflect.Slice, reflect.Array:
- return e.newArrayTypeEncoder(t)
- case reflect.Map:
- return e.newMapEncoder(t)
- case reflect.Interface:
- return e.newInterfaceEncoder()
- default:
- return e.newPrimitiveTypeEncoder(t)
- }
-}
-
-func (e *encoder) newPrimitiveTypeEncoder(t reflect.Type) encoderFunc {
- switch t.Kind() {
- // Note that we could use `gjson` to encode these types but it would complicate our
- // code more and this current code shouldn't cause any issues
- case reflect.String:
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- return writer.WriteField(key, v.String())
- }
- case reflect.Bool:
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- if v.Bool() {
- return writer.WriteField(key, "true")
- }
- return writer.WriteField(key, "false")
- }
- case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64:
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- return writer.WriteField(key, strconv.FormatInt(v.Int(), 10))
- }
- case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- return writer.WriteField(key, strconv.FormatUint(v.Uint(), 10))
- }
- case reflect.Float32:
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- return writer.WriteField(key, strconv.FormatFloat(v.Float(), 'f', -1, 32))
- }
- case reflect.Float64:
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- return writer.WriteField(key, strconv.FormatFloat(v.Float(), 'f', -1, 64))
- }
- default:
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- return fmt.Errorf("unknown type received at primitive encoder: %s", t.String())
- }
- }
-}
-
-func (e *encoder) newArrayTypeEncoder(t reflect.Type) encoderFunc {
- itemEncoder := e.typeEncoder(t.Elem())
-
- return func(key string, v reflect.Value, writer *multipart.Writer) error {
- if key != "" {
- key = key + "."
- }
- for i := 0; i < v.Len(); i++ {
- err := itemEncoder(key+strconv.Itoa(i), v.Index(i), writer)
- if err != nil {
- return err
- }
- }
- return nil
- }
-}
-
-func (e *encoder) newStructTypeEncoder(t reflect.Type) encoderFunc {
- if t.Implements(reflect.TypeOf((*param.FieldLike)(nil)).Elem()) {
- return e.newFieldTypeEncoder(t)
- }
-
- encoderFields := []encoderField{}
- extraEncoder := (*encoderField)(nil)
-
- // This helper allows us to recursively collect field encoders into a flat
- // array. The parameter `index` keeps track of the access patterns necessary
- // to get to some field.
- var collectEncoderFields func(r reflect.Type, index []int)
- collectEncoderFields = func(r reflect.Type, index []int) {
- for i := 0; i < r.NumField(); i++ {
- idx := append(index, i)
- field := t.FieldByIndex(idx)
- if !field.IsExported() {
- continue
- }
- // If this is an embedded struct, traverse one level deeper to extract
- // the field and get their encoders as well.
- if field.Anonymous {
- collectEncoderFields(field.Type, idx)
- continue
- }
- // If json tag is not present, then we skip, which is intentionally
- // different behavior from the stdlib.
- ptag, ok := parseFormStructTag(field)
- if !ok {
- continue
- }
- // We only want to support unexported field if they're tagged with
- // `extras` because that field shouldn't be part of the public API. We
- // also want to only keep the top level extras
- if ptag.extras && len(index) == 0 {
- extraEncoder = &encoderField{ptag, e.typeEncoder(field.Type.Elem()), idx}
- continue
- }
- if ptag.name == "-" {
- continue
- }
-
- dateFormat, ok := parseFormatStructTag(field)
- oldFormat := e.dateFormat
- if ok {
- switch dateFormat {
- case "date-time":
- e.dateFormat = time.RFC3339
- case "date":
- e.dateFormat = "2006-01-02"
- }
- }
- encoderFields = append(encoderFields, encoderField{ptag, e.typeEncoder(field.Type), idx})
- e.dateFormat = oldFormat
- }
- }
- collectEncoderFields(t, []int{})
-
- // Ensure deterministic output by sorting by lexicographic order
- sort.Slice(encoderFields, func(i, j int) bool {
- return encoderFields[i].tag.name < encoderFields[j].tag.name
- })
-
- return func(key string, value reflect.Value, writer *multipart.Writer) error {
- if key != "" {
- key = key + "."
- }
-
- for _, ef := range encoderFields {
- field := value.FieldByIndex(ef.idx)
- err := ef.fn(key+ef.tag.name, field, writer)
- if err != nil {
- return err
- }
- }
-
- if extraEncoder != nil {
- err := e.encodeMapEntries(key, value.FieldByIndex(extraEncoder.idx), writer)
- if err != nil {
- return err
- }
- }
-
- return nil
- }
-}
-
-func (e *encoder) newFieldTypeEncoder(t reflect.Type) encoderFunc {
- f, _ := t.FieldByName("Value")
- enc := e.typeEncoder(f.Type)
-
- return func(key string, value reflect.Value, writer *multipart.Writer) error {
- present := value.FieldByName("Present")
- if !present.Bool() {
- return nil
- }
- null := value.FieldByName("Null")
- if null.Bool() {
- return nil
- }
- raw := value.FieldByName("Raw")
- if !raw.IsNil() {
- return e.typeEncoder(raw.Type())(key, raw, writer)
- }
- return enc(key, value.FieldByName("Value"), writer)
- }
-}
-
-func (e *encoder) newTimeTypeEncoder() encoderFunc {
- format := e.dateFormat
- return func(key string, value reflect.Value, writer *multipart.Writer) error {
- return writer.WriteField(key, value.Convert(reflect.TypeOf(time.Time{})).Interface().(time.Time).Format(format))
- }
-}
-
-func (e encoder) newInterfaceEncoder() encoderFunc {
- return func(key string, value reflect.Value, writer *multipart.Writer) error {
- value = value.Elem()
- if !value.IsValid() {
- return nil
- }
- return e.typeEncoder(value.Type())(key, value, writer)
- }
-}
-
-var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"")
-
-func escapeQuotes(s string) string {
- return quoteEscaper.Replace(s)
-}
-
-func (e *encoder) newReaderTypeEncoder() encoderFunc {
- return func(key string, value reflect.Value, writer *multipart.Writer) error {
- reader := value.Convert(reflect.TypeOf((*io.Reader)(nil)).Elem()).Interface().(io.Reader)
- filename := "anonymous_file"
- contentType := "application/octet-stream"
- if named, ok := reader.(interface{ Filename() string }); ok {
- filename = named.Filename()
- } else if named, ok := reader.(interface{ Name() string }); ok {
- filename = path.Base(named.Name())
- }
- if typed, ok := reader.(interface{ ContentType() string }); ok {
- contentType = typed.ContentType()
- }
-
- // Below is taken almost 1-for-1 from [multipart.CreateFormFile]
- h := make(textproto.MIMEHeader)
- h.Set("Content-Disposition", fmt.Sprintf(`form-data; name="%s"; filename="%s"`, escapeQuotes(key), escapeQuotes(filename)))
- h.Set("Content-Type", contentType)
- filewriter, err := writer.CreatePart(h)
- if err != nil {
- return err
- }
- _, err = io.Copy(filewriter, reader)
- return err
- }
-}
-
-// Given a []byte of json (may either be an empty object or an object that already contains entries)
-// encode all of the entries in the map to the json byte array.
-func (e *encoder) encodeMapEntries(key string, v reflect.Value, writer *multipart.Writer) error {
- type mapPair struct {
- key string
- value reflect.Value
- }
-
- if key != "" {
- key = key + "."
- }
-
- pairs := []mapPair{}
-
- iter := v.MapRange()
- for iter.Next() {
- if iter.Key().Type().Kind() == reflect.String {
- pairs = append(pairs, mapPair{key: iter.Key().String(), value: iter.Value()})
- } else {
- return fmt.Errorf("cannot encode a map with a non string key")
- }
- }
-
- // Ensure deterministic output
- sort.Slice(pairs, func(i, j int) bool {
- return pairs[i].key < pairs[j].key
- })
-
- elementEncoder := e.typeEncoder(v.Type().Elem())
- for _, p := range pairs {
- err := elementEncoder(key+string(p.key), p.value, writer)
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func (e *encoder) newMapEncoder(t reflect.Type) encoderFunc {
- return func(key string, value reflect.Value, writer *multipart.Writer) error {
- return e.encodeMapEntries(key, value, writer)
- }
-}
diff --git a/packages/sdk/go/internal/apiform/form.go b/packages/sdk/go/internal/apiform/form.go
deleted file mode 100644
index 5445116e..00000000
--- a/packages/sdk/go/internal/apiform/form.go
+++ /dev/null
@@ -1,5 +0,0 @@
-package apiform
-
-type Marshaler interface {
- MarshalMultipart() ([]byte, string, error)
-}
diff --git a/packages/sdk/go/internal/apiform/form_test.go b/packages/sdk/go/internal/apiform/form_test.go
deleted file mode 100644
index 39d1460c..00000000
--- a/packages/sdk/go/internal/apiform/form_test.go
+++ /dev/null
@@ -1,440 +0,0 @@
-package apiform
-
-import (
- "bytes"
- "mime/multipart"
- "strings"
- "testing"
- "time"
-)
-
-func P[T any](v T) *T { return &v }
-
-type Primitives struct {
- A bool `form:"a"`
- B int `form:"b"`
- C uint `form:"c"`
- D float64 `form:"d"`
- E float32 `form:"e"`
- F []int `form:"f"`
-}
-
-type PrimitivePointers struct {
- A *bool `form:"a"`
- B *int `form:"b"`
- C *uint `form:"c"`
- D *float64 `form:"d"`
- E *float32 `form:"e"`
- F *[]int `form:"f"`
-}
-
-type Slices struct {
- Slice []Primitives `form:"slices"`
-}
-
-type DateTime struct {
- Date time.Time `form:"date" format:"date"`
- DateTime time.Time `form:"date-time" format:"date-time"`
-}
-
-type AdditionalProperties struct {
- A bool `form:"a"`
- Extras map[string]interface{} `form:"-,extras"`
-}
-
-type TypedAdditionalProperties struct {
- A bool `form:"a"`
- Extras map[string]int `form:"-,extras"`
-}
-
-type EmbeddedStructs struct {
- AdditionalProperties
- A *int `form:"number2"`
- Extras map[string]interface{} `form:"-,extras"`
-}
-
-type Recursive struct {
- Name string `form:"name"`
- Child *Recursive `form:"child"`
-}
-
-type UnknownStruct struct {
- Unknown interface{} `form:"unknown"`
-}
-
-type UnionStruct struct {
- Union Union `form:"union" format:"date"`
-}
-
-type Union interface {
- union()
-}
-
-type UnionInteger int64
-
-func (UnionInteger) union() {}
-
-type UnionStructA struct {
- Type string `form:"type"`
- A string `form:"a"`
- B string `form:"b"`
-}
-
-func (UnionStructA) union() {}
-
-type UnionStructB struct {
- Type string `form:"type"`
- A string `form:"a"`
-}
-
-func (UnionStructB) union() {}
-
-type UnionTime time.Time
-
-func (UnionTime) union() {}
-
-type ReaderStruct struct {
-}
-
-var tests = map[string]struct {
- buf string
- val interface{}
-}{
- "map_string": {
- `--xxx
-Content-Disposition: form-data; name="foo"
-
-bar
---xxx--
-`,
- map[string]string{"foo": "bar"},
- },
-
- "map_interface": {
- `--xxx
-Content-Disposition: form-data; name="a"
-
-1
---xxx
-Content-Disposition: form-data; name="b"
-
-str
---xxx
-Content-Disposition: form-data; name="c"
-
-false
---xxx--
-`,
- map[string]interface{}{"a": float64(1), "b": "str", "c": false},
- },
-
- "primitive_struct": {
- `--xxx
-Content-Disposition: form-data; name="a"
-
-false
---xxx
-Content-Disposition: form-data; name="b"
-
-237628372683
---xxx
-Content-Disposition: form-data; name="c"
-
-654
---xxx
-Content-Disposition: form-data; name="d"
-
-9999.43
---xxx
-Content-Disposition: form-data; name="e"
-
-43.76
---xxx
-Content-Disposition: form-data; name="f.0"
-
-1
---xxx
-Content-Disposition: form-data; name="f.1"
-
-2
---xxx
-Content-Disposition: form-data; name="f.2"
-
-3
---xxx
-Content-Disposition: form-data; name="f.3"
-
-4
---xxx--
-`,
- Primitives{A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}},
- },
-
- "slices": {
- `--xxx
-Content-Disposition: form-data; name="slices.0.a"
-
-false
---xxx
-Content-Disposition: form-data; name="slices.0.b"
-
-237628372683
---xxx
-Content-Disposition: form-data; name="slices.0.c"
-
-654
---xxx
-Content-Disposition: form-data; name="slices.0.d"
-
-9999.43
---xxx
-Content-Disposition: form-data; name="slices.0.e"
-
-43.76
---xxx
-Content-Disposition: form-data; name="slices.0.f.0"
-
-1
---xxx
-Content-Disposition: form-data; name="slices.0.f.1"
-
-2
---xxx
-Content-Disposition: form-data; name="slices.0.f.2"
-
-3
---xxx
-Content-Disposition: form-data; name="slices.0.f.3"
-
-4
---xxx--
-`,
- Slices{
- Slice: []Primitives{{A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}}},
- },
- },
-
- "primitive_pointer_struct": {
- `--xxx
-Content-Disposition: form-data; name="a"
-
-false
---xxx
-Content-Disposition: form-data; name="b"
-
-237628372683
---xxx
-Content-Disposition: form-data; name="c"
-
-654
---xxx
-Content-Disposition: form-data; name="d"
-
-9999.43
---xxx
-Content-Disposition: form-data; name="e"
-
-43.76
---xxx
-Content-Disposition: form-data; name="f.0"
-
-1
---xxx
-Content-Disposition: form-data; name="f.1"
-
-2
---xxx
-Content-Disposition: form-data; name="f.2"
-
-3
---xxx
-Content-Disposition: form-data; name="f.3"
-
-4
---xxx
-Content-Disposition: form-data; name="f.4"
-
-5
---xxx--
-`,
- PrimitivePointers{
- A: P(false),
- B: P(237628372683),
- C: P(uint(654)),
- D: P(9999.43),
- E: P(float32(43.76)),
- F: &[]int{1, 2, 3, 4, 5},
- },
- },
-
- "datetime_struct": {
- `--xxx
-Content-Disposition: form-data; name="date"
-
-2006-01-02
---xxx
-Content-Disposition: form-data; name="date-time"
-
-2006-01-02T15:04:05Z
---xxx--
-`,
- DateTime{
- Date: time.Date(2006, time.January, 2, 0, 0, 0, 0, time.UTC),
- DateTime: time.Date(2006, time.January, 2, 15, 4, 5, 0, time.UTC),
- },
- },
-
- "additional_properties": {
- `--xxx
-Content-Disposition: form-data; name="a"
-
-true
---xxx
-Content-Disposition: form-data; name="bar"
-
-value
---xxx
-Content-Disposition: form-data; name="foo"
-
-true
---xxx--
-`,
- AdditionalProperties{
- A: true,
- Extras: map[string]interface{}{
- "bar": "value",
- "foo": true,
- },
- },
- },
-
- "recursive_struct": {
- `--xxx
-Content-Disposition: form-data; name="child.name"
-
-Alex
---xxx
-Content-Disposition: form-data; name="name"
-
-Robert
---xxx--
-`,
- Recursive{Name: "Robert", Child: &Recursive{Name: "Alex"}},
- },
-
- "unknown_struct_number": {
- `--xxx
-Content-Disposition: form-data; name="unknown"
-
-12
---xxx--
-`,
- UnknownStruct{
- Unknown: 12.,
- },
- },
-
- "unknown_struct_map": {
- `--xxx
-Content-Disposition: form-data; name="unknown.foo"
-
-bar
---xxx--
-`,
- UnknownStruct{
- Unknown: map[string]interface{}{
- "foo": "bar",
- },
- },
- },
-
- "union_integer": {
- `--xxx
-Content-Disposition: form-data; name="union"
-
-12
---xxx--
-`,
- UnionStruct{
- Union: UnionInteger(12),
- },
- },
-
- "union_struct_discriminated_a": {
- `--xxx
-Content-Disposition: form-data; name="union.a"
-
-foo
---xxx
-Content-Disposition: form-data; name="union.b"
-
-bar
---xxx
-Content-Disposition: form-data; name="union.type"
-
-typeA
---xxx--
-`,
-
- UnionStruct{
- Union: UnionStructA{
- Type: "typeA",
- A: "foo",
- B: "bar",
- },
- },
- },
-
- "union_struct_discriminated_b": {
- `--xxx
-Content-Disposition: form-data; name="union.a"
-
-foo
---xxx
-Content-Disposition: form-data; name="union.type"
-
-typeB
---xxx--
-`,
- UnionStruct{
- Union: UnionStructB{
- Type: "typeB",
- A: "foo",
- },
- },
- },
-
- "union_struct_time": {
- `--xxx
-Content-Disposition: form-data; name="union"
-
-2010-05-23
---xxx--
-`,
- UnionStruct{
- Union: UnionTime(time.Date(2010, 05, 23, 0, 0, 0, 0, time.UTC)),
- },
- },
-}
-
-func TestEncode(t *testing.T) {
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- buf := bytes.NewBuffer(nil)
- writer := multipart.NewWriter(buf)
- writer.SetBoundary("xxx")
- err := Marshal(test.val, writer)
- if err != nil {
- t.Errorf("serialization of %v failed with error %v", test.val, err)
- }
- err = writer.Close()
- if err != nil {
- t.Errorf("serialization of %v failed with error %v", test.val, err)
- }
- raw := buf.Bytes()
- if string(raw) != strings.ReplaceAll(test.buf, "\n", "\r\n") {
- t.Errorf("expected %+#v to serialize to '%s' but got '%s'", test.val, test.buf, string(raw))
- }
- })
- }
-}
diff --git a/packages/sdk/go/internal/apiform/tag.go b/packages/sdk/go/internal/apiform/tag.go
deleted file mode 100644
index b22e054f..00000000
--- a/packages/sdk/go/internal/apiform/tag.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package apiform
-
-import (
- "reflect"
- "strings"
-)
-
-const jsonStructTag = "json"
-const formStructTag = "form"
-const formatStructTag = "format"
-
-type parsedStructTag struct {
- name string
- required bool
- extras bool
- metadata bool
-}
-
-func parseFormStructTag(field reflect.StructField) (tag parsedStructTag, ok bool) {
- raw, ok := field.Tag.Lookup(formStructTag)
- if !ok {
- raw, ok = field.Tag.Lookup(jsonStructTag)
- }
- if !ok {
- return
- }
- parts := strings.Split(raw, ",")
- if len(parts) == 0 {
- return tag, false
- }
- tag.name = parts[0]
- for _, part := range parts[1:] {
- switch part {
- case "required":
- tag.required = true
- case "extras":
- tag.extras = true
- case "metadata":
- tag.metadata = true
- }
- }
- return
-}
-
-func parseFormatStructTag(field reflect.StructField) (format string, ok bool) {
- format, ok = field.Tag.Lookup(formatStructTag)
- return
-}
diff --git a/packages/sdk/go/internal/apijson/decoder.go b/packages/sdk/go/internal/apijson/decoder.go
deleted file mode 100644
index 68b7ed6b..00000000
--- a/packages/sdk/go/internal/apijson/decoder.go
+++ /dev/null
@@ -1,670 +0,0 @@
-package apijson
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "reflect"
- "strconv"
- "sync"
- "time"
- "unsafe"
-
- "github.com/tidwall/gjson"
-)
-
-// decoders is a synchronized map with roughly the following type:
-// map[reflect.Type]decoderFunc
-var decoders sync.Map
-
-// Unmarshal is similar to [encoding/json.Unmarshal] and parses the JSON-encoded
-// data and stores it in the given pointer.
-func Unmarshal(raw []byte, to any) error {
- d := &decoderBuilder{dateFormat: time.RFC3339}
- return d.unmarshal(raw, to)
-}
-
-// UnmarshalRoot is like Unmarshal, but doesn't try to call MarshalJSON on the
-// root element. Useful if a struct's UnmarshalJSON is overrode to use the
-// behavior of this encoder versus the standard library.
-func UnmarshalRoot(raw []byte, to any) error {
- d := &decoderBuilder{dateFormat: time.RFC3339, root: true}
- return d.unmarshal(raw, to)
-}
-
-// decoderBuilder contains the 'compile-time' state of the decoder.
-type decoderBuilder struct {
- // Whether or not this is the first element and called by [UnmarshalRoot], see
- // the documentation there to see why this is necessary.
- root bool
- // The dateFormat (a format string for [time.Format]) which is chosen by the
- // last struct tag that was seen.
- dateFormat string
-}
-
-// decoderState contains the 'run-time' state of the decoder.
-type decoderState struct {
- strict bool
- exactness exactness
-}
-
-// Exactness refers to how close to the type the result was if deserialization
-// was successful. This is useful in deserializing unions, where you want to try
-// each entry, first with strict, then with looser validation, without actually
-// having to do a lot of redundant work by marshalling twice (or maybe even more
-// times).
-type exactness int8
-
-const (
- // Some values had to fudged a bit, for example by converting a string to an
- // int, or an enum with extra values.
- loose exactness = iota
- // There are some extra arguments, but other wise it matches the union.
- extras
- // Exactly right.
- exact
-)
-
-type decoderFunc func(node gjson.Result, value reflect.Value, state *decoderState) error
-
-type decoderField struct {
- tag parsedStructTag
- fn decoderFunc
- idx []int
- goname string
-}
-
-type decoderEntry struct {
- reflect.Type
- dateFormat string
- root bool
-}
-
-func (d *decoderBuilder) unmarshal(raw []byte, to any) error {
- value := reflect.ValueOf(to).Elem()
- result := gjson.ParseBytes(raw)
- if !value.IsValid() {
- return fmt.Errorf("apijson: cannot marshal into invalid value")
- }
- return d.typeDecoder(value.Type())(result, value, &decoderState{strict: false, exactness: exact})
-}
-
-func (d *decoderBuilder) typeDecoder(t reflect.Type) decoderFunc {
- entry := decoderEntry{
- Type: t,
- dateFormat: d.dateFormat,
- root: d.root,
- }
-
- if fi, ok := decoders.Load(entry); ok {
- return fi.(decoderFunc)
- }
-
- // To deal with recursive types, populate the map with an
- // indirect func before we build it. This type waits on the
- // real func (f) to be ready and then calls it. This indirect
- // func is only used for recursive types.
- var (
- wg sync.WaitGroup
- f decoderFunc
- )
- wg.Add(1)
- fi, loaded := decoders.LoadOrStore(entry, decoderFunc(func(node gjson.Result, v reflect.Value, state *decoderState) error {
- wg.Wait()
- return f(node, v, state)
- }))
- if loaded {
- return fi.(decoderFunc)
- }
-
- // Compute the real decoder and replace the indirect func with it.
- f = d.newTypeDecoder(t)
- wg.Done()
- decoders.Store(entry, f)
- return f
-}
-
-func indirectUnmarshalerDecoder(n gjson.Result, v reflect.Value, state *decoderState) error {
- return v.Addr().Interface().(json.Unmarshaler).UnmarshalJSON([]byte(n.Raw))
-}
-
-func unmarshalerDecoder(n gjson.Result, v reflect.Value, state *decoderState) error {
- if v.Kind() == reflect.Pointer && v.CanSet() {
- v.Set(reflect.New(v.Type().Elem()))
- }
- return v.Interface().(json.Unmarshaler).UnmarshalJSON([]byte(n.Raw))
-}
-
-func (d *decoderBuilder) newTypeDecoder(t reflect.Type) decoderFunc {
- if t.ConvertibleTo(reflect.TypeOf(time.Time{})) {
- return d.newTimeTypeDecoder(t)
- }
- if !d.root && t.Implements(reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()) {
- return unmarshalerDecoder
- }
- if !d.root && reflect.PointerTo(t).Implements(reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()) {
- if _, ok := unionVariants[t]; !ok {
- return indirectUnmarshalerDecoder
- }
- }
- d.root = false
-
- if _, ok := unionRegistry[t]; ok {
- return d.newUnionDecoder(t)
- }
-
- switch t.Kind() {
- case reflect.Pointer:
- inner := t.Elem()
- innerDecoder := d.typeDecoder(inner)
-
- return func(n gjson.Result, v reflect.Value, state *decoderState) error {
- if !v.IsValid() {
- return fmt.Errorf("apijson: unexpected invalid reflection value %+#v", v)
- }
-
- newValue := reflect.New(inner).Elem()
- err := innerDecoder(n, newValue, state)
- if err != nil {
- return err
- }
-
- v.Set(newValue.Addr())
- return nil
- }
- case reflect.Struct:
- return d.newStructTypeDecoder(t)
- case reflect.Array:
- fallthrough
- case reflect.Slice:
- return d.newArrayTypeDecoder(t)
- case reflect.Map:
- return d.newMapDecoder(t)
- case reflect.Interface:
- return func(node gjson.Result, value reflect.Value, state *decoderState) error {
- if !value.IsValid() {
- return fmt.Errorf("apijson: unexpected invalid value %+#v", value)
- }
- if node.Value() != nil && value.CanSet() {
- value.Set(reflect.ValueOf(node.Value()))
- }
- return nil
- }
- default:
- return d.newPrimitiveTypeDecoder(t)
- }
-}
-
-// newUnionDecoder returns a decoderFunc that deserializes into a union using an
-// algorithm roughly similar to Pydantic's [smart algorithm].
-//
-// Conceptually this is equivalent to choosing the best schema based on how 'exact'
-// the deserialization is for each of the schemas.
-//
-// If there is a tie in the level of exactness, then the tie is broken
-// left-to-right.
-//
-// [smart algorithm]: https://docs.pydantic.dev/latest/concepts/unions/#smart-mode
-func (d *decoderBuilder) newUnionDecoder(t reflect.Type) decoderFunc {
- unionEntry, ok := unionRegistry[t]
- if !ok {
- panic("apijson: couldn't find union of type " + t.String() + " in union registry")
- }
- decoders := []decoderFunc{}
- for _, variant := range unionEntry.variants {
- decoder := d.typeDecoder(variant.Type)
- decoders = append(decoders, decoder)
- }
- return func(n gjson.Result, v reflect.Value, state *decoderState) error {
- // If there is a discriminator match, circumvent the exactness logic entirely
- for idx, variant := range unionEntry.variants {
- decoder := decoders[idx]
- if variant.TypeFilter != n.Type {
- continue
- }
-
- if len(unionEntry.discriminatorKey) != 0 {
- discriminatorValue := n.Get(unionEntry.discriminatorKey).Value()
- if discriminatorValue == variant.DiscriminatorValue {
- inner := reflect.New(variant.Type).Elem()
- err := decoder(n, inner, state)
- v.Set(inner)
- return err
- }
- }
- }
-
- // Set bestExactness to worse than loose
- bestExactness := loose - 1
- for idx, variant := range unionEntry.variants {
- decoder := decoders[idx]
- if variant.TypeFilter != n.Type {
- continue
- }
- sub := decoderState{strict: state.strict, exactness: exact}
- inner := reflect.New(variant.Type).Elem()
- err := decoder(n, inner, &sub)
- if err != nil {
- continue
- }
- if sub.exactness == exact {
- v.Set(inner)
- return nil
- }
- if sub.exactness > bestExactness {
- v.Set(inner)
- bestExactness = sub.exactness
- }
- }
-
- if bestExactness < loose {
- return errors.New("apijson: was not able to coerce type as union")
- }
-
- if guardStrict(state, bestExactness != exact) {
- return errors.New("apijson: was not able to coerce type as union strictly")
- }
-
- return nil
- }
-}
-
-func (d *decoderBuilder) newMapDecoder(t reflect.Type) decoderFunc {
- keyType := t.Key()
- itemType := t.Elem()
- itemDecoder := d.typeDecoder(itemType)
-
- return func(node gjson.Result, value reflect.Value, state *decoderState) (err error) {
- mapValue := reflect.MakeMapWithSize(t, len(node.Map()))
-
- node.ForEach(func(key, value gjson.Result) bool {
- // It's fine for us to just use `ValueOf` here because the key types will
- // always be primitive types so we don't need to decode it using the standard pattern
- keyValue := reflect.ValueOf(key.Value())
- if !keyValue.IsValid() {
- if err == nil {
- err = fmt.Errorf("apijson: received invalid key type %v", keyValue.String())
- }
- return false
- }
- if keyValue.Type() != keyType {
- if err == nil {
- err = fmt.Errorf("apijson: expected key type %v but got %v", keyType, keyValue.Type())
- }
- return false
- }
-
- itemValue := reflect.New(itemType).Elem()
- itemerr := itemDecoder(value, itemValue, state)
- if itemerr != nil {
- if err == nil {
- err = itemerr
- }
- return false
- }
-
- mapValue.SetMapIndex(keyValue, itemValue)
- return true
- })
-
- if err != nil {
- return err
- }
- value.Set(mapValue)
- return nil
- }
-}
-
-func (d *decoderBuilder) newArrayTypeDecoder(t reflect.Type) decoderFunc {
- itemDecoder := d.typeDecoder(t.Elem())
-
- return func(node gjson.Result, value reflect.Value, state *decoderState) (err error) {
- if !node.IsArray() {
- return fmt.Errorf("apijson: could not deserialize to an array")
- }
-
- arrayNode := node.Array()
-
- arrayValue := reflect.MakeSlice(reflect.SliceOf(t.Elem()), len(arrayNode), len(arrayNode))
- for i, itemNode := range arrayNode {
- err = itemDecoder(itemNode, arrayValue.Index(i), state)
- if err != nil {
- return err
- }
- }
-
- value.Set(arrayValue)
- return nil
- }
-}
-
-func (d *decoderBuilder) newStructTypeDecoder(t reflect.Type) decoderFunc {
- // map of json field name to struct field decoders
- decoderFields := map[string]decoderField{}
- anonymousDecoders := []decoderField{}
- extraDecoder := (*decoderField)(nil)
- inlineDecoder := (*decoderField)(nil)
-
- for i := 0; i < t.NumField(); i++ {
- idx := []int{i}
- field := t.FieldByIndex(idx)
- if !field.IsExported() {
- continue
- }
- // If this is an embedded struct, traverse one level deeper to extract
- // the fields and get their encoders as well.
- if field.Anonymous {
- anonymousDecoders = append(anonymousDecoders, decoderField{
- fn: d.typeDecoder(field.Type),
- idx: idx[:],
- })
- continue
- }
- // If json tag is not present, then we skip, which is intentionally
- // different behavior from the stdlib.
- ptag, ok := parseJSONStructTag(field)
- if !ok {
- continue
- }
- // We only want to support unexported fields if they're tagged with
- // `extras` because that field shouldn't be part of the public API.
- if ptag.extras {
- extraDecoder = &decoderField{ptag, d.typeDecoder(field.Type.Elem()), idx, field.Name}
- continue
- }
- if ptag.inline {
- inlineDecoder = &decoderField{ptag, d.typeDecoder(field.Type), idx, field.Name}
- continue
- }
- if ptag.metadata {
- continue
- }
-
- oldFormat := d.dateFormat
- dateFormat, ok := parseFormatStructTag(field)
- if ok {
- switch dateFormat {
- case "date-time":
- d.dateFormat = time.RFC3339
- case "date":
- d.dateFormat = "2006-01-02"
- }
- }
- decoderFields[ptag.name] = decoderField{ptag, d.typeDecoder(field.Type), idx, field.Name}
- d.dateFormat = oldFormat
- }
-
- return func(node gjson.Result, value reflect.Value, state *decoderState) (err error) {
- if field := value.FieldByName("JSON"); field.IsValid() {
- if raw := field.FieldByName("raw"); raw.IsValid() {
- setUnexportedField(raw, node.Raw)
- }
- }
-
- for _, decoder := range anonymousDecoders {
- // ignore errors
- decoder.fn(node, value.FieldByIndex(decoder.idx), state)
- }
-
- if inlineDecoder != nil {
- var meta Field
- dest := value.FieldByIndex(inlineDecoder.idx)
- isValid := false
- if dest.IsValid() && node.Type != gjson.Null {
- err = inlineDecoder.fn(node, dest, state)
- if err == nil {
- isValid = true
- }
- }
-
- if node.Type == gjson.Null {
- meta = Field{
- raw: node.Raw,
- status: null,
- }
- } else if !isValid {
- meta = Field{
- raw: node.Raw,
- status: invalid,
- }
- } else if isValid {
- meta = Field{
- raw: node.Raw,
- status: valid,
- }
- }
- if metadata := getSubField(value, inlineDecoder.idx, inlineDecoder.goname); metadata.IsValid() {
- metadata.Set(reflect.ValueOf(meta))
- }
- return err
- }
-
- typedExtraType := reflect.Type(nil)
- typedExtraFields := reflect.Value{}
- if extraDecoder != nil {
- typedExtraType = value.FieldByIndex(extraDecoder.idx).Type()
- typedExtraFields = reflect.MakeMap(typedExtraType)
- }
- untypedExtraFields := map[string]Field{}
-
- for fieldName, itemNode := range node.Map() {
- df, explicit := decoderFields[fieldName]
- var (
- dest reflect.Value
- fn decoderFunc
- meta Field
- )
- if explicit {
- fn = df.fn
- dest = value.FieldByIndex(df.idx)
- }
- if !explicit && extraDecoder != nil {
- dest = reflect.New(typedExtraType.Elem()).Elem()
- fn = extraDecoder.fn
- }
-
- isValid := false
- if dest.IsValid() && itemNode.Type != gjson.Null {
- err = fn(itemNode, dest, state)
- if err == nil {
- isValid = true
- }
- }
-
- if itemNode.Type == gjson.Null {
- meta = Field{
- raw: itemNode.Raw,
- status: null,
- }
- } else if !isValid {
- meta = Field{
- raw: itemNode.Raw,
- status: invalid,
- }
- } else if isValid {
- meta = Field{
- raw: itemNode.Raw,
- status: valid,
- }
- }
-
- if explicit {
- if metadata := getSubField(value, df.idx, df.goname); metadata.IsValid() {
- metadata.Set(reflect.ValueOf(meta))
- }
- }
- if !explicit {
- untypedExtraFields[fieldName] = meta
- }
- if !explicit && extraDecoder != nil {
- typedExtraFields.SetMapIndex(reflect.ValueOf(fieldName), dest)
- }
- }
-
- if extraDecoder != nil && typedExtraFields.Len() > 0 {
- value.FieldByIndex(extraDecoder.idx).Set(typedExtraFields)
- }
-
- // Set exactness to 'extras' if there are untyped, extra fields.
- if len(untypedExtraFields) > 0 && state.exactness > extras {
- state.exactness = extras
- }
-
- if metadata := getSubField(value, []int{-1}, "ExtraFields"); metadata.IsValid() && len(untypedExtraFields) > 0 {
- metadata.Set(reflect.ValueOf(untypedExtraFields))
- }
- return nil
- }
-}
-
-func (d *decoderBuilder) newPrimitiveTypeDecoder(t reflect.Type) decoderFunc {
- switch t.Kind() {
- case reflect.String:
- return func(n gjson.Result, v reflect.Value, state *decoderState) error {
- v.SetString(n.String())
- if guardStrict(state, n.Type != gjson.String) {
- return fmt.Errorf("apijson: failed to parse string strictly")
- }
- // Everything that is not an object can be loosely stringified.
- if n.Type == gjson.JSON {
- return fmt.Errorf("apijson: failed to parse string")
- }
- if guardUnknown(state, v) {
- return fmt.Errorf("apijson: failed string enum validation")
- }
- return nil
- }
- case reflect.Bool:
- return func(n gjson.Result, v reflect.Value, state *decoderState) error {
- v.SetBool(n.Bool())
- if guardStrict(state, n.Type != gjson.True && n.Type != gjson.False) {
- return fmt.Errorf("apijson: failed to parse bool strictly")
- }
- // Numbers and strings that are either 'true' or 'false' can be loosely
- // deserialized as bool.
- if n.Type == gjson.String && (n.Raw != "true" && n.Raw != "false") || n.Type == gjson.JSON {
- return fmt.Errorf("apijson: failed to parse bool")
- }
- if guardUnknown(state, v) {
- return fmt.Errorf("apijson: failed bool enum validation")
- }
- return nil
- }
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- return func(n gjson.Result, v reflect.Value, state *decoderState) error {
- v.SetInt(n.Int())
- if guardStrict(state, n.Type != gjson.Number || n.Num != float64(int(n.Num))) {
- return fmt.Errorf("apijson: failed to parse int strictly")
- }
- // Numbers, booleans, and strings that maybe look like numbers can be
- // loosely deserialized as numbers.
- if n.Type == gjson.JSON || (n.Type == gjson.String && !canParseAsNumber(n.Str)) {
- return fmt.Errorf("apijson: failed to parse int")
- }
- if guardUnknown(state, v) {
- return fmt.Errorf("apijson: failed int enum validation")
- }
- return nil
- }
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- return func(n gjson.Result, v reflect.Value, state *decoderState) error {
- v.SetUint(n.Uint())
- if guardStrict(state, n.Type != gjson.Number || n.Num != float64(int(n.Num)) || n.Num < 0) {
- return fmt.Errorf("apijson: failed to parse uint strictly")
- }
- // Numbers, booleans, and strings that maybe look like numbers can be
- // loosely deserialized as uint.
- if n.Type == gjson.JSON || (n.Type == gjson.String && !canParseAsNumber(n.Str)) {
- return fmt.Errorf("apijson: failed to parse uint")
- }
- if guardUnknown(state, v) {
- return fmt.Errorf("apijson: failed uint enum validation")
- }
- return nil
- }
- case reflect.Float32, reflect.Float64:
- return func(n gjson.Result, v reflect.Value, state *decoderState) error {
- v.SetFloat(n.Float())
- if guardStrict(state, n.Type != gjson.Number) {
- return fmt.Errorf("apijson: failed to parse float strictly")
- }
- // Numbers, booleans, and strings that maybe look like numbers can be
- // loosely deserialized as floats.
- if n.Type == gjson.JSON || (n.Type == gjson.String && !canParseAsNumber(n.Str)) {
- return fmt.Errorf("apijson: failed to parse float")
- }
- if guardUnknown(state, v) {
- return fmt.Errorf("apijson: failed float enum validation")
- }
- return nil
- }
- default:
- return func(node gjson.Result, v reflect.Value, state *decoderState) error {
- return fmt.Errorf("unknown type received at primitive decoder: %s", t.String())
- }
- }
-}
-
-func (d *decoderBuilder) newTimeTypeDecoder(t reflect.Type) decoderFunc {
- format := d.dateFormat
- return func(n gjson.Result, v reflect.Value, state *decoderState) error {
- parsed, err := time.Parse(format, n.Str)
- if err == nil {
- v.Set(reflect.ValueOf(parsed).Convert(t))
- return nil
- }
-
- if guardStrict(state, true) {
- return err
- }
-
- layouts := []string{
- "2006-01-02",
- "2006-01-02T15:04:05Z07:00",
- "2006-01-02T15:04:05Z0700",
- "2006-01-02T15:04:05",
- "2006-01-02 15:04:05Z07:00",
- "2006-01-02 15:04:05Z0700",
- "2006-01-02 15:04:05",
- }
-
- for _, layout := range layouts {
- parsed, err := time.Parse(layout, n.Str)
- if err == nil {
- v.Set(reflect.ValueOf(parsed).Convert(t))
- return nil
- }
- }
-
- return fmt.Errorf("unable to leniently parse date-time string: %s", n.Str)
- }
-}
-
-func setUnexportedField(field reflect.Value, value interface{}) {
- reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())).Elem().Set(reflect.ValueOf(value))
-}
-
-func guardStrict(state *decoderState, cond bool) bool {
- if !cond {
- return false
- }
-
- if state.strict {
- return true
- }
-
- state.exactness = loose
- return false
-}
-
-func canParseAsNumber(str string) bool {
- _, err := strconv.ParseFloat(str, 64)
- return err == nil
-}
-
-func guardUnknown(state *decoderState, v reflect.Value) bool {
- if have, ok := v.Interface().(interface{ IsKnown() bool }); guardStrict(state, ok && !have.IsKnown()) {
- return true
- }
- return false
-}
diff --git a/packages/sdk/go/internal/apijson/encoder.go b/packages/sdk/go/internal/apijson/encoder.go
deleted file mode 100644
index 0e5f89e1..00000000
--- a/packages/sdk/go/internal/apijson/encoder.go
+++ /dev/null
@@ -1,398 +0,0 @@
-package apijson
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "reflect"
- "sort"
- "strconv"
- "strings"
- "sync"
- "time"
-
- "github.com/tidwall/sjson"
-
- "github.com/sst/opencode-sdk-go/internal/param"
-)
-
-var encoders sync.Map // map[encoderEntry]encoderFunc
-
-func Marshal(value interface{}) ([]byte, error) {
- e := &encoder{dateFormat: time.RFC3339}
- return e.marshal(value)
-}
-
-func MarshalRoot(value interface{}) ([]byte, error) {
- e := &encoder{root: true, dateFormat: time.RFC3339}
- return e.marshal(value)
-}
-
-type encoder struct {
- dateFormat string
- root bool
-}
-
-type encoderFunc func(value reflect.Value) ([]byte, error)
-
-type encoderField struct {
- tag parsedStructTag
- fn encoderFunc
- idx []int
-}
-
-type encoderEntry struct {
- reflect.Type
- dateFormat string
- root bool
-}
-
-func (e *encoder) marshal(value interface{}) ([]byte, error) {
- val := reflect.ValueOf(value)
- if !val.IsValid() {
- return nil, nil
- }
- typ := val.Type()
- enc := e.typeEncoder(typ)
- return enc(val)
-}
-
-func (e *encoder) typeEncoder(t reflect.Type) encoderFunc {
- entry := encoderEntry{
- Type: t,
- dateFormat: e.dateFormat,
- root: e.root,
- }
-
- if fi, ok := encoders.Load(entry); ok {
- return fi.(encoderFunc)
- }
-
- // To deal with recursive types, populate the map with an
- // indirect func before we build it. This type waits on the
- // real func (f) to be ready and then calls it. This indirect
- // func is only used for recursive types.
- var (
- wg sync.WaitGroup
- f encoderFunc
- )
- wg.Add(1)
- fi, loaded := encoders.LoadOrStore(entry, encoderFunc(func(v reflect.Value) ([]byte, error) {
- wg.Wait()
- return f(v)
- }))
- if loaded {
- return fi.(encoderFunc)
- }
-
- // Compute the real encoder and replace the indirect func with it.
- f = e.newTypeEncoder(t)
- wg.Done()
- encoders.Store(entry, f)
- return f
-}
-
-func marshalerEncoder(v reflect.Value) ([]byte, error) {
- return v.Interface().(json.Marshaler).MarshalJSON()
-}
-
-func indirectMarshalerEncoder(v reflect.Value) ([]byte, error) {
- return v.Addr().Interface().(json.Marshaler).MarshalJSON()
-}
-
-func (e *encoder) newTypeEncoder(t reflect.Type) encoderFunc {
- if t.ConvertibleTo(reflect.TypeOf(time.Time{})) {
- return e.newTimeTypeEncoder()
- }
- if !e.root && t.Implements(reflect.TypeOf((*json.Marshaler)(nil)).Elem()) {
- return marshalerEncoder
- }
- if !e.root && reflect.PointerTo(t).Implements(reflect.TypeOf((*json.Marshaler)(nil)).Elem()) {
- return indirectMarshalerEncoder
- }
- e.root = false
- switch t.Kind() {
- case reflect.Pointer:
- inner := t.Elem()
-
- innerEncoder := e.typeEncoder(inner)
- return func(v reflect.Value) ([]byte, error) {
- if !v.IsValid() || v.IsNil() {
- return nil, nil
- }
- return innerEncoder(v.Elem())
- }
- case reflect.Struct:
- return e.newStructTypeEncoder(t)
- case reflect.Array:
- fallthrough
- case reflect.Slice:
- return e.newArrayTypeEncoder(t)
- case reflect.Map:
- return e.newMapEncoder(t)
- case reflect.Interface:
- return e.newInterfaceEncoder()
- default:
- return e.newPrimitiveTypeEncoder(t)
- }
-}
-
-func (e *encoder) newPrimitiveTypeEncoder(t reflect.Type) encoderFunc {
- switch t.Kind() {
- // Note that we could use `gjson` to encode these types but it would complicate our
- // code more and this current code shouldn't cause any issues
- case reflect.String:
- return func(v reflect.Value) ([]byte, error) {
- return json.Marshal(v.Interface())
- }
- case reflect.Bool:
- return func(v reflect.Value) ([]byte, error) {
- if v.Bool() {
- return []byte("true"), nil
- }
- return []byte("false"), nil
- }
- case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64:
- return func(v reflect.Value) ([]byte, error) {
- return []byte(strconv.FormatInt(v.Int(), 10)), nil
- }
- case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- return func(v reflect.Value) ([]byte, error) {
- return []byte(strconv.FormatUint(v.Uint(), 10)), nil
- }
- case reflect.Float32:
- return func(v reflect.Value) ([]byte, error) {
- return []byte(strconv.FormatFloat(v.Float(), 'f', -1, 32)), nil
- }
- case reflect.Float64:
- return func(v reflect.Value) ([]byte, error) {
- return []byte(strconv.FormatFloat(v.Float(), 'f', -1, 64)), nil
- }
- default:
- return func(v reflect.Value) ([]byte, error) {
- return nil, fmt.Errorf("unknown type received at primitive encoder: %s", t.String())
- }
- }
-}
-
-func (e *encoder) newArrayTypeEncoder(t reflect.Type) encoderFunc {
- itemEncoder := e.typeEncoder(t.Elem())
-
- return func(value reflect.Value) ([]byte, error) {
- json := []byte("[]")
- for i := 0; i < value.Len(); i++ {
- var value, err = itemEncoder(value.Index(i))
- if err != nil {
- return nil, err
- }
- if value == nil {
- // Assume that empty items should be inserted as `null` so that the output array
- // will be the same length as the input array
- value = []byte("null")
- }
-
- json, err = sjson.SetRawBytes(json, "-1", value)
- if err != nil {
- return nil, err
- }
- }
-
- return json, nil
- }
-}
-
-func (e *encoder) newStructTypeEncoder(t reflect.Type) encoderFunc {
- if t.Implements(reflect.TypeOf((*param.FieldLike)(nil)).Elem()) {
- return e.newFieldTypeEncoder(t)
- }
-
- encoderFields := []encoderField{}
- extraEncoder := (*encoderField)(nil)
-
- // This helper allows us to recursively collect field encoders into a flat
- // array. The parameter `index` keeps track of the access patterns necessary
- // to get to some field.
- var collectEncoderFields func(r reflect.Type, index []int)
- collectEncoderFields = func(r reflect.Type, index []int) {
- for i := 0; i < r.NumField(); i++ {
- idx := append(index, i)
- field := t.FieldByIndex(idx)
- if !field.IsExported() {
- continue
- }
- // If this is an embedded struct, traverse one level deeper to extract
- // the field and get their encoders as well.
- if field.Anonymous {
- collectEncoderFields(field.Type, idx)
- continue
- }
- // If json tag is not present, then we skip, which is intentionally
- // different behavior from the stdlib.
- ptag, ok := parseJSONStructTag(field)
- if !ok {
- continue
- }
- // We only want to support unexported field if they're tagged with
- // `extras` because that field shouldn't be part of the public API. We
- // also want to only keep the top level extras
- if ptag.extras && len(index) == 0 {
- extraEncoder = &encoderField{ptag, e.typeEncoder(field.Type.Elem()), idx}
- continue
- }
- if ptag.name == "-" {
- continue
- }
-
- dateFormat, ok := parseFormatStructTag(field)
- oldFormat := e.dateFormat
- if ok {
- switch dateFormat {
- case "date-time":
- e.dateFormat = time.RFC3339
- case "date":
- e.dateFormat = "2006-01-02"
- }
- }
- encoderFields = append(encoderFields, encoderField{ptag, e.typeEncoder(field.Type), idx})
- e.dateFormat = oldFormat
- }
- }
- collectEncoderFields(t, []int{})
-
- // Ensure deterministic output by sorting by lexicographic order
- sort.Slice(encoderFields, func(i, j int) bool {
- return encoderFields[i].tag.name < encoderFields[j].tag.name
- })
-
- return func(value reflect.Value) (json []byte, err error) {
- json = []byte("{}")
-
- for _, ef := range encoderFields {
- field := value.FieldByIndex(ef.idx)
- encoded, err := ef.fn(field)
- if err != nil {
- return nil, err
- }
- if encoded == nil {
- continue
- }
- json, err = sjson.SetRawBytes(json, ef.tag.name, encoded)
- if err != nil {
- return nil, err
- }
- }
-
- if extraEncoder != nil {
- json, err = e.encodeMapEntries(json, value.FieldByIndex(extraEncoder.idx))
- if err != nil {
- return nil, err
- }
- }
- return
- }
-}
-
-func (e *encoder) newFieldTypeEncoder(t reflect.Type) encoderFunc {
- f, _ := t.FieldByName("Value")
- enc := e.typeEncoder(f.Type)
-
- return func(value reflect.Value) (json []byte, err error) {
- present := value.FieldByName("Present")
- if !present.Bool() {
- return nil, nil
- }
- null := value.FieldByName("Null")
- if null.Bool() {
- return []byte("null"), nil
- }
- raw := value.FieldByName("Raw")
- if !raw.IsNil() {
- return e.typeEncoder(raw.Type())(raw)
- }
- return enc(value.FieldByName("Value"))
- }
-}
-
-func (e *encoder) newTimeTypeEncoder() encoderFunc {
- format := e.dateFormat
- return func(value reflect.Value) (json []byte, err error) {
- return []byte(`"` + value.Convert(reflect.TypeOf(time.Time{})).Interface().(time.Time).Format(format) + `"`), nil
- }
-}
-
-func (e encoder) newInterfaceEncoder() encoderFunc {
- return func(value reflect.Value) ([]byte, error) {
- value = value.Elem()
- if !value.IsValid() {
- return nil, nil
- }
- return e.typeEncoder(value.Type())(value)
- }
-}
-
-// Given a []byte of json (may either be an empty object or an object that already contains entries)
-// encode all of the entries in the map to the json byte array.
-func (e *encoder) encodeMapEntries(json []byte, v reflect.Value) ([]byte, error) {
- type mapPair struct {
- key []byte
- value reflect.Value
- }
-
- pairs := []mapPair{}
- keyEncoder := e.typeEncoder(v.Type().Key())
-
- iter := v.MapRange()
- for iter.Next() {
- var encodedKeyString string
- if iter.Key().Type().Kind() == reflect.String {
- encodedKeyString = iter.Key().String()
- } else {
- var err error
- encodedKeyBytes, err := keyEncoder(iter.Key())
- if err != nil {
- return nil, err
- }
- encodedKeyString = string(encodedKeyBytes)
- }
- encodedKey := []byte(sjsonReplacer.Replace(encodedKeyString))
- pairs = append(pairs, mapPair{key: encodedKey, value: iter.Value()})
- }
-
- // Ensure deterministic output
- sort.Slice(pairs, func(i, j int) bool {
- return bytes.Compare(pairs[i].key, pairs[j].key) < 0
- })
-
- elementEncoder := e.typeEncoder(v.Type().Elem())
- for _, p := range pairs {
- encodedValue, err := elementEncoder(p.value)
- if err != nil {
- return nil, err
- }
- if len(encodedValue) == 0 {
- continue
- }
- json, err = sjson.SetRawBytes(json, string(p.key), encodedValue)
- if err != nil {
- return nil, err
- }
- }
-
- return json, nil
-}
-
-func (e *encoder) newMapEncoder(t reflect.Type) encoderFunc {
- return func(value reflect.Value) ([]byte, error) {
- json := []byte("{}")
- var err error
- json, err = e.encodeMapEntries(json, value)
- if err != nil {
- return nil, err
- }
- return json, nil
- }
-}
-
-// If we want to set a literal key value into JSON using sjson, we need to make sure it doesn't have
-// special characters that sjson interprets as a path.
-var sjsonReplacer *strings.Replacer = strings.NewReplacer(".", "\\.", ":", "\\:", "*", "\\*")
diff --git a/packages/sdk/go/internal/apijson/field.go b/packages/sdk/go/internal/apijson/field.go
deleted file mode 100644
index 3ef207c5..00000000
--- a/packages/sdk/go/internal/apijson/field.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package apijson
-
-import "reflect"
-
-type status uint8
-
-const (
- missing status = iota
- null
- invalid
- valid
-)
-
-type Field struct {
- raw string
- status status
-}
-
-// Returns true if the field is explicitly `null` _or_ if it is not present at all (ie, missing).
-// To check if the field's key is present in the JSON with an explicit null value,
-// you must check `f.IsNull() && !f.IsMissing()`.
-func (j Field) IsNull() bool { return j.status <= null }
-func (j Field) IsMissing() bool { return j.status == missing }
-func (j Field) IsInvalid() bool { return j.status == invalid }
-func (j Field) Raw() string { return j.raw }
-
-func getSubField(root reflect.Value, index []int, name string) reflect.Value {
- strct := root.FieldByIndex(index[:len(index)-1])
- if !strct.IsValid() {
- panic("couldn't find encapsulating struct for field " + name)
- }
- meta := strct.FieldByName("JSON")
- if !meta.IsValid() {
- return reflect.Value{}
- }
- field := meta.FieldByName(name)
- if !field.IsValid() {
- return reflect.Value{}
- }
- return field
-}
diff --git a/packages/sdk/go/internal/apijson/field_test.go b/packages/sdk/go/internal/apijson/field_test.go
deleted file mode 100644
index 2e170c76..00000000
--- a/packages/sdk/go/internal/apijson/field_test.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package apijson
-
-import (
- "testing"
- "time"
-
- "github.com/sst/opencode-sdk-go/internal/param"
-)
-
-type Struct struct {
- A string `json:"a"`
- B int64 `json:"b"`
-}
-
-type FieldStruct struct {
- A param.Field[string] `json:"a"`
- B param.Field[int64] `json:"b"`
- C param.Field[Struct] `json:"c"`
- D param.Field[time.Time] `json:"d" format:"date"`
- E param.Field[time.Time] `json:"e" format:"date-time"`
- F param.Field[int64] `json:"f"`
-}
-
-func TestFieldMarshal(t *testing.T) {
- tests := map[string]struct {
- value interface{}
- expected string
- }{
- "null_string": {param.Field[string]{Present: true, Null: true}, "null"},
- "null_int": {param.Field[int]{Present: true, Null: true}, "null"},
- "null_int64": {param.Field[int64]{Present: true, Null: true}, "null"},
- "null_struct": {param.Field[Struct]{Present: true, Null: true}, "null"},
-
- "string": {param.Field[string]{Present: true, Value: "string"}, `"string"`},
- "int": {param.Field[int]{Present: true, Value: 123}, "123"},
- "int64": {param.Field[int64]{Present: true, Value: int64(123456789123456789)}, "123456789123456789"},
- "struct": {param.Field[Struct]{Present: true, Value: Struct{A: "yo", B: 123}}, `{"a":"yo","b":123}`},
-
- "string_raw": {param.Field[int]{Present: true, Raw: "string"}, `"string"`},
- "int_raw": {param.Field[int]{Present: true, Raw: 123}, "123"},
- "int64_raw": {param.Field[int]{Present: true, Raw: int64(123456789123456789)}, "123456789123456789"},
- "struct_raw": {param.Field[int]{Present: true, Raw: Struct{A: "yo", B: 123}}, `{"a":"yo","b":123}`},
-
- "param_struct": {
- FieldStruct{
- A: param.Field[string]{Present: true, Value: "hello"},
- B: param.Field[int64]{Present: true, Value: int64(12)},
- D: param.Field[time.Time]{Present: true, Value: time.Date(2023, time.March, 18, 14, 47, 38, 0, time.UTC)},
- E: param.Field[time.Time]{Present: true, Value: time.Date(2023, time.March, 18, 14, 47, 38, 0, time.UTC)},
- },
- `{"a":"hello","b":12,"d":"2023-03-18","e":"2023-03-18T14:47:38Z"}`,
- },
- }
-
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- b, err := Marshal(test.value)
- if err != nil {
- t.Fatalf("didn't expect error %v", err)
- }
- if string(b) != test.expected {
- t.Fatalf("expected %s, received %s", test.expected, string(b))
- }
- })
- }
-}
diff --git a/packages/sdk/go/internal/apijson/json_test.go b/packages/sdk/go/internal/apijson/json_test.go
deleted file mode 100644
index e6563448..00000000
--- a/packages/sdk/go/internal/apijson/json_test.go
+++ /dev/null
@@ -1,617 +0,0 @@
-package apijson
-
-import (
- "reflect"
- "strings"
- "testing"
- "time"
-
- "github.com/tidwall/gjson"
-)
-
-func P[T any](v T) *T { return &v }
-
-type Primitives struct {
- A bool `json:"a"`
- B int `json:"b"`
- C uint `json:"c"`
- D float64 `json:"d"`
- E float32 `json:"e"`
- F []int `json:"f"`
-}
-
-type PrimitivePointers struct {
- A *bool `json:"a"`
- B *int `json:"b"`
- C *uint `json:"c"`
- D *float64 `json:"d"`
- E *float32 `json:"e"`
- F *[]int `json:"f"`
-}
-
-type Slices struct {
- Slice []Primitives `json:"slices"`
-}
-
-type DateTime struct {
- Date time.Time `json:"date" format:"date"`
- DateTime time.Time `json:"date-time" format:"date-time"`
-}
-
-type AdditionalProperties struct {
- A bool `json:"a"`
- ExtraFields map[string]interface{} `json:"-,extras"`
-}
-
-type TypedAdditionalProperties struct {
- A bool `json:"a"`
- ExtraFields map[string]int `json:"-,extras"`
-}
-
-type EmbeddedStruct struct {
- A bool `json:"a"`
- B string `json:"b"`
-
- JSON EmbeddedStructJSON
-}
-
-type EmbeddedStructJSON struct {
- A Field
- B Field
- ExtraFields map[string]Field
- raw string
-}
-
-type EmbeddedStructs struct {
- EmbeddedStruct
- A *int `json:"a"`
- ExtraFields map[string]interface{} `json:"-,extras"`
-
- JSON EmbeddedStructsJSON
-}
-
-type EmbeddedStructsJSON struct {
- A Field
- ExtraFields map[string]Field
- raw string
-}
-
-type Recursive struct {
- Name string `json:"name"`
- Child *Recursive `json:"child"`
-}
-
-type JSONFieldStruct struct {
- A bool `json:"a"`
- B int64 `json:"b"`
- C string `json:"c"`
- D string `json:"d"`
- ExtraFields map[string]int64 `json:"-,extras"`
- JSON JSONFieldStructJSON `json:"-,metadata"`
-}
-
-type JSONFieldStructJSON struct {
- A Field
- B Field
- C Field
- D Field
- ExtraFields map[string]Field
- raw string
-}
-
-type UnknownStruct struct {
- Unknown interface{} `json:"unknown"`
-}
-
-type UnionStruct struct {
- Union Union `json:"union" format:"date"`
-}
-
-type Union interface {
- union()
-}
-
-type Inline struct {
- InlineField Primitives `json:"-,inline"`
- JSON InlineJSON `json:"-,metadata"`
-}
-
-type InlineArray struct {
- InlineField []string `json:"-,inline"`
- JSON InlineJSON `json:"-,metadata"`
-}
-
-type InlineJSON struct {
- InlineField Field
- raw string
-}
-
-type UnionInteger int64
-
-func (UnionInteger) union() {}
-
-type UnionStructA struct {
- Type string `json:"type"`
- A string `json:"a"`
- B string `json:"b"`
-}
-
-func (UnionStructA) union() {}
-
-type UnionStructB struct {
- Type string `json:"type"`
- A string `json:"a"`
-}
-
-func (UnionStructB) union() {}
-
-type UnionTime time.Time
-
-func (UnionTime) union() {}
-
-func init() {
- RegisterUnion(reflect.TypeOf((*Union)(nil)).Elem(), "type",
- UnionVariant{
- TypeFilter: gjson.String,
- Type: reflect.TypeOf(UnionTime{}),
- },
- UnionVariant{
- TypeFilter: gjson.Number,
- Type: reflect.TypeOf(UnionInteger(0)),
- },
- UnionVariant{
- TypeFilter: gjson.JSON,
- DiscriminatorValue: "typeA",
- Type: reflect.TypeOf(UnionStructA{}),
- },
- UnionVariant{
- TypeFilter: gjson.JSON,
- DiscriminatorValue: "typeB",
- Type: reflect.TypeOf(UnionStructB{}),
- },
- )
-}
-
-type ComplexUnionStruct struct {
- Union ComplexUnion `json:"union"`
-}
-
-type ComplexUnion interface {
- complexUnion()
-}
-
-type ComplexUnionA struct {
- Boo string `json:"boo"`
- Foo bool `json:"foo"`
-}
-
-func (ComplexUnionA) complexUnion() {}
-
-type ComplexUnionB struct {
- Boo bool `json:"boo"`
- Foo string `json:"foo"`
-}
-
-func (ComplexUnionB) complexUnion() {}
-
-type ComplexUnionC struct {
- Boo int64 `json:"boo"`
-}
-
-func (ComplexUnionC) complexUnion() {}
-
-type ComplexUnionTypeA struct {
- Baz int64 `json:"baz"`
- Type TypeA `json:"type"`
-}
-
-func (ComplexUnionTypeA) complexUnion() {}
-
-type TypeA string
-
-func (t TypeA) IsKnown() bool {
- return t == "a"
-}
-
-type ComplexUnionTypeB struct {
- Baz int64 `json:"baz"`
- Type TypeB `json:"type"`
-}
-
-type TypeB string
-
-func (t TypeB) IsKnown() bool {
- return t == "b"
-}
-
-type UnmarshalStruct struct {
- Foo string `json:"foo"`
- prop bool `json:"-"`
-}
-
-func (r *UnmarshalStruct) UnmarshalJSON(json []byte) error {
- r.prop = true
- return UnmarshalRoot(json, r)
-}
-
-func (ComplexUnionTypeB) complexUnion() {}
-
-func init() {
- RegisterUnion(reflect.TypeOf((*ComplexUnion)(nil)).Elem(), "",
- UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ComplexUnionA{}),
- },
- UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ComplexUnionB{}),
- },
- UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ComplexUnionC{}),
- },
- UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ComplexUnionTypeA{}),
- },
- UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ComplexUnionTypeB{}),
- },
- )
-}
-
-type MarshallingUnionStruct struct {
- Union MarshallingUnion
-}
-
-func (r *MarshallingUnionStruct) UnmarshalJSON(data []byte) (err error) {
- *r = MarshallingUnionStruct{}
- err = UnmarshalRoot(data, &r.Union)
- return
-}
-
-func (r MarshallingUnionStruct) MarshalJSON() (data []byte, err error) {
- return MarshalRoot(r.Union)
-}
-
-type MarshallingUnion interface {
- marshallingUnion()
-}
-
-type MarshallingUnionA struct {
- Boo string `json:"boo"`
-}
-
-func (MarshallingUnionA) marshallingUnion() {}
-
-func (r *MarshallingUnionA) UnmarshalJSON(data []byte) (err error) {
- return UnmarshalRoot(data, r)
-}
-
-type MarshallingUnionB struct {
- Foo string `json:"foo"`
-}
-
-func (MarshallingUnionB) marshallingUnion() {}
-
-func (r *MarshallingUnionB) UnmarshalJSON(data []byte) (err error) {
- return UnmarshalRoot(data, r)
-}
-
-func init() {
- RegisterUnion(
- reflect.TypeOf((*MarshallingUnion)(nil)).Elem(),
- "",
- UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(MarshallingUnionA{}),
- },
- UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(MarshallingUnionB{}),
- },
- )
-}
-
-var tests = map[string]struct {
- buf string
- val interface{}
-}{
- "true": {"true", true},
- "false": {"false", false},
- "int": {"1", 1},
- "int_bigger": {"12324", 12324},
- "int_string_coerce": {`"65"`, 65},
- "int_boolean_coerce": {"true", 1},
- "int64": {"1", int64(1)},
- "int64_huge": {"123456789123456789", int64(123456789123456789)},
- "uint": {"1", uint(1)},
- "uint_bigger": {"12324", uint(12324)},
- "uint_coerce": {`"65"`, uint(65)},
- "float_1.54": {"1.54", float32(1.54)},
- "float_1.89": {"1.89", float64(1.89)},
- "string": {`"str"`, "str"},
- "string_int_coerce": {`12`, "12"},
- "array_string": {`["foo","bar"]`, []string{"foo", "bar"}},
- "array_int": {`[1,2]`, []int{1, 2}},
- "array_int_coerce": {`["1",2]`, []int{1, 2}},
-
- "ptr_true": {"true", P(true)},
- "ptr_false": {"false", P(false)},
- "ptr_int": {"1", P(1)},
- "ptr_int_bigger": {"12324", P(12324)},
- "ptr_int_string_coerce": {`"65"`, P(65)},
- "ptr_int_boolean_coerce": {"true", P(1)},
- "ptr_int64": {"1", P(int64(1))},
- "ptr_int64_huge": {"123456789123456789", P(int64(123456789123456789))},
- "ptr_uint": {"1", P(uint(1))},
- "ptr_uint_bigger": {"12324", P(uint(12324))},
- "ptr_uint_coerce": {`"65"`, P(uint(65))},
- "ptr_float_1.54": {"1.54", P(float32(1.54))},
- "ptr_float_1.89": {"1.89", P(float64(1.89))},
-
- "date_time": {`"2007-03-01T13:00:00Z"`, time.Date(2007, time.March, 1, 13, 0, 0, 0, time.UTC)},
- "date_time_nano_coerce": {`"2007-03-01T13:03:05.123456789Z"`, time.Date(2007, time.March, 1, 13, 3, 5, 123456789, time.UTC)},
-
- "date_time_missing_t_coerce": {`"2007-03-01 13:03:05Z"`, time.Date(2007, time.March, 1, 13, 3, 5, 0, time.UTC)},
- "date_time_missing_timezone_coerce": {`"2007-03-01T13:03:05"`, time.Date(2007, time.March, 1, 13, 3, 5, 0, time.UTC)},
- // note: using -1200 to minimize probability of conflicting with the local timezone of the test runner
- // see https://en.wikipedia.org/wiki/UTC%E2%88%9212:00
- "date_time_missing_timezone_colon_coerce": {`"2007-03-01T13:03:05-1200"`, time.Date(2007, time.March, 1, 13, 3, 5, 0, time.FixedZone("", -12*60*60))},
- "date_time_nano_missing_t_coerce": {`"2007-03-01 13:03:05.123456789Z"`, time.Date(2007, time.March, 1, 13, 3, 5, 123456789, time.UTC)},
-
- "map_string": {`{"foo":"bar"}`, map[string]string{"foo": "bar"}},
- "map_string_with_sjson_path_chars": {`{":a.b.c*:d*-1e.f":"bar"}`, map[string]string{":a.b.c*:d*-1e.f": "bar"}},
- "map_interface": {`{"a":1,"b":"str","c":false}`, map[string]interface{}{"a": float64(1), "b": "str", "c": false}},
-
- "primitive_struct": {
- `{"a":false,"b":237628372683,"c":654,"d":9999.43,"e":43.76,"f":[1,2,3,4]}`,
- Primitives{A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}},
- },
-
- "slices": {
- `{"slices":[{"a":false,"b":237628372683,"c":654,"d":9999.43,"e":43.76,"f":[1,2,3,4]}]}`,
- Slices{
- Slice: []Primitives{{A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}}},
- },
- },
-
- "primitive_pointer_struct": {
- `{"a":false,"b":237628372683,"c":654,"d":9999.43,"e":43.76,"f":[1,2,3,4,5]}`,
- PrimitivePointers{
- A: P(false),
- B: P(237628372683),
- C: P(uint(654)),
- D: P(9999.43),
- E: P(float32(43.76)),
- F: &[]int{1, 2, 3, 4, 5},
- },
- },
-
- "datetime_struct": {
- `{"date":"2006-01-02","date-time":"2006-01-02T15:04:05Z"}`,
- DateTime{
- Date: time.Date(2006, time.January, 2, 0, 0, 0, 0, time.UTC),
- DateTime: time.Date(2006, time.January, 2, 15, 4, 5, 0, time.UTC),
- },
- },
-
- "additional_properties": {
- `{"a":true,"bar":"value","foo":true}`,
- AdditionalProperties{
- A: true,
- ExtraFields: map[string]interface{}{
- "bar": "value",
- "foo": true,
- },
- },
- },
-
- "embedded_struct": {
- `{"a":1,"b":"bar"}`,
- EmbeddedStructs{
- EmbeddedStruct: EmbeddedStruct{
- A: true,
- B: "bar",
- JSON: EmbeddedStructJSON{
- A: Field{raw: `1`, status: valid},
- B: Field{raw: `"bar"`, status: valid},
- raw: `{"a":1,"b":"bar"}`,
- },
- },
- A: P(1),
- ExtraFields: map[string]interface{}{"b": "bar"},
- JSON: EmbeddedStructsJSON{
- A: Field{raw: `1`, status: valid},
- ExtraFields: map[string]Field{
- "b": {raw: `"bar"`, status: valid},
- },
- raw: `{"a":1,"b":"bar"}`,
- },
- },
- },
-
- "recursive_struct": {
- `{"child":{"name":"Alex"},"name":"Robert"}`,
- Recursive{Name: "Robert", Child: &Recursive{Name: "Alex"}},
- },
-
- "metadata_coerce": {
- `{"a":"12","b":"12","c":null,"extra_typed":12,"extra_untyped":{"foo":"bar"}}`,
- JSONFieldStruct{
- A: false,
- B: 12,
- C: "",
- JSON: JSONFieldStructJSON{
- raw: `{"a":"12","b":"12","c":null,"extra_typed":12,"extra_untyped":{"foo":"bar"}}`,
- A: Field{raw: `"12"`, status: invalid},
- B: Field{raw: `"12"`, status: valid},
- C: Field{raw: "null", status: null},
- D: Field{raw: "", status: missing},
- ExtraFields: map[string]Field{
- "extra_typed": {
- raw: "12",
- status: valid,
- },
- "extra_untyped": {
- raw: `{"foo":"bar"}`,
- status: invalid,
- },
- },
- },
- ExtraFields: map[string]int64{
- "extra_typed": 12,
- "extra_untyped": 0,
- },
- },
- },
-
- "unknown_struct_number": {
- `{"unknown":12}`,
- UnknownStruct{
- Unknown: 12.,
- },
- },
-
- "unknown_struct_map": {
- `{"unknown":{"foo":"bar"}}`,
- UnknownStruct{
- Unknown: map[string]interface{}{
- "foo": "bar",
- },
- },
- },
-
- "union_integer": {
- `{"union":12}`,
- UnionStruct{
- Union: UnionInteger(12),
- },
- },
-
- "union_struct_discriminated_a": {
- `{"union":{"a":"foo","b":"bar","type":"typeA"}}`,
- UnionStruct{
- Union: UnionStructA{
- Type: "typeA",
- A: "foo",
- B: "bar",
- },
- },
- },
-
- "union_struct_discriminated_b": {
- `{"union":{"a":"foo","type":"typeB"}}`,
- UnionStruct{
- Union: UnionStructB{
- Type: "typeB",
- A: "foo",
- },
- },
- },
-
- "union_struct_time": {
- `{"union":"2010-05-23"}`,
- UnionStruct{
- Union: UnionTime(time.Date(2010, 05, 23, 0, 0, 0, 0, time.UTC)),
- },
- },
-
- "complex_union_a": {
- `{"union":{"boo":"12","foo":true}}`,
- ComplexUnionStruct{Union: ComplexUnionA{Boo: "12", Foo: true}},
- },
-
- "complex_union_b": {
- `{"union":{"boo":true,"foo":"12"}}`,
- ComplexUnionStruct{Union: ComplexUnionB{Boo: true, Foo: "12"}},
- },
-
- "complex_union_c": {
- `{"union":{"boo":12}}`,
- ComplexUnionStruct{Union: ComplexUnionC{Boo: 12}},
- },
-
- "complex_union_type_a": {
- `{"union":{"baz":12,"type":"a"}}`,
- ComplexUnionStruct{Union: ComplexUnionTypeA{Baz: 12, Type: TypeA("a")}},
- },
-
- "complex_union_type_b": {
- `{"union":{"baz":12,"type":"b"}}`,
- ComplexUnionStruct{Union: ComplexUnionTypeB{Baz: 12, Type: TypeB("b")}},
- },
-
- "marshalling_union_a": {
- `{"boo":"hello"}`,
- MarshallingUnionStruct{Union: MarshallingUnionA{Boo: "hello"}},
- },
- "marshalling_union_b": {
- `{"foo":"hi"}`,
- MarshallingUnionStruct{Union: MarshallingUnionB{Foo: "hi"}},
- },
-
- "unmarshal": {
- `{"foo":"hello"}`,
- &UnmarshalStruct{Foo: "hello", prop: true},
- },
-
- "array_of_unmarshal": {
- `[{"foo":"hello"}]`,
- []UnmarshalStruct{{Foo: "hello", prop: true}},
- },
-
- "inline_coerce": {
- `{"a":false,"b":237628372683,"c":654,"d":9999.43,"e":43.76,"f":[1,2,3,4]}`,
- Inline{
- InlineField: Primitives{A: false, B: 237628372683, C: 0x28e, D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}},
- JSON: InlineJSON{
- InlineField: Field{raw: "{\"a\":false,\"b\":237628372683,\"c\":654,\"d\":9999.43,\"e\":43.76,\"f\":[1,2,3,4]}", status: 3},
- raw: "{\"a\":false,\"b\":237628372683,\"c\":654,\"d\":9999.43,\"e\":43.76,\"f\":[1,2,3,4]}",
- },
- },
- },
-
- "inline_array_coerce": {
- `["Hello","foo","bar"]`,
- InlineArray{
- InlineField: []string{"Hello", "foo", "bar"},
- JSON: InlineJSON{
- InlineField: Field{raw: `["Hello","foo","bar"]`, status: 3},
- raw: `["Hello","foo","bar"]`,
- },
- },
- },
-}
-
-func TestDecode(t *testing.T) {
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- result := reflect.New(reflect.TypeOf(test.val))
- if err := Unmarshal([]byte(test.buf), result.Interface()); err != nil {
- t.Fatalf("deserialization of %v failed with error %v", result, err)
- }
- if !reflect.DeepEqual(result.Elem().Interface(), test.val) {
- t.Fatalf("expected '%s' to deserialize to \n%#v\nbut got\n%#v", test.buf, test.val, result.Elem().Interface())
- }
- })
- }
-}
-
-func TestEncode(t *testing.T) {
- for name, test := range tests {
- if strings.HasSuffix(name, "_coerce") {
- continue
- }
- t.Run(name, func(t *testing.T) {
- raw, err := Marshal(test.val)
- if err != nil {
- t.Fatalf("serialization of %v failed with error %v", test.val, err)
- }
- if string(raw) != test.buf {
- t.Fatalf("expected %+#v to serialize to %s but got %s", test.val, test.buf, string(raw))
- }
- })
- }
-}
diff --git a/packages/sdk/go/internal/apijson/port.go b/packages/sdk/go/internal/apijson/port.go
deleted file mode 100644
index 502ab778..00000000
--- a/packages/sdk/go/internal/apijson/port.go
+++ /dev/null
@@ -1,120 +0,0 @@
-package apijson
-
-import (
- "fmt"
- "reflect"
-)
-
-// Port copies over values from one struct to another struct.
-func Port(from any, to any) error {
- toVal := reflect.ValueOf(to)
- fromVal := reflect.ValueOf(from)
-
- if toVal.Kind() != reflect.Ptr || toVal.IsNil() {
- return fmt.Errorf("destination must be a non-nil pointer")
- }
-
- for toVal.Kind() == reflect.Ptr {
- toVal = toVal.Elem()
- }
- toType := toVal.Type()
-
- for fromVal.Kind() == reflect.Ptr {
- fromVal = fromVal.Elem()
- }
- fromType := fromVal.Type()
-
- if toType.Kind() != reflect.Struct {
- return fmt.Errorf("destination must be a non-nil pointer to a struct (%v %v)", toType, toType.Kind())
- }
-
- values := map[string]reflect.Value{}
- fields := map[string]reflect.Value{}
-
- fromJSON := fromVal.FieldByName("JSON")
- toJSON := toVal.FieldByName("JSON")
-
- // Iterate through the fields of v and load all the "normal" fields in the struct to the map of
- // string to reflect.Value, as well as their raw .JSON.Foo counterpart indicated by j.
- var getFields func(t reflect.Type, v reflect.Value)
- getFields = func(t reflect.Type, v reflect.Value) {
- j := v.FieldByName("JSON")
-
- // Recurse into anonymous fields first, since the fields on the object should win over the fields in the
- // embedded object.
- for i := 0; i < t.NumField(); i++ {
- field := t.Field(i)
- if field.Anonymous {
- getFields(field.Type, v.Field(i))
- continue
- }
- }
-
- for i := 0; i < t.NumField(); i++ {
- field := t.Field(i)
- ptag, ok := parseJSONStructTag(field)
- if !ok || ptag.name == "-" {
- continue
- }
- values[ptag.name] = v.Field(i)
- if j.IsValid() {
- fields[ptag.name] = j.FieldByName(field.Name)
- }
- }
- }
- getFields(fromType, fromVal)
-
- // Use the values from the previous step to populate the 'to' struct.
- for i := 0; i < toType.NumField(); i++ {
- field := toType.Field(i)
- ptag, ok := parseJSONStructTag(field)
- if !ok {
- continue
- }
- if ptag.name == "-" {
- continue
- }
- if value, ok := values[ptag.name]; ok {
- delete(values, ptag.name)
- if field.Type.Kind() == reflect.Interface {
- toVal.Field(i).Set(value)
- } else {
- switch value.Kind() {
- case reflect.String:
- toVal.Field(i).SetString(value.String())
- case reflect.Bool:
- toVal.Field(i).SetBool(value.Bool())
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- toVal.Field(i).SetInt(value.Int())
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- toVal.Field(i).SetUint(value.Uint())
- case reflect.Float32, reflect.Float64:
- toVal.Field(i).SetFloat(value.Float())
- default:
- toVal.Field(i).Set(value)
- }
- }
- }
-
- if fromJSONField, ok := fields[ptag.name]; ok {
- if toJSONField := toJSON.FieldByName(field.Name); toJSONField.IsValid() {
- toJSONField.Set(fromJSONField)
- }
- }
- }
-
- // Finally, copy over the .JSON.raw and .JSON.ExtraFields
- if toJSON.IsValid() {
- if raw := toJSON.FieldByName("raw"); raw.IsValid() {
- setUnexportedField(raw, fromJSON.Interface().(interface{ RawJSON() string }).RawJSON())
- }
-
- if toExtraFields := toJSON.FieldByName("ExtraFields"); toExtraFields.IsValid() {
- if fromExtraFields := fromJSON.FieldByName("ExtraFields"); fromExtraFields.IsValid() {
- setUnexportedField(toExtraFields, fromExtraFields.Interface())
- }
- }
- }
-
- return nil
-}
diff --git a/packages/sdk/go/internal/apijson/port_test.go b/packages/sdk/go/internal/apijson/port_test.go
deleted file mode 100644
index 11540533..00000000
--- a/packages/sdk/go/internal/apijson/port_test.go
+++ /dev/null
@@ -1,257 +0,0 @@
-package apijson
-
-import (
- "reflect"
- "testing"
-)
-
-type Metadata struct {
- CreatedAt string `json:"created_at"`
-}
-
-// Card is the "combined" type of CardVisa and CardMastercard
-type Card struct {
- Processor CardProcessor `json:"processor"`
- Data any `json:"data"`
- IsFoo bool `json:"is_foo"`
- IsBar bool `json:"is_bar"`
- Metadata Metadata `json:"metadata"`
- Value interface{} `json:"value"`
-
- JSON cardJSON
-}
-
-type cardJSON struct {
- Processor Field
- Data Field
- IsFoo Field
- IsBar Field
- Metadata Field
- Value Field
- ExtraFields map[string]Field
- raw string
-}
-
-func (r cardJSON) RawJSON() string { return r.raw }
-
-type CardProcessor string
-
-// CardVisa
-type CardVisa struct {
- Processor CardVisaProcessor `json:"processor"`
- Data CardVisaData `json:"data"`
- IsFoo bool `json:"is_foo"`
- Metadata Metadata `json:"metadata"`
- Value string `json:"value"`
-
- JSON cardVisaJSON
-}
-
-type cardVisaJSON struct {
- Processor Field
- Data Field
- IsFoo Field
- Metadata Field
- Value Field
- ExtraFields map[string]Field
- raw string
-}
-
-func (r cardVisaJSON) RawJSON() string { return r.raw }
-
-type CardVisaProcessor string
-
-type CardVisaData struct {
- Foo string `json:"foo"`
-}
-
-// CardMastercard
-type CardMastercard struct {
- Processor CardMastercardProcessor `json:"processor"`
- Data CardMastercardData `json:"data"`
- IsBar bool `json:"is_bar"`
- Metadata Metadata `json:"metadata"`
- Value bool `json:"value"`
-
- JSON cardMastercardJSON
-}
-
-type cardMastercardJSON struct {
- Processor Field
- Data Field
- IsBar Field
- Metadata Field
- Value Field
- ExtraFields map[string]Field
- raw string
-}
-
-func (r cardMastercardJSON) RawJSON() string { return r.raw }
-
-type CardMastercardProcessor string
-
-type CardMastercardData struct {
- Bar int64 `json:"bar"`
-}
-
-type CommonFields struct {
- Metadata Metadata `json:"metadata"`
- Value string `json:"value"`
-
- JSON commonFieldsJSON
-}
-
-type commonFieldsJSON struct {
- Metadata Field
- Value Field
- ExtraFields map[string]Field
- raw string
-}
-
-type CardEmbedded struct {
- CommonFields
- Processor CardVisaProcessor `json:"processor"`
- Data CardVisaData `json:"data"`
- IsFoo bool `json:"is_foo"`
-
- JSON cardEmbeddedJSON
-}
-
-type cardEmbeddedJSON struct {
- Processor Field
- Data Field
- IsFoo Field
- ExtraFields map[string]Field
- raw string
-}
-
-func (r cardEmbeddedJSON) RawJSON() string { return r.raw }
-
-var portTests = map[string]struct {
- from any
- to any
-}{
- "visa to card": {
- CardVisa{
- Processor: "visa",
- IsFoo: true,
- Data: CardVisaData{
- Foo: "foo",
- },
- Metadata: Metadata{
- CreatedAt: "Mar 29 2024",
- },
- Value: "value",
- JSON: cardVisaJSON{
- raw: `{"processor":"visa","is_foo":true,"data":{"foo":"foo"}}`,
- Processor: Field{raw: `"visa"`, status: valid},
- IsFoo: Field{raw: `true`, status: valid},
- Data: Field{raw: `{"foo":"foo"}`, status: valid},
- Value: Field{raw: `"value"`, status: valid},
- ExtraFields: map[string]Field{"extra": {raw: `"yo"`, status: valid}},
- },
- },
- Card{
- Processor: "visa",
- IsFoo: true,
- IsBar: false,
- Data: CardVisaData{
- Foo: "foo",
- },
- Metadata: Metadata{
- CreatedAt: "Mar 29 2024",
- },
- Value: "value",
- JSON: cardJSON{
- raw: `{"processor":"visa","is_foo":true,"data":{"foo":"foo"}}`,
- Processor: Field{raw: `"visa"`, status: valid},
- IsFoo: Field{raw: `true`, status: valid},
- Data: Field{raw: `{"foo":"foo"}`, status: valid},
- Value: Field{raw: `"value"`, status: valid},
- ExtraFields: map[string]Field{"extra": {raw: `"yo"`, status: valid}},
- },
- },
- },
- "mastercard to card": {
- CardMastercard{
- Processor: "mastercard",
- IsBar: true,
- Data: CardMastercardData{
- Bar: 13,
- },
- Value: false,
- },
- Card{
- Processor: "mastercard",
- IsFoo: false,
- IsBar: true,
- Data: CardMastercardData{
- Bar: 13,
- },
- Value: false,
- },
- },
- "embedded to card": {
- CardEmbedded{
- CommonFields: CommonFields{
- Metadata: Metadata{
- CreatedAt: "Mar 29 2024",
- },
- Value: "embedded_value",
- JSON: commonFieldsJSON{
- Metadata: Field{raw: `{"created_at":"Mar 29 2024"}`, status: valid},
- Value: Field{raw: `"embedded_value"`, status: valid},
- raw: `should not matter`,
- },
- },
- Processor: "visa",
- IsFoo: true,
- Data: CardVisaData{
- Foo: "embedded_foo",
- },
- JSON: cardEmbeddedJSON{
- raw: `{"processor":"visa","is_foo":true,"data":{"foo":"embedded_foo"},"metadata":{"created_at":"Mar 29 2024"},"value":"embedded_value"}`,
- Processor: Field{raw: `"visa"`, status: valid},
- IsFoo: Field{raw: `true`, status: valid},
- Data: Field{raw: `{"foo":"embedded_foo"}`, status: valid},
- },
- },
- Card{
- Processor: "visa",
- IsFoo: true,
- IsBar: false,
- Data: CardVisaData{
- Foo: "embedded_foo",
- },
- Metadata: Metadata{
- CreatedAt: "Mar 29 2024",
- },
- Value: "embedded_value",
- JSON: cardJSON{
- raw: `{"processor":"visa","is_foo":true,"data":{"foo":"embedded_foo"},"metadata":{"created_at":"Mar 29 2024"},"value":"embedded_value"}`,
- Processor: Field{raw: `"visa"`, status: 0x3},
- IsFoo: Field{raw: "true", status: 0x3},
- Data: Field{raw: `{"foo":"embedded_foo"}`, status: 0x3},
- Metadata: Field{raw: `{"created_at":"Mar 29 2024"}`, status: 0x3},
- Value: Field{raw: `"embedded_value"`, status: 0x3},
- },
- },
- },
-}
-
-func TestPort(t *testing.T) {
- for name, test := range portTests {
- t.Run(name, func(t *testing.T) {
- toVal := reflect.New(reflect.TypeOf(test.to))
-
- err := Port(test.from, toVal.Interface())
- if err != nil {
- t.Fatalf("port of %v failed with error %v", test.from, err)
- }
-
- if !reflect.DeepEqual(toVal.Elem().Interface(), test.to) {
- t.Fatalf("expected:\n%+#v\n\nto port to:\n%+#v\n\nbut got:\n%+#v", test.from, test.to, toVal.Elem().Interface())
- }
- })
- }
-}
diff --git a/packages/sdk/go/internal/apijson/registry.go b/packages/sdk/go/internal/apijson/registry.go
deleted file mode 100644
index 119cc5ff..00000000
--- a/packages/sdk/go/internal/apijson/registry.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package apijson
-
-import (
- "reflect"
-
- "github.com/tidwall/gjson"
-)
-
-type UnionVariant struct {
- TypeFilter gjson.Type
- DiscriminatorValue interface{}
- Type reflect.Type
-}
-
-var unionRegistry = map[reflect.Type]unionEntry{}
-var unionVariants = map[reflect.Type]interface{}{}
-
-type unionEntry struct {
- discriminatorKey string
- variants []UnionVariant
-}
-
-func RegisterUnion(typ reflect.Type, discriminator string, variants ...UnionVariant) {
- unionRegistry[typ] = unionEntry{
- discriminatorKey: discriminator,
- variants: variants,
- }
- for _, variant := range variants {
- unionVariants[variant.Type] = typ
- }
-}
-
-// Useful to wrap a union type to force it to use [apijson.UnmarshalJSON] since you cannot define an
-// UnmarshalJSON function on the interface itself.
-type UnionUnmarshaler[T any] struct {
- Value T
-}
-
-func (c *UnionUnmarshaler[T]) UnmarshalJSON(buf []byte) error {
- return UnmarshalRoot(buf, &c.Value)
-}
diff --git a/packages/sdk/go/internal/apijson/tag.go b/packages/sdk/go/internal/apijson/tag.go
deleted file mode 100644
index 812fb3ca..00000000
--- a/packages/sdk/go/internal/apijson/tag.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package apijson
-
-import (
- "reflect"
- "strings"
-)
-
-const jsonStructTag = "json"
-const formatStructTag = "format"
-
-type parsedStructTag struct {
- name string
- required bool
- extras bool
- metadata bool
- inline bool
-}
-
-func parseJSONStructTag(field reflect.StructField) (tag parsedStructTag, ok bool) {
- raw, ok := field.Tag.Lookup(jsonStructTag)
- if !ok {
- return
- }
- parts := strings.Split(raw, ",")
- if len(parts) == 0 {
- return tag, false
- }
- tag.name = parts[0]
- for _, part := range parts[1:] {
- switch part {
- case "required":
- tag.required = true
- case "extras":
- tag.extras = true
- case "metadata":
- tag.metadata = true
- case "inline":
- tag.inline = true
- }
- }
- return
-}
-
-func parseFormatStructTag(field reflect.StructField) (format string, ok bool) {
- format, ok = field.Tag.Lookup(formatStructTag)
- return
-}
diff --git a/packages/sdk/go/internal/apiquery/encoder.go b/packages/sdk/go/internal/apiquery/encoder.go
deleted file mode 100644
index 0922c231..00000000
--- a/packages/sdk/go/internal/apiquery/encoder.go
+++ /dev/null
@@ -1,341 +0,0 @@
-package apiquery
-
-import (
- "encoding/json"
- "fmt"
- "reflect"
- "strconv"
- "strings"
- "sync"
- "time"
-
- "github.com/sst/opencode-sdk-go/internal/param"
-)
-
-var encoders sync.Map // map[reflect.Type]encoderFunc
-
-type encoder struct {
- dateFormat string
- root bool
- settings QuerySettings
-}
-
-type encoderFunc func(key string, value reflect.Value) []Pair
-
-type encoderField struct {
- tag parsedStructTag
- fn encoderFunc
- idx []int
-}
-
-type encoderEntry struct {
- reflect.Type
- dateFormat string
- root bool
- settings QuerySettings
-}
-
-type Pair struct {
- key string
- value string
-}
-
-func (e *encoder) typeEncoder(t reflect.Type) encoderFunc {
- entry := encoderEntry{
- Type: t,
- dateFormat: e.dateFormat,
- root: e.root,
- settings: e.settings,
- }
-
- if fi, ok := encoders.Load(entry); ok {
- return fi.(encoderFunc)
- }
-
- // To deal with recursive types, populate the map with an
- // indirect func before we build it. This type waits on the
- // real func (f) to be ready and then calls it. This indirect
- // func is only used for recursive types.
- var (
- wg sync.WaitGroup
- f encoderFunc
- )
- wg.Add(1)
- fi, loaded := encoders.LoadOrStore(entry, encoderFunc(func(key string, v reflect.Value) []Pair {
- wg.Wait()
- return f(key, v)
- }))
- if loaded {
- return fi.(encoderFunc)
- }
-
- // Compute the real encoder and replace the indirect func with it.
- f = e.newTypeEncoder(t)
- wg.Done()
- encoders.Store(entry, f)
- return f
-}
-
-func marshalerEncoder(key string, value reflect.Value) []Pair {
- s, _ := value.Interface().(json.Marshaler).MarshalJSON()
- return []Pair{{key, string(s)}}
-}
-
-func (e *encoder) newTypeEncoder(t reflect.Type) encoderFunc {
- if t.ConvertibleTo(reflect.TypeOf(time.Time{})) {
- return e.newTimeTypeEncoder(t)
- }
- if !e.root && t.Implements(reflect.TypeOf((*json.Marshaler)(nil)).Elem()) {
- return marshalerEncoder
- }
- e.root = false
- switch t.Kind() {
- case reflect.Pointer:
- encoder := e.typeEncoder(t.Elem())
- return func(key string, value reflect.Value) (pairs []Pair) {
- if !value.IsValid() || value.IsNil() {
- return
- }
- pairs = encoder(key, value.Elem())
- return
- }
- case reflect.Struct:
- return e.newStructTypeEncoder(t)
- case reflect.Array:
- fallthrough
- case reflect.Slice:
- return e.newArrayTypeEncoder(t)
- case reflect.Map:
- return e.newMapEncoder(t)
- case reflect.Interface:
- return e.newInterfaceEncoder()
- default:
- return e.newPrimitiveTypeEncoder(t)
- }
-}
-
-func (e *encoder) newStructTypeEncoder(t reflect.Type) encoderFunc {
- if t.Implements(reflect.TypeOf((*param.FieldLike)(nil)).Elem()) {
- return e.newFieldTypeEncoder(t)
- }
-
- encoderFields := []encoderField{}
-
- // This helper allows us to recursively collect field encoders into a flat
- // array. The parameter `index` keeps track of the access patterns necessary
- // to get to some field.
- var collectEncoderFields func(r reflect.Type, index []int)
- collectEncoderFields = func(r reflect.Type, index []int) {
- for i := 0; i < r.NumField(); i++ {
- idx := append(index, i)
- field := t.FieldByIndex(idx)
- if !field.IsExported() {
- continue
- }
- // If this is an embedded struct, traverse one level deeper to extract
- // the field and get their encoders as well.
- if field.Anonymous {
- collectEncoderFields(field.Type, idx)
- continue
- }
- // If query tag is not present, then we skip, which is intentionally
- // different behavior from the stdlib.
- ptag, ok := parseQueryStructTag(field)
- if !ok {
- continue
- }
-
- if ptag.name == "-" && !ptag.inline {
- continue
- }
-
- dateFormat, ok := parseFormatStructTag(field)
- oldFormat := e.dateFormat
- if ok {
- switch dateFormat {
- case "date-time":
- e.dateFormat = time.RFC3339
- case "date":
- e.dateFormat = "2006-01-02"
- }
- }
- encoderFields = append(encoderFields, encoderField{ptag, e.typeEncoder(field.Type), idx})
- e.dateFormat = oldFormat
- }
- }
- collectEncoderFields(t, []int{})
-
- return func(key string, value reflect.Value) (pairs []Pair) {
- for _, ef := range encoderFields {
- var subkey string = e.renderKeyPath(key, ef.tag.name)
- if ef.tag.inline {
- subkey = key
- }
-
- field := value.FieldByIndex(ef.idx)
- pairs = append(pairs, ef.fn(subkey, field)...)
- }
- return
- }
-}
-
-func (e *encoder) newMapEncoder(t reflect.Type) encoderFunc {
- keyEncoder := e.typeEncoder(t.Key())
- elementEncoder := e.typeEncoder(t.Elem())
- return func(key string, value reflect.Value) (pairs []Pair) {
- iter := value.MapRange()
- for iter.Next() {
- encodedKey := keyEncoder("", iter.Key())
- if len(encodedKey) != 1 {
- panic("Unexpected number of parts for encoded map key. Are you using a non-primitive for this map?")
- }
- subkey := encodedKey[0].value
- keyPath := e.renderKeyPath(key, subkey)
- pairs = append(pairs, elementEncoder(keyPath, iter.Value())...)
- }
- return
- }
-}
-
-func (e *encoder) renderKeyPath(key string, subkey string) string {
- if len(key) == 0 {
- return subkey
- }
- if e.settings.NestedFormat == NestedQueryFormatDots {
- return fmt.Sprintf("%s.%s", key, subkey)
- }
- return fmt.Sprintf("%s[%s]", key, subkey)
-}
-
-func (e *encoder) newArrayTypeEncoder(t reflect.Type) encoderFunc {
- switch e.settings.ArrayFormat {
- case ArrayQueryFormatComma:
- innerEncoder := e.typeEncoder(t.Elem())
- return func(key string, v reflect.Value) []Pair {
- elements := []string{}
- for i := 0; i < v.Len(); i++ {
- for _, pair := range innerEncoder("", v.Index(i)) {
- elements = append(elements, pair.value)
- }
- }
- if len(elements) == 0 {
- return []Pair{}
- }
- return []Pair{{key, strings.Join(elements, ",")}}
- }
- case ArrayQueryFormatRepeat:
- innerEncoder := e.typeEncoder(t.Elem())
- return func(key string, value reflect.Value) (pairs []Pair) {
- for i := 0; i < value.Len(); i++ {
- pairs = append(pairs, innerEncoder(key, value.Index(i))...)
- }
- return pairs
- }
- case ArrayQueryFormatIndices:
- panic("The array indices format is not supported yet")
- case ArrayQueryFormatBrackets:
- innerEncoder := e.typeEncoder(t.Elem())
- return func(key string, value reflect.Value) []Pair {
- pairs := []Pair{}
- for i := 0; i < value.Len(); i++ {
- pairs = append(pairs, innerEncoder(key+"[]", value.Index(i))...)
- }
- return pairs
- }
- default:
- panic(fmt.Sprintf("Unknown ArrayFormat value: %d", e.settings.ArrayFormat))
- }
-}
-
-func (e *encoder) newPrimitiveTypeEncoder(t reflect.Type) encoderFunc {
- switch t.Kind() {
- case reflect.Pointer:
- inner := t.Elem()
-
- innerEncoder := e.newPrimitiveTypeEncoder(inner)
- return func(key string, v reflect.Value) []Pair {
- if !v.IsValid() || v.IsNil() {
- return nil
- }
- return innerEncoder(key, v.Elem())
- }
- case reflect.String:
- return func(key string, v reflect.Value) []Pair {
- return []Pair{{key, v.String()}}
- }
- case reflect.Bool:
- return func(key string, v reflect.Value) []Pair {
- if v.Bool() {
- return []Pair{{key, "true"}}
- }
- return []Pair{{key, "false"}}
- }
- case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64:
- return func(key string, v reflect.Value) []Pair {
- return []Pair{{key, strconv.FormatInt(v.Int(), 10)}}
- }
- case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- return func(key string, v reflect.Value) []Pair {
- return []Pair{{key, strconv.FormatUint(v.Uint(), 10)}}
- }
- case reflect.Float32, reflect.Float64:
- return func(key string, v reflect.Value) []Pair {
- return []Pair{{key, strconv.FormatFloat(v.Float(), 'f', -1, 64)}}
- }
- case reflect.Complex64, reflect.Complex128:
- bitSize := 64
- if t.Kind() == reflect.Complex128 {
- bitSize = 128
- }
- return func(key string, v reflect.Value) []Pair {
- return []Pair{{key, strconv.FormatComplex(v.Complex(), 'f', -1, bitSize)}}
- }
- default:
- return func(key string, v reflect.Value) []Pair {
- return nil
- }
- }
-}
-
-func (e *encoder) newFieldTypeEncoder(t reflect.Type) encoderFunc {
- f, _ := t.FieldByName("Value")
- enc := e.typeEncoder(f.Type)
-
- return func(key string, value reflect.Value) []Pair {
- present := value.FieldByName("Present")
- if !present.Bool() {
- return nil
- }
- null := value.FieldByName("Null")
- if null.Bool() {
- // TODO: Error?
- return nil
- }
- raw := value.FieldByName("Raw")
- if !raw.IsNil() {
- return e.typeEncoder(raw.Type())(key, raw)
- }
- return enc(key, value.FieldByName("Value"))
- }
-}
-
-func (e *encoder) newTimeTypeEncoder(t reflect.Type) encoderFunc {
- format := e.dateFormat
- return func(key string, value reflect.Value) []Pair {
- return []Pair{{
- key,
- value.Convert(reflect.TypeOf(time.Time{})).Interface().(time.Time).Format(format),
- }}
- }
-}
-
-func (e encoder) newInterfaceEncoder() encoderFunc {
- return func(key string, value reflect.Value) []Pair {
- value = value.Elem()
- if !value.IsValid() {
- return nil
- }
- return e.typeEncoder(value.Type())(key, value)
- }
-
-}
diff --git a/packages/sdk/go/internal/apiquery/query.go b/packages/sdk/go/internal/apiquery/query.go
deleted file mode 100644
index 6f90e993..00000000
--- a/packages/sdk/go/internal/apiquery/query.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package apiquery
-
-import (
- "net/url"
- "reflect"
- "time"
-)
-
-func MarshalWithSettings(value interface{}, settings QuerySettings) url.Values {
- e := encoder{time.RFC3339, true, settings}
- kv := url.Values{}
- val := reflect.ValueOf(value)
- if !val.IsValid() {
- return nil
- }
- typ := val.Type()
- for _, pair := range e.typeEncoder(typ)("", val) {
- kv.Add(pair.key, pair.value)
- }
- return kv
-}
-
-func Marshal(value interface{}) url.Values {
- return MarshalWithSettings(value, QuerySettings{})
-}
-
-type Queryer interface {
- URLQuery() url.Values
-}
-
-type QuerySettings struct {
- NestedFormat NestedQueryFormat
- ArrayFormat ArrayQueryFormat
-}
-
-type NestedQueryFormat int
-
-const (
- NestedQueryFormatBrackets NestedQueryFormat = iota
- NestedQueryFormatDots
-)
-
-type ArrayQueryFormat int
-
-const (
- ArrayQueryFormatComma ArrayQueryFormat = iota
- ArrayQueryFormatRepeat
- ArrayQueryFormatIndices
- ArrayQueryFormatBrackets
-)
diff --git a/packages/sdk/go/internal/apiquery/query_test.go b/packages/sdk/go/internal/apiquery/query_test.go
deleted file mode 100644
index 1e740d6a..00000000
--- a/packages/sdk/go/internal/apiquery/query_test.go
+++ /dev/null
@@ -1,335 +0,0 @@
-package apiquery
-
-import (
- "net/url"
- "testing"
- "time"
-)
-
-func P[T any](v T) *T { return &v }
-
-type Primitives struct {
- A bool `query:"a"`
- B int `query:"b"`
- C uint `query:"c"`
- D float64 `query:"d"`
- E float32 `query:"e"`
- F []int `query:"f"`
-}
-
-type PrimitivePointers struct {
- A *bool `query:"a"`
- B *int `query:"b"`
- C *uint `query:"c"`
- D *float64 `query:"d"`
- E *float32 `query:"e"`
- F *[]int `query:"f"`
-}
-
-type Slices struct {
- Slice []Primitives `query:"slices"`
- Mixed []interface{} `query:"mixed"`
-}
-
-type DateTime struct {
- Date time.Time `query:"date" format:"date"`
- DateTime time.Time `query:"date-time" format:"date-time"`
-}
-
-type AdditionalProperties struct {
- A bool `query:"a"`
- Extras map[string]interface{} `query:"-,inline"`
-}
-
-type Recursive struct {
- Name string `query:"name"`
- Child *Recursive `query:"child"`
-}
-
-type UnknownStruct struct {
- Unknown interface{} `query:"unknown"`
-}
-
-type UnionStruct struct {
- Union Union `query:"union" format:"date"`
-}
-
-type Union interface {
- union()
-}
-
-type UnionInteger int64
-
-func (UnionInteger) union() {}
-
-type UnionString string
-
-func (UnionString) union() {}
-
-type UnionStructA struct {
- Type string `query:"type"`
- A string `query:"a"`
- B string `query:"b"`
-}
-
-func (UnionStructA) union() {}
-
-type UnionStructB struct {
- Type string `query:"type"`
- A string `query:"a"`
-}
-
-func (UnionStructB) union() {}
-
-type UnionTime time.Time
-
-func (UnionTime) union() {}
-
-type DeeplyNested struct {
- A DeeplyNested1 `query:"a"`
-}
-
-type DeeplyNested1 struct {
- B DeeplyNested2 `query:"b"`
-}
-
-type DeeplyNested2 struct {
- C DeeplyNested3 `query:"c"`
-}
-
-type DeeplyNested3 struct {
- D *string `query:"d"`
-}
-
-var tests = map[string]struct {
- enc string
- val interface{}
- settings QuerySettings
-}{
- "primitives": {
- "a=false&b=237628372683&c=654&d=9999.43&e=43.7599983215332&f=1,2,3,4",
- Primitives{A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}},
- QuerySettings{},
- },
-
- "slices_brackets": {
- `mixed[]=1&mixed[]=2.3&mixed[]=hello&slices[][a]=false&slices[][a]=false&slices[][b]=237628372683&slices[][b]=237628372683&slices[][c]=654&slices[][c]=654&slices[][d]=9999.43&slices[][d]=9999.43&slices[][e]=43.7599983215332&slices[][e]=43.7599983215332&slices[][f][]=1&slices[][f][]=2&slices[][f][]=3&slices[][f][]=4&slices[][f][]=1&slices[][f][]=2&slices[][f][]=3&slices[][f][]=4`,
- Slices{
- Slice: []Primitives{
- {A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}},
- {A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}},
- },
- Mixed: []interface{}{1, 2.3, "hello"},
- },
- QuerySettings{ArrayFormat: ArrayQueryFormatBrackets},
- },
-
- "slices_comma": {
- `mixed=1,2.3,hello`,
- Slices{
- Mixed: []interface{}{1, 2.3, "hello"},
- },
- QuerySettings{ArrayFormat: ArrayQueryFormatComma},
- },
-
- "slices_repeat": {
- `mixed=1&mixed=2.3&mixed=hello&slices[a]=false&slices[a]=false&slices[b]=237628372683&slices[b]=237628372683&slices[c]=654&slices[c]=654&slices[d]=9999.43&slices[d]=9999.43&slices[e]=43.7599983215332&slices[e]=43.7599983215332&slices[f]=1&slices[f]=2&slices[f]=3&slices[f]=4&slices[f]=1&slices[f]=2&slices[f]=3&slices[f]=4`,
- Slices{
- Slice: []Primitives{
- {A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}},
- {A: false, B: 237628372683, C: uint(654), D: 9999.43, E: 43.76, F: []int{1, 2, 3, 4}},
- },
- Mixed: []interface{}{1, 2.3, "hello"},
- },
- QuerySettings{ArrayFormat: ArrayQueryFormatRepeat},
- },
-
- "primitive_pointer_struct": {
- "a=false&b=237628372683&c=654&d=9999.43&e=43.7599983215332&f=1,2,3,4,5",
- PrimitivePointers{
- A: P(false),
- B: P(237628372683),
- C: P(uint(654)),
- D: P(9999.43),
- E: P(float32(43.76)),
- F: &[]int{1, 2, 3, 4, 5},
- },
- QuerySettings{},
- },
-
- "datetime_struct": {
- `date=2006-01-02&date-time=2006-01-02T15:04:05Z`,
- DateTime{
- Date: time.Date(2006, time.January, 2, 0, 0, 0, 0, time.UTC),
- DateTime: time.Date(2006, time.January, 2, 15, 4, 5, 0, time.UTC),
- },
- QuerySettings{},
- },
-
- "additional_properties": {
- `a=true&bar=value&foo=true`,
- AdditionalProperties{
- A: true,
- Extras: map[string]interface{}{
- "bar": "value",
- "foo": true,
- },
- },
- QuerySettings{},
- },
-
- "recursive_struct_brackets": {
- `child[name]=Alex&name=Robert`,
- Recursive{Name: "Robert", Child: &Recursive{Name: "Alex"}},
- QuerySettings{NestedFormat: NestedQueryFormatBrackets},
- },
-
- "recursive_struct_dots": {
- `child.name=Alex&name=Robert`,
- Recursive{Name: "Robert", Child: &Recursive{Name: "Alex"}},
- QuerySettings{NestedFormat: NestedQueryFormatDots},
- },
-
- "unknown_struct_number": {
- `unknown=12`,
- UnknownStruct{
- Unknown: 12.,
- },
- QuerySettings{},
- },
-
- "unknown_struct_map_brackets": {
- `unknown[foo]=bar`,
- UnknownStruct{
- Unknown: map[string]interface{}{
- "foo": "bar",
- },
- },
- QuerySettings{NestedFormat: NestedQueryFormatBrackets},
- },
-
- "unknown_struct_map_dots": {
- `unknown.foo=bar`,
- UnknownStruct{
- Unknown: map[string]interface{}{
- "foo": "bar",
- },
- },
- QuerySettings{NestedFormat: NestedQueryFormatDots},
- },
-
- "union_string": {
- `union=hello`,
- UnionStruct{
- Union: UnionString("hello"),
- },
- QuerySettings{},
- },
-
- "union_integer": {
- `union=12`,
- UnionStruct{
- Union: UnionInteger(12),
- },
- QuerySettings{},
- },
-
- "union_struct_discriminated_a": {
- `union[a]=foo&union[b]=bar&union[type]=typeA`,
- UnionStruct{
- Union: UnionStructA{
- Type: "typeA",
- A: "foo",
- B: "bar",
- },
- },
- QuerySettings{},
- },
-
- "union_struct_discriminated_b": {
- `union[a]=foo&union[type]=typeB`,
- UnionStruct{
- Union: UnionStructB{
- Type: "typeB",
- A: "foo",
- },
- },
- QuerySettings{},
- },
-
- "union_struct_time": {
- `union=2010-05-23`,
- UnionStruct{
- Union: UnionTime(time.Date(2010, 05, 23, 0, 0, 0, 0, time.UTC)),
- },
- QuerySettings{},
- },
-
- "deeply_nested_brackets": {
- `a[b][c][d]=hello`,
- DeeplyNested{
- A: DeeplyNested1{
- B: DeeplyNested2{
- C: DeeplyNested3{
- D: P("hello"),
- },
- },
- },
- },
- QuerySettings{NestedFormat: NestedQueryFormatBrackets},
- },
-
- "deeply_nested_dots": {
- `a.b.c.d=hello`,
- DeeplyNested{
- A: DeeplyNested1{
- B: DeeplyNested2{
- C: DeeplyNested3{
- D: P("hello"),
- },
- },
- },
- },
- QuerySettings{NestedFormat: NestedQueryFormatDots},
- },
-
- "deeply_nested_brackets_empty": {
- ``,
- DeeplyNested{
- A: DeeplyNested1{
- B: DeeplyNested2{
- C: DeeplyNested3{
- D: nil,
- },
- },
- },
- },
- QuerySettings{NestedFormat: NestedQueryFormatBrackets},
- },
-
- "deeply_nested_dots_empty": {
- ``,
- DeeplyNested{
- A: DeeplyNested1{
- B: DeeplyNested2{
- C: DeeplyNested3{
- D: nil,
- },
- },
- },
- },
- QuerySettings{NestedFormat: NestedQueryFormatDots},
- },
-}
-
-func TestEncode(t *testing.T) {
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- values := MarshalWithSettings(test.val, test.settings)
- str, _ := url.QueryUnescape(values.Encode())
- if str != test.enc {
- t.Fatalf("expected %+#v to serialize to %s but got %s", test.val, test.enc, str)
- }
- })
- }
-}
diff --git a/packages/sdk/go/internal/apiquery/tag.go b/packages/sdk/go/internal/apiquery/tag.go
deleted file mode 100644
index 7ccd739c..00000000
--- a/packages/sdk/go/internal/apiquery/tag.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package apiquery
-
-import (
- "reflect"
- "strings"
-)
-
-const queryStructTag = "query"
-const formatStructTag = "format"
-
-type parsedStructTag struct {
- name string
- omitempty bool
- inline bool
-}
-
-func parseQueryStructTag(field reflect.StructField) (tag parsedStructTag, ok bool) {
- raw, ok := field.Tag.Lookup(queryStructTag)
- if !ok {
- return
- }
- parts := strings.Split(raw, ",")
- if len(parts) == 0 {
- return tag, false
- }
- tag.name = parts[0]
- for _, part := range parts[1:] {
- switch part {
- case "omitempty":
- tag.omitempty = true
- case "inline":
- tag.inline = true
- }
- }
- return
-}
-
-func parseFormatStructTag(field reflect.StructField) (format string, ok bool) {
- format, ok = field.Tag.Lookup(formatStructTag)
- return
-}
diff --git a/packages/sdk/go/internal/param/field.go b/packages/sdk/go/internal/param/field.go
deleted file mode 100644
index 4d0fd9c6..00000000
--- a/packages/sdk/go/internal/param/field.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package param
-
-import (
- "fmt"
-)
-
-type FieldLike interface{ field() }
-
-// Field is a wrapper used for all values sent to the API,
-// to distinguish zero values from null or omitted fields.
-//
-// It also allows sending arbitrary deserializable values.
-//
-// To instantiate a Field, use the helpers exported from
-// the package root: `F()`, `Null()`, `Raw()`, etc.
-type Field[T any] struct {
- FieldLike
- Value T
- Null bool
- Present bool
- Raw any
-}
-
-func (f Field[T]) String() string {
- if s, ok := any(f.Value).(fmt.Stringer); ok {
- return s.String()
- }
- return fmt.Sprintf("%v", f.Value)
-}
diff --git a/packages/sdk/go/internal/requestconfig/requestconfig.go b/packages/sdk/go/internal/requestconfig/requestconfig.go
deleted file mode 100644
index 91b70cca..00000000
--- a/packages/sdk/go/internal/requestconfig/requestconfig.go
+++ /dev/null
@@ -1,629 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package requestconfig
-
-import (
- "bytes"
- "context"
- "encoding/json"
- "fmt"
- "io"
- "math"
- "math/rand"
- "mime"
- "net/http"
- "net/url"
- "runtime"
- "strconv"
- "strings"
- "time"
-
- "github.com/sst/opencode-sdk-go/internal"
- "github.com/sst/opencode-sdk-go/internal/apierror"
- "github.com/sst/opencode-sdk-go/internal/apiform"
- "github.com/sst/opencode-sdk-go/internal/apiquery"
- "github.com/sst/opencode-sdk-go/internal/param"
-)
-
-func getDefaultHeaders() map[string]string {
- return map[string]string{
- "User-Agent": fmt.Sprintf("Opencode/Go %s", internal.PackageVersion),
- }
-}
-
-func getNormalizedOS() string {
- switch runtime.GOOS {
- case "ios":
- return "iOS"
- case "android":
- return "Android"
- case "darwin":
- return "MacOS"
- case "window":
- return "Windows"
- case "freebsd":
- return "FreeBSD"
- case "openbsd":
- return "OpenBSD"
- case "linux":
- return "Linux"
- default:
- return fmt.Sprintf("Other:%s", runtime.GOOS)
- }
-}
-
-func getNormalizedArchitecture() string {
- switch runtime.GOARCH {
- case "386":
- return "x32"
- case "amd64":
- return "x64"
- case "arm":
- return "arm"
- case "arm64":
- return "arm64"
- default:
- return fmt.Sprintf("other:%s", runtime.GOARCH)
- }
-}
-
-func getPlatformProperties() map[string]string {
- return map[string]string{
- "X-Stainless-Lang": "go",
- "X-Stainless-Package-Version": internal.PackageVersion,
- "X-Stainless-OS": getNormalizedOS(),
- "X-Stainless-Arch": getNormalizedArchitecture(),
- "X-Stainless-Runtime": "go",
- "X-Stainless-Runtime-Version": runtime.Version(),
- }
-}
-
-type RequestOption interface {
- Apply(*RequestConfig) error
-}
-
-type RequestOptionFunc func(*RequestConfig) error
-type PreRequestOptionFunc func(*RequestConfig) error
-
-func (s RequestOptionFunc) Apply(r *RequestConfig) error { return s(r) }
-func (s PreRequestOptionFunc) Apply(r *RequestConfig) error { return s(r) }
-
-func NewRequestConfig(ctx context.Context, method string, u string, body interface{}, dst interface{}, opts ...RequestOption) (*RequestConfig, error) {
- var reader io.Reader
-
- contentType := "application/json"
- hasSerializationFunc := false
-
- if body, ok := body.(json.Marshaler); ok {
- content, err := body.MarshalJSON()
- if err != nil {
- return nil, err
- }
- reader = bytes.NewBuffer(content)
- hasSerializationFunc = true
- }
- if body, ok := body.(apiform.Marshaler); ok {
- var (
- content []byte
- err error
- )
- content, contentType, err = body.MarshalMultipart()
- if err != nil {
- return nil, err
- }
- reader = bytes.NewBuffer(content)
- hasSerializationFunc = true
- }
- if body, ok := body.(apiquery.Queryer); ok {
- hasSerializationFunc = true
- params := body.URLQuery().Encode()
- if params != "" {
- u = u + "?" + params
- }
- }
- if body, ok := body.([]byte); ok {
- reader = bytes.NewBuffer(body)
- hasSerializationFunc = true
- }
- if body, ok := body.(io.Reader); ok {
- reader = body
- hasSerializationFunc = true
- }
-
- // Fallback to json serialization if none of the serialization functions that we expect
- // to see is present.
- if body != nil && !hasSerializationFunc {
- content, err := json.Marshal(body)
- if err != nil {
- return nil, err
- }
- reader = bytes.NewBuffer(content)
- }
-
- req, err := http.NewRequestWithContext(ctx, method, u, nil)
- if err != nil {
- return nil, err
- }
- if reader != nil {
- req.Header.Set("Content-Type", contentType)
- }
-
- req.Header.Set("Accept", "application/json")
- req.Header.Set("X-Stainless-Retry-Count", "0")
- req.Header.Set("X-Stainless-Timeout", "0")
- for k, v := range getDefaultHeaders() {
- req.Header.Add(k, v)
- }
-
- for k, v := range getPlatformProperties() {
- req.Header.Add(k, v)
- }
- cfg := RequestConfig{
- MaxRetries: 2,
- Context: ctx,
- Request: req,
- HTTPClient: http.DefaultClient,
- Body: reader,
- }
- cfg.ResponseBodyInto = dst
- err = cfg.Apply(opts...)
- if err != nil {
- return nil, err
- }
-
- // This must run after `cfg.Apply(...)` above in case the request timeout gets modified. We also only
- // apply our own logic for it if it's still "0" from above. If it's not, then it was deleted or modified
- // by the user and we should respect that.
- if req.Header.Get("X-Stainless-Timeout") == "0" {
- if cfg.RequestTimeout == time.Duration(0) {
- req.Header.Del("X-Stainless-Timeout")
- } else {
- req.Header.Set("X-Stainless-Timeout", strconv.Itoa(int(cfg.RequestTimeout.Seconds())))
- }
- }
-
- return &cfg, nil
-}
-
-func UseDefaultParam[T any](dst *param.Field[T], src *T) {
- if !dst.Present && src != nil {
- dst.Value = *src
- dst.Present = true
- }
-}
-
-// This interface is primarily used to describe an [*http.Client], but also
-// supports custom HTTP implementations.
-type HTTPDoer interface {
- Do(req *http.Request) (*http.Response, error)
-}
-
-// RequestConfig represents all the state related to one request.
-//
-// Editing the variables inside RequestConfig directly is unstable api. Prefer
-// composing the RequestOption instead if possible.
-type RequestConfig struct {
- MaxRetries int
- RequestTimeout time.Duration
- Context context.Context
- Request *http.Request
- BaseURL *url.URL
- // DefaultBaseURL will be used if BaseURL is not explicitly overridden using
- // WithBaseURL.
- DefaultBaseURL *url.URL
- CustomHTTPDoer HTTPDoer
- HTTPClient *http.Client
- Middlewares []middleware
- // If ResponseBodyInto not nil, then we will attempt to deserialize into
- // ResponseBodyInto. If Destination is a []byte, then it will return the body as
- // is.
- ResponseBodyInto interface{}
- // ResponseInto copies the \*http.Response of the corresponding request into the
- // given address
- ResponseInto **http.Response
- Body io.Reader
-}
-
-// middleware is exactly the same type as the Middleware type found in the [option] package,
-// but it is redeclared here for circular dependency issues.
-type middleware = func(*http.Request, middlewareNext) (*http.Response, error)
-
-// middlewareNext is exactly the same type as the MiddlewareNext type found in the [option] package,
-// but it is redeclared here for circular dependency issues.
-type middlewareNext = func(*http.Request) (*http.Response, error)
-
-func applyMiddleware(middleware middleware, next middlewareNext) middlewareNext {
- return func(req *http.Request) (res *http.Response, err error) {
- return middleware(req, next)
- }
-}
-
-func shouldRetry(req *http.Request, res *http.Response) bool {
- // If there is no way to recover the Body, then we shouldn't retry.
- if req.Body != nil && req.GetBody == nil {
- return false
- }
-
- // If there is no response, that indicates that there is a connection error
- // so we retry the request.
- if res == nil {
- return true
- }
-
- // If the header explicitly wants a retry behavior, respect that over the
- // http status code.
- if res.Header.Get("x-should-retry") == "true" {
- return true
- }
- if res.Header.Get("x-should-retry") == "false" {
- return false
- }
-
- return res.StatusCode == http.StatusRequestTimeout ||
- res.StatusCode == http.StatusConflict ||
- res.StatusCode == http.StatusTooManyRequests ||
- res.StatusCode >= http.StatusInternalServerError
-}
-
-func parseRetryAfterHeader(resp *http.Response) (time.Duration, bool) {
- if resp == nil {
- return 0, false
- }
-
- type retryData struct {
- header string
- units time.Duration
-
- // custom is used when the regular algorithm failed and is optional.
- // the returned duration is used verbatim (units is not applied).
- custom func(string) (time.Duration, bool)
- }
-
- nop := func(string) (time.Duration, bool) { return 0, false }
-
- // the headers are listed in order of preference
- retries := []retryData{
- {
- header: "Retry-After-Ms",
- units: time.Millisecond,
- custom: nop,
- },
- {
- header: "Retry-After",
- units: time.Second,
-
- // retry-after values are expressed in either number of
- // seconds or an HTTP-date indicating when to try again
- custom: func(ra string) (time.Duration, bool) {
- t, err := time.Parse(time.RFC1123, ra)
- if err != nil {
- return 0, false
- }
- return time.Until(t), true
- },
- },
- }
-
- for _, retry := range retries {
- v := resp.Header.Get(retry.header)
- if v == "" {
- continue
- }
- if retryAfter, err := strconv.ParseFloat(v, 64); err == nil {
- return time.Duration(retryAfter * float64(retry.units)), true
- }
- if d, ok := retry.custom(v); ok {
- return d, true
- }
- }
-
- return 0, false
-}
-
-// isBeforeContextDeadline reports whether the non-zero Time t is
-// before ctx's deadline. If ctx does not have a deadline, it
-// always reports true (the deadline is considered infinite).
-func isBeforeContextDeadline(t time.Time, ctx context.Context) bool {
- d, ok := ctx.Deadline()
- if !ok {
- return true
- }
- return t.Before(d)
-}
-
-// bodyWithTimeout is an io.ReadCloser which can observe a context's cancel func
-// to handle timeouts etc. It wraps an existing io.ReadCloser.
-type bodyWithTimeout struct {
- stop func() // stops the time.Timer waiting to cancel the request
- rc io.ReadCloser
-}
-
-func (b *bodyWithTimeout) Read(p []byte) (n int, err error) {
- n, err = b.rc.Read(p)
- if err == nil {
- return n, nil
- }
- if err == io.EOF {
- return n, err
- }
- return n, err
-}
-
-func (b *bodyWithTimeout) Close() error {
- err := b.rc.Close()
- b.stop()
- return err
-}
-
-func retryDelay(res *http.Response, retryCount int) time.Duration {
- // If the API asks us to wait a certain amount of time (and it's a reasonable amount),
- // just do what it says.
-
- if retryAfterDelay, ok := parseRetryAfterHeader(res); ok && 0 <= retryAfterDelay && retryAfterDelay < time.Minute {
- return retryAfterDelay
- }
-
- maxDelay := 8 * time.Second
- delay := time.Duration(0.5 * float64(time.Second) * math.Pow(2, float64(retryCount)))
- if delay > maxDelay {
- delay = maxDelay
- }
-
- jitter := rand.Int63n(int64(delay / 4))
- delay -= time.Duration(jitter)
- return delay
-}
-
-func (cfg *RequestConfig) Execute() (err error) {
- if cfg.BaseURL == nil {
- if cfg.DefaultBaseURL != nil {
- cfg.BaseURL = cfg.DefaultBaseURL
- } else {
- return fmt.Errorf("requestconfig: base url is not set")
- }
- }
-
- cfg.Request.URL, err = cfg.BaseURL.Parse(strings.TrimLeft(cfg.Request.URL.String(), "/"))
- if err != nil {
- return err
- }
-
- if cfg.Body != nil && cfg.Request.Body == nil {
- switch body := cfg.Body.(type) {
- case *bytes.Buffer:
- b := body.Bytes()
- cfg.Request.ContentLength = int64(body.Len())
- cfg.Request.GetBody = func() (io.ReadCloser, error) { return io.NopCloser(bytes.NewReader(b)), nil }
- cfg.Request.Body, _ = cfg.Request.GetBody()
- case *bytes.Reader:
- cfg.Request.ContentLength = int64(body.Len())
- cfg.Request.GetBody = func() (io.ReadCloser, error) {
- _, err := body.Seek(0, 0)
- return io.NopCloser(body), err
- }
- cfg.Request.Body, _ = cfg.Request.GetBody()
- default:
- if rc, ok := body.(io.ReadCloser); ok {
- cfg.Request.Body = rc
- } else {
- cfg.Request.Body = io.NopCloser(body)
- }
- }
- }
-
- handler := cfg.HTTPClient.Do
- if cfg.CustomHTTPDoer != nil {
- handler = cfg.CustomHTTPDoer.Do
- }
- for i := len(cfg.Middlewares) - 1; i >= 0; i -= 1 {
- handler = applyMiddleware(cfg.Middlewares[i], handler)
- }
-
- // Don't send the current retry count in the headers if the caller modified the header defaults.
- shouldSendRetryCount := cfg.Request.Header.Get("X-Stainless-Retry-Count") == "0"
-
- var res *http.Response
- var cancel context.CancelFunc
- for retryCount := 0; retryCount <= cfg.MaxRetries; retryCount += 1 {
- ctx := cfg.Request.Context()
- if cfg.RequestTimeout != time.Duration(0) && isBeforeContextDeadline(time.Now().Add(cfg.RequestTimeout), ctx) {
- ctx, cancel = context.WithTimeout(ctx, cfg.RequestTimeout)
- defer func() {
- // The cancel function is nil if it was handed off to be handled in a different scope.
- if cancel != nil {
- cancel()
- }
- }()
- }
-
- req := cfg.Request.Clone(ctx)
- if shouldSendRetryCount {
- req.Header.Set("X-Stainless-Retry-Count", strconv.Itoa(retryCount))
- }
-
- res, err = handler(req)
- if ctx != nil && ctx.Err() != nil {
- return ctx.Err()
- }
- if !shouldRetry(cfg.Request, res) || retryCount >= cfg.MaxRetries {
- break
- }
-
- // Prepare next request and wait for the retry delay
- if cfg.Request.GetBody != nil {
- cfg.Request.Body, err = cfg.Request.GetBody()
- if err != nil {
- return err
- }
- }
-
- // Can't actually refresh the body, so we don't attempt to retry here
- if cfg.Request.GetBody == nil && cfg.Request.Body != nil {
- break
- }
-
- time.Sleep(retryDelay(res, retryCount))
- }
-
- // Save *http.Response if it is requested to, even if there was an error making the request. This is
- // useful in cases where you might want to debug by inspecting the response. Note that if err != nil,
- // the response should be generally be empty, but there are edge cases.
- if cfg.ResponseInto != nil {
- *cfg.ResponseInto = res
- }
- if responseBodyInto, ok := cfg.ResponseBodyInto.(**http.Response); ok {
- *responseBodyInto = res
- }
-
- // If there was a connection error in the final request or any other transport error,
- // return that early without trying to coerce into an APIError.
- if err != nil {
- return err
- }
-
- if res.StatusCode >= 400 {
- contents, err := io.ReadAll(res.Body)
- res.Body.Close()
- if err != nil {
- return err
- }
-
- // If there is an APIError, re-populate the response body so that debugging
- // utilities can conveniently dump the response without issue.
- res.Body = io.NopCloser(bytes.NewBuffer(contents))
-
- // Load the contents into the error format if it is provided.
- aerr := apierror.Error{Request: cfg.Request, Response: res, StatusCode: res.StatusCode}
- err = aerr.UnmarshalJSON(contents)
- if err != nil {
- return err
- }
- return &aerr
- }
-
- _, intoCustomResponseBody := cfg.ResponseBodyInto.(**http.Response)
- if cfg.ResponseBodyInto == nil || intoCustomResponseBody {
- // We aren't reading the response body in this scope, but whoever is will need the
- // cancel func from the context to observe request timeouts.
- // Put the cancel function in the response body so it can be handled elsewhere.
- if cancel != nil {
- res.Body = &bodyWithTimeout{rc: res.Body, stop: cancel}
- cancel = nil
- }
- return nil
- }
-
- contents, err := io.ReadAll(res.Body)
- res.Body.Close()
- if err != nil {
- return fmt.Errorf("error reading response body: %w", err)
- }
-
- // If we are not json, return plaintext
- contentType := res.Header.Get("content-type")
- mediaType, _, _ := mime.ParseMediaType(contentType)
- isJSON := strings.Contains(mediaType, "application/json") || strings.HasSuffix(mediaType, "+json")
- if !isJSON {
- switch dst := cfg.ResponseBodyInto.(type) {
- case *string:
- *dst = string(contents)
- case **string:
- tmp := string(contents)
- *dst = &tmp
- case *[]byte:
- *dst = contents
- default:
- return fmt.Errorf("expected destination type of 'string' or '[]byte' for responses with content-type '%s' that is not 'application/json'", contentType)
- }
- return nil
- }
-
- switch dst := cfg.ResponseBodyInto.(type) {
- // If the response happens to be a byte array, deserialize the body as-is.
- case *[]byte:
- *dst = contents
- default:
- err = json.NewDecoder(bytes.NewReader(contents)).Decode(cfg.ResponseBodyInto)
- if err != nil {
- return fmt.Errorf("error parsing response json: %w", err)
- }
- }
-
- return nil
-}
-
-func ExecuteNewRequest(ctx context.Context, method string, u string, body interface{}, dst interface{}, opts ...RequestOption) error {
- cfg, err := NewRequestConfig(ctx, method, u, body, dst, opts...)
- if err != nil {
- return err
- }
- return cfg.Execute()
-}
-
-func (cfg *RequestConfig) Clone(ctx context.Context) *RequestConfig {
- if cfg == nil {
- return nil
- }
- req := cfg.Request.Clone(ctx)
- var err error
- if req.Body != nil {
- req.Body, err = req.GetBody()
- }
- if err != nil {
- return nil
- }
- new := &RequestConfig{
- MaxRetries: cfg.MaxRetries,
- RequestTimeout: cfg.RequestTimeout,
- Context: ctx,
- Request: req,
- BaseURL: cfg.BaseURL,
- HTTPClient: cfg.HTTPClient,
- Middlewares: cfg.Middlewares,
- }
-
- return new
-}
-
-func (cfg *RequestConfig) Apply(opts ...RequestOption) error {
- for _, opt := range opts {
- err := opt.Apply(cfg)
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-// PreRequestOptions is used to collect all the options which need to be known before
-// a call to [RequestConfig.ExecuteNewRequest], such as path parameters
-// or global defaults.
-// PreRequestOptions will return a [RequestConfig] with the options applied.
-//
-// Only request option functions of type [PreRequestOptionFunc] are applied.
-func PreRequestOptions(opts ...RequestOption) (RequestConfig, error) {
- cfg := RequestConfig{}
- for _, opt := range opts {
- if opt, ok := opt.(PreRequestOptionFunc); ok {
- err := opt.Apply(&cfg)
- if err != nil {
- return cfg, err
- }
- }
- }
- return cfg, nil
-}
-
-// WithDefaultBaseURL returns a RequestOption that sets the client's default Base URL.
-// This is always overridden by setting a base URL with WithBaseURL.
-// WithBaseURL should be used instead of WithDefaultBaseURL except in internal code.
-func WithDefaultBaseURL(baseURL string) RequestOption {
- u, err := url.Parse(baseURL)
- return RequestOptionFunc(func(r *RequestConfig) error {
- if err != nil {
- return err
- }
- r.DefaultBaseURL = u
- return nil
- })
-}
diff --git a/packages/sdk/go/internal/testutil/testutil.go b/packages/sdk/go/internal/testutil/testutil.go
deleted file mode 100644
index 826d266f..00000000
--- a/packages/sdk/go/internal/testutil/testutil.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package testutil
-
-import (
- "net/http"
- "os"
- "strconv"
- "testing"
-)
-
-func CheckTestServer(t *testing.T, url string) bool {
- if _, err := http.Get(url); err != nil {
- const SKIP_MOCK_TESTS = "SKIP_MOCK_TESTS"
- if str, ok := os.LookupEnv(SKIP_MOCK_TESTS); ok {
- skip, err := strconv.ParseBool(str)
- if err != nil {
- t.Fatalf("strconv.ParseBool(os.LookupEnv(%s)) failed: %s", SKIP_MOCK_TESTS, err)
- }
- if skip {
- t.Skip("The test will not run without a mock Prism server running against your OpenAPI spec")
- return false
- }
- t.Errorf("The test will not run without a mock Prism server running against your OpenAPI spec. You can set the environment variable %s to true to skip running any tests that require the mock server", SKIP_MOCK_TESTS)
- return false
- }
- }
- return true
-}
diff --git a/packages/sdk/go/internal/version.go b/packages/sdk/go/internal/version.go
deleted file mode 100644
index 64dcebbb..00000000
--- a/packages/sdk/go/internal/version.go
+++ /dev/null
@@ -1,5 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package internal
-
-const PackageVersion = "0.1.0-alpha.8" // x-release-please-version
diff --git a/packages/sdk/go/lib/.keep b/packages/sdk/go/lib/.keep
deleted file mode 100644
index 5e2c99fd..00000000
--- a/packages/sdk/go/lib/.keep
+++ /dev/null
@@ -1,4 +0,0 @@
-File generated from our OpenAPI spec by Stainless.
-
-This directory can be used to store custom files to expand the SDK.
-It is ignored by Stainless code generation and its content (other than this keep file) won't be touched.
\ No newline at end of file
diff --git a/packages/sdk/go/option/middleware.go b/packages/sdk/go/option/middleware.go
deleted file mode 100644
index 8ec9dd60..00000000
--- a/packages/sdk/go/option/middleware.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package option
-
-import (
- "log"
- "net/http"
- "net/http/httputil"
-)
-
-// WithDebugLog logs the HTTP request and response content.
-// If the logger parameter is nil, it uses the default logger.
-//
-// WithDebugLog is for debugging and development purposes only.
-// It should not be used in production code. The behavior and interface
-// of WithDebugLog is not guaranteed to be stable.
-func WithDebugLog(logger *log.Logger) RequestOption {
- return WithMiddleware(func(req *http.Request, nxt MiddlewareNext) (*http.Response, error) {
- if logger == nil {
- logger = log.Default()
- }
-
- if reqBytes, err := httputil.DumpRequest(req, true); err == nil {
- logger.Printf("Request Content:\n%s\n", reqBytes)
- }
-
- resp, err := nxt(req)
- if err != nil {
- return resp, err
- }
-
- if respBytes, err := httputil.DumpResponse(resp, true); err == nil {
- logger.Printf("Response Content:\n%s\n", respBytes)
- }
-
- return resp, err
- })
-}
diff --git a/packages/sdk/go/option/requestoption.go b/packages/sdk/go/option/requestoption.go
deleted file mode 100644
index 68478066..00000000
--- a/packages/sdk/go/option/requestoption.go
+++ /dev/null
@@ -1,267 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package option
-
-import (
- "bytes"
- "fmt"
- "io"
- "net/http"
- "net/url"
- "strings"
- "time"
-
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/tidwall/sjson"
-)
-
-// RequestOption is an option for the requests made by the opencode API Client
-// which can be supplied to clients, services, and methods. You can read more about this functional
-// options pattern in our [README].
-//
-// [README]: https://pkg.go.dev/github.com/sst/opencode-sdk-go#readme-requestoptions
-type RequestOption = requestconfig.RequestOption
-
-// WithBaseURL returns a RequestOption that sets the BaseURL for the client.
-//
-// For security reasons, ensure that the base URL is trusted.
-func WithBaseURL(base string) RequestOption {
- u, err := url.Parse(base)
- if err == nil && u.Path != "" && !strings.HasSuffix(u.Path, "/") {
- u.Path += "/"
- }
-
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- if err != nil {
- return fmt.Errorf("requestoption: WithBaseURL failed to parse url %s", err)
- }
-
- r.BaseURL = u
- return nil
- })
-}
-
-// HTTPClient is primarily used to describe an [*http.Client], but also
-// supports custom implementations.
-//
-// For bespoke implementations, prefer using an [*http.Client] with a
-// custom transport. See [http.RoundTripper] for further information.
-type HTTPClient interface {
- Do(*http.Request) (*http.Response, error)
-}
-
-// WithHTTPClient returns a RequestOption that changes the underlying http client used to make this
-// request, which by default is [http.DefaultClient].
-//
-// For custom uses cases, it is recommended to provide an [*http.Client] with a custom
-// [http.RoundTripper] as its transport, rather than directly implementing [HTTPClient].
-func WithHTTPClient(client HTTPClient) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- if client == nil {
- return fmt.Errorf("requestoption: custom http client cannot be nil")
- }
-
- if c, ok := client.(*http.Client); ok {
- // Prefer the native client if possible.
- r.HTTPClient = c
- r.CustomHTTPDoer = nil
- } else {
- r.CustomHTTPDoer = client
- }
-
- return nil
- })
-}
-
-// MiddlewareNext is a function which is called by a middleware to pass an HTTP request
-// to the next stage in the middleware chain.
-type MiddlewareNext = func(*http.Request) (*http.Response, error)
-
-// Middleware is a function which intercepts HTTP requests, processing or modifying
-// them, and then passing the request to the next middleware or handler
-// in the chain by calling the provided MiddlewareNext function.
-type Middleware = func(*http.Request, MiddlewareNext) (*http.Response, error)
-
-// WithMiddleware returns a RequestOption that applies the given middleware
-// to the requests made. Each middleware will execute in the order they were given.
-func WithMiddleware(middlewares ...Middleware) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- r.Middlewares = append(r.Middlewares, middlewares...)
- return nil
- })
-}
-
-// WithMaxRetries returns a RequestOption that sets the maximum number of retries that the client
-// attempts to make. When given 0, the client only makes one request. By
-// default, the client retries two times.
-//
-// WithMaxRetries panics when retries is negative.
-func WithMaxRetries(retries int) RequestOption {
- if retries < 0 {
- panic("option: cannot have fewer than 0 retries")
- }
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- r.MaxRetries = retries
- return nil
- })
-}
-
-// WithHeader returns a RequestOption that sets the header value to the associated key. It overwrites
-// any value if there was one already present.
-func WithHeader(key, value string) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- r.Request.Header.Set(key, value)
- return nil
- })
-}
-
-// WithHeaderAdd returns a RequestOption that adds the header value to the associated key. It appends
-// onto any existing values.
-func WithHeaderAdd(key, value string) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- r.Request.Header.Add(key, value)
- return nil
- })
-}
-
-// WithHeaderDel returns a RequestOption that deletes the header value(s) associated with the given key.
-func WithHeaderDel(key string) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- r.Request.Header.Del(key)
- return nil
- })
-}
-
-// WithQuery returns a RequestOption that sets the query value to the associated key. It overwrites
-// any value if there was one already present.
-func WithQuery(key, value string) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- query := r.Request.URL.Query()
- query.Set(key, value)
- r.Request.URL.RawQuery = query.Encode()
- return nil
- })
-}
-
-// WithQueryAdd returns a RequestOption that adds the query value to the associated key. It appends
-// onto any existing values.
-func WithQueryAdd(key, value string) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- query := r.Request.URL.Query()
- query.Add(key, value)
- r.Request.URL.RawQuery = query.Encode()
- return nil
- })
-}
-
-// WithQueryDel returns a RequestOption that deletes the query value(s) associated with the key.
-func WithQueryDel(key string) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- query := r.Request.URL.Query()
- query.Del(key)
- r.Request.URL.RawQuery = query.Encode()
- return nil
- })
-}
-
-// WithJSONSet returns a RequestOption that sets the body's JSON value associated with the key.
-// The key accepts a string as defined by the [sjson format].
-//
-// [sjson format]: https://github.com/tidwall/sjson
-func WithJSONSet(key string, value interface{}) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) (err error) {
- var b []byte
-
- if r.Body == nil {
- b, err = sjson.SetBytes(nil, key, value)
- if err != nil {
- return err
- }
- } else if buffer, ok := r.Body.(*bytes.Buffer); ok {
- b = buffer.Bytes()
- b, err = sjson.SetBytes(b, key, value)
- if err != nil {
- return err
- }
- } else {
- return fmt.Errorf("cannot use WithJSONSet on a body that is not serialized as *bytes.Buffer")
- }
-
- r.Body = bytes.NewBuffer(b)
- return nil
- })
-}
-
-// WithJSONDel returns a RequestOption that deletes the body's JSON value associated with the key.
-// The key accepts a string as defined by the [sjson format].
-//
-// [sjson format]: https://github.com/tidwall/sjson
-func WithJSONDel(key string) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) (err error) {
- if buffer, ok := r.Body.(*bytes.Buffer); ok {
- b := buffer.Bytes()
- b, err = sjson.DeleteBytes(b, key)
- if err != nil {
- return err
- }
- r.Body = bytes.NewBuffer(b)
- return nil
- }
-
- return fmt.Errorf("cannot use WithJSONDel on a body that is not serialized as *bytes.Buffer")
- })
-}
-
-// WithResponseBodyInto returns a RequestOption that overwrites the deserialization target with
-// the given destination. If provided, we don't deserialize into the default struct.
-func WithResponseBodyInto(dst any) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- r.ResponseBodyInto = dst
- return nil
- })
-}
-
-// WithResponseInto returns a RequestOption that copies the [*http.Response] into the given address.
-func WithResponseInto(dst **http.Response) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- r.ResponseInto = dst
- return nil
- })
-}
-
-// WithRequestBody returns a RequestOption that provides a custom serialized body with the given
-// content type.
-//
-// body accepts an io.Reader or raw []bytes.
-func WithRequestBody(contentType string, body any) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- if reader, ok := body.(io.Reader); ok {
- r.Body = reader
- return r.Apply(WithHeader("Content-Type", contentType))
- }
-
- if b, ok := body.([]byte); ok {
- r.Body = bytes.NewBuffer(b)
- return r.Apply(WithHeader("Content-Type", contentType))
- }
-
- return fmt.Errorf("body must be a byte slice or implement io.Reader")
- })
-}
-
-// WithRequestTimeout returns a RequestOption that sets the timeout for
-// each request attempt. This should be smaller than the timeout defined in
-// the context, which spans all retries.
-func WithRequestTimeout(dur time.Duration) RequestOption {
- return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
- r.RequestTimeout = dur
- return nil
- })
-}
-
-// WithEnvironmentProduction returns a RequestOption that sets the current
-// environment to be the "production" environment. An environment specifies which base URL
-// to use by default.
-func WithEnvironmentProduction() RequestOption {
- return requestconfig.WithDefaultBaseURL("http://localhost:54321/")
-}
diff --git a/packages/sdk/go/packages/ssestream/ssestream.go b/packages/sdk/go/packages/ssestream/ssestream.go
deleted file mode 100644
index cc0afb7b..00000000
--- a/packages/sdk/go/packages/ssestream/ssestream.go
+++ /dev/null
@@ -1,181 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package ssestream
-
-import (
- "bufio"
- "bytes"
- "encoding/json"
- "io"
- "net/http"
- "strings"
-)
-
-type Decoder interface {
- Event() Event
- Next() bool
- Close() error
- Err() error
-}
-
-func NewDecoder(res *http.Response) Decoder {
- if res == nil || res.Body == nil {
- return nil
- }
-
- var decoder Decoder
- contentType := res.Header.Get("content-type")
- if t, ok := decoderTypes[contentType]; ok {
- decoder = t(res.Body)
- } else {
- scn := bufio.NewScanner(res.Body)
- scn.Buffer(nil, bufio.MaxScanTokenSize<<9)
- decoder = &eventStreamDecoder{rc: res.Body, scn: scn}
- }
- return decoder
-}
-
-var decoderTypes = map[string](func(io.ReadCloser) Decoder){}
-
-func RegisterDecoder(contentType string, decoder func(io.ReadCloser) Decoder) {
- decoderTypes[strings.ToLower(contentType)] = decoder
-}
-
-type Event struct {
- Type string
- Data []byte
-}
-
-// A base implementation of a Decoder for text/event-stream.
-type eventStreamDecoder struct {
- evt Event
- rc io.ReadCloser
- scn *bufio.Scanner
- err error
-}
-
-func (s *eventStreamDecoder) Next() bool {
- if s.err != nil {
- return false
- }
-
- event := ""
- data := bytes.NewBuffer(nil)
-
- for s.scn.Scan() {
- txt := s.scn.Bytes()
-
- // Dispatch event on an empty line
- if len(txt) == 0 {
- s.evt = Event{
- Type: event,
- Data: data.Bytes(),
- }
- return true
- }
-
- // Split a string like "event: bar" into name="event" and value=" bar".
- name, value, _ := bytes.Cut(txt, []byte(":"))
-
- // Consume an optional space after the colon if it exists.
- if len(value) > 0 && value[0] == ' ' {
- value = value[1:]
- }
-
- switch string(name) {
- case "":
- // An empty line in the for ": something" is a comment and should be ignored.
- continue
- case "event":
- event = string(value)
- case "data":
- _, s.err = data.Write(value)
- if s.err != nil {
- break
- }
- _, s.err = data.WriteRune('\n')
- if s.err != nil {
- break
- }
- }
- }
-
- if s.scn.Err() != nil {
- s.err = s.scn.Err()
- }
-
- return false
-}
-
-func (s *eventStreamDecoder) Event() Event {
- return s.evt
-}
-
-func (s *eventStreamDecoder) Close() error {
- return s.rc.Close()
-}
-
-func (s *eventStreamDecoder) Err() error {
- return s.err
-}
-
-type Stream[T any] struct {
- decoder Decoder
- cur T
- err error
-}
-
-func NewStream[T any](decoder Decoder, err error) *Stream[T] {
- return &Stream[T]{
- decoder: decoder,
- err: err,
- }
-}
-
-// Next returns false if the stream has ended or an error occurred.
-// Call Stream.Current() to get the current value.
-// Call Stream.Err() to get the error.
-//
-// for stream.Next() {
-// data := stream.Current()
-// }
-//
-// if stream.Err() != nil {
-// ...
-// }
-func (s *Stream[T]) Next() bool {
- if s.err != nil {
- return false
- }
-
- for s.decoder.Next() {
- var nxt T
- s.err = json.Unmarshal(s.decoder.Event().Data, &nxt)
- if s.err != nil {
- return false
- }
- s.cur = nxt
- return true
- }
-
- // decoder.Next() may be false because of an error
- s.err = s.decoder.Err()
-
- return false
-}
-
-func (s *Stream[T]) Current() T {
- return s.cur
-}
-
-func (s *Stream[T]) Err() error {
- return s.err
-}
-
-func (s *Stream[T]) Close() error {
- if s.decoder == nil {
- // already closed
- return nil
- }
- return s.decoder.Close()
-}
diff --git a/packages/sdk/go/release-please-config.json b/packages/sdk/go/release-please-config.json
deleted file mode 100644
index a38198ec..00000000
--- a/packages/sdk/go/release-please-config.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "packages": {
- ".": {}
- },
- "$schema": "https://raw.githubusercontent.com/stainless-api/release-please/main/schemas/config.json",
- "include-v-in-tag": true,
- "include-component-in-tag": false,
- "versioning": "prerelease",
- "prerelease": true,
- "bump-minor-pre-major": true,
- "bump-patch-for-minor-pre-major": false,
- "pull-request-header": "Automated Release PR",
- "pull-request-title-pattern": "release: ${version}",
- "changelog-sections": [
- {
- "type": "feat",
- "section": "Features"
- },
- {
- "type": "fix",
- "section": "Bug Fixes"
- },
- {
- "type": "perf",
- "section": "Performance Improvements"
- },
- {
- "type": "revert",
- "section": "Reverts"
- },
- {
- "type": "chore",
- "section": "Chores"
- },
- {
- "type": "docs",
- "section": "Documentation"
- },
- {
- "type": "style",
- "section": "Styles"
- },
- {
- "type": "refactor",
- "section": "Refactors"
- },
- {
- "type": "test",
- "section": "Tests",
- "hidden": true
- },
- {
- "type": "build",
- "section": "Build System"
- },
- {
- "type": "ci",
- "section": "Continuous Integration",
- "hidden": true
- }
- ],
- "release-type": "go",
- "extra-files": [
- "internal/version.go",
- "README.md"
- ]
-}
\ No newline at end of file
diff --git a/packages/sdk/go/scripts/bootstrap b/packages/sdk/go/scripts/bootstrap
deleted file mode 100755
index d6ac1654..00000000
--- a/packages/sdk/go/scripts/bootstrap
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "$(dirname "$0")/.."
-
-if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ]; then
- brew bundle check >/dev/null 2>&1 || {
- echo "==> Installing Homebrew dependencies…"
- brew bundle
- }
-fi
-
-echo "==> Installing Go dependencies…"
-
-go mod tidy -e
diff --git a/packages/sdk/go/scripts/format b/packages/sdk/go/scripts/format
deleted file mode 100755
index db2a3fa2..00000000
--- a/packages/sdk/go/scripts/format
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "$(dirname "$0")/.."
-
-echo "==> Running gofmt -s -w"
-gofmt -s -w .
diff --git a/packages/sdk/go/scripts/lint b/packages/sdk/go/scripts/lint
deleted file mode 100755
index 7e03a7be..00000000
--- a/packages/sdk/go/scripts/lint
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "$(dirname "$0")/.."
-
-echo "==> Running Go build"
-go build ./...
-
-echo "==> Checking tests compile"
-go test -run=^$ ./...
diff --git a/packages/sdk/go/scripts/mock b/packages/sdk/go/scripts/mock
deleted file mode 100755
index d2814ae6..00000000
--- a/packages/sdk/go/scripts/mock
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "$(dirname "$0")/.."
-
-if [[ -n "$1" && "$1" != '--'* ]]; then
- URL="$1"
- shift
-else
- URL="$(grep 'openapi_spec_url' .stats.yml | cut -d' ' -f2)"
-fi
-
-# Check if the URL is empty
-if [ -z "$URL" ]; then
- echo "Error: No OpenAPI spec path/url provided or found in .stats.yml"
- exit 1
-fi
-
-echo "==> Starting mock server with URL ${URL}"
-
-# Run prism mock on the given spec
-if [ "$1" == "--daemon" ]; then
- npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" &> .prism.log &
-
- # Wait for server to come online
- echo -n "Waiting for server"
- while ! grep -q "✖ fatal\|Prism is listening" ".prism.log" ; do
- echo -n "."
- sleep 0.1
- done
-
- if grep -q "✖ fatal" ".prism.log"; then
- cat .prism.log
- exit 1
- fi
-
- echo
-else
- npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL"
-fi
diff --git a/packages/sdk/go/scripts/test b/packages/sdk/go/scripts/test
deleted file mode 100755
index efebceae..00000000
--- a/packages/sdk/go/scripts/test
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "$(dirname "$0")/.."
-
-RED='\033[0;31m'
-GREEN='\033[0;32m'
-YELLOW='\033[0;33m'
-NC='\033[0m' # No Color
-
-function prism_is_running() {
- curl --silent "http://localhost:4010" >/dev/null 2>&1
-}
-
-kill_server_on_port() {
- pids=$(lsof -t -i tcp:"$1" || echo "")
- if [ "$pids" != "" ]; then
- kill "$pids"
- echo "Stopped $pids."
- fi
-}
-
-function is_overriding_api_base_url() {
- [ -n "$TEST_API_BASE_URL" ]
-}
-
-if ! is_overriding_api_base_url && ! prism_is_running ; then
- # When we exit this script, make sure to kill the background mock server process
- trap 'kill_server_on_port 4010' EXIT
-
- # Start the dev server
- ./scripts/mock --daemon
-fi
-
-if is_overriding_api_base_url ; then
- echo -e "${GREEN}✔ Running tests against ${TEST_API_BASE_URL}${NC}"
- echo
-elif ! prism_is_running ; then
- echo -e "${RED}ERROR:${NC} The test suite will not run without a mock Prism server"
- echo -e "running against your OpenAPI spec."
- echo
- echo -e "To run the server, pass in the path or url of your OpenAPI"
- echo -e "spec to the prism command:"
- echo
- echo -e " \$ ${YELLOW}npm exec --package=@stoplight/prism-cli@~5.3.2 -- prism mock path/to/your.openapi.yml${NC}"
- echo
-
- exit 1
-else
- echo -e "${GREEN}✔ Mock prism server is running with your OpenAPI spec${NC}"
- echo
-fi
-
-echo "==> Running tests"
-go test ./... "$@"
diff --git a/packages/sdk/go/session.go b/packages/sdk/go/session.go
deleted file mode 100644
index d38c37e0..00000000
--- a/packages/sdk/go/session.go
+++ /dev/null
@@ -1,2158 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "errors"
- "fmt"
- "net/http"
- "reflect"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
- "github.com/sst/opencode-sdk-go/internal/param"
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
- "github.com/sst/opencode-sdk-go/shared"
- "github.com/tidwall/gjson"
-)
-
-// SessionService contains methods and other services that help with interacting
-// with the opencode API.
-//
-// Note, unlike clients, this service does not read variables from the environment
-// automatically. You should not instantiate this service directly, and instead use
-// the [NewSessionService] method instead.
-type SessionService struct {
- Options []option.RequestOption
- Permissions *SessionPermissionService
-}
-
-// NewSessionService generates a new service that applies the given options to each
-// request. These options are applied after the parent client's options (if there
-// is one), and before any request-specific options.
-func NewSessionService(opts ...option.RequestOption) (r *SessionService) {
- r = &SessionService{}
- r.Options = opts
- r.Permissions = NewSessionPermissionService(opts...)
- return
-}
-
-// Create a new session
-func (r *SessionService) New(ctx context.Context, opts ...option.RequestOption) (res *Session, err error) {
- opts = append(r.Options[:], opts...)
- path := "session"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// List all sessions
-func (r *SessionService) List(ctx context.Context, opts ...option.RequestOption) (res *[]Session, err error) {
- opts = append(r.Options[:], opts...)
- path := "session"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
- return
-}
-
-// Delete a session and all its data
-func (r *SessionService) Delete(ctx context.Context, id string, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...)
- return
-}
-
-// Abort a session
-func (r *SessionService) Abort(ctx context.Context, id string, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/abort", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Create and send a new message to a session
-func (r *SessionService) Chat(ctx context.Context, id string, body SessionChatParams, opts ...option.RequestOption) (res *AssistantMessage, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/message", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
- return
-}
-
-// Analyze the app and create an AGENTS.md file
-func (r *SessionService) Init(ctx context.Context, id string, body SessionInitParams, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/init", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
- return
-}
-
-// Get a message from a session
-func (r *SessionService) Message(ctx context.Context, id string, messageID string, opts ...option.RequestOption) (res *SessionMessageResponse, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- if messageID == "" {
- err = errors.New("missing required messageID parameter")
- return
- }
- path := fmt.Sprintf("session/%s/message/%s", id, messageID)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
- return
-}
-
-// List messages for a session
-func (r *SessionService) Messages(ctx context.Context, id string, opts ...option.RequestOption) (res *[]SessionMessagesResponse, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/message", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
- return
-}
-
-// Revert a message
-func (r *SessionService) Revert(ctx context.Context, id string, body SessionRevertParams, opts ...option.RequestOption) (res *Session, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/revert", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
- return
-}
-
-// Share a session
-func (r *SessionService) Share(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/share", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Summarize the session
-func (r *SessionService) Summarize(ctx context.Context, id string, body SessionSummarizeParams, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/summarize", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
- return
-}
-
-// Restore all reverted messages
-func (r *SessionService) Unrevert(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/unrevert", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Unshare the session
-func (r *SessionService) Unshare(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/share", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...)
- return
-}
-
-type AssistantMessage struct {
- ID string `json:"id,required"`
- Cost float64 `json:"cost,required"`
- Mode string `json:"mode,required"`
- ModelID string `json:"modelID,required"`
- Path AssistantMessagePath `json:"path,required"`
- ProviderID string `json:"providerID,required"`
- Role AssistantMessageRole `json:"role,required"`
- SessionID string `json:"sessionID,required"`
- System []string `json:"system,required"`
- Time AssistantMessageTime `json:"time,required"`
- Tokens AssistantMessageTokens `json:"tokens,required"`
- Error AssistantMessageError `json:"error"`
- Summary bool `json:"summary"`
- JSON assistantMessageJSON `json:"-"`
-}
-
-// assistantMessageJSON contains the JSON metadata for the struct
-// [AssistantMessage]
-type assistantMessageJSON struct {
- ID apijson.Field
- Cost apijson.Field
- Mode apijson.Field
- ModelID apijson.Field
- Path apijson.Field
- ProviderID apijson.Field
- Role apijson.Field
- SessionID apijson.Field
- System apijson.Field
- Time apijson.Field
- Tokens apijson.Field
- Error apijson.Field
- Summary apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AssistantMessage) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r assistantMessageJSON) RawJSON() string {
- return r.raw
-}
-
-func (r AssistantMessage) implementsMessage() {}
-
-type AssistantMessagePath struct {
- Cwd string `json:"cwd,required"`
- Root string `json:"root,required"`
- JSON assistantMessagePathJSON `json:"-"`
-}
-
-// assistantMessagePathJSON contains the JSON metadata for the struct
-// [AssistantMessagePath]
-type assistantMessagePathJSON struct {
- Cwd apijson.Field
- Root apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AssistantMessagePath) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r assistantMessagePathJSON) RawJSON() string {
- return r.raw
-}
-
-type AssistantMessageRole string
-
-const (
- AssistantMessageRoleAssistant AssistantMessageRole = "assistant"
-)
-
-func (r AssistantMessageRole) IsKnown() bool {
- switch r {
- case AssistantMessageRoleAssistant:
- return true
- }
- return false
-}
-
-type AssistantMessageTime struct {
- Created float64 `json:"created,required"`
- Completed float64 `json:"completed"`
- JSON assistantMessageTimeJSON `json:"-"`
-}
-
-// assistantMessageTimeJSON contains the JSON metadata for the struct
-// [AssistantMessageTime]
-type assistantMessageTimeJSON struct {
- Created apijson.Field
- Completed apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AssistantMessageTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r assistantMessageTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type AssistantMessageTokens struct {
- Cache AssistantMessageTokensCache `json:"cache,required"`
- Input float64 `json:"input,required"`
- Output float64 `json:"output,required"`
- Reasoning float64 `json:"reasoning,required"`
- JSON assistantMessageTokensJSON `json:"-"`
-}
-
-// assistantMessageTokensJSON contains the JSON metadata for the struct
-// [AssistantMessageTokens]
-type assistantMessageTokensJSON struct {
- Cache apijson.Field
- Input apijson.Field
- Output apijson.Field
- Reasoning apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AssistantMessageTokens) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r assistantMessageTokensJSON) RawJSON() string {
- return r.raw
-}
-
-type AssistantMessageTokensCache struct {
- Read float64 `json:"read,required"`
- Write float64 `json:"write,required"`
- JSON assistantMessageTokensCacheJSON `json:"-"`
-}
-
-// assistantMessageTokensCacheJSON contains the JSON metadata for the struct
-// [AssistantMessageTokensCache]
-type assistantMessageTokensCacheJSON struct {
- Read apijson.Field
- Write apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AssistantMessageTokensCache) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r assistantMessageTokensCacheJSON) RawJSON() string {
- return r.raw
-}
-
-type AssistantMessageError struct {
- // This field can have the runtime type of [shared.ProviderAuthErrorData],
- // [shared.UnknownErrorData], [interface{}].
- Data interface{} `json:"data,required"`
- Name AssistantMessageErrorName `json:"name,required"`
- JSON assistantMessageErrorJSON `json:"-"`
- union AssistantMessageErrorUnion
-}
-
-// assistantMessageErrorJSON contains the JSON metadata for the struct
-// [AssistantMessageError]
-type assistantMessageErrorJSON struct {
- Data apijson.Field
- Name apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r assistantMessageErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *AssistantMessageError) UnmarshalJSON(data []byte) (err error) {
- *r = AssistantMessageError{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [AssistantMessageErrorUnion] interface which you can cast to
-// the specific types for more type safety.
-//
-// Possible runtime types of the union are [shared.ProviderAuthError],
-// [shared.UnknownError], [AssistantMessageErrorMessageOutputLengthError],
-// [shared.MessageAbortedError].
-func (r AssistantMessageError) AsUnion() AssistantMessageErrorUnion {
- return r.union
-}
-
-// Union satisfied by [shared.ProviderAuthError], [shared.UnknownError],
-// [AssistantMessageErrorMessageOutputLengthError] or [shared.MessageAbortedError].
-type AssistantMessageErrorUnion interface {
- ImplementsAssistantMessageError()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*AssistantMessageErrorUnion)(nil)).Elem(),
- "name",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(shared.ProviderAuthError{}),
- DiscriminatorValue: "ProviderAuthError",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(shared.UnknownError{}),
- DiscriminatorValue: "UnknownError",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(AssistantMessageErrorMessageOutputLengthError{}),
- DiscriminatorValue: "MessageOutputLengthError",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(shared.MessageAbortedError{}),
- DiscriminatorValue: "MessageAbortedError",
- },
- )
-}
-
-type AssistantMessageErrorMessageOutputLengthError struct {
- Data interface{} `json:"data,required"`
- Name AssistantMessageErrorMessageOutputLengthErrorName `json:"name,required"`
- JSON assistantMessageErrorMessageOutputLengthErrorJSON `json:"-"`
-}
-
-// assistantMessageErrorMessageOutputLengthErrorJSON contains the JSON metadata for
-// the struct [AssistantMessageErrorMessageOutputLengthError]
-type assistantMessageErrorMessageOutputLengthErrorJSON struct {
- Data apijson.Field
- Name apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *AssistantMessageErrorMessageOutputLengthError) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r assistantMessageErrorMessageOutputLengthErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r AssistantMessageErrorMessageOutputLengthError) ImplementsAssistantMessageError() {}
-
-type AssistantMessageErrorMessageOutputLengthErrorName string
-
-const (
- AssistantMessageErrorMessageOutputLengthErrorNameMessageOutputLengthError AssistantMessageErrorMessageOutputLengthErrorName = "MessageOutputLengthError"
-)
-
-func (r AssistantMessageErrorMessageOutputLengthErrorName) IsKnown() bool {
- switch r {
- case AssistantMessageErrorMessageOutputLengthErrorNameMessageOutputLengthError:
- return true
- }
- return false
-}
-
-type AssistantMessageErrorName string
-
-const (
- AssistantMessageErrorNameProviderAuthError AssistantMessageErrorName = "ProviderAuthError"
- AssistantMessageErrorNameUnknownError AssistantMessageErrorName = "UnknownError"
- AssistantMessageErrorNameMessageOutputLengthError AssistantMessageErrorName = "MessageOutputLengthError"
- AssistantMessageErrorNameMessageAbortedError AssistantMessageErrorName = "MessageAbortedError"
-)
-
-func (r AssistantMessageErrorName) IsKnown() bool {
- switch r {
- case AssistantMessageErrorNameProviderAuthError, AssistantMessageErrorNameUnknownError, AssistantMessageErrorNameMessageOutputLengthError, AssistantMessageErrorNameMessageAbortedError:
- return true
- }
- return false
-}
-
-type FilePart struct {
- ID string `json:"id,required"`
- MessageID string `json:"messageID,required"`
- Mime string `json:"mime,required"`
- SessionID string `json:"sessionID,required"`
- Type FilePartType `json:"type,required"`
- URL string `json:"url,required"`
- Filename string `json:"filename"`
- Source FilePartSource `json:"source"`
- JSON filePartJSON `json:"-"`
-}
-
-// filePartJSON contains the JSON metadata for the struct [FilePart]
-type filePartJSON struct {
- ID apijson.Field
- MessageID apijson.Field
- Mime apijson.Field
- SessionID apijson.Field
- Type apijson.Field
- URL apijson.Field
- Filename apijson.Field
- Source apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FilePart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r filePartJSON) RawJSON() string {
- return r.raw
-}
-
-func (r FilePart) implementsPart() {}
-
-type FilePartType string
-
-const (
- FilePartTypeFile FilePartType = "file"
-)
-
-func (r FilePartType) IsKnown() bool {
- switch r {
- case FilePartTypeFile:
- return true
- }
- return false
-}
-
-type FilePartInputParam struct {
- Mime param.Field[string] `json:"mime,required"`
- Type param.Field[FilePartInputType] `json:"type,required"`
- URL param.Field[string] `json:"url,required"`
- ID param.Field[string] `json:"id"`
- Filename param.Field[string] `json:"filename"`
- Source param.Field[FilePartSourceUnionParam] `json:"source"`
-}
-
-func (r FilePartInputParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-func (r FilePartInputParam) implementsSessionChatParamsPartUnion() {}
-
-type FilePartInputType string
-
-const (
- FilePartInputTypeFile FilePartInputType = "file"
-)
-
-func (r FilePartInputType) IsKnown() bool {
- switch r {
- case FilePartInputTypeFile:
- return true
- }
- return false
-}
-
-type FilePartSource struct {
- Path string `json:"path,required"`
- Text FilePartSourceText `json:"text,required"`
- Type FilePartSourceType `json:"type,required"`
- Kind int64 `json:"kind"`
- Name string `json:"name"`
- // This field can have the runtime type of [SymbolSourceRange].
- Range interface{} `json:"range"`
- JSON filePartSourceJSON `json:"-"`
- union FilePartSourceUnion
-}
-
-// filePartSourceJSON contains the JSON metadata for the struct [FilePartSource]
-type filePartSourceJSON struct {
- Path apijson.Field
- Text apijson.Field
- Type apijson.Field
- Kind apijson.Field
- Name apijson.Field
- Range apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r filePartSourceJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *FilePartSource) UnmarshalJSON(data []byte) (err error) {
- *r = FilePartSource{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [FilePartSourceUnion] interface which you can cast to the
-// specific types for more type safety.
-//
-// Possible runtime types of the union are [FileSource], [SymbolSource].
-func (r FilePartSource) AsUnion() FilePartSourceUnion {
- return r.union
-}
-
-// Union satisfied by [FileSource] or [SymbolSource].
-type FilePartSourceUnion interface {
- implementsFilePartSource()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*FilePartSourceUnion)(nil)).Elem(),
- "type",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(FileSource{}),
- DiscriminatorValue: "file",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(SymbolSource{}),
- DiscriminatorValue: "symbol",
- },
- )
-}
-
-type FilePartSourceType string
-
-const (
- FilePartSourceTypeFile FilePartSourceType = "file"
- FilePartSourceTypeSymbol FilePartSourceType = "symbol"
-)
-
-func (r FilePartSourceType) IsKnown() bool {
- switch r {
- case FilePartSourceTypeFile, FilePartSourceTypeSymbol:
- return true
- }
- return false
-}
-
-type FilePartSourceParam struct {
- Path param.Field[string] `json:"path,required"`
- Text param.Field[FilePartSourceTextParam] `json:"text,required"`
- Type param.Field[FilePartSourceType] `json:"type,required"`
- Kind param.Field[int64] `json:"kind"`
- Name param.Field[string] `json:"name"`
- Range param.Field[interface{}] `json:"range"`
-}
-
-func (r FilePartSourceParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-func (r FilePartSourceParam) implementsFilePartSourceUnionParam() {}
-
-// Satisfied by [FileSourceParam], [SymbolSourceParam], [FilePartSourceParam].
-type FilePartSourceUnionParam interface {
- implementsFilePartSourceUnionParam()
-}
-
-type FilePartSourceText struct {
- End int64 `json:"end,required"`
- Start int64 `json:"start,required"`
- Value string `json:"value,required"`
- JSON filePartSourceTextJSON `json:"-"`
-}
-
-// filePartSourceTextJSON contains the JSON metadata for the struct
-// [FilePartSourceText]
-type filePartSourceTextJSON struct {
- End apijson.Field
- Start apijson.Field
- Value apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FilePartSourceText) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r filePartSourceTextJSON) RawJSON() string {
- return r.raw
-}
-
-type FilePartSourceTextParam struct {
- End param.Field[int64] `json:"end,required"`
- Start param.Field[int64] `json:"start,required"`
- Value param.Field[string] `json:"value,required"`
-}
-
-func (r FilePartSourceTextParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type FileSource struct {
- Path string `json:"path,required"`
- Text FilePartSourceText `json:"text,required"`
- Type FileSourceType `json:"type,required"`
- JSON fileSourceJSON `json:"-"`
-}
-
-// fileSourceJSON contains the JSON metadata for the struct [FileSource]
-type fileSourceJSON struct {
- Path apijson.Field
- Text apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *FileSource) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r fileSourceJSON) RawJSON() string {
- return r.raw
-}
-
-func (r FileSource) implementsFilePartSource() {}
-
-type FileSourceType string
-
-const (
- FileSourceTypeFile FileSourceType = "file"
-)
-
-func (r FileSourceType) IsKnown() bool {
- switch r {
- case FileSourceTypeFile:
- return true
- }
- return false
-}
-
-type FileSourceParam struct {
- Path param.Field[string] `json:"path,required"`
- Text param.Field[FilePartSourceTextParam] `json:"text,required"`
- Type param.Field[FileSourceType] `json:"type,required"`
-}
-
-func (r FileSourceParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-func (r FileSourceParam) implementsFilePartSourceUnionParam() {}
-
-type Message struct {
- ID string `json:"id,required"`
- Role MessageRole `json:"role,required"`
- SessionID string `json:"sessionID,required"`
- // This field can have the runtime type of [UserMessageTime],
- // [AssistantMessageTime].
- Time interface{} `json:"time,required"`
- Cost float64 `json:"cost"`
- // This field can have the runtime type of [AssistantMessageError].
- Error interface{} `json:"error"`
- Mode string `json:"mode"`
- ModelID string `json:"modelID"`
- // This field can have the runtime type of [AssistantMessagePath].
- Path interface{} `json:"path"`
- ProviderID string `json:"providerID"`
- Summary bool `json:"summary"`
- // This field can have the runtime type of [[]string].
- System interface{} `json:"system"`
- // This field can have the runtime type of [AssistantMessageTokens].
- Tokens interface{} `json:"tokens"`
- JSON messageJSON `json:"-"`
- union MessageUnion
-}
-
-// messageJSON contains the JSON metadata for the struct [Message]
-type messageJSON struct {
- ID apijson.Field
- Role apijson.Field
- SessionID apijson.Field
- Time apijson.Field
- Cost apijson.Field
- Error apijson.Field
- Mode apijson.Field
- ModelID apijson.Field
- Path apijson.Field
- ProviderID apijson.Field
- Summary apijson.Field
- System apijson.Field
- Tokens apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r messageJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *Message) UnmarshalJSON(data []byte) (err error) {
- *r = Message{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [MessageUnion] interface which you can cast to the specific
-// types for more type safety.
-//
-// Possible runtime types of the union are [UserMessage], [AssistantMessage].
-func (r Message) AsUnion() MessageUnion {
- return r.union
-}
-
-// Union satisfied by [UserMessage] or [AssistantMessage].
-type MessageUnion interface {
- implementsMessage()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*MessageUnion)(nil)).Elem(),
- "role",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(UserMessage{}),
- DiscriminatorValue: "user",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(AssistantMessage{}),
- DiscriminatorValue: "assistant",
- },
- )
-}
-
-type MessageRole string
-
-const (
- MessageRoleUser MessageRole = "user"
- MessageRoleAssistant MessageRole = "assistant"
-)
-
-func (r MessageRole) IsKnown() bool {
- switch r {
- case MessageRoleUser, MessageRoleAssistant:
- return true
- }
- return false
-}
-
-type Part struct {
- ID string `json:"id,required"`
- MessageID string `json:"messageID,required"`
- SessionID string `json:"sessionID,required"`
- Type PartType `json:"type,required"`
- CallID string `json:"callID"`
- Cost float64 `json:"cost"`
- Filename string `json:"filename"`
- // This field can have the runtime type of [[]string].
- Files interface{} `json:"files"`
- Hash string `json:"hash"`
- Mime string `json:"mime"`
- Snapshot string `json:"snapshot"`
- Source FilePartSource `json:"source"`
- // This field can have the runtime type of [ToolPartState].
- State interface{} `json:"state"`
- Synthetic bool `json:"synthetic"`
- Text string `json:"text"`
- // This field can have the runtime type of [TextPartTime].
- Time interface{} `json:"time"`
- // This field can have the runtime type of [StepFinishPartTokens].
- Tokens interface{} `json:"tokens"`
- Tool string `json:"tool"`
- URL string `json:"url"`
- JSON partJSON `json:"-"`
- union PartUnion
-}
-
-// partJSON contains the JSON metadata for the struct [Part]
-type partJSON struct {
- ID apijson.Field
- MessageID apijson.Field
- SessionID apijson.Field
- Type apijson.Field
- CallID apijson.Field
- Cost apijson.Field
- Filename apijson.Field
- Files apijson.Field
- Hash apijson.Field
- Mime apijson.Field
- Snapshot apijson.Field
- Source apijson.Field
- State apijson.Field
- Synthetic apijson.Field
- Text apijson.Field
- Time apijson.Field
- Tokens apijson.Field
- Tool apijson.Field
- URL apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r partJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *Part) UnmarshalJSON(data []byte) (err error) {
- *r = Part{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [PartUnion] interface which you can cast to the specific types
-// for more type safety.
-//
-// Possible runtime types of the union are [TextPart], [FilePart], [ToolPart],
-// [StepStartPart], [StepFinishPart], [SnapshotPart], [PartPatchPart].
-func (r Part) AsUnion() PartUnion {
- return r.union
-}
-
-// Union satisfied by [TextPart], [FilePart], [ToolPart], [StepStartPart],
-// [StepFinishPart], [SnapshotPart] or [PartPatchPart].
-type PartUnion interface {
- implementsPart()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*PartUnion)(nil)).Elem(),
- "type",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(TextPart{}),
- DiscriminatorValue: "text",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(FilePart{}),
- DiscriminatorValue: "file",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ToolPart{}),
- DiscriminatorValue: "tool",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(StepStartPart{}),
- DiscriminatorValue: "step-start",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(StepFinishPart{}),
- DiscriminatorValue: "step-finish",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(SnapshotPart{}),
- DiscriminatorValue: "snapshot",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(PartPatchPart{}),
- DiscriminatorValue: "patch",
- },
- )
-}
-
-type PartPatchPart struct {
- ID string `json:"id,required"`
- Files []string `json:"files,required"`
- Hash string `json:"hash,required"`
- MessageID string `json:"messageID,required"`
- SessionID string `json:"sessionID,required"`
- Type PartPatchPartType `json:"type,required"`
- JSON partPatchPartJSON `json:"-"`
-}
-
-// partPatchPartJSON contains the JSON metadata for the struct [PartPatchPart]
-type partPatchPartJSON struct {
- ID apijson.Field
- Files apijson.Field
- Hash apijson.Field
- MessageID apijson.Field
- SessionID apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *PartPatchPart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r partPatchPartJSON) RawJSON() string {
- return r.raw
-}
-
-func (r PartPatchPart) implementsPart() {}
-
-type PartPatchPartType string
-
-const (
- PartPatchPartTypePatch PartPatchPartType = "patch"
-)
-
-func (r PartPatchPartType) IsKnown() bool {
- switch r {
- case PartPatchPartTypePatch:
- return true
- }
- return false
-}
-
-type PartType string
-
-const (
- PartTypeText PartType = "text"
- PartTypeFile PartType = "file"
- PartTypeTool PartType = "tool"
- PartTypeStepStart PartType = "step-start"
- PartTypeStepFinish PartType = "step-finish"
- PartTypeSnapshot PartType = "snapshot"
- PartTypePatch PartType = "patch"
-)
-
-func (r PartType) IsKnown() bool {
- switch r {
- case PartTypeText, PartTypeFile, PartTypeTool, PartTypeStepStart, PartTypeStepFinish, PartTypeSnapshot, PartTypePatch:
- return true
- }
- return false
-}
-
-type Session struct {
- ID string `json:"id,required"`
- Time SessionTime `json:"time,required"`
- Title string `json:"title,required"`
- Version string `json:"version,required"`
- ParentID string `json:"parentID"`
- Revert SessionRevert `json:"revert"`
- Share SessionShare `json:"share"`
- JSON sessionJSON `json:"-"`
-}
-
-// sessionJSON contains the JSON metadata for the struct [Session]
-type sessionJSON struct {
- ID apijson.Field
- Time apijson.Field
- Title apijson.Field
- Version apijson.Field
- ParentID apijson.Field
- Revert apijson.Field
- Share apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *Session) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r sessionJSON) RawJSON() string {
- return r.raw
-}
-
-type SessionTime struct {
- Created float64 `json:"created,required"`
- Updated float64 `json:"updated,required"`
- JSON sessionTimeJSON `json:"-"`
-}
-
-// sessionTimeJSON contains the JSON metadata for the struct [SessionTime]
-type sessionTimeJSON struct {
- Created apijson.Field
- Updated apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SessionTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r sessionTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type SessionRevert struct {
- MessageID string `json:"messageID,required"`
- Diff string `json:"diff"`
- PartID string `json:"partID"`
- Snapshot string `json:"snapshot"`
- JSON sessionRevertJSON `json:"-"`
-}
-
-// sessionRevertJSON contains the JSON metadata for the struct [SessionRevert]
-type sessionRevertJSON struct {
- MessageID apijson.Field
- Diff apijson.Field
- PartID apijson.Field
- Snapshot apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SessionRevert) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r sessionRevertJSON) RawJSON() string {
- return r.raw
-}
-
-type SessionShare struct {
- URL string `json:"url,required"`
- JSON sessionShareJSON `json:"-"`
-}
-
-// sessionShareJSON contains the JSON metadata for the struct [SessionShare]
-type sessionShareJSON struct {
- URL apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SessionShare) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r sessionShareJSON) RawJSON() string {
- return r.raw
-}
-
-type SnapshotPart struct {
- ID string `json:"id,required"`
- MessageID string `json:"messageID,required"`
- SessionID string `json:"sessionID,required"`
- Snapshot string `json:"snapshot,required"`
- Type SnapshotPartType `json:"type,required"`
- JSON snapshotPartJSON `json:"-"`
-}
-
-// snapshotPartJSON contains the JSON metadata for the struct [SnapshotPart]
-type snapshotPartJSON struct {
- ID apijson.Field
- MessageID apijson.Field
- SessionID apijson.Field
- Snapshot apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SnapshotPart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r snapshotPartJSON) RawJSON() string {
- return r.raw
-}
-
-func (r SnapshotPart) implementsPart() {}
-
-type SnapshotPartType string
-
-const (
- SnapshotPartTypeSnapshot SnapshotPartType = "snapshot"
-)
-
-func (r SnapshotPartType) IsKnown() bool {
- switch r {
- case SnapshotPartTypeSnapshot:
- return true
- }
- return false
-}
-
-type StepFinishPart struct {
- ID string `json:"id,required"`
- Cost float64 `json:"cost,required"`
- MessageID string `json:"messageID,required"`
- SessionID string `json:"sessionID,required"`
- Tokens StepFinishPartTokens `json:"tokens,required"`
- Type StepFinishPartType `json:"type,required"`
- JSON stepFinishPartJSON `json:"-"`
-}
-
-// stepFinishPartJSON contains the JSON metadata for the struct [StepFinishPart]
-type stepFinishPartJSON struct {
- ID apijson.Field
- Cost apijson.Field
- MessageID apijson.Field
- SessionID apijson.Field
- Tokens apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *StepFinishPart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r stepFinishPartJSON) RawJSON() string {
- return r.raw
-}
-
-func (r StepFinishPart) implementsPart() {}
-
-type StepFinishPartTokens struct {
- Cache StepFinishPartTokensCache `json:"cache,required"`
- Input float64 `json:"input,required"`
- Output float64 `json:"output,required"`
- Reasoning float64 `json:"reasoning,required"`
- JSON stepFinishPartTokensJSON `json:"-"`
-}
-
-// stepFinishPartTokensJSON contains the JSON metadata for the struct
-// [StepFinishPartTokens]
-type stepFinishPartTokensJSON struct {
- Cache apijson.Field
- Input apijson.Field
- Output apijson.Field
- Reasoning apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *StepFinishPartTokens) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r stepFinishPartTokensJSON) RawJSON() string {
- return r.raw
-}
-
-type StepFinishPartTokensCache struct {
- Read float64 `json:"read,required"`
- Write float64 `json:"write,required"`
- JSON stepFinishPartTokensCacheJSON `json:"-"`
-}
-
-// stepFinishPartTokensCacheJSON contains the JSON metadata for the struct
-// [StepFinishPartTokensCache]
-type stepFinishPartTokensCacheJSON struct {
- Read apijson.Field
- Write apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *StepFinishPartTokensCache) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r stepFinishPartTokensCacheJSON) RawJSON() string {
- return r.raw
-}
-
-type StepFinishPartType string
-
-const (
- StepFinishPartTypeStepFinish StepFinishPartType = "step-finish"
-)
-
-func (r StepFinishPartType) IsKnown() bool {
- switch r {
- case StepFinishPartTypeStepFinish:
- return true
- }
- return false
-}
-
-type StepStartPart struct {
- ID string `json:"id,required"`
- MessageID string `json:"messageID,required"`
- SessionID string `json:"sessionID,required"`
- Type StepStartPartType `json:"type,required"`
- JSON stepStartPartJSON `json:"-"`
-}
-
-// stepStartPartJSON contains the JSON metadata for the struct [StepStartPart]
-type stepStartPartJSON struct {
- ID apijson.Field
- MessageID apijson.Field
- SessionID apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *StepStartPart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r stepStartPartJSON) RawJSON() string {
- return r.raw
-}
-
-func (r StepStartPart) implementsPart() {}
-
-type StepStartPartType string
-
-const (
- StepStartPartTypeStepStart StepStartPartType = "step-start"
-)
-
-func (r StepStartPartType) IsKnown() bool {
- switch r {
- case StepStartPartTypeStepStart:
- return true
- }
- return false
-}
-
-type SymbolSource struct {
- Kind int64 `json:"kind,required"`
- Name string `json:"name,required"`
- Path string `json:"path,required"`
- Range SymbolSourceRange `json:"range,required"`
- Text FilePartSourceText `json:"text,required"`
- Type SymbolSourceType `json:"type,required"`
- JSON symbolSourceJSON `json:"-"`
-}
-
-// symbolSourceJSON contains the JSON metadata for the struct [SymbolSource]
-type symbolSourceJSON struct {
- Kind apijson.Field
- Name apijson.Field
- Path apijson.Field
- Range apijson.Field
- Text apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SymbolSource) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolSourceJSON) RawJSON() string {
- return r.raw
-}
-
-func (r SymbolSource) implementsFilePartSource() {}
-
-type SymbolSourceRange struct {
- End SymbolSourceRangeEnd `json:"end,required"`
- Start SymbolSourceRangeStart `json:"start,required"`
- JSON symbolSourceRangeJSON `json:"-"`
-}
-
-// symbolSourceRangeJSON contains the JSON metadata for the struct
-// [SymbolSourceRange]
-type symbolSourceRangeJSON struct {
- End apijson.Field
- Start apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SymbolSourceRange) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolSourceRangeJSON) RawJSON() string {
- return r.raw
-}
-
-type SymbolSourceRangeEnd struct {
- Character float64 `json:"character,required"`
- Line float64 `json:"line,required"`
- JSON symbolSourceRangeEndJSON `json:"-"`
-}
-
-// symbolSourceRangeEndJSON contains the JSON metadata for the struct
-// [SymbolSourceRangeEnd]
-type symbolSourceRangeEndJSON struct {
- Character apijson.Field
- Line apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SymbolSourceRangeEnd) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolSourceRangeEndJSON) RawJSON() string {
- return r.raw
-}
-
-type SymbolSourceRangeStart struct {
- Character float64 `json:"character,required"`
- Line float64 `json:"line,required"`
- JSON symbolSourceRangeStartJSON `json:"-"`
-}
-
-// symbolSourceRangeStartJSON contains the JSON metadata for the struct
-// [SymbolSourceRangeStart]
-type symbolSourceRangeStartJSON struct {
- Character apijson.Field
- Line apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SymbolSourceRangeStart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r symbolSourceRangeStartJSON) RawJSON() string {
- return r.raw
-}
-
-type SymbolSourceType string
-
-const (
- SymbolSourceTypeSymbol SymbolSourceType = "symbol"
-)
-
-func (r SymbolSourceType) IsKnown() bool {
- switch r {
- case SymbolSourceTypeSymbol:
- return true
- }
- return false
-}
-
-type SymbolSourceParam struct {
- Kind param.Field[int64] `json:"kind,required"`
- Name param.Field[string] `json:"name,required"`
- Path param.Field[string] `json:"path,required"`
- Range param.Field[SymbolSourceRangeParam] `json:"range,required"`
- Text param.Field[FilePartSourceTextParam] `json:"text,required"`
- Type param.Field[SymbolSourceType] `json:"type,required"`
-}
-
-func (r SymbolSourceParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-func (r SymbolSourceParam) implementsFilePartSourceUnionParam() {}
-
-type SymbolSourceRangeParam struct {
- End param.Field[SymbolSourceRangeEndParam] `json:"end,required"`
- Start param.Field[SymbolSourceRangeStartParam] `json:"start,required"`
-}
-
-func (r SymbolSourceRangeParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type SymbolSourceRangeEndParam struct {
- Character param.Field[float64] `json:"character,required"`
- Line param.Field[float64] `json:"line,required"`
-}
-
-func (r SymbolSourceRangeEndParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type SymbolSourceRangeStartParam struct {
- Character param.Field[float64] `json:"character,required"`
- Line param.Field[float64] `json:"line,required"`
-}
-
-func (r SymbolSourceRangeStartParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type TextPart struct {
- ID string `json:"id,required"`
- MessageID string `json:"messageID,required"`
- SessionID string `json:"sessionID,required"`
- Text string `json:"text,required"`
- Type TextPartType `json:"type,required"`
- Synthetic bool `json:"synthetic"`
- Time TextPartTime `json:"time"`
- JSON textPartJSON `json:"-"`
-}
-
-// textPartJSON contains the JSON metadata for the struct [TextPart]
-type textPartJSON struct {
- ID apijson.Field
- MessageID apijson.Field
- SessionID apijson.Field
- Text apijson.Field
- Type apijson.Field
- Synthetic apijson.Field
- Time apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *TextPart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r textPartJSON) RawJSON() string {
- return r.raw
-}
-
-func (r TextPart) implementsPart() {}
-
-type TextPartType string
-
-const (
- TextPartTypeText TextPartType = "text"
-)
-
-func (r TextPartType) IsKnown() bool {
- switch r {
- case TextPartTypeText:
- return true
- }
- return false
-}
-
-type TextPartTime struct {
- Start float64 `json:"start,required"`
- End float64 `json:"end"`
- JSON textPartTimeJSON `json:"-"`
-}
-
-// textPartTimeJSON contains the JSON metadata for the struct [TextPartTime]
-type textPartTimeJSON struct {
- Start apijson.Field
- End apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *TextPartTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r textPartTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type TextPartInputParam struct {
- Text param.Field[string] `json:"text,required"`
- Type param.Field[TextPartInputType] `json:"type,required"`
- ID param.Field[string] `json:"id"`
- Synthetic param.Field[bool] `json:"synthetic"`
- Time param.Field[TextPartInputTimeParam] `json:"time"`
-}
-
-func (r TextPartInputParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-func (r TextPartInputParam) implementsSessionChatParamsPartUnion() {}
-
-type TextPartInputType string
-
-const (
- TextPartInputTypeText TextPartInputType = "text"
-)
-
-func (r TextPartInputType) IsKnown() bool {
- switch r {
- case TextPartInputTypeText:
- return true
- }
- return false
-}
-
-type TextPartInputTimeParam struct {
- Start param.Field[float64] `json:"start,required"`
- End param.Field[float64] `json:"end"`
-}
-
-func (r TextPartInputTimeParam) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type ToolPart struct {
- ID string `json:"id,required"`
- CallID string `json:"callID,required"`
- MessageID string `json:"messageID,required"`
- SessionID string `json:"sessionID,required"`
- State ToolPartState `json:"state,required"`
- Tool string `json:"tool,required"`
- Type ToolPartType `json:"type,required"`
- JSON toolPartJSON `json:"-"`
-}
-
-// toolPartJSON contains the JSON metadata for the struct [ToolPart]
-type toolPartJSON struct {
- ID apijson.Field
- CallID apijson.Field
- MessageID apijson.Field
- SessionID apijson.Field
- State apijson.Field
- Tool apijson.Field
- Type apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ToolPart) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r toolPartJSON) RawJSON() string {
- return r.raw
-}
-
-func (r ToolPart) implementsPart() {}
-
-type ToolPartState struct {
- Status ToolPartStateStatus `json:"status,required"`
- Error string `json:"error"`
- // This field can have the runtime type of [interface{}], [map[string]interface{}].
- Input interface{} `json:"input"`
- // This field can have the runtime type of [map[string]interface{}].
- Metadata interface{} `json:"metadata"`
- Output string `json:"output"`
- // This field can have the runtime type of [ToolStateRunningTime],
- // [ToolStateCompletedTime], [ToolStateErrorTime].
- Time interface{} `json:"time"`
- Title string `json:"title"`
- JSON toolPartStateJSON `json:"-"`
- union ToolPartStateUnion
-}
-
-// toolPartStateJSON contains the JSON metadata for the struct [ToolPartState]
-type toolPartStateJSON struct {
- Status apijson.Field
- Error apijson.Field
- Input apijson.Field
- Metadata apijson.Field
- Output apijson.Field
- Time apijson.Field
- Title apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r toolPartStateJSON) RawJSON() string {
- return r.raw
-}
-
-func (r *ToolPartState) UnmarshalJSON(data []byte) (err error) {
- *r = ToolPartState{}
- err = apijson.UnmarshalRoot(data, &r.union)
- if err != nil {
- return err
- }
- return apijson.Port(r.union, &r)
-}
-
-// AsUnion returns a [ToolPartStateUnion] interface which you can cast to the
-// specific types for more type safety.
-//
-// Possible runtime types of the union are [ToolStatePending], [ToolStateRunning],
-// [ToolStateCompleted], [ToolStateError].
-func (r ToolPartState) AsUnion() ToolPartStateUnion {
- return r.union
-}
-
-// Union satisfied by [ToolStatePending], [ToolStateRunning], [ToolStateCompleted]
-// or [ToolStateError].
-type ToolPartStateUnion interface {
- implementsToolPartState()
-}
-
-func init() {
- apijson.RegisterUnion(
- reflect.TypeOf((*ToolPartStateUnion)(nil)).Elem(),
- "status",
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ToolStatePending{}),
- DiscriminatorValue: "pending",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ToolStateRunning{}),
- DiscriminatorValue: "running",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ToolStateCompleted{}),
- DiscriminatorValue: "completed",
- },
- apijson.UnionVariant{
- TypeFilter: gjson.JSON,
- Type: reflect.TypeOf(ToolStateError{}),
- DiscriminatorValue: "error",
- },
- )
-}
-
-type ToolPartStateStatus string
-
-const (
- ToolPartStateStatusPending ToolPartStateStatus = "pending"
- ToolPartStateStatusRunning ToolPartStateStatus = "running"
- ToolPartStateStatusCompleted ToolPartStateStatus = "completed"
- ToolPartStateStatusError ToolPartStateStatus = "error"
-)
-
-func (r ToolPartStateStatus) IsKnown() bool {
- switch r {
- case ToolPartStateStatusPending, ToolPartStateStatusRunning, ToolPartStateStatusCompleted, ToolPartStateStatusError:
- return true
- }
- return false
-}
-
-type ToolPartType string
-
-const (
- ToolPartTypeTool ToolPartType = "tool"
-)
-
-func (r ToolPartType) IsKnown() bool {
- switch r {
- case ToolPartTypeTool:
- return true
- }
- return false
-}
-
-type ToolStateCompleted struct {
- Input map[string]interface{} `json:"input,required"`
- Metadata map[string]interface{} `json:"metadata,required"`
- Output string `json:"output,required"`
- Status ToolStateCompletedStatus `json:"status,required"`
- Time ToolStateCompletedTime `json:"time,required"`
- Title string `json:"title,required"`
- JSON toolStateCompletedJSON `json:"-"`
-}
-
-// toolStateCompletedJSON contains the JSON metadata for the struct
-// [ToolStateCompleted]
-type toolStateCompletedJSON struct {
- Input apijson.Field
- Metadata apijson.Field
- Output apijson.Field
- Status apijson.Field
- Time apijson.Field
- Title apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ToolStateCompleted) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r toolStateCompletedJSON) RawJSON() string {
- return r.raw
-}
-
-func (r ToolStateCompleted) implementsToolPartState() {}
-
-type ToolStateCompletedStatus string
-
-const (
- ToolStateCompletedStatusCompleted ToolStateCompletedStatus = "completed"
-)
-
-func (r ToolStateCompletedStatus) IsKnown() bool {
- switch r {
- case ToolStateCompletedStatusCompleted:
- return true
- }
- return false
-}
-
-type ToolStateCompletedTime struct {
- End float64 `json:"end,required"`
- Start float64 `json:"start,required"`
- JSON toolStateCompletedTimeJSON `json:"-"`
-}
-
-// toolStateCompletedTimeJSON contains the JSON metadata for the struct
-// [ToolStateCompletedTime]
-type toolStateCompletedTimeJSON struct {
- End apijson.Field
- Start apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ToolStateCompletedTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r toolStateCompletedTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type ToolStateError struct {
- Error string `json:"error,required"`
- Input map[string]interface{} `json:"input,required"`
- Status ToolStateErrorStatus `json:"status,required"`
- Time ToolStateErrorTime `json:"time,required"`
- JSON toolStateErrorJSON `json:"-"`
-}
-
-// toolStateErrorJSON contains the JSON metadata for the struct [ToolStateError]
-type toolStateErrorJSON struct {
- Error apijson.Field
- Input apijson.Field
- Status apijson.Field
- Time apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ToolStateError) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r toolStateErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r ToolStateError) implementsToolPartState() {}
-
-type ToolStateErrorStatus string
-
-const (
- ToolStateErrorStatusError ToolStateErrorStatus = "error"
-)
-
-func (r ToolStateErrorStatus) IsKnown() bool {
- switch r {
- case ToolStateErrorStatusError:
- return true
- }
- return false
-}
-
-type ToolStateErrorTime struct {
- End float64 `json:"end,required"`
- Start float64 `json:"start,required"`
- JSON toolStateErrorTimeJSON `json:"-"`
-}
-
-// toolStateErrorTimeJSON contains the JSON metadata for the struct
-// [ToolStateErrorTime]
-type toolStateErrorTimeJSON struct {
- End apijson.Field
- Start apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ToolStateErrorTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r toolStateErrorTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type ToolStatePending struct {
- Status ToolStatePendingStatus `json:"status,required"`
- JSON toolStatePendingJSON `json:"-"`
-}
-
-// toolStatePendingJSON contains the JSON metadata for the struct
-// [ToolStatePending]
-type toolStatePendingJSON struct {
- Status apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ToolStatePending) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r toolStatePendingJSON) RawJSON() string {
- return r.raw
-}
-
-func (r ToolStatePending) implementsToolPartState() {}
-
-type ToolStatePendingStatus string
-
-const (
- ToolStatePendingStatusPending ToolStatePendingStatus = "pending"
-)
-
-func (r ToolStatePendingStatus) IsKnown() bool {
- switch r {
- case ToolStatePendingStatusPending:
- return true
- }
- return false
-}
-
-type ToolStateRunning struct {
- Status ToolStateRunningStatus `json:"status,required"`
- Time ToolStateRunningTime `json:"time,required"`
- Input interface{} `json:"input"`
- Metadata map[string]interface{} `json:"metadata"`
- Title string `json:"title"`
- JSON toolStateRunningJSON `json:"-"`
-}
-
-// toolStateRunningJSON contains the JSON metadata for the struct
-// [ToolStateRunning]
-type toolStateRunningJSON struct {
- Status apijson.Field
- Time apijson.Field
- Input apijson.Field
- Metadata apijson.Field
- Title apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ToolStateRunning) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r toolStateRunningJSON) RawJSON() string {
- return r.raw
-}
-
-func (r ToolStateRunning) implementsToolPartState() {}
-
-type ToolStateRunningStatus string
-
-const (
- ToolStateRunningStatusRunning ToolStateRunningStatus = "running"
-)
-
-func (r ToolStateRunningStatus) IsKnown() bool {
- switch r {
- case ToolStateRunningStatusRunning:
- return true
- }
- return false
-}
-
-type ToolStateRunningTime struct {
- Start float64 `json:"start,required"`
- JSON toolStateRunningTimeJSON `json:"-"`
-}
-
-// toolStateRunningTimeJSON contains the JSON metadata for the struct
-// [ToolStateRunningTime]
-type toolStateRunningTimeJSON struct {
- Start apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ToolStateRunningTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r toolStateRunningTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type UserMessage struct {
- ID string `json:"id,required"`
- Role UserMessageRole `json:"role,required"`
- SessionID string `json:"sessionID,required"`
- Time UserMessageTime `json:"time,required"`
- JSON userMessageJSON `json:"-"`
-}
-
-// userMessageJSON contains the JSON metadata for the struct [UserMessage]
-type userMessageJSON struct {
- ID apijson.Field
- Role apijson.Field
- SessionID apijson.Field
- Time apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *UserMessage) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r userMessageJSON) RawJSON() string {
- return r.raw
-}
-
-func (r UserMessage) implementsMessage() {}
-
-type UserMessageRole string
-
-const (
- UserMessageRoleUser UserMessageRole = "user"
-)
-
-func (r UserMessageRole) IsKnown() bool {
- switch r {
- case UserMessageRoleUser:
- return true
- }
- return false
-}
-
-type UserMessageTime struct {
- Created float64 `json:"created,required"`
- JSON userMessageTimeJSON `json:"-"`
-}
-
-// userMessageTimeJSON contains the JSON metadata for the struct [UserMessageTime]
-type userMessageTimeJSON struct {
- Created apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *UserMessageTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r userMessageTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type SessionMessageResponse struct {
- Info Message `json:"info,required"`
- Parts []Part `json:"parts,required"`
- JSON sessionMessageResponseJSON `json:"-"`
-}
-
-// sessionMessageResponseJSON contains the JSON metadata for the struct
-// [SessionMessageResponse]
-type sessionMessageResponseJSON struct {
- Info apijson.Field
- Parts apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SessionMessageResponse) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r sessionMessageResponseJSON) RawJSON() string {
- return r.raw
-}
-
-type SessionMessagesResponse struct {
- Info Message `json:"info,required"`
- Parts []Part `json:"parts,required"`
- JSON sessionMessagesResponseJSON `json:"-"`
-}
-
-// sessionMessagesResponseJSON contains the JSON metadata for the struct
-// [SessionMessagesResponse]
-type sessionMessagesResponseJSON struct {
- Info apijson.Field
- Parts apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SessionMessagesResponse) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r sessionMessagesResponseJSON) RawJSON() string {
- return r.raw
-}
-
-type SessionChatParams struct {
- ModelID param.Field[string] `json:"modelID,required"`
- Parts param.Field[[]SessionChatParamsPartUnion] `json:"parts,required"`
- ProviderID param.Field[string] `json:"providerID,required"`
- MessageID param.Field[string] `json:"messageID"`
- Mode param.Field[string] `json:"mode"`
- System param.Field[string] `json:"system"`
- Tools param.Field[map[string]bool] `json:"tools"`
-}
-
-func (r SessionChatParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type SessionChatParamsPart struct {
- Type param.Field[SessionChatParamsPartsType] `json:"type,required"`
- ID param.Field[string] `json:"id"`
- Filename param.Field[string] `json:"filename"`
- Mime param.Field[string] `json:"mime"`
- Source param.Field[FilePartSourceUnionParam] `json:"source"`
- Synthetic param.Field[bool] `json:"synthetic"`
- Text param.Field[string] `json:"text"`
- Time param.Field[interface{}] `json:"time"`
- URL param.Field[string] `json:"url"`
-}
-
-func (r SessionChatParamsPart) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-func (r SessionChatParamsPart) implementsSessionChatParamsPartUnion() {}
-
-// Satisfied by [TextPartInputParam], [FilePartInputParam],
-// [SessionChatParamsPart].
-type SessionChatParamsPartUnion interface {
- implementsSessionChatParamsPartUnion()
-}
-
-type SessionChatParamsPartsType string
-
-const (
- SessionChatParamsPartsTypeText SessionChatParamsPartsType = "text"
- SessionChatParamsPartsTypeFile SessionChatParamsPartsType = "file"
-)
-
-func (r SessionChatParamsPartsType) IsKnown() bool {
- switch r {
- case SessionChatParamsPartsTypeText, SessionChatParamsPartsTypeFile:
- return true
- }
- return false
-}
-
-type SessionInitParams struct {
- MessageID param.Field[string] `json:"messageID,required"`
- ModelID param.Field[string] `json:"modelID,required"`
- ProviderID param.Field[string] `json:"providerID,required"`
-}
-
-func (r SessionInitParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type SessionRevertParams struct {
- MessageID param.Field[string] `json:"messageID,required"`
- PartID param.Field[string] `json:"partID"`
-}
-
-func (r SessionRevertParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type SessionSummarizeParams struct {
- ModelID param.Field[string] `json:"modelID,required"`
- ProviderID param.Field[string] `json:"providerID,required"`
-}
-
-func (r SessionSummarizeParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
diff --git a/packages/sdk/go/session_test.go b/packages/sdk/go/session_test.go
deleted file mode 100644
index ab9fbcf7..00000000
--- a/packages/sdk/go/session_test.go
+++ /dev/null
@@ -1,349 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "errors"
- "os"
- "testing"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal/testutil"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-func TestSessionNew(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.New(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionList(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.List(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionDelete(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Delete(context.TODO(), "id")
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionAbort(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Abort(context.TODO(), "id")
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionChatWithOptionalParams(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Chat(
- context.TODO(),
- "id",
- opencode.SessionChatParams{
- ModelID: opencode.F("modelID"),
- Parts: opencode.F([]opencode.SessionChatParamsPartUnion{opencode.TextPartInputParam{
- Text: opencode.F("text"),
- Type: opencode.F(opencode.TextPartInputTypeText),
- ID: opencode.F("id"),
- Synthetic: opencode.F(true),
- Time: opencode.F(opencode.TextPartInputTimeParam{
- Start: opencode.F(0.000000),
- End: opencode.F(0.000000),
- }),
- }}),
- ProviderID: opencode.F("providerID"),
- MessageID: opencode.F("msg"),
- Mode: opencode.F("mode"),
- System: opencode.F("system"),
- Tools: opencode.F(map[string]bool{
- "foo": true,
- }),
- },
- )
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionInit(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Init(
- context.TODO(),
- "id",
- opencode.SessionInitParams{
- MessageID: opencode.F("messageID"),
- ModelID: opencode.F("modelID"),
- ProviderID: opencode.F("providerID"),
- },
- )
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionMessage(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Message(
- context.TODO(),
- "id",
- "messageID",
- )
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionMessages(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Messages(context.TODO(), "id")
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionRevertWithOptionalParams(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Revert(
- context.TODO(),
- "id",
- opencode.SessionRevertParams{
- MessageID: opencode.F("msg"),
- PartID: opencode.F("prt"),
- },
- )
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionShare(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Share(context.TODO(), "id")
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionSummarize(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Summarize(
- context.TODO(),
- "id",
- opencode.SessionSummarizeParams{
- ModelID: opencode.F("modelID"),
- ProviderID: opencode.F("providerID"),
- },
- )
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionUnrevert(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Unrevert(context.TODO(), "id")
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestSessionUnshare(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Unshare(context.TODO(), "id")
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
diff --git a/packages/sdk/go/sessionpermission.go b/packages/sdk/go/sessionpermission.go
deleted file mode 100644
index 85e55bd5..00000000
--- a/packages/sdk/go/sessionpermission.go
+++ /dev/null
@@ -1,130 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "errors"
- "fmt"
- "net/http"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
- "github.com/sst/opencode-sdk-go/internal/param"
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-// SessionPermissionService contains methods and other services that help with
-// interacting with the opencode API.
-//
-// Note, unlike clients, this service does not read variables from the environment
-// automatically. You should not instantiate this service directly, and instead use
-// the [NewSessionPermissionService] method instead.
-type SessionPermissionService struct {
- Options []option.RequestOption
-}
-
-// NewSessionPermissionService generates a new service that applies the given
-// options to each request. These options are applied after the parent client's
-// options (if there is one), and before any request-specific options.
-func NewSessionPermissionService(opts ...option.RequestOption) (r *SessionPermissionService) {
- r = &SessionPermissionService{}
- r.Options = opts
- return
-}
-
-// Respond to a permission request
-func (r *SessionPermissionService) Respond(ctx context.Context, id string, permissionID string, body SessionPermissionRespondParams, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- if permissionID == "" {
- err = errors.New("missing required permissionID parameter")
- return
- }
- path := fmt.Sprintf("session/%s/permissions/%s", id, permissionID)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
- return
-}
-
-type Permission struct {
- ID string `json:"id,required"`
- MessageID string `json:"messageID,required"`
- Metadata map[string]interface{} `json:"metadata,required"`
- SessionID string `json:"sessionID,required"`
- Time PermissionTime `json:"time,required"`
- Title string `json:"title,required"`
- Type string `json:"type,required"`
- CallID string `json:"callID"`
- Pattern string `json:"pattern"`
- JSON permissionJSON `json:"-"`
-}
-
-// permissionJSON contains the JSON metadata for the struct [Permission]
-type permissionJSON struct {
- ID apijson.Field
- MessageID apijson.Field
- Metadata apijson.Field
- SessionID apijson.Field
- Time apijson.Field
- Title apijson.Field
- Type apijson.Field
- CallID apijson.Field
- Pattern apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *Permission) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r permissionJSON) RawJSON() string {
- return r.raw
-}
-
-type PermissionTime struct {
- Created float64 `json:"created,required"`
- JSON permissionTimeJSON `json:"-"`
-}
-
-// permissionTimeJSON contains the JSON metadata for the struct [PermissionTime]
-type permissionTimeJSON struct {
- Created apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *PermissionTime) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r permissionTimeJSON) RawJSON() string {
- return r.raw
-}
-
-type SessionPermissionRespondParams struct {
- Response param.Field[SessionPermissionRespondParamsResponse] `json:"response,required"`
-}
-
-func (r SessionPermissionRespondParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type SessionPermissionRespondParamsResponse string
-
-const (
- SessionPermissionRespondParamsResponseOnce SessionPermissionRespondParamsResponse = "once"
- SessionPermissionRespondParamsResponseAlways SessionPermissionRespondParamsResponse = "always"
- SessionPermissionRespondParamsResponseReject SessionPermissionRespondParamsResponse = "reject"
-)
-
-func (r SessionPermissionRespondParamsResponse) IsKnown() bool {
- switch r {
- case SessionPermissionRespondParamsResponseOnce, SessionPermissionRespondParamsResponseAlways, SessionPermissionRespondParamsResponseReject:
- return true
- }
- return false
-}
diff --git a/packages/sdk/go/sessionpermission_test.go b/packages/sdk/go/sessionpermission_test.go
deleted file mode 100644
index 728976be..00000000
--- a/packages/sdk/go/sessionpermission_test.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "errors"
- "os"
- "testing"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal/testutil"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-func TestSessionPermissionRespond(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Permissions.Respond(
- context.TODO(),
- "id",
- "permissionID",
- opencode.SessionPermissionRespondParams{
- Response: opencode.F(opencode.SessionPermissionRespondParamsResponseOnce),
- },
- )
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
diff --git a/packages/sdk/go/shared/shared.go b/packages/sdk/go/shared/shared.go
deleted file mode 100644
index 58baf3d9..00000000
--- a/packages/sdk/go/shared/shared.go
+++ /dev/null
@@ -1,173 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package shared
-
-import (
- "github.com/sst/opencode-sdk-go/internal/apijson"
-)
-
-type MessageAbortedError struct {
- Data interface{} `json:"data,required"`
- Name MessageAbortedErrorName `json:"name,required"`
- JSON messageAbortedErrorJSON `json:"-"`
-}
-
-// messageAbortedErrorJSON contains the JSON metadata for the struct
-// [MessageAbortedError]
-type messageAbortedErrorJSON struct {
- Data apijson.Field
- Name apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *MessageAbortedError) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r messageAbortedErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r MessageAbortedError) ImplementsEventListResponseEventSessionErrorPropertiesError() {}
-
-func (r MessageAbortedError) ImplementsAssistantMessageError() {}
-
-type MessageAbortedErrorName string
-
-const (
- MessageAbortedErrorNameMessageAbortedError MessageAbortedErrorName = "MessageAbortedError"
-)
-
-func (r MessageAbortedErrorName) IsKnown() bool {
- switch r {
- case MessageAbortedErrorNameMessageAbortedError:
- return true
- }
- return false
-}
-
-type ProviderAuthError struct {
- Data ProviderAuthErrorData `json:"data,required"`
- Name ProviderAuthErrorName `json:"name,required"`
- JSON providerAuthErrorJSON `json:"-"`
-}
-
-// providerAuthErrorJSON contains the JSON metadata for the struct
-// [ProviderAuthError]
-type providerAuthErrorJSON struct {
- Data apijson.Field
- Name apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ProviderAuthError) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r providerAuthErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r ProviderAuthError) ImplementsEventListResponseEventSessionErrorPropertiesError() {}
-
-func (r ProviderAuthError) ImplementsAssistantMessageError() {}
-
-type ProviderAuthErrorData struct {
- Message string `json:"message,required"`
- ProviderID string `json:"providerID,required"`
- JSON providerAuthErrorDataJSON `json:"-"`
-}
-
-// providerAuthErrorDataJSON contains the JSON metadata for the struct
-// [ProviderAuthErrorData]
-type providerAuthErrorDataJSON struct {
- Message apijson.Field
- ProviderID apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *ProviderAuthErrorData) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r providerAuthErrorDataJSON) RawJSON() string {
- return r.raw
-}
-
-type ProviderAuthErrorName string
-
-const (
- ProviderAuthErrorNameProviderAuthError ProviderAuthErrorName = "ProviderAuthError"
-)
-
-func (r ProviderAuthErrorName) IsKnown() bool {
- switch r {
- case ProviderAuthErrorNameProviderAuthError:
- return true
- }
- return false
-}
-
-type UnknownError struct {
- Data UnknownErrorData `json:"data,required"`
- Name UnknownErrorName `json:"name,required"`
- JSON unknownErrorJSON `json:"-"`
-}
-
-// unknownErrorJSON contains the JSON metadata for the struct [UnknownError]
-type unknownErrorJSON struct {
- Data apijson.Field
- Name apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *UnknownError) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r unknownErrorJSON) RawJSON() string {
- return r.raw
-}
-
-func (r UnknownError) ImplementsEventListResponseEventSessionErrorPropertiesError() {}
-
-func (r UnknownError) ImplementsAssistantMessageError() {}
-
-type UnknownErrorData struct {
- Message string `json:"message,required"`
- JSON unknownErrorDataJSON `json:"-"`
-}
-
-// unknownErrorDataJSON contains the JSON metadata for the struct
-// [UnknownErrorData]
-type unknownErrorDataJSON struct {
- Message apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *UnknownErrorData) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r unknownErrorDataJSON) RawJSON() string {
- return r.raw
-}
-
-type UnknownErrorName string
-
-const (
- UnknownErrorNameUnknownError UnknownErrorName = "UnknownError"
-)
-
-func (r UnknownErrorName) IsKnown() bool {
- switch r {
- case UnknownErrorNameUnknownError:
- return true
- }
- return false
-}
diff --git a/packages/sdk/go/tui.go b/packages/sdk/go/tui.go
deleted file mode 100644
index 30657890..00000000
--- a/packages/sdk/go/tui.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode
-
-import (
- "context"
- "net/http"
-
- "github.com/sst/opencode-sdk-go/internal/apijson"
- "github.com/sst/opencode-sdk-go/internal/param"
- "github.com/sst/opencode-sdk-go/internal/requestconfig"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-// TuiService contains methods and other services that help with interacting with
-// the opencode API.
-//
-// Note, unlike clients, this service does not read variables from the environment
-// automatically. You should not instantiate this service directly, and instead use
-// the [NewTuiService] method instead.
-type TuiService struct {
- Options []option.RequestOption
-}
-
-// NewTuiService generates a new service that applies the given options to each
-// request. These options are applied after the parent client's options (if there
-// is one), and before any request-specific options.
-func NewTuiService(opts ...option.RequestOption) (r *TuiService) {
- r = &TuiService{}
- r.Options = opts
- return
-}
-
-// Append prompt to the TUI
-func (r *TuiService) AppendPrompt(ctx context.Context, body TuiAppendPromptParams, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "tui/append-prompt"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
- return
-}
-
-// Clear the prompt
-func (r *TuiService) ClearPrompt(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "tui/clear-prompt"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Execute a TUI command (e.g. switch_mode)
-func (r *TuiService) ExecuteCommand(ctx context.Context, body TuiExecuteCommandParams, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "tui/execute-command"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
- return
-}
-
-// Open the help dialog
-func (r *TuiService) OpenHelp(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "tui/open-help"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Open the model dialog
-func (r *TuiService) OpenModels(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "tui/open-models"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Open the session dialog
-func (r *TuiService) OpenSessions(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "tui/open-sessions"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Open the theme dialog
-func (r *TuiService) OpenThemes(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "tui/open-themes"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-// Submit the prompt
-func (r *TuiService) SubmitPrompt(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) {
- opts = append(r.Options[:], opts...)
- path := "tui/submit-prompt"
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
- return
-}
-
-type TuiAppendPromptParams struct {
- Text param.Field[string] `json:"text,required"`
-}
-
-func (r TuiAppendPromptParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-type TuiExecuteCommandParams struct {
- Command param.Field[string] `json:"command,required"`
-}
-
-func (r TuiExecuteCommandParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
diff --git a/packages/sdk/go/tui_test.go b/packages/sdk/go/tui_test.go
deleted file mode 100644
index f3260aaf..00000000
--- a/packages/sdk/go/tui_test.go
+++ /dev/null
@@ -1,194 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "errors"
- "os"
- "testing"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal/testutil"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-func TestTuiAppendPrompt(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Tui.AppendPrompt(context.TODO(), opencode.TuiAppendPromptParams{
- Text: opencode.F("text"),
- })
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestTuiClearPrompt(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Tui.ClearPrompt(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestTuiExecuteCommand(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Tui.ExecuteCommand(context.TODO(), opencode.TuiExecuteCommandParams{
- Command: opencode.F("command"),
- })
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestTuiOpenHelp(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Tui.OpenHelp(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestTuiOpenModels(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Tui.OpenModels(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestTuiOpenSessions(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Tui.OpenSessions(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestTuiOpenThemes(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Tui.OpenThemes(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
-func TestTuiSubmitPrompt(t *testing.T) {
- t.Skip("skipped: tests are disabled for the time being")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Tui.SubmitPrompt(context.TODO())
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
diff --git a/packages/sdk/go/usage_test.go b/packages/sdk/go/usage_test.go
deleted file mode 100644
index ef7ce8bd..00000000
--- a/packages/sdk/go/usage_test.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-package opencode_test
-
-import (
- "context"
- "os"
- "testing"
-
- "github.com/sst/opencode-sdk-go"
- "github.com/sst/opencode-sdk-go/internal/testutil"
- "github.com/sst/opencode-sdk-go/option"
-)
-
-func TestUsage(t *testing.T) {
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- sessions, err := client.Session.List(context.TODO())
- if err != nil {
- t.Error(err)
- return
- }
- t.Logf("%+v\n", sessions)
-}
diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json
deleted file mode 100644
index 24a01c1e..00000000
--- a/packages/sdk/js/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/package.json",
- "name": "@opencode-ai/sdk",
- "version": "0.3.130",
- "type": "module",
- "scripts": {
- "typecheck": "tsc --noEmit"
- },
- "exports": {
- ".": {
- "development": "./src/index.ts",
- "import": "./dist/index.js"
- }
- },
- "files": [
- "dist"
- ],
- "devDependencies": {
- "typescript": "catalog:",
- "@hey-api/openapi-ts": "0.80.1",
- "@tsconfig/node22": "catalog:"
- }
-}
diff --git a/packages/sdk/js/script/generate.ts b/packages/sdk/js/script/generate.ts
deleted file mode 100755
index aba7d143..00000000
--- a/packages/sdk/js/script/generate.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env bun
-
-const dir = new URL("..", import.meta.url).pathname
-process.chdir(dir)
-
-import { $ } from "bun"
-import path from "path"
-
-import { createClient } from "@hey-api/openapi-ts"
-
-await $`bun dev generate > ${dir}/openapi.json`.cwd(path.resolve(dir, "../../opencode"))
-
-await createClient({
- input: "./openapi.json",
- output: "./src/gen",
- plugins: [
- {
- name: "@hey-api/typescript",
- exportFromIndex: false,
- },
- {
- name: "@hey-api/sdk",
- instance: "OpencodeClient",
- exportFromIndex: false,
- auth: false,
- },
- {
- name: "@hey-api/client-fetch",
- exportFromIndex: false,
- baseUrl: "http://localhost:4096",
- },
- ],
-})
-await $`bun prettier --write src/gen`
diff --git a/packages/sdk/js/script/publish.ts b/packages/sdk/js/script/publish.ts
deleted file mode 100644
index 389a9376..00000000
--- a/packages/sdk/js/script/publish.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env bun
-
-const dir = new URL("..", import.meta.url).pathname
-process.chdir(dir)
-
-import { $ } from "bun"
-
-await import("./generate")
-await $`rm -rf dist`
-await $`bun tsc`
-
-const snapshot = process.env["OPENCODE_SNAPSHOT"] === "true"
-
-if (snapshot) {
- await $`bun publish --tag snapshot`
-}
-if (!snapshot) {
- await $`bun publish`
-}
diff --git a/packages/sdk/js/src/gen/client.gen.ts b/packages/sdk/js/src/gen/client.gen.ts
deleted file mode 100644
index 5566242b..00000000
--- a/packages/sdk/js/src/gen/client.gen.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-// This file is auto-generated by @hey-api/openapi-ts
-
-import type { ClientOptions } from "./types.gen"
-import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from "./client"
-
-/**
- * The `createClientConfig()` function will be called on client initialization
- * and the returned object will become the client's initial configuration.
- *
- * You may want to initialize your client this way instead of calling
- * `setConfig()`. This is useful for example if you're using Next.js
- * to ensure your client always has the correct values.
- */
-export type CreateClientConfig