diff --git a/.claude/skills/emil-design-engineering/SKILL.md b/.claude/skills/emil-design-engineering/SKILL.md
index e9143be0d..b1a2357a8 100644
--- a/.claude/skills/emil-design-engineering/SKILL.md
+++ b/.claude/skills/emil-design-engineering/SKILL.md
@@ -1,6 +1,6 @@
---
name: emil-design-engineering
-description: Design engineering principles and patterns for building polished, accessible web interfaces. Use this skill when building UI components, reviewing frontend code, implementing forms, handling touch interactions, optimizing performance, or creating marketing pages. Triggers on: design engineering, UI polish, input fields, form validation, button states, touch devices, mobile UX, accessibility, a11y, keyboard navigation, aria labels, font rendering, typography, layout shift, z-index, animations, transitions, easing, hover effects, tap targets, iOS Safari, prefers-reduced-motion, marketing pages, landing pages, dark mode, theme switching, scrollbars, gradients, shadows, virtualization, preloading.
+description: 'Design engineering principles and patterns for building polished, accessible web interfaces. Use this skill when building UI components, reviewing frontend code, implementing forms, handling touch interactions, optimizing performance, or creating marketing pages. Triggers on: design engineering, UI polish, input fields, form validation, button states, touch devices, mobile UX, accessibility, a11y, keyboard navigation, aria labels, font rendering, typography, layout shift, z-index, animations, transitions, easing, hover effects, tap targets, iOS Safari, prefers-reduced-motion, marketing pages, landing pages, dark mode, theme switching, scrollbars, gradients, shadows, virtualization, preloading.'
---
# Emil's Design Engineering Principles
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0a0909729..89ada42af 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -224,6 +224,7 @@ jobs:
mkdir -p src-tauri/binaries
touch src-tauri/binaries/agent-bridge-x86_64-unknown-linux-gnu
touch src-tauri/binaries/claude-x86_64-unknown-linux-gnu
+ touch src-tauri/binaries/orbit-server-x86_64-unknown-linux-gnu
chmod +x src-tauri/binaries/*
- uses: dtolnay/rust-toolchain@stable
with:
@@ -246,6 +247,7 @@ jobs:
mkdir -p src-tauri/binaries
touch src-tauri/binaries/agent-bridge-x86_64-unknown-linux-gnu
touch src-tauri/binaries/claude-x86_64-unknown-linux-gnu
+ touch src-tauri/binaries/orbit-server-x86_64-unknown-linux-gnu
chmod +x src-tauri/binaries/*
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
@@ -266,6 +268,7 @@ jobs:
mkdir -p src-tauri/binaries
touch src-tauri/binaries/agent-bridge-x86_64-unknown-linux-gnu
touch src-tauri/binaries/claude-x86_64-unknown-linux-gnu
+ touch src-tauri/binaries/orbit-server-x86_64-unknown-linux-gnu
chmod +x src-tauri/binaries/*
- uses: dtolnay/rust-toolchain@stable
- name: Install cargo-deny
@@ -288,6 +291,7 @@ jobs:
mkdir -p src-tauri/binaries
touch src-tauri/binaries/agent-bridge-x86_64-unknown-linux-gnu
touch src-tauri/binaries/claude-x86_64-unknown-linux-gnu
+ touch src-tauri/binaries/orbit-server-x86_64-unknown-linux-gnu
chmod +x src-tauri/binaries/*
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
@@ -310,6 +314,7 @@ jobs:
mkdir -p src-tauri/binaries
touch src-tauri/binaries/agent-bridge-x86_64-unknown-linux-gnu
touch src-tauri/binaries/claude-x86_64-unknown-linux-gnu
+ touch src-tauri/binaries/orbit-server-x86_64-unknown-linux-gnu
chmod +x src-tauri/binaries/*
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
@@ -330,6 +335,7 @@ jobs:
mkdir -p src-tauri/binaries
touch src-tauri/binaries/agent-bridge-x86_64-unknown-linux-gnu
touch src-tauri/binaries/claude-x86_64-unknown-linux-gnu
+ touch src-tauri/binaries/orbit-server-x86_64-unknown-linux-gnu
chmod +x src-tauri/binaries/*
- uses: dtolnay/rust-toolchain@1.88.0
- uses: Swatinem/rust-cache@v2
diff --git a/.gitignore b/.gitignore
index f7c06a387..70c79a9fb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -83,6 +83,7 @@ audits/
Prompt and Info/
# SDK docs and local RAG (indexed locally, not project code)
-SDK/
+# Anchored to root so it doesn't match Agent-backend/packages/sdk/ on case-insensitive filesystems
+/SDK/
models/
lancedb/
diff --git a/Agent-backend/.github/TEAM_MEMBERS b/Agent-backend/.github/TEAM_MEMBERS
new file mode 100644
index 000000000..840731bb4
--- /dev/null
+++ b/Agent-backend/.github/TEAM_MEMBERS
@@ -0,0 +1,2 @@
+# Local fallback for OpenCode build metadata.
+openai
diff --git a/Agent-backend/.gitignore b/Agent-backend/.gitignore
index bf78c046d..2c0eb7ef1 100644
--- a/Agent-backend/.gitignore
+++ b/Agent-backend/.gitignore
@@ -28,3 +28,6 @@ opencode-dev
logs/
*.bun-build
tsconfig.tsbuildinfo
+
+# Upstream sync (clone + reference snapshots — large, not needed in repo)
+upstream/repo/
diff --git a/Agent-backend/.opencode/.gitignore b/Agent-backend/.orbit/.gitignore
similarity index 100%
rename from Agent-backend/.opencode/.gitignore
rename to Agent-backend/.orbit/.gitignore
diff --git a/Agent-backend/.opencode/CLAUDE.md b/Agent-backend/.orbit/CLAUDE.md
similarity index 100%
rename from Agent-backend/.opencode/CLAUDE.md
rename to Agent-backend/.orbit/CLAUDE.md
diff --git a/Agent-backend/.opencode/agent/CLAUDE.md b/Agent-backend/.orbit/agent/CLAUDE.md
similarity index 100%
rename from Agent-backend/.opencode/agent/CLAUDE.md
rename to Agent-backend/.orbit/agent/CLAUDE.md
diff --git a/Agent-backend/.opencode/agent/docs.md b/Agent-backend/.orbit/agent/docs.md
similarity index 100%
rename from Agent-backend/.opencode/agent/docs.md
rename to Agent-backend/.orbit/agent/docs.md
diff --git a/Agent-backend/.opencode/agent/duplicate-pr.md b/Agent-backend/.orbit/agent/duplicate-pr.md
similarity index 100%
rename from Agent-backend/.opencode/agent/duplicate-pr.md
rename to Agent-backend/.orbit/agent/duplicate-pr.md
diff --git a/Agent-backend/.opencode/agent/translator.md b/Agent-backend/.orbit/agent/translator.md
similarity index 99%
rename from Agent-backend/.opencode/agent/translator.md
rename to Agent-backend/.orbit/agent/translator.md
index 263afbe9b..f1e88783f 100644
--- a/Agent-backend/.opencode/agent/translator.md
+++ b/Agent-backend/.orbit/agent/translator.md
@@ -636,8 +636,8 @@ XDG_CONFIG_HOME
```text
../../../config.mjs
@astrojs/starlight/components
-@opencode-ai/plugin
-@opencode-ai/sdk
+@orbit.build/plugin
+@orbit.build/sdk
path
shescape
zod
diff --git a/Agent-backend/.opencode/agent/triage.md b/Agent-backend/.orbit/agent/triage.md
similarity index 100%
rename from Agent-backend/.opencode/agent/triage.md
rename to Agent-backend/.orbit/agent/triage.md
diff --git a/Agent-backend/.opencode/command/CLAUDE.md b/Agent-backend/.orbit/command/CLAUDE.md
similarity index 100%
rename from Agent-backend/.opencode/command/CLAUDE.md
rename to Agent-backend/.orbit/command/CLAUDE.md
diff --git a/Agent-backend/.opencode/command/ai-deps.md b/Agent-backend/.orbit/command/ai-deps.md
similarity index 100%
rename from Agent-backend/.opencode/command/ai-deps.md
rename to Agent-backend/.orbit/command/ai-deps.md
diff --git a/Agent-backend/.opencode/command/audit-plan.md b/Agent-backend/.orbit/command/audit-plan.md
similarity index 100%
rename from Agent-backend/.opencode/command/audit-plan.md
rename to Agent-backend/.orbit/command/audit-plan.md
diff --git a/Agent-backend/.opencode/command/commit.md b/Agent-backend/.orbit/command/commit.md
similarity index 100%
rename from Agent-backend/.opencode/command/commit.md
rename to Agent-backend/.orbit/command/commit.md
diff --git a/Agent-backend/.opencode/command/issues.md b/Agent-backend/.orbit/command/issues.md
similarity index 100%
rename from Agent-backend/.opencode/command/issues.md
rename to Agent-backend/.orbit/command/issues.md
diff --git a/Agent-backend/.opencode/command/learn.md b/Agent-backend/.orbit/command/learn.md
similarity index 100%
rename from Agent-backend/.opencode/command/learn.md
rename to Agent-backend/.orbit/command/learn.md
diff --git a/Agent-backend/.opencode/command/rmslop.md b/Agent-backend/.orbit/command/rmslop.md
similarity index 100%
rename from Agent-backend/.opencode/command/rmslop.md
rename to Agent-backend/.orbit/command/rmslop.md
diff --git a/Agent-backend/.opencode/command/spellcheck.md b/Agent-backend/.orbit/command/spellcheck.md
similarity index 100%
rename from Agent-backend/.opencode/command/spellcheck.md
rename to Agent-backend/.orbit/command/spellcheck.md
diff --git a/Agent-backend/.opencode/env.d.ts b/Agent-backend/.orbit/env.d.ts
similarity index 100%
rename from Agent-backend/.opencode/env.d.ts
rename to Agent-backend/.orbit/env.d.ts
diff --git a/Agent-backend/.opencode/glossary/CLAUDE.md b/Agent-backend/.orbit/glossary/CLAUDE.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/CLAUDE.md
rename to Agent-backend/.orbit/glossary/CLAUDE.md
diff --git a/Agent-backend/.opencode/glossary/README.md b/Agent-backend/.orbit/glossary/README.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/README.md
rename to Agent-backend/.orbit/glossary/README.md
diff --git a/Agent-backend/.opencode/glossary/ar.md b/Agent-backend/.orbit/glossary/ar.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/ar.md
rename to Agent-backend/.orbit/glossary/ar.md
diff --git a/Agent-backend/.opencode/glossary/br.md b/Agent-backend/.orbit/glossary/br.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/br.md
rename to Agent-backend/.orbit/glossary/br.md
diff --git a/Agent-backend/.opencode/glossary/bs.md b/Agent-backend/.orbit/glossary/bs.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/bs.md
rename to Agent-backend/.orbit/glossary/bs.md
diff --git a/Agent-backend/.opencode/glossary/da.md b/Agent-backend/.orbit/glossary/da.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/da.md
rename to Agent-backend/.orbit/glossary/da.md
diff --git a/Agent-backend/.opencode/glossary/de.md b/Agent-backend/.orbit/glossary/de.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/de.md
rename to Agent-backend/.orbit/glossary/de.md
diff --git a/Agent-backend/.opencode/glossary/es.md b/Agent-backend/.orbit/glossary/es.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/es.md
rename to Agent-backend/.orbit/glossary/es.md
diff --git a/Agent-backend/.opencode/glossary/fr.md b/Agent-backend/.orbit/glossary/fr.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/fr.md
rename to Agent-backend/.orbit/glossary/fr.md
diff --git a/Agent-backend/.opencode/glossary/ja.md b/Agent-backend/.orbit/glossary/ja.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/ja.md
rename to Agent-backend/.orbit/glossary/ja.md
diff --git a/Agent-backend/.opencode/glossary/ko.md b/Agent-backend/.orbit/glossary/ko.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/ko.md
rename to Agent-backend/.orbit/glossary/ko.md
diff --git a/Agent-backend/.opencode/glossary/no.md b/Agent-backend/.orbit/glossary/no.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/no.md
rename to Agent-backend/.orbit/glossary/no.md
diff --git a/Agent-backend/.opencode/glossary/pl.md b/Agent-backend/.orbit/glossary/pl.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/pl.md
rename to Agent-backend/.orbit/glossary/pl.md
diff --git a/Agent-backend/.opencode/glossary/ru.md b/Agent-backend/.orbit/glossary/ru.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/ru.md
rename to Agent-backend/.orbit/glossary/ru.md
diff --git a/Agent-backend/.opencode/glossary/th.md b/Agent-backend/.orbit/glossary/th.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/th.md
rename to Agent-backend/.orbit/glossary/th.md
diff --git a/Agent-backend/.opencode/glossary/tr.md b/Agent-backend/.orbit/glossary/tr.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/tr.md
rename to Agent-backend/.orbit/glossary/tr.md
diff --git a/Agent-backend/.opencode/glossary/zh-cn.md b/Agent-backend/.orbit/glossary/zh-cn.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/zh-cn.md
rename to Agent-backend/.orbit/glossary/zh-cn.md
diff --git a/Agent-backend/.opencode/glossary/zh-tw.md b/Agent-backend/.orbit/glossary/zh-tw.md
similarity index 100%
rename from Agent-backend/.opencode/glossary/zh-tw.md
rename to Agent-backend/.orbit/glossary/zh-tw.md
diff --git a/Agent-backend/.opencode/opencode.jsonc b/Agent-backend/.orbit/orbit.jsonc
similarity index 100%
rename from Agent-backend/.opencode/opencode.jsonc
rename to Agent-backend/.orbit/orbit.jsonc
diff --git a/Agent-backend/.opencode/themes/CLAUDE.md b/Agent-backend/.orbit/themes/CLAUDE.md
similarity index 100%
rename from Agent-backend/.opencode/themes/CLAUDE.md
rename to Agent-backend/.orbit/themes/CLAUDE.md
diff --git a/Agent-backend/.opencode/themes/mytheme.json b/Agent-backend/.orbit/themes/mytheme.json
similarity index 100%
rename from Agent-backend/.opencode/themes/mytheme.json
rename to Agent-backend/.orbit/themes/mytheme.json
diff --git a/Agent-backend/.opencode/tool/CLAUDE.md b/Agent-backend/.orbit/tool/CLAUDE.md
similarity index 91%
rename from Agent-backend/.opencode/tool/CLAUDE.md
rename to Agent-backend/.orbit/tool/CLAUDE.md
index c0b680b35..13b453733 100644
--- a/Agent-backend/.opencode/tool/CLAUDE.md
+++ b/Agent-backend/.orbit/tool/CLAUDE.md
@@ -4,7 +4,7 @@
## Purpose
-Custom tool definitions for the OpenCode project. Each tool is a paired `.ts` (implementation) + `.txt` (description prompt) file. Tools use the `@opencode-ai/plugin` SDK's `tool()` function to define typed arguments, descriptions, and async execute functions. These are project-specific tools loaded at runtime alongside built-in tools.
+Custom tool definitions for the OpenCode project. Each tool is a paired `.ts` (implementation) + `.txt` (description prompt) file. Tools use the `@orbit.build/plugin` SDK's `tool()` function to define typed arguments, descriptions, and async execute functions. These are project-specific tools loaded at runtime alongside built-in tools.
## Usage Status
@@ -17,7 +17,7 @@ Custom tool definitions for the OpenCode project. Each tool is a paired `.ts` (i
| File | Purpose |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `github-pr-search.ts` | Tool implementation — searches GitHub PRs in `anomalyco/opencode` via GitHub Search API. Uses `@opencode-ai/plugin` `tool()` with typed args (`query`, `limit`, `offset`) |
+| `github-pr-search.ts` | Tool implementation — searches GitHub PRs in `anomalyco/opencode` via GitHub Search API. Uses `@orbit.build/plugin` `tool()` with typed args (`query`, `limit`, `offset`) |
| `github-pr-search.txt` | Tool description — tells the agent when and how to use the PR search tool |
| `github-triage.ts` | Tool implementation — assigns labels and owners to GitHub issues based on triage policy |
| `github-triage.txt` | Tool description — tells the agent to choose labels and assignees using current triage policy |
diff --git a/Agent-backend/.opencode/tool/github-pr-search.ts b/Agent-backend/.orbit/tool/github-pr-search.ts
similarity index 97%
rename from Agent-backend/.opencode/tool/github-pr-search.ts
rename to Agent-backend/.orbit/tool/github-pr-search.ts
index 587fdfaaf..19556fd04 100644
--- a/Agent-backend/.opencode/tool/github-pr-search.ts
+++ b/Agent-backend/.orbit/tool/github-pr-search.ts
@@ -1,5 +1,5 @@
///
-import { tool } from "@opencode-ai/plugin"
+import { tool } from "@orbit.build/plugin"
import DESCRIPTION from "./github-pr-search.txt"
async function githubFetch(endpoint: string, options: RequestInit = {}) {
diff --git a/Agent-backend/.opencode/tool/github-pr-search.txt b/Agent-backend/.orbit/tool/github-pr-search.txt
similarity index 100%
rename from Agent-backend/.opencode/tool/github-pr-search.txt
rename to Agent-backend/.orbit/tool/github-pr-search.txt
diff --git a/Agent-backend/.opencode/tool/github-triage.ts b/Agent-backend/.orbit/tool/github-triage.ts
similarity index 98%
rename from Agent-backend/.opencode/tool/github-triage.ts
rename to Agent-backend/.orbit/tool/github-triage.ts
index 8ad0212ad..769ea3bda 100644
--- a/Agent-backend/.opencode/tool/github-triage.ts
+++ b/Agent-backend/.orbit/tool/github-triage.ts
@@ -1,5 +1,5 @@
///
-import { tool } from "@opencode-ai/plugin"
+import { tool } from "@orbit.build/plugin"
import DESCRIPTION from "./github-triage.txt"
const TEAM = {
diff --git a/Agent-backend/.opencode/tool/github-triage.txt b/Agent-backend/.orbit/tool/github-triage.txt
similarity index 100%
rename from Agent-backend/.opencode/tool/github-triage.txt
rename to Agent-backend/.orbit/tool/github-triage.txt
diff --git a/Agent-backend/CLAUDE.md b/Agent-backend/CLAUDE.md
index 27804c390..f1cdf77c6 100644
--- a/Agent-backend/CLAUDE.md
+++ b/Agent-backend/CLAUDE.md
@@ -102,7 +102,7 @@ Bun workspace monorepo orchestrated with Turbo. After stripping:
- **`packages/opencode`** — CLI, API server, agent logic, tools, session management. **The heart.**
- **`packages/sdk/js`** — Auto-generated TypeScript SDK from OpenAPI spec.
-- **`packages/plugin`** — Plugin SDK (`@opencode-ai/plugin`).
+- **`packages/plugin`** — Plugin SDK (`@orbit.build/plugin`).
- **`packages/util`** — Shared utilities (array, encoding, error, path, retry, slug).
- **`packages/script`** — Build script utilities (semver).
diff --git a/Agent-backend/bun.lock b/Agent-backend/bun.lock
index 597cd88c8..40606e5db 100644
--- a/Agent-backend/bun.lock
+++ b/Agent-backend/bun.lock
@@ -6,9 +6,9 @@
"name": "opencode",
"dependencies": {
"@aws-sdk/client-s3": "3.933.0",
- "@opencode-ai/plugin": "workspace:*",
- "@opencode-ai/script": "workspace:*",
- "@opencode-ai/sdk": "workspace:*",
+ "@orbit.build/plugin": "workspace:*",
+ "@orbit.build/script": "workspace:*",
+ "@orbit.build/sdk": "workspace:*",
"typescript": "catalog:",
},
"devDependencies": {
@@ -29,13 +29,13 @@
},
},
"packages/app": {
- "name": "@opencode-ai/app",
+ "name": "@orbit.build/app",
"version": "1.2.24",
"dependencies": {
"@kobalte/core": "catalog:",
- "@opencode-ai/sdk": "workspace:*",
- "@opencode-ai/ui": "workspace:*",
- "@opencode-ai/util": "workspace:*",
+ "@orbit.build/sdk": "workspace:*",
+ "@orbit.build/ui": "workspace:*",
+ "@orbit.build/util": "workspace:*",
"@shikijs/transformers": "3.9.2",
"@solid-primitives/active-element": "2.1.3",
"@solid-primitives/audio": "1.4.2",
@@ -79,11 +79,11 @@
},
},
"packages/desktop": {
- "name": "@opencode-ai/desktop",
+ "name": "@orbit.build/desktop",
"version": "1.2.24",
"dependencies": {
- "@opencode-ai/app": "workspace:*",
- "@opencode-ai/ui": "workspace:*",
+ "@orbit.build/app": "workspace:*",
+ "@orbit.build/ui": "workspace:*",
"@solid-primitives/i18n": "2.2.1",
"@solid-primitives/storage": "catalog:",
"@solidjs/meta": "catalog:",
@@ -113,7 +113,7 @@
},
"packages/opencode": {
"name": "opencode",
- "version": "1.2.24",
+ "version": "1.2.26",
"bin": {
"opencode": "./bin/opencode",
"orbit": "./bin/opencode",
@@ -151,13 +151,13 @@
"@octokit/graphql": "9.0.2",
"@octokit/rest": "catalog:",
"@openauthjs/openauth": "catalog:",
- "@opencode-ai/plugin": "workspace:*",
- "@opencode-ai/script": "workspace:*",
- "@opencode-ai/sdk": "workspace:*",
- "@opencode-ai/util": "workspace:*",
"@openrouter/ai-sdk-provider": "1.5.4",
- "@opentui/core": "0.1.86",
- "@opentui/solid": "0.1.86",
+ "@opentui/core": "0.1.87",
+ "@opentui/solid": "0.1.87",
+ "@orbit.build/plugin": "workspace:*",
+ "@orbit.build/script": "workspace:*",
+ "@orbit.build/sdk": "workspace:*",
+ "@orbit.build/util": "workspace:*",
"@parcel/watcher": "2.5.1",
"@pierre/diffs": "catalog:",
"@solid-primitives/event-bus": "1.1.2",
@@ -173,6 +173,7 @@
"decimal.js": "10.5.0",
"diff": "catalog:",
"drizzle-orm": "1.0.0-beta.16-ea816b6",
+ "effect": "catalog:",
"fuzzysort": "3.1.0",
"glob": "13.0.5",
"google-auth-library": "10.5.0",
@@ -203,14 +204,16 @@
},
"devDependencies": {
"@babel/core": "7.28.4",
+ "@effect/language-service": "0.79.0",
"@octokit/webhooks-types": "7.6.1",
- "@opencode-ai/script": "workspace:*",
+ "@orbit.build/script": "workspace:*",
"@parcel/watcher-darwin-arm64": "2.5.1",
"@parcel/watcher-darwin-x64": "2.5.1",
"@parcel/watcher-linux-arm64-glibc": "2.5.1",
"@parcel/watcher-linux-arm64-musl": "2.5.1",
"@parcel/watcher-linux-x64-glibc": "2.5.1",
"@parcel/watcher-linux-x64-musl": "2.5.1",
+ "@parcel/watcher-win32-arm64": "2.5.1",
"@parcel/watcher-win32-x64": "2.5.1",
"@standard-schema/spec": "1.0.0",
"@tsconfig/bun": "catalog:",
@@ -231,10 +234,10 @@
},
},
"packages/plugin": {
- "name": "@opencode-ai/plugin",
- "version": "1.2.24",
+ "name": "@orbit.build/plugin",
+ "version": "1.2.26",
"dependencies": {
- "@opencode-ai/sdk": "workspace:*",
+ "@orbit.build/sdk": "workspace:*",
"zod": "catalog:",
},
"devDependencies": {
@@ -245,7 +248,7 @@
},
},
"packages/script": {
- "name": "@opencode-ai/script",
+ "name": "@orbit.build/script",
"dependencies": {
"semver": "^7.6.3",
},
@@ -255,8 +258,8 @@
},
},
"packages/sdk/js": {
- "name": "@opencode-ai/sdk",
- "version": "1.2.24",
+ "name": "@orbit.build/sdk",
+ "version": "0.0.5",
"devDependencies": {
"@hey-api/openapi-ts": "0.90.10",
"@tsconfig/node22": "catalog:",
@@ -266,12 +269,12 @@
},
},
"packages/ui": {
- "name": "@opencode-ai/ui",
+ "name": "@orbit.build/ui",
"version": "1.2.24",
"dependencies": {
"@kobalte/core": "catalog:",
- "@opencode-ai/sdk": "workspace:*",
- "@opencode-ai/util": "workspace:*",
+ "@orbit.build/sdk": "workspace:*",
+ "@orbit.build/util": "workspace:*",
"@pierre/diffs": "catalog:",
"@shikijs/transformers": "3.9.2",
"@solid-primitives/bounds": "0.1.3",
@@ -312,8 +315,8 @@
},
},
"packages/util": {
- "name": "@opencode-ai/util",
- "version": "1.2.24",
+ "name": "@orbit.build/util",
+ "version": "1.2.26",
"dependencies": {
"zod": "catalog:",
},
@@ -361,6 +364,7 @@
"dompurify": "3.3.1",
"drizzle-kit": "1.0.0-beta.16-ea816b6",
"drizzle-orm": "1.0.0-beta.16-ea816b6",
+ "effect": "4.0.0-beta.31",
"fuzzysort": "3.1.0",
"hono": "4.10.7",
"hono-openapi": "1.1.2",
@@ -468,23 +472,23 @@
"@aws-sdk/core": ["@aws-sdk/core@3.932.0", "", { "dependencies": { "@aws-sdk/types": "3.930.0", "@aws-sdk/xml-builder": "3.930.0", "@smithy/core": "^3.18.2", "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", "@smithy/protocol-http": "^5.3.5", "@smithy/signature-v4": "^5.3.5", "@smithy/smithy-client": "^4.9.5", "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-middleware": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-AS8gypYQCbNojwgjvZGkJocC2CoEICDx9ZJ15ILsv+MlcCVLtUJSRSx3VzJOUY2EEIaGLRrPNlIqyn/9/fySvA=="],
- "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.972.11", "", { "dependencies": { "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-yHBjinYauxSvikf15EtgXyZ9TBIMVHUSWFPycQtPltTINpK+uv6K22zKkVsbxpB0gvsdRdIWP0UG5gejM+jPuQ=="],
+ "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.972.13", "", { "dependencies": { "@aws-sdk/nested-clients": "^3.996.10", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-WZnIK8NPX+4OXkpVoNmUS+Ya1osqjszUsDqFEz97+a/LD5K012np9iR/eWEC43btx8zQjyRIK8kyiwbh8SiHzg=="],
- "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.17", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-MBAMW6YELzE1SdkOniqr51mrjapQUv8JXSGxtwRjQV0mwVDutVsn22OPAUt4RcLRvdiHQmNBDEFP9iTeSVCOlA=="],
+ "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-X0B8AlQY507i5DwjLByeU2Af4ARsl9Vr84koDcXCbAkplmU+1xBFWxEPrWRAoh56waBne/yJqEloSwvRf4x6XA=="],
- "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.19", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/node-http-handler": "^4.4.14", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.17", "tslib": "^2.6.2" } }, "sha512-9EJROO8LXll5a7eUFqu48k6BChrtokbmgeMWmsH7lBb6lVbtjslUYz/ShLi+SHkYzTomiGBhmzTW7y+H4BxsnA=="],
+ "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.4.16", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-stream": "^4.5.19", "tslib": "^2.6.2" } }, "sha512-ey9Lelj001+oOfrbKmS6R2CJAiXX7QKY4Vj9VJv6L2eE6/VjD8DocHIoYqztTm70xDLR4E1jYPTKfIui+eRNDA=="],
- "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/credential-provider-env": "^3.972.17", "@aws-sdk/credential-provider-http": "^3.972.19", "@aws-sdk/credential-provider-login": "^3.972.18", "@aws-sdk/credential-provider-process": "^3.972.17", "@aws-sdk/credential-provider-sso": "^3.972.18", "@aws-sdk/credential-provider-web-identity": "^3.972.18", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/credential-provider-imds": "^4.2.11", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-vthIAXJISZnj2576HeyLBj4WTeX+I7PwWeRkbOa0mVX39K13SCGxCgOFuKj2ytm9qTlLOmXe4cdEnroteFtJfw=="],
+ "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/credential-provider-env": "^3.972.18", "@aws-sdk/credential-provider-http": "^3.972.20", "@aws-sdk/credential-provider-login": "^3.972.20", "@aws-sdk/credential-provider-process": "^3.972.18", "@aws-sdk/credential-provider-sso": "^3.972.20", "@aws-sdk/credential-provider-web-identity": "^3.972.20", "@aws-sdk/nested-clients": "^3.996.10", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-5flXSnKHMloObNF+9N0cupKegnH1Z37cdVlpETVgx8/rAhCe+VNlkcZH3HDg2SDn9bI765S+rhNPXGDJJPfbtA=="],
- "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-kINzc5BBxdYBkPZ0/i1AMPMOk5b5QaFNbYMElVw5QTX13AKj6jcxnv/YNl9oW9mg+Y08ti19hh01HhyEAxsSJQ=="],
+ "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/nested-clients": "^3.996.10", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-gEWo54nfqp2jABMu6HNsjVC4hDLpg9HC8IKSJnp0kqWtxIJYHTmiLSsIfI4ScQjxEwpB+jOOH8dOLax1+hy/Hw=="],
"@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.933.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.932.0", "@aws-sdk/credential-provider-http": "3.932.0", "@aws-sdk/credential-provider-ini": "3.933.0", "@aws-sdk/credential-provider-process": "3.932.0", "@aws-sdk/credential-provider-sso": "3.933.0", "@aws-sdk/credential-provider-web-identity": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-L2dE0Y7iMLammQewPKNeEh1z/fdJyYEU+/QsLBD9VEh+SXcN/FIyTi21Isw8wPZN6lMB9PDVtISzBnF8HuSFrw=="],
- "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.17", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-c8G8wT1axpJDgaP3xzcy+q8Y1fTi9A2eIQJvyhQ9xuXrUZhlCfXbC0vM9bM1CUXiZppFQ1p7g0tuUMvil/gCPg=="],
+ "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Tpl7SRaPoOLT32jbTWchPsn52hYYgJ0kpiFgnwk8pxTANQdUymVSZkzFvv1+oOgZm1CrbQUP9MBeoMZ9IzLZjA=="],
- "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/token-providers": "3.1005.0", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-YHYEfj5S2aqInRt5ub8nDOX8vAxgMvd84wm2Y3WVNfFa/53vOv9T7WOAqXI25qjj3uEcV46xxfqdDQk04h5XQA=="],
+ "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/nested-clients": "^3.996.10", "@aws-sdk/token-providers": "3.1009.0", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-p+R+PYR5Z7Gjqf/6pvbCnzEHcqPCpLzR7Yf127HjJ6EAb4hUcD+qsNRnuww1sB/RmSeCLxyay8FMyqREw4p1RA=="],
- "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-OqlEQpJ+J3T5B96qtC1zLLwkBloechP+fezKbCH0sbd2cCc0Ra55XpxWpk/hRj69xAOYtHvoC4orx6eTa4zU7g=="],
+ "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/nested-clients": "^3.996.10", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-rWCmh8o7QY4CsUj63qopzMzkDq/yPpkrpb+CnjBEFSOg/02T/we7sSTVg4QsDiVS9uwZ8VyONhq98qt+pIh3KA=="],
"@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.993.0", "", { "dependencies": { "@aws-sdk/client-cognito-identity": "3.993.0", "@aws-sdk/core": "^3.973.11", "@aws-sdk/credential-provider-cognito-identity": "^3.972.3", "@aws-sdk/credential-provider-env": "^3.972.9", "@aws-sdk/credential-provider-http": "^3.972.11", "@aws-sdk/credential-provider-ini": "^3.972.9", "@aws-sdk/credential-provider-login": "^3.972.9", "@aws-sdk/credential-provider-node": "^3.972.10", "@aws-sdk/credential-provider-process": "^3.972.9", "@aws-sdk/credential-provider-sso": "^3.972.9", "@aws-sdk/credential-provider-web-identity": "^3.972.9", "@aws-sdk/nested-clients": "3.993.0", "@aws-sdk/types": "^3.973.1", "@smithy/config-resolver": "^4.4.6", "@smithy/core": "^3.23.2", "@smithy/credential-provider-imds": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", "@smithy/property-provider": "^4.2.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" } }, "sha512-1M/nukgPSLqe9krzOKHnE8OylUaKAiokAV3xRLdeExVHcRE7WG5uzCTKWTj1imKvPjDqXq/FWhlbbdWIn7xIwA=="],
@@ -514,7 +518,7 @@
"@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.932.0", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "3.932.0", "@aws-sdk/types": "3.930.0", "@smithy/protocol-http": "^5.3.5", "@smithy/signature-v4": "^5.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-NCIRJvoRc9246RZHIusY1+n/neeG2yGhBGdKhghmrNdM+mLLN6Ii7CKFZjx3DhxtpHMpl1HWLTMhdVrGwP2upw=="],
- "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1005.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-vMxd+ivKqSxU9bHx5vmAlFKDAkjGotFU56IOkDa5DaTu1WWwbcse0yFHEm9I537oVvodaiwMl3VBwgHfzQ2rvw=="],
+ "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1009.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/nested-clients": "^3.996.10", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-KCPLuTqN9u0Rr38Arln78fRG9KXpzsPWmof+PZzfAHMMQq2QED6YjQrkrfiH7PDefLWEposY1o4/eGwrmKA4JA=="],
"@aws-sdk/types": ["@aws-sdk/types@3.930.0", "", { "dependencies": { "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A=="],
@@ -530,7 +534,7 @@
"@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.930.0", "", { "dependencies": { "@smithy/types": "^4.9.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" } }, "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA=="],
- "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.3", "", {}, "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw=="],
+ "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.4", "", {}, "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ=="],
"@azure-rest/core-client": ["@azure-rest/core-client@2.5.1", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", "@azure/core-rest-pipeline": "^1.22.0", "@azure/core-tracing": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A=="],
@@ -564,11 +568,11 @@
"@azure/logger": ["@azure/logger@1.3.0", "", { "dependencies": { "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" } }, "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA=="],
- "@azure/msal-browser": ["@azure/msal-browser@4.29.0", "", { "dependencies": { "@azure/msal-common": "15.15.0" } }, "sha512-/f3eHkSNUTl6DLQHm+bKecjBKcRQxbd/XLx8lvSYp8Nl/HRyPuIPOijt9Dt0sH50/SxOwQ62RnFCmFlGK+bR/w=="],
+ "@azure/msal-browser": ["@azure/msal-browser@4.29.1", "", { "dependencies": { "@azure/msal-common": "15.16.1" } }, "sha512-1Vrt27du1cl4QHkzLc6L4aeXqliPIDIs5l/1I4hWWMXkXccY/EznJT1+pBdoVze0azTAI8sCyq5B4cBVYG1t9w=="],
- "@azure/msal-common": ["@azure/msal-common@15.15.0", "", {}, "sha512-/n+bN0AKlVa+AOcETkJSKj38+bvFs78BaP4rNtv3MJCmPH0YrHiskMRe74OhyZ5DZjGISlFyxqvf9/4QVEi2tw=="],
+ "@azure/msal-common": ["@azure/msal-common@15.16.1", "", {}, "sha512-qxUG9TCl+TVSSX58onVDHDWrvT5CE0+NeeUAbkQqaESpSm79u5IePLnPWMMjCUnUR2zJd4+Bt9vioVRzLmJb2g=="],
- "@azure/msal-node": ["@azure/msal-node@3.8.8", "", { "dependencies": { "@azure/msal-common": "15.15.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" } }, "sha512-+f1VrJH1iI517t4zgmuhqORja0bL6LDQXfBqkjuMmfTYXTQQnh1EvwwxO3UbKLT05N0obF72SRHFrC1RBDv5Gg=="],
+ "@azure/msal-node": ["@azure/msal-node@3.8.9", "", { "dependencies": { "@azure/msal-common": "15.16.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" } }, "sha512-jZ0pw/BbdEUWGhomCaAiVDfXRI/9K56m5hTNqB/CzcbZEYhXm5qpK1cDngN1iXfwSfmUMorOUQ2FC0dyuQ9uRg=="],
"@azure/storage-blob": ["@azure/storage-blob@12.31.0", "", { "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.3", "@azure/core-http-compat": "^2.2.0", "@azure/core-lro": "^2.2.0", "@azure/core-paging": "^1.6.2", "@azure/core-rest-pipeline": "^1.19.1", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/core-xml": "^1.4.5", "@azure/logger": "^1.1.4", "@azure/storage-common": "^12.3.0", "events": "^3.0.0", "tslib": "^2.8.1" } }, "sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg=="],
@@ -646,11 +650,13 @@
"@drizzle-team/brocli": ["@drizzle-team/brocli@0.11.0", "", {}, "sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg=="],
- "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="],
+ "@effect/language-service": ["@effect/language-service@0.79.0", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-DEmIOsg1GjjP6s9HXH1oJrW+gDmzkhVv9WOZl6to5eNyyCrjz1S2PDqQ7aYrW/HuifhfwI5Bik1pK4pj7Z+lrg=="],
- "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="],
+ "@emnapi/core": ["@emnapi/core@1.9.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" } }, "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w=="],
- "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="],
+ "@emnapi/runtime": ["@emnapi/runtime@1.9.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw=="],
+
+ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="],
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="],
@@ -868,6 +874,18 @@
"@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.25.2", "", { "dependencies": { "@hono/node-server": "^1.19.7", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "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", "jose": "^6.1.1", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.0" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww=="],
+ "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="],
+
+ "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw=="],
+
+ "@msgpackr-extract/msgpackr-extract-linux-arm": ["@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3", "", { "os": "linux", "cpu": "arm" }, "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw=="],
+
+ "@msgpackr-extract/msgpackr-extract-linux-arm64": ["@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg=="],
+
+ "@msgpackr-extract/msgpackr-extract-linux-x64": ["@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg=="],
+
+ "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ=="],
+
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="],
"@octokit/auth-token": ["@octokit/auth-token@4.0.0", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="],
@@ -900,41 +918,45 @@
"@openauthjs/openauth": ["@openauthjs/openauth@0.0.0-20250322224806", "", { "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-p5IWSRXvABcwocH2dNI0w8c1QJelIOFulwhKk+aLLFfUbs8u1pr7kQbYe8yCSM2+bcLHiwbogpUQc2ovrGwCuw=="],
- "@opencode-ai/app": ["@opencode-ai/app@workspace:packages/app"],
+ "@opencode-ai/plugin": ["@opencode-ai/plugin@1.2.26", "", { "dependencies": { "@opencode-ai/sdk": "1.2.26", "zod": "4.1.8" } }, "sha512-pC71KGAI9T0+S84KpbEq9THp5pT7KOq+GmfdXkvQ7KSH5zi+iASWRhqorir73sKmEj2MQfpbe1BxdcU5qbeOwA=="],
- "@opencode-ai/desktop": ["@opencode-ai/desktop@workspace:packages/desktop"],
+ "@opencode-ai/sdk": ["@opencode-ai/sdk@1.2.26", "", {}, "sha512-HPB+0pfvTMPj2KEjNLF3oqgldKW8koTJ7ssqXwzndazqxS+gUynzvdIKIQP4+QIInNcc5nJMG9JtfLcePGgTLQ=="],
- "@opencode-ai/plugin": ["@opencode-ai/plugin@workspace:packages/plugin"],
+ "@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@1.5.4", "", { "dependencies": { "@openrouter/sdk": "^0.1.27" }, "peerDependencies": { "ai": "^5.0.0", "zod": "^3.24.1 || ^v4" } }, "sha512-xrSQPUIH8n9zuyYZR0XK7Ba0h2KsjJcMkxnwaYfmv13pKs3sDkjPzVPPhlhzqBGddHb5cFEwJ9VFuFeDcxCDSw=="],
- "@opencode-ai/script": ["@opencode-ai/script@workspace:packages/script"],
+ "@openrouter/sdk": ["@openrouter/sdk@0.1.27", "", { "dependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-RH//L10bSmc81q25zAZudiI4kNkLgxF2E+WU42vghp3N6TEvZ6F0jK7uT3tOxkEn91gzmMw9YVmDENy7SJsajQ=="],
- "@opencode-ai/sdk": ["@opencode-ai/sdk@workspace:packages/sdk/js"],
+ "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],
- "@opencode-ai/ui": ["@opencode-ai/ui@workspace:packages/ui"],
+ "@opentui/core": ["@opentui/core@0.1.87", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "marked": "17.0.1", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.87", "@opentui/core-darwin-x64": "0.1.87", "@opentui/core-linux-arm64": "0.1.87", "@opentui/core-linux-x64": "0.1.87", "@opentui/core-win32-arm64": "0.1.87", "@opentui/core-win32-x64": "0.1.87", "bun-webgpu": "0.1.5", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-dhsmMv0IqKftwG7J/pBrLBj2armsYIg5R3LBvciRQI/6X89GufP4l1u0+QTACAx6iR4SYJJNVNQ2tdX8LM9rMw=="],
- "@opencode-ai/util": ["@opencode-ai/util@workspace:packages/util"],
+ "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.87", "", { "os": "darwin", "cpu": "arm64" }, "sha512-G8oq85diOfkU6n0T1CxCle7oDmpKxwhcdhZ9khBMU5IrfLx9ZDuCM3F6MsiRQWdvPPCq2oomNbd64bYkPamYgw=="],
- "@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@1.5.4", "", { "dependencies": { "@openrouter/sdk": "^0.1.27" }, "peerDependencies": { "ai": "^5.0.0", "zod": "^3.24.1 || ^v4" } }, "sha512-xrSQPUIH8n9zuyYZR0XK7Ba0h2KsjJcMkxnwaYfmv13pKs3sDkjPzVPPhlhzqBGddHb5cFEwJ9VFuFeDcxCDSw=="],
+ "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.87", "", { "os": "darwin", "cpu": "x64" }, "sha512-MYTFQfOHm6qO7YaY4GHK9u/oJlXY6djaaxl5I+k4p2mk3vvuFIl/AP1ypITwBFjyV5gyp7PRWFp4nGfY9oN8bw=="],
- "@openrouter/sdk": ["@openrouter/sdk@0.1.27", "", { "dependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-RH//L10bSmc81q25zAZudiI4kNkLgxF2E+WU42vghp3N6TEvZ6F0jK7uT3tOxkEn91gzmMw9YVmDENy7SJsajQ=="],
+ "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.87", "", { "os": "linux", "cpu": "arm64" }, "sha512-he8o1h5M6oskRJ7wE+xKJgmWnv5ZwN6gB3M/Z+SeHtOMPa5cZmi3TefTjG54llEgFfx0F9RcqHof7TJ/GNxRkw=="],
- "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],
+ "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.87", "", { "os": "linux", "cpu": "x64" }, "sha512-aiUwjPlH4yDcB8/6YDKSmMkaoGAAltL0Xo0AzXyAtJXWK5tkCSaYjEVwzJ/rYRkr4Magnad+Mjth4AQUWdR2AA=="],
+
+ "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.87", "", { "os": "win32", "cpu": "arm64" }, "sha512-cmP0pOyREjWGniHqbDmaMY7U+1AyagrD8VseJbU0cGpNgVpG2/gbrJUGdfdLB0SNb+mzLdx6SOjdxtrElwRCQA=="],
+
+ "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.87", "", { "os": "win32", "cpu": "x64" }, "sha512-N2GErAAP8iODf2RPp86pilPaVKiD6G4pkpZL5nLGbKsl0bndrVTpSqZcn8+/nQwFZDPD/AsiRTYNOfWOblhzOw=="],
- "@opentui/core": ["@opentui/core@0.1.86", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "marked": "17.0.1", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.86", "@opentui/core-darwin-x64": "0.1.86", "@opentui/core-linux-arm64": "0.1.86", "@opentui/core-linux-x64": "0.1.86", "@opentui/core-win32-arm64": "0.1.86", "@opentui/core-win32-x64": "0.1.86", "bun-webgpu": "0.1.5", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-3tRLbI9ADrQE1jEEn4x2aJexEOQZkv9Emk2BixMZqxfVhz2zr2SxtpimDAX0vmZK3+GnWAwBWxuaCAsxZpY4+w=="],
+ "@opentui/solid": ["@opentui/solid@0.1.87", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.87", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "entities": "7.0.1", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-lRT9t30l8+FtgOjjWJcdb2MT6hP8/RKqwGgYwTI7fXrOqdhxxwdP2SM+rH2l3suHeASheiTdlvPAo230iUcsvg=="],
- "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.86", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Zp7q64+d+Dcx6YrH3mRcnHq8EOBnrfc1RvjgSWLhpXr49hY6LzuhqpfZM57aGErPYlR+ff8QM6e5FUkFnDfyjw=="],
+ "@orbit.build/app": ["@orbit.build/app@workspace:packages/app"],
- "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.86", "", { "os": "darwin", "cpu": "x64" }, "sha512-NcxfjCJm1kLnTMVOpAPdRYNi8W8XdAXNa6N7i9khiVFrl2v5KRQfUjbrSOUYVxFJNc3jKFG6rsn3jEApvn92qA=="],
+ "@orbit.build/desktop": ["@orbit.build/desktop@workspace:packages/desktop"],
- "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.86", "", { "os": "linux", "cpu": "arm64" }, "sha512-EDHAvqSOr8CXzbDvo1aE5blJ6wu1aSbR2LqoXtoeXHemr2T2W42D2TdIWewG6K+/BuRbzZnqt9wnYFBksLW6lw=="],
+ "@orbit.build/plugin": ["@orbit.build/plugin@workspace:packages/plugin"],
- "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.86", "", { "os": "linux", "cpu": "x64" }, "sha512-VBaBkVdQDxYV4WcKjb+jgyMS5PiVHepvfaoKWpz1Bq+J01xXW4XPcXyPGkgR1+2R93KzaugEnLscTW4mWtLHlQ=="],
+ "@orbit.build/script": ["@orbit.build/script@workspace:packages/script"],
- "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.86", "", { "os": "win32", "cpu": "arm64" }, "sha512-xKbT7sEKYKGwUPkoqmLfHjbJU+vwHPDwf/r/mIunL41JXQBB35CSZ3/QgIwpp2kkteu7oE1tdBdg15ogUU4OMg=="],
+ "@orbit.build/sdk": ["@orbit.build/sdk@workspace:packages/sdk/js"],
- "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.86", "", { "os": "win32", "cpu": "x64" }, "sha512-HRfgAUlcu71/MrtgfX4Gj7PsDtfXZiuC506Pkn1OnRN1Xomcu10BVRDweUa0/g8ldU9i9kLjMGGnpw6/NjaBFg=="],
+ "@orbit.build/ui": ["@orbit.build/ui@workspace:packages/ui"],
- "@opentui/solid": ["@opentui/solid@0.1.86", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.86", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-pOZC9dlZIH+bpstVVZ2AvYukBnslZTKSl/y5H8FWcMTHGv/BzpGxXBxstL65E/IQASqPFbvFcs7yMRzdLhynmA=="],
+ "@orbit.build/util": ["@orbit.build/util@workspace:packages/util"],
"@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="],
@@ -1058,75 +1080,75 @@
"@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
- "@smithy/abort-controller": ["@smithy/abort-controller@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ=="],
+ "@smithy/abort-controller": ["@smithy/abort-controller@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q=="],
"@smithy/chunked-blob-reader": ["@smithy/chunked-blob-reader@5.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw=="],
"@smithy/chunked-blob-reader-native": ["@smithy/chunked-blob-reader-native@4.2.3", "", { "dependencies": { "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw=="],
- "@smithy/config-resolver": ["@smithy/config-resolver@4.4.10", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg=="],
+ "@smithy/config-resolver": ["@smithy/config-resolver@4.4.11", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-YxFiiG4YDAtX7WMN7RuhHZLeTmRRAOyCbr+zB8e3AQzHPnUhS8zXjB1+cniPVQI3xbWsQPM0X2aaIkO/ME0ymw=="],
- "@smithy/core": ["@smithy/core@3.23.9", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.12", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-stream": "^4.5.17", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-1Vcut4LEL9HZsdpI0vFiRYIsaoPwZLjAxnVQDUMQK8beMS+EYPLDQCXtbzfxmM5GzSgjfe2Q9M7WaXwIMQllyQ=="],
+ "@smithy/core": ["@smithy/core@3.23.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-stream": "^4.5.19", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-952rGf7hBRnhUIaeLp6q4MptKW8sPFe5VvkoZ5qIzFAtx6c/QZ/54FS3yootsyUSf9gJX/NBqEBNdNR7jMIlpQ=="],
- "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.11", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g=="],
+ "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.12", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg=="],
- "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.11", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-Sf39Ml0iVX+ba/bgMPxaXWAAFmHqYLTmbjAPfLPLY8CrYkRDEqZdUsKC1OwVMCdJXfAt0v4j49GIJ8DoSYAe6w=="],
+ "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.12", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA=="],
- "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.11", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-3rEpo3G6f/nRS7fQDsZmxw/ius6rnlIpz4UX6FlALEzz8JoSxFmdBt0SZnthis+km7sQo6q5/3e+UJcuQivoXA=="],
+ "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.12", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A=="],
- "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-XeNIA8tcP/GDWnnKkO7qEm/bg0B/bP9lvIXZBXcGZwZ+VYM8h8k9wuDvUODtdQ2Wcp2RcBkPTCSMmaniVHrMlA=="],
+ "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q=="],
- "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.11", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-fzbCh18rscBDTQSCrsp1fGcclLNF//nJyhjldsEl/5wCYmgpHblv5JSppQAyQI24lClsFT0wV06N1Porn0IsEw=="],
+ "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.12", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA=="],
- "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.11", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-MJ7HcI+jEkqoWT5vp+uoVaAjBrmxBtKhZTeynDRG/seEjJfqyg3SiqMMqyPnAMzmIfLaeJ/uiuSDP/l9AnMy/Q=="],
+ "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.12", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ=="],
- "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.13", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/querystring-builder": "^4.2.11", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ=="],
+ "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.15", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A=="],
- "@smithy/hash-blob-browser": ["@smithy/hash-blob-browser@4.2.12", "", { "dependencies": { "@smithy/chunked-blob-reader": "^5.2.2", "@smithy/chunked-blob-reader-native": "^4.2.3", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-1wQE33DsxkM/waftAhCH9VtJbUGyt1PJ9YRDpOu+q9FUi73LLFUZ2fD8A61g2mT1UY9k7b99+V1xZ41Rz4SHRQ=="],
+ "@smithy/hash-blob-browser": ["@smithy/hash-blob-browser@4.2.13", "", { "dependencies": { "@smithy/chunked-blob-reader": "^5.2.2", "@smithy/chunked-blob-reader-native": "^4.2.3", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-YrF4zWKh+ghLuquldj6e/RzE3xZYL8wIPfkt0MqCRphVICjyyjH8OwKD7LLlKpVEbk4FLizFfC1+gwK6XQdR3g=="],
- "@smithy/hash-node": ["@smithy/hash-node@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A=="],
+ "@smithy/hash-node": ["@smithy/hash-node@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w=="],
- "@smithy/hash-stream-node": ["@smithy/hash-stream-node@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-hQsTjwPCRY8w9GK07w1RqJi3e+myh0UaOWBBhZ1UMSDgofH/Q1fEYzU1teaX6HkpX/eWDdm7tAGR0jBPlz9QEQ=="],
+ "@smithy/hash-stream-node": ["@smithy/hash-stream-node@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-O3YbmGExeafuM/kP7Y8r6+1y0hIh3/zn6GROx0uNlB54K9oihAL75Qtc+jFfLNliTi6pxOAYZrRKD9A7iA6UFw=="],
- "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g=="],
+ "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g=="],
"@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="],
- "@smithy/md5-js": ["@smithy/md5-js@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-350X4kGIrty0Snx2OWv7rPM6p6vM7RzryvFs6B/56Cux3w3sChOb3bymo5oidXJlPcP9fIRxGUCk7GqpiSOtng=="],
+ "@smithy/md5-js": ["@smithy/md5-js@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-W/oIpHCpWU2+iAkfZYyGWE+qkpuf3vEXHLxQQDx9FPNZTTdnul0dZ2d/gUFrtQ5je1G2kp4cjG0/24YueG2LbQ=="],
- "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw=="],
+ "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA=="],
- "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.23", "", { "dependencies": { "@smithy/core": "^3.23.9", "@smithy/middleware-serde": "^4.2.12", "@smithy/node-config-provider": "^4.3.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-middleware": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-UEFIejZy54T1EJn2aWJ45voB7RP2T+IRzUqocIdM6GFFa5ClZncakYJfcYnoXt3UsQrZZ9ZRauGm77l9UCbBLw=="],
+ "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.25", "", { "dependencies": { "@smithy/core": "^3.23.11", "@smithy/middleware-serde": "^4.2.14", "@smithy/node-config-provider": "^4.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-middleware": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-dqjLwZs2eBxIUG6Qtw8/YZ4DvzHGIf0DA18wrgtfP6a50UIO7e2nY0FPdcbv5tVJKqWCCU5BmGMOUwT7Puan+A=="],
- "@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.40", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/protocol-http": "^5.3.11", "@smithy/service-error-classification": "^4.2.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-YhEMakG1Ae57FajERdHNZ4ShOPIY7DsgV+ZoAxo/5BT0KIe+f6DDU2rtIymNNFIj22NJfeeI6LWIifrwM0f+rA=="],
+ "@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.42", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/service-error-classification": "^4.2.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-vbwyqHRIpIZutNXZpLAozakzamcINaRCpEy1MYmK6xBeW3xN+TyPRA123GjXnuxZIjc9848MRRCugVMTXxC4Eg=="],
- "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng=="],
+ "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.14", "", { "dependencies": { "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-+CcaLoLa5apzSRtloOyG7lQvkUw2ZDml3hRh4QiG9WyEPfW5Ke/3tPOPiPjUneuT59Tpn8+c3RVaUvvkkwqZwg=="],
- "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg=="],
+ "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw=="],
- "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.11", "", { "dependencies": { "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg=="],
+ "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.12", "", { "dependencies": { "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw=="],
- "@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.14", "", { "dependencies": { "@smithy/abort-controller": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/querystring-builder": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A=="],
+ "@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.16", "", { "dependencies": { "@smithy/abort-controller": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-ULC8UCS/HivdCB3jhi+kLFYe4B5gxH2gi9vHBfEIiRrT2jfKiZNiETJSlzRtE6B26XbBHjPtc8iZKSNqMol9bw=="],
- "@smithy/property-provider": ["@smithy/property-provider@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg=="],
+ "@smithy/property-provider": ["@smithy/property-provider@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A=="],
- "@smithy/protocol-http": ["@smithy/protocol-http@5.3.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ=="],
+ "@smithy/protocol-http": ["@smithy/protocol-http@5.3.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw=="],
- "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA=="],
+ "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg=="],
- "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ=="],
+ "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw=="],
- "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0" } }, "sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw=="],
+ "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1" } }, "sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ=="],
- "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.6", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw=="],
+ "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.7", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw=="],
- "@smithy/signature-v4": ["@smithy/signature-v4@5.3.11", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ=="],
+ "@smithy/signature-v4": ["@smithy/signature-v4@5.3.12", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw=="],
- "@smithy/smithy-client": ["@smithy/smithy-client@4.12.3", "", { "dependencies": { "@smithy/core": "^3.23.9", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-stack": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.17", "tslib": "^2.6.2" } }, "sha512-7k4UxjSpHmPN2AxVhvIazRSzFQjWnud3sOsXcFStzagww17j1cFQYqTSiQ8xuYK3vKLR1Ni8FzuT3VlKr3xCNw=="],
+ "@smithy/smithy-client": ["@smithy/smithy-client@4.12.5", "", { "dependencies": { "@smithy/core": "^3.23.11", "@smithy/middleware-endpoint": "^4.4.25", "@smithy/middleware-stack": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-stream": "^4.5.19", "tslib": "^2.6.2" } }, "sha512-UqwYawyqSr/aog8mnLnfbPurS0gi4G7IYDcD28cUIBhsvWs1+rQcL2IwkUQ+QZ7dibaoRzhNF99fAQ9AUcO00w=="],
- "@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="],
+ "@smithy/types": ["@smithy/types@4.13.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g=="],
- "@smithy/url-parser": ["@smithy/url-parser@4.2.11", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing=="],
+ "@smithy/url-parser": ["@smithy/url-parser@4.2.12", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA=="],
"@smithy/util-base64": ["@smithy/util-base64@4.3.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ=="],
@@ -1138,25 +1160,25 @@
"@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ=="],
- "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.39", "", { "dependencies": { "@smithy/property-provider": "^4.2.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-ui7/Ho/+VHqS7Km2wBw4/Ab4RktoiSshgcgpJzC4keFPs6tLJS4IQwbeahxQS3E/w98uq6E1mirCH/id9xIXeQ=="],
+ "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.41", "", { "dependencies": { "@smithy/property-provider": "^4.2.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-M1w1Ux0rSVvBOxIIiqbxvZvhnjQ+VUjJrugtORE90BbadSTH+jsQL279KRL3Hv0w69rE7EuYkV/4Lepz/NBW9g=="],
- "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.42", "", { "dependencies": { "@smithy/config-resolver": "^4.4.10", "@smithy/credential-provider-imds": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-QDA84CWNe8Akpj15ofLO+1N3Rfg8qa2K5uX0y6HnOp4AnRYRgWrKx/xzbYNbVF9ZsyJUYOfcoaN3y93wA/QJ2A=="],
+ "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.44", "", { "dependencies": { "@smithy/config-resolver": "^4.4.11", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-YPze3/lD1KmWuZsl9JlfhcgGLX7AXhSoaCDtiPntUjNW5/YY0lOHjkcgxyE9x/h5vvS1fzDifMGjzqnNlNiqOQ=="],
- "@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA=="],
+ "@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.3", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig=="],
"@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg=="],
- "@smithy/util-middleware": ["@smithy/util-middleware@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw=="],
+ "@smithy/util-middleware": ["@smithy/util-middleware@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ=="],
- "@smithy/util-retry": ["@smithy/util-retry@4.2.11", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw=="],
+ "@smithy/util-retry": ["@smithy/util-retry@4.2.12", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ=="],
- "@smithy/util-stream": ["@smithy/util-stream@4.5.17", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.13", "@smithy/node-http-handler": "^4.4.14", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ=="],
+ "@smithy/util-stream": ["@smithy/util-stream@4.5.19", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.4.16", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-v4sa+3xTweL1CLO2UP0p7tvIMH/Rq1X4KKOxd568mpe6LSLMQCnDHs4uv7m3ukpl3HvcN2JH6jiCS0SNRXKP/w=="],
"@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw=="],
"@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="],
- "@smithy/util-waiter": ["@smithy/util-waiter@4.2.11", "", { "dependencies": { "@smithy/abort-controller": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-x7Rh2azQPs3XxbvCzcttRErKKvLnbZfqRf/gOjw2pb+ZscX88e5UkRPCB67bVnsFHxayvMvmePfKTqsRb+is1A=="],
+ "@smithy/util-waiter": ["@smithy/util-waiter@4.2.13", "", { "dependencies": { "@smithy/abort-controller": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-2zdZ9DTHngRtcYxJK1GUDxruNr53kv5W2Lupe0LMU+Imr6ohQg8M2T14MNkj1Y0wS3FFwpgpGQyvuaMF7CiTmQ=="],
"@smithy/uuid": ["@smithy/uuid@1.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g=="],
@@ -1512,7 +1534,7 @@
"bare-fs": ["bare-fs@4.5.5", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w=="],
- "bare-os": ["bare-os@3.7.1", "", {}, "sha512-ebvMaS5BgZKmJlvuWh14dg9rbUI84QeV3WlWn6Ph6lFI8jJoh7ADtVTyD2c93euwbe+zgi0DVrl4YmqXeM9aIA=="],
+ "bare-os": ["bare-os@3.8.0", "", {}, "sha512-Dc9/SlwfxkXIGYhvMQNUtKaXCaGkZYGcd1vuNUUADVqzu4/vQfvnMkYYOUnt2VwQ2AqKr/8qAVFRtwETljgeFg=="],
"bare-path": ["bare-path@3.0.0", "", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="],
@@ -1522,7 +1544,7 @@
"base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
- "baseline-browser-mapping": ["baseline-browser-mapping@2.10.0", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA=="],
+ "baseline-browser-mapping": ["baseline-browser-mapping@2.10.8", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ=="],
"before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="],
@@ -1586,7 +1608,7 @@
"call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="],
- "caniuse-lite": ["caniuse-lite@1.0.30001777", "", {}, "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ=="],
+ "caniuse-lite": ["caniuse-lite@1.0.30001778", "", {}, "sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg=="],
"ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="],
@@ -1718,7 +1740,9 @@
"ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="],
- "electron-to-chromium": ["electron-to-chromium@1.5.307", "", {}, "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg=="],
+ "effect": ["effect@4.0.0-beta.31", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.5.3", "find-my-way-ts": "^0.1.6", "ini": "^6.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^1.11.8", "multipasta": "^0.2.7", "toml": "^3.0.0", "uuid": "^13.0.0", "yaml": "^2.8.2" } }, "sha512-w3QwJnlaLtWWiUSzhCXUTIisnULPsxLzpO6uqaBFjXybKx6FvCqsLJT6v4dV7G9eA9jeTtG6Gv7kF+jGe3HxzA=="],
+
+ "electron-to-chromium": ["electron-to-chromium@1.5.313", "", {}, "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA=="],
"emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
@@ -1796,6 +1820,8 @@
"extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="],
+ "fast-check": ["fast-check@4.6.0", "", { "dependencies": { "pure-rand": "^8.0.0" } }, "sha512-h7H6Dm0Fy+H4ciQYFxFjXnXkzR2kr9Fb22c0UBpHnm59K2zpr2t13aPTHlltFiNT6zuxp6HMPAVVvgur4BLdpA=="],
+
"fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="],
"fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="],
@@ -1814,9 +1840,9 @@
"fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="],
- "fast-xml-builder": ["fast-xml-builder@1.1.0", "", { "dependencies": { "path-expression-matcher": "^1.1.2" } }, "sha512-7mtITW/we2/wTUZqMyBOR2F8xP4CRxMiSEcQxPIqdRWdO2L/HZSOlzoNyghmyDwNB8BDxePooV1ZTJpkOUhdRg=="],
+ "fast-xml-builder": ["fast-xml-builder@1.1.3", "", { "dependencies": { "path-expression-matcher": "^1.1.3" } }, "sha512-1o60KoFw2+LWKQu3IdcfcFlGTW4dpqEWmjhYec6H82AYZU2TVBXep6tMl8Z1Y+wM+ZrzCwe3BZ9Vyd9N2rIvmg=="],
- "fast-xml-parser": ["fast-xml-parser@5.4.2", "", { "dependencies": { "fast-xml-builder": "^1.0.0", "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-pw/6pIl4k0CSpElPEJhDppLzaixDEuWui2CUQQBH/ECDf7+y6YwA4Gf7Tyb0Rfe4DIMuZipYj4AEL0nACKglvQ=="],
+ "fast-xml-parser": ["fast-xml-parser@5.2.5", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ=="],
"fastify": ["fastify@5.8.2", "", { "dependencies": { "@fastify/ajv-compiler": "^4.0.5", "@fastify/error": "^4.0.0", "@fastify/fast-json-stringify-compiler": "^5.0.0", "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", "avvio": "^9.0.0", "fast-json-stringify": "^6.0.0", "find-my-way": "^9.0.0", "light-my-request": "^6.0.0", "pino": "^9.14.0 || ^10.1.0", "process-warning": "^5.0.0", "rfdc": "^1.3.1", "secure-json-parse": "^4.0.0", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-lZmt3navvZG915IE+f7/TIVamxIwmBd+OMB+O9WBzcpIwOo6F0LTh0sluoMFk5VkrKTvvrwIaoJPkir4Z+jtAg=="],
@@ -1840,6 +1866,8 @@
"find-my-way": ["find-my-way@9.5.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", "safe-regex2": "^5.0.0" } }, "sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ=="],
+ "find-my-way-ts": ["find-my-way-ts@0.1.6", "", {}, "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA=="],
+
"find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="],
"flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
@@ -1856,7 +1884,7 @@
"forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="],
- "framer-motion": ["framer-motion@12.35.2", "", { "dependencies": { "motion-dom": "^12.35.2", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-dhfuEMaNo0hc+AEqyHiIfiJRNb9U9UQutE9FoKm5pjf7CMitp9xPEF1iWZihR1q86LBmo6EJ7S8cN8QXEy49AA=="],
+ "framer-motion": ["framer-motion@12.36.0", "", { "dependencies": { "motion-dom": "^12.36.0", "motion-utils": "^12.36.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-4PqYHAT7gev0ke0wos+PyrcFxI0HScjm3asgU8nSYa8YzJFuwgIvdj3/s3ZaxLq0bUSboIn19A2WS/MHwLCvfw=="],
"fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="],
@@ -1914,7 +1942,7 @@
"gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="],
- "happy-dom": ["happy-dom@20.8.3", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.18.3" } }, "sha512-lMHQRRwIPyJ70HV0kkFT7jH/gXzSI7yDkQFe07E2flwmNDFoWUTRMKpW2sglsnpeA7b6S2TJPp98EbQxai8eaQ=="],
+ "happy-dom": ["happy-dom@20.8.4", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.18.3" } }, "sha512-GKhjq4OQCYB4VLFBzv8mmccUadwlAusOZOI7hC1D9xDIT5HhzkJK17c4el2f6R6C715P9xB4uiMxeKUa2nHMwQ=="],
"has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="],
@@ -1960,6 +1988,8 @@
"inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
+ "ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="],
+
"ipaddr.js": ["ipaddr.js@2.3.0", "", {}, "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg=="],
"is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="],
@@ -2064,6 +2094,8 @@
"kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="],
+ "kubernetes-types": ["kubernetes-types@1.30.0", "", {}, "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="],
+
"lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="],
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
@@ -2110,7 +2142,7 @@
"lodash.once": ["lodash.once@4.1.1", "", {}, "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="],
- "lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="],
+ "lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="],
"lru_map": ["lru_map@0.4.1", "", {}, "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg=="],
@@ -2176,10 +2208,16 @@
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
+ "msgpackr": ["msgpackr@1.11.9", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw=="],
+
+ "msgpackr-extract": ["msgpackr-extract@3.0.3", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA=="],
+
"mssql": ["mssql@11.0.1", "", { "dependencies": { "@tediousjs/connection-string": "^0.5.0", "commander": "^11.0.0", "debug": "^4.3.3", "rfdc": "^1.3.0", "tarn": "^3.0.2", "tedious": "^18.2.1" }, "bin": { "mssql": "bin/mssql" } }, "sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w=="],
"multicast-dns": ["multicast-dns@7.2.5", "", { "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { "multicast-dns": "cli.js" } }, "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg=="],
+ "multipasta": ["multipasta@0.2.7", "", {}, "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA=="],
+
"nanoevents": ["nanoevents@7.0.1", "", {}, "sha512-o6lpKiCxLeijK4hgsqfR6CNToPyRU3keKyyI6uwuHRvpRTbZ0wXw51WRgyldVugZqoJfkGFrjrIenYH3bfEO3Q=="],
"nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
@@ -2202,6 +2240,8 @@
"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-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="],
+
"node-html-parser": ["node-html-parser@7.1.0", "", { "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" } }, "sha512-iJo8b2uYGT40Y8BTyy5ufL6IVbN8rbm/1QK2xffXU/1a/v3AAa0d1YAoqBNYqaS4R/HajkWIpIfdE6KcyFh1AQ=="],
"node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="],
@@ -2240,7 +2280,7 @@
"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@6.27.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-osTKySlrdYrLYTt0zjhY8yp0JUBmWDCN+Q+QxsV4xMQnnoVFpylgKGgxwN8sSdTNw0G4y+WUXs4eCMWpyDNWZQ=="],
+ "openai": ["openai@6.29.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-YxoArl2BItucdO89/sN6edksV0x47WUTgkgVfCgX7EuEMhbirENsgYe5oO4LTjBL9PtdKtk2WqND1gSLcTd2yw=="],
"openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="],
@@ -2278,7 +2318,7 @@
"path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="],
- "path-expression-matcher": ["path-expression-matcher@1.1.2", "", {}, "sha512-LXWqJmcpp2BKOEmgt4CyuESFmBfPuhJlAHKJsFzuJU6CxErWk75BrO+Ni77M9OxHN6dCYKM4vj+21Z6cOL96YQ=="],
+ "path-expression-matcher": ["path-expression-matcher@1.1.3", "", {}, "sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ=="],
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
@@ -2342,6 +2382,8 @@
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
+ "pure-rand": ["pure-rand@8.0.0", "", {}, "sha512-7rgWlxG2gAvFPIQfUreo1XYlNvrQ9VnQPFWdncPkdl3icucLK0InOxsaafbvxGTnI6Bk/Rxmslg0lQlRCuzOXw=="],
+
"qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="],
"quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="],
@@ -2404,7 +2446,7 @@
"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-regex2": ["safe-regex2@5.0.0", "", { "dependencies": { "ret": "~0.5.0" } }, "sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw=="],
+ "safe-regex2": ["safe-regex2@5.1.0", "", { "dependencies": { "ret": "~0.5.0" }, "bin": { "safe-regex2": "bin/safe-regex2.js" } }, "sha512-pNHAuBW7TrcleFHsxBr5QMi/Iyp0ENjUKz7GCcX1UO7cMh+NmVK6HxQckNL1tJp1XAJVjG6B8OKIPqodqj9rtw=="],
"safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="],
@@ -2538,7 +2580,7 @@
"tarn": ["tarn@3.0.2", "", {}, "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="],
- "tedious": ["tedious@18.6.2", "", { "dependencies": { "@azure/core-auth": "^1.7.2", "@azure/identity": "^4.2.1", "@azure/keyvault-keys": "^4.4.0", "@js-joda/core": "^5.6.1", "@types/node": ">=18", "bl": "^6.0.11", "iconv-lite": "^0.6.3", "js-md4": "^0.3.2", "native-duplexpair": "^1.0.0", "sprintf-js": "^1.1.3" } }, "sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg=="],
+ "tedious": ["tedious@19.2.1", "", { "dependencies": { "@azure/core-auth": "^1.7.2", "@azure/identity": "^4.2.1", "@azure/keyvault-keys": "^4.4.0", "@js-joda/core": "^5.6.5", "@types/node": ">=18", "bl": "^6.1.4", "iconv-lite": "^0.7.0", "js-md4": "^0.3.2", "native-duplexpair": "^1.0.0", "sprintf-js": "^1.1.3" } }, "sha512-pk1Q16Yl62iocuQB+RWbg6rFUFkIyzqOFQ6NfysCltRvQqKwfurgj8v/f2X+CKvDhSL4IJ0cCOfCHDg9PWEEYA=="],
"teex": ["teex@1.0.1", "", { "dependencies": { "streamx": "^2.12.5" } }, "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg=="],
@@ -2564,6 +2606,8 @@
"token-types": ["token-types@4.2.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ=="],
+ "toml": ["toml@3.0.0", "", {}, "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="],
+
"tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="],
"traverse": ["traverse@0.3.9", "", {}, "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="],
@@ -2642,7 +2686,7 @@
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
- "uuid": ["uuid@8.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw=="],
+ "uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="],
"vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="],
@@ -2706,6 +2750,8 @@
"yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
+ "yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="],
+
"yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="],
"yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="],
@@ -2728,7 +2774,7 @@
"@actions/github/@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/http-client/undici": ["undici@6.23.0", "", {}, "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g=="],
+ "@actions/http-client/undici": ["undici@6.24.1", "", {}, "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA=="],
"@ai-sdk/amazon-bedrock/aws4fetch": ["aws4fetch@1.0.20", "", {}, "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g=="],
@@ -2770,69 +2816,69 @@
"@ai-sdk/xai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.20", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-iXHVe0apM2zUEzauqJwqmpC37A5rihrStAih5Ks+JE32iTe4LZ58y17UGBjpQQTCRw9YxMeo2UFLxLpBluyvLQ=="],
- "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-crypto/sha1-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-crypto/sha1-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
"@aws-crypto/sha1-browser/@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/sha256-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-crypto/sha256-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
"@aws-crypto/sha256-browser/@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/sha256-js/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-crypto/sha256-js/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-crypto/util/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-crypto/util/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
"@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-sdk/client-cognito-identity/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.19", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.17", "@aws-sdk/credential-provider-http": "^3.972.19", "@aws-sdk/credential-provider-ini": "^3.972.18", "@aws-sdk/credential-provider-process": "^3.972.17", "@aws-sdk/credential-provider-sso": "^3.972.18", "@aws-sdk/credential-provider-web-identity": "^3.972.18", "@aws-sdk/types": "^3.973.5", "@smithy/credential-provider-imds": "^4.2.11", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-yDWQ9dFTr+IMxwanFe7+tbN5++q8psZBjlUwOiCXn1EzANoBgtqBwcpYcHaMGtn0Wlfj4NuXdf2JaEx1lz5RaQ=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.21", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.18", "@aws-sdk/credential-provider-http": "^3.972.20", "@aws-sdk/credential-provider-ini": "^3.972.20", "@aws-sdk/credential-provider-process": "^3.972.18", "@aws-sdk/credential-provider-sso": "^3.972.20", "@aws-sdk/credential-provider-web-identity": "^3.972.20", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-hah8if3/B/Q+LBYN5FukyQ1Mym6PLPDsBOBsIgNEYD6wLyZg0UmUF/OKIVC3nX9XH8TfTPuITK+7N/jenVACWA=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.21", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
"@aws-sdk/client-cognito-identity/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.993.0", "", { "dependencies": { "@aws-sdk/types": "^3.973.1", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" } }, "sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.7", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.8", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/hash-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", "@smithy/middleware-serde": "^4.2.12", "@smithy/middleware-stack": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/node-http-handler": "^4.4.14", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.39", "@smithy/util-defaults-mode-node": "^4.2.42", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.10", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.20", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/region-config-resolver": "^3.972.8", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.7", "@smithy/config-resolver": "^4.4.11", "@smithy/core": "^3.23.11", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.25", "@smithy/middleware-retry": "^4.4.42", "@smithy/middleware-serde": "^4.2.14", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.4.16", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.41", "@smithy/util-defaults-mode-node": "^4.2.44", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-SlDol5Z+C7Ivnc2rKGqiqfSUmUZzY1qHfVs9myt/nxVwswgfpjdKahyTzLTx802Zfq0NFRs7AejwKzzzl5Co2w=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-sdk/credential-provider-env/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-provider-env/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-provider-env/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-provider-env/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-sdk/credential-provider-http/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-provider-http/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-provider-http/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-provider-http/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.8", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/hash-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", "@smithy/middleware-serde": "^4.2.12", "@smithy/middleware-stack": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/node-http-handler": "^4.4.14", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.39", "@smithy/util-defaults-mode-node": "^4.2.42", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.10", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.20", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/region-config-resolver": "^3.972.8", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.7", "@smithy/config-resolver": "^4.4.11", "@smithy/core": "^3.23.11", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.25", "@smithy/middleware-retry": "^4.4.42", "@smithy/middleware-serde": "^4.2.14", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.4.16", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.41", "@smithy/util-defaults-mode-node": "^4.2.44", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-SlDol5Z+C7Ivnc2rKGqiqfSUmUZzY1qHfVs9myt/nxVwswgfpjdKahyTzLTx802Zfq0NFRs7AejwKzzzl5Co2w=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.8", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/hash-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", "@smithy/middleware-serde": "^4.2.12", "@smithy/middleware-stack": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/node-http-handler": "^4.4.14", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.39", "@smithy/util-defaults-mode-node": "^4.2.42", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.10", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.20", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/region-config-resolver": "^3.972.8", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.7", "@smithy/config-resolver": "^4.4.11", "@smithy/core": "^3.23.11", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.25", "@smithy/middleware-retry": "^4.4.42", "@smithy/middleware-serde": "^4.2.14", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.4.16", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.41", "@smithy/util-defaults-mode-node": "^4.2.44", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-SlDol5Z+C7Ivnc2rKGqiqfSUmUZzY1qHfVs9myt/nxVwswgfpjdKahyTzLTx802Zfq0NFRs7AejwKzzzl5Co2w=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
"@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.932.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/types": "3.930.0", "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-ozge/c7NdHUDyHqro6+P5oHt8wfKSUBN+olttiVfBe9Mw3wBMpPa3gQ0pZnG+gwBkKskBuip2bMR16tqYvUSEA=="],
@@ -2846,55 +2892,53 @@
"@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.933.0", "", { "dependencies": { "@aws-sdk/core": "3.932.0", "@aws-sdk/nested-clients": "3.933.0", "@aws-sdk/types": "3.930.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" } }, "sha512-c7Eccw2lhFx2/+qJn3g+uIDWRuWi2A6Sz3PVvckFUEzPsP0dPUo19hlvtarwP5GzrsXn0yEPRVhpewsIaSCGaQ=="],
- "@aws-sdk/credential-provider-process/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-provider-process/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-provider-process/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-provider-process/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.8", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/hash-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", "@smithy/middleware-serde": "^4.2.12", "@smithy/middleware-stack": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/node-http-handler": "^4.4.14", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.39", "@smithy/util-defaults-mode-node": "^4.2.42", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.10", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.20", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/region-config-resolver": "^3.972.8", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.7", "@smithy/config-resolver": "^4.4.11", "@smithy/core": "^3.23.11", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.25", "@smithy/middleware-retry": "^4.4.42", "@smithy/middleware-serde": "^4.2.14", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.4.16", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.41", "@smithy/util-defaults-mode-node": "^4.2.44", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-SlDol5Z+C7Ivnc2rKGqiqfSUmUZzY1qHfVs9myt/nxVwswgfpjdKahyTzLTx802Zfq0NFRs7AejwKzzzl5Co2w=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.8", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/hash-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", "@smithy/middleware-serde": "^4.2.12", "@smithy/middleware-stack": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/node-http-handler": "^4.4.14", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.39", "@smithy/util-defaults-mode-node": "^4.2.42", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.10", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.20", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/region-config-resolver": "^3.972.8", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.7", "@smithy/config-resolver": "^4.4.11", "@smithy/core": "^3.23.11", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.25", "@smithy/middleware-retry": "^4.4.42", "@smithy/middleware-serde": "^4.2.14", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.4.16", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.41", "@smithy/util-defaults-mode-node": "^4.2.44", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-SlDol5Z+C7Ivnc2rKGqiqfSUmUZzY1qHfVs9myt/nxVwswgfpjdKahyTzLTx802Zfq0NFRs7AejwKzzzl5Co2w=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-sdk/credential-providers/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-providers/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-providers/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.19", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.17", "@aws-sdk/credential-provider-http": "^3.972.19", "@aws-sdk/credential-provider-ini": "^3.972.18", "@aws-sdk/credential-provider-process": "^3.972.17", "@aws-sdk/credential-provider-sso": "^3.972.18", "@aws-sdk/credential-provider-web-identity": "^3.972.18", "@aws-sdk/types": "^3.973.5", "@smithy/credential-provider-imds": "^4.2.11", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-yDWQ9dFTr+IMxwanFe7+tbN5++q8psZBjlUwOiCXn1EzANoBgtqBwcpYcHaMGtn0Wlfj4NuXdf2JaEx1lz5RaQ=="],
+ "@aws-sdk/credential-providers/@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.21", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.18", "@aws-sdk/credential-provider-http": "^3.972.20", "@aws-sdk/credential-provider-ini": "^3.972.20", "@aws-sdk/credential-provider-process": "^3.972.18", "@aws-sdk/credential-provider-sso": "^3.972.20", "@aws-sdk/credential-provider-web-identity": "^3.972.20", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-hah8if3/B/Q+LBYN5FukyQ1Mym6PLPDsBOBsIgNEYD6wLyZg0UmUF/OKIVC3nX9XH8TfTPuITK+7N/jenVACWA=="],
- "@aws-sdk/credential-providers/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/credential-providers/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
- "@aws-sdk/nested-clients/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/nested-clients/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="],
+ "@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="],
- "@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="],
+ "@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="],
- "@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="],
+ "@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="],
- "@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="],
+ "@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.21", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg=="],
- "@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="],
+ "@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw=="],
- "@aws-sdk/nested-clients/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
+ "@aws-sdk/nested-clients/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
"@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.993.0", "", { "dependencies": { "@aws-sdk/types": "^3.973.1", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" } }, "sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw=="],
- "@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="],
+ "@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="],
- "@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="],
+ "@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.7", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA=="],
- "@aws-sdk/token-providers/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/token-providers/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.8", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/hash-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", "@smithy/middleware-serde": "^4.2.12", "@smithy/middleware-stack": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/node-http-handler": "^4.4.14", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.39", "@smithy/util-defaults-mode-node": "^4.2.42", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.10", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.20", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/region-config-resolver": "^3.972.8", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.7", "@smithy/config-resolver": "^4.4.11", "@smithy/core": "^3.23.11", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.25", "@smithy/middleware-retry": "^4.4.42", "@smithy/middleware-serde": "^4.2.14", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.4.16", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.41", "@smithy/util-defaults-mode-node": "^4.2.44", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-SlDol5Z+C7Ivnc2rKGqiqfSUmUZzY1qHfVs9myt/nxVwswgfpjdKahyTzLTx802Zfq0NFRs7AejwKzzzl5Co2w=="],
- "@aws-sdk/token-providers/@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="],
-
- "@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.2.5", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ=="],
+ "@aws-sdk/token-providers/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="],
"@azure/core-http/@azure/abort-controller": ["@azure/abort-controller@1.1.0", "", { "dependencies": { "tslib": "^2.2.0" } }, "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw=="],
@@ -3008,14 +3052,14 @@
"@openauthjs/openauth/jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="],
- "@opencode-ai/desktop/@actions/artifact": ["@actions/artifact@4.0.0", "", { "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.1", "@actions/http-client": "^2.1.0", "@azure/core-http": "^3.0.5", "@azure/storage-blob": "^12.15.0", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-HCc2jMJRAfviGFAh0FsOR/jNfWhirxl7W6z8zDtttt0GltwxBLdEIjLiweOPFl9WbyJRW1VWnPUSAixJqcWUMQ=="],
-
- "@opencode-ai/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="],
-
"@opentui/solid/@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=="],
"@opentui/solid/babel-preset-solid": ["babel-preset-solid@1.9.9", "", { "dependencies": { "babel-plugin-jsx-dom-expressions": "^0.40.1" }, "peerDependencies": { "@babel/core": "^7.0.0", "solid-js": "^1.9.8" }, "optionalPeers": ["solid-js"] }, "sha512-pCnxWrciluXCeli/dj5PIEHgbNzim3evtTn12snjqqg8QZWJNMjH1AWIp4iG/tbVjqQ72aBEymMSagvmgxubXw=="],
+ "@orbit.build/desktop/@actions/artifact": ["@actions/artifact@4.0.0", "", { "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.1", "@actions/http-client": "^2.1.0", "@azure/core-http": "^3.0.5", "@azure/storage-blob": "^12.15.0", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-HCc2jMJRAfviGFAh0FsOR/jNfWhirxl7W6z8zDtttt0GltwxBLdEIjLiweOPFl9WbyJRW1VWnPUSAixJqcWUMQ=="],
+
+ "@orbit.build/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="],
+
"@oslojs/jwt/@oslojs/encoding": ["@oslojs/encoding@0.4.1", "", {}, "sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q=="],
"@pierre/diffs/diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="],
@@ -3032,11 +3076,11 @@
"@tailwindcss/oxide/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="],
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.9.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w=="],
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="],
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw=="],
- "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="],
+ "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="],
"@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" }, "bundled": true }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="],
@@ -3060,14 +3104,14 @@
"aws-sdk/events": ["events@1.1.1", "", {}, "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw=="],
+ "aws-sdk/uuid": ["uuid@8.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw=="],
+
"babel-plugin-jsx-dom-expressions/@babel/helper-module-imports": ["@babel/helper-module-imports@7.18.6", "", { "dependencies": { "@babel/types": "^7.18.6" } }, "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA=="],
"babel-plugin-module-resolver/glob": ["glob@9.3.5", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="],
"bl/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
- "buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
-
"c12/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="],
"compress-commons/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="],
@@ -3076,6 +3120,8 @@
"dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+ "effect/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="],
+
"engine.io-client/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="],
"eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
@@ -3088,7 +3134,9 @@
"form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
- "framer-motion/motion-dom": ["motion-dom@12.35.2", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-pWXFMTwvGDbx1Fe9YL5HZebv2NhvGBzRtiNUv58aoK7+XrsuaydQ0JGRKK2r+bTKlwgSWwWxHbP5249Qr/BNpg=="],
+ "framer-motion/motion-dom": ["motion-dom@12.36.0", "", { "dependencies": { "motion-utils": "^12.36.0" } }, "sha512-Ep1pq8P88rGJ75om8lTCA13zqd7ywPGwCqwuWwin6BKc0hMLkVfcS6qKlRqEo2+t0DwoUcgGJfXwaiFn4AOcQA=="],
+
+ "framer-motion/motion-utils": ["motion-utils@12.36.0", "", {}, "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg=="],
"gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
@@ -3108,11 +3156,15 @@
"mssql/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="],
+ "mssql/tedious": ["tedious@18.6.2", "", { "dependencies": { "@azure/core-auth": "^1.7.2", "@azure/identity": "^4.2.1", "@azure/keyvault-keys": "^4.4.0", "@js-joda/core": "^5.6.1", "@types/node": ">=18", "bl": "^6.0.11", "iconv-lite": "^0.6.3", "js-md4": "^0.3.2", "native-duplexpair": "^1.0.0", "sprintf-js": "^1.1.3" } }, "sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg=="],
+
+ "node-gyp-build-optional-packages/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
+
"npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="],
"nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="],
- "nypm/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="],
+ "nypm/tinyexec": ["tinyexec@1.0.4", "", {}, "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="],
"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=="],
@@ -3156,8 +3208,6 @@
"tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
- "tedious/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
-
"token-types/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
"tree-sitter-bash/node-addon-api": ["node-addon-api@8.6.0", "", {}, "sha512-gBVjCaqDlRUk0EwoPNKzIr9KkS9041G/q31IBShPs1Xz6UTA+EXdZADbzqAJQrpDRq71CIMnOP5VMut3SL0z5Q=="],
@@ -3172,8 +3222,6 @@
"wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
- "xml2js/sax": ["sax@1.5.0", "", {}, "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA=="],
-
"zod-to-json-schema/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
"@actions/artifact/@actions/core/@actions/exec": ["@actions/exec@2.0.0", "", { "dependencies": { "@actions/io": "^2.0.0" } }, "sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw=="],
@@ -3184,67 +3232,67 @@
"@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-user-agent/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="],
+ "@aws-sdk/client-cognito-identity/@aws-sdk/middleware-user-agent/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/core": ["@aws-sdk/core@3.973.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.11", "@smithy/core": "^3.23.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.5", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.21", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.7", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA=="],
- "@aws-sdk/credential-provider-env/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-provider-env/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/credential-provider-http/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-provider-http/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.21", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="],
- "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="],
+ "@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.7", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.21", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="],
- "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="],
+ "@aws-sdk/credential-provider-login/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.7", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA=="],
"@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-ini/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.933.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.932.0", "@aws-sdk/middleware-host-header": "3.930.0", "@aws-sdk/middleware-logger": "3.930.0", "@aws-sdk/middleware-recursion-detection": "3.933.0", "@aws-sdk/middleware-user-agent": "3.932.0", "@aws-sdk/region-config-resolver": "3.930.0", "@aws-sdk/types": "3.930.0", "@aws-sdk/util-endpoints": "3.930.0", "@aws-sdk/util-user-agent-browser": "3.930.0", "@aws-sdk/util-user-agent-node": "3.932.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.2", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/hash-node": "^4.2.5", "@smithy/invalid-dependency": "^4.2.5", "@smithy/middleware-content-length": "^4.2.5", "@smithy/middleware-endpoint": "^4.3.9", "@smithy/middleware-retry": "^4.4.9", "@smithy/middleware-serde": "^4.2.5", "@smithy/middleware-stack": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/node-http-handler": "^4.4.5", "@smithy/protocol-http": "^5.3.5", "@smithy/smithy-client": "^4.9.5", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.8", "@smithy/util-defaults-mode-node": "^4.2.11", "@smithy/util-endpoints": "^3.2.5", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-o1GX0+IPlFi/D8ei9y/jj3yucJWNfPnbB5appVBWevAyUdZA5KzQ2nK/hDxiu9olTZlFEFpf1m1Rn3FaGxHqsw=="],
@@ -3252,69 +3300,67 @@
"@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.933.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.932.0", "@aws-sdk/middleware-host-header": "3.930.0", "@aws-sdk/middleware-logger": "3.930.0", "@aws-sdk/middleware-recursion-detection": "3.933.0", "@aws-sdk/middleware-user-agent": "3.932.0", "@aws-sdk/region-config-resolver": "3.930.0", "@aws-sdk/types": "3.930.0", "@aws-sdk/util-endpoints": "3.930.0", "@aws-sdk/util-user-agent-browser": "3.930.0", "@aws-sdk/util-user-agent-node": "3.932.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.2", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/hash-node": "^4.2.5", "@smithy/invalid-dependency": "^4.2.5", "@smithy/middleware-content-length": "^4.2.5", "@smithy/middleware-endpoint": "^4.3.9", "@smithy/middleware-retry": "^4.4.9", "@smithy/middleware-serde": "^4.2.5", "@smithy/middleware-stack": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/node-http-handler": "^4.4.5", "@smithy/protocol-http": "^5.3.5", "@smithy/smithy-client": "^4.9.5", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", "@smithy/util-defaults-mode-browser": "^4.3.8", "@smithy/util-defaults-mode-node": "^4.2.11", "@smithy/util-endpoints": "^3.2.5", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-o1GX0+IPlFi/D8ei9y/jj3yucJWNfPnbB5appVBWevAyUdZA5KzQ2nK/hDxiu9olTZlFEFpf1m1Rn3FaGxHqsw=="],
- "@aws-sdk/credential-provider-process/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
-
- "@aws-sdk/credential-provider-sso/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-provider-process/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.21", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="],
- "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-provider-sso/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.7", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.21", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="],
- "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="],
- "@aws-sdk/credential-providers/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-provider-web-identity/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.7", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA=="],
- "@aws-sdk/nested-clients/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-providers/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="],
+ "@aws-sdk/nested-clients/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/token-providers/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="],
+ "@aws-sdk/token-providers/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.21", "", { "dependencies": { "@aws-sdk/core": "^3.973.20", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.11", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.11", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="],
- "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="],
- "@azure/core-http/xml2js/sax": ["sax@1.5.0", "", {}, "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA=="],
+ "@aws-sdk/token-providers/@aws-sdk/nested-clients/@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.7", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.21", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA=="],
"@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
@@ -3356,10 +3402,10 @@
"@octokit/rest/@octokit/core/before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="],
- "@opencode-ai/desktop/@actions/artifact/@actions/http-client": ["@actions/http-client@2.2.3", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="],
-
"@opentui/solid/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
+ "@orbit.build/desktop/@actions/artifact/@actions/http-client": ["@actions/http-client@2.2.3", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="],
+
"@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
"ai-gateway-provider/@ai-sdk/google-vertex/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.56", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XHJKu0Yvfu9SPzRfsAFESa+9T7f2YJY6TxykKMfRsAwpeWAiX/Gbx5J5uM15AzYC3Rw8tVP3oH+j7jEivENirQ=="],
@@ -3398,14 +3444,14 @@
"lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="],
+ "mssql/tedious/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
+
"opencontrol/@modelcontextprotocol/sdk/pkce-challenge": ["pkce-challenge@4.1.0", "", {}, "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ=="],
"opencontrol/@modelcontextprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
"opencontrol/@modelcontextprotocol/sdk/zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="],
- "parse-bmfont-xml/xml2js/sax": ["sax@1.5.0", "", {}, "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA=="],
-
"pkg-up/find-up/locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="],
"readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
@@ -3430,7 +3476,7 @@
"@aws-sdk/client-cognito-identity/@aws-sdk/core/@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.4.1", "", { "dependencies": { "fast-xml-builder": "^1.0.0", "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A=="],
- "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="],
+ "@aws-sdk/credential-provider-cognito-identity/@aws-sdk/nested-clients/@aws-sdk/core/@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.11", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ=="],
"@aws-sdk/credential-provider-env/@aws-sdk/core/@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.4.1", "", { "dependencies": { "fast-xml-builder": "^1.0.0", "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A=="],
diff --git a/Agent-backend/docs/plans/git/upstream-sync.md b/Agent-backend/docs/plans/git/upstream-sync.md
index 0b011ea05..ba632be7b 100644
--- a/Agent-backend/docs/plans/git/upstream-sync.md
+++ b/Agent-backend/docs/plans/git/upstream-sync.md
@@ -388,19 +388,19 @@ Git detects this as a rename (high similarity %). Future upstream merges will ap
```bash
# Replace user-facing strings: "OpenCode" → "Orbit" in prompts, UI, CLI output
-# Leave internal plumbing alone (@opencode-ai/*, .opencode/ dirs, config keys)
+# Leave internal plumbing alone (.opencode/ dirs, config keys)
git commit -m "brand: opencode → Orbit in user-facing strings"
```
### What to rename vs what to leave alone
-| Rename to "Orbit" | Leave as "opencode" |
-| ----------------------- | ------------------------------ |
-| System prompts | `@opencode-ai/*` package names |
-| CLI output / help text | `.opencode/` config directory |
-| UI labels and titles | Internal variable names |
-| Window titles, branding | Import paths |
-| README / docs | `opencode.json` config files |
+| Rename to "Orbit" | Leave as "opencode" |
+| ---------------------------------------- | ----------------------------- |
+| System prompts | `.opencode/` config directory |
+| CLI output / help text | Internal variable names |
+| UI labels and titles | Import paths |
+| Window titles, branding | `opencode.json` config files |
+| Orbit package imports (`@orbit.build/*`) | |
Renaming internal plumbing creates ~300 extra conflict points for zero user-facing value.
diff --git a/Agent-backend/docs/plans/orbit-rebrand.md b/Agent-backend/docs/plans/orbit-rebrand.md
index b2b9eb6e8..b97dfb231 100644
--- a/Agent-backend/docs/plans/orbit-rebrand.md
+++ b/Agent-backend/docs/plans/orbit-rebrand.md
@@ -2,9 +2,9 @@
> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
-**Goal:** Rebrand all user-facing "opencode"/"OpenCode" strings to "Orbit"/"orbit" while keeping internal code (env vars, flags, package imports) unchanged for upstream mergeability.
+**Goal:** Rebrand all user-facing "opencode"/"OpenCode" strings to "Orbit"/"orbit" while keeping internal code (env vars, flags) unchanged for upstream mergeability.
-**Architecture:** Surgical string replacements across ~40 files. No structural changes. Internal constants (`Flag.OPENCODE_*`, `@opencode-ai/*` imports, env vars) remain untouched. Only what the user sees changes. This is a fork — no backward compatibility needed for existing opencode installations. All contracts (auth username, GitHub triggers, branch prefixes, reader/writer paths) must move together.
+**Architecture:** Surgical string replacements across ~40 files. No structural changes. Internal constants (`Flag.OPENCODE_*`, env vars) remain untouched. Only what the user sees changes. This is a fork — no backward compatibility needed for existing opencode installations. All contracts (auth username, GitHub triggers, branch prefixes, reader/writer paths) must move together.
**Tech Stack:** TypeScript, SolidJS TUI components, text prompt files, JSON theme files
@@ -32,7 +32,6 @@
**Keep as-is (upstream compatibility):**
- All `Flag.OPENCODE_*` constants and env vars (including `OPENCODE_SERVER_PASSWORD` warning text)
-- All `@opencode-ai/*` package imports
- All `opencode.ai` URLs (real infrastructure)
- "OpenCode Zen" and "OpenCode Go" — shared upstream infra
- Provider ID `"opencode"` — tied to Zen/Go
@@ -657,8 +656,8 @@ if (binDir.includes(".orbit"))
// Line 269
if (content.includes("# orbit") || content.includes(".orbit/bin"))
if (trimmed === "# orbit")
- // Line 287
if (trimmed.includes(".orbit/bin") || trimmed.includes("fish_add_path"))
+ // Line 287
// Line 294
// Line 300
(trimmed.startsWith("export PATH=") && trimmed.includes(".orbit/bin"))(
diff --git a/Agent-backend/eslint.config.ts b/Agent-backend/eslint.config.ts
index e94739e83..263b20750 100644
--- a/Agent-backend/eslint.config.ts
+++ b/Agent-backend/eslint.config.ts
@@ -128,6 +128,15 @@ export default defineConfig(
"no-console": "off",
},
},
+ /* opentui TUI components — ESLint cannot resolve SolidJS JSX return types.
+ Only no-unsafe-return is disabled globally; other unsafe-* rules stay enforced
+ so non-JSX unsafe logic (e.g. Proxy accessors, dynamic dispatch) is still caught. */
+ {
+ files: ["packages/opencode/src/cli/cmd/tui/**/*.tsx"],
+ rules: {
+ "@typescript-eslint/no-unsafe-return": "off",
+ },
+ },
/* Logging utility — wraps console by design */
{
files: ["packages/opencode/src/util/log.ts"],
diff --git a/Agent-backend/learnings.md b/Agent-backend/learnings.md
index 634bb1fc5..f53c324e1 100644
--- a/Agent-backend/learnings.md
+++ b/Agent-backend/learnings.md
@@ -45,7 +45,11 @@ For server code breakpoints while TUI runs, use `bun dev spawn` (default runs se
| `--print-logs` | Print structured logs to stderr |
| `--log-level DEBUG` | Set log verbosity (DEBUG, INFO, WARN, ERROR) |
-**WARNING:** `-d` is NOT a valid flag. It will crash with `Unknown argument: d` — but the error is swallowed by yargs `.fail()` handler (throws `undefined` because yargs passes `(msg, err)` where `err` is undefined for validation errors).
+**WARNING:** `-d` is NOT a valid flag. It will crash with `Unknown argument: d` — but the error is swallowed by yargs `.fail()` handler.
+
+**WARNING:** `--log-level` requires UPPERCASE values (`DEBUG` not `debug`). Lowercase causes a fatal crash.
+
+**WARNING:** `--print-logs` at INFO level produces 11K+ lines per session due to `service=permission` entries dumping full ruleset JSON arrays. Do NOT use `--print-logs` for routine debugging — use the log files instead.
### Error Swallowing in index.ts
@@ -53,99 +57,79 @@ The top-level catch in `src/index.ts` (line ~166) catches all errors. The `.fail
---
-## Bugs Found & Fixed
+## Server Logging & Debugging (for Orbit frontend integration)
-### 1. `ERR_INVALID_URL: fetch() URL is invalid` (when sending a message)
+### Where server logs live
-**Root cause:** The `opencode-anthropic-auth` plugin intercepts all `fetch()` calls. The Anthropic provider in `models.dev` has NO `api` URL field (Anthropic's SDK has it hardcoded). The model resolution at `src/provider/provider.ts:751` falls through to `""` (empty string):
+The orbit-server binary writes structured logs to **`~/.local/share/orbit/log/`** (NOT `~/.local/share/opencode/log/` — that's for standalone opencode CLI runs).
-```typescript
-url: model.provider?.api ?? provider.api ?? ""
-```
+| File | Source |
+| ------------------------------------------- | ------------------------------------------------------------ |
+| `~/.local/share/orbit/log/2026-MM-DDT*.log` | Timestamped per server startup — **use this one** |
+| `~/.local/share/orbit/log/dev.log` | Standalone `bun dev` runs only, NOT the Tauri-spawned server |
+| `~/.local/share/opencode/log/*.log` | Old opencode CLI runs (different binary name) |
-Then `loadBaseURL()` returns `""`, which gets set as `options.baseURL = ""`, overriding `@ai-sdk/anthropic`'s default `https://api.anthropic.com/v1`. The SDK then constructs a URL like `/v1/messages` which is invalid for `fetch()`.
+**To tail the active server log:**
-**Fix:** In `loadBaseURL()` (line 106), treat empty string as undefined:
-
-```typescript
-if (typeof raw !== "string" || raw === "") return raw === "" ? undefined : raw
-```
-
-This lets bundled SDKs (Anthropic, OpenAI, etc.) use their hardcoded default URLs.
-
-**Stack trace pattern:**
-
-```
-service=session.processor error=fetch() URL is invalid
-stack="TypeError: fetch() URL is invalid
- at fetch (unknown)
- at fetch (.../opencode-anthropic-auth/index.mjs:269:38)"
+```bash
+# Always gets the latest timestamped file (new one created per Tauri restart)
+tail -f "$(ls -t ~/.local/share/orbit/log/*.log | head -1)"
```
-### 2. `undefined is not an object (evaluating 'x.keybind')` (dialog-command.tsx)
+### Useful grep patterns for server logs
-**Root cause:** During SolidJS reactivity cascades (theme initialization), `registrations().flatMap((x) => x())` produced undefined entries because some registration accessors return undefined before their components fully initialize.
+```bash
+# Session prompt lifecycle (most important for debugging)
+grep "session.prompt\|service=llm\|ERROR\|WARN\|cancel\|exiting"
-**Fix:** Added `.filter(Boolean)` before `.map()` in the `entries` memo:
+# Specific session
+grep "ses_XXXXX"
-```typescript
-const entries = createMemo(() => {
- const all = registrations()
- .flatMap((x) => x())
- .filter(Boolean)
- return all.map((x) => ({ ...x, footer: x.keybind ? keybind.print(x.keybind) : undefined }))
-})
+# LLM calls (did the server actually call the provider?)
+grep "service=llm"
```
-**File:** `src/cli/cmd/tui/component/dialog-command.tsx:56`
-
-### 3. `undefined is not an object (evaluating 'status().type')` (prompt/index.tsx)
+### How Tauri spawns the server
-**Root cause:** On the home screen, `props.sessionID` is `undefined`. The status lookup `sync.data.session_status[props.sessionID ?? ""]` returns `undefined` because `session_status[""]` doesn't exist.
+**File:** `src-tauri/src/commands/opencode/lifecycle.rs` → `src-tauri/src/opencode/process.rs`
-**Fix:** Added fallback:
-
-```typescript
-const status = createMemo(() => sync.data.session_status[props.sessionID ?? ""] ?? { type: "idle" as const })
```
-
-**File:** `src/cli/cmd/tui/component/prompt/index.tsx:81`
-
-### 4. `undefined is not an object (evaluating 'grouped().length')` (dialog-select.tsx)
-
-**Root cause:** In `DialogCommand`, the `ref` for `DialogSelectRef` is set via a callback at render time (line 228), but the `list()` function accesses `ref.filter` during memo evaluation — before the callback runs.
-
-**Fix:** Made `ref` optional and used optional chaining:
-
-```typescript
-let ref: DialogSelectRef | undefined
-const list = (): CommandOption[] => {
- if (ref?.filter) return props.options
- return [...props.suggestedOptions, ...props.options]
-}
+Command::new(orbit-server-binary)
+ .args(["serve", "--port", &port.to_string()])
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
```
-**File:** `src/cli/cmd/tui/component/dialog-command.tsx:161-163`
-
-### 5. TUI screen blink on stream completion (intermittent, UNRESOLVED)
+- Binary location: `src-tauri/binaries/orbit-server-{target}` (dev) or next to executable (prod)
+- Port: scans TCP 4096-4196 for an available port
+- Health check: pings `http://127.0.0.1:{port}/global/health` (40 retries, 250ms apart)
+- stdout/stderr forwarded to Rust `log::info!/warn!/error!` with `[opencode]` prefix (visible in `bunx tauri dev` terminal)
-**Symptom:** When LLM streaming ends, the entire screen briefly goes blank then reappears. Happens intermittently, not every time. The loading bar under the chat input disappears and gets replaced by the response duration — during that transition, the screen flashes.
+### CLI flags for the server binary
-**Suspected cause:** Race condition between multiple SSE events firing in quick succession when streaming ends:
+```bash
+./orbit-server serve --help
+# --port Port to listen on (default: 0 = auto)
+# --print-logs Print logs to stderr (WARNING: extremely verbose — dumps permission rulesets)
+# --log-level DEBUG | INFO | WARN | ERROR (UPPERCASE required)
+# --hostname Default: 127.0.0.1
+```
-- `message.updated` (sets `time.completed`)
-- `session.status` (transitions to `idle`)
-- `message.part.updated` (final part update)
+### Server-side prompt loop logging
-The `reconcile()` call in `sync.tsx:229` for `message.updated` triggers re-evaluation of `pending()`, `final()`, `lastAssistant()` memos, plus the `` in prompt/index.tsx:1082 switches from spinner to empty ``. When these all fire in rapid succession, opentui's terminal renderer may produce a visible flash between frames.
+The prompt loop in `packages/opencode/src/session/prompt.ts` has structured logging at every decision point:
-**Key components in the render chain:**
+| Log Message | What It Shows |
+| ----------------------------------- | ------------------------------------------------------------------------------------------- |
+| `prompt` | Entry: sessionID, agent, noReply |
+| `loop` | Each iteration: step number, sessionID |
+| `exiting loop (aborted)` | Loop exited due to abort signal |
+| `messages scanned` | Message stream state: count, lastUserID, lastAssistantID, lastAssistantFinish, pendingTasks |
+| `exiting loop (assistant finished)` | Normal exit: finish reason, user/assistant ID comparison |
+| `resolveTools (started/completed)` | Tool resolution timing and tool count |
+| `llm call (started/completed)` | LLM invocation: model, provider, message count, result |
-- `sync.tsx:217` — `session.status` event handler
-- `sync.tsx:229` — `message.updated` with `reconcile()`
-- `session/index.tsx:164-166` — `pending` memo (assistant with `time.completed === 0`)
-- `session/index.tsx:1516-1541` — `Switch/Match` for message footer (duration display)
-- `prompt/index.tsx:1082` — `` (spinner/status bar)
+The `prompt_async` HTTP route in `server/routes/session.ts` also logs `prompt_async received` when a message arrives.
---
@@ -173,6 +157,35 @@ to:
**Rule:** Let SolidJS handle function-vs-element dispatch. Just pass it through in JSX.
+### `Dynamic` as function call vs JSX — subtree recreation bug
+
+**File:** `src/cli/cmd/tui/routes/session/index.tsx`
+
+Calling `Dynamic` as a function inside JSX has **catastrophically different** reactivity behavior than using it as JSX:
+
+```tsx
+// BAD — function call: SolidJS wraps in reactive computation.
+// ANY signal read inside re-executes the ENTIRE call, destroying + recreating the component.
+{
+ ;(Dynamic as Function)({
+ last: index() === props.parts.length - 1, // reactive!
+ component: component(),
+ part,
+ message: props.message,
+ })
+}
+
+// GOOD — JSX: SolidJS creates granular reactive bindings per prop.
+// Only the `component` prop changing triggers component replacement.
+;
+```
+
+**What happened:** Every time `parts.length` changed during streaming (new tool call part added), `index() === props.parts.length - 1` re-evaluated for ALL parts. Since Dynamic was called as a function, this destroyed and recreated **every** `` element and all its internal `CodeRenderable` children. New CodeRenderables start with `_shouldRenderTextBuffer = false` (text invisible) until async tree-sitter highlighting completes → **screen flash** (text blanks out then reappears).
+
+**Fix:** Removed the unused `last` prop from the Dynamic call. No reactive signals read = no re-execution = no recreation = no flash. Took 8+ conversations to trace.
+
+**Rule:** Never read signals inside a `Dynamic(...)` function call unless you want the entire subtree destroyed and recreated on every signal change. Use JSX `` for granular prop updates.
+
### `createMemo`/`createSignal`/`createStore` must be in reactive scope
These primitives MUST be called during component initialization (inside the component function body or inside `createSimpleContext.init()`). Moving them outside breaks SolidJS ownership tracking.
@@ -220,3 +233,40 @@ Bundled providers (Anthropic, OpenAI, etc.) have hardcoded URLs in their SDKs. T
### Plugin System
`opencode-anthropic-auth@0.0.13` is a built-in plugin loaded from `src/plugin/index.ts:24`. It's installed to `~/.cache/orbit/node_modules/` at runtime. It wraps `fetch()` to inject OAuth tokens and rename tools with `mcp_` prefix.
+
+### Prompt Loop Exit Condition
+
+The main loop in `session/prompt.ts` exits when:
+
+```typescript
+if (
+ lastAssistant?.finish && // assistant has a finish reason
+ !["tool-calls", "unknown"].includes(lastAssistant.finish) && // it's a "real" finish (e.g. "stop")
+ lastUser.id < lastAssistant.id // user message came before assistant
+) {
+ break
+}
+```
+
+This compares ULIDs — `lastUser.id < lastAssistant.id` checks chronological ordering. If the new user message's ULID sorts before the previous assistant message, the loop thinks the assistant already responded.
+
+---
+
+## Frontend Structured Logging
+
+10 files across the OpenCode frontend pipeline have structured logging via `createLogger()`:
+
+| Logger Name | File | What it logs |
+| -------------------- | ------------------------------------------- | ---------------------------------------------------- |
+| `OcEventCoordinator` | `services/opencode/oc-event-coordinator.ts` | Event dispatch, directory filtering, unhandled types |
+| `OcSseManager` | `services/opencode/sse-manager.ts` | SSE connect/disconnect/reconnect, event received |
+| `OcSessionService` | `services/opencode/oc-session-service.ts` | HTTP calls: list/create/delete/send/load sessions |
+| `OpenCodeLifecycle` | `hooks/opencode/use-opencode-lifecycle.ts` | Startup sequence, port assignment, backend switching |
+| `OcClient` | `services/opencode/client.ts` | Client init/destroy, directory updates |
+| `OcSessionStore` | `stores/opencode/oc-session-store.ts` | Active session changes, status transitions |
+| `OcMessageStore` | `stores/opencode/oc-message-store.ts` | Message/part upserts, session clears |
+| `OcChat` | `hooks/chat/use-oc-chat.ts` | User send/stop actions, session creation |
+| `OcPermissionStore` | `stores/opencode/oc-permission-store.ts` | Permission/question add/remove |
+| `OcUiBridge` | `services/conversations/oc-ui-bridge.ts` | Session select/restore/create/remove |
+
+Check browser DevTools console for these logs. Cross-reference with server log at `~/.local/share/orbit/log/` for the `service=session.prompt` entries.
diff --git a/Agent-backend/package.json b/Agent-backend/package.json
index 4bb06ff5e..eea67a866 100644
--- a/Agent-backend/package.json
+++ b/Agent-backend/package.json
@@ -41,6 +41,7 @@
"dompurify": "3.3.1",
"drizzle-kit": "1.0.0-beta.16-ea816b6",
"drizzle-orm": "1.0.0-beta.16-ea816b6",
+ "effect": "4.0.0-beta.31",
"ai": "5.0.124",
"hono": "4.10.7",
"hono-openapi": "1.1.2",
@@ -83,9 +84,9 @@
},
"dependencies": {
"@aws-sdk/client-s3": "3.933.0",
- "@opencode-ai/plugin": "workspace:*",
- "@opencode-ai/script": "workspace:*",
- "@opencode-ai/sdk": "workspace:*",
+ "@orbit.build/plugin": "workspace:*",
+ "@orbit.build/script": "workspace:*",
+ "@orbit.build/sdk": "workspace:*",
"typescript": "catalog:"
},
"repository": {
diff --git a/Agent-backend/packages/CLAUDE.md b/Agent-backend/packages/CLAUDE.md
index 1c592ab8e..d6b4e26e1 100644
--- a/Agent-backend/packages/CLAUDE.md
+++ b/Agent-backend/packages/CLAUDE.md
@@ -21,18 +21,18 @@ Orbit: ██ opencode ██ sdk ██ plugin ██ util ██ script
| Package | Name | Purpose |
| ----------- | --------------------- | -------------------------------------------------------------------------------------------------------------- |
| `opencode/` | `opencode` | CLI, API server, agent orchestration, 30+ tools, 20+ LLM providers, MCP, sessions, permissions. **The heart.** |
-| `sdk/js/` | `@opencode-ai/sdk` | Auto-generated TypeScript API client from `sdk/openapi.json`. Already rebranded (`OrbitClient`). |
-| `plugin/` | `@opencode-ai/plugin` | Plugin SDK — `tool()` factory, 20+ hook points, auth hooks |
-| `util/` | `@opencode-ai/util` | Shared utilities (array, encoding, error, path, retry, slug) |
-| `script/` | `@opencode-ai/script` | Build script utilities (semver) |
+| `sdk/js/` | `@orbit.build/sdk` | Auto-generated TypeScript API client from `sdk/openapi.json`. Already rebranded (`OrbitClient`). |
+| `plugin/` | `@orbit.build/plugin` | Plugin SDK — `tool()` factory, 20+ hook points, auth hooks |
+| `util/` | `@orbit.build/util` | Shared utilities (array, encoding, error, path, retry, slug) |
+| `script/` | `@orbit.build/script` | Build script utilities (semver) |
### Reference (kept for patterns, not run)
| Package | Name | Purpose |
| ---------- | ---------------------- | ---------------------------------------------------------------------------------------------------------- |
-| `app/` | `@opencode-ai/app` | SolidJS web UI — context providers, SDK data fetching, SSE event handling, component patterns |
-| `desktop/` | `@opencode-ai/desktop` | Tauri v2 desktop app — sidecar lifecycle, native platform abstraction, auto-updater, window chrome |
-| `ui/` | `@opencode-ai/ui` | 175 SolidJS components — theme system, provider icons, audio assets. Keeps `app/` import paths resolvable. |
+| `app/` | `@orbit.build/app` | SolidJS web UI — context providers, SDK data fetching, SSE event handling, component patterns |
+| `desktop/` | `@orbit.build/desktop` | Tauri v2 desktop app — sidecar lifecycle, native platform abstraction, auto-updater, window chrome |
+| `ui/` | `@orbit.build/ui` | 175 SolidJS components — theme system, provider icons, audio assets. Keeps `app/` import paths resolvable. |
### Removed (upstream infrastructure)
@@ -77,7 +77,7 @@ cd packages/opencode && bun test --timeout 30000
- All UI uses **SolidJS** (not React) — Orbit's React frontend does NOT import these directly
- Database access uses **Drizzle ORM** — SQLite in `opencode`
-- The `ui` package has extensive conditional exports — import from subpaths like `@opencode-ai/ui/hooks`
+- The `ui` package has extensive conditional exports — import from subpaths like `@orbit.build/ui/hooks`
## Development Guide
diff --git a/Agent-backend/packages/app/CLAUDE.md b/Agent-backend/packages/app/CLAUDE.md
index d85e61c95..84a8fdfd1 100644
--- a/Agent-backend/packages/app/CLAUDE.md
+++ b/Agent-backend/packages/app/CLAUDE.md
@@ -21,7 +21,7 @@ The OpenCode web UI — a SolidJS single-page application that connects to the h
| `src/app.tsx` | Root component — 15+ nested providers, lazy-loaded routes (`/` → Home, `/:slug/session/:id` → Session), error boundary |
| `src/index.css` | Global styles (Tailwind imports + theme variables) |
| `src/index.ts` | Package exports for consumption by `packages/desktop` |
-| `package.json` | `@opencode-ai/app` — SolidJS + Vite + Tailwind + Shiki + Ghostty-web |
+| `package.json` | `@orbit.build/app` — SolidJS + Vite + Tailwind + Shiki + Ghostty-web |
| `vite.config.ts` | Vite config — port 3000, ESNext target |
| `playwright.config.ts` | E2E test configuration |
| `AGENTS.md` | Dev guide — local setup, SolidJS patterns, browser automation |
@@ -118,7 +118,7 @@ bun run test:e2e:report # View HTML report
## Dependencies
-- **Internal:** `@opencode-ai/sdk` (API client), `@opencode-ai/ui` (component library), `@opencode-ai/util` (utilities)
+- **Internal:** `@orbit.build/sdk` (API client), `@orbit.build/ui` (component library), `@orbit.build/util` (utilities)
- **SolidJS ecosystem:** `solid-js`, `@solidjs/router`, `@solidjs/meta`, `@kobalte/core`, `solid-list`, `virtua` (virtual scrolling), `@thisbeyond/solid-dnd`
- **Terminal:** `ghostty-web` (Ghostty terminal emulator compiled to WASM)
- **Code:** `shiki` + `@shikijs/transformers` (syntax highlighting), `marked` + `marked-shiki` (Markdown rendering)
diff --git a/Agent-backend/packages/app/package.json b/Agent-backend/packages/app/package.json
index 10ef17d1b..c85e4aa67 100644
--- a/Agent-backend/packages/app/package.json
+++ b/Agent-backend/packages/app/package.json
@@ -1,5 +1,5 @@
{
- "name": "@opencode-ai/app",
+ "name": "@orbit.build/app",
"version": "1.2.24",
"description": "",
"type": "module",
@@ -39,9 +39,9 @@
},
"dependencies": {
"@kobalte/core": "catalog:",
- "@opencode-ai/sdk": "workspace:*",
- "@opencode-ai/ui": "workspace:*",
- "@opencode-ai/util": "workspace:*",
+ "@orbit.build/sdk": "workspace:*",
+ "@orbit.build/ui": "workspace:*",
+ "@orbit.build/util": "workspace:*",
"@shikijs/transformers": "3.9.2",
"@solid-primitives/active-element": "2.1.3",
"@solid-primitives/audio": "1.4.2",
diff --git a/Agent-backend/packages/app/src/app.tsx b/Agent-backend/packages/app/src/app.tsx
index 52a1dac6a..44d941c4a 100644
--- a/Agent-backend/packages/app/src/app.tsx
+++ b/Agent-backend/packages/app/src/app.tsx
@@ -1,11 +1,11 @@
import "@/index.css"
-import { File } from "@opencode-ai/ui/file"
-import { I18nProvider } from "@opencode-ai/ui/context"
-import { DialogProvider } from "@opencode-ai/ui/context/dialog"
-import { FileComponentProvider } from "@opencode-ai/ui/context/file"
-import { MarkedProvider } from "@opencode-ai/ui/context/marked"
-import { Font } from "@opencode-ai/ui/font"
-import { ThemeProvider } from "@opencode-ai/ui/theme"
+import { File } from "@orbit.build/ui/file"
+import { I18nProvider } from "@orbit.build/ui/context"
+import { DialogProvider } from "@orbit.build/ui/context/dialog"
+import { FileComponentProvider } from "@orbit.build/ui/context/file"
+import { MarkedProvider } from "@orbit.build/ui/context/marked"
+import { Font } from "@orbit.build/ui/font"
+import { ThemeProvider } from "@orbit.build/ui/theme"
import { MetaProvider } from "@solidjs/meta"
import { BaseRouterProps, Navigate, Route, Router } from "@solidjs/router"
import { Component, ErrorBoundary, type JSX, lazy, type ParentProps, Show, Suspense } from "solid-js"
diff --git a/Agent-backend/packages/app/src/components/CLAUDE.md b/Agent-backend/packages/app/src/components/CLAUDE.md
index 22fd9bfcc..2ffd5b395 100644
--- a/Agent-backend/packages/app/src/components/CLAUDE.md
+++ b/Agent-backend/packages/app/src/components/CLAUDE.md
@@ -4,7 +4,7 @@
## Purpose
-All SolidJS UI components for the OpenCode web app. Flat structure with three subdirectories (`prompt-input/`, `session/`, `server/`). Contains dialogs, settings tabs, the prompt input system, terminal wrapper, session header, file tree, status popover, titlebar, and debug bar. Components depend heavily on the `@/context/` providers and `@opencode-ai/ui` component library (Kobalte).
+All SolidJS UI components for the OpenCode web app. Flat structure with three subdirectories (`prompt-input/`, `session/`, `server/`). Contains dialogs, settings tabs, the prompt input system, terminal wrapper, session header, file tree, status popover, titlebar, and debug bar. Components depend heavily on the `@/context/` providers and `@orbit.build/ui` component library (Kobalte).
## Usage Status
@@ -104,9 +104,9 @@ Session chrome — header, tabs, context breakdown.
## Dependencies
- **Internal contexts:** Nearly every component imports from `@/context/` (sdk, sync, server, layout, settings, language, platform, command, permission, prompt, file, terminal, comments, highlights, local, models)
-- **UI library:** `@opencode-ai/ui` — Button, Icon, IconButton, Popover, Tabs, Select, Tooltip, Switch, Accordion, ScrollView, Markdown, etc.
-- **SDK:** `@opencode-ai/sdk/v2/client` for `Message`, `Part`, `UserMessage` types
-- **Utilities:** `@opencode-ai/util` (path, encode, array), `@/utils/` (persist, base64, id, server-health, server-errors, runtime-adapters, terminal-writer, worktree, same)
+- **UI library:** `@orbit.build/ui` — Button, Icon, IconButton, Popover, Tabs, Select, Tooltip, Switch, Accordion, ScrollView, Markdown, etc.
+- **SDK:** `@orbit.build/sdk/v2/client` for `Message`, `Part`, `UserMessage` types
+- **Utilities:** `@orbit.build/util` (path, encode, array), `@/utils/` (persist, base64, id, server-health, server-errors, runtime-adapters, terminal-writer, worktree, same)
- **SolidJS:** `solid-js`, `solid-js/store`, `solid-js/web`, `@solidjs/router`
- **External:** `ghostty-web` (terminal), `fuzzysort` (search)
@@ -122,7 +122,7 @@ For Orbit, study these patterns:
4. **Terminal integration** — Ghostty WASM lazy-loading pattern, theme color conversion (oklch → hex via `resolveThemeVariant`), PTY lifecycle management, and serialization for buffer persistence.
-5. **Dialog patterns** — all dialogs use `@opencode-ai/ui` Dialog/Popover primitives from Kobalte. Form state uses `createStore` (SolidJS store), not multiple signals.
+5. **Dialog patterns** — all dialogs use `@orbit.build/ui` Dialog/Popover primitives from Kobalte. Form state uses `createStore` (SolidJS store), not multiple signals.
## Notes
diff --git a/Agent-backend/packages/app/src/components/debug-bar.tsx b/Agent-backend/packages/app/src/components/debug-bar.tsx
index 93a4654f8..53d1bf7e0 100644
--- a/Agent-backend/packages/app/src/components/debug-bar.tsx
+++ b/Agent-backend/packages/app/src/components/debug-bar.tsx
@@ -1,7 +1,7 @@
import { useIsRouting, useLocation } from "@solidjs/router"
import { batch, createEffect, onCleanup, onMount } from "solid-js"
import { createStore } from "solid-js/store"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
+import { Tooltip } from "@orbit.build/ui/tooltip"
type Mem = Performance & {
memory?: {
diff --git a/Agent-backend/packages/app/src/components/dialog-connect-provider.tsx b/Agent-backend/packages/app/src/components/dialog-connect-provider.tsx
index b042205cf..d6cb3dd96 100644
--- a/Agent-backend/packages/app/src/components/dialog-connect-provider.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-connect-provider.tsx
@@ -1,14 +1,14 @@
-import type { ProviderAuthAuthorization } from "@opencode-ai/sdk/v2/client"
-import { Button } from "@opencode-ai/ui/button"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { Icon } from "@opencode-ai/ui/icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { List, type ListRef } from "@opencode-ai/ui/list"
-import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
-import { Spinner } from "@opencode-ai/ui/spinner"
-import { TextField } from "@opencode-ai/ui/text-field"
-import { showToast } from "@opencode-ai/ui/toast"
+import type { ProviderAuthAuthorization } from "@orbit.build/sdk/v2/client"
+import { Button } from "@orbit.build/ui/button"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { Icon } from "@orbit.build/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { List, type ListRef } from "@orbit.build/ui/list"
+import { ProviderIcon } from "@orbit.build/ui/provider-icon"
+import { Spinner } from "@orbit.build/ui/spinner"
+import { TextField } from "@orbit.build/ui/text-field"
+import { showToast } from "@orbit.build/ui/toast"
import { createMemo, Match, onCleanup, onMount, Switch } from "solid-js"
import { createStore, produce } from "solid-js/store"
import { Link } from "@/components/link"
diff --git a/Agent-backend/packages/app/src/components/dialog-custom-provider.tsx b/Agent-backend/packages/app/src/components/dialog-custom-provider.tsx
index 017b85a2c..d1ba84e3c 100644
--- a/Agent-backend/packages/app/src/components/dialog-custom-provider.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-custom-provider.tsx
@@ -1,10 +1,10 @@
-import { Button } from "@opencode-ai/ui/button"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
-import { TextField } from "@opencode-ai/ui/text-field"
-import { showToast } from "@opencode-ai/ui/toast"
+import { Button } from "@orbit.build/ui/button"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { ProviderIcon } from "@orbit.build/ui/provider-icon"
+import { TextField } from "@orbit.build/ui/text-field"
+import { showToast } from "@orbit.build/ui/toast"
import { For } from "solid-js"
import { createStore } from "solid-js/store"
import { Link } from "@/components/link"
diff --git a/Agent-backend/packages/app/src/components/dialog-edit-project.tsx b/Agent-backend/packages/app/src/components/dialog-edit-project.tsx
index ec0793c54..508a6dae5 100644
--- a/Agent-backend/packages/app/src/components/dialog-edit-project.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-edit-project.tsx
@@ -1,15 +1,15 @@
-import { Button } from "@opencode-ai/ui/button"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { TextField } from "@opencode-ai/ui/text-field"
-import { Icon } from "@opencode-ai/ui/icon"
+import { Button } from "@orbit.build/ui/button"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { TextField } from "@orbit.build/ui/text-field"
+import { Icon } from "@orbit.build/ui/icon"
import { createMemo, For, Show } from "solid-js"
import { createStore } from "solid-js/store"
import { useGlobalSDK } from "@/context/global-sdk"
import { useGlobalSync } from "@/context/global-sync"
import { type LocalProject, getAvatarColors } from "@/context/layout"
-import { getFilename } from "@opencode-ai/util/path"
-import { Avatar } from "@opencode-ai/ui/avatar"
+import { getFilename } from "@orbit.build/util/path"
+import { Avatar } from "@orbit.build/ui/avatar"
import { useLanguage } from "@/context/language"
const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const
diff --git a/Agent-backend/packages/app/src/components/dialog-fork.tsx b/Agent-backend/packages/app/src/components/dialog-fork.tsx
index 8810955cc..8a078935d 100644
--- a/Agent-backend/packages/app/src/components/dialog-fork.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-fork.tsx
@@ -3,13 +3,13 @@ import { useNavigate, useParams } from "@solidjs/router"
import { useSync } from "@/context/sync"
import { useSDK } from "@/context/sdk"
import { usePrompt } from "@/context/prompt"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { List } from "@opencode-ai/ui/list"
-import { showToast } from "@opencode-ai/ui/toast"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { List } from "@orbit.build/ui/list"
+import { showToast } from "@orbit.build/ui/toast"
import { extractPromptFromParts } from "@/utils/prompt"
-import type { TextPart as SDKTextPart } from "@opencode-ai/sdk/v2/client"
-import { base64Encode } from "@opencode-ai/util/encode"
+import type { TextPart as SDKTextPart } from "@orbit.build/sdk/v2/client"
+import { base64Encode } from "@orbit.build/util/encode"
import { useLanguage } from "@/context/language"
interface ForkableMessage {
diff --git a/Agent-backend/packages/app/src/components/dialog-manage-models.tsx b/Agent-backend/packages/app/src/components/dialog-manage-models.tsx
index ace79e38a..83a97d9a7 100644
--- a/Agent-backend/packages/app/src/components/dialog-manage-models.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-manage-models.tsx
@@ -1,13 +1,13 @@
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { List } from "@opencode-ai/ui/list"
-import { Switch } from "@opencode-ai/ui/switch"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
-import { Button } from "@opencode-ai/ui/button"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { List } from "@orbit.build/ui/list"
+import { Switch } from "@orbit.build/ui/switch"
+import { Tooltip } from "@orbit.build/ui/tooltip"
+import { Button } from "@orbit.build/ui/button"
import type { Component } from "solid-js"
import { useLocal } from "@/context/local"
import { popularProviders } from "@/hooks/use-providers"
import { useLanguage } from "@/context/language"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { DialogSelectProvider } from "./dialog-select-provider"
export const DialogManageModels: Component = () => {
diff --git a/Agent-backend/packages/app/src/components/dialog-release-notes.tsx b/Agent-backend/packages/app/src/components/dialog-release-notes.tsx
index d0a35b71b..5e736940a 100644
--- a/Agent-backend/packages/app/src/components/dialog-release-notes.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-release-notes.tsx
@@ -1,7 +1,7 @@
import { createSignal } from "solid-js"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { Button } from "@opencode-ai/ui/button"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { Button } from "@orbit.build/ui/button"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { useLanguage } from "@/context/language"
import { useSettings } from "@/context/settings"
diff --git a/Agent-backend/packages/app/src/components/dialog-select-directory.tsx b/Agent-backend/packages/app/src/components/dialog-select-directory.tsx
index 91e23f8ff..3929cb6c4 100644
--- a/Agent-backend/packages/app/src/components/dialog-select-directory.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-select-directory.tsx
@@ -1,9 +1,9 @@
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { FileIcon } from "@opencode-ai/ui/file-icon"
-import { List } from "@opencode-ai/ui/list"
-import type { ListRef } from "@opencode-ai/ui/list"
-import { getDirectory, getFilename } from "@opencode-ai/util/path"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { FileIcon } from "@orbit.build/ui/file-icon"
+import { List } from "@orbit.build/ui/list"
+import type { ListRef } from "@orbit.build/ui/list"
+import { getDirectory, getFilename } from "@orbit.build/util/path"
import fuzzysort from "fuzzysort"
import { createMemo, createResource, createSignal } from "solid-js"
import { useGlobalSDK } from "@/context/global-sdk"
diff --git a/Agent-backend/packages/app/src/components/dialog-select-file.tsx b/Agent-backend/packages/app/src/components/dialog-select-file.tsx
index b530aff53..1af0d5444 100644
--- a/Agent-backend/packages/app/src/components/dialog-select-file.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-select-file.tsx
@@ -1,11 +1,11 @@
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { FileIcon } from "@opencode-ai/ui/file-icon"
-import { Icon } from "@opencode-ai/ui/icon"
-import { Keybind } from "@opencode-ai/ui/keybind"
-import { List } from "@opencode-ai/ui/list"
-import { base64Encode } from "@opencode-ai/util/encode"
-import { getDirectory, getFilename } from "@opencode-ai/util/path"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { FileIcon } from "@orbit.build/ui/file-icon"
+import { Icon } from "@orbit.build/ui/icon"
+import { Keybind } from "@orbit.build/ui/keybind"
+import { List } from "@orbit.build/ui/list"
+import { base64Encode } from "@orbit.build/util/encode"
+import { getDirectory, getFilename } from "@orbit.build/util/path"
import { useNavigate, useParams } from "@solidjs/router"
import { createMemo, createSignal, Match, onCleanup, Show, Switch } from "solid-js"
import { formatKeybind, useCommand, type CommandOption } from "@/context/command"
diff --git a/Agent-backend/packages/app/src/components/dialog-select-mcp.tsx b/Agent-backend/packages/app/src/components/dialog-select-mcp.tsx
index f8913eee4..e2a52c0e0 100644
--- a/Agent-backend/packages/app/src/components/dialog-select-mcp.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-select-mcp.tsx
@@ -1,9 +1,9 @@
import { Component, createMemo, createSignal, Show } from "solid-js"
import { useSync } from "@/context/sync"
import { useSDK } from "@/context/sdk"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { List } from "@opencode-ai/ui/list"
-import { Switch } from "@opencode-ai/ui/switch"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { List } from "@orbit.build/ui/list"
+import { Switch } from "@orbit.build/ui/switch"
import { useLanguage } from "@/context/language"
const statusLabels = {
diff --git a/Agent-backend/packages/app/src/components/dialog-select-model-unpaid.tsx b/Agent-backend/packages/app/src/components/dialog-select-model-unpaid.tsx
index bcee3f501..a385f23c3 100644
--- a/Agent-backend/packages/app/src/components/dialog-select-model-unpaid.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-select-model-unpaid.tsx
@@ -1,10 +1,10 @@
-import { Button } from "@opencode-ai/ui/button"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { List, type ListRef } from "@opencode-ai/ui/list"
-import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
-import { Tag } from "@opencode-ai/ui/tag"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
+import { Button } from "@orbit.build/ui/button"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { List, type ListRef } from "@orbit.build/ui/list"
+import { ProviderIcon } from "@orbit.build/ui/provider-icon"
+import { Tag } from "@orbit.build/ui/tag"
+import { Tooltip } from "@orbit.build/ui/tooltip"
import { type Component, Show } from "solid-js"
import { useLocal } from "@/context/local"
import { popularProviders, useProviders } from "@/hooks/use-providers"
diff --git a/Agent-backend/packages/app/src/components/dialog-select-model.tsx b/Agent-backend/packages/app/src/components/dialog-select-model.tsx
index 9f7afb8cd..947490811 100644
--- a/Agent-backend/packages/app/src/components/dialog-select-model.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-select-model.tsx
@@ -2,14 +2,14 @@ import { Popover as Kobalte } from "@kobalte/core/popover"
import { Component, ComponentProps, createMemo, JSX, Show, ValidComponent } from "solid-js"
import { createStore } from "solid-js/store"
import { useLocal } from "@/context/local"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { popularProviders } from "@/hooks/use-providers"
-import { Button } from "@opencode-ai/ui/button"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Tag } from "@opencode-ai/ui/tag"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { List } from "@opencode-ai/ui/list"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
+import { Button } from "@orbit.build/ui/button"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Tag } from "@orbit.build/ui/tag"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { List } from "@orbit.build/ui/list"
+import { Tooltip } from "@orbit.build/ui/tooltip"
import { DialogSelectProvider } from "./dialog-select-provider"
import { DialogManageModels } from "./dialog-manage-models"
import { ModelTooltip } from "./model-tooltip"
diff --git a/Agent-backend/packages/app/src/components/dialog-select-provider.tsx b/Agent-backend/packages/app/src/components/dialog-select-provider.tsx
index e53738399..fec3fd91c 100644
--- a/Agent-backend/packages/app/src/components/dialog-select-provider.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-select-provider.tsx
@@ -1,10 +1,10 @@
import { Component, Show } from "solid-js"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { popularProviders, useProviders } from "@/hooks/use-providers"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { List } from "@opencode-ai/ui/list"
-import { Tag } from "@opencode-ai/ui/tag"
-import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { List } from "@orbit.build/ui/list"
+import { Tag } from "@orbit.build/ui/tag"
+import { ProviderIcon } from "@orbit.build/ui/provider-icon"
import { DialogConnectProvider } from "./dialog-connect-provider"
import { useLanguage } from "@/context/language"
import { DialogCustomProvider } from "./dialog-custom-provider"
diff --git a/Agent-backend/packages/app/src/components/dialog-select-server.tsx b/Agent-backend/packages/app/src/components/dialog-select-server.tsx
index 4813ecc45..517722976 100644
--- a/Agent-backend/packages/app/src/components/dialog-select-server.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-select-server.tsx
@@ -1,12 +1,12 @@
-import { Button } from "@opencode-ai/ui/button"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
-import { Icon } from "@opencode-ai/ui/icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { List } from "@opencode-ai/ui/list"
-import { TextField } from "@opencode-ai/ui/text-field"
-import { showToast } from "@opencode-ai/ui/toast"
+import { Button } from "@orbit.build/ui/button"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { DropdownMenu } from "@orbit.build/ui/dropdown-menu"
+import { Icon } from "@orbit.build/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { List } from "@orbit.build/ui/list"
+import { TextField } from "@orbit.build/ui/text-field"
+import { showToast } from "@orbit.build/ui/toast"
import { useNavigate } from "@solidjs/router"
import { createEffect, createMemo, createResource, onCleanup, Show } from "solid-js"
import { createStore, reconcile } from "solid-js/store"
diff --git a/Agent-backend/packages/app/src/components/dialog-settings.tsx b/Agent-backend/packages/app/src/components/dialog-settings.tsx
index 83cea131f..8a4750850 100644
--- a/Agent-backend/packages/app/src/components/dialog-settings.tsx
+++ b/Agent-backend/packages/app/src/components/dialog-settings.tsx
@@ -1,7 +1,7 @@
import { Component } from "solid-js"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { Tabs } from "@opencode-ai/ui/tabs"
-import { Icon } from "@opencode-ai/ui/icon"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { Tabs } from "@orbit.build/ui/tabs"
+import { Icon } from "@orbit.build/ui/icon"
import { useLanguage } from "@/context/language"
import { usePlatform } from "@/context/platform"
import { SettingsGeneral } from "./settings-general"
diff --git a/Agent-backend/packages/app/src/components/file-tree.test.ts b/Agent-backend/packages/app/src/components/file-tree.test.ts
index 29e20b480..52e9f6568 100644
--- a/Agent-backend/packages/app/src/components/file-tree.test.ts
+++ b/Agent-backend/packages/app/src/components/file-tree.test.ts
@@ -20,15 +20,15 @@ beforeAll(async () => {
},
}),
}))
- mock.module("@opencode-ai/ui/collapsible", () => ({
+ mock.module("@orbit.build/ui/collapsible", () => ({
Collapsible: {
Trigger: (props: { children?: unknown }) => props.children,
Content: (props: { children?: unknown }) => props.children,
},
}))
- mock.module("@opencode-ai/ui/file-icon", () => ({ FileIcon: () => null }))
- mock.module("@opencode-ai/ui/icon", () => ({ Icon: () => null }))
- mock.module("@opencode-ai/ui/tooltip", () => ({ Tooltip: (props: { children?: unknown }) => props.children }))
+ mock.module("@orbit.build/ui/file-icon", () => ({ FileIcon: () => null }))
+ mock.module("@orbit.build/ui/icon", () => ({ Icon: () => null }))
+ mock.module("@orbit.build/ui/tooltip", () => ({ Tooltip: (props: { children?: unknown }) => props.children }))
const mod = await import("./file-tree")
shouldListRoot = mod.shouldListRoot
shouldListExpanded = mod.shouldListExpanded
diff --git a/Agent-backend/packages/app/src/components/file-tree.tsx b/Agent-backend/packages/app/src/components/file-tree.tsx
index 930832fb6..670224948 100644
--- a/Agent-backend/packages/app/src/components/file-tree.tsx
+++ b/Agent-backend/packages/app/src/components/file-tree.tsx
@@ -1,8 +1,8 @@
import { useFile } from "@/context/file"
import { encodeFilePath } from "@/context/file/path"
-import { Collapsible } from "@opencode-ai/ui/collapsible"
-import { FileIcon } from "@opencode-ai/ui/file-icon"
-import { Icon } from "@opencode-ai/ui/icon"
+import { Collapsible } from "@orbit.build/ui/collapsible"
+import { FileIcon } from "@orbit.build/ui/file-icon"
+import { Icon } from "@orbit.build/ui/icon"
import {
createEffect,
createMemo,
@@ -18,7 +18,7 @@ import {
type ParentProps,
} from "solid-js"
import { Dynamic } from "solid-js/web"
-import type { FileNode } from "@opencode-ai/sdk/v2"
+import type { FileNode } from "@orbit.build/sdk/v2"
const MAX_DEPTH = 128
diff --git a/Agent-backend/packages/app/src/components/prompt-input.tsx b/Agent-backend/packages/app/src/components/prompt-input.tsx
index 532edd3bc..9f906fd1e 100644
--- a/Agent-backend/packages/app/src/components/prompt-input.tsx
+++ b/Agent-backend/packages/app/src/components/prompt-input.tsx
@@ -1,5 +1,5 @@
-import { useFilteredList } from "@opencode-ai/ui/hooks"
-import { useSpring } from "@opencode-ai/ui/motion-spring"
+import { useFilteredList } from "@orbit.build/ui/hooks"
+import { useSpring } from "@orbit.build/ui/motion-spring"
import { createEffect, on, Component, Show, onCleanup, Switch, Match, createMemo, createSignal } from "solid-js"
import { createStore } from "solid-js/store"
import { createFocusSignal } from "@solid-primitives/active-element"
@@ -20,15 +20,15 @@ import { useSDK } from "@/context/sdk"
import { useParams } from "@solidjs/router"
import { useSync } from "@/context/sync"
import { useComments } from "@/context/comments"
-import { Button } from "@opencode-ai/ui/button"
-import { DockShellForm, DockTray } from "@opencode-ai/ui/dock-surface"
-import { Icon } from "@opencode-ai/ui/icon"
-import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
-import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Select } from "@opencode-ai/ui/select"
-import { RadioGroup } from "@opencode-ai/ui/radio-group"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { Button } from "@orbit.build/ui/button"
+import { DockShellForm, DockTray } from "@orbit.build/ui/dock-surface"
+import { Icon } from "@orbit.build/ui/icon"
+import { ProviderIcon } from "@orbit.build/ui/provider-icon"
+import { Tooltip, TooltipKeybind } from "@orbit.build/ui/tooltip"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Select } from "@orbit.build/ui/select"
+import { RadioGroup } from "@orbit.build/ui/radio-group"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { ModelSelectorPopover } from "@/components/dialog-select-model"
import { DialogSelectModelUnpaid } from "@/components/dialog-select-model-unpaid"
import { useProviders } from "@/hooks/use-providers"
@@ -54,7 +54,7 @@ import { PromptContextItems } from "./prompt-input/context-items"
import { PromptImageAttachments } from "./prompt-input/image-attachments"
import { PromptDragOverlay } from "./prompt-input/drag-overlay"
import { promptPlaceholder } from "./prompt-input/placeholder"
-import { ImagePreview } from "@opencode-ai/ui/image-preview"
+import { ImagePreview } from "@orbit.build/ui/image-preview"
interface PromptInputProps {
class?: string
diff --git a/Agent-backend/packages/app/src/components/prompt-input/CLAUDE.md b/Agent-backend/packages/app/src/components/prompt-input/CLAUDE.md
index c60933f1b..ccfcfee9e 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/CLAUDE.md
+++ b/Agent-backend/packages/app/src/components/prompt-input/CLAUDE.md
@@ -30,9 +30,9 @@ Extracted logic modules for the SolidJS chat input component (`prompt-input.tsx`
## Dependencies
-- **SDK:** `@opencode-ai/sdk/v2/client` — `Message`, `Part`, `TextPartInput`, `FilePartInput`, `AgentPartInput` types
-- **UI:** `@opencode-ai/ui/toast` — toast notifications
-- **Util:** `@opencode-ai/util/encode` (base64), `@opencode-ai/util/path` (filename extraction)
+- **SDK:** `@orbit.build/sdk/v2/client` — `Message`, `Part`, `TextPartInput`, `FilePartInput`, `AgentPartInput` types
+- **UI:** `@orbit.build/ui/toast` — toast notifications
+- **Util:** `@orbit.build/util/encode` (base64), `@orbit.build/util/path` (filename extraction)
- **SolidJS contexts:** `@/context/prompt`, `@/context/sdk`, `@/context/file`, `@/context/language`, `@/context/layout`, `@/context/sync`, `@/context/local`, `@/context/permission`, `@/context/global-sync`
- **Router:** `@solidjs/router` — `useNavigate`, `useParams`
diff --git a/Agent-backend/packages/app/src/components/prompt-input/attachments.ts b/Agent-backend/packages/app/src/components/prompt-input/attachments.ts
index a9e4e4965..56c142c91 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/attachments.ts
+++ b/Agent-backend/packages/app/src/components/prompt-input/attachments.ts
@@ -1,5 +1,5 @@
import { onCleanup, onMount } from "solid-js"
-import { showToast } from "@opencode-ai/ui/toast"
+import { showToast } from "@orbit.build/ui/toast"
import { usePrompt, type ContentPart, type ImageAttachmentPart } from "@/context/prompt"
import { useLanguage } from "@/context/language"
import { uuid } from "@/utils/uuid"
diff --git a/Agent-backend/packages/app/src/components/prompt-input/build-request-parts.ts b/Agent-backend/packages/app/src/components/prompt-input/build-request-parts.ts
index 4146fb484..3a509c2df 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/build-request-parts.ts
+++ b/Agent-backend/packages/app/src/components/prompt-input/build-request-parts.ts
@@ -1,5 +1,5 @@
-import { getFilename } from "@opencode-ai/util/path"
-import { type AgentPartInput, type FilePartInput, type Part, type TextPartInput } from "@opencode-ai/sdk/v2/client"
+import { getFilename } from "@orbit.build/util/path"
+import { type AgentPartInput, type FilePartInput, type Part, type TextPartInput } from "@orbit.build/sdk/v2/client"
import type { FileSelection } from "@/context/file"
import { encodeFilePath } from "@/context/file/path"
import type { AgentPart, FileAttachmentPart, ImageAttachmentPart, Prompt } from "@/context/prompt"
diff --git a/Agent-backend/packages/app/src/components/prompt-input/context-items.tsx b/Agent-backend/packages/app/src/components/prompt-input/context-items.tsx
index b138fe3ef..bfdef9bac 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/context-items.tsx
+++ b/Agent-backend/packages/app/src/components/prompt-input/context-items.tsx
@@ -1,8 +1,8 @@
import { Component, For, Show } from "solid-js"
-import { FileIcon } from "@opencode-ai/ui/file-icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
-import { getDirectory, getFilename, getFilenameTruncated } from "@opencode-ai/util/path"
+import { FileIcon } from "@orbit.build/ui/file-icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Tooltip } from "@orbit.build/ui/tooltip"
+import { getDirectory, getFilename, getFilenameTruncated } from "@orbit.build/util/path"
import type { ContextItem } from "@/context/prompt"
type PromptContextItem = ContextItem & { key: string }
diff --git a/Agent-backend/packages/app/src/components/prompt-input/drag-overlay.tsx b/Agent-backend/packages/app/src/components/prompt-input/drag-overlay.tsx
index 41962ce53..48592f2fd 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/drag-overlay.tsx
+++ b/Agent-backend/packages/app/src/components/prompt-input/drag-overlay.tsx
@@ -1,5 +1,5 @@
import { Component, Show } from "solid-js"
-import { Icon } from "@opencode-ai/ui/icon"
+import { Icon } from "@orbit.build/ui/icon"
type PromptDragOverlayProps = {
type: "image" | "@mention" | null
diff --git a/Agent-backend/packages/app/src/components/prompt-input/image-attachments.tsx b/Agent-backend/packages/app/src/components/prompt-input/image-attachments.tsx
index 835fddc30..3b97d2dbd 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/image-attachments.tsx
+++ b/Agent-backend/packages/app/src/components/prompt-input/image-attachments.tsx
@@ -1,5 +1,5 @@
import { Component, For, Show } from "solid-js"
-import { Icon } from "@opencode-ai/ui/icon"
+import { Icon } from "@orbit.build/ui/icon"
import type { ImageAttachmentPart } from "@/context/prompt"
type PromptImageAttachmentsProps = {
diff --git a/Agent-backend/packages/app/src/components/prompt-input/slash-popover.tsx b/Agent-backend/packages/app/src/components/prompt-input/slash-popover.tsx
index 65eb01c79..aad590f27 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/slash-popover.tsx
+++ b/Agent-backend/packages/app/src/components/prompt-input/slash-popover.tsx
@@ -1,7 +1,7 @@
import { Component, For, Match, Show, Switch } from "solid-js"
-import { FileIcon } from "@opencode-ai/ui/file-icon"
-import { Icon } from "@opencode-ai/ui/icon"
-import { getDirectory, getFilename } from "@opencode-ai/util/path"
+import { FileIcon } from "@orbit.build/ui/file-icon"
+import { Icon } from "@orbit.build/ui/icon"
+import { getDirectory, getFilename } from "@orbit.build/util/path"
export type AtOption =
| { type: "agent"; name: string; display: string }
diff --git a/Agent-backend/packages/app/src/components/prompt-input/submit.test.ts b/Agent-backend/packages/app/src/components/prompt-input/submit.test.ts
index 4109417d2..8fef01b6b 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/submit.test.ts
+++ b/Agent-backend/packages/app/src/components/prompt-input/submit.test.ts
@@ -53,18 +53,18 @@ beforeAll(async () => {
useParams: () => params,
}))
- mock.module("@opencode-ai/sdk/v2/client", () => ({
+ mock.module("@orbit.build/sdk/v2/client", () => ({
createOpencodeClient: (input: { directory: string }) => {
createdClients.push(input.directory)
return clientFor(input.directory)
},
}))
- mock.module("@opencode-ai/ui/toast", () => ({
+ mock.module("@orbit.build/ui/toast", () => ({
showToast: () => 0,
}))
- mock.module("@opencode-ai/util/encode", () => ({
+ mock.module("@orbit.build/util/encode", () => ({
base64Encode: (value: string) => value,
}))
diff --git a/Agent-backend/packages/app/src/components/prompt-input/submit.ts b/Agent-backend/packages/app/src/components/prompt-input/submit.ts
index fee6b070d..697ce99aa 100644
--- a/Agent-backend/packages/app/src/components/prompt-input/submit.ts
+++ b/Agent-backend/packages/app/src/components/prompt-input/submit.ts
@@ -1,6 +1,6 @@
-import type { Message } from "@opencode-ai/sdk/v2/client"
-import { showToast } from "@opencode-ai/ui/toast"
-import { base64Encode } from "@opencode-ai/util/encode"
+import type { Message } from "@orbit.build/sdk/v2/client"
+import { showToast } from "@orbit.build/ui/toast"
+import { base64Encode } from "@orbit.build/util/encode"
import { useNavigate, useParams } from "@solidjs/router"
import type { Accessor } from "solid-js"
import type { FileSelection } from "@/context/file"
diff --git a/Agent-backend/packages/app/src/components/server/server-row.tsx b/Agent-backend/packages/app/src/components/server/server-row.tsx
index 5bb290ec3..2c4b97fc1 100644
--- a/Agent-backend/packages/app/src/components/server/server-row.tsx
+++ b/Agent-backend/packages/app/src/components/server/server-row.tsx
@@ -1,4 +1,4 @@
-import { Tooltip } from "@opencode-ai/ui/tooltip"
+import { Tooltip } from "@orbit.build/ui/tooltip"
import {
children,
createEffect,
diff --git a/Agent-backend/packages/app/src/components/session-context-usage.tsx b/Agent-backend/packages/app/src/components/session-context-usage.tsx
index 08ae4d319..5aa8cec2e 100644
--- a/Agent-backend/packages/app/src/components/session-context-usage.tsx
+++ b/Agent-backend/packages/app/src/components/session-context-usage.tsx
@@ -1,7 +1,7 @@
import { Match, Show, Switch, createMemo } from "solid-js"
-import { Tooltip, type TooltipProps } from "@opencode-ai/ui/tooltip"
-import { ProgressCircle } from "@opencode-ai/ui/progress-circle"
-import { Button } from "@opencode-ai/ui/button"
+import { Tooltip, type TooltipProps } from "@orbit.build/ui/tooltip"
+import { ProgressCircle } from "@orbit.build/ui/progress-circle"
+import { Button } from "@orbit.build/ui/button"
import { useParams } from "@solidjs/router"
import { useLayout } from "@/context/layout"
diff --git a/Agent-backend/packages/app/src/components/session/CLAUDE.md b/Agent-backend/packages/app/src/components/session/CLAUDE.md
index 32d71cb87..3736f58b3 100644
--- a/Agent-backend/packages/app/src/components/session/CLAUDE.md
+++ b/Agent-backend/packages/app/src/components/session/CLAUDE.md
@@ -67,9 +67,9 @@ This can be imported directly into Orbit's React code — no SolidJS dependency.
## Dependencies
-- **SDK types:** `@opencode-ai/sdk/v2/client` — `Message`, `AssistantMessage`, `Part`, `UserMessage`
-- **UI library:** `@opencode-ai/ui` — Accordion, Button, DropdownMenu, Icon, IconButton, Popover, Tooltip, FileIcon, Markdown, ScrollView, Spinner, TextField
-- **Utilities:** `@opencode-ai/util` — `path.getFilename()`, `encode.checksum()`, `array.findLast()`
+- **SDK types:** `@orbit.build/sdk/v2/client` — `Message`, `AssistantMessage`, `Part`, `UserMessage`
+- **UI library:** `@orbit.build/ui` — Accordion, Button, DropdownMenu, Icon, IconButton, Popover, Tooltip, FileIcon, Markdown, ScrollView, Spinner, TextField
+- **Utilities:** `@orbit.build/util` — `path.getFilename()`, `encode.checksum()`, `array.findLast()`
- **SolidJS contexts:** `@/context/sync`, `@/context/layout`, `@/context/command`, `@/context/language`, `@/context/platform`, `@/context/server`, `@/context/global-sdk`, `@/context/file`
- **DnD:** `@thisbeyond/solid-dnd` — sortable tab drag-and-drop
diff --git a/Agent-backend/packages/app/src/components/session/session-context-breakdown.test.ts b/Agent-backend/packages/app/src/components/session/session-context-breakdown.test.ts
index f38aecb55..1a8bfaa99 100644
--- a/Agent-backend/packages/app/src/components/session/session-context-breakdown.test.ts
+++ b/Agent-backend/packages/app/src/components/session/session-context-breakdown.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test"
-import type { Message, Part } from "@opencode-ai/sdk/v2/client"
+import type { Message, Part } from "@orbit.build/sdk/v2/client"
import { estimateSessionContextBreakdown } from "./session-context-breakdown"
const user = (id: string) => {
diff --git a/Agent-backend/packages/app/src/components/session/session-context-breakdown.ts b/Agent-backend/packages/app/src/components/session/session-context-breakdown.ts
index e263b2957..cd28df610 100644
--- a/Agent-backend/packages/app/src/components/session/session-context-breakdown.ts
+++ b/Agent-backend/packages/app/src/components/session/session-context-breakdown.ts
@@ -1,4 +1,4 @@
-import type { Message, Part } from "@opencode-ai/sdk/v2/client"
+import type { Message, Part } from "@orbit.build/sdk/v2/client"
export type SessionContextBreakdownKey = "system" | "user" | "assistant" | "tool" | "other"
diff --git a/Agent-backend/packages/app/src/components/session/session-context-metrics.test.ts b/Agent-backend/packages/app/src/components/session/session-context-metrics.test.ts
index 0e109a71b..9a9a14f36 100644
--- a/Agent-backend/packages/app/src/components/session/session-context-metrics.test.ts
+++ b/Agent-backend/packages/app/src/components/session/session-context-metrics.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test"
-import type { Message } from "@opencode-ai/sdk/v2/client"
+import type { Message } from "@orbit.build/sdk/v2/client"
import { getSessionContextMetrics } from "./session-context-metrics"
const assistant = (
diff --git a/Agent-backend/packages/app/src/components/session/session-context-metrics.ts b/Agent-backend/packages/app/src/components/session/session-context-metrics.ts
index 0789b05f1..54981a67b 100644
--- a/Agent-backend/packages/app/src/components/session/session-context-metrics.ts
+++ b/Agent-backend/packages/app/src/components/session/session-context-metrics.ts
@@ -1,4 +1,4 @@
-import type { AssistantMessage, Message } from "@opencode-ai/sdk/v2/client"
+import type { AssistantMessage, Message } from "@orbit.build/sdk/v2/client"
type Provider = {
id: string
diff --git a/Agent-backend/packages/app/src/components/session/session-context-tab.tsx b/Agent-backend/packages/app/src/components/session/session-context-tab.tsx
index 39eb4b4c0..5150d12cf 100644
--- a/Agent-backend/packages/app/src/components/session/session-context-tab.tsx
+++ b/Agent-backend/packages/app/src/components/session/session-context-tab.tsx
@@ -3,16 +3,16 @@ import type { JSX } from "solid-js"
import { useParams } from "@solidjs/router"
import { useSync } from "@/context/sync"
import { useLayout } from "@/context/layout"
-import { checksum } from "@opencode-ai/util/encode"
-import { findLast } from "@opencode-ai/util/array"
+import { checksum } from "@orbit.build/util/encode"
+import { findLast } from "@orbit.build/util/array"
import { same } from "@/utils/same"
-import { Icon } from "@opencode-ai/ui/icon"
-import { Accordion } from "@opencode-ai/ui/accordion"
-import { StickyAccordionHeader } from "@opencode-ai/ui/sticky-accordion-header"
-import { File } from "@opencode-ai/ui/file"
-import { Markdown } from "@opencode-ai/ui/markdown"
-import { ScrollView } from "@opencode-ai/ui/scroll-view"
-import type { Message, Part, UserMessage } from "@opencode-ai/sdk/v2/client"
+import { Icon } from "@orbit.build/ui/icon"
+import { Accordion } from "@orbit.build/ui/accordion"
+import { StickyAccordionHeader } from "@orbit.build/ui/sticky-accordion-header"
+import { File } from "@orbit.build/ui/file"
+import { Markdown } from "@orbit.build/ui/markdown"
+import { ScrollView } from "@orbit.build/ui/scroll-view"
+import type { Message, Part, UserMessage } from "@orbit.build/sdk/v2/client"
import { useLanguage } from "@/context/language"
import { getSessionContextMetrics } from "./session-context-metrics"
import { estimateSessionContextBreakdown, type SessionContextBreakdownKey } from "./session-context-breakdown"
diff --git a/Agent-backend/packages/app/src/components/session/session-header.tsx b/Agent-backend/packages/app/src/components/session/session-header.tsx
index 9b4551584..7a07fb47b 100644
--- a/Agent-backend/packages/app/src/components/session/session-header.tsx
+++ b/Agent-backend/packages/app/src/components/session/session-header.tsx
@@ -1,15 +1,15 @@
-import { AppIcon } from "@opencode-ai/ui/app-icon"
-import { Button } from "@opencode-ai/ui/button"
-import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
-import { Icon } from "@opencode-ai/ui/icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Keybind } from "@opencode-ai/ui/keybind"
-import { Popover } from "@opencode-ai/ui/popover"
-import { Spinner } from "@opencode-ai/ui/spinner"
-import { TextField } from "@opencode-ai/ui/text-field"
-import { showToast } from "@opencode-ai/ui/toast"
-import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip"
-import { getFilename } from "@opencode-ai/util/path"
+import { AppIcon } from "@orbit.build/ui/app-icon"
+import { Button } from "@orbit.build/ui/button"
+import { DropdownMenu } from "@orbit.build/ui/dropdown-menu"
+import { Icon } from "@orbit.build/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Keybind } from "@orbit.build/ui/keybind"
+import { Popover } from "@orbit.build/ui/popover"
+import { Spinner } from "@orbit.build/ui/spinner"
+import { TextField } from "@orbit.build/ui/text-field"
+import { showToast } from "@orbit.build/ui/toast"
+import { Tooltip, TooltipKeybind } from "@orbit.build/ui/tooltip"
+import { getFilename } from "@orbit.build/util/path"
import { useParams } from "@solidjs/router"
import { createEffect, createMemo, For, onCleanup, Show } from "solid-js"
import { createStore } from "solid-js/store"
diff --git a/Agent-backend/packages/app/src/components/session/session-new-view.tsx b/Agent-backend/packages/app/src/components/session/session-new-view.tsx
index 52251dbb2..632c796f7 100644
--- a/Agent-backend/packages/app/src/components/session/session-new-view.tsx
+++ b/Agent-backend/packages/app/src/components/session/session-new-view.tsx
@@ -3,9 +3,9 @@ import { DateTime } from "luxon"
import { useSync } from "@/context/sync"
import { useSDK } from "@/context/sdk"
import { useLanguage } from "@/context/language"
-import { Icon } from "@opencode-ai/ui/icon"
-import { Mark } from "@opencode-ai/ui/logo"
-import { getDirectory, getFilename } from "@opencode-ai/util/path"
+import { Icon } from "@orbit.build/ui/icon"
+import { Mark } from "@orbit.build/ui/logo"
+import { getDirectory, getFilename } from "@orbit.build/util/path"
const MAIN_WORKTREE = "main"
const CREATE_WORKTREE = "create"
diff --git a/Agent-backend/packages/app/src/components/session/session-sortable-tab.tsx b/Agent-backend/packages/app/src/components/session/session-sortable-tab.tsx
index dfda91c16..526ae3126 100644
--- a/Agent-backend/packages/app/src/components/session/session-sortable-tab.tsx
+++ b/Agent-backend/packages/app/src/components/session/session-sortable-tab.tsx
@@ -1,11 +1,11 @@
import { createMemo, Show } from "solid-js"
import type { JSX } from "solid-js"
import { createSortable } from "@thisbeyond/solid-dnd"
-import { FileIcon } from "@opencode-ai/ui/file-icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { TooltipKeybind } from "@opencode-ai/ui/tooltip"
-import { Tabs } from "@opencode-ai/ui/tabs"
-import { getFilename } from "@opencode-ai/util/path"
+import { FileIcon } from "@orbit.build/ui/file-icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { TooltipKeybind } from "@orbit.build/ui/tooltip"
+import { Tabs } from "@orbit.build/ui/tabs"
+import { getFilename } from "@orbit.build/util/path"
import { useFile } from "@/context/file"
import { useLanguage } from "@/context/language"
import { useCommand } from "@/context/command"
diff --git a/Agent-backend/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/Agent-backend/packages/app/src/components/session/session-sortable-terminal-tab.tsx
index 6fe6186d5..2da7f422c 100644
--- a/Agent-backend/packages/app/src/components/session/session-sortable-terminal-tab.tsx
+++ b/Agent-backend/packages/app/src/components/session/session-sortable-terminal-tab.tsx
@@ -2,10 +2,10 @@ import type { JSX } from "solid-js"
import { Show, createEffect, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
import { createSortable } from "@thisbeyond/solid-dnd"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Tabs } from "@opencode-ai/ui/tabs"
-import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
-import { Icon } from "@opencode-ai/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Tabs } from "@orbit.build/ui/tabs"
+import { DropdownMenu } from "@orbit.build/ui/dropdown-menu"
+import { Icon } from "@orbit.build/ui/icon"
import { useTerminal, type LocalPTY } from "@/context/terminal"
import { useLanguage } from "@/context/language"
diff --git a/Agent-backend/packages/app/src/components/settings-general.tsx b/Agent-backend/packages/app/src/components/settings-general.tsx
index 42ee4092f..ef427896d 100644
--- a/Agent-backend/packages/app/src/components/settings-general.tsx
+++ b/Agent-backend/packages/app/src/components/settings-general.tsx
@@ -1,12 +1,12 @@
import { Component, Show, createMemo, createResource, type JSX } from "solid-js"
import { createStore } from "solid-js/store"
-import { Button } from "@opencode-ai/ui/button"
-import { Icon } from "@opencode-ai/ui/icon"
-import { Select } from "@opencode-ai/ui/select"
-import { Switch } from "@opencode-ai/ui/switch"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
-import { useTheme, type ColorScheme } from "@opencode-ai/ui/theme"
-import { showToast } from "@opencode-ai/ui/toast"
+import { Button } from "@orbit.build/ui/button"
+import { Icon } from "@orbit.build/ui/icon"
+import { Select } from "@orbit.build/ui/select"
+import { Switch } from "@orbit.build/ui/switch"
+import { Tooltip } from "@orbit.build/ui/tooltip"
+import { useTheme, type ColorScheme } from "@orbit.build/ui/theme"
+import { showToast } from "@orbit.build/ui/toast"
import { useLanguage } from "@/context/language"
import { usePlatform } from "@/context/platform"
import { useSettings, monoFontFamily } from "@/context/settings"
diff --git a/Agent-backend/packages/app/src/components/settings-keybinds.tsx b/Agent-backend/packages/app/src/components/settings-keybinds.tsx
index 94bc76d76..22148bee8 100644
--- a/Agent-backend/packages/app/src/components/settings-keybinds.tsx
+++ b/Agent-backend/packages/app/src/components/settings-keybinds.tsx
@@ -1,10 +1,10 @@
import { Component, For, Show, createMemo, onCleanup, onMount } from "solid-js"
import { createStore } from "solid-js/store"
-import { Button } from "@opencode-ai/ui/button"
-import { Icon } from "@opencode-ai/ui/icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { TextField } from "@opencode-ai/ui/text-field"
-import { showToast } from "@opencode-ai/ui/toast"
+import { Button } from "@orbit.build/ui/button"
+import { Icon } from "@orbit.build/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { TextField } from "@orbit.build/ui/text-field"
+import { showToast } from "@orbit.build/ui/toast"
import fuzzysort from "fuzzysort"
import { formatKeybind, parseKeybind, useCommand } from "@/context/command"
import { useLanguage } from "@/context/language"
diff --git a/Agent-backend/packages/app/src/components/settings-models.tsx b/Agent-backend/packages/app/src/components/settings-models.tsx
index eff62cd6c..74709b10d 100644
--- a/Agent-backend/packages/app/src/components/settings-models.tsx
+++ b/Agent-backend/packages/app/src/components/settings-models.tsx
@@ -1,9 +1,9 @@
-import { useFilteredList } from "@opencode-ai/ui/hooks"
-import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
-import { Switch } from "@opencode-ai/ui/switch"
-import { Icon } from "@opencode-ai/ui/icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { TextField } from "@opencode-ai/ui/text-field"
+import { useFilteredList } from "@orbit.build/ui/hooks"
+import { ProviderIcon } from "@orbit.build/ui/provider-icon"
+import { Switch } from "@orbit.build/ui/switch"
+import { Icon } from "@orbit.build/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { TextField } from "@orbit.build/ui/text-field"
import { type Component, For, Show } from "solid-js"
import { useLanguage } from "@/context/language"
import { useModels } from "@/context/models"
diff --git a/Agent-backend/packages/app/src/components/settings-permissions.tsx b/Agent-backend/packages/app/src/components/settings-permissions.tsx
index 5c922ba44..9e19ba6be 100644
--- a/Agent-backend/packages/app/src/components/settings-permissions.tsx
+++ b/Agent-backend/packages/app/src/components/settings-permissions.tsx
@@ -1,5 +1,5 @@
-import { Select } from "@opencode-ai/ui/select"
-import { showToast } from "@opencode-ai/ui/toast"
+import { Select } from "@orbit.build/ui/select"
+import { showToast } from "@orbit.build/ui/toast"
import { Component, For, createMemo, type JSX } from "solid-js"
import { useGlobalSync } from "@/context/global-sync"
import { useLanguage } from "@/context/language"
diff --git a/Agent-backend/packages/app/src/components/settings-providers.tsx b/Agent-backend/packages/app/src/components/settings-providers.tsx
index a9839758b..ecd8b02df 100644
--- a/Agent-backend/packages/app/src/components/settings-providers.tsx
+++ b/Agent-backend/packages/app/src/components/settings-providers.tsx
@@ -1,8 +1,8 @@
-import { Button } from "@opencode-ai/ui/button"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
-import { Tag } from "@opencode-ai/ui/tag"
-import { showToast } from "@opencode-ai/ui/toast"
+import { Button } from "@orbit.build/ui/button"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { ProviderIcon } from "@orbit.build/ui/provider-icon"
+import { Tag } from "@orbit.build/ui/tag"
+import { showToast } from "@orbit.build/ui/toast"
import { popularProviders, useProviders } from "@/hooks/use-providers"
import { createMemo, type Component, For, Show } from "solid-js"
import { useLanguage } from "@/context/language"
diff --git a/Agent-backend/packages/app/src/components/status-popover.tsx b/Agent-backend/packages/app/src/components/status-popover.tsx
index 6c571f78c..f272b52b5 100644
--- a/Agent-backend/packages/app/src/components/status-popover.tsx
+++ b/Agent-backend/packages/app/src/components/status-popover.tsx
@@ -1,10 +1,10 @@
-import { Button } from "@opencode-ai/ui/button"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { Icon } from "@opencode-ai/ui/icon"
-import { Popover } from "@opencode-ai/ui/popover"
-import { Switch } from "@opencode-ai/ui/switch"
-import { Tabs } from "@opencode-ai/ui/tabs"
-import { showToast } from "@opencode-ai/ui/toast"
+import { Button } from "@orbit.build/ui/button"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { Icon } from "@orbit.build/ui/icon"
+import { Popover } from "@orbit.build/ui/popover"
+import { Switch } from "@orbit.build/ui/switch"
+import { Tabs } from "@orbit.build/ui/tabs"
+import { showToast } from "@orbit.build/ui/toast"
import { useNavigate } from "@solidjs/router"
import { type Accessor, createEffect, createMemo, createSignal, For, type JSXElement, onCleanup, Show } from "solid-js"
import { createStore, reconcile } from "solid-js/store"
diff --git a/Agent-backend/packages/app/src/components/terminal.tsx b/Agent-backend/packages/app/src/components/terminal.tsx
index 9e5f12ee4..931495267 100644
--- a/Agent-backend/packages/app/src/components/terminal.tsx
+++ b/Agent-backend/packages/app/src/components/terminal.tsx
@@ -1,5 +1,5 @@
-import { type HexColor, resolveThemeVariant, useTheme, withAlpha } from "@opencode-ai/ui/theme"
-import { showToast } from "@opencode-ai/ui/toast"
+import { type HexColor, resolveThemeVariant, useTheme, withAlpha } from "@orbit.build/ui/theme"
+import { showToast } from "@orbit.build/ui/toast"
import type { FitAddon, Ghostty, Terminal as Term } from "ghostty-web"
import { type ComponentProps, createEffect, createMemo, onCleanup, onMount, splitProps } from "solid-js"
import { SerializeAddon } from "@/addons/serialize"
diff --git a/Agent-backend/packages/app/src/components/titlebar.tsx b/Agent-backend/packages/app/src/components/titlebar.tsx
index b45f81150..5e685deca 100644
--- a/Agent-backend/packages/app/src/components/titlebar.tsx
+++ b/Agent-backend/packages/app/src/components/titlebar.tsx
@@ -1,11 +1,11 @@
import { createEffect, createMemo, Show, untrack } from "solid-js"
import { createStore } from "solid-js/store"
import { useLocation, useNavigate, useParams } from "@solidjs/router"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Icon } from "@opencode-ai/ui/icon"
-import { Button } from "@opencode-ai/ui/button"
-import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip"
-import { useTheme } from "@opencode-ai/ui/theme"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Icon } from "@orbit.build/ui/icon"
+import { Button } from "@orbit.build/ui/button"
+import { Tooltip, TooltipKeybind } from "@orbit.build/ui/tooltip"
+import { useTheme } from "@orbit.build/ui/theme"
import { useLayout } from "@/context/layout"
import { usePlatform } from "@/context/platform"
diff --git a/Agent-backend/packages/app/src/context/CLAUDE.md b/Agent-backend/packages/app/src/context/CLAUDE.md
index 621ac52b3..cfe70a7b2 100644
--- a/Agent-backend/packages/app/src/context/CLAUDE.md
+++ b/Agent-backend/packages/app/src/context/CLAUDE.md
@@ -189,9 +189,9 @@ Complex logic extracted from `global-sync.tsx` — per-directory child store man
## Dependencies
-- **SDK:** `@opencode-ai/sdk/v2/client` for all data types (`Session`, `Message`, `Part`, `Config`, `Project`, `PermissionRequest`, `Todo`, `FileDiff`, `McpStatus`, `LspStatus`, etc.)
-- **UI library:** `@opencode-ai/ui/context` (`createSimpleContext`), `@opencode-ai/ui/toast` (`showToast`)
-- **Utilities:** `@opencode-ai/util/binary` (sorted array operations), `@opencode-ai/util/retry`, `@opencode-ai/util/path`, `@opencode-ai/util/encode`
+- **SDK:** `@orbit.build/sdk/v2/client` for all data types (`Session`, `Message`, `Part`, `Config`, `Project`, `PermissionRequest`, `Todo`, `FileDiff`, `McpStatus`, `LspStatus`, etc.)
+- **UI library:** `@orbit.build/ui/context` (`createSimpleContext`), `@orbit.build/ui/toast` (`showToast`)
+- **Utilities:** `@orbit.build/util/binary` (sorted array operations), `@orbit.build/util/retry`, `@orbit.build/util/path`, `@orbit.build/util/encode`
- **Internal:** `@/utils/persist` (localStorage wrapper), `@/utils/base64`, `@/utils/same` (deep equality), `@/utils/server-health`, `@/utils/server-errors`
- **SolidJS:** `solid-js`, `solid-js/store` (`createStore`, `produce`, `reconcile`), `@solidjs/router`, `@solid-primitives/i18n`, `@solid-primitives/storage`, `@solid-primitives/event-bus`
@@ -215,8 +215,8 @@ Complex logic extracted from `global-sync.tsx` — per-directory child store man
## Notes
-- **`createSimpleContext` pattern** — most providers use `@opencode-ai/ui/context`'s `createSimpleContext`, which auto-generates `useX()` hook and `XProvider` component from an `init()` function. Orbit's Zustand stores serve the same purpose without the SolidJS context boilerplate.
-- **Binary search everywhere** — sorted arrays + `Binary.search()` from `@opencode-ai/util/binary` is the canonical pattern for sessions, messages, and parts. All stores maintain sorted order by ID.
+- **`createSimpleContext` pattern** — most providers use `@orbit.build/ui/context`'s `createSimpleContext`, which auto-generates `useX()` hook and `XProvider` component from an `init()` function. Orbit's Zustand stores serve the same purpose without the SolidJS context boilerplate.
+- **Binary search everywhere** — sorted arrays + `Binary.search()` from `@orbit.build/util/binary` is the canonical pattern for sessions, messages, and parts. All stores maintain sorted order by ID.
- **Multi-directory support** — `GlobalSync` manages state for multiple workspace directories simultaneously (up to 30), with idle eviction after 20 minutes. This is more complex than Orbit currently needs but shows how to scale.
- **19 test files** across context + subdirectories — the most thoroughly tested layer of the frontend.
- **`reconcile()` for state updates** — SolidJS's `reconcile()` (like React's reconciliation) is used to efficiently update store arrays from server responses. Orbit uses Immer's `produce()` instead.
diff --git a/Agent-backend/packages/app/src/context/command.tsx b/Agent-backend/packages/app/src/context/command.tsx
index 03bd6318d..a6d4d2a0e 100644
--- a/Agent-backend/packages/app/src/context/command.tsx
+++ b/Agent-backend/packages/app/src/context/command.tsx
@@ -1,7 +1,7 @@
import { createEffect, createMemo, onCleanup, onMount, type Accessor } from "solid-js"
import { createStore } from "solid-js/store"
-import { createSimpleContext } from "@opencode-ai/ui/context"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { createSimpleContext } from "@orbit.build/ui/context"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { useLanguage } from "@/context/language"
import { useSettings } from "@/context/settings"
import { Persist, persisted } from "@/utils/persist"
diff --git a/Agent-backend/packages/app/src/context/comments.test.ts b/Agent-backend/packages/app/src/context/comments.test.ts
index 82fa170f2..091174085 100644
--- a/Agent-backend/packages/app/src/context/comments.test.ts
+++ b/Agent-backend/packages/app/src/context/comments.test.ts
@@ -9,7 +9,7 @@ beforeAll(async () => {
useNavigate: () => () => undefined,
useParams: () => ({}),
}))
- mock.module("@opencode-ai/ui/context", () => ({
+ mock.module("@orbit.build/ui/context", () => ({
createSimpleContext: () => ({
use: () => undefined,
provider: () => undefined,
diff --git a/Agent-backend/packages/app/src/context/comments.tsx b/Agent-backend/packages/app/src/context/comments.tsx
index a97010c0a..1ca0391bd 100644
--- a/Agent-backend/packages/app/src/context/comments.tsx
+++ b/Agent-backend/packages/app/src/context/comments.tsx
@@ -1,6 +1,6 @@
import { batch, createMemo, createRoot, onCleanup } from "solid-js"
import { createStore, reconcile, type SetStoreFunction, type Store } from "solid-js/store"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { useParams } from "@solidjs/router"
import { Persist, persisted } from "@/utils/persist"
import { createScopedCache } from "@/utils/scoped-cache"
diff --git a/Agent-backend/packages/app/src/context/file.tsx b/Agent-backend/packages/app/src/context/file.tsx
index 99c6d2e42..500954b30 100644
--- a/Agent-backend/packages/app/src/context/file.tsx
+++ b/Agent-backend/packages/app/src/context/file.tsx
@@ -1,9 +1,9 @@
import { batch, createEffect, createMemo, onCleanup } from "solid-js"
import { createStore, produce, reconcile } from "solid-js/store"
-import { createSimpleContext } from "@opencode-ai/ui/context"
-import { showToast } from "@opencode-ai/ui/toast"
+import { createSimpleContext } from "@orbit.build/ui/context"
+import { showToast } from "@orbit.build/ui/toast"
import { useParams } from "@solidjs/router"
-import { getFilename } from "@opencode-ai/util/path"
+import { getFilename } from "@orbit.build/util/path"
import { useSDK } from "./sdk"
import { useSync } from "./sync"
import { useLanguage } from "@/context/language"
diff --git a/Agent-backend/packages/app/src/context/file/content-cache.ts b/Agent-backend/packages/app/src/context/file/content-cache.ts
index 4b7240688..b14828468 100644
--- a/Agent-backend/packages/app/src/context/file/content-cache.ts
+++ b/Agent-backend/packages/app/src/context/file/content-cache.ts
@@ -1,4 +1,4 @@
-import type { FileContent } from "@opencode-ai/sdk/v2"
+import type { FileContent } from "@orbit.build/sdk/v2"
const MAX_FILE_CONTENT_ENTRIES = 40
const MAX_FILE_CONTENT_BYTES = 20 * 1024 * 1024
diff --git a/Agent-backend/packages/app/src/context/file/tree-store.ts b/Agent-backend/packages/app/src/context/file/tree-store.ts
index a86051d28..d8bb2366e 100644
--- a/Agent-backend/packages/app/src/context/file/tree-store.ts
+++ b/Agent-backend/packages/app/src/context/file/tree-store.ts
@@ -1,5 +1,5 @@
import { createStore, produce, reconcile } from "solid-js/store"
-import type { FileNode } from "@opencode-ai/sdk/v2"
+import type { FileNode } from "@orbit.build/sdk/v2"
type DirectoryState = {
expanded: boolean
diff --git a/Agent-backend/packages/app/src/context/file/types.ts b/Agent-backend/packages/app/src/context/file/types.ts
index 7ce8a37c2..2f564b392 100644
--- a/Agent-backend/packages/app/src/context/file/types.ts
+++ b/Agent-backend/packages/app/src/context/file/types.ts
@@ -1,4 +1,4 @@
-import type { FileContent } from "@opencode-ai/sdk/v2"
+import type { FileContent } from "@orbit.build/sdk/v2"
export type FileSelection = {
startLine: number
diff --git a/Agent-backend/packages/app/src/context/file/watcher.ts b/Agent-backend/packages/app/src/context/file/watcher.ts
index fbf719927..0d68a6b9e 100644
--- a/Agent-backend/packages/app/src/context/file/watcher.ts
+++ b/Agent-backend/packages/app/src/context/file/watcher.ts
@@ -1,4 +1,4 @@
-import type { FileNode } from "@opencode-ai/sdk/v2"
+import type { FileNode } from "@orbit.build/sdk/v2"
type WatcherEvent = {
type: string
diff --git a/Agent-backend/packages/app/src/context/global-sdk.tsx b/Agent-backend/packages/app/src/context/global-sdk.tsx
index c1a87b95b..2f1ff424e 100644
--- a/Agent-backend/packages/app/src/context/global-sdk.tsx
+++ b/Agent-backend/packages/app/src/context/global-sdk.tsx
@@ -1,5 +1,5 @@
-import type { Event } from "@opencode-ai/sdk/v2/client"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import type { Event } from "@orbit.build/sdk/v2/client"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { batch, onCleanup } from "solid-js"
import z from "zod"
diff --git a/Agent-backend/packages/app/src/context/global-sync.tsx b/Agent-backend/packages/app/src/context/global-sync.tsx
index 4090699a8..e68d833a0 100644
--- a/Agent-backend/packages/app/src/context/global-sync.tsx
+++ b/Agent-backend/packages/app/src/context/global-sync.tsx
@@ -6,9 +6,9 @@ import type {
ProviderAuthResponse,
ProviderListResponse,
Todo,
-} from "@opencode-ai/sdk/v2/client"
-import { showToast } from "@opencode-ai/ui/toast"
-import { getFilename } from "@opencode-ai/util/path"
+} from "@orbit.build/sdk/v2/client"
+import { showToast } from "@orbit.build/ui/toast"
+import { getFilename } from "@orbit.build/util/path"
import {
createContext,
getOwner,
diff --git a/Agent-backend/packages/app/src/context/global-sync/bootstrap.ts b/Agent-backend/packages/app/src/context/global-sync/bootstrap.ts
index 8b1a3c48c..29d21ec80 100644
--- a/Agent-backend/packages/app/src/context/global-sync/bootstrap.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/bootstrap.ts
@@ -8,10 +8,10 @@ import type {
ProviderListResponse,
QuestionRequest,
Todo,
-} from "@opencode-ai/sdk/v2/client"
-import { showToast } from "@opencode-ai/ui/toast"
-import { getFilename } from "@opencode-ai/util/path"
-import { retry } from "@opencode-ai/util/retry"
+} from "@orbit.build/sdk/v2/client"
+import { showToast } from "@orbit.build/ui/toast"
+import { getFilename } from "@orbit.build/util/path"
+import { retry } from "@orbit.build/util/retry"
import { batch } from "solid-js"
import { reconcile, type SetStoreFunction, type Store } from "solid-js/store"
import type { State, VcsCache } from "./types"
diff --git a/Agent-backend/packages/app/src/context/global-sync/child-store.ts b/Agent-backend/packages/app/src/context/global-sync/child-store.ts
index e2ada244f..9ea9e22e6 100644
--- a/Agent-backend/packages/app/src/context/global-sync/child-store.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/child-store.ts
@@ -1,7 +1,7 @@
import { createRoot, getOwner, onCleanup, runWithOwner, type Owner } from "solid-js"
import { createStore, type SetStoreFunction, type Store } from "solid-js/store"
import { Persist, persisted } from "@/utils/persist"
-import type { VcsInfo } from "@opencode-ai/sdk/v2/client"
+import type { VcsInfo } from "@orbit.build/sdk/v2/client"
import {
DIR_IDLE_TTL_MS,
MAX_DIR_STORES,
diff --git a/Agent-backend/packages/app/src/context/global-sync/event-reducer.test.ts b/Agent-backend/packages/app/src/context/global-sync/event-reducer.test.ts
index cf2da135c..e9cc81d3d 100644
--- a/Agent-backend/packages/app/src/context/global-sync/event-reducer.test.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/event-reducer.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test"
-import type { Message, Part, PermissionRequest, Project, QuestionRequest, Session } from "@opencode-ai/sdk/v2/client"
+import type { Message, Part, PermissionRequest, Project, QuestionRequest, Session } from "@orbit.build/sdk/v2/client"
import { createStore } from "solid-js/store"
import type { State } from "./types"
import { applyDirectoryEvent, applyGlobalEvent, cleanupDroppedSessionCaches } from "./event-reducer"
diff --git a/Agent-backend/packages/app/src/context/global-sync/event-reducer.ts b/Agent-backend/packages/app/src/context/global-sync/event-reducer.ts
index b8eda0573..235a6c636 100644
--- a/Agent-backend/packages/app/src/context/global-sync/event-reducer.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/event-reducer.ts
@@ -1,4 +1,4 @@
-import { Binary } from "@opencode-ai/util/binary"
+import { Binary } from "@orbit.build/util/binary"
import { produce, reconcile, type SetStoreFunction, type Store } from "solid-js/store"
import type {
FileDiff,
@@ -10,7 +10,7 @@ import type {
Session,
SessionStatus,
Todo,
-} from "@opencode-ai/sdk/v2/client"
+} from "@orbit.build/sdk/v2/client"
import type { State, VcsCache } from "./types"
import { trimSessions } from "./session-trim"
import { dropSessionCaches } from "./session-cache"
diff --git a/Agent-backend/packages/app/src/context/global-sync/session-cache.test.ts b/Agent-backend/packages/app/src/context/global-sync/session-cache.test.ts
index 8e11110e3..efdfb128c 100644
--- a/Agent-backend/packages/app/src/context/global-sync/session-cache.test.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/session-cache.test.ts
@@ -7,7 +7,7 @@ import type {
QuestionRequest,
SessionStatus,
Todo,
-} from "@opencode-ai/sdk/v2/client"
+} from "@orbit.build/sdk/v2/client"
import { dropSessionCaches, pickSessionCacheEvictions } from "./session-cache"
const msg = (id: string, sessionID: string) =>
diff --git a/Agent-backend/packages/app/src/context/global-sync/session-cache.ts b/Agent-backend/packages/app/src/context/global-sync/session-cache.ts
index 0177ebbe1..fafeea263 100644
--- a/Agent-backend/packages/app/src/context/global-sync/session-cache.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/session-cache.ts
@@ -6,7 +6,7 @@ import type {
QuestionRequest,
SessionStatus,
Todo,
-} from "@opencode-ai/sdk/v2/client"
+} from "@orbit.build/sdk/v2/client"
export const SESSION_CACHE_LIMIT = 40
diff --git a/Agent-backend/packages/app/src/context/global-sync/session-trim.test.ts b/Agent-backend/packages/app/src/context/global-sync/session-trim.test.ts
index be12c074b..0bcc280ee 100644
--- a/Agent-backend/packages/app/src/context/global-sync/session-trim.test.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/session-trim.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test"
-import type { PermissionRequest, Session } from "@opencode-ai/sdk/v2/client"
+import type { PermissionRequest, Session } from "@orbit.build/sdk/v2/client"
import { trimSessions } from "./session-trim"
const session = (input: { id: string; parentID?: string; created: number; updated?: number; archived?: number }) =>
diff --git a/Agent-backend/packages/app/src/context/global-sync/session-trim.ts b/Agent-backend/packages/app/src/context/global-sync/session-trim.ts
index 800ba74a6..f08336d6e 100644
--- a/Agent-backend/packages/app/src/context/global-sync/session-trim.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/session-trim.ts
@@ -1,4 +1,4 @@
-import type { PermissionRequest, Session } from "@opencode-ai/sdk/v2/client"
+import type { PermissionRequest, Session } from "@orbit.build/sdk/v2/client"
import { cmp } from "./utils"
import { SESSION_RECENT_LIMIT, SESSION_RECENT_WINDOW } from "./types"
diff --git a/Agent-backend/packages/app/src/context/global-sync/types.ts b/Agent-backend/packages/app/src/context/global-sync/types.ts
index c61dc337d..f9d964a42 100644
--- a/Agent-backend/packages/app/src/context/global-sync/types.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/types.ts
@@ -16,7 +16,7 @@ import type {
SessionStatus,
Todo,
VcsInfo,
-} from "@opencode-ai/sdk/v2/client"
+} from "@orbit.build/sdk/v2/client"
import type { Accessor } from "solid-js"
import type { SetStoreFunction, Store } from "solid-js/store"
diff --git a/Agent-backend/packages/app/src/context/global-sync/utils.ts b/Agent-backend/packages/app/src/context/global-sync/utils.ts
index 6b78134a6..30c207547 100644
--- a/Agent-backend/packages/app/src/context/global-sync/utils.ts
+++ b/Agent-backend/packages/app/src/context/global-sync/utils.ts
@@ -1,4 +1,4 @@
-import type { Project, ProviderListResponse } from "@opencode-ai/sdk/v2/client"
+import type { Project, ProviderListResponse } from "@orbit.build/sdk/v2/client"
export const cmp = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0)
diff --git a/Agent-backend/packages/app/src/context/highlights.tsx b/Agent-backend/packages/app/src/context/highlights.tsx
index 476209e41..6fad1084d 100644
--- a/Agent-backend/packages/app/src/context/highlights.tsx
+++ b/Agent-backend/packages/app/src/context/highlights.tsx
@@ -1,7 +1,7 @@
import { createEffect, createSignal, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
-import { createSimpleContext } from "@opencode-ai/ui/context"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { createSimpleContext } from "@orbit.build/ui/context"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { usePlatform } from "@/context/platform"
import { useSettings } from "@/context/settings"
import { persisted } from "@/utils/persist"
diff --git a/Agent-backend/packages/app/src/context/language.tsx b/Agent-backend/packages/app/src/context/language.tsx
index b1edd541c..b9e09db24 100644
--- a/Agent-backend/packages/app/src/context/language.tsx
+++ b/Agent-backend/packages/app/src/context/language.tsx
@@ -1,7 +1,7 @@
import * as i18n from "@solid-primitives/i18n"
import { createEffect, createMemo } from "solid-js"
import { createStore } from "solid-js/store"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { Persist, persisted } from "@/utils/persist"
import { dict as en } from "@/i18n/en"
import { dict as zh } from "@/i18n/zh"
@@ -20,23 +20,23 @@ import { dict as br } from "@/i18n/br"
import { dict as th } from "@/i18n/th"
import { dict as bs } from "@/i18n/bs"
import { dict as tr } from "@/i18n/tr"
-import { dict as uiEn } from "@opencode-ai/ui/i18n/en"
-import { dict as uiZh } from "@opencode-ai/ui/i18n/zh"
-import { dict as uiZht } from "@opencode-ai/ui/i18n/zht"
-import { dict as uiKo } from "@opencode-ai/ui/i18n/ko"
-import { dict as uiDe } from "@opencode-ai/ui/i18n/de"
-import { dict as uiEs } from "@opencode-ai/ui/i18n/es"
-import { dict as uiFr } from "@opencode-ai/ui/i18n/fr"
-import { dict as uiDa } from "@opencode-ai/ui/i18n/da"
-import { dict as uiJa } from "@opencode-ai/ui/i18n/ja"
-import { dict as uiPl } from "@opencode-ai/ui/i18n/pl"
-import { dict as uiRu } from "@opencode-ai/ui/i18n/ru"
-import { dict as uiAr } from "@opencode-ai/ui/i18n/ar"
-import { dict as uiNo } from "@opencode-ai/ui/i18n/no"
-import { dict as uiBr } from "@opencode-ai/ui/i18n/br"
-import { dict as uiTh } from "@opencode-ai/ui/i18n/th"
-import { dict as uiBs } from "@opencode-ai/ui/i18n/bs"
-import { dict as uiTr } from "@opencode-ai/ui/i18n/tr"
+import { dict as uiEn } from "@orbit.build/ui/i18n/en"
+import { dict as uiZh } from "@orbit.build/ui/i18n/zh"
+import { dict as uiZht } from "@orbit.build/ui/i18n/zht"
+import { dict as uiKo } from "@orbit.build/ui/i18n/ko"
+import { dict as uiDe } from "@orbit.build/ui/i18n/de"
+import { dict as uiEs } from "@orbit.build/ui/i18n/es"
+import { dict as uiFr } from "@orbit.build/ui/i18n/fr"
+import { dict as uiDa } from "@orbit.build/ui/i18n/da"
+import { dict as uiJa } from "@orbit.build/ui/i18n/ja"
+import { dict as uiPl } from "@orbit.build/ui/i18n/pl"
+import { dict as uiRu } from "@orbit.build/ui/i18n/ru"
+import { dict as uiAr } from "@orbit.build/ui/i18n/ar"
+import { dict as uiNo } from "@orbit.build/ui/i18n/no"
+import { dict as uiBr } from "@orbit.build/ui/i18n/br"
+import { dict as uiTh } from "@orbit.build/ui/i18n/th"
+import { dict as uiBs } from "@orbit.build/ui/i18n/bs"
+import { dict as uiTr } from "@orbit.build/ui/i18n/tr"
export type Locale =
| "en"
diff --git a/Agent-backend/packages/app/src/context/layout.tsx b/Agent-backend/packages/app/src/context/layout.tsx
index 5199e5a26..a1cbcc1e9 100644
--- a/Agent-backend/packages/app/src/context/layout.tsx
+++ b/Agent-backend/packages/app/src/context/layout.tsx
@@ -1,11 +1,11 @@
import { createStore, produce } from "solid-js/store"
import { batch, createEffect, createMemo, onCleanup, onMount, type Accessor } from "solid-js"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { useGlobalSync } from "./global-sync"
import { useGlobalSDK } from "./global-sdk"
import { useServer } from "./server"
import { usePlatform } from "./platform"
-import { Project } from "@opencode-ai/sdk/v2"
+import { Project } from "@orbit.build/sdk/v2"
import { Persist, persisted, removePersisted } from "@/utils/persist"
import { decode64 } from "@/utils/base64"
import { same } from "@/utils/same"
diff --git a/Agent-backend/packages/app/src/context/local.tsx b/Agent-backend/packages/app/src/context/local.tsx
index 75d1334a5..735bc8101 100644
--- a/Agent-backend/packages/app/src/context/local.tsx
+++ b/Agent-backend/packages/app/src/context/local.tsx
@@ -1,9 +1,9 @@
import { createStore } from "solid-js/store"
import { batch, createMemo } from "solid-js"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { useSDK } from "./sdk"
import { useSync } from "./sync"
-import { base64Encode } from "@opencode-ai/util/encode"
+import { base64Encode } from "@orbit.build/util/encode"
import { useProviders } from "@/hooks/use-providers"
import { useModels } from "@/context/models"
import { cycleModelVariant, getConfiguredAgentVariant, resolveModelVariant } from "./model-variant"
diff --git a/Agent-backend/packages/app/src/context/models.tsx b/Agent-backend/packages/app/src/context/models.tsx
index 12ec8371a..408af6602 100644
--- a/Agent-backend/packages/app/src/context/models.tsx
+++ b/Agent-backend/packages/app/src/context/models.tsx
@@ -2,7 +2,7 @@ import { createMemo } from "solid-js"
import { createStore } from "solid-js/store"
import { DateTime } from "luxon"
import { filter, firstBy, flat, groupBy, mapValues, pipe, uniqueBy, values } from "remeda"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { useProviders } from "@/hooks/use-providers"
import { Persist, persisted } from "@/utils/persist"
diff --git a/Agent-backend/packages/app/src/context/notification.tsx b/Agent-backend/packages/app/src/context/notification.tsx
index 04bc2fdaa..9065cbac4 100644
--- a/Agent-backend/packages/app/src/context/notification.tsx
+++ b/Agent-backend/packages/app/src/context/notification.tsx
@@ -1,16 +1,16 @@
import { createStore, reconcile } from "solid-js/store"
import { batch, createEffect, createMemo, onCleanup } from "solid-js"
import { useParams } from "@solidjs/router"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { useGlobalSDK } from "./global-sdk"
import { useGlobalSync } from "./global-sync"
import { usePlatform } from "@/context/platform"
import { useLanguage } from "@/context/language"
import { useSettings } from "@/context/settings"
-import { Binary } from "@opencode-ai/util/binary"
-import { base64Encode } from "@opencode-ai/util/encode"
+import { Binary } from "@orbit.build/util/binary"
+import { base64Encode } from "@orbit.build/util/encode"
import { decode64 } from "@/utils/base64"
-import { EventSessionError } from "@opencode-ai/sdk/v2"
+import { EventSessionError } from "@orbit.build/sdk/v2"
import { Persist, persisted } from "@/utils/persist"
import { playSound, soundSrc } from "@/utils/sound"
diff --git a/Agent-backend/packages/app/src/context/permission-auto-respond.test.ts b/Agent-backend/packages/app/src/context/permission-auto-respond.test.ts
index 755611300..93e65d77f 100644
--- a/Agent-backend/packages/app/src/context/permission-auto-respond.test.ts
+++ b/Agent-backend/packages/app/src/context/permission-auto-respond.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, test } from "bun:test"
-import type { PermissionRequest, Session } from "@opencode-ai/sdk/v2/client"
-import { base64Encode } from "@opencode-ai/util/encode"
+import type { PermissionRequest, Session } from "@orbit.build/sdk/v2/client"
+import { base64Encode } from "@orbit.build/util/encode"
import { autoRespondsPermission, isDirectoryAutoAccepting } from "./permission-auto-respond"
const session = (input: { id: string; parentID?: string }) =>
diff --git a/Agent-backend/packages/app/src/context/permission-auto-respond.ts b/Agent-backend/packages/app/src/context/permission-auto-respond.ts
index b206deedf..dbe0913ea 100644
--- a/Agent-backend/packages/app/src/context/permission-auto-respond.ts
+++ b/Agent-backend/packages/app/src/context/permission-auto-respond.ts
@@ -1,4 +1,4 @@
-import { base64Encode } from "@opencode-ai/util/encode"
+import { base64Encode } from "@orbit.build/util/encode"
export function acceptKey(sessionID: string, directory?: string) {
if (!directory) return sessionID
diff --git a/Agent-backend/packages/app/src/context/permission.tsx b/Agent-backend/packages/app/src/context/permission.tsx
index 672f84f82..f48d76f7b 100644
--- a/Agent-backend/packages/app/src/context/permission.tsx
+++ b/Agent-backend/packages/app/src/context/permission.tsx
@@ -1,7 +1,7 @@
import { createEffect, createMemo, onCleanup } from "solid-js"
import { createStore, produce } from "solid-js/store"
-import { createSimpleContext } from "@opencode-ai/ui/context"
-import type { PermissionRequest } from "@opencode-ai/sdk/v2/client"
+import { createSimpleContext } from "@orbit.build/ui/context"
+import type { PermissionRequest } from "@orbit.build/sdk/v2/client"
import { Persist, persisted } from "@/utils/persist"
import { useGlobalSDK } from "@/context/global-sdk"
import { useGlobalSync } from "./global-sync"
diff --git a/Agent-backend/packages/app/src/context/platform.tsx b/Agent-backend/packages/app/src/context/platform.tsx
index 86f3321e4..241bfff2e 100644
--- a/Agent-backend/packages/app/src/context/platform.tsx
+++ b/Agent-backend/packages/app/src/context/platform.tsx
@@ -1,4 +1,4 @@
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import type { AsyncStorage, SyncStorage } from "@solid-primitives/storage"
import type { Accessor } from "solid-js"
diff --git a/Agent-backend/packages/app/src/context/prompt.tsx b/Agent-backend/packages/app/src/context/prompt.tsx
index fb8226559..ab106552a 100644
--- a/Agent-backend/packages/app/src/context/prompt.tsx
+++ b/Agent-backend/packages/app/src/context/prompt.tsx
@@ -1,10 +1,10 @@
import { createStore, type SetStoreFunction } from "solid-js/store"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { batch, createMemo, createRoot, onCleanup } from "solid-js"
import { useParams } from "@solidjs/router"
import type { FileSelection } from "@/context/file"
import { Persist, persisted } from "@/utils/persist"
-import { checksum } from "@opencode-ai/util/encode"
+import { checksum } from "@orbit.build/util/encode"
interface PartBase {
content: string
diff --git a/Agent-backend/packages/app/src/context/sdk.tsx b/Agent-backend/packages/app/src/context/sdk.tsx
index bc97ea13a..5e36ba25d 100644
--- a/Agent-backend/packages/app/src/context/sdk.tsx
+++ b/Agent-backend/packages/app/src/context/sdk.tsx
@@ -1,5 +1,5 @@
-import type { Event } from "@opencode-ai/sdk/v2/client"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import type { Event } from "@orbit.build/sdk/v2/client"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { type Accessor, createEffect, createMemo, onCleanup } from "solid-js"
import { useGlobalSDK } from "./global-sdk"
diff --git a/Agent-backend/packages/app/src/context/server.tsx b/Agent-backend/packages/app/src/context/server.tsx
index 4ff777e2e..75747848f 100644
--- a/Agent-backend/packages/app/src/context/server.tsx
+++ b/Agent-backend/packages/app/src/context/server.tsx
@@ -1,4 +1,4 @@
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { type Accessor, batch, createEffect, createMemo, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
import { usePlatform } from "@/context/platform"
diff --git a/Agent-backend/packages/app/src/context/settings.tsx b/Agent-backend/packages/app/src/context/settings.tsx
index b43469b5c..35285ad01 100644
--- a/Agent-backend/packages/app/src/context/settings.tsx
+++ b/Agent-backend/packages/app/src/context/settings.tsx
@@ -1,6 +1,6 @@
import { createStore, reconcile } from "solid-js/store"
import { createEffect, createMemo } from "solid-js"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { persisted } from "@/utils/persist"
export interface NotificationSettings {
diff --git a/Agent-backend/packages/app/src/context/sync-optimistic.test.ts b/Agent-backend/packages/app/src/context/sync-optimistic.test.ts
index 7deeddd6e..517babd45 100644
--- a/Agent-backend/packages/app/src/context/sync-optimistic.test.ts
+++ b/Agent-backend/packages/app/src/context/sync-optimistic.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test"
-import type { Message, Part } from "@opencode-ai/sdk/v2/client"
+import type { Message, Part } from "@orbit.build/sdk/v2/client"
import { applyOptimisticAdd, applyOptimisticRemove } from "./sync"
const userMessage = (id: string, sessionID: string): Message => ({
diff --git a/Agent-backend/packages/app/src/context/sync.tsx b/Agent-backend/packages/app/src/context/sync.tsx
index 5623a2c7c..e67a29d2b 100644
--- a/Agent-backend/packages/app/src/context/sync.tsx
+++ b/Agent-backend/packages/app/src/context/sync.tsx
@@ -1,11 +1,11 @@
import { batch, createMemo } from "solid-js"
import { createStore, produce, reconcile } from "solid-js/store"
-import { Binary } from "@opencode-ai/util/binary"
-import { retry } from "@opencode-ai/util/retry"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { Binary } from "@orbit.build/util/binary"
+import { retry } from "@orbit.build/util/retry"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { useGlobalSync } from "./global-sync"
import { useSDK } from "./sdk"
-import type { Message, Part } from "@opencode-ai/sdk/v2/client"
+import type { Message, Part } from "@orbit.build/sdk/v2/client"
import { SESSION_CACHE_LIMIT, dropSessionCaches, pickSessionCacheEvictions } from "./global-sync/session-cache"
function sortParts(parts: Part[]) {
diff --git a/Agent-backend/packages/app/src/context/terminal.test.ts b/Agent-backend/packages/app/src/context/terminal.test.ts
index 6e07e0312..b8867c748 100644
--- a/Agent-backend/packages/app/src/context/terminal.test.ts
+++ b/Agent-backend/packages/app/src/context/terminal.test.ts
@@ -9,7 +9,7 @@ beforeAll(async () => {
useNavigate: () => () => undefined,
useParams: () => ({}),
}))
- mock.module("@opencode-ai/ui/context", () => ({
+ mock.module("@orbit.build/ui/context", () => ({
createSimpleContext: () => ({
use: () => undefined,
provider: () => undefined,
diff --git a/Agent-backend/packages/app/src/context/terminal.tsx b/Agent-backend/packages/app/src/context/terminal.tsx
index a2807375f..7f44e20b7 100644
--- a/Agent-backend/packages/app/src/context/terminal.tsx
+++ b/Agent-backend/packages/app/src/context/terminal.tsx
@@ -1,5 +1,5 @@
import { createStore, produce } from "solid-js/store"
-import { createSimpleContext } from "@opencode-ai/ui/context"
+import { createSimpleContext } from "@orbit.build/ui/context"
import { batch, createEffect, createMemo, createRoot, on, onCleanup } from "solid-js"
import { useParams } from "@solidjs/router"
import { useSDK } from "./sdk"
diff --git a/Agent-backend/packages/app/src/entry.tsx b/Agent-backend/packages/app/src/entry.tsx
index e9c0a4397..1d20c258c 100644
--- a/Agent-backend/packages/app/src/entry.tsx
+++ b/Agent-backend/packages/app/src/entry.tsx
@@ -1,6 +1,6 @@
// @refresh reload
-import { iife } from "@opencode-ai/util/iife"
+import { iife } from "@orbit.build/util/iife"
import { render } from "solid-js/web"
import { AppBaseProviders, AppInterface } from "@/app"
import { type Platform, PlatformProvider } from "@/context/platform"
diff --git a/Agent-backend/packages/app/src/index.css b/Agent-backend/packages/app/src/index.css
index 9e231e2d2..5a4481298 100644
--- a/Agent-backend/packages/app/src/index.css
+++ b/Agent-backend/packages/app/src/index.css
@@ -1,4 +1,4 @@
-@import "@opencode-ai/ui/styles/tailwind";
+@import "@orbit.build/ui/styles/tailwind";
@layer components {
[data-component="getting-started"] {
diff --git a/Agent-backend/packages/app/src/pages/CLAUDE.md b/Agent-backend/packages/app/src/pages/CLAUDE.md
index 4aa78e37e..8e445d095 100644
--- a/Agent-backend/packages/app/src/pages/CLAUDE.md
+++ b/Agent-backend/packages/app/src/pages/CLAUDE.md
@@ -112,8 +112,8 @@ Composer region — the bottom dock area handling permissions, questions, and to
- **Internal contexts:** `@/context/sdk`, `sync`, `global-sync`, `global-sdk`, `layout`, `settings`, `platform`, `language`, `local`, `file`, `comments`, `prompt`, `permission`, `notification`, `terminal`, `command`
- **Internal components:** `@/components/session`, `@/components/prompt-input`, `@/components/dialog-*`, `@/components/status-popover`
-- **UI library:** `@opencode-ai/ui` — ResizeHandle, ScrollView, SessionTurn, InlineInput, Dialog, ContextMenu, HoverCard, DropdownMenu, Button, Icon, Spinner, FileIcon, Markdown, Logo, Toast, Select, DragDrop
-- **SDK:** `@opencode-ai/sdk/v2` for Session, Message, Part, UserMessage, AssistantMessage, PermissionRequest, QuestionRequest, Todo, FileDiff types
+- **UI library:** `@orbit.build/ui` — ResizeHandle, ScrollView, SessionTurn, InlineInput, Dialog, ContextMenu, HoverCard, DropdownMenu, Button, Icon, Spinner, FileIcon, Markdown, Logo, Toast, Select, DragDrop
+- **SDK:** `@orbit.build/sdk/v2` for Session, Message, Part, UserMessage, AssistantMessage, PermissionRequest, QuestionRequest, Todo, FileDiff types
- **External:** `@thisbeyond/solid-dnd` (drag-and-drop), `@solid-primitives/media` (media queries), `@solid-primitives/resize-observer`, `luxon` (dates)
## Development Guide
diff --git a/Agent-backend/packages/app/src/pages/directory-layout.tsx b/Agent-backend/packages/app/src/pages/directory-layout.tsx
index fdf321f2d..b8c4eca73 100644
--- a/Agent-backend/packages/app/src/pages/directory-layout.tsx
+++ b/Agent-backend/packages/app/src/pages/directory-layout.tsx
@@ -6,10 +6,10 @@ import { SyncProvider, useSync } from "@/context/sync"
import { LocalProvider } from "@/context/local"
import { useGlobalSDK } from "@/context/global-sdk"
-import { DataProvider } from "@opencode-ai/ui/context"
-import { base64Encode } from "@opencode-ai/util/encode"
+import { DataProvider } from "@orbit.build/ui/context"
+import { base64Encode } from "@orbit.build/util/encode"
import { decode64 } from "@/utils/base64"
-import { showToast } from "@opencode-ai/ui/toast"
+import { showToast } from "@orbit.build/ui/toast"
import { useLanguage } from "@/context/language"
function DirectoryDataProvider(props: ParentProps<{ directory: string }>) {
const navigate = useNavigate()
diff --git a/Agent-backend/packages/app/src/pages/error.tsx b/Agent-backend/packages/app/src/pages/error.tsx
index a30d86d18..29da3e34c 100644
--- a/Agent-backend/packages/app/src/pages/error.tsx
+++ b/Agent-backend/packages/app/src/pages/error.tsx
@@ -1,11 +1,11 @@
-import { TextField } from "@opencode-ai/ui/text-field"
-import { Logo } from "@opencode-ai/ui/logo"
-import { Button } from "@opencode-ai/ui/button"
+import { TextField } from "@orbit.build/ui/text-field"
+import { Logo } from "@orbit.build/ui/logo"
+import { Button } from "@orbit.build/ui/button"
import { Component, Show } from "solid-js"
import { createStore } from "solid-js/store"
import { usePlatform } from "@/context/platform"
import { useLanguage } from "@/context/language"
-import { Icon } from "@opencode-ai/ui/icon"
+import { Icon } from "@orbit.build/ui/icon"
export type InitError = {
name: string
diff --git a/Agent-backend/packages/app/src/pages/home.tsx b/Agent-backend/packages/app/src/pages/home.tsx
index ba3a2b942..931b7065c 100644
--- a/Agent-backend/packages/app/src/pages/home.tsx
+++ b/Agent-backend/packages/app/src/pages/home.tsx
@@ -1,13 +1,13 @@
import { createMemo, For, Match, Switch } from "solid-js"
-import { Button } from "@opencode-ai/ui/button"
-import { Logo } from "@opencode-ai/ui/logo"
+import { Button } from "@orbit.build/ui/button"
+import { Logo } from "@orbit.build/ui/logo"
import { useLayout } from "@/context/layout"
import { useNavigate } from "@solidjs/router"
-import { base64Encode } from "@opencode-ai/util/encode"
-import { Icon } from "@opencode-ai/ui/icon"
+import { base64Encode } from "@orbit.build/util/encode"
+import { Icon } from "@orbit.build/ui/icon"
import { usePlatform } from "@/context/platform"
import { DateTime } from "luxon"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { DialogSelectDirectory } from "@/components/dialog-select-directory"
import { DialogSelectServer } from "@/components/dialog-select-server"
import { useServer } from "@/context/server"
diff --git a/Agent-backend/packages/app/src/pages/layout.tsx b/Agent-backend/packages/app/src/pages/layout.tsx
index 052a03c54..c03ca9872 100644
--- a/Agent-backend/packages/app/src/pages/layout.tsx
+++ b/Agent-backend/packages/app/src/pages/layout.tsx
@@ -15,38 +15,38 @@ import { useNavigate, useParams } from "@solidjs/router"
import { useLayout, LocalProject } from "@/context/layout"
import { useGlobalSync } from "@/context/global-sync"
import { Persist, persisted } from "@/utils/persist"
-import { base64Encode } from "@opencode-ai/util/encode"
+import { base64Encode } from "@orbit.build/util/encode"
import { decode64 } from "@/utils/base64"
-import { ResizeHandle } from "@opencode-ai/ui/resize-handle"
-import { Button } from "@opencode-ai/ui/button"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
-import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { getFilename } from "@opencode-ai/util/path"
-import { Session, type Message } from "@opencode-ai/sdk/v2/client"
+import { ResizeHandle } from "@orbit.build/ui/resize-handle"
+import { Button } from "@orbit.build/ui/button"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Tooltip } from "@orbit.build/ui/tooltip"
+import { DropdownMenu } from "@orbit.build/ui/dropdown-menu"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { getFilename } from "@orbit.build/util/path"
+import { Session, type Message } from "@orbit.build/sdk/v2/client"
import { usePlatform } from "@/context/platform"
import { useSettings } from "@/context/settings"
import { createStore, produce, reconcile } from "solid-js/store"
import { DragDropProvider, DragDropSensors, DragOverlay, SortableProvider, closestCenter } from "@thisbeyond/solid-dnd"
import type { DragEvent } from "@thisbeyond/solid-dnd"
import { useProviders } from "@/hooks/use-providers"
-import { showToast, Toast, toaster } from "@opencode-ai/ui/toast"
+import { showToast, Toast, toaster } from "@orbit.build/ui/toast"
import { useGlobalSDK } from "@/context/global-sdk"
import { clearWorkspaceTerminals } from "@/context/terminal"
import { dropSessionCaches, pickSessionCacheEvictions } from "@/context/global-sync/session-cache"
import { useNotification } from "@/context/notification"
import { usePermission } from "@/context/permission"
-import { Binary } from "@opencode-ai/util/binary"
-import { retry } from "@opencode-ai/util/retry"
+import { Binary } from "@orbit.build/util/binary"
+import { retry } from "@orbit.build/util/retry"
import { playSound, soundSrc } from "@/utils/sound"
import { createAim } from "@/utils/aim"
import { setNavigate } from "@/utils/notification-click"
import { Worktree as WorktreeState } from "@/utils/worktree"
import { setSessionHandoff } from "@/pages/session/handoff"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
-import { useTheme, type ColorScheme } from "@opencode-ai/ui/theme"
+import { useDialog } from "@orbit.build/ui/context/dialog"
+import { useTheme, type ColorScheme } from "@orbit.build/ui/theme"
import { DialogSelectProvider } from "@/components/dialog-select-provider"
import { DialogSelectServer } from "@/components/dialog-select-server"
import { DialogSettings } from "@/components/dialog-settings"
diff --git a/Agent-backend/packages/app/src/pages/layout/helpers.test.ts b/Agent-backend/packages/app/src/pages/layout/helpers.test.ts
index d1569dbd9..d3a6e061f 100644
--- a/Agent-backend/packages/app/src/pages/layout/helpers.test.ts
+++ b/Agent-backend/packages/app/src/pages/layout/helpers.test.ts
@@ -7,7 +7,7 @@ import {
parseNewSessionDeepLink,
} from "./deep-links"
import { displayName, errorMessage, getDraggableId, syncWorkspaceOrder, workspaceKey } from "./helpers"
-import { type Session } from "@opencode-ai/sdk/v2/client"
+import { type Session } from "@orbit.build/sdk/v2/client"
import { hasProjectPermissions, latestRootSession } from "./helpers"
const session = (input: Partial & Pick) =>
diff --git a/Agent-backend/packages/app/src/pages/layout/helpers.ts b/Agent-backend/packages/app/src/pages/layout/helpers.ts
index 42315e589..b1254ad1a 100644
--- a/Agent-backend/packages/app/src/pages/layout/helpers.ts
+++ b/Agent-backend/packages/app/src/pages/layout/helpers.ts
@@ -1,5 +1,5 @@
-import { getFilename } from "@opencode-ai/util/path"
-import { type Session } from "@opencode-ai/sdk/v2/client"
+import { getFilename } from "@orbit.build/util/path"
+import { type Session } from "@orbit.build/sdk/v2/client"
export const workspaceKey = (directory: string) => {
const drive = directory.match(/^([A-Za-z]:)[\\/]+$/)
diff --git a/Agent-backend/packages/app/src/pages/layout/inline-editor.tsx b/Agent-backend/packages/app/src/pages/layout/inline-editor.tsx
index 4189e4a72..dacfbf0fa 100644
--- a/Agent-backend/packages/app/src/pages/layout/inline-editor.tsx
+++ b/Agent-backend/packages/app/src/pages/layout/inline-editor.tsx
@@ -1,6 +1,6 @@
import { createStore } from "solid-js/store"
import { onCleanup, Show, type Accessor } from "solid-js"
-import { InlineInput } from "@opencode-ai/ui/inline-input"
+import { InlineInput } from "@orbit.build/ui/inline-input"
export function createInlineEditorController() {
// This controller intentionally supports one active inline editor at a time.
diff --git a/Agent-backend/packages/app/src/pages/layout/sidebar-items.tsx b/Agent-backend/packages/app/src/pages/layout/sidebar-items.tsx
index 8dc03755e..510272947 100644
--- a/Agent-backend/packages/app/src/pages/layout/sidebar-items.tsx
+++ b/Agent-backend/packages/app/src/pages/layout/sidebar-items.tsx
@@ -1,13 +1,13 @@
-import type { Message, Session, TextPart, UserMessage } from "@opencode-ai/sdk/v2/client"
-import { Avatar } from "@opencode-ai/ui/avatar"
-import { HoverCard } from "@opencode-ai/ui/hover-card"
-import { Icon } from "@opencode-ai/ui/icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { MessageNav } from "@opencode-ai/ui/message-nav"
-import { Spinner } from "@opencode-ai/ui/spinner"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
-import { base64Encode } from "@opencode-ai/util/encode"
-import { getFilename } from "@opencode-ai/util/path"
+import type { Message, Session, TextPart, UserMessage } from "@orbit.build/sdk/v2/client"
+import { Avatar } from "@orbit.build/ui/avatar"
+import { HoverCard } from "@orbit.build/ui/hover-card"
+import { Icon } from "@orbit.build/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { MessageNav } from "@orbit.build/ui/message-nav"
+import { Spinner } from "@orbit.build/ui/spinner"
+import { Tooltip } from "@orbit.build/ui/tooltip"
+import { base64Encode } from "@orbit.build/util/encode"
+import { getFilename } from "@orbit.build/util/path"
import { A, useNavigate, useParams } from "@solidjs/router"
import { type Accessor, createMemo, For, type JSX, Match, onCleanup, Show, Switch } from "solid-js"
import { useGlobalSync } from "@/context/global-sync"
diff --git a/Agent-backend/packages/app/src/pages/layout/sidebar-project.tsx b/Agent-backend/packages/app/src/pages/layout/sidebar-project.tsx
index 187cd2f33..22bcafaf5 100644
--- a/Agent-backend/packages/app/src/pages/layout/sidebar-project.tsx
+++ b/Agent-backend/packages/app/src/pages/layout/sidebar-project.tsx
@@ -1,10 +1,10 @@
import { createEffect, createMemo, For, Show, type Accessor, type JSX } from "solid-js"
import { createStore } from "solid-js/store"
-import { base64Encode } from "@opencode-ai/util/encode"
-import { Button } from "@opencode-ai/ui/button"
-import { ContextMenu } from "@opencode-ai/ui/context-menu"
-import { HoverCard } from "@opencode-ai/ui/hover-card"
-import { Icon } from "@opencode-ai/ui/icon"
+import { base64Encode } from "@orbit.build/util/encode"
+import { Button } from "@orbit.build/ui/button"
+import { ContextMenu } from "@orbit.build/ui/context-menu"
+import { HoverCard } from "@orbit.build/ui/hover-card"
+import { Icon } from "@orbit.build/ui/icon"
import { createSortable } from "@thisbeyond/solid-dnd"
import { useLayout, type LocalProject } from "@/context/layout"
import { useGlobalSync } from "@/context/global-sync"
diff --git a/Agent-backend/packages/app/src/pages/layout/sidebar-shell.tsx b/Agent-backend/packages/app/src/pages/layout/sidebar-shell.tsx
index d3070e374..713e75c22 100644
--- a/Agent-backend/packages/app/src/pages/layout/sidebar-shell.tsx
+++ b/Agent-backend/packages/app/src/pages/layout/sidebar-shell.tsx
@@ -8,8 +8,8 @@ import {
type DragEvent,
} from "@thisbeyond/solid-dnd"
import { ConstrainDragXAxis } from "@/utils/solid-dnd"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Tooltip, TooltipKeybind } from "@orbit.build/ui/tooltip"
import { type LocalProject } from "@/context/layout"
import { sidebarExpanded } from "./sidebar-shell-helpers"
diff --git a/Agent-backend/packages/app/src/pages/layout/sidebar-workspace.tsx b/Agent-backend/packages/app/src/pages/layout/sidebar-workspace.tsx
index c317b9c5e..2401b9703 100644
--- a/Agent-backend/packages/app/src/pages/layout/sidebar-workspace.tsx
+++ b/Agent-backend/packages/app/src/pages/layout/sidebar-workspace.tsx
@@ -3,16 +3,16 @@ import { createEffect, createMemo, For, Show, type Accessor, type JSX } from "so
import { createStore } from "solid-js/store"
import { createSortable } from "@thisbeyond/solid-dnd"
import { createMediaQuery } from "@solid-primitives/media"
-import { base64Encode } from "@opencode-ai/util/encode"
-import { getFilename } from "@opencode-ai/util/path"
-import { Button } from "@opencode-ai/ui/button"
-import { Collapsible } from "@opencode-ai/ui/collapsible"
-import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
-import { Icon } from "@opencode-ai/ui/icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Spinner } from "@opencode-ai/ui/spinner"
-import { Tooltip } from "@opencode-ai/ui/tooltip"
-import { type Session } from "@opencode-ai/sdk/v2/client"
+import { base64Encode } from "@orbit.build/util/encode"
+import { getFilename } from "@orbit.build/util/path"
+import { Button } from "@orbit.build/ui/button"
+import { Collapsible } from "@orbit.build/ui/collapsible"
+import { DropdownMenu } from "@orbit.build/ui/dropdown-menu"
+import { Icon } from "@orbit.build/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Spinner } from "@orbit.build/ui/spinner"
+import { Tooltip } from "@orbit.build/ui/tooltip"
+import { type Session } from "@orbit.build/sdk/v2/client"
import { type LocalProject } from "@/context/layout"
import { useGlobalSync } from "@/context/global-sync"
import { useLanguage } from "@/context/language"
diff --git a/Agent-backend/packages/app/src/pages/session.tsx b/Agent-backend/packages/app/src/pages/session.tsx
index c1552ad02..28d828db2 100644
--- a/Agent-backend/packages/app/src/pages/session.tsx
+++ b/Agent-backend/packages/app/src/pages/session.tsx
@@ -1,5 +1,5 @@
-import type { Project, UserMessage } from "@opencode-ai/sdk/v2"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import type { Project, UserMessage } from "@orbit.build/sdk/v2"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import {
onCleanup,
Show,
@@ -17,12 +17,12 @@ import { createResizeObserver } from "@solid-primitives/resize-observer"
import { useLocal } from "@/context/local"
import { selectionFromLines, useFile, type FileSelection, type SelectedLineRange } from "@/context/file"
import { createStore } from "solid-js/store"
-import { ResizeHandle } from "@opencode-ai/ui/resize-handle"
-import { Select } from "@opencode-ai/ui/select"
-import { createAutoScroll } from "@opencode-ai/ui/hooks"
-import { Button } from "@opencode-ai/ui/button"
-import { showToast } from "@opencode-ai/ui/toast"
-import { base64Encode, checksum } from "@opencode-ai/util/encode"
+import { ResizeHandle } from "@orbit.build/ui/resize-handle"
+import { Select } from "@orbit.build/ui/select"
+import { createAutoScroll } from "@orbit.build/ui/hooks"
+import { Button } from "@orbit.build/ui/button"
+import { showToast } from "@orbit.build/ui/toast"
+import { base64Encode, checksum } from "@orbit.build/util/encode"
import { useNavigate, useParams, useSearchParams } from "@solidjs/router"
import { NewSessionView, SessionHeader } from "@/components/session"
import { useComments } from "@/context/comments"
diff --git a/Agent-backend/packages/app/src/pages/session/composer/session-composer-region.tsx b/Agent-backend/packages/app/src/pages/session/composer/session-composer-region.tsx
index 93ea3d465..f7300fb16 100644
--- a/Agent-backend/packages/app/src/pages/session/composer/session-composer-region.tsx
+++ b/Agent-backend/packages/app/src/pages/session/composer/session-composer-region.tsx
@@ -1,7 +1,7 @@
import { Show, createEffect, createMemo, createSignal, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
import { useParams } from "@solidjs/router"
-import { useSpring } from "@opencode-ai/ui/motion-spring"
+import { useSpring } from "@orbit.build/ui/motion-spring"
import { PromptInput } from "@/components/prompt-input"
import { useLanguage } from "@/context/language"
import { usePrompt } from "@/context/prompt"
diff --git a/Agent-backend/packages/app/src/pages/session/composer/session-composer-state.test.ts b/Agent-backend/packages/app/src/pages/session/composer/session-composer-state.test.ts
index 934d3152a..8cab1d73a 100644
--- a/Agent-backend/packages/app/src/pages/session/composer/session-composer-state.test.ts
+++ b/Agent-backend/packages/app/src/pages/session/composer/session-composer-state.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test"
-import type { PermissionRequest, QuestionRequest, Session } from "@opencode-ai/sdk/v2/client"
+import type { PermissionRequest, QuestionRequest, Session } from "@orbit.build/sdk/v2/client"
import { sessionPermissionRequest, sessionQuestionRequest } from "./session-request-tree"
const session = (input: { id: string; parentID?: string }) =>
diff --git a/Agent-backend/packages/app/src/pages/session/composer/session-composer-state.ts b/Agent-backend/packages/app/src/pages/session/composer/session-composer-state.ts
index f70bc4bbd..47fbe2605 100644
--- a/Agent-backend/packages/app/src/pages/session/composer/session-composer-state.ts
+++ b/Agent-backend/packages/app/src/pages/session/composer/session-composer-state.ts
@@ -1,8 +1,8 @@
import { createEffect, createMemo, on, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
-import type { PermissionRequest, QuestionRequest, Todo } from "@opencode-ai/sdk/v2"
+import type { PermissionRequest, QuestionRequest, Todo } from "@orbit.build/sdk/v2"
import { useParams } from "@solidjs/router"
-import { showToast } from "@opencode-ai/ui/toast"
+import { showToast } from "@orbit.build/ui/toast"
import { useGlobalSync } from "@/context/global-sync"
import { useLanguage } from "@/context/language"
import { usePermission } from "@/context/permission"
diff --git a/Agent-backend/packages/app/src/pages/session/composer/session-permission-dock.tsx b/Agent-backend/packages/app/src/pages/session/composer/session-permission-dock.tsx
index 06ff4f4aa..f2de74e99 100644
--- a/Agent-backend/packages/app/src/pages/session/composer/session-permission-dock.tsx
+++ b/Agent-backend/packages/app/src/pages/session/composer/session-permission-dock.tsx
@@ -1,8 +1,8 @@
import { For, Show } from "solid-js"
-import type { PermissionRequest } from "@opencode-ai/sdk/v2"
-import { Button } from "@opencode-ai/ui/button"
-import { DockPrompt } from "@opencode-ai/ui/dock-prompt"
-import { Icon } from "@opencode-ai/ui/icon"
+import type { PermissionRequest } from "@orbit.build/sdk/v2"
+import { Button } from "@orbit.build/ui/button"
+import { DockPrompt } from "@orbit.build/ui/dock-prompt"
+import { Icon } from "@orbit.build/ui/icon"
import { useLanguage } from "@/context/language"
export function SessionPermissionDock(props: {
diff --git a/Agent-backend/packages/app/src/pages/session/composer/session-question-dock.tsx b/Agent-backend/packages/app/src/pages/session/composer/session-question-dock.tsx
index b22a92eb0..5a245ff75 100644
--- a/Agent-backend/packages/app/src/pages/session/composer/session-question-dock.tsx
+++ b/Agent-backend/packages/app/src/pages/session/composer/session-question-dock.tsx
@@ -1,10 +1,10 @@
import { For, Show, createMemo, onCleanup, onMount, type Component } from "solid-js"
import { createStore } from "solid-js/store"
-import { Button } from "@opencode-ai/ui/button"
-import { DockPrompt } from "@opencode-ai/ui/dock-prompt"
-import { Icon } from "@opencode-ai/ui/icon"
-import { showToast } from "@opencode-ai/ui/toast"
-import type { QuestionAnswer, QuestionRequest } from "@opencode-ai/sdk/v2"
+import { Button } from "@orbit.build/ui/button"
+import { DockPrompt } from "@orbit.build/ui/dock-prompt"
+import { Icon } from "@orbit.build/ui/icon"
+import { showToast } from "@orbit.build/ui/toast"
+import type { QuestionAnswer, QuestionRequest } from "@orbit.build/sdk/v2"
import { useLanguage } from "@/context/language"
import { useSDK } from "@/context/sdk"
diff --git a/Agent-backend/packages/app/src/pages/session/composer/session-request-tree.ts b/Agent-backend/packages/app/src/pages/session/composer/session-request-tree.ts
index 03872c091..b00856ada 100644
--- a/Agent-backend/packages/app/src/pages/session/composer/session-request-tree.ts
+++ b/Agent-backend/packages/app/src/pages/session/composer/session-request-tree.ts
@@ -1,4 +1,4 @@
-import type { PermissionRequest, QuestionRequest, Session } from "@opencode-ai/sdk/v2/client"
+import type { PermissionRequest, QuestionRequest, Session } from "@orbit.build/sdk/v2/client"
function sessionTreeRequest(
session: Session[],
diff --git a/Agent-backend/packages/app/src/pages/session/composer/session-todo-dock.tsx b/Agent-backend/packages/app/src/pages/session/composer/session-todo-dock.tsx
index da2b8c8da..e7bfb4111 100644
--- a/Agent-backend/packages/app/src/pages/session/composer/session-todo-dock.tsx
+++ b/Agent-backend/packages/app/src/pages/session/composer/session-todo-dock.tsx
@@ -1,11 +1,11 @@
-import type { Todo } from "@opencode-ai/sdk/v2"
-import { AnimatedNumber } from "@opencode-ai/ui/animated-number"
-import { Checkbox } from "@opencode-ai/ui/checkbox"
-import { DockTray } from "@opencode-ai/ui/dock-surface"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { useSpring } from "@opencode-ai/ui/motion-spring"
-import { TextReveal } from "@opencode-ai/ui/text-reveal"
-import { TextStrikethrough } from "@opencode-ai/ui/text-strikethrough"
+import type { Todo } from "@orbit.build/sdk/v2"
+import { AnimatedNumber } from "@orbit.build/ui/animated-number"
+import { Checkbox } from "@orbit.build/ui/checkbox"
+import { DockTray } from "@orbit.build/ui/dock-surface"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { useSpring } from "@orbit.build/ui/motion-spring"
+import { TextReveal } from "@orbit.build/ui/text-reveal"
+import { TextStrikethrough } from "@orbit.build/ui/text-strikethrough"
import { Index, createEffect, createMemo, createSignal, on, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
diff --git a/Agent-backend/packages/app/src/pages/session/file-tabs.tsx b/Agent-backend/packages/app/src/pages/session/file-tabs.tsx
index 77643789d..65c06649c 100644
--- a/Agent-backend/packages/app/src/pages/session/file-tabs.tsx
+++ b/Agent-backend/packages/app/src/pages/session/file-tabs.tsx
@@ -2,16 +2,16 @@ import { createEffect, createMemo, Match, on, onCleanup, Switch } from "solid-js
import { createStore } from "solid-js/store"
import { Dynamic } from "solid-js/web"
import { useParams } from "@solidjs/router"
-import type { FileSearchHandle } from "@opencode-ai/ui/file"
-import { useFileComponent } from "@opencode-ai/ui/context/file"
-import { cloneSelectedLineRange, previewSelectedLines } from "@opencode-ai/ui/pierre/selection-bridge"
-import { createLineCommentController } from "@opencode-ai/ui/line-comment-annotations"
-import { sampledChecksum } from "@opencode-ai/util/encode"
-import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { Tabs } from "@opencode-ai/ui/tabs"
-import { ScrollView } from "@opencode-ai/ui/scroll-view"
-import { showToast } from "@opencode-ai/ui/toast"
+import type { FileSearchHandle } from "@orbit.build/ui/file"
+import { useFileComponent } from "@orbit.build/ui/context/file"
+import { cloneSelectedLineRange, previewSelectedLines } from "@orbit.build/ui/pierre/selection-bridge"
+import { createLineCommentController } from "@orbit.build/ui/line-comment-annotations"
+import { sampledChecksum } from "@orbit.build/util/encode"
+import { DropdownMenu } from "@orbit.build/ui/dropdown-menu"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { Tabs } from "@orbit.build/ui/tabs"
+import { ScrollView } from "@orbit.build/ui/scroll-view"
+import { showToast } from "@orbit.build/ui/toast"
import { useLayout } from "@/context/layout"
import { selectionFromLines, useFile, type FileSelection, type SelectedLineRange } from "@/context/file"
import { useComments } from "@/context/comments"
diff --git a/Agent-backend/packages/app/src/pages/session/message-timeline.tsx b/Agent-backend/packages/app/src/pages/session/message-timeline.tsx
index 6463e7cbb..4cba7b750 100644
--- a/Agent-backend/packages/app/src/pages/session/message-timeline.tsx
+++ b/Agent-backend/packages/app/src/pages/session/message-timeline.tsx
@@ -1,23 +1,23 @@
import { For, createEffect, createMemo, on, onCleanup, Show, Index, type JSX } from "solid-js"
import { createStore, produce } from "solid-js/store"
import { useNavigate, useParams } from "@solidjs/router"
-import { Button } from "@opencode-ai/ui/button"
-import { FileIcon } from "@opencode-ai/ui/file-icon"
-import { Icon } from "@opencode-ai/ui/icon"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
-import { Dialog } from "@opencode-ai/ui/dialog"
-import { InlineInput } from "@opencode-ai/ui/inline-input"
-import { Spinner } from "@opencode-ai/ui/spinner"
-import { SessionTurn } from "@opencode-ai/ui/session-turn"
-import { ScrollView } from "@opencode-ai/ui/scroll-view"
-import type { AssistantMessage, Message as MessageType, Part, TextPart, UserMessage } from "@opencode-ai/sdk/v2"
-import { showToast } from "@opencode-ai/ui/toast"
-import { Binary } from "@opencode-ai/util/binary"
-import { getFilename } from "@opencode-ai/util/path"
+import { Button } from "@orbit.build/ui/button"
+import { FileIcon } from "@orbit.build/ui/file-icon"
+import { Icon } from "@orbit.build/ui/icon"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { DropdownMenu } from "@orbit.build/ui/dropdown-menu"
+import { Dialog } from "@orbit.build/ui/dialog"
+import { InlineInput } from "@orbit.build/ui/inline-input"
+import { Spinner } from "@orbit.build/ui/spinner"
+import { SessionTurn } from "@orbit.build/ui/session-turn"
+import { ScrollView } from "@orbit.build/ui/scroll-view"
+import type { AssistantMessage, Message as MessageType, Part, TextPart, UserMessage } from "@orbit.build/sdk/v2"
+import { showToast } from "@orbit.build/ui/toast"
+import { Binary } from "@orbit.build/util/binary"
+import { getFilename } from "@orbit.build/util/path"
import { shouldMarkBoundaryGesture, normalizeWheelDelta } from "@/pages/session/message-gesture"
import { SessionContextUsage } from "@/components/session-context-usage"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { useLanguage } from "@/context/language"
import { useSettings } from "@/context/settings"
import { useSDK } from "@/context/sdk"
diff --git a/Agent-backend/packages/app/src/pages/session/review-tab.tsx b/Agent-backend/packages/app/src/pages/session/review-tab.tsx
index 142ee7ad9..950086898 100644
--- a/Agent-backend/packages/app/src/pages/session/review-tab.tsx
+++ b/Agent-backend/packages/app/src/pages/session/review-tab.tsx
@@ -1,11 +1,11 @@
import { createEffect, onCleanup, type JSX } from "solid-js"
-import type { FileDiff } from "@opencode-ai/sdk/v2"
-import { SessionReview } from "@opencode-ai/ui/session-review"
+import type { FileDiff } from "@orbit.build/sdk/v2"
+import { SessionReview } from "@orbit.build/ui/session-review"
import type {
SessionReviewCommentActions,
SessionReviewCommentDelete,
SessionReviewCommentUpdate,
-} from "@opencode-ai/ui/session-review"
+} from "@orbit.build/ui/session-review"
import type { SelectedLineRange } from "@/context/file"
import { useSDK } from "@/context/sdk"
import { useLayout } from "@/context/layout"
diff --git a/Agent-backend/packages/app/src/pages/session/session-mobile-tabs.tsx b/Agent-backend/packages/app/src/pages/session/session-mobile-tabs.tsx
index f97199b49..fa9058a41 100644
--- a/Agent-backend/packages/app/src/pages/session/session-mobile-tabs.tsx
+++ b/Agent-backend/packages/app/src/pages/session/session-mobile-tabs.tsx
@@ -1,5 +1,5 @@
import { Show } from "solid-js"
-import { Tabs } from "@opencode-ai/ui/tabs"
+import { Tabs } from "@orbit.build/ui/tabs"
import { useLanguage } from "@/context/language"
export function SessionMobileTabs(props: {
diff --git a/Agent-backend/packages/app/src/pages/session/session-model-helpers.test.ts b/Agent-backend/packages/app/src/pages/session/session-model-helpers.test.ts
index 5f554dcd3..3d15a1903 100644
--- a/Agent-backend/packages/app/src/pages/session/session-model-helpers.test.ts
+++ b/Agent-backend/packages/app/src/pages/session/session-model-helpers.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test"
-import type { UserMessage } from "@opencode-ai/sdk/v2"
+import type { UserMessage } from "@orbit.build/sdk/v2"
import { resetSessionModel, syncSessionModel } from "./session-model-helpers"
const message = (input?: Partial>) =>
diff --git a/Agent-backend/packages/app/src/pages/session/session-model-helpers.ts b/Agent-backend/packages/app/src/pages/session/session-model-helpers.ts
index 7600f16d5..75eca292e 100644
--- a/Agent-backend/packages/app/src/pages/session/session-model-helpers.ts
+++ b/Agent-backend/packages/app/src/pages/session/session-model-helpers.ts
@@ -1,4 +1,4 @@
-import type { UserMessage } from "@opencode-ai/sdk/v2"
+import type { UserMessage } from "@orbit.build/sdk/v2"
import { batch } from "solid-js"
type Local = {
diff --git a/Agent-backend/packages/app/src/pages/session/session-side-panel.tsx b/Agent-backend/packages/app/src/pages/session/session-side-panel.tsx
index 590f5b6d9..5b285cc35 100644
--- a/Agent-backend/packages/app/src/pages/session/session-side-panel.tsx
+++ b/Agent-backend/packages/app/src/pages/session/session-side-panel.tsx
@@ -2,15 +2,15 @@ import { For, Match, Show, Switch, createEffect, createMemo, onCleanup, type JSX
import { createStore } from "solid-js/store"
import { createMediaQuery } from "@solid-primitives/media"
import { useParams } from "@solidjs/router"
-import { Tabs } from "@opencode-ai/ui/tabs"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { TooltipKeybind } from "@opencode-ai/ui/tooltip"
-import { ResizeHandle } from "@opencode-ai/ui/resize-handle"
-import { Mark } from "@opencode-ai/ui/logo"
+import { Tabs } from "@orbit.build/ui/tabs"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { TooltipKeybind } from "@orbit.build/ui/tooltip"
+import { ResizeHandle } from "@orbit.build/ui/resize-handle"
+import { Mark } from "@orbit.build/ui/logo"
import { DragDropProvider, DragDropSensors, DragOverlay, SortableProvider, closestCenter } from "@thisbeyond/solid-dnd"
import type { DragEvent } from "@thisbeyond/solid-dnd"
import { ConstrainDragYAxis, getDraggableId } from "@/utils/solid-dnd"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import FileTree from "@/components/file-tree"
import { SessionContextUsage } from "@/components/session-context-usage"
diff --git a/Agent-backend/packages/app/src/pages/session/terminal-panel.tsx b/Agent-backend/packages/app/src/pages/session/terminal-panel.tsx
index 8fd652e90..9e03d54aa 100644
--- a/Agent-backend/packages/app/src/pages/session/terminal-panel.tsx
+++ b/Agent-backend/packages/app/src/pages/session/terminal-panel.tsx
@@ -2,10 +2,10 @@ import { For, Show, createEffect, createMemo, on } from "solid-js"
import { createStore } from "solid-js/store"
import { createMediaQuery } from "@solid-primitives/media"
import { useParams } from "@solidjs/router"
-import { Tabs } from "@opencode-ai/ui/tabs"
-import { ResizeHandle } from "@opencode-ai/ui/resize-handle"
-import { IconButton } from "@opencode-ai/ui/icon-button"
-import { TooltipKeybind } from "@opencode-ai/ui/tooltip"
+import { Tabs } from "@orbit.build/ui/tabs"
+import { ResizeHandle } from "@orbit.build/ui/resize-handle"
+import { IconButton } from "@orbit.build/ui/icon-button"
+import { TooltipKeybind } from "@orbit.build/ui/tooltip"
import { DragDropProvider, DragDropSensors, DragOverlay, SortableProvider, closestCenter } from "@thisbeyond/solid-dnd"
import type { DragEvent } from "@thisbeyond/solid-dnd"
import { ConstrainDragYAxis, getDraggableId } from "@/utils/solid-dnd"
diff --git a/Agent-backend/packages/app/src/pages/session/use-session-commands.tsx b/Agent-backend/packages/app/src/pages/session/use-session-commands.tsx
index b8ddeda82..4639ffd7f 100644
--- a/Agent-backend/packages/app/src/pages/session/use-session-commands.tsx
+++ b/Agent-backend/packages/app/src/pages/session/use-session-commands.tsx
@@ -1,7 +1,7 @@
import { createMemo } from "solid-js"
import { useNavigate, useParams } from "@solidjs/router"
import { useCommand, type CommandOption } from "@/context/command"
-import { useDialog } from "@opencode-ai/ui/context/dialog"
+import { useDialog } from "@orbit.build/ui/context/dialog"
import { useFile, selectionFromLines, type FileSelection, type SelectedLineRange } from "@/context/file"
import { useLanguage } from "@/context/language"
import { useLayout } from "@/context/layout"
@@ -15,10 +15,10 @@ import { DialogSelectFile } from "@/components/dialog-select-file"
import { DialogSelectModel } from "@/components/dialog-select-model"
import { DialogSelectMcp } from "@/components/dialog-select-mcp"
import { DialogFork } from "@/components/dialog-fork"
-import { showToast } from "@opencode-ai/ui/toast"
-import { findLast } from "@opencode-ai/util/array"
+import { showToast } from "@orbit.build/ui/toast"
+import { findLast } from "@orbit.build/util/array"
import { extractPromptFromParts } from "@/utils/prompt"
-import { UserMessage } from "@opencode-ai/sdk/v2"
+import { UserMessage } from "@orbit.build/sdk/v2"
import { canAddSelectionContext } from "@/pages/session/session-command-helpers"
export type SessionCommandContext = {
diff --git a/Agent-backend/packages/app/src/pages/session/use-session-hash-scroll.ts b/Agent-backend/packages/app/src/pages/session/use-session-hash-scroll.ts
index 1ea6a302b..6cd6fffef 100644
--- a/Agent-backend/packages/app/src/pages/session/use-session-hash-scroll.ts
+++ b/Agent-backend/packages/app/src/pages/session/use-session-hash-scroll.ts
@@ -1,4 +1,4 @@
-import type { UserMessage } from "@opencode-ai/sdk/v2"
+import type { UserMessage } from "@orbit.build/sdk/v2"
import { useLocation, useNavigate } from "@solidjs/router"
import { createEffect, createMemo, onCleanup, onMount } from "solid-js"
import { messageIdFromHash } from "./message-id-from-hash"
diff --git a/Agent-backend/packages/app/src/utils/CLAUDE.md b/Agent-backend/packages/app/src/utils/CLAUDE.md
index 9191c27a0..ae2b16870 100644
--- a/Agent-backend/packages/app/src/utils/CLAUDE.md
+++ b/Agent-backend/packages/app/src/utils/CLAUDE.md
@@ -132,8 +132,8 @@ Shared utility functions for the OpenCode web app. Framework-agnostic (mostly pu
- **SolidJS:** `solid-js` (only in `persist.ts` and `solid-dnd.tsx`)
- **Internal:** `@/context/platform`, `@/context/server` (for server utils)
-- **UI library:** `@opencode-ai/ui/audio/*` (46 AAC sound files), `@opencode-ai/ui/theme`
-- **Utilities:** `@opencode-ai/util/encode` (`checksum`), `@solid-primitives/storage` (`makePersisted`)
+- **UI library:** `@orbit.build/ui/audio/*` (46 AAC sound files), `@orbit.build/ui/theme`
+- **Utilities:** `@orbit.build/util/encode` (`checksum`), `@solid-primitives/storage` (`makePersisted`)
- **External:** `@thisbeyond/solid-dnd` (drag helpers)
## Development Guide
@@ -152,7 +152,7 @@ For Orbit, these utilities are most directly reusable:
## Notes
-- **`sound.ts` imports 46 AAC files** — all from `@opencode-ai/ui/audio/`. These are Vite asset imports (resolved to URLs at build time). Categories: alert (10), bip-bop (10), staplebops (7), nope (12), yup (6). Each has a string ID for settings persistence.
+- **`sound.ts` imports 46 AAC files** — all from `@orbit.build/ui/audio/`. These are Vite asset imports (resolved to URLs at build time). Categories: alert (10), bip-bop (10), staplebops (7), nope (12), yup (6). Each has a string ID for settings persistence.
- **`persist.ts` LRU cache** is localStorage-level, not application-level. It caches raw `getItem()` values (max 500 entries, 8MB) to avoid repeated localStorage reads. Separate from `scoped-cache.ts` which is a general-purpose data cache.
- **`index.ts` is minimal** — only re-exports `dom.ts`. Most utils are imported directly by path.
- **9 test files** — most utilities have accompanying tests. Tests use HappyDOM (via `happydom.ts` preload).
diff --git a/Agent-backend/packages/app/src/utils/base64.ts b/Agent-backend/packages/app/src/utils/base64.ts
index c1f9d88c6..a61ff044e 100644
--- a/Agent-backend/packages/app/src/utils/base64.ts
+++ b/Agent-backend/packages/app/src/utils/base64.ts
@@ -1,4 +1,4 @@
-import { base64Decode } from "@opencode-ai/util/encode"
+import { base64Decode } from "@orbit.build/util/encode"
export function decode64(value: string | undefined) {
if (value === undefined) return
diff --git a/Agent-backend/packages/app/src/utils/persist.ts b/Agent-backend/packages/app/src/utils/persist.ts
index bee2f3e7d..9c3773a7c 100644
--- a/Agent-backend/packages/app/src/utils/persist.ts
+++ b/Agent-backend/packages/app/src/utils/persist.ts
@@ -1,6 +1,6 @@
import { Platform, usePlatform } from "@/context/platform"
import { makePersisted, type AsyncStorage, type SyncStorage } from "@solid-primitives/storage"
-import { checksum } from "@opencode-ai/util/encode"
+import { checksum } from "@orbit.build/util/encode"
import { createResource, type Accessor } from "solid-js"
import type { SetStoreFunction, Store } from "solid-js/store"
diff --git a/Agent-backend/packages/app/src/utils/prompt.ts b/Agent-backend/packages/app/src/utils/prompt.ts
index 35aec0071..97a1941d0 100644
--- a/Agent-backend/packages/app/src/utils/prompt.ts
+++ b/Agent-backend/packages/app/src/utils/prompt.ts
@@ -1,4 +1,4 @@
-import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@opencode-ai/sdk/v2"
+import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@orbit.build/sdk/v2"
import type { AgentPart, FileAttachmentPart, ImageAttachmentPart, Prompt } from "@/context/prompt"
type Inline =
diff --git a/Agent-backend/packages/app/src/utils/server.ts b/Agent-backend/packages/app/src/utils/server.ts
index 5b44491c2..f9ba80e40 100644
--- a/Agent-backend/packages/app/src/utils/server.ts
+++ b/Agent-backend/packages/app/src/utils/server.ts
@@ -1,4 +1,4 @@
-import { createOrbitClient } from "@opencode-ai/sdk/v2/client"
+import { createOrbitClient } from "@orbit.build/sdk/v2/client"
import type { ServerConnection } from "@/context/server"
export function createSdkForServer({
diff --git a/Agent-backend/packages/app/src/utils/sound.ts b/Agent-backend/packages/app/src/utils/sound.ts
index 6dea812ec..bb0f29ee4 100644
--- a/Agent-backend/packages/app/src/utils/sound.ts
+++ b/Agent-backend/packages/app/src/utils/sound.ts
@@ -1,48 +1,48 @@
-import alert01 from "@opencode-ai/ui/audio/alert-01.aac"
-import alert02 from "@opencode-ai/ui/audio/alert-02.aac"
-import alert03 from "@opencode-ai/ui/audio/alert-03.aac"
-import alert04 from "@opencode-ai/ui/audio/alert-04.aac"
-import alert05 from "@opencode-ai/ui/audio/alert-05.aac"
-import alert06 from "@opencode-ai/ui/audio/alert-06.aac"
-import alert07 from "@opencode-ai/ui/audio/alert-07.aac"
-import alert08 from "@opencode-ai/ui/audio/alert-08.aac"
-import alert09 from "@opencode-ai/ui/audio/alert-09.aac"
-import alert10 from "@opencode-ai/ui/audio/alert-10.aac"
-import bipbop01 from "@opencode-ai/ui/audio/bip-bop-01.aac"
-import bipbop02 from "@opencode-ai/ui/audio/bip-bop-02.aac"
-import bipbop03 from "@opencode-ai/ui/audio/bip-bop-03.aac"
-import bipbop04 from "@opencode-ai/ui/audio/bip-bop-04.aac"
-import bipbop05 from "@opencode-ai/ui/audio/bip-bop-05.aac"
-import bipbop06 from "@opencode-ai/ui/audio/bip-bop-06.aac"
-import bipbop07 from "@opencode-ai/ui/audio/bip-bop-07.aac"
-import bipbop08 from "@opencode-ai/ui/audio/bip-bop-08.aac"
-import bipbop09 from "@opencode-ai/ui/audio/bip-bop-09.aac"
-import bipbop10 from "@opencode-ai/ui/audio/bip-bop-10.aac"
-import nope01 from "@opencode-ai/ui/audio/nope-01.aac"
-import nope02 from "@opencode-ai/ui/audio/nope-02.aac"
-import nope03 from "@opencode-ai/ui/audio/nope-03.aac"
-import nope04 from "@opencode-ai/ui/audio/nope-04.aac"
-import nope05 from "@opencode-ai/ui/audio/nope-05.aac"
-import nope06 from "@opencode-ai/ui/audio/nope-06.aac"
-import nope07 from "@opencode-ai/ui/audio/nope-07.aac"
-import nope08 from "@opencode-ai/ui/audio/nope-08.aac"
-import nope09 from "@opencode-ai/ui/audio/nope-09.aac"
-import nope10 from "@opencode-ai/ui/audio/nope-10.aac"
-import nope11 from "@opencode-ai/ui/audio/nope-11.aac"
-import nope12 from "@opencode-ai/ui/audio/nope-12.aac"
-import staplebops01 from "@opencode-ai/ui/audio/staplebops-01.aac"
-import staplebops02 from "@opencode-ai/ui/audio/staplebops-02.aac"
-import staplebops03 from "@opencode-ai/ui/audio/staplebops-03.aac"
-import staplebops04 from "@opencode-ai/ui/audio/staplebops-04.aac"
-import staplebops05 from "@opencode-ai/ui/audio/staplebops-05.aac"
-import staplebops06 from "@opencode-ai/ui/audio/staplebops-06.aac"
-import staplebops07 from "@opencode-ai/ui/audio/staplebops-07.aac"
-import yup01 from "@opencode-ai/ui/audio/yup-01.aac"
-import yup02 from "@opencode-ai/ui/audio/yup-02.aac"
-import yup03 from "@opencode-ai/ui/audio/yup-03.aac"
-import yup04 from "@opencode-ai/ui/audio/yup-04.aac"
-import yup05 from "@opencode-ai/ui/audio/yup-05.aac"
-import yup06 from "@opencode-ai/ui/audio/yup-06.aac"
+import alert01 from "@orbit.build/ui/audio/alert-01.aac"
+import alert02 from "@orbit.build/ui/audio/alert-02.aac"
+import alert03 from "@orbit.build/ui/audio/alert-03.aac"
+import alert04 from "@orbit.build/ui/audio/alert-04.aac"
+import alert05 from "@orbit.build/ui/audio/alert-05.aac"
+import alert06 from "@orbit.build/ui/audio/alert-06.aac"
+import alert07 from "@orbit.build/ui/audio/alert-07.aac"
+import alert08 from "@orbit.build/ui/audio/alert-08.aac"
+import alert09 from "@orbit.build/ui/audio/alert-09.aac"
+import alert10 from "@orbit.build/ui/audio/alert-10.aac"
+import bipbop01 from "@orbit.build/ui/audio/bip-bop-01.aac"
+import bipbop02 from "@orbit.build/ui/audio/bip-bop-02.aac"
+import bipbop03 from "@orbit.build/ui/audio/bip-bop-03.aac"
+import bipbop04 from "@orbit.build/ui/audio/bip-bop-04.aac"
+import bipbop05 from "@orbit.build/ui/audio/bip-bop-05.aac"
+import bipbop06 from "@orbit.build/ui/audio/bip-bop-06.aac"
+import bipbop07 from "@orbit.build/ui/audio/bip-bop-07.aac"
+import bipbop08 from "@orbit.build/ui/audio/bip-bop-08.aac"
+import bipbop09 from "@orbit.build/ui/audio/bip-bop-09.aac"
+import bipbop10 from "@orbit.build/ui/audio/bip-bop-10.aac"
+import nope01 from "@orbit.build/ui/audio/nope-01.aac"
+import nope02 from "@orbit.build/ui/audio/nope-02.aac"
+import nope03 from "@orbit.build/ui/audio/nope-03.aac"
+import nope04 from "@orbit.build/ui/audio/nope-04.aac"
+import nope05 from "@orbit.build/ui/audio/nope-05.aac"
+import nope06 from "@orbit.build/ui/audio/nope-06.aac"
+import nope07 from "@orbit.build/ui/audio/nope-07.aac"
+import nope08 from "@orbit.build/ui/audio/nope-08.aac"
+import nope09 from "@orbit.build/ui/audio/nope-09.aac"
+import nope10 from "@orbit.build/ui/audio/nope-10.aac"
+import nope11 from "@orbit.build/ui/audio/nope-11.aac"
+import nope12 from "@orbit.build/ui/audio/nope-12.aac"
+import staplebops01 from "@orbit.build/ui/audio/staplebops-01.aac"
+import staplebops02 from "@orbit.build/ui/audio/staplebops-02.aac"
+import staplebops03 from "@orbit.build/ui/audio/staplebops-03.aac"
+import staplebops04 from "@orbit.build/ui/audio/staplebops-04.aac"
+import staplebops05 from "@orbit.build/ui/audio/staplebops-05.aac"
+import staplebops06 from "@orbit.build/ui/audio/staplebops-06.aac"
+import staplebops07 from "@orbit.build/ui/audio/staplebops-07.aac"
+import yup01 from "@orbit.build/ui/audio/yup-01.aac"
+import yup02 from "@orbit.build/ui/audio/yup-02.aac"
+import yup03 from "@orbit.build/ui/audio/yup-03.aac"
+import yup04 from "@orbit.build/ui/audio/yup-04.aac"
+import yup05 from "@orbit.build/ui/audio/yup-05.aac"
+import yup06 from "@orbit.build/ui/audio/yup-06.aac"
export const SOUND_OPTIONS = [
{ id: "alert-01", label: "sound.option.alert01", src: alert01 },
diff --git a/Agent-backend/packages/desktop/CLAUDE.md b/Agent-backend/packages/desktop/CLAUDE.md
index b80025b30..54a4b95d3 100644
--- a/Agent-backend/packages/desktop/CLAUDE.md
+++ b/Agent-backend/packages/desktop/CLAUDE.md
@@ -80,7 +80,7 @@ Tauri v2 desktop application wrapping the OpenCode web UI (`packages/app`). Bund
## Dependencies
-- **Internal:** `@opencode-ai/app` (web UI), `@opencode-ai/ui` (components)
+- **Internal:** `@orbit.build/app` (web UI), `@orbit.build/ui` (components)
- **Tauri:** `@tauri-apps/api` + 12 Tauri plugins
- **Frontend:** `solid-js`, `@solidjs/meta`
diff --git a/Agent-backend/packages/desktop/package.json b/Agent-backend/packages/desktop/package.json
index b028c840b..d3bef4832 100644
--- a/Agent-backend/packages/desktop/package.json
+++ b/Agent-backend/packages/desktop/package.json
@@ -1,5 +1,5 @@
{
- "name": "@opencode-ai/desktop",
+ "name": "@orbit.build/desktop",
"private": true,
"version": "1.2.24",
"type": "module",
@@ -13,8 +13,8 @@
"tauri": "tauri"
},
"dependencies": {
- "@opencode-ai/app": "workspace:*",
- "@opencode-ai/ui": "workspace:*",
+ "@orbit.build/app": "workspace:*",
+ "@orbit.build/ui": "workspace:*",
"@solid-primitives/i18n": "2.2.1",
"@solid-primitives/storage": "catalog:",
"@tauri-apps/api": "^2",
diff --git a/Agent-backend/packages/desktop/scripts/prepare.ts b/Agent-backend/packages/desktop/scripts/prepare.ts
index d802f2d89..643eb4098 100755
--- a/Agent-backend/packages/desktop/scripts/prepare.ts
+++ b/Agent-backend/packages/desktop/scripts/prepare.ts
@@ -1,7 +1,7 @@
#!/usr/bin/env bun
import { $ } from "bun"
-import { Script } from "@opencode-ai/script"
+import { Script } from "@orbit.build/script"
import { copyBinaryToSidecarFolder, getCurrentSidecar, windowsify } from "./utils"
const pkg = await Bun.file("./package.json").json()
diff --git a/Agent-backend/packages/desktop/src/index.tsx b/Agent-backend/packages/desktop/src/index.tsx
index 9afabe918..f450f09b0 100644
--- a/Agent-backend/packages/desktop/src/index.tsx
+++ b/Agent-backend/packages/desktop/src/index.tsx
@@ -8,8 +8,8 @@ import {
PlatformProvider,
ServerConnection,
useCommand,
-} from "@opencode-ai/app"
-import { Splash } from "@opencode-ai/ui/logo"
+} from "@orbit.build/app"
+import { Splash } from "@orbit.build/ui/logo"
import type { AsyncStorage } from "@solid-primitives/storage"
import { getCurrentWindow } from "@tauri-apps/api/window"
import { readImage } from "@tauri-apps/plugin-clipboard-manager"
diff --git a/Agent-backend/packages/desktop/src/loading.tsx b/Agent-backend/packages/desktop/src/loading.tsx
index a02f1a95e..fa3ed030a 100644
--- a/Agent-backend/packages/desktop/src/loading.tsx
+++ b/Agent-backend/packages/desktop/src/loading.tsx
@@ -1,9 +1,9 @@
import { render } from "solid-js/web"
import { MetaProvider } from "@solidjs/meta"
-import "@opencode-ai/app/index.css"
-import { Font } from "@opencode-ai/ui/font"
-import { Splash } from "@opencode-ai/ui/logo"
-import { Progress } from "@opencode-ai/ui/progress"
+import "@orbit.build/app/index.css"
+import { Font } from "@orbit.build/ui/font"
+import { Splash } from "@orbit.build/ui/logo"
+import { Progress } from "@orbit.build/ui/progress"
import "./styles.css"
import { createEffect, createMemo, createSignal, onCleanup, onMount } from "solid-js"
import { commands, events, InitStep } from "./bindings"
diff --git a/Agent-backend/packages/desktop/vite.config.ts b/Agent-backend/packages/desktop/vite.config.ts
index 62c3a099a..2e7ed224e 100644
--- a/Agent-backend/packages/desktop/vite.config.ts
+++ b/Agent-backend/packages/desktop/vite.config.ts
@@ -1,5 +1,5 @@
import { defineConfig } from "vite"
-import appPlugin from "@opencode-ai/app/vite"
+import appPlugin from "@orbit.build/app/vite"
const host = process.env.TAURI_DEV_HOST
diff --git a/Agent-backend/packages/opencode/migration/20260228203230_blue_harpoon/migration.sql b/Agent-backend/packages/opencode/migration/20260228203230_blue_harpoon/migration.sql
new file mode 100644
index 000000000..85be58c88
--- /dev/null
+++ b/Agent-backend/packages/opencode/migration/20260228203230_blue_harpoon/migration.sql
@@ -0,0 +1,17 @@
+CREATE TABLE `account` (
+ `id` text PRIMARY KEY,
+ `email` text NOT NULL,
+ `url` text NOT NULL,
+ `access_token` text NOT NULL,
+ `refresh_token` text NOT NULL,
+ `token_expiry` integer,
+ `selected_org_id` text,
+ `time_created` integer NOT NULL,
+ `time_updated` integer NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE `account_state` (
+ `id` integer PRIMARY KEY NOT NULL,
+ `active_account_id` text,
+ FOREIGN KEY (`active_account_id`) REFERENCES `account`(`id`) ON UPDATE no action ON DELETE set null
+);
diff --git a/Agent-backend/packages/opencode/migration/20260228203230_blue_harpoon/snapshot.json b/Agent-backend/packages/opencode/migration/20260228203230_blue_harpoon/snapshot.json
new file mode 100644
index 000000000..80d9451ba
--- /dev/null
+++ b/Agent-backend/packages/opencode/migration/20260228203230_blue_harpoon/snapshot.json
@@ -0,0 +1,1102 @@
+{
+ "version": "7",
+ "dialect": "sqlite",
+ "id": "325559b7-104f-4d2a-a02c-934cfad7cfcc",
+ "prevIds": ["1f1dbf2d-bf66-4b25-8af4-4ba7633b7e40"],
+ "ddl": [
+ {
+ "name": "account",
+ "entityType": "tables"
+ },
+ {
+ "name": "account_state",
+ "entityType": "tables"
+ },
+ {
+ "name": "control_account",
+ "entityType": "tables"
+ },
+ {
+ "name": "workspace",
+ "entityType": "tables"
+ },
+ {
+ "name": "project",
+ "entityType": "tables"
+ },
+ {
+ "name": "message",
+ "entityType": "tables"
+ },
+ {
+ "name": "part",
+ "entityType": "tables"
+ },
+ {
+ "name": "permission",
+ "entityType": "tables"
+ },
+ {
+ "name": "session",
+ "entityType": "tables"
+ },
+ {
+ "name": "todo",
+ "entityType": "tables"
+ },
+ {
+ "name": "session_share",
+ "entityType": "tables"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "email",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "access_token",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "refresh_token",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "token_expiry",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "selected_org_id",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "account_state"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "active_account_id",
+ "entityType": "columns",
+ "table": "account_state"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "email",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "access_token",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "refresh_token",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "token_expiry",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "active",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "branch",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "config",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "worktree",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "vcs",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "name",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "icon_url",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "icon_color",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_initialized",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "sandboxes",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "commands",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "message_id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "parent_id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "slug",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "directory",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "title",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "version",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "share_url",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_additions",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_deletions",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_files",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_diffs",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "revert",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "permission",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_compacting",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_archived",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "content",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "status",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "priority",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "position",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "secret",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_workspace_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "workspace"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_message_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "message"
+ },
+ {
+ "columns": ["message_id"],
+ "tableTo": "message",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_part_message_id_message_id_fk",
+ "entityType": "fks",
+ "table": "part"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_permission_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "permission"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_session_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "session"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_todo_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "todo"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_session_share_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "session_share"
+ },
+ {
+ "columns": ["active_account_id"],
+ "tableTo": "account",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "SET NULL",
+ "nameExplicit": false,
+ "name": "fk_account_state_active_account_id_account_id_fk",
+ "entityType": "fks",
+ "table": "account_state"
+ },
+ {
+ "columns": ["email", "url"],
+ "nameExplicit": false,
+ "name": "control_account_pk",
+ "entityType": "pks",
+ "table": "control_account"
+ },
+ {
+ "columns": ["session_id", "position"],
+ "nameExplicit": false,
+ "name": "todo_pk",
+ "entityType": "pks",
+ "table": "todo"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "account_pk",
+ "table": "account",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "account_state_pk",
+ "table": "account_state",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "workspace_pk",
+ "table": "workspace",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "project_pk",
+ "table": "project",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "message_pk",
+ "table": "message",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "part_pk",
+ "table": "part",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["project_id"],
+ "nameExplicit": false,
+ "name": "permission_pk",
+ "table": "permission",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "session_pk",
+ "table": "session",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["session_id"],
+ "nameExplicit": false,
+ "name": "session_share_pk",
+ "table": "session_share",
+ "entityType": "pks"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "message_session_idx",
+ "entityType": "indexes",
+ "table": "message"
+ },
+ {
+ "columns": [
+ {
+ "value": "message_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "part_message_idx",
+ "entityType": "indexes",
+ "table": "part"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "part_session_idx",
+ "entityType": "indexes",
+ "table": "part"
+ },
+ {
+ "columns": [
+ {
+ "value": "project_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "session_project_idx",
+ "entityType": "indexes",
+ "table": "session"
+ },
+ {
+ "columns": [
+ {
+ "value": "parent_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "session_parent_idx",
+ "entityType": "indexes",
+ "table": "session"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "todo_session_idx",
+ "entityType": "indexes",
+ "table": "todo"
+ }
+ ],
+ "renames": []
+}
diff --git a/Agent-backend/packages/opencode/migration/20260309230000_move_org_to_state/migration.sql b/Agent-backend/packages/opencode/migration/20260309230000_move_org_to_state/migration.sql
new file mode 100644
index 000000000..4d1c7bccd
--- /dev/null
+++ b/Agent-backend/packages/opencode/migration/20260309230000_move_org_to_state/migration.sql
@@ -0,0 +1,3 @@
+ALTER TABLE `account_state` ADD `active_org_id` text;--> statement-breakpoint
+UPDATE `account_state` SET `active_org_id` = (SELECT `selected_org_id` FROM `account` WHERE `account`.`id` = `account_state`.`active_account_id`);--> statement-breakpoint
+ALTER TABLE `account` DROP COLUMN `selected_org_id`;
diff --git a/Agent-backend/packages/opencode/migration/20260309230000_move_org_to_state/snapshot.json b/Agent-backend/packages/opencode/migration/20260309230000_move_org_to_state/snapshot.json
new file mode 100644
index 000000000..488ecefff
--- /dev/null
+++ b/Agent-backend/packages/opencode/migration/20260309230000_move_org_to_state/snapshot.json
@@ -0,0 +1,1156 @@
+{
+ "version": "7",
+ "dialect": "sqlite",
+ "id": "fb311f30-9948-4131-b15c-7d308478a878",
+ "prevIds": ["325559b7-104f-4d2a-a02c-934cfad7cfcc", "4ec9de62-88a7-4bec-91cc-0a759e84db21"],
+ "ddl": [
+ {
+ "name": "account_state",
+ "entityType": "tables"
+ },
+ {
+ "name": "account",
+ "entityType": "tables"
+ },
+ {
+ "name": "control_account",
+ "entityType": "tables"
+ },
+ {
+ "name": "workspace",
+ "entityType": "tables"
+ },
+ {
+ "name": "project",
+ "entityType": "tables"
+ },
+ {
+ "name": "message",
+ "entityType": "tables"
+ },
+ {
+ "name": "part",
+ "entityType": "tables"
+ },
+ {
+ "name": "permission",
+ "entityType": "tables"
+ },
+ {
+ "name": "session",
+ "entityType": "tables"
+ },
+ {
+ "name": "todo",
+ "entityType": "tables"
+ },
+ {
+ "name": "session_share",
+ "entityType": "tables"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "account_state"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "active_account_id",
+ "entityType": "columns",
+ "table": "account_state"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "active_org_id",
+ "entityType": "columns",
+ "table": "account_state"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "email",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "access_token",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "refresh_token",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "token_expiry",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "email",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "access_token",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "refresh_token",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "token_expiry",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "active",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "type",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "branch",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "name",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "directory",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "extra",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "worktree",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "vcs",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "name",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "icon_url",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "icon_color",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_initialized",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "sandboxes",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "commands",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "message_id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "workspace_id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "parent_id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "slug",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "directory",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "title",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "version",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "share_url",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_additions",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_deletions",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_files",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_diffs",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "revert",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "permission",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_compacting",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_archived",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "content",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "status",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "priority",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "position",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "secret",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "columns": ["active_account_id"],
+ "tableTo": "account",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "SET NULL",
+ "nameExplicit": false,
+ "name": "fk_account_state_active_account_id_account_id_fk",
+ "entityType": "fks",
+ "table": "account_state"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_workspace_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "workspace"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_message_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "message"
+ },
+ {
+ "columns": ["message_id"],
+ "tableTo": "message",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_part_message_id_message_id_fk",
+ "entityType": "fks",
+ "table": "part"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_permission_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "permission"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_session_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "session"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_todo_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "todo"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_session_share_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "session_share"
+ },
+ {
+ "columns": ["email", "url"],
+ "nameExplicit": false,
+ "name": "control_account_pk",
+ "entityType": "pks",
+ "table": "control_account"
+ },
+ {
+ "columns": ["session_id", "position"],
+ "nameExplicit": false,
+ "name": "todo_pk",
+ "entityType": "pks",
+ "table": "todo"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "account_state_pk",
+ "table": "account_state",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "account_pk",
+ "table": "account",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "workspace_pk",
+ "table": "workspace",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "project_pk",
+ "table": "project",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "message_pk",
+ "table": "message",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "part_pk",
+ "table": "part",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["project_id"],
+ "nameExplicit": false,
+ "name": "permission_pk",
+ "table": "permission",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "session_pk",
+ "table": "session",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["session_id"],
+ "nameExplicit": false,
+ "name": "session_share_pk",
+ "table": "session_share",
+ "entityType": "pks"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "message_session_idx",
+ "entityType": "indexes",
+ "table": "message"
+ },
+ {
+ "columns": [
+ {
+ "value": "message_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "part_message_idx",
+ "entityType": "indexes",
+ "table": "part"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "part_session_idx",
+ "entityType": "indexes",
+ "table": "part"
+ },
+ {
+ "columns": [
+ {
+ "value": "project_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "session_project_idx",
+ "entityType": "indexes",
+ "table": "session"
+ },
+ {
+ "columns": [
+ {
+ "value": "workspace_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "session_workspace_idx",
+ "entityType": "indexes",
+ "table": "session"
+ },
+ {
+ "columns": [
+ {
+ "value": "parent_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "session_parent_idx",
+ "entityType": "indexes",
+ "table": "session"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "todo_session_idx",
+ "entityType": "indexes",
+ "table": "todo"
+ }
+ ],
+ "renames": []
+}
diff --git a/Agent-backend/packages/opencode/migration/20260312043431_session_message_cursor/migration.sql b/Agent-backend/packages/opencode/migration/20260312043431_session_message_cursor/migration.sql
new file mode 100644
index 000000000..e2bd08137
--- /dev/null
+++ b/Agent-backend/packages/opencode/migration/20260312043431_session_message_cursor/migration.sql
@@ -0,0 +1,4 @@
+DROP INDEX IF EXISTS `message_session_idx`;--> statement-breakpoint
+DROP INDEX IF EXISTS `part_message_idx`;--> statement-breakpoint
+CREATE INDEX `message_session_time_created_id_idx` ON `message` (`session_id`,`time_created`,`id`);--> statement-breakpoint
+CREATE INDEX `part_message_id_id_idx` ON `part` (`message_id`,`id`);
\ No newline at end of file
diff --git a/Agent-backend/packages/opencode/migration/20260312043431_session_message_cursor/snapshot.json b/Agent-backend/packages/opencode/migration/20260312043431_session_message_cursor/snapshot.json
new file mode 100644
index 000000000..48958804a
--- /dev/null
+++ b/Agent-backend/packages/opencode/migration/20260312043431_session_message_cursor/snapshot.json
@@ -0,0 +1,1168 @@
+{
+ "version": "7",
+ "dialect": "sqlite",
+ "id": "37e1554d-af4c-43f2-aa7c-307fb49a315e",
+ "prevIds": ["fb311f30-9948-4131-b15c-7d308478a878"],
+ "ddl": [
+ {
+ "name": "account_state",
+ "entityType": "tables"
+ },
+ {
+ "name": "account",
+ "entityType": "tables"
+ },
+ {
+ "name": "control_account",
+ "entityType": "tables"
+ },
+ {
+ "name": "workspace",
+ "entityType": "tables"
+ },
+ {
+ "name": "project",
+ "entityType": "tables"
+ },
+ {
+ "name": "message",
+ "entityType": "tables"
+ },
+ {
+ "name": "part",
+ "entityType": "tables"
+ },
+ {
+ "name": "permission",
+ "entityType": "tables"
+ },
+ {
+ "name": "session",
+ "entityType": "tables"
+ },
+ {
+ "name": "todo",
+ "entityType": "tables"
+ },
+ {
+ "name": "session_share",
+ "entityType": "tables"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "account_state"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "active_account_id",
+ "entityType": "columns",
+ "table": "account_state"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "active_org_id",
+ "entityType": "columns",
+ "table": "account_state"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "email",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "access_token",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "refresh_token",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "token_expiry",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "email",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "access_token",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "refresh_token",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "token_expiry",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "active",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "control_account"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "type",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "branch",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "name",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "directory",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "extra",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "workspace"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "worktree",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "vcs",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "name",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "icon_url",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "icon_color",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_initialized",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "sandboxes",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "commands",
+ "entityType": "columns",
+ "table": "project"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "message"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "message_id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "part"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "data",
+ "entityType": "columns",
+ "table": "permission"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "project_id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "workspace_id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "parent_id",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "slug",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "directory",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "title",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "version",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "share_url",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_additions",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_deletions",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_files",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "summary_diffs",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "revert",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "permission",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_compacting",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "integer",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_archived",
+ "entityType": "columns",
+ "table": "session"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "content",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "status",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "priority",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "position",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "todo"
+ },
+ {
+ "type": "text",
+ "notNull": false,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "session_id",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "id",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "secret",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "text",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "url",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_created",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "type": "integer",
+ "notNull": true,
+ "autoincrement": false,
+ "default": null,
+ "generated": null,
+ "name": "time_updated",
+ "entityType": "columns",
+ "table": "session_share"
+ },
+ {
+ "columns": ["active_account_id"],
+ "tableTo": "account",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "SET NULL",
+ "nameExplicit": false,
+ "name": "fk_account_state_active_account_id_account_id_fk",
+ "entityType": "fks",
+ "table": "account_state"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_workspace_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "workspace"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_message_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "message"
+ },
+ {
+ "columns": ["message_id"],
+ "tableTo": "message",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_part_message_id_message_id_fk",
+ "entityType": "fks",
+ "table": "part"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_permission_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "permission"
+ },
+ {
+ "columns": ["project_id"],
+ "tableTo": "project",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_session_project_id_project_id_fk",
+ "entityType": "fks",
+ "table": "session"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_todo_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "todo"
+ },
+ {
+ "columns": ["session_id"],
+ "tableTo": "session",
+ "columnsTo": ["id"],
+ "onUpdate": "NO ACTION",
+ "onDelete": "CASCADE",
+ "nameExplicit": false,
+ "name": "fk_session_share_session_id_session_id_fk",
+ "entityType": "fks",
+ "table": "session_share"
+ },
+ {
+ "columns": ["email", "url"],
+ "nameExplicit": false,
+ "name": "control_account_pk",
+ "entityType": "pks",
+ "table": "control_account"
+ },
+ {
+ "columns": ["session_id", "position"],
+ "nameExplicit": false,
+ "name": "todo_pk",
+ "entityType": "pks",
+ "table": "todo"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "account_state_pk",
+ "table": "account_state",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "account_pk",
+ "table": "account",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "workspace_pk",
+ "table": "workspace",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "project_pk",
+ "table": "project",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "message_pk",
+ "table": "message",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "part_pk",
+ "table": "part",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["project_id"],
+ "nameExplicit": false,
+ "name": "permission_pk",
+ "table": "permission",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["id"],
+ "nameExplicit": false,
+ "name": "session_pk",
+ "table": "session",
+ "entityType": "pks"
+ },
+ {
+ "columns": ["session_id"],
+ "nameExplicit": false,
+ "name": "session_share_pk",
+ "table": "session_share",
+ "entityType": "pks"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ },
+ {
+ "value": "time_created",
+ "isExpression": false
+ },
+ {
+ "value": "id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "message_session_time_created_id_idx",
+ "entityType": "indexes",
+ "table": "message"
+ },
+ {
+ "columns": [
+ {
+ "value": "message_id",
+ "isExpression": false
+ },
+ {
+ "value": "id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "part_message_id_id_idx",
+ "entityType": "indexes",
+ "table": "part"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "part_session_idx",
+ "entityType": "indexes",
+ "table": "part"
+ },
+ {
+ "columns": [
+ {
+ "value": "project_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "session_project_idx",
+ "entityType": "indexes",
+ "table": "session"
+ },
+ {
+ "columns": [
+ {
+ "value": "workspace_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "session_workspace_idx",
+ "entityType": "indexes",
+ "table": "session"
+ },
+ {
+ "columns": [
+ {
+ "value": "parent_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "session_parent_idx",
+ "entityType": "indexes",
+ "table": "session"
+ },
+ {
+ "columns": [
+ {
+ "value": "session_id",
+ "isExpression": false
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "origin": "manual",
+ "name": "todo_session_idx",
+ "entityType": "indexes",
+ "table": "todo"
+ }
+ ],
+ "renames": []
+}
diff --git a/Agent-backend/packages/opencode/package.json b/Agent-backend/packages/opencode/package.json
index a3b911c57..490849be6 100644
--- a/Agent-backend/packages/opencode/package.json
+++ b/Agent-backend/packages/opencode/package.json
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
- "version": "1.2.24",
+ "version": "1.2.26",
"name": "opencode",
"type": "module",
"license": "MIT",
@@ -22,14 +22,16 @@
},
"devDependencies": {
"@babel/core": "7.28.4",
+ "@effect/language-service": "0.79.0",
"@octokit/webhooks-types": "7.6.1",
- "@opencode-ai/script": "workspace:*",
+ "@orbit.build/script": "workspace:*",
"@parcel/watcher-darwin-arm64": "2.5.1",
"@parcel/watcher-darwin-x64": "2.5.1",
"@parcel/watcher-linux-arm64-glibc": "2.5.1",
"@parcel/watcher-linux-arm64-musl": "2.5.1",
"@parcel/watcher-linux-x64-glibc": "2.5.1",
"@parcel/watcher-linux-x64-musl": "2.5.1",
+ "@parcel/watcher-win32-arm64": "2.5.1",
"@parcel/watcher-win32-x64": "2.5.1",
"@standard-schema/spec": "1.0.0",
"@tsconfig/bun": "catalog:",
@@ -81,13 +83,13 @@
"@octokit/graphql": "9.0.2",
"@octokit/rest": "catalog:",
"@openauthjs/openauth": "catalog:",
- "@opencode-ai/plugin": "workspace:*",
- "@opencode-ai/script": "workspace:*",
- "@opencode-ai/sdk": "workspace:*",
- "@opencode-ai/util": "workspace:*",
"@openrouter/ai-sdk-provider": "1.5.4",
- "@opentui/core": "0.1.86",
- "@opentui/solid": "0.1.86",
+ "@opentui/core": "0.1.87",
+ "@opentui/solid": "0.1.87",
+ "@orbit.build/plugin": "workspace:*",
+ "@orbit.build/script": "workspace:*",
+ "@orbit.build/sdk": "workspace:*",
+ "@orbit.build/util": "workspace:*",
"@parcel/watcher": "2.5.1",
"@pierre/diffs": "catalog:",
"@solid-primitives/event-bus": "1.1.2",
@@ -103,6 +105,7 @@
"decimal.js": "10.5.0",
"diff": "catalog:",
"drizzle-orm": "1.0.0-beta.16-ea816b6",
+ "effect": "catalog:",
"fuzzysort": "3.1.0",
"glob": "13.0.5",
"google-auth-library": "10.5.0",
diff --git a/Agent-backend/packages/opencode/script/build.ts b/Agent-backend/packages/opencode/script/build.ts
index 880434c35..67cfed356 100755
--- a/Agent-backend/packages/opencode/script/build.ts
+++ b/Agent-backend/packages/opencode/script/build.ts
@@ -4,7 +4,7 @@ import fs from "fs"
import path from "path"
import { fileURLToPath } from "url"
-import { Script } from "@opencode-ai/script"
+import { Script } from "@orbit.build/script"
import solidPlugin from "@opentui/solid/bun-plugin"
import { $ } from "bun"
@@ -109,6 +109,10 @@ const allTargets: {
arch: "x64",
avx2: false,
},
+ {
+ os: "win32",
+ arch: "arm64",
+ },
{
os: "win32",
arch: "x64",
@@ -175,7 +179,6 @@ for (const item of targets) {
conditions: ["browser"],
tsconfig: "./tsconfig.json",
plugins: [solidPlugin],
- sourcemap: "external",
compile: {
autoloadBunfig: false,
autoloadDotenv: false,
diff --git a/Agent-backend/packages/opencode/script/publish.ts b/Agent-backend/packages/opencode/script/publish.ts
index 87d665ec8..8c2561059 100755
--- a/Agent-backend/packages/opencode/script/publish.ts
+++ b/Agent-backend/packages/opencode/script/publish.ts
@@ -1,7 +1,7 @@
#!/usr/bin/env bun
import { fileURLToPath } from "url"
-import { Script } from "@opencode-ai/script"
+import { Script } from "@orbit.build/script"
import { $ } from "bun"
import pkg from "../package.json"
diff --git a/Agent-backend/packages/opencode/script/seed-e2e.ts b/Agent-backend/packages/opencode/script/seed-e2e.ts
index bf76da31d..06650a9ba 100644
--- a/Agent-backend/packages/opencode/script/seed-e2e.ts
+++ b/Agent-backend/packages/opencode/script/seed-e2e.ts
@@ -10,17 +10,23 @@ const now = Date.now()
const seed = async (): Promise => {
const { Instance } = await import("../src/project/instance")
const { InstanceBootstrap } = await import("../src/project/bootstrap")
+ const { Config } = await import("../src/config/config")
const { Session } = await import("../src/session")
- const { Identifier } = await import("../src/id/id")
+ const { MessageID, PartID } = await import("../src/session/schema")
const { Project } = await import("../src/project/project")
+ const { ModelID, ProviderID } = await import("../src/provider/schema")
+ const { ToolRegistry } = await import("../src/tool/registry")
await Instance.provide({
directory: dir,
init: InstanceBootstrap,
fn: async () => {
+ await Config.waitForDependencies()
+ await ToolRegistry.ids()
+
const session = await Session.create({ title })
- const messageID = Identifier.descending("message")
- const partID = Identifier.descending("part")
+ const messageID = MessageID.ascending()
+ const partID = PartID.ascending()
const message = {
id: messageID,
sessionID: session.id,
@@ -28,8 +34,8 @@ const seed = async (): Promise => {
time: { created: now },
agent: "build",
model: {
- providerID,
- modelID,
+ providerID: ProviderID.make(providerID),
+ modelID: ModelID.make(modelID),
},
}
const part = {
@@ -42,7 +48,7 @@ const seed = async (): Promise => {
}
await Session.updateMessage(message)
await Session.updatePart(part)
- Project.update({ projectID: Instance.project.id, name: "E2E Project" })
+ await Project.update({ projectID: Instance.project.id, name: "E2E Project" })
},
})
}
diff --git a/Agent-backend/packages/opencode/src/account/account.sql.ts b/Agent-backend/packages/opencode/src/account/account.sql.ts
new file mode 100644
index 000000000..a299a9761
--- /dev/null
+++ b/Agent-backend/packages/opencode/src/account/account.sql.ts
@@ -0,0 +1,40 @@
+import { integer, primaryKey, sqliteTable, text } from "drizzle-orm/sqlite-core"
+
+import { Timestamps } from "../storage/schema.sql"
+
+import type { AccessToken, AccountID, OrgID, RefreshToken } from "./schema"
+
+export const AccountTable = sqliteTable("account", {
+ id: text().$type().primaryKey(),
+ email: text().notNull(),
+ url: text().notNull(),
+ access_token: text().$type().notNull(),
+ refresh_token: text().$type().notNull(),
+ token_expiry: integer(),
+ ...Timestamps,
+})
+
+export const AccountStateTable = sqliteTable("account_state", {
+ id: integer().primaryKey(),
+ active_account_id: text()
+ .$type()
+ .references(() => AccountTable.id, { onDelete: "set null" }),
+ active_org_id: text().$type(),
+})
+
+// LEGACY
+export const ControlAccountTable = sqliteTable(
+ "control_account",
+ {
+ email: text().notNull(),
+ url: text().notNull(),
+ access_token: text().$type().notNull(),
+ refresh_token: text().$type().notNull(),
+ token_expiry: integer(),
+ active: integer({ mode: "boolean" })
+ .notNull()
+ .$default(() => false),
+ ...Timestamps,
+ },
+ (table) => [primaryKey({ columns: [table.email, table.url] })],
+)
diff --git a/Agent-backend/packages/opencode/src/account/index.ts b/Agent-backend/packages/opencode/src/account/index.ts
new file mode 100644
index 000000000..520f3f560
--- /dev/null
+++ b/Agent-backend/packages/opencode/src/account/index.ts
@@ -0,0 +1,35 @@
+import { Option } from "effect"
+
+import { Account as AccountSchema, AccountService } from "./service"
+
+import type { AccountError, AccessToken, AccountID, OrgID } from "./service"
+import type { Effect } from "effect"
+
+import { runtime } from "@/effect/runtime"
+
+export { AccessToken, AccountID, OrgID } from "./service"
+
+function runSync(f: (service: AccountService.Service) => Effect.Effect): A {
+ return runtime.runSync(AccountService.use(f))
+}
+
+function runPromise(f: (service: AccountService.Service) => Effect.Effect): Promise {
+ return runtime.runPromise(AccountService.use(f))
+}
+
+export namespace Account {
+ export const Account = AccountSchema
+ export type Account = AccountSchema
+
+ export function active(): Account | undefined {
+ return Option.getOrUndefined(runSync((service) => service.active()))
+ }
+
+ export async function config(accountID: AccountID, orgID: OrgID): Promise | undefined> {
+ return Option.getOrUndefined(await runPromise((service) => service.config(accountID, orgID)))
+ }
+
+ export async function token(accountID: AccountID): Promise {
+ return Option.getOrUndefined(await runPromise((service) => service.token(accountID)))
+ }
+}
diff --git a/Agent-backend/packages/opencode/src/account/repo.ts b/Agent-backend/packages/opencode/src/account/repo.ts
new file mode 100644
index 000000000..ed27bcd61
--- /dev/null
+++ b/Agent-backend/packages/opencode/src/account/repo.ts
@@ -0,0 +1,167 @@
+import { eq } from "drizzle-orm"
+import { Effect, Layer, Option, Schema, ServiceMap } from "effect"
+
+import { AccountStateTable, AccountTable } from "./account.sql"
+import { Account, AccountRepoError } from "./schema"
+
+import type { AccessToken, AccountID, OrgID, RefreshToken } from "./schema"
+
+import { Database } from "@/storage/db"
+
+export type AccountRow = (typeof AccountTable)["$inferSelect"]
+
+type DbClient = Parameters[0] extends (db: infer T) => unknown ? T : never
+
+const ACCOUNT_STATE_ID = 1
+
+export namespace AccountRepo {
+ export interface PersistTokenInput {
+ accountID: AccountID
+ accessToken: AccessToken
+ refreshToken: RefreshToken
+ expiry: Option.Option
+ }
+
+ export interface PersistAccountInput {
+ id: AccountID
+ email: string
+ url: string
+ accessToken: AccessToken
+ refreshToken: RefreshToken
+ expiry: number
+ orgID: Option.Option
+ }
+
+ export interface Service {
+ readonly active: () => Effect.Effect, AccountRepoError>
+ readonly list: () => Effect.Effect
+ readonly remove: (accountID: AccountID) => Effect.Effect
+ readonly use: (accountID: AccountID, orgID: Option.Option) => Effect.Effect
+ readonly getRow: (accountID: AccountID) => Effect.Effect, AccountRepoError>
+ readonly persistToken: (input: PersistTokenInput) => Effect.Effect
+ readonly persistAccount: (input: PersistAccountInput) => Effect.Effect
+ }
+}
+
+export class AccountRepo extends ServiceMap.Service()("@opencode/AccountRepo") {
+ static readonly layer: Layer.Layer = Layer.effect(
+ AccountRepo,
+ Effect.sync(() => {
+ const decode = Schema.decodeUnknownSync(Account)
+
+ const query = (f: (db: DbClient) => A): Effect.Effect =>
+ Effect.try({
+ try: () => Database.use(f),
+ catch: (cause) => new AccountRepoError({ message: "Database operation failed", cause }),
+ })
+
+ const tx = (f: (db: DbClient) => A): Effect.Effect =>
+ Effect.try({
+ try: () => Database.transaction(f),
+ catch: (cause) => new AccountRepoError({ message: "Database operation failed", cause }),
+ })
+
+ const current = (db: DbClient): (AccountRow & { active_org_id: OrgID | null }) | undefined => {
+ const state = db.select().from(AccountStateTable).where(eq(AccountStateTable.id, ACCOUNT_STATE_ID)).get()
+ if (!state?.active_account_id) return
+ const account = db.select().from(AccountTable).where(eq(AccountTable.id, state.active_account_id)).get()
+ if (!account) return
+ return { ...account, active_org_id: state.active_org_id ?? null }
+ }
+
+ const state = (db: DbClient, accountID: AccountID, orgID: Option.Option): void => {
+ const id = Option.getOrNull(orgID)
+ db.insert(AccountStateTable)
+ .values({ id: ACCOUNT_STATE_ID, active_account_id: accountID, active_org_id: id })
+ .onConflictDoUpdate({
+ target: AccountStateTable.id,
+ set: { active_account_id: accountID, active_org_id: id },
+ })
+ .run()
+ }
+
+ const active = Effect.fn("AccountRepo.active")(() =>
+ query((db) => current(db)).pipe(Effect.map((row) => (row ? Option.some(decode(row)) : Option.none()))),
+ )
+
+ const list = Effect.fn("AccountRepo.list")(() =>
+ query((db) =>
+ db
+ .select()
+ .from(AccountTable)
+ .all()
+ .map((row: AccountRow) => decode({ ...row, active_org_id: null })),
+ ),
+ )
+
+ const remove = Effect.fn("AccountRepo.remove")((accountID: AccountID) =>
+ tx((db) => {
+ db.update(AccountStateTable)
+ .set({ active_account_id: null, active_org_id: null })
+ .where(eq(AccountStateTable.active_account_id, accountID))
+ .run()
+ db.delete(AccountTable).where(eq(AccountTable.id, accountID)).run()
+ }).pipe(Effect.asVoid),
+ )
+
+ const use = Effect.fn("AccountRepo.use")((accountID: AccountID, orgID: Option.Option) =>
+ query((db) => {
+ state(db, accountID, orgID)
+ }).pipe(Effect.asVoid),
+ )
+
+ const getRow = Effect.fn("AccountRepo.getRow")((accountID: AccountID) =>
+ query((db) => db.select().from(AccountTable).where(eq(AccountTable.id, accountID)).get()).pipe(
+ Effect.map(Option.fromNullishOr),
+ ),
+ )
+
+ const persistToken = Effect.fn("AccountRepo.persistToken")((input: AccountRepo.PersistTokenInput) =>
+ query((db) => {
+ db.update(AccountTable)
+ .set({
+ access_token: input.accessToken,
+ refresh_token: input.refreshToken,
+ token_expiry: Option.getOrNull(input.expiry),
+ })
+ .where(eq(AccountTable.id, input.accountID))
+ .run()
+ }).pipe(Effect.asVoid),
+ )
+
+ const persistAccount = Effect.fn("AccountRepo.persistAccount")((input: AccountRepo.PersistAccountInput) =>
+ tx((db) => {
+ db.insert(AccountTable)
+ .values({
+ id: input.id,
+ email: input.email,
+ url: input.url,
+ access_token: input.accessToken,
+ refresh_token: input.refreshToken,
+ token_expiry: input.expiry,
+ })
+ .onConflictDoUpdate({
+ target: AccountTable.id,
+ set: {
+ access_token: input.accessToken,
+ refresh_token: input.refreshToken,
+ token_expiry: input.expiry,
+ },
+ })
+ .run()
+ state(db, input.id, input.orgID)
+ }).pipe(Effect.asVoid),
+ )
+
+ return AccountRepo.of({
+ active,
+ list,
+ remove,
+ use,
+ getRow,
+ persistToken,
+ persistAccount,
+ })
+ }),
+ )
+}
diff --git a/Agent-backend/packages/opencode/src/account/schema.ts b/Agent-backend/packages/opencode/src/account/schema.ts
new file mode 100644
index 000000000..310bd369c
--- /dev/null
+++ b/Agent-backend/packages/opencode/src/account/schema.ts
@@ -0,0 +1,91 @@
+import { Schema } from "effect"
+
+import { withStatics } from "@/util/schema"
+
+export const AccountID = Schema.String.pipe(
+ Schema.brand("AccountID"),
+ withStatics((schema) => ({ make: (id: string) => schema.makeUnsafe(id) })),
+)
+export type AccountID = Schema.Schema.Type
+
+export const OrgID = Schema.String.pipe(
+ Schema.brand("OrgID"),
+ withStatics((schema) => ({ make: (id: string) => schema.makeUnsafe(id) })),
+)
+export type OrgID = Schema.Schema.Type
+
+export const AccessToken = Schema.String.pipe(
+ Schema.brand("AccessToken"),
+ withStatics((schema) => ({ make: (token: string) => schema.makeUnsafe(token) })),
+)
+export type AccessToken = Schema.Schema.Type
+
+export const RefreshToken = Schema.String.pipe(
+ Schema.brand("RefreshToken"),
+ withStatics((schema) => ({ make: (token: string) => schema.makeUnsafe(token) })),
+)
+export type RefreshToken = Schema.Schema.Type
+
+export const DeviceCode = Schema.String.pipe(
+ Schema.brand("DeviceCode"),
+ withStatics((schema) => ({ make: (code: string) => schema.makeUnsafe(code) })),
+)
+export type DeviceCode = Schema.Schema.Type
+
+export const UserCode = Schema.String.pipe(
+ Schema.brand("UserCode"),
+ withStatics((schema) => ({ make: (code: string) => schema.makeUnsafe(code) })),
+)
+export type UserCode = Schema.Schema.Type
+
+export class Account extends Schema.Class("Account")({
+ id: AccountID,
+ email: Schema.String,
+ url: Schema.String,
+ active_org_id: Schema.NullOr(OrgID),
+}) {}
+
+export class Org extends Schema.Class("Org")({
+ id: OrgID,
+ name: Schema.String,
+}) {}
+
+export class AccountRepoError extends Schema.TaggedErrorClass()("AccountRepoError", {
+ message: Schema.String,
+ cause: Schema.optional(Schema.Defect),
+}) {}
+
+export class AccountServiceError extends Schema.TaggedErrorClass()("AccountServiceError", {
+ message: Schema.String,
+ cause: Schema.optional(Schema.Defect),
+}) {}
+
+export type AccountError = AccountRepoError | AccountServiceError
+
+export class Login extends Schema.Class("Login")({
+ code: DeviceCode,
+ user: UserCode,
+ url: Schema.String,
+ server: Schema.String,
+ expiry: Schema.Duration,
+ interval: Schema.Duration,
+}) {}
+
+export class PollSuccess extends Schema.TaggedClass()("PollSuccess", {
+ email: Schema.String,
+}) {}
+
+export class PollPending extends Schema.TaggedClass()("PollPending", {}) {}
+
+export class PollSlow extends Schema.TaggedClass()("PollSlow", {}) {}
+
+export class PollExpired extends Schema.TaggedClass()("PollExpired", {}) {}
+
+export class PollDenied extends Schema.TaggedClass()("PollDenied", {}) {}
+
+export class PollError extends Schema.TaggedClass()("PollError", {
+ cause: Schema.Defect,
+}) {}
+
+export const PollResult = Schema.Union([PollSuccess, PollPending, PollSlow, PollExpired, PollDenied, PollError])
+export type PollResult = Schema.Schema.Type
diff --git a/Agent-backend/packages/opencode/src/account/service.ts b/Agent-backend/packages/opencode/src/account/service.ts
new file mode 100644
index 000000000..448a21214
--- /dev/null
+++ b/Agent-backend/packages/opencode/src/account/service.ts
@@ -0,0 +1,369 @@
+import { Clock, Duration, Effect, Layer, Option, Schema, SchemaGetter, ServiceMap } from "effect"
+import { FetchHttpClient, HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
+
+import { AccountRepo } from "./repo"
+import {
+ AccessToken,
+ AccountID,
+ AccountServiceError,
+ DeviceCode,
+ Login,
+ Org,
+ PollDenied,
+ PollError,
+ PollExpired,
+ PollPending,
+ PollSlow,
+ PollSuccess,
+ RefreshToken,
+ UserCode,
+} from "./schema"
+
+import type { AccountRow } from "./repo"
+import type { AccountError, PollResult, OrgID, Account } from "./schema"
+
+import { withTransientReadRetry } from "@/util/effect-http-client"
+
+export * from "./schema"
+
+export interface AccountOrgs {
+ account: Account
+ orgs: readonly Org[]
+}
+
+class RemoteConfig extends Schema.Class("RemoteConfig")({
+ config: Schema.Record(Schema.String, Schema.Json),
+}) {}
+
+const DurationFromSeconds = Schema.Number.pipe(
+ Schema.decodeTo(Schema.Duration, {
+ decode: SchemaGetter.transform((value) => Duration.seconds(value)),
+ encode: SchemaGetter.transform((value) => Duration.toSeconds(value)),
+ }),
+)
+
+class TokenRefresh extends Schema.Class("TokenRefresh")({
+ access_token: AccessToken,
+ refresh_token: RefreshToken,
+ expires_in: DurationFromSeconds,
+}) {}
+
+class DeviceAuth extends Schema.Class("DeviceAuth")({
+ device_code: DeviceCode,
+ user_code: UserCode,
+ verification_uri_complete: Schema.String,
+ expires_in: DurationFromSeconds,
+ interval: DurationFromSeconds,
+}) {}
+
+class DeviceTokenSuccess extends Schema.Class("DeviceTokenSuccess")({
+ access_token: AccessToken,
+ refresh_token: RefreshToken,
+ token_type: Schema.Literal("Bearer"),
+ expires_in: DurationFromSeconds,
+}) {}
+
+class DeviceTokenError extends Schema.Class("DeviceTokenError")({
+ error: Schema.String,
+ error_description: Schema.String,
+}) {
+ toPollResult(): PollResult {
+ if (this.error === "authorization_pending") return new PollPending()
+ if (this.error === "slow_down") return new PollSlow()
+ if (this.error === "expired_token") return new PollExpired()
+ if (this.error === "access_denied") return new PollDenied()
+ return new PollError({ cause: this.error })
+ }
+}
+
+const DeviceToken = Schema.Union([DeviceTokenSuccess, DeviceTokenError])
+
+class User extends Schema.Class("User")({
+ id: AccountID,
+ email: Schema.String,
+}) {}
+
+class ClientId extends Schema.Class("ClientId")({ client_id: Schema.String }) {}
+
+class DeviceTokenRequest extends Schema.Class("DeviceTokenRequest")({
+ grant_type: Schema.String,
+ device_code: DeviceCode,
+ client_id: Schema.String,
+}) {}
+
+class TokenRefreshRequest extends Schema.Class("TokenRefreshRequest")({
+ grant_type: Schema.String,
+ refresh_token: RefreshToken,
+ client_id: Schema.String,
+}) {}
+
+const clientId = "orbit-cli"
+
+const mapAccountServiceError =
+ (message = "Account service operation failed") =>
+ (effect: Effect.Effect): Effect.Effect =>
+ effect.pipe(
+ Effect.mapError((cause) =>
+ cause instanceof AccountServiceError ? cause : new AccountServiceError({ message, cause }),
+ ),
+ )
+
+export namespace AccountService {
+ export interface Service {
+ readonly active: () => Effect.Effect, AccountError>
+ readonly list: () => Effect.Effect
+ readonly orgsByAccount: () => Effect.Effect
+ readonly remove: (accountID: AccountID) => Effect.Effect
+ readonly use: (accountID: AccountID, orgID: Option.Option) => Effect.Effect
+ readonly orgs: (accountID: AccountID) => Effect.Effect
+ readonly config: (
+ accountID: AccountID,
+ orgID: OrgID,
+ ) => Effect.Effect>, AccountError>
+ readonly token: (accountID: AccountID) => Effect.Effect, AccountError>
+ readonly login: (url: string) => Effect.Effect
+ readonly poll: (input: Login) => Effect.Effect
+ }
+}
+
+export class AccountService extends ServiceMap.Service()("@opencode/Account") {
+ static readonly layer: Layer.Layer = Layer.effect(
+ AccountService,
+ Effect.gen(function* () {
+ const repo = yield* AccountRepo
+ const http = yield* HttpClient.HttpClient
+ const httpRead = withTransientReadRetry(http)
+ const httpOk = HttpClient.filterStatusOk(http)
+ const httpReadOk = HttpClient.filterStatusOk(httpRead)
+
+ const executeRead = (
+ request: HttpClientRequest.HttpClientRequest,
+ ): Effect.Effect =>
+ httpRead.execute(request).pipe(mapAccountServiceError("HTTP request failed"))
+
+ const executeReadOk = (
+ request: HttpClientRequest.HttpClientRequest,
+ ): Effect.Effect =>
+ httpReadOk.execute(request).pipe(mapAccountServiceError("HTTP request failed"))
+
+ const executeEffectOk = (
+ request: Effect.Effect,
+ ): Effect.Effect =>
+ request.pipe(
+ Effect.flatMap((req) => httpOk.execute(req)),
+ mapAccountServiceError("HTTP request failed"),
+ )
+
+ const describe = (error: unknown): string => {
+ if (error instanceof Error) return error.message
+ try {
+ const value = JSON.stringify(error)
+ if (typeof value === "string") return value
+ return String(error)
+ } catch {
+ return String(error)
+ }
+ }
+
+ const resolveToken = Effect.fnUntraced(function* (row: AccountRow) {
+ const now = yield* Clock.currentTimeMillis
+ if (typeof row.token_expiry === "number" && row.token_expiry > now) {
+ return row.access_token
+ }
+
+ const response = yield* executeEffectOk(
+ HttpClientRequest.post(`${row.url}/auth/device/token`).pipe(
+ HttpClientRequest.acceptJson,
+ HttpClientRequest.schemaBodyJson(TokenRefreshRequest)(
+ new TokenRefreshRequest({
+ grant_type: "refresh_token",
+ refresh_token: row.refresh_token,
+ client_id: clientId,
+ }),
+ ),
+ ),
+ )
+
+ const parsed = yield* HttpClientResponse.schemaBodyJson(TokenRefresh)(response).pipe(
+ mapAccountServiceError("Failed to decode response"),
+ )
+
+ const expiry = Option.some(now + Duration.toMillis(parsed.expires_in))
+
+ yield* repo.persistToken({
+ accountID: row.id,
+ accessToken: parsed.access_token,
+ refreshToken: parsed.refresh_token,
+ expiry,
+ })
+
+ return parsed.access_token
+ })
+
+ const resolveAccess = Effect.fnUntraced(function* (accountID: AccountID) {
+ const maybeAccount = yield* repo.getRow(accountID)
+ if (Option.isNone(maybeAccount)) return Option.none()
+
+ const account = maybeAccount.value
+ const accessToken = yield* resolveToken(account)
+ return Option.some({ account, accessToken })
+ })
+
+ const fetchOrgs = Effect.fnUntraced(function* (url: string, accessToken: AccessToken) {
+ const response = yield* executeReadOk(
+ HttpClientRequest.get(`${url}/api/orgs`).pipe(
+ HttpClientRequest.acceptJson,
+ HttpClientRequest.bearerToken(accessToken),
+ ),
+ )
+
+ return yield* HttpClientResponse.schemaBodyJson(Schema.Array(Org))(response).pipe(
+ mapAccountServiceError("Failed to decode response"),
+ )
+ })
+
+ const fetchUser = Effect.fnUntraced(function* (url: string, accessToken: AccessToken) {
+ const response = yield* executeReadOk(
+ HttpClientRequest.get(`${url}/api/user`).pipe(
+ HttpClientRequest.acceptJson,
+ HttpClientRequest.bearerToken(accessToken),
+ ),
+ )
+
+ return yield* HttpClientResponse.schemaBodyJson(User)(response).pipe(
+ mapAccountServiceError("Failed to decode response"),
+ )
+ })
+
+ const token = Effect.fn("AccountService.token")((accountID: AccountID) =>
+ resolveAccess(accountID).pipe(Effect.map(Option.map((value) => value.accessToken))),
+ )
+
+ const orgsByAccount = Effect.fn("AccountService.orgsByAccount")(function* () {
+ const accounts = yield* repo.list()
+ const [errors, results] = yield* Effect.partition(
+ accounts,
+ (account) => orgs(account.id).pipe(Effect.map((orgs) => ({ account, orgs }))),
+ { concurrency: 3 },
+ )
+ for (const error of errors) {
+ yield* Effect.logWarning("failed to fetch orgs for account").pipe(
+ Effect.annotateLogs({ error: describe(error) }),
+ )
+ }
+ return results
+ })
+
+ const orgs = Effect.fn("AccountService.orgs")(function* (accountID: AccountID) {
+ const resolved = yield* resolveAccess(accountID)
+ if (Option.isNone(resolved)) return []
+
+ return yield* fetchOrgs(resolved.value.account.url, resolved.value.accessToken)
+ })
+
+ const config = Effect.fn("AccountService.config")(function* (accountID: AccountID, orgID: OrgID) {
+ const resolved = yield* resolveAccess(accountID)
+ if (Option.isNone(resolved)) return Option.none()
+
+ const response = yield* executeRead(
+ HttpClientRequest.get(`${resolved.value.account.url}/api/config`).pipe(
+ HttpClientRequest.acceptJson,
+ HttpClientRequest.bearerToken(resolved.value.accessToken),
+ HttpClientRequest.setHeaders({ "x-org-id": orgID }),
+ ),
+ )
+
+ if (response.status === 404) return Option.none()
+
+ const ok = yield* HttpClientResponse.filterStatusOk(response).pipe(mapAccountServiceError())
+
+ const parsed = yield* HttpClientResponse.schemaBodyJson(RemoteConfig)(ok).pipe(
+ mapAccountServiceError("Failed to decode response"),
+ )
+ return Option.some(parsed.config)
+ })
+
+ const login = Effect.fn("AccountService.login")(function* (server: string) {
+ const response = yield* executeEffectOk(
+ HttpClientRequest.post(`${server}/auth/device/code`).pipe(
+ HttpClientRequest.acceptJson,
+ HttpClientRequest.schemaBodyJson(ClientId)(new ClientId({ client_id: clientId })),
+ ),
+ )
+
+ const parsed = yield* HttpClientResponse.schemaBodyJson(DeviceAuth)(response).pipe(
+ mapAccountServiceError("Failed to decode response"),
+ )
+ return new Login({
+ code: parsed.device_code,
+ user: parsed.user_code,
+ url: `${server}${parsed.verification_uri_complete}`,
+ server,
+ expiry: parsed.expires_in,
+ interval: parsed.interval,
+ })
+ })
+
+ const poll = Effect.fn("AccountService.poll")(function* (input: Login) {
+ const response = yield* executeEffectOk(
+ HttpClientRequest.post(`${input.server}/auth/device/token`).pipe(
+ HttpClientRequest.acceptJson,
+ HttpClientRequest.schemaBodyJson(DeviceTokenRequest)(
+ new DeviceTokenRequest({
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
+ device_code: input.code,
+ client_id: clientId,
+ }),
+ ),
+ ),
+ )
+
+ const parsed = yield* HttpClientResponse.schemaBodyJson(DeviceToken)(response).pipe(
+ mapAccountServiceError("Failed to decode response"),
+ )
+
+ if (parsed instanceof DeviceTokenError) return parsed.toPollResult()
+ const accessToken = parsed.access_token
+
+ const user = fetchUser(input.server, accessToken)
+ const orgs = fetchOrgs(input.server, accessToken)
+
+ const [account, remoteOrgs] = yield* Effect.all([user, orgs], { concurrency: 2 })
+ const firstOrgID = remoteOrgs.length > 0 ? Option.some(remoteOrgs[0].id) : Option.none()
+
+ const now = yield* Clock.currentTimeMillis
+ const expiry = now + Duration.toMillis(parsed.expires_in)
+
+ yield* repo.persistAccount({
+ id: account.id,
+ email: account.email,
+ url: input.server,
+ accessToken,
+ refreshToken: parsed.refresh_token,
+ expiry,
+ orgID: firstOrgID,
+ })
+
+ return new PollSuccess({ email: account.email })
+ })
+
+ return AccountService.of({
+ active: repo.active,
+ list: repo.list,
+ orgsByAccount,
+ remove: repo.remove,
+ use: repo.use,
+ orgs,
+ config,
+ token,
+ login,
+ poll,
+ })
+ }),
+ )
+
+ static readonly defaultLayer = AccountService.layer.pipe(
+ Layer.provide(AccountRepo.layer),
+ Layer.provide(FetchHttpClient.layer),
+ )
+}
diff --git a/Agent-backend/packages/opencode/src/acp/agent.ts b/Agent-backend/packages/opencode/src/acp/agent.ts
index 83084b10c..ea79cf3e5 100644
--- a/Agent-backend/packages/opencode/src/acp/agent.ts
+++ b/Agent-backend/packages/opencode/src/acp/agent.ts
@@ -1,39 +1,13 @@
import { pathToFileURL } from "url"
-import {
- RequestError
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-} from "@agentclientprotocol/sdk"
+import { RequestError } from "@agentclientprotocol/sdk"
import { LoadAPIKeyError } from "ai"
import { applyPatch } from "diff"
import { z } from "zod"
import { Agent as AgentModule } from "../agent/agent"
import { Provider } from "../provider/provider"
+import { ModelID, ProviderID } from "../provider/schema"
import { Filesystem } from "../util/filesystem"
import { Hash } from "../util/hash"
import { Log } from "../util/log"
@@ -42,16 +16,49 @@ import { ACPSessionManager } from "./session"
import type { ACPConfig } from "./types"
import type { Config } from "@/config/config"
-import type {Agent as ACPAgent, AgentSideConnection, AuthenticateRequest, AuthMethod, CancelNotification, ForkSessionRequest, ForkSessionResponse, InitializeRequest, InitializeResponse, ListSessionsRequest, ListSessionsResponse, LoadSessionRequest, NewSessionRequest, PermissionOption, PlanEntry, PromptRequest, ResumeSessionRequest, ResumeSessionResponse, Role, SessionInfo, SetSessionModelRequest, SetSessionModeRequest, SetSessionModeResponse, ToolCallContent, ToolKind, Usage} from "@agentclientprotocol/sdk";
-import type { AssistantMessage, Event, OpencodeClient, SessionMessageResponse, ToolPart } from "@opencode-ai/sdk/v2"
+import type {
+ Agent as ACPAgent,
+ AgentSideConnection,
+ AuthenticateRequest,
+ AuthMethod,
+ CancelNotification,
+ ForkSessionRequest,
+ ForkSessionResponse,
+ InitializeRequest,
+ InitializeResponse,
+ ListSessionsRequest,
+ ListSessionsResponse,
+ LoadSessionRequest,
+ NewSessionRequest,
+ PermissionOption,
+ PlanEntry,
+ PromptRequest,
+ ResumeSessionRequest,
+ ResumeSessionResponse,
+ Role,
+ SessionInfo,
+ SetSessionModelRequest,
+ SetSessionModeRequest,
+ SetSessionModeResponse,
+ ToolCallContent,
+ ToolKind,
+ Usage,
+} from "@agentclientprotocol/sdk"
+import type { AssistantMessage, Event, OpencodeClient, SessionMessageResponse, ToolPart } from "@orbit.build/sdk/v2"
import { Installation } from "@/installation"
import { MessageV2 } from "@/session/message-v2"
import { Todo } from "@/session/todo"
-
-interface ModeOption { id: string; name: string; description?: string }
-interface ModelOption { modelId: string; name: string }
+interface ModeOption {
+ id: string
+ name: string
+ description?: string
+}
+interface ModelOption {
+ modelId: string
+ name: string
+}
interface ProviderModelInfo {
variants?: Record>
@@ -70,8 +77,8 @@ export namespace ACP {
async function getContextLimit(
sdk: OpencodeClient,
- providerID: string,
- modelID: string,
+ providerID: ProviderID,
+ modelID: ModelID,
directory: string,
): Promise {
const providers = await sdk.config
@@ -106,12 +113,12 @@ export namespace ACP {
const assistantMessages = messages.filter(
(m): m is { info: AssistantMessage; parts: SessionMessageResponse["parts"] } => m.info.role === "assistant",
)
-
if (assistantMessages.length === 0) return
- const lastAssistant = assistantMessages[assistantMessages.length - 1]
+ const lastAssistant = assistantMessages.at(-1)
+ if (lastAssistant === undefined) return
const msg = lastAssistant.info
- const size = await getContextLimit(sdk, msg.providerID, msg.modelID, directory)
+ const size = await getContextLimit(sdk, ProviderID.make(msg.providerID), ModelID.make(msg.modelID), directory)
if (size === null || size === 0) {
// Cannot calculate usage without known context size
@@ -535,7 +542,7 @@ export namespace ACP {
const authMethod: AuthMethod = {
description: "Run `orbit auth login` in the terminal",
name: "Login with orbit",
- id: "opencode-login",
+ id: "orbit-login",
}
// If client supports terminal-auth capability, use that instead.
@@ -610,7 +617,7 @@ export namespace ACP {
}
} catch (e) {
const error = MessageV2.fromError(e, {
- providerID: this.config.defaultModel?.providerID ?? "unknown",
+ providerID: ProviderID.make(this.config.defaultModel?.providerID ?? "unknown"),
})
if (LoadAPIKeyError.isInstance(error)) {
throw RequestError.authRequired()
@@ -680,7 +687,7 @@ export namespace ACP {
return result
} catch (e) {
const error = MessageV2.fromError(e, {
- providerID: this.config.defaultModel?.providerID ?? "unknown",
+ providerID: ProviderID.make(this.config.defaultModel?.providerID ?? "unknown"),
})
if (LoadAPIKeyError.isInstance(error)) {
throw RequestError.authRequired()
@@ -724,7 +731,7 @@ export namespace ACP {
return response
} catch (e) {
const error = MessageV2.fromError(e, {
- providerID: this.config.defaultModel?.providerID ?? "unknown",
+ providerID: ProviderID.make(this.config.defaultModel?.providerID ?? "unknown"),
})
if (LoadAPIKeyError.isInstance(error)) {
throw RequestError.authRequired()
@@ -785,7 +792,7 @@ export namespace ACP {
return mode
} catch (e) {
const error = MessageV2.fromError(e, {
- providerID: this.config.defaultModel?.providerID ?? "unknown",
+ providerID: ProviderID.make(this.config.defaultModel?.providerID ?? "unknown"),
})
if (LoadAPIKeyError.isInstance(error)) {
throw RequestError.authRequired()
@@ -816,7 +823,7 @@ export namespace ACP {
return result
} catch (e) {
const error = MessageV2.fromError(e, {
- providerID: this.config.defaultModel?.providerID ?? "unknown",
+ providerID: ProviderID.make(this.config.defaultModel?.providerID ?? "unknown"),
})
if (LoadAPIKeyError.isInstance(error)) {
throw RequestError.authRequired()
@@ -983,11 +990,8 @@ export namespace ACP {
}
} else if (part.type === "text") {
if (part.text !== "") {
- const audience: Role[] | undefined = part.synthetic === true
- ? ["assistant"]
- : part.ignored === true
- ? ["user"]
- : undefined
+ const audience: Role[] | undefined =
+ part.synthetic === true ? ["assistant"] : part.ignored === true ? ["user"] : undefined
await this.connection
.sessionUpdate({
sessionId,
@@ -1006,7 +1010,7 @@ export namespace ACP {
}
} else if (part.type === "file") {
// Replay file attachments as appropriate ACP content blocks.
- // OpenCode stores files internally as { type: "file", url, filename, mime }.
+ // Orbit stores files internally as { type: "file", url, filename, mime }.
// We convert these back to ACP blocks based on the URL scheme and MIME type:
// - file:// URLs -> resource_link
// - data: URLs with image/* -> image block
@@ -1335,8 +1339,10 @@ export namespace ACP {
}
const agent = session.modeId ?? (await AgentModule.defaultAgent())
- const parts: (| { type: "text"; text: string; synthetic?: boolean; ignored?: boolean }
- | { type: "file"; url: string; filename: string; mime: string })[] = []
+ const parts: (
+ | { type: "text"; text: string; synthetic?: boolean; ignored?: boolean }
+ | { type: "file"; url: string; filename: string; mime: string }
+ )[] = []
for (const part of params.prompt) {
switch (part.type) {
case "text": {
@@ -1390,7 +1396,13 @@ export namespace ACP {
type: "text",
text: resource.text,
})
- } else if ("blob" in resource && resource.blob !== "" && resource.mimeType !== null && resource.mimeType !== undefined && resource.mimeType !== "") {
+ } else if (
+ "blob" in resource &&
+ resource.blob !== "" &&
+ resource.mimeType !== null &&
+ resource.mimeType !== undefined &&
+ resource.mimeType !== ""
+ ) {
// Binary resource (PDFs, etc.): store as file part with data URL
const parsedResource = parseUri(resource.uri)
const filename = parsedResource.type === "file" ? parsedResource.filename : "file"
@@ -1430,11 +1442,7 @@ export namespace ACP {
const buildUsage = (msg: AssistantMessage): Usage => ({
totalTokens:
- msg.tokens.input +
- msg.tokens.output +
- msg.tokens.reasoning +
- msg.tokens.cache.read +
- msg.tokens.cache.write,
+ msg.tokens.input + msg.tokens.output + msg.tokens.reasoning + msg.tokens.cache.read + msg.tokens.cache.write,
inputTokens: msg.tokens.input,
outputTokens: msg.tokens.output,
thoughtTokens: msg.tokens.reasoning !== 0 ? msg.tokens.reasoning : undefined,
@@ -1569,10 +1577,7 @@ export namespace ACP {
}
}
- async function defaultModel(
- config: ACPConfig,
- cwd?: string,
- ): Promise<{ providerID: string; modelID: string }> {
+ async function defaultModel(config: ACPConfig, cwd?: string): Promise<{ providerID: string; modelID: string }> {
const sdk = config.sdk
const configured = config.defaultModel
if (configured !== undefined) return configured
@@ -1610,12 +1615,12 @@ export namespace ACP {
if (specified !== undefined && providers.length === 0) return specified
- const opencodeProvider = providers.find((p) => p.id === "opencode")
- if (opencodeProvider !== undefined) {
- if ("big-pickle" in opencodeProvider.models) {
- return { providerID: "opencode", modelID: "big-pickle" }
+ const orbitProvider = providers.find((p) => Provider.isOrbitProviderID(p.id))
+ if (orbitProvider !== undefined) {
+ if ("big-pickle" in orbitProvider.models) {
+ return { providerID: "orbit", modelID: "big-pickle" }
}
- const sorted = Provider.sort(Object.values(opencodeProvider.models) as Provider.Model[])
+ const sorted = Provider.sort(Object.values(orbitProvider.models) as Provider.Model[])
if (sorted.length > 0) {
return {
providerID: sorted[0].providerID,
@@ -1635,7 +1640,7 @@ export namespace ACP {
if (specified !== undefined) return specified
- return { providerID: "opencode", modelID: "big-pickle" }
+ return { providerID: "orbit", modelID: "big-pickle" }
}
function parseUri(
@@ -1748,14 +1753,14 @@ export namespace ACP {
variant?: string
availableVariants: string[]
}): {
- opencode: {
+ orbit: {
modelId: string
variant: string | null
availableVariants: string[]
}
} {
return {
- opencode: {
+ orbit: {
modelId: `${input.model.providerID}/${input.model.modelID}`,
variant: input.variant ?? null,
availableVariants: input.availableVariants,
diff --git a/Agent-backend/packages/opencode/src/acp/session.ts b/Agent-backend/packages/opencode/src/acp/session.ts
index c27f9f218..4a7f05847 100644
--- a/Agent-backend/packages/opencode/src/acp/session.ts
+++ b/Agent-backend/packages/opencode/src/acp/session.ts
@@ -1,8 +1,8 @@
-import { RequestError } from "@agentclientprotocol/sdk"
+import { RequestError } from "@agentclientprotocol/sdk"
import type { ACPSessionState } from "./types"
-import type {McpServer} from "@agentclientprotocol/sdk";
-import type { OpencodeClient } from "@opencode-ai/sdk/v2"
+import type { McpServer } from "@agentclientprotocol/sdk"
+import type { OpencodeClient } from "@orbit.build/sdk/v2"
import { Log } from "@/util/log"
diff --git a/Agent-backend/packages/opencode/src/acp/types.ts b/Agent-backend/packages/opencode/src/acp/types.ts
index de8ac5081..60d2c8332 100644
--- a/Agent-backend/packages/opencode/src/acp/types.ts
+++ b/Agent-backend/packages/opencode/src/acp/types.ts
@@ -1,5 +1,5 @@
import type { McpServer } from "@agentclientprotocol/sdk"
-import type { OpencodeClient } from "@opencode-ai/sdk/v2"
+import type { OpencodeClient } from "@orbit.build/sdk/v2"
export interface ACPSessionState {
id: string
diff --git a/Agent-backend/packages/opencode/src/agent/agent.ts b/Agent-backend/packages/opencode/src/agent/agent.ts
index ef2f660af..c1303358b 100644
--- a/Agent-backend/packages/opencode/src/agent/agent.ts
+++ b/Agent-backend/packages/opencode/src/agent/agent.ts
@@ -1,6 +1,6 @@
import path from "path"
-import { generateObject, streamObject } from "ai"
+import { generateObject, streamObject } from "ai"
import { mergeDeep, pipe, sortBy, values } from "remeda"
import z from "zod"
@@ -20,13 +20,12 @@ import PROMPT_SUMMARY from "./prompt/summary.txt"
import PROMPT_TITLE from "./prompt/title.txt"
import type { SharedV2ProviderOptions } from "@ai-sdk/provider"
-import type {ModelMessage} from "ai";
+import type { ModelMessage } from "ai"
import { Global } from "@/global"
import { PermissionNext } from "@/permission/next"
import { Plugin } from "@/plugin"
-
export namespace Agent {
export const Info = z
.object({
diff --git a/Agent-backend/packages/opencode/src/auth/index.ts b/Agent-backend/packages/opencode/src/auth/index.ts
index a1ef9fd5b..131e006c1 100644
--- a/Agent-backend/packages/opencode/src/auth/index.ts
+++ b/Agent-backend/packages/opencode/src/auth/index.ts
@@ -1,11 +1,16 @@
-import path from "path"
-
import z from "zod"
-import { Global } from "../global"
-import { Filesystem } from "../util/filesystem"
+import * as S from "./service"
+
+import type { Effect } from "effect"
+
+import { runtime } from "@/effect/runtime"
-export const OAUTH_DUMMY_KEY = "opencode-oauth-dummy-key"
+export { OAUTH_DUMMY_KEY } from "./service"
+
+function runPromise(f: (service: S.AuthService.Service) => Effect.Effect): Promise {
+ return runtime.runPromise(S.AuthService.use(f))
+}
export namespace Auth {
export const Oauth = z
@@ -37,41 +42,19 @@ export namespace Auth {
export const Info = z.discriminatedUnion("type", [Oauth, Api, WellKnown]).meta({ ref: "Auth" })
export type Info = z.infer
- const filepath = path.join(Global.Path.data, "auth.json")
-
export async function get(providerID: string): Promise {
- const auth = await all()
- return auth[providerID]
+ return runPromise((service) => service.get(providerID))
}
export async function all(): Promise> {
- const data = await Filesystem.readJson>(filepath).catch(() => ({}))
- return Object.entries(data).reduce>(
- (acc, [key, value]) => {
- const parsed = Info.safeParse(value)
- if (!parsed.success) return acc
- acc[key] = parsed.data
- return acc
- },
- {},
- )
+ return runPromise((service) => service.all())
}
export async function set(key: string, info: Info): Promise {
- const normalized = key.replace(/\/+$/, "")
- const data = await all()
- const cleaned = Object.fromEntries(
- Object.entries(data).filter(([k]) => k !== key && k !== normalized + "/"),
- )
- await Filesystem.writeJson(filepath, { ...cleaned, [normalized]: info }, 0o600)
+ return runPromise((service) => service.set(key, info))
}
export async function remove(key: string): Promise {
- const normalized = key.replace(/\/+$/, "")
- const data = await all()
- const cleaned = Object.fromEntries(
- Object.entries(data).filter(([k]) => k !== key && k !== normalized),
- )
- await Filesystem.writeJson(filepath, cleaned, 0o600)
+ return runPromise((service) => service.remove(key))
}
}
diff --git a/Agent-backend/packages/opencode/src/auth/service.ts b/Agent-backend/packages/opencode/src/auth/service.ts
new file mode 100644
index 000000000..9209cb612
--- /dev/null
+++ b/Agent-backend/packages/opencode/src/auth/service.ts
@@ -0,0 +1,119 @@
+import path from "path"
+
+import { Effect, Layer, Record, Result, Schema, ServiceMap } from "effect"
+
+import { Global } from "../global"
+import { Filesystem } from "../util/filesystem"
+
+export const OAUTH_DUMMY_KEY = "orbit-oauth-dummy-key"
+
+export class Oauth extends Schema.Class("OAuth")({
+ type: Schema.Literal("oauth"),
+ refresh: Schema.String,
+ access: Schema.String,
+ expires: Schema.Number,
+ accountId: Schema.optional(Schema.String),
+ enterpriseUrl: Schema.optional(Schema.String),
+}) {}
+
+export class Api extends Schema.Class("ApiAuth")({
+ type: Schema.Literal("api"),
+ key: Schema.String,
+}) {}
+
+export class WellKnown extends Schema.Class("WellKnownAuth")({
+ type: Schema.Literal("wellknown"),
+ key: Schema.String,
+ token: Schema.String,
+}) {}
+
+export const Info = Schema.Union([Oauth, Api, WellKnown])
+export type Info = Schema.Schema.Type
+
+export class AuthServiceError extends Schema.TaggedErrorClass()("AuthServiceError", {
+ message: Schema.String,
+ cause: Schema.optional(Schema.Defect),
+}) {}
+
+const file = path.join(Global.Path.data, "auth.json")
+
+const fail = (message: string) => (cause: unknown) => new AuthServiceError({ message, cause })
+
+function canonicalKey(key: string): string {
+ const normalized = key.replace(/\/+$/, "")
+ if (normalized === "opencode") return "orbit"
+ return normalized
+}
+
+function relatedKeys(key: string): string[] {
+ const normalized = canonicalKey(key)
+ if (normalized === "orbit") return ["orbit", "opencode"]
+ return [normalized]
+}
+
+export namespace AuthService {
+ export interface Service {
+ readonly get: (providerID: string) => Effect.Effect
+ readonly all: () => Effect.Effect, AuthServiceError>
+ readonly set: (key: string, info: Info) => Effect.Effect
+ readonly remove: (key: string) => Effect.Effect
+ }
+}
+
+export class AuthService extends ServiceMap.Service()("@orbit/Auth") {
+ static readonly layer = Layer.effect(
+ AuthService,
+ Effect.sync(() => {
+ const decode = Schema.decodeUnknownOption(Info)
+
+ const all = Effect.fn("AuthService.all")(() =>
+ Effect.tryPromise({
+ try: async () => {
+ const data = await Filesystem.readJson>(file).catch(() => ({}))
+ return Record.filterMap(data, (value) => Result.fromOption(decode(value), () => undefined))
+ },
+ catch: fail("Failed to read auth data"),
+ }),
+ )
+
+ const get = Effect.fn("AuthService.get")(function* (providerID: string) {
+ const data = yield* all()
+ for (const key of relatedKeys(providerID)) {
+ if (key in data) return data[key]
+ }
+ return undefined
+ })
+
+ const set = Effect.fn("AuthService.set")(function* (key: string, info: Info) {
+ const norm = canonicalKey(key)
+ const data = yield* all()
+ const cleanup = new Set([...relatedKeys(key), ...relatedKeys(key).map((item) => item + "/"), key])
+ const next = Object.fromEntries(Object.entries(data).filter(([item]) => !cleanup.has(item)))
+ yield* Effect.tryPromise({
+ try: () => Filesystem.writeJson(file, { ...next, [norm]: info }, 0o600),
+ catch: fail("Failed to write auth data"),
+ })
+ })
+
+ const remove = Effect.fn("AuthService.remove")(function* (key: string) {
+ const norm = canonicalKey(key)
+ const data = yield* all()
+ const cleanup = new Set([...relatedKeys(key), ...relatedKeys(key).map((item) => item + "/"), key, norm])
+ const next = Object.fromEntries(Object.entries(data).filter(([item]) => !cleanup.has(item)))
+ yield* Effect.tryPromise({
+ try: () => Filesystem.writeJson(file, next, 0o600),
+ catch: fail("Failed to write auth data"),
+ })
+ })
+
+ return AuthService.of({
+ get,
+ all,
+ set,
+ remove,
+ })
+ }),
+ )
+
+ static readonly defaultLayer = AuthService.layer
+}
diff --git a/Agent-backend/packages/opencode/src/bun/index.ts b/Agent-backend/packages/opencode/src/bun/index.ts
index 3ff81a5a4..c7d6cbb71 100644
--- a/Agent-backend/packages/opencode/src/bun/index.ts
+++ b/Agent-backend/packages/opencode/src/bun/index.ts
@@ -1,7 +1,6 @@
-import { text } from "node:stream/consumers"
import path from "path"
-import { NamedError } from "@opencode-ai/util/error"
+import { NamedError } from "@orbit.build/util/error"
import z from "zod"
import { Global } from "../global"
@@ -17,32 +16,29 @@ import { proxied } from "@/util/proxied"
export namespace BunProc {
const log = Log.create({ service: "bun" })
- export async function run(cmd: string[], options?: Process.Options): Promise> {
+ export async function run(cmd: string[], options?: Process.RunOptions): Promise {
+ const full = [which(), ...cmd]
log.info("running", {
- cmd: [which(), ...cmd],
+ cmd: full,
...options,
})
- const result = Process.spawn([which(), ...cmd], {
- ...options,
- stdout: "pipe",
- stderr: "pipe",
+ const result = await Process.run(full, {
+ cwd: options?.cwd,
+ abort: options?.abort,
+ kill: options?.kill,
+ timeout: options?.timeout,
+ nothrow: options?.nothrow,
env: {
...process.env,
...options?.env,
BUN_BE_BUN: "1",
},
})
- const code = await result.exited
- const stdout = result.stdout ? await text(result.stdout) : undefined
- const stderr = result.stderr ? await text(result.stderr) : undefined
log.info("done", {
- code,
- stdout,
- stderr,
+ code: result.code,
+ stdout: result.stdout.toString(),
+ stderr: result.stderr.toString(),
})
- if (code !== 0) {
- throw new Error(`Command failed with exit code ${String(code)}`)
- }
return result
}
@@ -89,7 +85,7 @@ export namespace BunProc {
"--force",
"--exact",
// TODO: get rid of this case (see: https://github.com/oven-sh/bun/issues/19936)
- ...(proxied() || process.env.CI !== undefined ? ["--no-cache"] : []),
+ ...(proxied() || process.env.CI ? ["--no-cache"] : []),
"--cwd",
Global.Path.cache,
pkg + "@" + version,
@@ -122,7 +118,7 @@ export namespace BunProc {
const installedPkg = await Filesystem.readJson<{ version?: string }>(path.join(mod, "package.json")).catch(
() => null,
)
- if (installedPkg?.version !== undefined) {
+ if (installedPkg?.version) {
resolvedVersion = installedPkg.version
}
}
diff --git a/Agent-backend/packages/opencode/src/bus/bus-event.ts b/Agent-backend/packages/opencode/src/bus/bus-event.ts
index b0ff0243c..66bd6692e 100644
--- a/Agent-backend/packages/opencode/src/bus/bus-event.ts
+++ b/Agent-backend/packages/opencode/src/bus/bus-event.ts
@@ -3,12 +3,14 @@ import z from "zod"
import type { ZodType } from "zod"
export namespace BusEvent {
-
export type Definition = ReturnType
const registry = new Map()
- export function define(type: Type, properties: Properties): {
+ export function define(
+ type: Type,
+ properties: Properties,
+ ): {
type: Type
properties: Properties
} {
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/account.ts b/Agent-backend/packages/opencode/src/cli/cmd/account.ts
new file mode 100644
index 000000000..c55479a62
--- /dev/null
+++ b/Agent-backend/packages/opencode/src/cli/cmd/account.ts
@@ -0,0 +1,232 @@
+import { Duration, Effect, Match, Option } from "effect"
+import open from "open"
+
+import * as Prompt from "../effect/prompt"
+import { UI } from "../ui"
+
+import { cmd } from "./cmd"
+
+import type { AccountError } from "@/account/schema"
+import type { AccountID, OrgID, PollResult } from "@/account/service"
+
+import { AccountService, PollExpired } from "@/account/service"
+import { runtime } from "@/effect/runtime"
+
+const openBrowser = (url: string): Effect.Effect =>
+ Effect.promise(() =>
+ open(url)
+ .then(() => undefined)
+ .catch(() => undefined),
+ )
+
+const println = (msg: string): Effect.Effect =>
+ Effect.sync(() => {
+ UI.println(msg)
+ })
+
+const loginEffect = Effect.fn("login")(function* (url: string) {
+ const service = yield* AccountService
+
+ yield* Prompt.intro("Log in")
+ const login = yield* service.login(url)
+
+ yield* Prompt.log.info("Go to: " + login.url)
+ yield* Prompt.log.info("Enter code: " + login.user)
+ yield* openBrowser(login.url)
+
+ const s = Prompt.spinner()
+ yield* s.start("Waiting for authorization...")
+
+ const poll = (wait: Duration.Duration): Effect.Effect =>
+ Effect.gen(function* () {
+ yield* Effect.sleep(wait)
+ const result = yield* service.poll(login)
+ if (result._tag === "PollPending") return yield* poll(wait)
+ if (result._tag === "PollSlow") return yield* poll(Duration.sum(wait, Duration.seconds(5)))
+ return result
+ })
+
+ const result = yield* poll(login.interval).pipe(
+ Effect.timeout(login.expiry),
+ Effect.catchTag("TimeoutError", () => Effect.succeed(new PollExpired())),
+ )
+
+ yield* Match.valueTags(result, {
+ PollSuccess: (value) =>
+ Effect.gen(function* () {
+ yield* s.stop("Logged in as " + value.email)
+ yield* Prompt.outro("Done")
+ }),
+ PollExpired: () => s.stop("Device code expired", 1),
+ PollDenied: () => s.stop("Authorization denied", 1),
+ PollError: (value) => s.stop("Error: " + String(value.cause), 1),
+ PollPending: () => s.stop("Unexpected state", 1),
+ PollSlow: () => s.stop("Unexpected state", 1),
+ })
+})
+
+const logoutEffect = Effect.fn("logout")(function* (email?: string) {
+ const service = yield* AccountService
+ const accounts = yield* service.list()
+ if (accounts.length === 0) return yield* println("Not logged in")
+
+ if (email) {
+ const match = accounts.find((account) => account.email === email)
+ if (!match) return yield* println("Account not found: " + email)
+ yield* service.remove(match.id)
+ yield* Prompt.outro("Logged out from " + email)
+ return
+ }
+
+ const active = yield* service.active()
+ const activeID = Option.map(active, (account) => account.id)
+
+ yield* Prompt.intro("Log out")
+
+ const opts = accounts.map((account) => {
+ const isActive = Option.isSome(activeID) && activeID.value === account.id
+ const server = UI.Style.TEXT_DIM + account.url + UI.Style.TEXT_NORMAL
+ return {
+ value: account,
+ label: isActive ? `${account.email} ${server}` + UI.Style.TEXT_DIM + " (active)" : `${account.email} ${server}`,
+ }
+ })
+
+ const selected = yield* Prompt.select({ message: "Select account to log out", options: opts })
+ if (Option.isNone(selected)) return
+
+ yield* service.remove(selected.value.id)
+ yield* Prompt.outro("Logged out from " + selected.value.email)
+})
+
+interface OrgChoice {
+ orgID: OrgID
+ accountID: AccountID
+ label: string
+}
+
+const switchEffect = Effect.fn("switch")(function* () {
+ const service = yield* AccountService
+ const groups = yield* service.orgsByAccount()
+ if (groups.length === 0) return yield* println("Not logged in")
+
+ const active = yield* service.active()
+ const activeOrgID = Option.flatMap(active, (account) => Option.fromNullishOr(account.active_org_id))
+
+ const opts = groups.flatMap((group) =>
+ group.orgs.map((org) => {
+ const isActive = Option.isSome(activeOrgID) && activeOrgID.value === org.id
+ return {
+ value: { orgID: org.id, accountID: group.account.id, label: org.name },
+ label: isActive
+ ? `${org.name} (${group.account.email})` + UI.Style.TEXT_DIM + " (active)"
+ : `${org.name} (${group.account.email})`,
+ }
+ }),
+ )
+ if (opts.length === 0) return yield* println("No orgs found")
+
+ yield* Prompt.intro("Switch org")
+
+ const selected = yield* Prompt.select({ message: "Select org", options: opts })
+ if (Option.isNone(selected)) return
+
+ yield* service.use(selected.value.accountID, Option.some(selected.value.orgID))
+ yield* Prompt.outro("Switched to " + selected.value.label)
+})
+
+const orgsEffect = Effect.fn("orgs")(function* () {
+ const service = yield* AccountService
+
+ const groups = yield* service.orgsByAccount()
+ if (groups.length === 0) return yield* println("No accounts found")
+ if (!groups.some((group) => group.orgs.length > 0)) return yield* println("No orgs found")
+
+ const active = yield* service.active()
+ const activeOrgID = Option.flatMap(active, (account) => Option.fromNullishOr(account.active_org_id))
+
+ for (const group of groups) {
+ for (const org of group.orgs) {
+ const isActive = Option.isSome(activeOrgID) && activeOrgID.value === org.id
+ const dot = isActive ? UI.Style.TEXT_SUCCESS + "●" + UI.Style.TEXT_NORMAL : " "
+ const name = isActive ? UI.Style.TEXT_HIGHLIGHT_BOLD + org.name + UI.Style.TEXT_NORMAL : org.name
+ const email = UI.Style.TEXT_DIM + group.account.email + UI.Style.TEXT_NORMAL
+ const id = UI.Style.TEXT_DIM + org.id + UI.Style.TEXT_NORMAL
+ yield* println(` ${dot} ${name} ${email} ${id}`)
+ }
+ }
+})
+
+export const LoginCommand = cmd({
+ command: "login ",
+ describe: false,
+ builder: (yargs) =>
+ yargs.positional("url", {
+ describe: "server URL",
+ type: "string",
+ demandOption: true,
+ }),
+ async handler(args) {
+ UI.empty()
+ await runtime.runPromise(loginEffect(args.url))
+ },
+})
+
+export const LogoutCommand = cmd({
+ command: "logout [email]",
+ describe: false,
+ builder: (yargs) =>
+ yargs.positional("email", {
+ describe: "account email to log out from",
+ type: "string",
+ }),
+ async handler(args) {
+ UI.empty()
+ await runtime.runPromise(logoutEffect(args.email))
+ },
+})
+
+export const SwitchCommand = cmd({
+ command: "switch",
+ describe: false,
+ async handler() {
+ UI.empty()
+ await runtime.runPromise(switchEffect())
+ },
+})
+
+export const OrgsCommand = cmd({
+ command: "orgs",
+ describe: false,
+ async handler() {
+ UI.empty()
+ await runtime.runPromise(orgsEffect())
+ },
+})
+
+export const ConsoleCommand = cmd({
+ command: "console",
+ describe: false,
+ builder: (yargs) =>
+ yargs
+ .command({
+ ...LoginCommand,
+ describe: "log in to console",
+ })
+ .command({
+ ...LogoutCommand,
+ describe: "log out from console",
+ })
+ .command({
+ ...SwitchCommand,
+ describe: "switch active org",
+ })
+ .command({
+ ...OrgsCommand,
+ describe: "list orgs",
+ })
+ .demandCommand(),
+ handler() {
+ // parent command
+ },
+})
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/acp.ts b/Agent-backend/packages/opencode/src/cli/cmd/acp.ts
index 0b1ef5ded..dd6f4c2c5 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/acp.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/acp.ts
@@ -1,5 +1,5 @@
import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk"
-import { createOpencodeClient } from "@opencode-ai/sdk/v2"
+import { createOpencodeClient } from "@orbit.build/sdk/v2"
import { bootstrap } from "../bootstrap"
import { withNetworkOptions, resolveNetworkOptions } from "../network"
@@ -50,8 +50,12 @@ export const AcpCommand = cmd({
process.stdin.on("data", (chunk: Buffer) => {
controller.enqueue(new Uint8Array(chunk))
})
- process.stdin.on("end", () => { controller.close(); })
- process.stdin.on("error", (err) => { controller.error(err); })
+ process.stdin.on("end", () => {
+ controller.close()
+ })
+ process.stdin.on("error", (err) => {
+ controller.error(err)
+ })
},
})
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/agent.ts b/Agent-backend/packages/opencode/src/cli/cmd/agent.ts
index 8f8c6a5f6..8b3426c37 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/agent.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/agent.ts
@@ -12,7 +12,6 @@ import { Provider } from "../../provider/provider"
import { Filesystem } from "../../util/filesystem"
import { UI } from "../ui"
-
import { cmd } from "./cmd"
import type { Argv } from "yargs"
@@ -127,7 +126,8 @@ const AgentCreateCommand = cmd({
const model = args.model ? Provider.parseModel(args.model) : undefined
const generated = await Agent.generate({ description, model }).catch((error: unknown) => {
spinner.stop(`LLM failed to generate agent: ${error instanceof Error ? error.message : String(error)}`, 1)
- if (cliPath !== undefined && cliDescription !== undefined && cliMode !== undefined && cliTools !== undefined) process.exit(1)
+ if (cliPath !== undefined && cliDescription !== undefined && cliMode !== undefined && cliTools !== undefined)
+ process.exit(1)
throw new UI.CancelledError()
})
spinner.stop(`Agent ${generated.identifier} generated`)
@@ -207,7 +207,12 @@ const AgentCreateCommand = cmd({
await fs.mkdir(targetPath, { recursive: true })
if (Filesystem.exists(filePath)) {
- if (cliPath !== undefined && cliDescription !== undefined && cliMode !== undefined && cliTools !== undefined) {
+ if (
+ cliPath !== undefined &&
+ cliDescription !== undefined &&
+ cliMode !== undefined &&
+ cliTools !== undefined
+ ) {
console.error(`Error: Agent file already exists: ${filePath}`)
process.exit(1)
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/db.ts b/Agent-backend/packages/opencode/src/cli/cmd/db.ts
index e31306d15..cfc69fe73 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/db.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/db.ts
@@ -9,8 +9,6 @@ import { UI } from "../ui"
import { cmd } from "./cmd"
-
-
import type { Argv } from "yargs"
const QueryCommand = cmd({
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/debug/agent.ts b/Agent-backend/packages/opencode/src/cli/cmd/debug/agent.ts
index 5810d2abd..84b8756b1 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/debug/agent.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/debug/agent.ts
@@ -2,11 +2,12 @@ import { EOL } from "os"
import { basename } from "path"
import { Agent } from "../../../agent/agent"
-import { Identifier } from "../../../id/id"
import { PermissionNext } from "../../../permission/next"
import { Instance } from "../../../project/instance"
import { Provider } from "../../../provider/provider"
+import { ModelID, ProviderID } from "../../../provider/schema"
import { Session } from "../../../session"
+import { MessageID, PartID } from "../../../session/schema"
import { ToolRegistry } from "../../../tool/registry"
import { iife } from "../../../util/iife"
import { bootstrap } from "../../bootstrap"
@@ -74,14 +75,15 @@ export const AgentCommand = cmd({
})
async function getAvailableTools(agent: Agent.Info): Promise {
- const model = agent.model ?? (await Provider.defaultModel())
+ const rawModel = agent.model ?? (await Provider.defaultModel())
+ const model = {
+ providerID: ProviderID.make(rawModel.providerID),
+ modelID: ModelID.make(rawModel.modelID),
+ }
return ToolRegistry.tools(model, agent)
}
-function resolveTools(
- agent: Agent.Info,
- availableTools: AvailableTool[],
-): Record {
+function resolveTools(agent: Agent.Info, availableTools: AvailableTool[]): Record {
const disabled = PermissionNext.disabled(
availableTools.map((tool: AvailableTool) => tool.id),
agent.permission,
@@ -132,7 +134,7 @@ async function createToolContext(agent: Agent.Info): Promise<{
ask: (req: Omit) => Promise
}> {
const session = await Session.create({ title: `Debug tool run (${agent.name})` })
- const messageID = Identifier.ascending("message")
+ const messageID = MessageID.ascending()
const model = agent.model ?? (await Provider.defaultModel())
const now = Date.now()
const message: MessageV2.Assistant = {
@@ -143,8 +145,8 @@ async function createToolContext(agent: Agent.Info): Promise<{
created: now,
},
parentID: messageID,
- modelID: model.modelID,
- providerID: model.providerID,
+ modelID: ModelID.make(model.modelID),
+ providerID: ProviderID.make(model.providerID),
mode: "debug",
agent: agent.name,
path: {
@@ -169,7 +171,7 @@ async function createToolContext(agent: Agent.Info): Promise<{
return {
sessionID: session.id,
messageID,
- callID: Identifier.ascending("part"),
+ callID: PartID.ascending(),
agent: agent.name,
abort: new AbortController().signal,
messages: [],
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/export.ts b/Agent-backend/packages/opencode/src/cli/cmd/export.ts
index f92e1c4b1..ff9ff4d5d 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/export.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/export.ts
@@ -3,6 +3,7 @@ import { EOL } from "os"
import * as prompts from "@clack/prompts"
import { Session } from "../../session"
+import { SessionID } from "../../session/schema"
import { bootstrap } from "../bootstrap"
import { UI } from "../ui"
@@ -10,8 +11,6 @@ import { cmd } from "./cmd"
import type { Argv } from "yargs"
-
-
export const ExportCommand = cmd({
command: "export [sessionID]",
describe: "export session data as JSON",
@@ -23,7 +22,7 @@ export const ExportCommand = cmd({
},
handler: async (args) => {
await bootstrap(process.cwd(), async () => {
- let sessionID = args.sessionID
+ let sessionID = args.sessionID ? SessionID.make(args.sessionID) : undefined
process.stderr.write(`Exporting session: ${sessionID ?? "latest"}\n`)
if (!sessionID) {
@@ -33,7 +32,7 @@ export const ExportCommand = cmd({
})
const sessions = []
- for (const session of Session.list()) {
+ for await (const session of Session.list()) {
sessions.push(session)
}
@@ -72,8 +71,8 @@ export const ExportCommand = cmd({
}
try {
- const sessionInfo = Session.get(sessionID)
- const messages = Session.messages({ sessionID: sessionID })
+ const sessionInfo = await Session.get(sessionID!)
+ const messages = await Session.messages({ sessionID: sessionInfo.id })
const exportData = {
info: sessionInfo,
@@ -86,7 +85,7 @@ export const ExportCommand = cmd({
process.stdout.write(JSON.stringify(exportData, null, 2))
process.stdout.write(EOL)
} catch {
- UI.error(`Session not found: ${sessionID}`)
+ UI.error(`Session not found: ${sessionID!}`)
process.exit(1)
}
})
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/generate.ts b/Agent-backend/packages/opencode/src/cli/cmd/generate.ts
index 4e3d87376..a0111d93c 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/generate.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/generate.ts
@@ -15,7 +15,7 @@ export const GenerateCommand = {
{
lang: "js",
source: [
- `import { createOrbitClient } from "@opencode-ai/sdk`,
+ `import { createOrbitClient } from "@orbit.build/sdk`,
``,
`const client = createOrbitClient()`,
`await client.${opId}({`,
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/github.ts b/Agent-backend/packages/opencode/src/cli/cmd/github.ts
index 0f6f0168d..2f77a831c 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/github.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/github.ts
@@ -10,11 +10,12 @@ import { Octokit } from "@octokit/rest"
import { map, pipe, sortBy, values } from "remeda"
import { Bus } from "../../bus"
-import { Identifier } from "../../id/id"
import { ModelsDev } from "../../provider/models"
import { Provider } from "../../provider/provider"
+import { ModelID, ProviderID } from "../../provider/schema"
import { Session } from "../../session"
import { MessageV2 } from "../../session/message-v2"
+import { MessageID, PartID } from "../../session/schema"
import { Filesystem } from "../../util/filesystem"
import { bootstrap } from "../bootstrap"
import { UI } from "../ui"
@@ -31,7 +32,6 @@ import type {
PullRequestEvent,
} from "@octokit/webhooks-types"
-
import { Instance } from "@/project/instance"
import { SessionPrompt } from "@/session/prompt"
import { git } from "@/util/git"
@@ -144,9 +144,9 @@ interface InstallationResponse {
installation?: unknown
}
-const AGENT_USERNAME = "opencode-agent[bot]"
+const AGENT_USERNAME = "orbit-agent[bot]"
const AGENT_REACTION = "eyes"
-const WORKFLOW_FILE = ".github/workflows/opencode.yml"
+const WORKFLOW_FILE = ".github/workflows/orbit.yml"
// Event categories for routing
// USER_EVENTS: triggered by user actions, have actor/issueId, support reactions/comments
@@ -255,7 +255,7 @@ export const GithubInstallCommand = cmd({
"",
" 3. Go to a GitHub issue and comment `/oc summarize` to see the agent in action",
"",
- " Learn more about the GitHub agent - https://opencode.ai/docs/github/#usage-examples",
+ " Learn more about the GitHub agent - https://orbit.build/docs/github/#usage-examples",
].join("\n"),
)
}
@@ -334,10 +334,13 @@ export const GithubInstallCommand = cmd({
// Get installation
const installation = await getInstallation()
- if (installation !== undefined && installation !== null) { s.stop("GitHub app already installed"); return; }
+ if (installation !== undefined && installation !== null) {
+ s.stop("GitHub app already installed")
+ return
+ }
// Open browser
- const url = "https://github.com/apps/opencode-agent"
+ const url = "https://github.com/apps/orbit-agent"
const command =
process.platform === "darwin"
? `open "${url}"`
@@ -374,9 +377,8 @@ export const GithubInstallCommand = cmd({
async function getInstallation(): Promise {
const data = await fetch(
- `https://api.opencode.ai/get_github_app_installation?owner=${app.owner}&repo=${app.repo}`,
- )
- .then((res) => res.json() as Promise)
+ `https://api.orbit.build/get_github_app_installation?owner=${app.owner}&repo=${app.repo}`,
+ ).then((res) => res.json() as Promise)
return data.installation
}
}
@@ -417,7 +419,7 @@ jobs:
persist-credentials: false
- name: Run orbit
- uses: anomalyco/opencode/github@latest${envStr}
+ uses: anomalyco/orbit/github@latest${envStr}
with:
model: ${provider}/${model}`,
)
@@ -487,13 +489,13 @@ export const GithubRunCommand = cmd({
? (payload as IssueCommentEvent | IssuesEvent).issue.number
: (payload as PullRequestEvent | PullRequestReviewCommentEvent).pull_request.number
const runUrl = `/${owner}/${repo}/actions/runs/${runId}`
- const shareBaseUrl = isMock ? "https://dev.opencode.ai" : "https://opencode.ai"
+ const shareBaseUrl = isMock ? "https://dev.opencode.ai" : "https://orbit.build"
let appToken: string
let octoRest: Octokit
let octoGraph: typeof graphql
let gitConfig: string
- let session: { id: string; title: string; version: string }
+ let session: Session.Info
let shareId: string | undefined
let exitCode = 0
type PromptFiles = Awaited>["promptFiles"]
@@ -555,7 +557,7 @@ export const GithubRunCommand = cmd({
await addReaction(commentType)
}
- // Setup opencode session
+ // Setup orbit session
const repoData = await fetchRepo()
session = await Session.create({
permission: [
@@ -746,7 +748,7 @@ export const GithubRunCommand = cmd({
function normalizeOidcBaseUrl(): string {
const value = process.env.OIDC_BASE_URL
- if (!value) return "https://api.opencode.ai"
+ if (!value) return "https://api.orbit.build"
return value.replace(/\/+$/, "")
}
@@ -962,22 +964,22 @@ export const GithubRunCommand = cmd({
const result = await SessionPrompt.prompt({
sessionID: session.id,
- messageID: Identifier.ascending("message"),
+ messageID: MessageID.ascending(),
variant,
model: {
- providerID,
- modelID,
+ providerID: ProviderID.make(providerID),
+ modelID: ModelID.make(modelID),
},
// agent is omitted - server will use default_agent from config or fall back to "build"
parts: [
{
- id: Identifier.ascending("part"),
+ id: PartID.ascending(),
type: "text",
text: message,
},
...files.flatMap((f) => [
{
- id: Identifier.ascending("part"),
+ id: PartID.ascending(),
type: "file" as const,
mime: f.mime,
url: `data:${f.mime};base64,${f.content}`,
@@ -1016,16 +1018,16 @@ export const GithubRunCommand = cmd({
console.log("Requesting summary from agent...")
const summary = await SessionPrompt.prompt({
sessionID: session.id,
- messageID: Identifier.ascending("message"),
+ messageID: MessageID.ascending(),
variant,
model: {
- providerID,
- modelID,
+ providerID: ProviderID.make(providerID),
+ modelID: ModelID.make(modelID),
},
tools: { "*": false }, // Disable all tools to force text response
parts: [
{
- id: Identifier.ascending("part"),
+ id: PartID.ascending(),
type: "text",
text: "Summarize the actions (tool calls & reasoning) you did for the user in 1-2 sentences.",
},
@@ -1054,7 +1056,7 @@ export const GithubRunCommand = cmd({
async function getOidcToken(): Promise {
try {
- return await core.getIDToken("opencode-github-action")
+ return await core.getIDToken("orbit-github-action")
} catch (error: unknown) {
console.error("Failed to get OIDC token:", error instanceof Error ? error.message : String(error))
throw new Error(
@@ -1161,7 +1163,12 @@ export const GithubRunCommand = cmd({
return `orbit/${type}${String(issueId ?? "")}-${timestamp}`
}
- async function pushToNewBranch(summary: string, branch: string, commit: boolean, isSchedule: boolean): Promise {
+ async function pushToNewBranch(
+ summary: string,
+ branch: string,
+ commit: boolean,
+ isSchedule: boolean,
+ ): Promise {
console.log("Pushing to new branch...")
if (commit) {
await gitRun(["add", "."])
@@ -1195,7 +1202,10 @@ export const GithubRunCommand = cmd({
await gitRun(["push", "fork", `HEAD:${remoteBranch}`])
}
- async function branchIsDirty(originalHead: string, expectedBranch: string): Promise<{
+ async function branchIsDirty(
+ originalHead: string,
+ expectedBranch: string,
+ ): Promise<{
dirty: boolean
uncommittedChanges: boolean
switched: boolean
@@ -1256,7 +1266,8 @@ export const GithubRunCommand = cmd({
throw new Error(`Failed to check permissions for user ${String(actor)}: ${String(error)}`, { cause: error })
}
- if (!["admin", "write"].includes(permission)) throw new Error(`User ${String(actor)} does not have write permissions`)
+ if (!["admin", "write"].includes(permission))
+ throw new Error(`User ${String(actor)} does not have write permissions`)
}
async function addReaction(reactionCommentType?: "issue" | "pr_review"): Promise {
@@ -1493,7 +1504,7 @@ query($owner: String!, $repo: String!, $number: Int!) {
function buildPromptDataForIssue(issue: GitHubIssue): string {
// Only called for non-schedule events, so payload is defined
- const comments = (issue.comments.nodes)
+ const comments = issue.comments.nodes
.filter((c) => {
const id = parseInt(c.databaseId)
return id !== triggerCommentId
@@ -1618,16 +1629,20 @@ query($owner: String!, $repo: String!, $number: Int!) {
function buildPromptDataForPR(pr: GitHubPullRequest): string {
// Only called for non-schedule events, so payload is defined
- const comments = (pr.comments.nodes)
+ const comments = pr.comments.nodes
.filter((c) => {
const id = parseInt(c.databaseId)
return id !== triggerCommentId
})
.map((c) => `- ${c.author.login} at ${c.createdAt}: ${c.body}`)
- const files = pr.files.nodes.map((f) => `- ${f.path} (${f.changeType}) +${String(f.additions)}/-${String(f.deletions)}`)
+ const files = pr.files.nodes.map(
+ (f) => `- ${f.path} (${f.changeType}) +${String(f.additions)}/-${String(f.deletions)}`,
+ )
const reviewData = pr.reviews.nodes.map((r) => {
- const reviewComments = r.comments.nodes.map((c) => ` - ${c.path}:${c.line !== null ? String(c.line) : "?"}: ${c.body}`)
+ const reviewComments = r.comments.nodes.map(
+ (c) => ` - ${c.path}:${c.line !== null ? String(c.line) : "?"}: ${c.body}`,
+ )
return [
`- ${r.author.login} at ${r.submittedAt}:`,
` - Review body: ${r.body}`,
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/import.ts b/Agent-backend/packages/opencode/src/cli/cmd/import.ts
index 0b8a85181..351a43e6f 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/import.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/import.ts
@@ -2,6 +2,7 @@ import { EOL } from "os"
import { Instance } from "../../project/instance"
import { Session } from "../../session"
+import { MessageV2 } from "../../session/message-v2"
import { SessionTable, MessageTable, PartTable } from "../../session/session.sql"
import { ShareNext } from "../../share/share-next"
import { Database } from "../../storage/db"
@@ -10,7 +11,7 @@ import { bootstrap } from "../bootstrap"
import { cmd } from "./cmd"
-import type { Session as SDKSession, Message, Part } from "@opencode-ai/sdk/v2"
+import type { Session as SDKSession, Message, Part } from "@orbit.build/sdk/v2"
import type { Argv } from "yargs"
/** Discriminated union returned by the ShareNext API (GET /api/share/:id/data) */
@@ -23,10 +24,18 @@ export type ShareData =
/** Extract share ID from a share URL like https://opncd.ai/share/abc123 */
export function parseShareUrl(url: string): string | null {
- const match = /^https?:\/\/[^/]+\/share\/([a-zA-Z0-9_-]+)$/.exec(url)
+ const match = url.match(/^https?:\/\/[^/]+\/share\/([a-zA-Z0-9_-]+)$/)
return match ? match[1] : null
}
+export function shouldAttachShareAuthHeaders(shareUrl: string, accountBaseUrl: string): boolean {
+ try {
+ return new URL(shareUrl).origin === new URL(accountBaseUrl).origin
+ } catch {
+ return false
+ }
+}
+
/**
* Transform ShareNext API response (flat array) into the nested structure for local file storage.
*
@@ -37,7 +46,7 @@ export function parseShareUrl(url: string): string | null {
*/
export function transformShareData(shareData: ShareData[]): {
info: SDKSession
- messages: { info: Message; parts: Part[] }[]
+ messages: Array<{ info: Message; parts: Part[] }>
} | null {
const sessionItem = shareData.find((d) => d.type === "session")
if (!sessionItem) return null
@@ -52,10 +61,7 @@ export function transformShareData(shareData: ShareData[]): {
if (!partMap.has(item.data.messageID)) {
partMap.set(item.data.messageID, [])
}
- const parts = partMap.get(item.data.messageID)
- if (parts !== undefined) {
- parts.push(item.data)
- }
+ partMap.get(item.data.messageID)!.push(item.data)
}
}
@@ -84,11 +90,11 @@ export const ImportCommand = cmd({
await bootstrap(process.cwd(), async () => {
let exportData:
| {
- info: Session.Info
- messages: {
+ info: SDKSession
+ messages: Array<{
info: Message
parts: Part[]
- }[]
+ }>
}
| undefined
@@ -103,8 +109,21 @@ export const ImportCommand = cmd({
return
}
- const baseUrl = await ShareNext.url()
- const response = await fetch(`${baseUrl}/api/share/${slug}/data`)
+ const parsed = new URL(args.file)
+ const baseUrl = parsed.origin
+ const req = await ShareNext.request()
+ const headers = shouldAttachShareAuthHeaders(args.file, req.baseUrl) ? req.headers : {}
+
+ const dataPath = req.api.data(slug)
+ let response = await fetch(`${baseUrl}${dataPath}`, {
+ headers,
+ })
+
+ if (!response.ok && dataPath !== `/api/share/${slug}/data`) {
+ response = await fetch(`${baseUrl}/api/share/${slug}/data`, {
+ headers,
+ })
+ }
if (!response.ok) {
process.stdout.write(`Failed to fetch share data: ${response.statusText}`)
@@ -112,7 +131,7 @@ export const ImportCommand = cmd({
return
}
- const shareData = (await response.json()) as ShareData[]
+ const shareData: ShareData[] = await response.json()
const transformed = transformShareData(shareData)
if (!transformed) {
@@ -131,41 +150,55 @@ export const ImportCommand = cmd({
}
}
- const row = { ...Session.toRow(exportData.info), project_id: Instance.project.id }
+ if (!exportData) {
+ process.stdout.write("Failed to read session data")
+ process.stdout.write(EOL)
+ return
+ }
+
+ const info = Session.Info.parse({
+ ...exportData.info,
+ projectID: Instance.project.id,
+ })
+ const row = Session.toRow(info)
Database.use((db) =>
- { db
+ db
.insert(SessionTable)
.values(row)
.onConflictDoUpdate({ target: SessionTable.id, set: { project_id: row.project_id } })
- .run(); },
+ .run(),
)
for (const msg of exportData.messages) {
+ const msgInfo = MessageV2.Info.parse(msg.info)
+ const { id, sessionID: _sessionID, ...msgData } = msgInfo
Database.use((db) =>
- { db
+ db
.insert(MessageTable)
.values({
- id: msg.info.id,
- session_id: exportData.info.id,
- time_created: msg.info.time.created,
- data: msg.info,
+ id,
+ session_id: row.id,
+ time_created: msgInfo.time?.created ?? Date.now(),
+ data: msgData,
})
.onConflictDoNothing()
- .run(); },
+ .run(),
)
for (const part of msg.parts) {
+ const partInfo = MessageV2.Part.parse(part)
+ const { id: partId, sessionID: _sessionID, messageID, ...partData } = partInfo
Database.use((db) =>
- { db
+ db
.insert(PartTable)
.values({
- id: part.id,
- message_id: msg.info.id,
- session_id: exportData.info.id,
- data: part,
+ id: partId,
+ message_id: messageID,
+ session_id: row.id,
+ data: partData,
})
.onConflictDoNothing()
- .run(); },
+ .run(),
)
}
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/mcp.ts b/Agent-backend/packages/opencode/src/cli/cmd/mcp.ts
index 11ee99b37..4ca8bb72e 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/mcp.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/mcp.ts
@@ -664,7 +664,7 @@ export const McpDebugCommand = cmd({
params: {
protocolVersion: "2024-11-05",
capabilities: {},
- clientInfo: { name: "opencode-debug", version: Installation.VERSION },
+ clientInfo: { name: "orbit-debug", version: Installation.VERSION },
},
id: 1,
}),
@@ -707,7 +707,7 @@ export const McpDebugCommand = cmd({
try {
const client = new Client({
- name: "opencode-debug",
+ name: "orbit-debug",
version: Installation.VERSION,
})
await client.connect(transport)
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/models.ts b/Agent-backend/packages/opencode/src/cli/cmd/models.ts
index 2bcc0e2dd..77c87a4e3 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/models.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/models.ts
@@ -9,7 +9,6 @@ import { cmd } from "./cmd"
import type { Argv } from "yargs"
-
export const ModelsCommand = cmd({
command: "models [provider]",
describe: "list all available models",
@@ -64,10 +63,10 @@ export const ModelsCommand = cmd({
}
const providerIDs = Object.keys(providers).sort((a, b) => {
- const aIsOpencode = a.startsWith("opencode")
- const bIsOpencode = b.startsWith("opencode")
- if (aIsOpencode && !bIsOpencode) return -1
- if (!aIsOpencode && bIsOpencode) return 1
+ const aIsOrbit = a.startsWith("orbit")
+ const bIsOrbit = b.startsWith("orbit")
+ if (aIsOrbit && !bIsOrbit) return -1
+ if (!aIsOrbit && bIsOrbit) return 1
return a.localeCompare(b)
})
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/pr.ts b/Agent-backend/packages/opencode/src/cli/cmd/pr.ts
index 93dc06e13..099499370 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/pr.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/pr.ts
@@ -92,7 +92,7 @@ export const PrCommand = cmd({
})
}
- // Check for opencode session link in PR body
+ // Check for orbit session link in PR body
if (typeof prInfo.body === "string" && prInfo.body.length > 0) {
const sessionMatch = /https:\/\/opncd\.ai\/s\/([a-zA-Z0-9_-]+)/.exec(prInfo.body)
if (sessionMatch) {
@@ -122,20 +122,20 @@ export const PrCommand = cmd({
UI.println("Starting orbit...")
UI.println()
- // Launch opencode TUI with session ID if available
+ // Launch orbit TUI with session ID if available
const { spawn } = await import("child_process")
- const opencodeArgs = sessionId ? ["-s", sessionId] : []
- const opencodeProcess = spawn("orbit", opencodeArgs, {
+ const orbitArgs = sessionId ? ["-s", sessionId] : []
+ const orbitProcess = spawn("orbit", orbitArgs, {
stdio: "inherit",
cwd: process.cwd(),
})
await new Promise((resolve, reject) => {
- opencodeProcess.on("exit", (code) => {
+ orbitProcess.on("exit", (code) => {
if (code === 0) resolve()
else reject(new Error(`orbit exited with code ${String(code)}`))
})
- opencodeProcess.on("error", reject)
+ orbitProcess.on("error", reject)
})
},
})
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/auth.ts b/Agent-backend/packages/opencode/src/cli/cmd/providers.ts
similarity index 79%
rename from Agent-backend/packages/opencode/src/cli/cmd/auth.ts
rename to Agent-backend/packages/opencode/src/cli/cmd/providers.ts
index 6adf0de4a..f9d9a3ee9 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/auth.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/providers.ts
@@ -1,5 +1,4 @@
import { text } from "node:stream/consumers"
-import { setTimeout as sleep } from "node:timers/promises"
import os from "os"
import path from "path"
@@ -17,15 +16,10 @@ import { UI } from "../ui"
import { cmd } from "./cmd"
-import type { Hooks } from "@opencode-ai/plugin"
-
+import type { Hooks } from "@orbit.build/plugin"
type PluginAuth = NonNullable
-/**
- * Handle plugin-based authentication flow.
- * Returns true if auth was handled, false if it should fall through to default handling.
- */
async function handlePluginAuth(plugin: { auth: PluginAuth }, provider: string, methodName?: string): Promise {
let index = 0
if (methodName) {
@@ -38,28 +32,23 @@ async function handlePluginAuth(plugin: { auth: PluginAuth }, provider: string,
}
index = match
} else if (plugin.auth.methods.length > 1) {
- const selected = await prompts.select({
+ const method = await prompts.select({
message: "Login method",
- options: [
- ...plugin.auth.methods.map((x, index) => ({
- label: x.label,
- value: index.toString(),
- })),
- ],
+ options: plugin.auth.methods.map((x, methodIndex) => ({
+ label: x.label,
+ value: methodIndex.toString(),
+ })),
})
- if (prompts.isCancel(selected)) throw new UI.CancelledError()
- index = parseInt(selected)
+ if (prompts.isCancel(method)) throw new UI.CancelledError()
+ index = parseInt(method)
}
const method = plugin.auth.methods[index]
- // Handle prompts for all auth types
- await sleep(10)
+ await new Promise((resolve) => setTimeout(resolve, 10))
const inputs: Record = {}
if (method.prompts) {
for (const prompt of method.prompts) {
- if (prompt.condition && !prompt.condition(inputs)) {
- continue
- }
+ if (prompt.condition && !prompt.condition(inputs)) continue
if (prompt.type === "select") {
const value = await prompts.select({
message: prompt.message,
@@ -68,10 +57,11 @@ async function handlePluginAuth(plugin: { auth: PluginAuth }, provider: string,
if (prompts.isCancel(value)) throw new UI.CancelledError()
inputs[prompt.key] = value
} else {
+ const validate = prompt.validate
const value = await prompts.text({
message: prompt.message,
placeholder: prompt.placeholder,
- validate: prompt.validate ? (v) => prompt.validate?.(v ?? "") : undefined,
+ validate: validate ? (v) => validate(v ?? "") : undefined,
})
if (prompts.isCancel(value)) throw new UI.CancelledError()
inputs[prompt.key] = value
@@ -154,43 +144,35 @@ async function handlePluginAuth(plugin: { auth: PluginAuth }, provider: string,
return true
}
- // After the OAuth branch above returned, method.type is narrowed to "api"
- {
- if (method.authorize) {
- const result = await method.authorize(inputs)
- if (result.type === "failed") {
- prompts.log.error("Failed to authorize")
- }
- if (result.type === "success") {
- const saveProvider = result.provider ?? provider
- await Auth.set(saveProvider, {
- type: "api",
- key: result.key,
- })
- prompts.log.success("Login successful")
- }
- prompts.outro("Done")
- return true
+ if (method.authorize) {
+ const result = await method.authorize(inputs)
+ if (result.type === "failed") {
+ prompts.log.error("Failed to authorize")
+ }
+ if (result.type === "success") {
+ const saveProvider = result.provider ?? provider
+ await Auth.set(saveProvider, {
+ type: "api",
+ key: result.key,
+ })
+ prompts.log.success("Login successful")
}
+ prompts.outro("Done")
+ return true
}
return false
}
-/**
- * Build a deduplicated list of plugin-registered auth providers that are not
- * already present in models.dev, respecting enabled/disabled provider lists.
- * Pure function with no side effects; safe to test without mocking.
- */
export function resolvePluginProviders(input: {
hooks: Hooks[]
existingProviders: Record
disabled: Set
enabled?: Set
providerNames: Record
-}): { id: string; name: string }[] {
+}): Array<{ id: string; name: string }> {
const seen = new Set()
- const result: { id: string; name: string }[] = []
+ const result: Array<{ id: string; name: string }> = []
for (const hook of input.hooks) {
if (!hook.auth) continue
@@ -209,21 +191,20 @@ export function resolvePluginProviders(input: {
return result
}
-export const AuthCommand = cmd({
- command: "auth",
- describe: "manage credentials",
+export const ProvidersCommand = cmd({
+ command: "providers",
+ aliases: ["auth"],
+ describe: "manage AI providers and credentials",
builder: (yargs) =>
- yargs.command(AuthLoginCommand).command(AuthLogoutCommand).command(AuthListCommand).demandCommand(),
- handler() {
- // parent command — noop
- },
+ yargs.command(ProvidersListCommand).command(ProvidersLoginCommand).command(ProvidersLogoutCommand).demandCommand(),
+ async handler() {},
})
-export const AuthListCommand = cmd({
+export const ProvidersListCommand = cmd({
command: "list",
aliases: ["ls"],
- describe: "list providers",
- async handler() {
+ describe: "list providers and credentials",
+ async handler(_args) {
UI.empty()
const authPath = path.join(Global.Path.data, "auth.json")
const homedir = os.homedir()
@@ -233,15 +214,13 @@ export const AuthListCommand = cmd({
const database = await ModelsDev.get()
for (const [providerID, result] of results) {
- const entry = database[providerID]
- const name = entry.name
+ const name = database[providerID]?.name || providerID
prompts.log.info(`${name} ${UI.Style.TEXT_DIM}${result.type}`)
}
- prompts.outro(`${String(results.length)} credentials`)
+ prompts.outro(`${results.length} credentials`)
- // Environment variables section
- const activeEnvVars: { provider: string; envVar: string }[] = []
+ const activeEnvVars: Array<{ provider: string; envVar: string }> = []
for (const [providerID, provider] of Object.entries(database)) {
for (const envVar of provider.env) {
@@ -262,12 +241,12 @@ export const AuthListCommand = cmd({
prompts.log.info(`${provider} ${UI.Style.TEXT_DIM}${envVar}`)
}
- prompts.outro(`${String(activeEnvVars.length)} environment variable` + (activeEnvVars.length === 1 ? "" : "s"))
+ prompts.outro(`${activeEnvVars.length} environment variable` + (activeEnvVars.length === 1 ? "" : "s"))
}
},
})
-export const AuthLoginCommand = cmd({
+export const ProvidersLoginCommand = cmd({
command: "login [url]",
describe: "log in to a provider",
builder: (yargs) =>
@@ -321,9 +300,7 @@ export const AuthLoginCommand = cmd({
prompts.outro("Done")
return
}
- await ModelsDev.refresh().catch(() => {
- // refresh failure is non-fatal
- })
+ await ModelsDev.refresh().catch(() => {})
const config = await Config.get()
@@ -341,11 +318,12 @@ export const AuthLoginCommand = cmd({
})
const priority: Record = {
+ orbit: 0,
opencode: 0,
- anthropic: 1,
+ openai: 1,
"github-copilot": 2,
- openai: 3,
- google: 4,
+ google: 3,
+ anthropic: 4,
openrouter: 5,
vercel: 6,
}
@@ -362,14 +340,13 @@ export const AuthLoginCommand = cmd({
values(),
sortBy(
(x) => priority[x.id] ?? 99,
- (x) => x.name,
+ (x) => x.name ?? x.id,
),
map((x) => ({
label: x.name,
value: x.id,
hint: {
- opencode: "recommended",
- anthropic: "Claude Max or API key",
+ anthropic: "API key",
openai: "ChatGPT Plus/Pro or API key",
}[x.id],
})),
@@ -405,11 +382,11 @@ export const AuthLoginCommand = cmd({
],
})
if (prompts.isCancel(selected)) throw new UI.CancelledError()
- provider = selected
+ provider = selected as string
}
- const plugin = await Plugin.list().then((x) => x.findLast((x) => x.auth?.provider === provider))
- if (plugin?.auth) {
+ const plugin = await Plugin.list().then((x) => x.findLast((item) => item.auth?.provider === provider))
+ if (plugin && plugin.auth) {
const handled = await handlePluginAuth({ auth: plugin.auth }, provider, args.method)
if (handled) return
}
@@ -417,14 +394,13 @@ export const AuthLoginCommand = cmd({
if (provider === "other") {
const custom = await prompts.text({
message: "Enter provider id",
- validate: (x) => (x?.match(/^[0-9a-z-]+$/) ? undefined : "a-z, 0-9 and hyphens only"),
+ validate: (x) => (x && x.match(/^[0-9a-z-]+$/) ? undefined : "a-z, 0-9 and hyphens only"),
})
if (prompts.isCancel(custom)) throw new UI.CancelledError()
provider = custom.replace(/^@ai-sdk\//, "")
- // Check if a plugin provides auth for this custom provider
- const customPlugin = await Plugin.list().then((x) => x.findLast((x) => x.auth?.provider === provider))
- if (customPlugin?.auth) {
+ const customPlugin = await Plugin.list().then((x) => x.findLast((item) => item.auth?.provider === provider))
+ if (customPlugin && customPlugin.auth) {
const handled = await handlePluginAuth({ auth: customPlugin.auth }, provider, args.method)
if (handled) return
}
@@ -444,7 +420,7 @@ export const AuthLoginCommand = cmd({
)
}
- if (provider === "opencode") {
+ if (provider === "orbit" || provider === "opencode") {
prompts.log.info("Create an api key at https://opencode.ai/auth")
}
@@ -454,7 +430,7 @@ export const AuthLoginCommand = cmd({
if (["cloudflare", "cloudflare-ai-gateway"].includes(provider)) {
prompts.log.info(
- "Cloudflare AI Gateway can be configured with CLOUDFLARE_GATEWAY_ID, CLOUDFLARE_ACCOUNT_ID, and CLOUDFLARE_API_TOKEN environment variables. Read more: https://opencode.ai/docs/providers/#cloudflare-ai-gateway",
+ "Cloudflare AI Gateway can be configured with CLOUDFLARE_GATEWAY_ID, CLOUDFLARE_ACCOUNT_ID, and CLOUDFLARE_API_TOKEN environment variables. Read more: https://orbit.build/docs/providers/#cloudflare-ai-gateway",
)
}
@@ -474,10 +450,10 @@ export const AuthLoginCommand = cmd({
},
})
-export const AuthLogoutCommand = cmd({
+export const ProvidersLogoutCommand = cmd({
command: "logout",
describe: "log out from a configured provider",
- async handler() {
+ async handler(_args) {
UI.empty()
const credentials = await Auth.all().then((x) => Object.entries(x))
prompts.intro("Remove credential")
@@ -489,7 +465,7 @@ export const AuthLogoutCommand = cmd({
const providerID = await prompts.select({
message: "Select provider",
options: credentials.map(([key, value]) => ({
- label: (database[key].name || key) + UI.Style.TEXT_DIM + " (" + value.type + ")",
+ label: (database[key]?.name || key) + UI.Style.TEXT_DIM + " (" + value.type + ")",
value: key,
})),
})
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/run.ts b/Agent-backend/packages/opencode/src/cli/cmd/run.ts
index 5c079d09e..d79cedc5c 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/run.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/run.ts
@@ -2,7 +2,7 @@ import { EOL } from "os"
import path from "path"
import { pathToFileURL } from "url"
-import { createOpencodeClient } from "@opencode-ai/sdk/v2"
+import { createOpencodeClient } from "@orbit.build/sdk/v2"
import { Agent } from "../../agent/agent"
import { Flag } from "../../flag/flag"
@@ -30,7 +30,7 @@ import type { Tool } from "../../tool/tool"
import type { WebFetchTool } from "../../tool/webfetch"
import type { WebSearchTool } from "../../tool/websearch"
import type { WriteTool } from "../../tool/write"
-import type { OpencodeClient, ToolPart } from "@opencode-ai/sdk/v2"
+import type { OpencodeClient, ToolPart } from "@orbit.build/sdk/v2"
import type { Argv } from "yargs"
interface ToolProps {
@@ -119,9 +119,8 @@ function read(info: ToolProps): void {
if (key === "filePath") return false
return typeof value === "string" || typeof value === "number" || typeof value === "boolean"
})
- const description = pairs.length > 0
- ? `[${pairs.map(([key, value]) => `${key}=${String(value)}`).join(", ")}]`
- : undefined
+ const description =
+ pairs.length > 0 ? `[${pairs.map(([key, value]) => `${key}=${String(value)}`).join(", ")}]` : undefined
inline({
icon: "→",
title: `Read ${file}`,
@@ -419,22 +418,63 @@ export const RunCommand = cmd({
async function execute(sdk: OpencodeClient): Promise {
function tool(part: ToolPart): void {
try {
- if (part.tool === "bash") { bash(props(part)); return; }
- if (part.tool === "glob") { glob(props(part)); return; }
- if (part.tool === "grep") { grep(props(part)); return; }
- if (part.tool === "list") { list(props(part)); return; }
- if (part.tool === "read") { read(props(part)); return; }
- if (part.tool === "write") { write(props(part)); return; }
- if (part.tool === "webfetch") { webfetch(props(part)); return; }
- if (part.tool === "edit") { edit(props(part)); return; }
- if (part.tool === "codesearch") { codesearch(props(part)); return; }
- if (part.tool === "websearch") { websearch(props(part)); return; }
- if (part.tool === "task") { task(props(part)); return; }
- if (part.tool === "todowrite") { todo(props(part)); return; }
- if (part.tool === "skill") { skill(props(part)); return; }
- fallback(part); return;
+ if (part.tool === "bash") {
+ bash(props(part))
+ return
+ }
+ if (part.tool === "glob") {
+ glob(props(part))
+ return
+ }
+ if (part.tool === "grep") {
+ grep(props(part))
+ return
+ }
+ if (part.tool === "list") {
+ list(props(part))
+ return
+ }
+ if (part.tool === "read") {
+ read(props(part))
+ return
+ }
+ if (part.tool === "write") {
+ write(props(part))
+ return
+ }
+ if (part.tool === "webfetch") {
+ webfetch(props(part))
+ return
+ }
+ if (part.tool === "edit") {
+ edit(props(part))
+ return
+ }
+ if (part.tool === "codesearch") {
+ codesearch(props(part))
+ return
+ }
+ if (part.tool === "websearch") {
+ websearch(props(part))
+ return
+ }
+ if (part.tool === "task") {
+ task(props(part))
+ return
+ }
+ if (part.tool === "todowrite") {
+ todo(props(part))
+ return
+ }
+ if (part.tool === "skill") {
+ skill(props(part))
+ return
+ }
+ fallback(part)
+ return
} catch {
- fallback(part); return;
+ fallback(part)
+ return
}
}
@@ -670,7 +710,8 @@ export const RunCommand = cmd({
return { Authorization: auth }
})()
const sdk = createOpencodeClient({ baseUrl: args.attach, directory, headers })
- await execute(sdk); return;
+ await execute(sdk)
+ return
}
await bootstrap(process.cwd(), async () => {
@@ -678,7 +719,7 @@ export const RunCommand = cmd({
const request = new Request(input, init)
return Server.Default().fetch(request)
}) as typeof globalThis.fetch
- const sdk = createOpencodeClient({ baseUrl: "http://opencode.internal", fetch: fetchFn })
+ const sdk = createOpencodeClient({ baseUrl: "http://orbit.internal", fetch: fetchFn })
await execute(sdk)
})
},
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/session.ts b/Agent-backend/packages/opencode/src/cli/cmd/session.ts
index e678044d4..b763717b4 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/session.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/session.ts
@@ -3,6 +3,7 @@ import path from "path"
import { Flag } from "../../flag/flag"
import { Session } from "../../session"
+import { SessionID } from "../../session/schema"
import { Filesystem } from "../../util/filesystem"
import { Locale } from "../../util/locale"
import { Process } from "../../util/process"
@@ -48,9 +49,7 @@ export const SessionCommand = cmd({
command: "session",
describe: "manage sessions",
builder: (yargs: Argv) => yargs.command(SessionListCommand).command(SessionDeleteCommand).demandCommand(),
- handler() {
- // parent command - noop
- },
+ async handler() {},
})
export const SessionDeleteCommand = cmd({
@@ -65,13 +64,14 @@ export const SessionDeleteCommand = cmd({
},
handler: async (args) => {
await bootstrap(process.cwd(), async () => {
+ const sessionID = SessionID.make(args.sessionID)
try {
- Session.get(args.sessionID)
+ await Session.get(sessionID)
} catch {
UI.error(`Session not found: ${args.sessionID}`)
process.exit(1)
}
- await Session.remove(args.sessionID)
+ await Session.remove(sessionID)
UI.println(UI.Style.TEXT_SUCCESS_BOLD + `Session ${args.sessionID} deleted` + UI.Style.TEXT_NORMAL)
})
},
@@ -109,8 +109,7 @@ export const SessionListCommand = cmd({
output = formatSessionTable(sessions)
}
- const shouldPaginate =
- process.stdout.isTTY && (args.maxCount === undefined || args.maxCount === 0) && args.format === "table"
+ const shouldPaginate = process.stdout.isTTY && !args.maxCount && args.format === "table"
if (shouldPaginate) {
const proc = Process.spawn(pagerCmd(), {
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/stats.ts b/Agent-backend/packages/opencode/src/cli/cmd/stats.ts
index 833f3f083..3c9f5b179 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/stats.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/stats.ts
@@ -9,8 +9,6 @@ import { cmd } from "./cmd"
import type { Project } from "../../project/project"
import type { Argv } from "yargs"
-
-
interface SessionStats {
totalSessions: number
totalMessages: number
@@ -215,8 +213,7 @@ export function aggregateSessionStats(days?: number, projectFilter?: string): Se
sessionTokens.cache.write += message.info.tokens.cache.write
sessionModelUsage[modelKey].tokens.input += message.info.tokens.input
- sessionModelUsage[modelKey].tokens.output +=
- message.info.tokens.output + message.info.tokens.reasoning
+ sessionModelUsage[modelKey].tokens.output += message.info.tokens.output + message.info.tokens.reasoning
sessionModelUsage[modelKey].tokens.cache.read += message.info.tokens.cache.read
sessionModelUsage[modelKey].tokens.cache.write += message.info.tokens.cache.write
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/app.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/app.tsx
index 0cac6a40d..a4a793a8c 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/app.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/app.tsx
@@ -23,7 +23,7 @@ import { DialogProvider, useDialog } from "@tui/ui/dialog"
import { Clipboard } from "@tui/util/clipboard"
import { Selection } from "@tui/util/selection"
import open from "open"
-import { Switch, Match, createEffect, untrack, ErrorBoundary, createSignal, onMount, batch, on } from "solid-js"
+import { Switch, Match, createEffect, ErrorBoundary, createSignal, onMount, batch, on } from "solid-js"
import { FrecencyProvider } from "./component/prompt/frecency"
import { PromptHistoryProvider } from "./component/prompt/history"
@@ -34,12 +34,10 @@ import { KVProvider, useKV } from "./context/kv"
import { PromptRefProvider, usePromptRef } from "./context/prompt"
import { TuiConfigProvider } from "./context/tui-config"
import { TuiEvent } from "./event"
-import { DialogAlert } from "./ui/dialog-alert"
import { DialogHelp } from "./ui/dialog-help"
import { ToastProvider, useToast } from "./ui/toast"
import { win32DisableProcessedInput, win32FlushInputBuffer, win32InstallCtrlCGuard } from "./win32"
-
import type { Args } from "./context/args"
import type { EventSource } from "./context/sdk"
import type { TuiConfig } from "@/config/tui"
@@ -124,91 +122,91 @@ export function tui(input: {
// promise to prevent immediate exit
return new Promise((resolve) => {
void (async (): Promise => {
- const unguard = win32InstallCtrlCGuard()
- win32DisableProcessedInput()
+ const unguard = win32InstallCtrlCGuard()
+ win32DisableProcessedInput()
- const mode = await getTerminalBackgroundColor()
+ const mode = await getTerminalBackgroundColor()
- // Re-clear after getTerminalBackgroundColor() — setRawMode(false) restores
- // the original console mode which re-enables ENABLE_PROCESSED_INPUT.
- win32DisableProcessedInput()
+ // Re-clear after getTerminalBackgroundColor() — setRawMode(false) restores
+ // the original console mode which re-enables ENABLE_PROCESSED_INPUT.
+ win32DisableProcessedInput()
- const onExit = (): Promise => {
- unguard?.()
- resolve()
- return Promise.resolve()
- }
+ const onExit = (): Promise => {
+ unguard?.()
+ resolve()
+ return Promise.resolve()
+ }
- void render(
- () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
- return (
-
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment -- opentui JSX element
- }
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )
- },
- {
- targetFps: 60,
- gatherStats: false,
- exitOnCtrlC: false,
- useKittyKeyboard: {},
- autoFocus: false,
- openConsoleOnError: false,
- consoleOptions: {
- keyBindings: [{ name: "y", ctrl: true, action: "copy-selection" }],
- onCopySelection: (text) => {
- Clipboard.copy(text).catch((error: unknown) => {
- console.error(`Failed to copy console selection to clipboard: ${String(error)}`)
- })
+ void render(
+ () => {
+ return (
+ (
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- opentui JSX element
+
+ )}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+ },
+ {
+ targetFps: 60,
+ gatherStats: false,
+ exitOnCtrlC: false,
+ useKittyKeyboard: {},
+ autoFocus: false,
+ openConsoleOnError: false,
+ consoleOptions: {
+ keyBindings: [{ name: "y", ctrl: true, action: "copy-selection" }],
+ onCopySelection: (text) => {
+ Clipboard.copy(text).catch((error: unknown) => {
+ console.error(`Failed to copy console selection to clipboard: ${String(error)}`)
+ })
+ },
},
},
- },
- )
+ )
})()
})
}
@@ -227,7 +225,9 @@ function App(): JSX.Element {
const themeCtx = useTheme()
const { theme } = themeCtx
const mode = (): "dark" | "light" => themeCtx.mode()
- const setMode = (m: "dark" | "light"): void => { themeCtx.setMode(m) }
+ const setMode = (m: "dark" | "light"): void => {
+ themeCtx.setMode(m)
+ }
const sync = useSync()
const exit = useExit()
const promptRef = usePromptRef()
@@ -266,8 +266,12 @@ function App(): JSX.Element {
if (!text || text.length === 0) return
void Clipboard.copy(text)
- .then(() => { toast.show({ message: "Copied to clipboard", variant: "info" }); })
- .catch((err: unknown) => { toast.error(err); })
+ .then(() => {
+ toast.show({ message: "Copied to clipboard", variant: "info" })
+ })
+ .catch((err: unknown) => {
+ toast.error(err)
+ })
renderer.clearSelection()
}
@@ -303,12 +307,14 @@ function App(): JSX.Element {
if (args.agent) local.agent.set(args.agent)
if (args.model) {
const { providerID, modelID } = Provider.parseModel(args.model)
- if (!providerID || !modelID)
- { toast.show({
+ if (!providerID || !modelID) {
+ toast.show({
variant: "warning",
message: `Invalid model format: ${args.model}`,
duration: 3000,
- }); return; }
+ })
+ return
+ }
local.model.set({ providerID, modelID }, { recent: true })
}
// Handle --session without --fork immediately (fork is handled in createEffect below)
@@ -366,7 +372,6 @@ function App(): JSX.Element {
(isEmpty, wasEmpty) => {
// only trigger when we transition into an empty-provider state
if (!isEmpty || wasEmpty) return
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
),
@@ -385,7 +390,6 @@ function App(): JSX.Element {
aliases: ["resume", "continue"],
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
},
@@ -400,7 +404,6 @@ function App(): JSX.Element {
name: "workspaces",
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
},
@@ -420,9 +423,12 @@ function App(): JSX.Element {
const current = promptRef.current
// Don't require focus - if there's any text, preserve it
const currentPrompt = current?.current.input ? current.current : undefined
+ const workspaceID =
+ route.data.type === "session" ? sync.session.get(route.data.sessionID)?.workspaceID : undefined
route.navigate({
type: "home",
initialPrompt: currentPrompt,
+ workspaceID,
})
dialog.clear()
},
@@ -437,7 +443,6 @@ function App(): JSX.Element {
name: "models",
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
},
@@ -490,7 +495,6 @@ function App(): JSX.Element {
name: "agents",
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
},
@@ -502,7 +506,6 @@ function App(): JSX.Element {
name: "mcps",
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
},
@@ -544,7 +547,6 @@ function App(): JSX.Element {
name: "connect",
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
category: "Provider",
@@ -557,7 +559,6 @@ function App(): JSX.Element {
name: "status",
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
category: "System",
@@ -570,7 +571,6 @@ function App(): JSX.Element {
name: "themes",
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
category: "System",
@@ -591,7 +591,6 @@ function App(): JSX.Element {
name: "help",
},
onSelect: () => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
dialog.replace(() => )
},
category: "System",
@@ -600,7 +599,9 @@ function App(): JSX.Element {
title: "Open docs",
value: "docs.open",
onSelect: () => {
- open("https://opencode.ai/docs").catch(() => { /* noop */ })
+ open("https://orbit.build/docs").catch(() => {
+ /* noop */
+ })
dialog.clear()
},
category: "System",
@@ -612,7 +613,9 @@ function App(): JSX.Element {
name: "exit",
aliases: ["quit", "q"],
},
- onSelect: () => { void exit() },
+ onSelect: () => {
+ void exit()
+ },
category: "System",
},
{
@@ -699,20 +702,6 @@ function App(): JSX.Element {
},
])
- createEffect(() => {
- const currentModel = local.model.current()
- if (!currentModel) return
- if (currentModel.providerID === "openrouter" && !kv.get("openrouter_warning", false)) {
- untrack(() => {
- void DialogAlert.show(
- dialog,
- "Warning",
- "While openrouter is a convenient way to access LLMs your request will often be routed to subpar providers that do not work well in our testing.\n\nFor reliable access to models check out OpenCode Zen\nhttps://opencode.ai/zen",
- ).then(() => { kv.set("openrouter_warning", true); })
- })
- }
- })
-
sdk.event.on(TuiEvent.CommandExecute.type, (evt) => {
command.trigger(evt.properties.command)
})
@@ -772,7 +761,6 @@ function App(): JSX.Element {
})
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX element
return (
@@ -872,7 +859,13 @@ function ErrorComponent(props: {
Reset TUI
- { void handleExit() }} backgroundColor={colors.primary} padding={1}>
+ {
+ void handleExit()
+ }}
+ backgroundColor={colors.primary}
+ padding={1}
+ >
Exit
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-agent.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-agent.tsx
index a67d068d1..adf0add34 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-agent.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-agent.tsx
@@ -19,7 +19,6 @@ export function DialogAgent(): JSX.Element {
}),
)
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types resolve to error type
return (
const ctx = createContext()
@@ -53,7 +45,9 @@ function init(): {
const keybind = useKeybind()
const entries = createMemo(() => {
- const all = registrations().flatMap((x) => x()).filter(Boolean)
+ const all = registrations()
+ .flatMap((x) => x())
+ .filter(Boolean)
return all.map((x) => ({
...x,
footer: x.keybind ? keybind.print(x.keybind) : undefined,
@@ -106,7 +100,9 @@ function init(): {
display: "/" + slash.name,
description: option.description ?? option.title,
aliases: slash.aliases?.map((alias) => "/" + alias),
- onSelect: () => { result.trigger(option.value); },
+ onSelect: () => {
+ result.trigger(option.value)
+ },
}
})
},
@@ -115,7 +111,6 @@ function init(): {
},
suspended,
show(): void {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
},
register(cb: () => CommandOption[]): void {
@@ -153,7 +148,6 @@ export function CommandProvider(props: ParentProps): JSX.Element {
}
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return {props.children}
}
@@ -163,6 +157,5 @@ function DialogCommand(props: { options: CommandOption[]; suggestedOptions: Comm
if (ref?.filter) return props.options
return [...props.suggestedOptions, ...props.options]
}
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (ref = r)} title="Commands" options={list()} />
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx
index 54a494f77..fd9d372d2 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx
@@ -2,29 +2,25 @@ import { TextAttributes } from "@opentui/core"
import { useLocal } from "@tui/context/local"
import { useSDK } from "@tui/context/sdk"
import { useSync } from "@tui/context/sync"
-import { DialogSelect } from "@tui/ui/dialog-select"
+import { DialogSelect } from "@tui/ui/dialog-select"
import { map, pipe, entries, sortBy } from "remeda"
import { createMemo, createSignal } from "solid-js"
import { useTheme } from "../context/theme"
-import type {DialogSelectRef, DialogSelectOption} from "@tui/ui/dialog-select";
+import type { DialogSelectRef, DialogSelectOption } from "@tui/ui/dialog-select"
import type { JSX } from "solid-js"
import { Keybind } from "@/util/keybind"
-
function Status(props: { enabled: boolean; loading: boolean }): JSX.Element {
const { theme } = useTheme()
if (props.loading) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return ⋯ Loading
}
if (props.enabled) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return ✓ Enabled
}
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return ○ Disabled
}
@@ -82,7 +78,6 @@ export function DialogMcp(): JSX.Element {
},
])
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{
const sync = useSync()
return createMemo(() =>
- sync.data.provider.some((x) => x.id !== "opencode" || Object.values(x.models).some((y) => y.cost.input !== 0)),
+ sync.data.provider.some((x) => x.id !== "orbit" || Object.values(x.models).some((y) => y.cost.input !== 0)),
)
}
@@ -38,8 +37,11 @@ export function DialogModel(props: { providerID?: string }): JSX.Element {
const favorites = connected() ? local.model.favorite() : []
const recents = local.model.recent()
- function toOptions(items: typeof favorites, category: string): {
- key: typeof items[number]
+ function toOptions(
+ items: typeof favorites,
+ category: string,
+ ): {
+ key: (typeof items)[number]
value: { providerID: string; modelID: string }
title: string
description: string
@@ -60,8 +62,8 @@ export function DialogModel(props: { providerID?: string }): JSX.Element {
title: model.name,
description: provider.name,
category,
- disabled: provider.id === "opencode" && model.id.includes("-nano"),
- footer: model.cost.input === 0 && provider.id === "opencode" ? "Free" : undefined,
+ disabled: provider.id === "orbit" && model.id.includes("-nano"),
+ footer: model.cost.input === 0 && provider.id === "orbit" ? "Free" : undefined,
onSelect: () => {
dialog.clear()
local.model.set({ providerID: provider.id, modelID: model.id }, { recent: true })
@@ -82,7 +84,7 @@ export function DialogModel(props: { providerID?: string }): JSX.Element {
const providerOptions = pipe(
sync.data.provider,
sortBy(
- (provider) => provider.id !== "opencode",
+ (provider) => provider.id !== "orbit",
(provider) => provider.name,
),
flatMap((provider) =>
@@ -98,8 +100,8 @@ export function DialogModel(props: { providerID?: string }): JSX.Element {
? "(Favorite)"
: undefined,
category: connected() ? provider.name : undefined,
- disabled: provider.id === "opencode" && model.includes("-nano"),
- footer: info.cost.input === 0 && provider.id === "opencode" ? "Free" : undefined,
+ disabled: provider.id === "orbit" && model.includes("-nano"),
+ footer: info.cost.input === 0 && provider.id === "orbit" ? "Free" : undefined,
onSelect() {
dialog.clear()
local.model.set({ providerID: provider.id, modelID: model }, { recent: true })
@@ -148,7 +150,6 @@ export function DialogModel(props: { providerID?: string }): JSX.Element {
const title = createMemo(() => provider()?.name ?? "Select model")
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
[number]["value"]>
options={options()}
@@ -157,7 +158,6 @@ export function DialogModel(props: { providerID?: string }): JSX.Element {
keybind: keybind.all.model_provider_list[0],
title: connected() ? "Connect provider" : "View all providers",
onTrigger() {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
},
},
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx
index 5c27a1364..ae54bff9b 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx
@@ -15,12 +15,11 @@ import { useToast } from "../ui/toast"
import { DialogModel } from "./dialog-model"
-import type { ProviderAuthAuthorization } from "@opencode-ai/sdk/v2"
+import type { ProviderAuthAuthorization } from "@orbit.build/sdk/v2"
import type { Accessor, JSX } from "solid-js"
-
-
const PROVIDER_PRIORITY: Record = {
+ orbit: 0,
opencode: 0,
"opencode-go": 1,
openai: 2,
@@ -29,13 +28,15 @@ const PROVIDER_PRIORITY: Record = {
google: 5,
}
-export function createDialogProviderOptions(): Accessor<{
- title: string
- value: string
- description: string | undefined
- category: string
- onSelect: () => Promise
-}[]> {
+export function createDialogProviderOptions(): Accessor<
+ {
+ title: string
+ value: string
+ description: string | undefined
+ category: string
+ onSelect: () => Promise
+ }[]
+> {
const sync = useSync()
const dialog = useDialog()
const sdk = useSDK()
@@ -47,8 +48,7 @@ export function createDialogProviderOptions(): Accessor<{
title: provider.name,
value: provider.id,
description: {
- opencode: "(Recommended)",
- anthropic: "(Claude Max or API key)",
+ anthropic: "(API key)",
openai: "(ChatGPT Plus/Pro or API key)",
"opencode-go": "Low cost subscription for everyone",
}[provider.id],
@@ -65,7 +65,6 @@ export function createDialogProviderOptions(): Accessor<{
index = await new Promise((resolve) => {
dialog.replace(
() => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{ resolve(option.value); }}
+ onSelect={(option) => {
+ resolve(option.value)
+ }}
/>
)
},
- () => { resolve(null); },
+ () => {
+ resolve(null)
+ },
)
})
}
@@ -92,9 +95,13 @@ export function createDialogProviderOptions(): Accessor<{
const codeAuth = result.data
const codeIndex = index
dialog.replace(() => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
-
+
)
})
}
@@ -102,16 +109,20 @@ export function createDialogProviderOptions(): Accessor<{
const autoAuth = result.data
const autoIndex = index
dialog.replace(() => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
-
+
)
})
}
}
if (method.type === "api") {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
- dialog.replace(() => ); return;
+ dialog.replace(() => )
+ return
}
},
})),
@@ -122,7 +133,6 @@ export function createDialogProviderOptions(): Accessor<{
export function DialogProvider(): JSX.Element {
const options = createDialogProviderOptions()
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return
}
@@ -141,9 +151,11 @@ function AutoMethod(props: AutoMethodProps): JSX.Element {
useKeyboard((evt) => {
if (evt.name === "c" && !evt.ctrl && !evt.meta) {
- const code = (/[A-Z0-9]{4}-[A-Z0-9]{4,5}/.exec(props.authorization.instructions))?.[0] ?? props.authorization.url
+ const code = /[A-Z0-9]{4}-[A-Z0-9]{4,5}/.exec(props.authorization.instructions)?.[0] ?? props.authorization.url
Clipboard.copy(code)
- .then(() => { toast.show({ message: "Copied to clipboard", variant: "info" }); })
+ .then(() => {
+ toast.show({ message: "Copied to clipboard", variant: "info" })
+ })
.catch(toast.error)
}
})
@@ -159,18 +171,21 @@ function AutoMethod(props: AutoMethodProps): JSX.Element {
}
await sdk.client.instance.dispose()
await sync.bootstrap()
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
})()
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{props.title}
- { dialog.clear(); }}>
+ {
+ dialog.clear()
+ }}
+ >
esc
@@ -199,7 +214,6 @@ function CodeMethod(props: CodeMethodProps): JSX.Element {
const dialog = useDialog()
const [error, setError] = createSignal(false)
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
)
return
}
@@ -222,7 +235,6 @@ function CodeMethod(props: CodeMethodProps): JSX.Element {
})()
}}
description={() => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{props.authorization.instructions}
@@ -247,38 +259,45 @@ function ApiMethod(props: ApiMethodProps): JSX.Element {
const sync = useSync()
const { theme } = useTheme()
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
(
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
-
-
- OpenCode Zen gives you access to all the best coding models at the cheapest prices with a single API
- key.
-
-
- Go to https://opencode.ai/zen to get a key
-
-
- )) as () => JSX.Element,
- "opencode-go": (() => (
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
-
-
- OpenCode Go is a $10 per month subscription that provides reliable access to popular open coding models
- with generous usage limits.
-
-
- Go to https://opencode.ai/zen and enable OpenCode Go
-
-
- )) as () => JSX.Element,
- } as Record JSX.Element) | undefined>)[props.providerID] ?? undefined)
+ (
+ {
+ orbit: (() => (
+
+
+ OpenCode Zen gives you access to the best coding models with a single API key.
+
+
+ Go to https://opencode.ai/zen to get a key
+
+
+ )) as () => JSX.Element,
+ opencode: (() => (
+
+
+ OpenCode Zen gives you access to the best coding models with a single API key.
+
+
+ Go to https://opencode.ai/zen to get a key
+
+
+ )) as () => JSX.Element,
+ "opencode-go": (() => (
+
+
+ OpenCode Go provides reliable access to popular coding models with generous usage limits.
+
+
+ Go to https://opencode.ai/zen and enable OpenCode Go
+
+
+ )) as () => JSX.Element,
+ } as Record JSX.Element) | undefined>
+ )[props.providerID] ?? undefined
}
onConfirm={(value) => {
if (!value) return
@@ -292,7 +311,6 @@ function ApiMethod(props: ApiMethodProps): JSX.Element {
})
await sdk.client.instance.dispose()
await sync.bootstrap()
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
})()
}}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx
index 2b594c906..3739995bc 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx
@@ -67,7 +67,6 @@ export function DialogSessionList(): JSX.Element {
dialog.setSize("large")
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
},
},
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx
index 310df1bac..cb7f0b197 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx
@@ -7,7 +7,6 @@ import { useSDK } from "../context/sdk"
import type { JSX } from "solid-js"
-
interface DialogSessionRenameProps {
session: string
}
@@ -18,7 +17,6 @@ export function DialogSessionRename(props: DialogSessionRenameProps): JSX.Elemen
const sdk = useSDK()
const session = createMemo(() => sync.session.get(props.session))
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{ dialog.clear(); }}
+ onCancel={() => {
+ dialog.clear()
+ }}
/>
)
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-skill.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-skill.tsx
index 1f0dbb0f7..300bf0076 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-skill.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-skill.tsx
@@ -35,6 +35,5 @@ export function DialogSkill(props: DialogSkillProps): JSX.Element {
}))
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-stash.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-stash.tsx
index b49927f10..3c3d6f938 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-stash.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/dialog-stash.tsx
@@ -58,7 +58,6 @@ export function DialogStash(props: { onSelect: (entry: StashEntry) => void }): J
.toReversed()
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
a.name.localeCompare(b.name))
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
Status
- { dialog.clear(); }}>
+ {
+ dialog.clear()
+ }}
+ >
esc
@@ -60,7 +65,6 @@ export function DialogStatus(): JSX.Element {
{Object.keys(sync.data.mcp).length} MCP Servers
{([key, item]) => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{sync.data.lsp.length} LSP Servers
{(item) => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{enabledFormatters().length} Formatters
{(item) => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{plugins().length} Plugins
{(item) => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
void }): JSX.El
})),
)
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
route: ReturnType
@@ -52,7 +51,7 @@ async function openWorkspace(input: {
}
let created: Session | undefined
while (!created) {
- const result = await client.session.create({}).catch(() => undefined)
+ const result = await client.session.create({ workspaceID: input.workspaceID }).catch(() => undefined)
if (!result) {
input.toast.show({
message: "Failed to open workspace",
@@ -135,7 +134,6 @@ function DialogWorkspaceCreate(props: { onSelect: (workspaceID: string) => Promi
setCreating(undefined)
}
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{
if (workspaceID === "__local__") {
if (localCount() > 0) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
return
}
@@ -185,7 +182,6 @@ export function DialogWorkspaceList(): JSX.Element {
}
const count = counts()[workspaceID]
if (typeof count === "number" && count > 0) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
return
}
@@ -202,7 +198,6 @@ export function DialogWorkspaceList(): JSX.Element {
})
const listed = await client.session.list({ roots: true, limit: 1 }).catch(() => undefined)
if (typeof listed?.data?.length === "number" && listed.data.length > 0) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
return
}
@@ -285,7 +280,6 @@ export function DialogWorkspaceList(): JSX.Element {
void sync.workspace.sync()
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{
setToDelete(undefined)
if (option.value === "__create__") {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => open(workspaceID, true)} />)
return
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/logo.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/logo.tsx
index 72fc0ce35..9fa997a2b 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/logo.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/logo.tsx
@@ -28,18 +28,22 @@ export function Logo(): JSX.Element {
if (markerIndex === -1) {
elements.push(
- (
- {rest}
- ) as JSX.Element,
+ (
+
+ {rest}
+
+ ) as JSX.Element,
)
break
}
if (markerIndex > 0) {
elements.push(
- (
- {rest.slice(0, markerIndex)}
- ) as JSX.Element,
+ (
+
+ {rest.slice(0, markerIndex)}
+
+ ) as JSX.Element,
)
}
@@ -47,23 +51,29 @@ export function Logo(): JSX.Element {
switch (marker) {
case "_":
elements.push(
- (
- {" "}
- ) as JSX.Element,
+ (
+
+ {" "}
+
+ ) as JSX.Element,
)
break
case "^":
elements.push(
- (
- ▀
- ) as JSX.Element,
+ (
+
+ ▀
+
+ ) as JSX.Element,
)
break
case "~":
elements.push(
- (
- ▀
- ) as JSX.Element,
+ (
+
+ ▀
+
+ ) as JSX.Element,
)
break
}
@@ -74,15 +84,13 @@ export function Logo(): JSX.Element {
return elements
}
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{(line, index) => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
- {renderLine(line, theme.textMuted, false)}
+ {renderLine(line, theme.text, false)}
{renderLine(logo.right[index()], theme.text, true)}
)
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx
index b10a1f6fe..58bb141cc 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx
@@ -1,16 +1,16 @@
+import { pathToFileURL } from "url"
+
import { useTerminalDimensions } from "@opentui/solid"
import { SplitBorder } from "@tui/component/border"
import { useCommandDialog } from "@tui/component/dialog-command"
import { useSDK } from "@tui/context/sdk"
import { useSync } from "@tui/context/sync"
import { useTheme, selectedForeground } from "@tui/context/theme"
-import { pathToFileURL } from "bun"
import fuzzysort from "fuzzysort"
import { firstBy } from "remeda"
import { createMemo, createResource, createEffect, onMount, onCleanup, Index, Show, createSignal } from "solid-js"
import { createStore } from "solid-js/store"
-
import { useFrecency } from "./frecency"
import type { PromptInfo } from "./history"
@@ -110,7 +110,9 @@ export function Autocomplete(props: {
}
}, 50)
- onCleanup(() => { clearInterval(interval); })
+ onCleanup(() => {
+ clearInterval(interval)
+ })
}
})
@@ -191,13 +193,7 @@ export function Autocomplete(props: {
const existingIndex = draft.parts.findIndex((p) => p.type === "file" && "url" in p && p.url === part.url)
if (existingIndex !== -1) {
const existing = draft.parts[existingIndex] as PromptInfo["parts"][number] | undefined
- if (
- part.source?.text &&
- existing &&
- "source" in existing &&
- existing.source &&
- "text" in existing.source
- ) {
+ if (part.source?.text && existing && "source" in existing && existing.source && "text" in existing.source) {
existing.source.text.start = extmarkStart
existing.source.text.end = extmarkEnd
existing.source.text.value = virtualText
@@ -515,9 +511,9 @@ export function Autocomplete(props: {
// Typed text before the trigger
props.input().cursorOffset <= store.index ||
// There is a space between the trigger and the cursor
- (/\s/.exec(props.input().getTextRange(store.index, props.input().cursorOffset))) !== null ||
+ /\s/.exec(props.input().getTextRange(store.index, props.input().cursorOffset)) !== null ||
// "/" is not the sole content
- (store.visible === "/" && (/^\S+\s+\S+\s*$/.exec(value)) !== null)
+ (store.visible === "/" && /^\S+\s+\S+\s*$/.exec(value) !== null)
) {
hide()
}
@@ -529,7 +525,7 @@ export function Autocomplete(props: {
if (offset === 0) return
// Check for "/" at position 0 - reopen slash commands
- if (value.startsWith("/") && (/\s/.exec(value.slice(0, offset))) === null) {
+ if (value.startsWith("/") && /\s/.exec(value.slice(0, offset)) === null) {
show("/")
setStore("index", 0)
return
@@ -542,7 +538,7 @@ export function Autocomplete(props: {
const between = text.slice(idx)
const before = idx === 0 ? undefined : value[idx - 1]
- if ((before === undefined || /\s/.test(before)) && (/\s/.exec(between)) === null) {
+ if ((before === undefined || /\s/.test(before)) && /\s/.exec(between) === null) {
show("@")
setStore("index", idx)
}
@@ -613,7 +609,6 @@ export function Autocomplete(props: {
let scroll: ScrollBoxRenderable | undefined
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{(option, index) => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{ select(); }}
+ onMouseUp={() => {
+ select()
+ }}
>
{option().display}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx
index 0059c6b76..1be5d1534 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx
@@ -65,7 +65,9 @@ const _frecencyContext = createSimpleContext({
if (sorted.length > 0) {
const content = sorted.map((entry) => JSON.stringify(entry)).join("\n") + "\n"
- writeFile(frecencyPath, content).catch(() => { /* noop */ })
+ writeFile(frecencyPath, content).catch(() => {
+ /* noop */
+ })
}
})()
@@ -76,7 +78,9 @@ const _frecencyContext = createSimpleContext({
lastOpen: Date.now(),
}
setStore("data", absolutePath, newEntry)
- appendFile(frecencyPath, JSON.stringify({ path: absolutePath, ...newEntry }) + "\n").catch(() => { /* noop */ })
+ appendFile(frecencyPath, JSON.stringify({ path: absolutePath, ...newEntry }) + "\n").catch(() => {
+ /* noop */
+ })
if (Object.keys(store.data).length > MAX_FRECENCY_ENTRIES) {
const sorted = Object.entries(store.data)
@@ -84,7 +88,9 @@ const _frecencyContext = createSimpleContext({
.slice(0, MAX_FRECENCY_ENTRIES)
setStore("data", Object.fromEntries(sorted))
const content = sorted.map(([p, entry]) => JSON.stringify({ path: p, ...entry })).join("\n") + "\n"
- writeFile(frecencyPath, content).catch(() => { /* noop */ })
+ writeFile(frecencyPath, content).catch(() => {
+ /* noop */
+ })
}
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx
index 5ba1fbb7a..6b516fd14 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx
@@ -5,7 +5,7 @@ import { createStore, produce, unwrap } from "solid-js/store"
import { createSimpleContext } from "../../context/helper"
-import type { AgentPart, FilePart, TextPart } from "@opencode-ai/sdk/v2"
+import type { AgentPart, FilePart, TextPart } from "@orbit.build/sdk/v2"
import { Global } from "@/global"
import { Filesystem } from "@/util/filesystem"
@@ -60,7 +60,9 @@ const _historyContext = createSimpleContext({
// Rewrite file with only valid entries to self-heal corruption
if (lines.length > 0) {
const content = lines.map((line) => JSON.stringify(line)).join("\n") + "\n"
- writeFile(historyPath, content).catch(() => { /* noop */ })
+ writeFile(historyPath, content).catch(() => {
+ /* noop */
+ })
}
})()
@@ -100,11 +102,15 @@ const _historyContext = createSimpleContext({
if (willTrim) {
const content = store.history.map((line) => JSON.stringify(line)).join("\n") + "\n"
- writeFile(historyPath, content).catch(() => { /* noop */ })
+ writeFile(historyPath, content).catch(() => {
+ /* noop */
+ })
return
}
- appendFile(historyPath, JSON.stringify(entry) + "\n").catch(() => { /* noop */ })
+ appendFile(historyPath, JSON.stringify(entry) + "\n").catch(() => {
+ /* noop */
+ })
},
}
},
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
index 74ffd9498..78f26239f 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
@@ -33,11 +33,11 @@ import { usePromptStash } from "./stash"
import type { AutocompleteRef } from "./autocomplete"
import type { PromptInfo } from "./history"
-import type { FilePart } from "@opencode-ai/sdk/v2"
import type { BoxRenderable, MouseEvent, PasteEvent, TextareaRenderable } from "@opentui/core"
+import type { FilePart } from "@orbit.build/sdk/v2"
import type { JSX } from "solid-js"
-import { Identifier } from "@/id/id"
+import { MessageID, PartID } from "@/session/schema"
import { Filesystem } from "@/util/filesystem"
import { formatDuration } from "@/util/format"
import { iife } from "@/util/iife"
@@ -45,6 +45,7 @@ import { Locale } from "@/util/locale"
export interface PromptProps {
sessionID?: string
+ workspaceID?: string
visible?: boolean
disabled?: boolean
onSubmit?: () => void
@@ -93,7 +94,6 @@ export function Prompt(props: PromptProps): JSX.Element {
duration: 3000,
})
if (sync.data.provider.length === 0) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
}
}
@@ -264,80 +264,80 @@ export function Prompt(props: PromptProps): JSX.Element {
dialog.clear()
void (async (): Promise => {
- // replace summarized text parts with the actual text
- const text = store.prompt.parts
- .filter((p) => p.type === "text")
- .reduce((acc, p) => {
- if (!p.source) return acc
- return acc.replace(p.source.text.value, p.text)
- }, store.prompt.input)
-
- const nonTextParts = store.prompt.parts.filter((p) => p.type !== "text")
-
- const value = text
- const content = await Editor.open({ value, renderer })
- if (!content) return
-
- input.setText(content)
-
- // Update positions for nonTextParts based on their location in new content
- // Filter out parts whose virtual text was deleted
- // this handles a case where the user edits the text in the editor
- // such that the virtual text moves around or is deleted
- const updatedNonTextParts = nonTextParts
- .map((part) => {
- let virtualText = ""
- if (part.type === "file" && part.source?.text) {
- virtualText = part.source.text.value
- } else if (part.type === "agent" && part.source) {
- virtualText = part.source.value
- }
-
- if (!virtualText) return part
-
- const newStart = content.indexOf(virtualText)
- // if the virtual text is deleted, remove the part
- if (newStart === -1) return null
-
- const newEnd = newStart + virtualText.length
-
- if (part.type === "file" && part.source?.text) {
- return {
- ...part,
- source: {
- ...part.source,
- text: {
- ...part.source.text,
+ // replace summarized text parts with the actual text
+ const text = store.prompt.parts
+ .filter((p) => p.type === "text")
+ .reduce((acc, p) => {
+ if (!p.source) return acc
+ return acc.replace(p.source.text.value, p.text)
+ }, store.prompt.input)
+
+ const nonTextParts = store.prompt.parts.filter((p) => p.type !== "text")
+
+ const value = text
+ const content = await Editor.open({ value, renderer })
+ if (!content) return
+
+ input.setText(content)
+
+ // Update positions for nonTextParts based on their location in new content
+ // Filter out parts whose virtual text was deleted
+ // this handles a case where the user edits the text in the editor
+ // such that the virtual text moves around or is deleted
+ const updatedNonTextParts = nonTextParts
+ .map((part) => {
+ let virtualText = ""
+ if (part.type === "file" && part.source?.text) {
+ virtualText = part.source.text.value
+ } else if (part.type === "agent" && part.source) {
+ virtualText = part.source.value
+ }
+
+ if (!virtualText) return part
+
+ const newStart = content.indexOf(virtualText)
+ // if the virtual text is deleted, remove the part
+ if (newStart === -1) return null
+
+ const newEnd = newStart + virtualText.length
+
+ if (part.type === "file" && part.source?.text) {
+ return {
+ ...part,
+ source: {
+ ...part.source,
+ text: {
+ ...part.source.text,
+ start: newStart,
+ end: newEnd,
+ },
+ },
+ }
+ }
+
+ if (part.type === "agent" && part.source) {
+ return {
+ ...part,
+ source: {
+ ...part.source,
start: newStart,
end: newEnd,
},
- },
- }
- }
-
- if (part.type === "agent" && part.source) {
- return {
- ...part,
- source: {
- ...part.source,
- start: newStart,
- end: newEnd,
- },
+ }
}
- }
- return part
- })
- .filter((part) => part !== null)
+ return part
+ })
+ .filter((part) => part !== null)
- setStore("prompt", {
- input: content,
- // keep only the non-text parts because the text parts were
- // already expanded inline
- parts: updatedNonTextParts,
- })
- restoreExtmarksFromParts(updatedNonTextParts)
- input.cursorOffset = Bun.stringWidth(content)
+ setStore("prompt", {
+ input: content,
+ // keep only the non-text parts because the text parts were
+ // already expanded inline
+ parts: updatedNonTextParts,
+ })
+ restoreExtmarksFromParts(updatedNonTextParts)
+ input.cursorOffset = Bun.stringWidth(content)
})()
},
},
@@ -350,7 +350,6 @@ export function Prompt(props: PromptProps): JSX.Element {
},
onSelect: () => {
dialog.replace(() => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{
@@ -525,7 +524,6 @@ export function Prompt(props: PromptProps): JSX.Element {
enabled: stash.list().length > 0,
onSelect: (dialog) => {
dialog.replace(() => {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{
@@ -558,7 +556,9 @@ export function Prompt(props: PromptProps): JSX.Element {
let sessionID = props.sessionID
if (sessionID === undefined) {
- const res = await sdk.client.session.create({})
+ const res = await sdk.client.session.create({
+ workspaceID: props.workspaceID,
+ })
if (res.error) {
console.log("Creating a session failed:", res.error)
@@ -574,7 +574,7 @@ export function Prompt(props: PromptProps): JSX.Element {
sessionID = res.data.id
}
- const messageID = Identifier.ascending("message")
+ const messageID = MessageID.ascending()
let inputText = store.prompt.input
// Expand pasted text inline before submitting
@@ -637,7 +637,7 @@ export function Prompt(props: PromptProps): JSX.Element {
parts: nonTextParts
.filter((x) => x.type === "file")
.map((x) => ({
- id: Identifier.ascending("part"),
+ id: PartID.ascending(),
...x,
})),
})
@@ -652,17 +652,19 @@ export function Prompt(props: PromptProps): JSX.Element {
variant,
parts: [
{
- id: Identifier.ascending("part"),
+ id: PartID.ascending(),
type: "text",
text: inputText,
},
...nonTextParts.map((x) => ({
- id: Identifier.ascending("part"),
+ id: PartID.ascending(),
...x,
})),
],
})
- .catch(() => { /* noop */ })
+ .catch(() => {
+ /* noop */
+ })
}
history.append({
...store.prompt,
@@ -807,7 +809,6 @@ export function Prompt(props: PromptProps): JSX.Element {
}
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
<>
{ void submit(); }}
+ onSubmit={() => {
+ void submit()
+ }}
onPaste={(event: PasteEvent) => {
if (props.disabled) {
event.preventDefault()
@@ -969,11 +972,13 @@ export function Prompt(props: PromptProps): JSX.Element {
// Handle SVG as raw text content, not as base64 image
if (mime === "image/svg+xml") {
event.preventDefault()
- void Filesystem.readText(filepath).catch(() => undefined).then((content) => {
- if (content) {
- pasteText(content, `[SVG: ${filename}]`)
- }
- })
+ void Filesystem.readText(filepath)
+ .catch(() => undefined)
+ .then((content) => {
+ if (content) {
+ pasteText(content, `[SVG: ${filename}]`)
+ }
+ })
return
}
if (mime.startsWith("image/")) {
@@ -992,7 +997,9 @@ export function Prompt(props: PromptProps): JSX.Element {
})
return
}
- } catch { /* empty */ }
+ } catch {
+ /* empty */
+ }
}
const lineCount = (pastedContent.match(/\n/g)?.length ?? 0) + 1
@@ -1142,7 +1149,6 @@ export function Prompt(props: PromptProps): JSX.Element {
return baseMessage + truncatedHint + retryInfo
}
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx
index 4902ca842..cfd1c6575 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx
@@ -47,7 +47,9 @@ const _stashContext = createSimpleContext({
// Rewrite file with only valid entries to self-heal corruption
if (lines.length > 0) {
const content = lines.map((line) => JSON.stringify(line)).join("\n") + "\n"
- writeFile(stashPath, content).catch(() => { /* noop */ })
+ writeFile(stashPath, content).catch(() => {
+ /* noop */
+ })
}
})()
@@ -69,11 +71,15 @@ const _stashContext = createSimpleContext({
if (willTrim) {
const content = store.entries.map((line) => JSON.stringify(line)).join("\n") + "\n"
- writeFile(stashPath, content).catch(() => { /* noop */ })
+ writeFile(stashPath, content).catch(() => {
+ /* noop */
+ })
return
}
- appendFile(stashPath, JSON.stringify(stash) + "\n").catch(() => { /* noop */ })
+ appendFile(stashPath, JSON.stringify(stash) + "\n").catch(() => {
+ /* noop */
+ })
},
pop(): StashEntry | undefined {
if (store.entries.length === 0) return undefined
@@ -85,7 +91,9 @@ const _stashContext = createSimpleContext({
)
const content =
store.entries.length > 0 ? store.entries.map((line) => JSON.stringify(line)).join("\n") + "\n" : ""
- writeFile(stashPath, content).catch(() => { /* noop */ })
+ writeFile(stashPath, content).catch(() => {
+ /* noop */
+ })
return entry
},
remove(index: number): void {
@@ -97,7 +105,9 @@ const _stashContext = createSimpleContext({
)
const content =
store.entries.length > 0 ? store.entries.map((line) => JSON.stringify(line)).join("\n") + "\n" : ""
- writeFile(stashPath, content).catch(() => { /* noop */ })
+ writeFile(stashPath, content).catch(() => {
+ /* noop */
+ })
},
}
},
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/tips.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/tips.tsx
index 8eb1bf98b..079be011a 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/tips.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/tips.tsx
@@ -6,7 +6,10 @@ import type { JSX } from "solid-js"
const themeCount = Object.keys(DEFAULT_THEMES).filter((key) => key !== "opencode").length
const themeTip = `Use {highlight}/themes{/highlight} or {highlight}Ctrl+X T{/highlight} to switch between ${String(themeCount)} built-in themes`
-interface TipPart { text: string; highlight: boolean }
+interface TipPart {
+ text: string
+ highlight: boolean
+}
function parse(tip: string): TipPart[] {
const parts: TipPart[] = []
@@ -36,7 +39,6 @@ export function Tips(): JSX.Element {
const theme = useTheme().theme
const parts = parse(TIPS[Math.floor(Math.random() * TIPS.length)])
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
@@ -44,7 +46,6 @@ export function Tips(): JSX.Element {
- {/* eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types */}
{(part) => {part.text}}
@@ -58,7 +59,7 @@ const TIPS = [
"Press {highlight}Tab{/highlight} to cycle between Build and Plan agents",
"Use {highlight}/undo{/highlight} to revert the last message and file changes",
"Use {highlight}/redo{/highlight} to restore previously undone messages and file changes",
- "Run {highlight}/share{/highlight} to create a public link to your conversation at opencode.ai",
+ "Run {highlight}/share{/highlight} to create a public link to your conversation at orbit.build",
"Drag and drop images into the terminal to add them as context",
"Press {highlight}Ctrl+V{/highlight} to paste images from your clipboard into the prompt",
"Press {highlight}Ctrl+X E{/highlight} or {highlight}/editor{/highlight} to compose messages in your external editor",
@@ -147,7 +148,7 @@ const TIPS = [
"Enable {highlight}scroll_acceleration{/highlight} in {highlight}tui.json{/highlight} for smooth macOS-style scrolling",
"Toggle username display in chat via command palette ({highlight}Ctrl+P{/highlight})",
"Run {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} for containerized use",
- "Use {highlight}/connect{/highlight} with OpenCode Zen for curated, tested models",
+ "Use {highlight}/connect{/highlight} with Orbit for curated, tested models",
"Commit your project's {highlight}AGENTS.md{/highlight} file to Git for team sharing",
"Use {highlight}/review{/highlight} to review uncommitted changes, branches, or PRs",
"Run {highlight}/help{/highlight} or {highlight}Ctrl+X H{/highlight} to show the help dialog",
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/todo-item.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/todo-item.tsx
index d9ef7ac95..88ba6265a 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/component/todo-item.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/component/todo-item.tsx
@@ -10,7 +10,6 @@ export interface TodoItemProps {
export function TodoItem(props: TodoItemProps): JSX.Element {
const { theme } = useTheme()
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (
{
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
dialog.replace(() => )
},
},
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/helper.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/helper.tsx
index b37f863cc..79586a816 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/helper.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/helper.tsx
@@ -19,7 +19,6 @@ export function createSimpleContext>(in
provider: (props: ParentProps): SafeJSX => {
const init = input.init(props)
const initRecord = init as Record
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- SolidJS JSX return type from opentui
return (
{props.children}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/keybind.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/keybind.tsx
index 980ab8c33..0d252f77b 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/keybind.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/keybind.tsx
@@ -11,7 +11,7 @@ import type { ParsedKey, Renderable } from "@opentui/core"
import { Keybind } from "@/util/keybind"
-export type KeybindKey = keyof NonNullable
+export type KeybindKey = keyof NonNullable
export const { use: useKeybind, provider: KeybindProvider } = createSimpleContext({
name: "Keybind",
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/kv.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/kv.tsx
index 5c8d1d164..c53a417d4 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/kv.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/kv.tsx
@@ -1,16 +1,13 @@
import path from "path"
-import { createSignal } from "solid-js"
+import { createSignal } from "solid-js"
import { createStore } from "solid-js/store"
import { createSimpleContext } from "./helper"
-
import { Global } from "@/global"
import { Filesystem } from "@/util/filesystem"
-
-
export const { use: useKV, provider: KVProvider } = createSimpleContext({
name: "KV",
init: () => {
@@ -22,7 +19,9 @@ export const { use: useKV, provider: KVProvider } = createSimpleContext({
.then((x) => {
setStore(x as Record)
})
- .catch(() => { /* noop */ })
+ .catch(() => {
+ /* noop */
+ })
.finally(() => {
setReady(true)
})
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/local.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/local.tsx
index 7c8278076..0985b9970 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/local.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/local.tsx
@@ -7,7 +7,6 @@ import { uniqueBy } from "remeda"
import { batch, createEffect, createMemo } from "solid-js"
import { createStore } from "solid-js/store"
-
import { useToast } from "../ui/toast"
import { useArgs } from "./args"
@@ -19,10 +18,6 @@ import { Provider } from "@/provider/provider"
import { Filesystem } from "@/util/filesystem"
import { iife } from "@/util/iife"
-
-
-
-
export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
name: "Local",
init: () => {
@@ -35,7 +30,9 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
return provider?.models[model.modelID] !== undefined
}
- function getFirstValidModel(...modelFns: (() => { providerID: string; modelID: string } | undefined)[]): { providerID: string; modelID: string } | undefined {
+ function getFirstValidModel(
+ ...modelFns: (() => { providerID: string; modelID: string } | undefined)[]
+ ): { providerID: string; modelID: string } | undefined {
for (const modelFn of modelFns) {
const model = modelFn()
if (!model) continue
@@ -72,12 +69,14 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
return found
},
set(name: string) {
- if (!agents().some((x) => x.name === name))
- { toast.show({
+ if (!agents().some((x) => x.name === name)) {
+ toast.show({
variant: "warning",
message: `Agent not found: ${name}`,
duration: 3000,
- }); return; }
+ })
+ return
+ }
setAgentStore("current", name)
},
move(direction: 1 | -1) {
@@ -154,10 +153,14 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
.then((raw) => {
const x = raw as Record
if (Array.isArray(x.recent)) setModelStore("recent", x.recent as { providerID: string; modelID: string }[])
- if (Array.isArray(x.favorite)) setModelStore("favorite", x.favorite as { providerID: string; modelID: string }[])
- if (typeof x.variant === "object" && x.variant !== null) setModelStore("variant", x.variant as Record)
+ if (Array.isArray(x.favorite))
+ setModelStore("favorite", x.favorite as { providerID: string; modelID: string }[])
+ if (typeof x.variant === "object" && x.variant !== null)
+ setModelStore("variant", x.variant as Record)
+ })
+ .catch(() => {
+ /* noop */
})
- .catch(() => { /* noop */ })
.finally(() => {
setModelStore("ready", true)
if (state.pending) save()
@@ -191,7 +194,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
}
}
- const provider = sync.data.provider[0] as typeof sync.data.provider[0] | undefined
+ const provider = sync.data.provider[0] as (typeof sync.data.provider)[0] | undefined
if (provider === undefined) return undefined
const defaultModel = sync.data.provider_default[provider.id] as string | undefined
const firstModel = Object.values(provider.models)[0] as { id: string; name: string } | undefined
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/route.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/route.tsx
index bbc6325f7..ea611825f 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/route.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/route.tsx
@@ -7,6 +7,7 @@ import type { PromptInfo } from "../component/prompt/history"
export interface HomeRoute {
type: "home"
initialPrompt?: PromptInfo
+ workspaceID?: string
}
export interface SessionRoute {
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/sdk.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/sdk.tsx
index 0e4b01c09..76dfd90be 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/sdk.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/sdk.tsx
@@ -1,10 +1,10 @@
-import { createOpencodeClient } from "@opencode-ai/sdk/v2"
+import { createOpencodeClient } from "@orbit.build/sdk/v2"
import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { batch, onCleanup, onMount } from "solid-js"
import { createSimpleContext } from "./helper"
-import type {Event} from "@opencode-ai/sdk/v2";
+import type { Event } from "@orbit.build/sdk/v2"
export interface EventSource {
on: (handler: (event: Event) => void) => () => void
@@ -88,7 +88,9 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
if (timer) clearTimeout(timer)
if (queue.length > 0) flush()
}
- })().catch(() => { /* noop */ })
+ })().catch(() => {
+ /* noop */
+ })
}
onMount(() => {
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/sync.tsx
index 7fc1cc90f..6ff20a053 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/sync.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/sync.tsx
@@ -1,4 +1,4 @@
-import { Binary } from "@opencode-ai/util/binary"
+import { Binary } from "@orbit.build/util/binary"
import { useSDK } from "@tui/context/sdk"
import { batch, onMount } from "solid-js"
import { createStore, produce, reconcile } from "solid-js/store"
@@ -8,7 +8,7 @@ import { useExit } from "./exit"
import { createSimpleContext } from "./helper"
import type { Snapshot } from "@/snapshot"
-import type { Path } from "@opencode-ai/sdk"
+import type { Path } from "@orbit.build/sdk"
import type {
Message,
Agent,
@@ -27,8 +27,9 @@ import type {
SessionStatus,
ProviderListResponse,
ProviderAuthMethod,
- VcsInfo, Workspace
-} from "@opencode-ai/sdk/v2"
+ VcsInfo,
+ Workspace,
+} from "@orbit.build/sdk/v2"
import { Log } from "@/util/log"
@@ -308,7 +309,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const field = event.properties.field as keyof typeof part
const existing = part[field] as string | undefined
// @ts-expect-error - SolidJS produce: dynamic field mutation on message part
- ;(part[field]) = (existing ?? "") + event.properties.delta
+ part[field] = (existing ?? "") + event.properties.delta
}),
)
break
@@ -330,7 +331,9 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
}
case "lsp.updated": {
- void sdk.client.lsp.status().then((x) => { if (x.data) setStore("lsp", x.data); })
+ void sdk.client.lsp.status().then((x) => {
+ if (x.data) setStore("lsp", x.data)
+ })
break
}
@@ -412,7 +415,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const providerList = responses[1]
const agents = responses[2]
const config = responses[3]
- const sessions = responses[4] as typeof responses[4] | undefined
+ const sessions = responses[4] as (typeof responses)[4] | undefined
batch(() => {
setStore("provider", reconcile(providers.providers))
@@ -428,18 +431,40 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
if (store.status !== "complete") setStore("status", "partial")
// non-blocking
void Promise.all([
- ...(args.continue ? [] : [sessionListPromise.then((sessions) => { setStore("session", reconcile(sessions)); })]),
- sdk.client.command.list().then((x) => { setStore("command", reconcile(x.data ?? [])); }),
- sdk.client.lsp.status().then((x) => { if (x.data) setStore("lsp", reconcile(x.data)); }),
- sdk.client.mcp.status().then((x) => { if (x.data) setStore("mcp", reconcile(x.data)); }),
- sdk.client.experimental.resource.list().then((x) => { setStore("mcp_resource", reconcile(x.data ?? {})); }),
- sdk.client.formatter.status().then((x) => { if (x.data) setStore("formatter", reconcile(x.data)); }),
+ ...(args.continue
+ ? []
+ : [
+ sessionListPromise.then((sessions) => {
+ setStore("session", reconcile(sessions))
+ }),
+ ]),
+ sdk.client.command.list().then((x) => {
+ setStore("command", reconcile(x.data ?? []))
+ }),
+ sdk.client.lsp.status().then((x) => {
+ if (x.data) setStore("lsp", reconcile(x.data))
+ }),
+ sdk.client.mcp.status().then((x) => {
+ if (x.data) setStore("mcp", reconcile(x.data))
+ }),
+ sdk.client.experimental.resource.list().then((x) => {
+ setStore("mcp_resource", reconcile(x.data ?? {}))
+ }),
+ sdk.client.formatter.status().then((x) => {
+ if (x.data) setStore("formatter", reconcile(x.data))
+ }),
sdk.client.session.status().then((x) => {
if (x.data) setStore("session_status", reconcile(x.data))
}),
- sdk.client.provider.auth().then((x) => { setStore("provider_auth", reconcile(x.data ?? {})); }),
- sdk.client.vcs.get().then((x) => { setStore("vcs", reconcile(x.data)); }),
- sdk.client.path.get().then((x) => { if (x.data) setStore("path", reconcile(x.data)); }),
+ sdk.client.provider.auth().then((x) => {
+ setStore("provider_auth", reconcile(x.data ?? {}))
+ }),
+ sdk.client.vcs.get().then((x) => {
+ setStore("vcs", reconcile(x.data))
+ }),
+ sdk.client.path.get().then((x) => {
+ if (x.data) setStore("path", reconcile(x.data))
+ }),
syncWorkspaces(),
]).then(() => {
setStore("status", "complete")
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/theme.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/theme.tsx
index 3c91e9518..05532213e 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/theme.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/theme.tsx
@@ -1,6 +1,6 @@
import path from "path"
-import { SyntaxStyle, RGBA } from "@opentui/core"
+import { SyntaxStyle, RGBA } from "@opentui/core"
import { useRenderer } from "@opentui/solid"
import { createEffect, createMemo, onMount } from "solid-js"
import { createStore, produce } from "solid-js/store"
@@ -45,7 +45,7 @@ import vesper from "./theme/vesper.json" with { type: "json" }
import zenburn from "./theme/zenburn.json" with { type: "json" }
import { useTuiConfig } from "./tui-config"
-import type {TerminalColors} from "@opentui/core";
+import type { TerminalColors } from "@opentui/core"
import { Global } from "@/global"
import { Filesystem } from "@/util/filesystem"
@@ -653,7 +653,10 @@ function generateSubtleSyntax(theme: Theme): SyntaxStyle {
)
}
-function getSyntaxRules(theme: Theme): { scope: string[]; style: { foreground: RGBA; italic?: boolean; bold?: boolean; underline?: boolean; background?: RGBA } }[] {
+function getSyntaxRules(theme: Theme): {
+ scope: string[]
+ style: { foreground: RGBA; italic?: boolean; bold?: boolean; underline?: boolean; background?: RGBA }
+}[] {
return [
{
scope: ["default"],
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/theme/orbit.json b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/theme/orbit.json
index 8f585a450..fd50c6fa6 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/context/theme/orbit.json
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/context/theme/orbit.json
@@ -102,12 +102,12 @@
"light": "lightStep6"
},
"diffAdded": {
- "dark": "#4fd6be",
- "light": "#1e725c"
+ "dark": "#4ec990",
+ "light": "#1a8a4a"
},
"diffRemoved": {
- "dark": "#c53b53",
- "light": "#c53b53"
+ "dark": "#e06c75",
+ "light": "#d1383d"
},
"diffContext": {
"dark": "#828bb8",
@@ -118,19 +118,19 @@
"light": "#7086b5"
},
"diffHighlightAdded": {
- "dark": "#b8db87",
- "light": "#4db380"
+ "dark": "#6edd9a",
+ "light": "#2ba55e"
},
"diffHighlightRemoved": {
- "dark": "#e26a75",
- "light": "#f52a65"
+ "dark": "#f47a83",
+ "light": "#e5484d"
},
"diffAddedBg": {
- "dark": "#20303b",
- "light": "#d5e5d5"
+ "dark": "#1a3329",
+ "light": "#ddf4e4"
},
"diffRemovedBg": {
- "dark": "#37222c",
+ "dark": "#3d2228",
"light": "#f7d8db"
},
"diffContextBg": {
@@ -142,11 +142,11 @@
"light": "lightStep3"
},
"diffAddedLineNumberBg": {
- "dark": "#1b2b34",
- "light": "#c5d5c5"
+ "dark": "#152e22",
+ "light": "#c8edcf"
},
"diffRemovedLineNumberBg": {
- "dark": "#2d1f26",
+ "dark": "#332025",
"light": "#e7c8cb"
},
"markdownText": {
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/event.ts b/Agent-backend/packages/opencode/src/cli/cmd/tui/event.ts
index 1e8f2c15a..dcc0a79d2 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/event.ts
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/event.ts
@@ -1,6 +1,7 @@
import z from "zod"
import { BusEvent } from "@/bus/bus-event"
+import { SessionID } from "@/session/schema"
export const TuiEvent = {
PromptAppend: BusEvent.define("tui.prompt.append", z.object({ text: z.string() })),
@@ -42,7 +43,7 @@ export const TuiEvent = {
SessionSelect: BusEvent.define(
"tui.session.select",
z.object({
- sessionID: z.string().regex(/^ses/).describe("Session ID to navigate to"),
+ sessionID: SessionID.zod.describe("Session ID to navigate to"),
}),
),
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/home.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/home.tsx
index 2253ff900..f29aed7ae 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/home.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/home.tsx
@@ -1,4 +1,4 @@
-import { Prompt } from "@tui/component/prompt"
+import { Prompt } from "@tui/component/prompt"
import { useRouteData } from "@tui/context/route"
import { useTheme } from "@tui/context/theme"
import { createEffect, createMemo, Match, on, onMount, Show, Switch } from "solid-js"
@@ -14,7 +14,7 @@ import { usePromptRef } from "../context/prompt"
import { useSync } from "../context/sync"
import { Toast } from "../ui/toast"
-import type {PromptRef} from "@tui/component/prompt";
+import type { PromptRef } from "@tui/component/prompt"
import type { JSX } from "solid-js"
import { Installation } from "@/installation"
@@ -108,7 +108,6 @@ export function Home(): JSX.Element {
)
const directory = useDirectory()
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types unresolvable by ESLint type-checker
return (
<>
@@ -126,6 +125,7 @@ export function Home(): JSX.Element {
}}
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- opentui JSX types resolve to error/any
hint={Hint}
+ workspaceID={route.workspaceID}
/>
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx
index 3455b93dd..b5b202e03 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx
@@ -27,9 +27,7 @@ export function DialogForkFromTimeline(props: { sessionID: string; onMove: (mess
const result: DialogSelectOption[] = []
for (const message of messages) {
if (message.role !== "user") continue
- const part = (sync.data.part[message.id] ?? []).find(
- (x) => x.type === "text" && !x.synthetic && !x.ignored,
- )
+ const part = (sync.data.part[message.id] ?? []).find((x) => x.type === "text" && !x.synthetic && !x.ignored)
if (part?.type !== "text") continue
result.push({
title: part.text.replace(/\n/g, " "),
@@ -69,6 +67,13 @@ export function DialogForkFromTimeline(props: { sessionID: string; onMove: (mess
return result
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types unresolvable by ESLint type-checker
- return { props.onMove(option.value); }} title="Fork from message" options={options()} />
+ return (
+ {
+ props.onMove(option.value)
+ }}
+ title="Fork from message"
+ options={options()}
+ />
+ )
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
index 9b0c63f24..a63d05cbf 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
@@ -18,7 +18,6 @@ export function DialogMessage(props: {
const message = createMemo(() => (sync.data.message[props.sessionID] ?? []).find((x) => x.id === props.messageID))
const route = useRoute()
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types unresolvable by ESLint type-checker
return (
[] = []
for (const message of messages) {
if (message.role !== "user") continue
- const part = (sync.data.part[message.id] ?? []).find(
- (x) => x.type === "text" && !x.synthetic && !x.ignored,
- )
+ const part = (sync.data.part[message.id] ?? []).find((x) => x.type === "text" && !x.synthetic && !x.ignored)
if (part?.type !== "text") continue
result.push({
title: part.text.replace(/\n/g, " "),
value: message.id,
footer: Locale.time(message.time.created),
onSelect: (dlg) => {
- dlg.replace(() =>
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types unresolvable by ESLint type-checker
- ()
- )
+ dlg.replace(() => (
+
+ ))
},
})
}
@@ -49,6 +46,13 @@ export function DialogTimeline(props: {
return result
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types unresolvable by ESLint type-checker
- return { props.onMove(option.value); }} title="Timeline" options={options()} />
+ return (
+ {
+ props.onMove(option.value)
+ }}
+ title="Timeline"
+ options={options()}
+ />
+ )
}
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/file-tree.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/file-tree.tsx
index b3422dc76..48aab7324 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/file-tree.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/file-tree.tsx
@@ -89,7 +89,6 @@ function FileNode(props: { node: TreeNode; depth: number; onFileOpen?: (path: st
return theme.textMuted
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types unresolvable by ESLint type-checker
return (
- {" ".repeat(props.depth)}{icon()}{props.node.name}{props.node.isDir ? "/" : ""}
+ {" ".repeat(props.depth)}
+ {icon()}
+ {props.node.name}
+ {props.node.isDir ? "/" : ""}
- {/* eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types */}
{(child) => }
@@ -125,7 +126,6 @@ export function FileTree(props: { onFileOpen?: (path: string) => void; width?: n
setNodes(readDir(directory(), 0))
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types unresolvable by ESLint type-checker
return (
void; width?: n
}}
>
- {/* eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types */}
{(node) => }
diff --git a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/file-viewer.tsx b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/file-viewer.tsx
index ff9a8f4da..984dd53e8 100644
--- a/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/file-viewer.tsx
+++ b/Agent-backend/packages/opencode/src/cli/cmd/tui/routes/session/file-viewer.tsx
@@ -51,7 +51,6 @@ export function FileViewer(props: {
return path.relative(process.cwd(), props.filePath) || props.filePath
})
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types unresolvable by ESLint type-checker
return (
{
const active = (): boolean => tab === props.filePath
const name = path.basename(tab)
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- opentui JSX types
return (