diff --git a/.mimocode/.gitignore b/.devora/.gitignore similarity index 100% rename from .mimocode/.gitignore rename to .devora/.gitignore diff --git a/.mimocode/agent/translator.md b/.devora/agent/translator.md similarity index 63% rename from .mimocode/agent/translator.md rename to .devora/agent/translator.md index dab50452..e4953da8 100644 --- a/.mimocode/agent/translator.md +++ b/.devora/agent/translator.md @@ -1,7 +1,7 @@ --- description: Translate content for a specified locale while preserving technical terms mode: subagent -model: opencode/gpt-5.4 +model: devora/gpt-5.4 --- You are a professional translator and localization specialist. @@ -13,7 +13,7 @@ Requirements: - Preserve meaning, intent, tone, and formatting (including Markdown/MDX structure). - Preserve all technical terms and artifacts exactly: product/company names, API names, identifiers, code, commands/flags, file paths, URLs, versions, error messages, config keys/values, and anything inside inline code or code blocks. - Also preserve every term listed in the Do-Not-Translate glossary below. -- Also apply locale-specific guidance from `.opencode/glossary/.md` when available (for example, `zh-cn.md`). +- Also apply locale-specific guidance from `.devora/glossary/.md` when available (for example, `zh-cn.md`). - Do not modify fenced code blocks. - Output ONLY the translation (no commentary). @@ -35,7 +35,7 @@ Locale guidance does not override code/command preservation rules or the global --- -# Do-Not-Translate Terms (OpenCode Docs) +# Do-Not-Translate Terms (Devora Docs) Generated from: `packages/web/src/content/docs/*.mdx` (default English docs) Generated on: 2026-02-10 @@ -68,8 +68,8 @@ Neovim Node.js npm Obsidian -opencode -opencode-ai +devora +devora-ai Paru pnpm ripgrep @@ -152,15 +152,15 @@ OAuth Ollama integration docs OpenAI's Data Policies OpenChamber -OpenCode -OpenCode config -OpenCode Config -OpenCode TUI with the opencode theme -OpenCode Web - Active Session -OpenCode Web - New Session -OpenCode Web - See Servers -OpenCode Zen -OpenCode-Obsidian +Devora +Devora config +Devora Config +Devora TUI with the devora theme +Devora Web - Active Session +Devora Web - New Session +Devora Web - See Servers +Devora Zen +Devora-Obsidian OpenRouter dashboard OpenWork OVHcloud panel @@ -301,7 +301,7 @@ NoeFabris OpenAI OpenAPI OpenChamber -OpenCode +Devora OpenRouter OpenTUI OpenWork @@ -325,69 +325,69 @@ xAI ZenMux ``` -## OpenCode CLI commands (as shown in docs) +## Devora CLI commands (as shown in docs) ```text -opencode -opencode [project] -opencode /path/to/project -opencode acp -opencode agent [command] -opencode agent create -opencode agent list -opencode attach [url] -opencode attach http://10.20.30.40:4096 -opencode attach http://localhost:4096 -opencode auth [command] -opencode auth list -opencode auth login -opencode auth logout -opencode auth ls -opencode export [sessionID] -opencode github [command] -opencode github install -opencode github run -opencode import -opencode import https://opncd.ai/s/abc123 -opencode import session.json -opencode mcp [command] -opencode mcp add -opencode mcp auth [name] -opencode mcp auth list -opencode mcp auth ls -opencode mcp auth my-oauth-server -opencode mcp auth sentry -opencode mcp debug -opencode mcp debug my-oauth-server -opencode mcp list -opencode mcp logout [name] -opencode mcp logout my-oauth-server -opencode mcp ls -opencode models --refresh -opencode models [provider] -opencode models anthropic -opencode run [message..] -opencode run Explain the use of context in Go -opencode serve -opencode serve --cors http://localhost:5173 --cors https://app.example.com -opencode serve --hostname 0.0.0.0 --port 4096 -opencode serve [--port ] [--hostname ] [--cors ] -opencode session [command] -opencode session list -opencode session delete -opencode stats -opencode uninstall -opencode upgrade -opencode upgrade [target] -opencode upgrade v0.1.48 -opencode web -opencode web --cors https://example.com -opencode web --hostname 0.0.0.0 -opencode web --mdns -opencode web --mdns --mdns-domain myproject.local -opencode web --port 4096 -opencode web --port 4096 --hostname 0.0.0.0 -opencode.server.close() +devora +devora [project] +devora /path/to/project +devora acp +devora agent [command] +devora agent create +devora agent list +devora attach [url] +devora attach http://10.20.30.40:4096 +devora attach http://localhost:4096 +devora auth [command] +devora auth list +devora auth login +devora auth logout +devora auth ls +devora export [sessionID] +devora github [command] +devora github install +devora github run +devora import +devora import https://opncd.ai/s/abc123 +devora import session.json +devora mcp [command] +devora mcp add +devora mcp auth [name] +devora mcp auth list +devora mcp auth ls +devora mcp auth my-oauth-server +devora mcp auth sentry +devora mcp debug +devora mcp debug my-oauth-server +devora mcp list +devora mcp logout [name] +devora mcp logout my-oauth-server +devora mcp ls +devora models --refresh +devora models [provider] +devora models anthropic +devora run [message..] +devora run Explain the use of context in Go +devora serve +devora serve --cors http://localhost:5173 --cors https://app.example.com +devora serve --hostname 0.0.0.0 --port 4096 +devora serve [--port ] [--hostname ] [--cors ] +devora session [command] +devora session list +devora session delete +devora stats +devora uninstall +devora upgrade +devora upgrade [target] +devora upgrade v0.1.48 +devora web +devora web --cors https://example.com +devora web --hostname 0.0.0.0 +devora web --mdns +devora web --mdns --mdns-domain myproject.local +devora web --port 4096 +devora web --port 4096 --hostname 0.0.0.0 +devora.server.close() ``` ## Slash commands and routes @@ -428,7 +428,7 @@ opencode.server.close() /mnt/d/ /models /oc -/opencode +/devora /path /project /project/current @@ -566,7 +566,7 @@ GITLAB_HOST GITLAB_INSTANCE_URL GITLAB_OAUTH_CLIENT_ID GITLAB_TOKEN -GITLAB_TOKEN_OPENCODE +GITLAB_TOKEN_DEVORA GOOGLE_APPLICATION_CREDENTIALS GOOGLE_CLOUD_PROJECT HTTP_PROXY @@ -581,47 +581,47 @@ NODE_ENV NODE_EXTRA_CA_CERTS NPM_AUTH_TOKEN OC_ALLOW_WAYLAND -OPENCODE_API_KEY -OPENCODE_AUTH_JSON -OPENCODE_AUTO_SHARE -OPENCODE_CLIENT -OPENCODE_CONFIG -OPENCODE_CONFIG_CONTENT -OPENCODE_CONFIG_DIR -OPENCODE_DISABLE_AUTOCOMPACT -OPENCODE_DISABLE_AUTOUPDATE -OPENCODE_DISABLE_CLAUDE_CODE -OPENCODE_DISABLE_CLAUDE_CODE_PROMPT -OPENCODE_DISABLE_CLAUDE_CODE_SKILLS -OPENCODE_DISABLE_DEFAULT_PLUGINS -OPENCODE_DISABLE_LSP_DOWNLOAD -OPENCODE_DISABLE_MODELS_FETCH -OPENCODE_DISABLE_PRUNE -OPENCODE_DISABLE_TERMINAL_TITLE -OPENCODE_ENABLE_EXA -OPENCODE_ENABLE_EXPERIMENTAL_MODELS -OPENCODE_EXPERIMENTAL -OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS -OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT -OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER -OPENCODE_EXPERIMENTAL_EXA -OPENCODE_EXPERIMENTAL_FILEWATCHER -OPENCODE_EXPERIMENTAL_ICON_DISCOVERY -OPENCODE_EXPERIMENTAL_LSP_TOOL -OPENCODE_EXPERIMENTAL_LSP_TY -OPENCODE_EXPERIMENTAL_MARKDOWN -OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX -OPENCODE_EXPERIMENTAL_OXFMT -OPENCODE_EXPERIMENTAL_PLAN_MODE -OPENCODE_ENABLE_QUESTION_TOOL -OPENCODE_FAKE_VCS -OPENCODE_GIT_BASH_PATH -OPENCODE_MODEL -OPENCODE_MODELS_URL -OPENCODE_PERMISSION -OPENCODE_PORT -OPENCODE_SERVER_PASSWORD -OPENCODE_SERVER_USERNAME +DEVORA_API_KEY +DEVORA_AUTH_JSON +DEVORA_AUTO_SHARE +DEVORA_CLIENT +DEVORA_CONFIG +DEVORA_CONFIG_CONTENT +DEVORA_CONFIG_DIR +DEVORA_DISABLE_AUTOCOMPACT +DEVORA_DISABLE_AUTOUPDATE +DEVORA_DISABLE_CLAUDE_CODE +DEVORA_DISABLE_CLAUDE_CODE_PROMPT +DEVORA_DISABLE_CLAUDE_CODE_SKILLS +DEVORA_DISABLE_DEFAULT_PLUGINS +DEVORA_DISABLE_LSP_DOWNLOAD +DEVORA_DISABLE_MODELS_FETCH +DEVORA_DISABLE_PRUNE +DEVORA_DISABLE_TERMINAL_TITLE +DEVORA_ENABLE_EXA +DEVORA_ENABLE_EXPERIMENTAL_MODELS +DEVORA_EXPERIMENTAL +DEVORA_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS +DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT +DEVORA_EXPERIMENTAL_DISABLE_FILEWATCHER +DEVORA_EXPERIMENTAL_EXA +DEVORA_EXPERIMENTAL_FILEWATCHER +DEVORA_EXPERIMENTAL_ICON_DISCOVERY +DEVORA_EXPERIMENTAL_LSP_TOOL +DEVORA_EXPERIMENTAL_LSP_TY +DEVORA_EXPERIMENTAL_MARKDOWN +DEVORA_EXPERIMENTAL_OUTPUT_TOKEN_MAX +DEVORA_EXPERIMENTAL_OXFMT +DEVORA_EXPERIMENTAL_PLAN_MODE +DEVORA_ENABLE_QUESTION_TOOL +DEVORA_FAKE_VCS +DEVORA_GIT_BASH_PATH +DEVORA_MODEL +DEVORA_MODELS_URL +DEVORA_PERMISSION +DEVORA_PORT +DEVORA_SERVER_PASSWORD +DEVORA_SERVER_USERNAME PROJECT_ROOT RESOURCE_NAME RUST_LOG @@ -635,8 +635,8 @@ XDG_CONFIG_HOME ```text ../../../config.mjs @astrojs/starlight/components -@mimo-ai/plugin -@mimo-ai/sdk +@devora-ai/plugin +@devora-ai/sdk path shescape zod @@ -649,77 +649,77 @@ zod @ai-sdk/openai-compatible @File#L37-42 @modelcontextprotocol/server-everything -@opencode +@devora ``` ## GitHub owner/repo slugs referenced in docs ```text -24601/opencode-zellij-namer -angristan/opencode-wakatime -anomalyco/opencode -apps/opencode-agent -athal7/opencode-devcontainers -awesome-opencode/awesome-opencode +24601/devora-zellij-namer +angristan/devora-wakatime +anomalyco/devora +apps/devora-agent +athal7/devora-devcontainers +awesome-devora/awesome-devora backnotprop/plannotator -ben-vargas/ai-sdk-provider-opencode-sdk +ben-vargas/ai-sdk-provider-devora-sdk btriapitsyn/openchamber BurntSushi/ripgrep Cluster444/agentic -code-yeongyu/oh-my-opencode -darrenhinde/opencode-agents -different-ai/opencode-scheduler +code-yeongyu/oh-my-devora +darrenhinde/devora-agents +different-ai/devora-scheduler different-ai/openwork features/copilot folke/tokyonight.nvim -franlol/opencode-md-table-formatter +franlol/devora-md-table-formatter ggml-org/llama.cpp -ghoulr/opencode-websearch-cited.git -H2Shami/opencode-helicone-session +ghoulr/devora-websearch-cited.git +H2Shami/devora-helicone-session hosenur/portal jamesmurdza/daytona -jenslys/opencode-gemini-auth -JRedeker/opencode-morph-fast-apply -JRedeker/opencode-shell-strategy +jenslys/devora-gemini-auth +JRedeker/devora-morph-fast-apply +JRedeker/devora-shell-strategy kdcokenny/ocx -kdcokenny/opencode-background-agents -kdcokenny/opencode-notify -kdcokenny/opencode-workspace -kdcokenny/opencode-worktree +kdcokenny/devora-background-agents +kdcokenny/devora-notify +kdcokenny/devora-workspace +kdcokenny/devora-worktree login/device -mohak34/opencode-notifier +mohak34/devora-notifier morhetz/gruvbox -mtymek/opencode-obsidian +mtymek/devora-obsidian NeuralNomadsAI/CodeNomad -nick-vi/opencode-type-inject -NickvanDyke/opencode.nvim -NoeFabris/opencode-antigravity-auth +nick-vi/devora-type-inject +NickvanDyke/devora.nvim +NoeFabris/devora-antigravity-auth nordtheme/nord -numman-ali/opencode-openai-codex-auth +numman-ali/devora-openai-codex-auth olimorris/codecompanion.nvim -panta82/opencode-notificator +panta82/devora-notificator rebelot/kanagawa.nvim remorses/kimaki sainnhe/everforest -shekohex/opencode-google-antigravity-auth -shekohex/opencode-pty.git +shekohex/devora-google-antigravity-auth +shekohex/devora-pty.git spoons-and-mirrors/subtask2 -sudo-tee/opencode.nvim -supermemoryai/opencode-supermemory -Tarquinen/opencode-dynamic-context-pruning +sudo-tee/devora.nvim +supermemoryai/devora-supermemory +Tarquinen/devora-dynamic-context-pruning Th3Whit3Wolf/one-nvim upstash/context7 vtemian/micode vtemian/octto yetone/avante.nvim -zenobi-us/opencode-plugin-template -zenobi-us/opencode-skillful +zenobi-us/devora-plugin-template +zenobi-us/devora-skillful ``` ## Paths, filenames, globs, and URLs ```text -./.opencode/themes/*.json +./.devora/themes/*.json .//storage/ ./config/#custom-directory ./global/storage/ @@ -731,68 +731,68 @@ zenobi-us/opencode-skillful .claude/skills/*/SKILL.md .claude/skills//SKILL.md .env -.github/workflows/opencode.yml +.github/workflows/devora.yml .gitignore .gitlab-ci.yml .ignore .NET SDK .npmrc .ocamlformat -.opencode -.opencode/ -.opencode/agents/ -.opencode/commands/ -.opencode/commands/test.md -.opencode/modes/ -.opencode/plans/*.md -.opencode/plugins/ -.opencode/skills//SKILL.md -.opencode/skills/git-release/SKILL.md -.opencode/tools/ -.well-known/opencode +.devora +.devora/ +.devora/agents/ +.devora/commands/ +.devora/commands/test.md +.devora/modes/ +.devora/plans/*.md +.devora/plugins/ +.devora/skills//SKILL.md +.devora/skills/git-release/SKILL.md +.devora/tools/ +.well-known/devora { type: "raw" \| "patch", content: string } {file:path/to/file} **/*.js %USERPROFILE%/intelephense/license.txt -%USERPROFILE%\.cache\opencode -%USERPROFILE%\.config\opencode\opencode.jsonc -%USERPROFILE%\.config\opencode\plugins -%USERPROFILE%\.local\share\opencode -%USERPROFILE%\.local\share\opencode\log -/.opencode/themes/*.json +%USERPROFILE%\.cache\devora +%USERPROFILE%\.config\devora\devora.jsonc +%USERPROFILE%\.config\devora\plugins +%USERPROFILE%\.local\share\devora +%USERPROFILE%\.local\share\devora\log +/.devora/themes/*.json / -/.opencode/plugins/ +/.devora/plugins/ ~ ~/... ~/.agents/skills/*/SKILL.md ~/.agents/skills//SKILL.md ~/.aws/credentials ~/.bashrc -~/.cache/opencode -~/.cache/opencode/node_modules/ +~/.cache/devora +~/.cache/devora/node_modules/ ~/.claude/CLAUDE.md ~/.claude/skills/ ~/.claude/skills/*/SKILL.md ~/.claude/skills//SKILL.md -~/.config/opencode -~/.config/opencode/AGENTS.md -~/.config/opencode/agents/ -~/.config/opencode/commands/ -~/.config/opencode/modes/ -~/.config/opencode/opencode.json -~/.config/opencode/opencode.jsonc -~/.config/opencode/plugins/ -~/.config/opencode/skills/*/SKILL.md -~/.config/opencode/skills//SKILL.md -~/.config/opencode/themes/*.json -~/.config/opencode/tools/ +~/.config/devora +~/.config/devora/AGENTS.md +~/.config/devora/agents/ +~/.config/devora/commands/ +~/.config/devora/modes/ +~/.config/devora/devora.json +~/.config/devora/devora.jsonc +~/.config/devora/plugins/ +~/.config/devora/skills/*/SKILL.md +~/.config/devora/skills//SKILL.md +~/.config/devora/themes/*.json +~/.config/devora/tools/ ~/.config/zed/settings.json ~/.local/share -~/.local/share/opencode/ -~/.local/share/opencode/auth.json -~/.local/share/opencode/log/ -~/.local/share/opencode/mcp-auth.json -~/.local/share/opencode/opencode.jsonc +~/.local/share/devora/ +~/.local/share/devora/auth.json +~/.local/share/devora/log/ +~/.local/share/devora/mcp-auth.json +~/.local/share/devora/devora.jsonc ~/.npmrc ~/.zshrc ~/code/ @@ -802,7 +802,7 @@ zenobi-us/opencode-skillful ${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts $HOME/intelephense/license.txt $HOME/projects/* -$XDG_CONFIG_HOME/opencode/themes/*.json +$XDG_CONFIG_HOME/devora/themes/*.json agent/ agents/ build/ @@ -815,11 +815,11 @@ http://localhost:4096 http://localhost:4096/doc https://app.example.com https://AZURE_COGNITIVE_SERVICES_RESOURCE_NAME.cognitiveservices.azure.com/ -https://opencode.ai/zen/v1/chat/completions -https://opencode.ai/zen/v1/messages -https://opencode.ai/zen/v1/models/gemini-3-flash -https://opencode.ai/zen/v1/models/gemini-3-pro -https://opencode.ai/zen/v1/responses +https://devora.ai/zen/v1/chat/completions +https://devora.ai/zen/v1/messages +https://devora.ai/zen/v1/models/gemini-3-flash +https://devora.ai/zen/v1/models/gemini-3-pro +https://devora.ai/zen/v1/responses https://RESOURCE_NAME.openai.azure.com/ laravel/pint log/ @@ -827,11 +827,11 @@ model: "anthropic/claude-sonnet-4-5" modes/ node_modules/ openai/gpt-4.1 -opencode.ai/config.json -opencode/ -opencode/gpt-5.1-codex -opencode/gpt-5.2-codex -opencode/kimi-k2 +devora.ai/config.json +devora/ +devora/gpt-5.1-codex +devora/gpt-5.2-codex +devora/kimi-k2 openrouter/google/gemini-2.5-flash opncd.ai/s/ packages/*/AGENTS.md @@ -840,7 +840,7 @@ project/ provider_id/model_id provider/model provider/model-id -rm -rf ~/.cache/opencode +rm -rf ~/.cache/devora skills/ skills/*/SKILL.md src/**/*.ts @@ -882,7 +882,7 @@ WIN+R ## Model ID strings referenced ```text -{env:OPENCODE_MODEL} +{env:DEVORA_MODEL} anthropic/claude-3-5-sonnet-20241022 anthropic/claude-haiku-4-20250514 anthropic/claude-haiku-4-5 @@ -892,8 +892,8 @@ gitlab/duo-chat-haiku-4-5 lmstudio/google/gemma-3n-e4b openai/gpt-4.1 openai/gpt-5 -opencode/gpt-5.1-codex -opencode/gpt-5.2-codex -opencode/kimi-k2 +devora/gpt-5.1-codex +devora/gpt-5.2-codex +devora/kimi-k2 openrouter/google/gemini-2.5-flash ``` diff --git a/.mimocode/command/ai-deps.md b/.devora/command/ai-deps.md similarity index 93% rename from .mimocode/command/ai-deps.md rename to .devora/command/ai-deps.md index 83783d5b..f2e91a69 100644 --- a/.mimocode/command/ai-deps.md +++ b/.devora/command/ai-deps.md @@ -2,7 +2,7 @@ description: "Bump AI sdk dependencies minor / patch versions only" --- -Please read @package.json and @packages/opencode/package.json. +Please read @package.json and @packages/devora/package.json. Your job is to look into AI SDK dependencies, figure out if they have versions that can be upgraded (minor or patch versions ONLY no major ignore major changes). diff --git a/.mimocode/command/changelog.md b/.devora/command/changelog.md similarity index 99% rename from .mimocode/command/changelog.md rename to .devora/command/changelog.md index 4cd30a70..05cc791c 100644 --- a/.mimocode/command/changelog.md +++ b/.devora/command/changelog.md @@ -1,5 +1,5 @@ --- -model: opencode/gpt-5.4 +model: devora/gpt-5.4 --- Create `UPCOMING_CHANGELOG.md` from the structured changelog input below. diff --git a/.mimocode/command/commit.md b/.devora/command/commit.md similarity index 95% rename from .mimocode/command/commit.md rename to .devora/command/commit.md index e88932a2..3f9c9633 100644 --- a/.mimocode/command/commit.md +++ b/.devora/command/commit.md @@ -1,6 +1,6 @@ --- description: git commit and push -model: opencode/kimi-k2.5 +model: devora/kimi-k2.5 subtask: true --- diff --git a/.mimocode/command/issues.md b/.devora/command/issues.md similarity index 73% rename from .mimocode/command/issues.md rename to .devora/command/issues.md index 75b59616..6e423470 100644 --- a/.mimocode/command/issues.md +++ b/.devora/command/issues.md @@ -1,9 +1,9 @@ --- description: "find issue(s) on github" -model: opencode/claude-haiku-4-5 +model: devora/claude-haiku-4-5 --- -Search through existing issues in anomalyco/opencode using the gh cli to find issues matching this query: +Search through existing issues in anomalyco/devora using the gh cli to find issues matching this query: $ARGUMENTS diff --git a/.mimocode/command/learn.md b/.devora/command/learn.md similarity index 100% rename from .mimocode/command/learn.md rename to .devora/command/learn.md diff --git a/.mimocode/command/rmslop.md b/.devora/command/rmslop.md similarity index 100% rename from .mimocode/command/rmslop.md rename to .devora/command/rmslop.md diff --git a/.mimocode/command/spellcheck.md b/.devora/command/spellcheck.md similarity index 100% rename from .mimocode/command/spellcheck.md rename to .devora/command/spellcheck.md diff --git a/.devora/devora.jsonc b/.devora/devora.jsonc new file mode 100644 index 00000000..90b658cf --- /dev/null +++ b/.devora/devora.jsonc @@ -0,0 +1,10 @@ +{ + "$schema": "https://devora.ai/config.json", + "provider": {}, + "permission": { + "edit": { + "packages/devora/migration/*": "deny", + }, + }, + "mcp": {}, +} diff --git a/.mimocode/env.d.ts b/.devora/env.d.ts similarity index 100% rename from .mimocode/env.d.ts rename to .devora/env.d.ts diff --git a/.mimocode/glossary/README.md b/.devora/glossary/README.md similarity index 93% rename from .mimocode/glossary/README.md rename to .devora/glossary/README.md index 98390038..b4cdc763 100644 --- a/.mimocode/glossary/README.md +++ b/.devora/glossary/README.md @@ -1,6 +1,6 @@ # Locale Glossaries -Use this folder for locale-specific translation guidance that supplements `.opencode/agent/translator.md`. +Use this folder for locale-specific translation guidance that supplements `.devora/agent/translator.md`. The global glossary in `translator.md` remains the source of truth for shared do-not-translate terms (commands, code, paths, product names, etc.). These locale files capture community learnings about phrasing and terminology preferences. @@ -33,11 +33,11 @@ Prefer guidance that is: ## Sources -- PR #12345: https://github.com/anomalyco/opencode/pull/12345 +- PR #12345: https://github.com/anomalyco/devora/pull/12345 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing) +- `Devora` (preserve casing) ## Preferred Terms diff --git a/.mimocode/glossary/ar.md b/.devora/glossary/ar.md similarity index 81% rename from .mimocode/glossary/ar.md rename to .devora/glossary/ar.md index 37355522..eae48117 100644 --- a/.mimocode/glossary/ar.md +++ b/.devora/glossary/ar.md @@ -2,12 +2,12 @@ ## Sources -- PR #9947: https://github.com/anomalyco/opencode/pull/9947 +- PR #9947: https://github.com/anomalyco/devora/pull/9947 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/br.md b/.devora/glossary/br.md similarity index 89% rename from .mimocode/glossary/br.md rename to .devora/glossary/br.md index fd3e7251..66002834 100644 --- a/.mimocode/glossary/br.md +++ b/.devora/glossary/br.md @@ -2,12 +2,12 @@ ## Sources -- PR #10086: https://github.com/anomalyco/opencode/pull/10086 +- PR #10086: https://github.com/anomalyco/devora/pull/10086 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Locale code `br` in repo config, code, and paths (repo alias for Brazilian Portuguese) diff --git a/.mimocode/glossary/bs.md b/.devora/glossary/bs.md similarity index 87% rename from .mimocode/glossary/bs.md rename to .devora/glossary/bs.md index aa3bd96f..48279e7b 100644 --- a/.mimocode/glossary/bs.md +++ b/.devora/glossary/bs.md @@ -2,12 +2,12 @@ ## Sources -- PR #12283: https://github.com/anomalyco/opencode/pull/12283 +- PR #12283: https://github.com/anomalyco/devora/pull/12283 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/da.md b/.devora/glossary/da.md similarity index 79% rename from .mimocode/glossary/da.md rename to .devora/glossary/da.md index e6322217..ac1a01c4 100644 --- a/.mimocode/glossary/da.md +++ b/.devora/glossary/da.md @@ -2,12 +2,12 @@ ## Sources -- PR #9821: https://github.com/anomalyco/opencode/pull/9821 +- PR #9821: https://github.com/anomalyco/devora/pull/9821 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/de.md b/.devora/glossary/de.md similarity index 79% rename from .mimocode/glossary/de.md rename to .devora/glossary/de.md index 0d2c49fa..aa731c9e 100644 --- a/.mimocode/glossary/de.md +++ b/.devora/glossary/de.md @@ -2,12 +2,12 @@ ## Sources -- PR #9817: https://github.com/anomalyco/opencode/pull/9817 +- PR #9817: https://github.com/anomalyco/devora/pull/9817 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/es.md b/.devora/glossary/es.md similarity index 79% rename from .mimocode/glossary/es.md rename to .devora/glossary/es.md index dc9b977e..b05246d7 100644 --- a/.mimocode/glossary/es.md +++ b/.devora/glossary/es.md @@ -2,12 +2,12 @@ ## Sources -- PR #9817: https://github.com/anomalyco/opencode/pull/9817 +- PR #9817: https://github.com/anomalyco/devora/pull/9817 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/fr.md b/.devora/glossary/fr.md similarity index 79% rename from .mimocode/glossary/fr.md rename to .devora/glossary/fr.md index 074c4de1..77d14a79 100644 --- a/.mimocode/glossary/fr.md +++ b/.devora/glossary/fr.md @@ -2,12 +2,12 @@ ## Sources -- PR #9821: https://github.com/anomalyco/opencode/pull/9821 +- PR #9821: https://github.com/anomalyco/devora/pull/9821 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/ja.md b/.devora/glossary/ja.md similarity index 81% rename from .mimocode/glossary/ja.md rename to .devora/glossary/ja.md index f0159ca9..473c7d42 100644 --- a/.mimocode/glossary/ja.md +++ b/.devora/glossary/ja.md @@ -2,13 +2,13 @@ ## Sources -- PR #9821: https://github.com/anomalyco/opencode/pull/9821 -- PR #13160: https://github.com/anomalyco/opencode/pull/13160 +- PR #9821: https://github.com/anomalyco/devora/pull/9821 +- PR #13160: https://github.com/anomalyco/devora/pull/13160 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/ko.md b/.devora/glossary/ko.md similarity index 79% rename from .mimocode/glossary/ko.md rename to .devora/glossary/ko.md index 71385c8a..f90498a8 100644 --- a/.mimocode/glossary/ko.md +++ b/.devora/glossary/ko.md @@ -2,12 +2,12 @@ ## Sources -- PR #9817: https://github.com/anomalyco/opencode/pull/9817 +- PR #9817: https://github.com/anomalyco/devora/pull/9817 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/no.md b/.devora/glossary/no.md similarity index 84% rename from .mimocode/glossary/no.md rename to .devora/glossary/no.md index d7159dca..b7b269d5 100644 --- a/.mimocode/glossary/no.md +++ b/.devora/glossary/no.md @@ -2,13 +2,13 @@ ## Sources -- PR #10018: https://github.com/anomalyco/opencode/pull/10018 -- PR #12935: https://github.com/anomalyco/opencode/pull/12935 +- PR #10018: https://github.com/anomalyco/devora/pull/10018 +- PR #12935: https://github.com/anomalyco/devora/pull/12935 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Sound names (PR #10018 notes these were intentionally left untranslated) diff --git a/.mimocode/glossary/pl.md b/.devora/glossary/pl.md similarity index 79% rename from .mimocode/glossary/pl.md rename to .devora/glossary/pl.md index e9bad7a5..912fd63d 100644 --- a/.mimocode/glossary/pl.md +++ b/.devora/glossary/pl.md @@ -2,12 +2,12 @@ ## Sources -- PR #9884: https://github.com/anomalyco/opencode/pull/9884 +- PR #9884: https://github.com/anomalyco/devora/pull/9884 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/ru.md b/.devora/glossary/ru.md similarity index 79% rename from .mimocode/glossary/ru.md rename to .devora/glossary/ru.md index 6fee0f94..efac99f6 100644 --- a/.mimocode/glossary/ru.md +++ b/.devora/glossary/ru.md @@ -2,12 +2,12 @@ ## Sources -- PR #9882: https://github.com/anomalyco/opencode/pull/9882 +- PR #9882: https://github.com/anomalyco/devora/pull/9882 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/th.md b/.devora/glossary/th.md similarity index 85% rename from .mimocode/glossary/th.md rename to .devora/glossary/th.md index 7b5a31d1..edb1070d 100644 --- a/.mimocode/glossary/th.md +++ b/.devora/glossary/th.md @@ -2,13 +2,13 @@ ## Sources -- PR #10809: https://github.com/anomalyco/opencode/pull/10809 -- PR #11496: https://github.com/anomalyco/opencode/pull/11496 +- PR #10809: https://github.com/anomalyco/devora/pull/10809 +- PR #11496: https://github.com/anomalyco/devora/pull/11496 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only in commands, package names, paths, or code) +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - Commands, flags, file paths, and code literals (keep exactly as written) diff --git a/.mimocode/glossary/tr.md b/.devora/glossary/tr.md similarity index 81% rename from .mimocode/glossary/tr.md rename to .devora/glossary/tr.md index 72b1cdfb..f34c28a3 100644 --- a/.mimocode/glossary/tr.md +++ b/.devora/glossary/tr.md @@ -2,12 +2,12 @@ ## Sources -- PR #15835: https://github.com/anomalyco/opencode/pull/15835 +- PR #15835: https://github.com/anomalyco/devora/pull/15835 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose, docs, and UI copy) -- Keep lowercase `opencode` in commands, package names, paths, URLs, and other exact identifiers +- `Devora` (preserve casing in prose, docs, and UI copy) +- Keep lowercase `devora` in commands, package names, paths, URLs, and other exact identifiers - `` stays the literal key token in code blocks; use `Tab` for the nearby explanatory label in prose - Commands, flags, file paths, and code literals (keep exactly as written) @@ -27,7 +27,7 @@ These are PR-backed wording preferences and may evolve. - Prefer natural Turkish phrasing over literal translation - Merge broken sentence fragments into one clear sentence when the source is a single thought -- Keep product naming consistent: `OpenCode` in prose, `opencode` only for exact technical identifiers +- Keep product naming consistent: `Devora` in prose, `devora` only for exact technical identifiers - When an English technical term is intentionally kept, add a short Turkish clarification only if it improves readability ## Avoid @@ -35,4 +35,4 @@ These are PR-backed wording preferences and may evolve. - Avoid `beta olarak kullanılabilir` when `beta olarak mevcut` fits - Avoid `Önce gizlilik için tasarlandı`; use the more natural reviewed wording instead - Avoid `Sekme` for the translated key label in prose when referring to `` -- Avoid changing `opencode` to `OpenCode` inside commands, URLs, package names, or code literals +- Avoid changing `devora` to `Devora` inside commands, URLs, package names, or code literals diff --git a/.mimocode/glossary/zh-cn.md b/.devora/glossary/zh-cn.md similarity index 86% rename from .mimocode/glossary/zh-cn.md rename to .devora/glossary/zh-cn.md index 054e94b7..4d7ca0b0 100644 --- a/.mimocode/glossary/zh-cn.md +++ b/.devora/glossary/zh-cn.md @@ -2,13 +2,13 @@ ## Sources -- PR #13942: https://github.com/anomalyco/opencode/pull/13942 +- PR #13942: https://github.com/anomalyco/devora/pull/13942 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only when it is part of commands, package names, paths, or code) -- `OpenCode Zen` -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only when it is part of commands, package names, paths, or code) +- `Devora Zen` +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - `Model Context Protocol` (prefer the English expansion when introducing `MCP`) @@ -38,5 +38,5 @@ These are preferred terms for docs/UI prose and may evolve. ## Avoid -- Avoid `opencode` in prose when referring to the product name; use `OpenCode` +- Avoid `devora` in prose when referring to the product name; use `Devora` - Avoid mixing alternative terms for the same concept across docs when a preferred term is already established diff --git a/.mimocode/glossary/zh-tw.md b/.devora/glossary/zh-tw.md similarity index 86% rename from .mimocode/glossary/zh-tw.md rename to .devora/glossary/zh-tw.md index 283660e1..50da0c2c 100644 --- a/.mimocode/glossary/zh-tw.md +++ b/.devora/glossary/zh-tw.md @@ -2,13 +2,13 @@ ## Sources -- PR #13942: https://github.com/anomalyco/opencode/pull/13942 +- PR #13942: https://github.com/anomalyco/devora/pull/13942 ## Do Not Translate (Locale Additions) -- `OpenCode` (preserve casing in prose; keep `opencode` only when it is part of commands, package names, paths, or code) -- `OpenCode Zen` -- `OpenCode CLI` +- `Devora` (preserve casing in prose; keep `devora` only when it is part of commands, package names, paths, or code) +- `Devora Zen` +- `Devora CLI` - `CLI`, `TUI`, `MCP`, `OAuth` - `Model Context Protocol` (prefer the English expansion when introducing `MCP`) @@ -38,5 +38,5 @@ These are preferred terms for docs/UI prose and may evolve. ## Avoid -- Avoid `opencode` in prose when referring to the product name; use `OpenCode` +- Avoid `devora` in prose when referring to the product name; use `Devora` - Avoid mixing alternative terms for the same concept across docs when a preferred term is already established diff --git a/.mimocode/plugins/smoke-theme.json b/.devora/plugins/smoke-theme.json similarity index 98% rename from .mimocode/plugins/smoke-theme.json rename to .devora/plugins/smoke-theme.json index 6e4595d4..8f54bcb7 100644 --- a/.mimocode/plugins/smoke-theme.json +++ b/.devora/plugins/smoke-theme.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "nord0": "#2E3440", "nord1": "#3B4252", diff --git a/.mimocode/plugins/tui-smoke.tsx b/.devora/plugins/tui-smoke.tsx similarity index 99% rename from .mimocode/plugins/tui-smoke.tsx rename to .devora/plugins/tui-smoke.tsx index b0db1394..69aada39 100644 --- a/.mimocode/plugins/tui-smoke.tsx +++ b/.devora/plugins/tui-smoke.tsx @@ -8,7 +8,7 @@ import type { TuiPluginMeta, TuiPluginModule, TuiSlotPlugin, -} from "@mimo-ai/plugin/tui" +} from "@devora-ai/plugin/tui" const tabs = ["overview", "counter", "help"] const bind = { diff --git a/.mimocode/skills/effect/SKILL.md b/.devora/skills/effect/SKILL.md similarity index 90% rename from .mimocode/skills/effect/SKILL.md rename to .devora/skills/effect/SKILL.md index 47581463..b3d7a204 100644 --- a/.mimocode/skills/effect/SKILL.md +++ b/.devora/skills/effect/SKILL.md @@ -10,7 +10,7 @@ This codebase uses Effect, a framework for writing typescript. ## How to Answer Effect Questions 1. Clone the Effect repository: `https://github.com/Effect-TS/effect-smol` to - `.opencode/references/effect-smol` in this project NOT the skill folder. + `.devora/references/effect-smol` in this project NOT the skill folder. 2. Use the explore agent to search the codebase for answers about Effect patterns, APIs, and concepts 3. Provide responses based on the actual Effect source code and documentation diff --git a/.mimocode/themes/.gitignore b/.devora/themes/.gitignore similarity index 100% rename from .mimocode/themes/.gitignore rename to .devora/themes/.gitignore diff --git a/.mimocode/themes/mytheme.json b/.devora/themes/mytheme.json similarity index 98% rename from .mimocode/themes/mytheme.json rename to .devora/themes/mytheme.json index 0e6b9480..56f7cc27 100644 --- a/.mimocode/themes/mytheme.json +++ b/.devora/themes/mytheme.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "nord0": "#2E3440", "nord1": "#3B4252", diff --git a/.mimocode/tui.json b/.devora/tui.json similarity index 87% rename from .mimocode/tui.json rename to .devora/tui.json index 1eee01b3..33e967e7 100644 --- a/.mimocode/tui.json +++ b/.devora/tui.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/tui.json", + "$schema": "https://devora.ai/tui.json", "plugin": [ [ "./plugins/tui-smoke.tsx", diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index fe1ec840..7b803faf 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -1,5 +1,5 @@ name: Bug report -description: Report an issue that should be fixed +description: Report a Devora issue that should be fixed labels: ["bug"] body: - type: textarea @@ -20,10 +20,10 @@ body: required: false - type: input - id: opencode-version + id: devora-version attributes: - label: OpenCode version - description: What version of OpenCode are you using? + label: Devora version + description: What version of Devora are you using? validations: required: false @@ -52,7 +52,7 @@ body: id: os attributes: label: Operating System - description: what OS are you using? + description: What OS are you using? placeholder: e.g., macOS 26.0.1, Ubuntu 22.04, Windows 11 validations: required: false @@ -61,7 +61,7 @@ body: id: terminal attributes: label: Terminal - description: what terminal are you using? + description: What terminal are you using? placeholder: e.g., iTerm2, Ghostty, Alacritty, Windows Terminal validations: required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 52eec909..5d32b4eb 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - - name: 💬 Discord Community - url: https://discord.gg/opencode - about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question. + - name: Devora community + url: https://discord.gg/devora + about: For quick questions or real-time discussion. Issues are still preferred for searchable project history. diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml index 92e6c475..f7d7039b 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.yml +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -1,5 +1,5 @@ -name: 🚀 Feature Request -description: Suggest an idea, feature, or enhancement +name: Feature request +description: Suggest an idea, feature, or enhancement for Devora labels: [discussion] title: "[FEATURE]:" @@ -7,14 +7,14 @@ body: - type: checkboxes id: verified attributes: - label: Feature hasn't been suggested before. + label: This feature has not been suggested before. options: - - label: I have verified this feature I'm about to request hasn't been suggested before. + - label: I checked existing Devora issues before opening this request. required: true - type: textarea attributes: - label: Describe the enhancement you want to request - description: What do you want to change or add? What are the benefits of implementing this? Try to be detailed so we can understand your request better :) + label: Describe the enhancement + description: What should Devora change or add, and why would it help? validations: required: true diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml index 2310bfcc..efdd2432 100644 --- a/.github/ISSUE_TEMPLATE/question.yml +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -1,11 +1,11 @@ name: Question -description: Ask a question +description: Ask a question about Devora labels: ["question"] body: - type: textarea id: question attributes: label: Question - description: What's your question? + description: What would you like to know? validations: required: true diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 393bf905..927721a1 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -11,9 +11,9 @@ Closes # ### What does this PR do? -Please provide a description of the issue, the changes you made to fix it, and why they work. It is expected that you understand why your changes work and if you do not understand why at least say as much so a maintainer knows how much to value the PR. +Please describe the issue, the changes you made, and why the fix works. Devora maintainers need enough context to review the PR without guessing. -**If you paste a large clearly AI generated description here your PR may be IGNORED or CLOSED!** +**Large, generic AI-generated descriptions may be ignored or closed. Keep this specific to the Devora change.** ### How did you verify your code works? @@ -26,4 +26,4 @@ _If this is a UI change, please include a screenshot or recording._ - [ ] I have tested my changes locally - [ ] I have not included unrelated changes in this PR -_If you do not follow this template your PR will be automatically rejected._ +_PRs that skip this template may be closed until the missing context is added._ diff --git a/.github/workflows/desktop-auto-release.yml b/.github/workflows/desktop-auto-release.yml new file mode 100644 index 00000000..98a9c416 --- /dev/null +++ b/.github/workflows/desktop-auto-release.yml @@ -0,0 +1,60 @@ +name: desktop auto release + +on: + push: + branches: + - main + +permissions: + contents: write + +concurrency: + group: desktop-auto-release-${{ github.ref }} + cancel-in-progress: true + +jobs: + bump: + name: Bump version and trigger release + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, '[skip ci]')" + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Bump version and push tag + shell: bash + run: | + git fetch --tags + + LATEST_TAG=$(git tag -l "v[0-9]*.[0-9]*.[0-9]*" --sort=-v:refname | head -1) + + if [ -z "$LATEST_TAG" ]; then + echo "No version tags found, starting from v0.1.0" + NEW_VERSION="0.1.0" + else + VERSION="${LATEST_TAG#v}" + MAJOR=$(echo "$VERSION" | cut -d. -f1) + MINOR=$(echo "$VERSION" | cut -d. -f2) + PATCH=$(echo "$VERSION" | cut -d. -f3) + NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH + 1))" + fi + + NEW_TAG="v${NEW_VERSION}" + + if gh release view "$NEW_TAG" &>/dev/null; then + echo "Release $NEW_TAG already exists, skipping" + exit 0 + fi + + echo "Bumping version: $LATEST_TAG -> $NEW_TAG" + echo "NEW_TAG=$NEW_TAG" >> "$GITHUB_ENV" + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -a "$NEW_TAG" -m "$NEW_VERSION" + git push origin "$NEW_TAG" + env: + GH_TOKEN: ${{ github.token }} \ No newline at end of file diff --git a/.github/workflows/desktop-macos-release.yml b/.github/workflows/desktop-macos-release.yml new file mode 100644 index 00000000..69b3eac6 --- /dev/null +++ b/.github/workflows/desktop-macos-release.yml @@ -0,0 +1,132 @@ +name: desktop macOS release + +on: + push: + branches: + - main + tags: + - "v*" + workflow_dispatch: + inputs: + version: + description: "Version to publish, for example 0.1.1" + required: true + type: string + +permissions: + contents: write + +concurrency: + group: desktop-macos-release-${{ github.ref }} + cancel-in-progress: false + +jobs: + build: + name: Build macOS app + runs-on: macos-15 + if: | + github.event_name != 'push' || + startsWith(github.ref, 'refs/tags/v') || + (github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, '[skip ci]')) + env: + GH_TOKEN: ${{ github.token }} + GITHUB_TOKEN: ${{ github.token }} + DEVORA_CHANNEL: prod + DEVORA_UPDATE_OWNER: SheriAkhtamov + DEVORA_UPDATE_REPO: Devora + DEVORA_SIGN_MAC: ${{ secrets.CSC_LINK != '' && 'true' || 'false' }} + CSC_IDENTITY_AUTO_DISCOVERY: ${{ secrets.CSC_LINK != '' && 'true' || 'false' }} + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Resolve release version + shell: bash + run: | + if [ "${{ github.event_name }}" = "push" ] && [ "${{ github.ref }}" = "refs/heads/main" ] && [ "${DEVORA_SIGN_MAC}" != "true" ]; then + VERSION=$(bun -e 'console.log((await Bun.file("packages/desktop/package.json").json()).version)') + echo "Unsigned macOS build; skipping release tag and public auto-update publish" + elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + VERSION="${{ inputs.version }}" + elif [[ "${{ github.ref }}" == refs/tags/v* ]]; then + VERSION="${GITHUB_REF_NAME#v}" + else + git fetch --tags + LATEST_TAG=$(git tag -l "v[0-9]*.[0-9]*.[0-9]*" --sort=-v:refname | head -1) + + if [ -z "$LATEST_TAG" ]; then + VERSION="0.1.0" + else + BASE="${LATEST_TAG#v}" + MAJOR=$(echo "$BASE" | cut -d. -f1) + MINOR=$(echo "$BASE" | cut -d. -f2) + PATCH=$(echo "$BASE" | cut -d. -f3) + VERSION="${MAJOR}.${MINOR}.$((PATCH + 1))" + fi + + if gh release view "v${VERSION}" &>/dev/null; then + echo "Release v${VERSION} already exists, skipping" + exit 0 + fi + + echo "Auto-bumped version: $LATEST_TAG -> v${VERSION}" + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -a "v${VERSION}" -m "${VERSION}" + git push origin "v${VERSION}" + fi + + if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+([-.][0-9A-Za-z.]+)?$ ]]; then + echo "Invalid version: $VERSION" >&2 + exit 1 + fi + + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -a "v${VERSION}" -m "${VERSION}" + git push origin "v${VERSION}" + fi + + echo "DEVORA_VERSION=$VERSION" >> "$GITHUB_ENV" + echo "RELEASE_TAG=v$VERSION" >> "$GITHUB_ENV" + + - name: Prepare desktop version + working-directory: packages/desktop + run: bun ./scripts/prepare.ts + + - name: Build desktop app + working-directory: packages/desktop + run: bun run build + + - name: Package and publish macOS release + if: env.DEVORA_SIGN_MAC == 'true' + working-directory: packages/desktop + run: bun run package:mac -- --arm64 --publish always + + - name: Package unsigned macOS artifact + if: env.DEVORA_SIGN_MAC != 'true' + working-directory: packages/desktop + run: bun run package:mac -- --arm64 --publish never + + - name: Upload workflow artifacts + uses: actions/upload-artifact@v4 + with: + name: devora-desktop-macos-${{ env.DEVORA_VERSION }} + path: | + packages/desktop/dist/*.dmg + packages/desktop/dist/*.zip + packages/desktop/dist/latest-mac.yml + if-no-files-found: error diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index 09b91942..8ce95d2d 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -2,9 +2,9 @@ name: typecheck on: push: - branches: [dev] + branches: [main] pull_request: - branches: [dev] + branches: [main] workflow_dispatch: jobs: diff --git a/.gitignore b/.gitignore index e0f540ba..6d17097c 100644 --- a/.gitignore +++ b/.gitignore @@ -17,14 +17,14 @@ ts-dist /result refs Session.vim -/opencode.json +/devora.json a.out target .scripts .direnv/ # Local dev files -opencode-dev +devora-dev UPCOMING_CHANGELOG.md logs/ *.bun-build @@ -34,8 +34,8 @@ tsconfig.tsbuildinfo # Local agent harness state .claude/ *.pid -.mimo-worktrees -.mimocode/ +.devora-worktrees +.devora/ # experiment run artifacts (regenerated per run, not source) experiment/*.log diff --git a/.mimocode/mimocode.jsonc b/.mimocode/mimocode.jsonc deleted file mode 100644 index 7276ef25..00000000 --- a/.mimocode/mimocode.jsonc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://opencode.ai/config.json", - "provider": {}, - "permission": { - "edit": { - "packages/opencode/migration/*": "deny", - }, - }, - "mcp": {}, -} diff --git a/.vscode/launch.example.json b/.vscode/launch.example.json index 3f8a2a76..957fe526 100644 --- a/.vscode/launch.example.json +++ b/.vscode/launch.example.json @@ -4,7 +4,7 @@ { "type": "bun", "request": "attach", - "name": "opencode (attach)", + "name": "devora (attach)", "url": "ws://localhost:6499/" } ] diff --git a/AGENTS.md b/AGENTS.md index 48322c64..867f2ec2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,8 +1,8 @@ - Always use superpowers skill instead of builtin plan mode. - To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`. - ALWAYS USE PARALLEL TOOLS WHEN APPLICABLE. -- The default branch in this repo is `dev`. -- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs. +- The default branch in this repo is `main`. +- Use `main` or `origin/main` for diffs unless a task explicitly targets another branch. - Prefer automation: execute requested actions without confirmation unless blocked by missing info or safety/irreversibility. ## Style Guide @@ -97,8 +97,8 @@ const table = sqliteTable("session", { - Avoid mocks as much as possible - Test actual implementation, do not duplicate logic into tests -- Tests cannot run from repo root (guard: `do-not-run-tests-from-root`); run from package dirs like `packages/opencode`. +- Tests cannot run from repo root (guard: `do-not-run-tests-from-root`); run from package dirs like `packages/devora`. ## Type Checking -- Always run `bun typecheck` from package directories (e.g., `packages/opencode`), never `tsc` directly. +- Always run `bun typecheck` from package directories (e.g., `packages/devora`), never `tsc` directly. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 84dbd4be..2835c91d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ -# Contributing to OpenCode +# Contributing to Devora -We want to make it easy for you to contribute to OpenCode. Here are the most common type of changes that get merged: +Devora aims to make contribution work straightforward. The most common types of changes that get merged are: - Bug fixes - Additional LSPs / Formatters @@ -10,26 +10,26 @@ We want to make it easy for you to contribute to OpenCode. Here are the most com - Missing standard behavior - Documentation improvements -However, any UI or core product feature must go through a design review with the core team before implementation. +However, any UI or core product feature should go through a design review with Sheri Akhtamov or a project maintainer before implementation. -If you are unsure if a PR would be accepted, feel free to ask a maintainer or look for issues with any of the following labels: +If you are unsure if a PR would be accepted, ask in an issue or look for issues with any of the following labels: -- [`help wanted`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Ahelp-wanted) -- [`good first issue`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) -- [`bug`](https://github.com/anomalyco/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) -- [`perf`](https://github.com/anomalyco/opencode/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22perf%22) +- [`help wanted`](https://github.com/SheriAkhtamov/Devora/issues?q=is%3Aissue%20state%3Aopen%20label%3Ahelp-wanted) +- [`good first issue`](https://github.com/SheriAkhtamov/Devora/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) +- [`bug`](https://github.com/SheriAkhtamov/Devora/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) +- [`perf`](https://github.com/SheriAkhtamov/Devora/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22perf%22) > [!NOTE] > PRs that ignore these guardrails will likely be closed. -Want to take on an issue? Leave a comment and a maintainer may assign it to you unless it is something we are already working on. +Want to take on an issue? Leave a comment and a maintainer may assign it to you unless it is already in progress. ## Adding New Providers New providers shouldn't require many if ANY code changes, but if you want to add support for a new provider first make a PR to: -https://github.com/anomalyco/models.dev +https://models.dev -## Developing OpenCode +## Developing Devora - Requirements: Bun 1.3+ - Install dependencies and start the dev server from the repo root: @@ -41,44 +41,44 @@ https://github.com/anomalyco/models.dev ### Running against a different directory -By default, `bun dev` runs OpenCode in the `packages/opencode` directory. To run it against a different directory or repository: +By default, `bun dev` runs Devora in the `packages/devora` directory. To run it against a different directory or repository: ```bash bun dev ``` -To run OpenCode in the root of the opencode repo itself: +To run Devora in the root of the devora repo itself: ```bash bun dev . ``` -### Building a "localcode" +### Building a local CLI To compile a standalone executable: ```bash -./packages/opencode/script/build.ts --single +./packages/devora/script/build.ts --single ``` Then run it with: ```bash -./packages/opencode/dist/opencode-/bin/opencode +./packages/devora/dist/devora-/bin/devora ``` Replace `` with your platform (e.g., `darwin-arm64`, `linux-x64`). - Core pieces: - - `packages/opencode`: OpenCode core business logic & server. - - `packages/opencode/src/cli/cmd/tui/`: The TUI code, written in SolidJS with [opentui](https://github.com/sst/opentui) + - `packages/devora`: Devora core business logic & server. + - `packages/devora/src/cli/cmd/tui/`: The TUI code, written in SolidJS with [opentui](https://github.com/sst/opentui) - `packages/app`: The shared web UI components, written in SolidJS - - `packages/desktop`: The native desktop app, built with Tauri (wraps `packages/app`) - - `packages/plugin`: Source for `@mimo-ai/plugin` + - `packages/desktop`: The native desktop app, built with Electron (wraps `packages/app`) + - `packages/plugin`: Source for `@devora-ai/plugin` -### Understanding bun dev vs opencode +### Understanding bun dev vs devora -During development, `bun dev` is the local equivalent of the built `opencode` command. Both run the same CLI interface: +During development, `bun dev` is the local equivalent of the built `devora` command. Both run the same CLI interface: ```bash # Development (from project root) @@ -88,15 +88,15 @@ bun dev web # Start server + open web interface bun dev # Start TUI in specific directory # Production -opencode --help # Show all available commands -opencode serve # Start headless API server -opencode web # Start server + open web interface -opencode # Start TUI in specific directory +devora --help # Show all available commands +devora serve # Start headless API server +devora web # Start server + open web interface +devora # Start TUI in specific directory ``` ### Running the API Server -To start the OpenCode headless API server: +To start the Devora headless API server: ```bash bun dev serve @@ -112,7 +112,7 @@ bun dev serve --port 8080 To test UI changes during development: -1. **First, start the OpenCode server** (see [Running the API Server](#running-the-api-server) section above) +1. **First, start the Devora server** (see [Running the API Server](#running-the-api-server) section above) 2. **Then run the web app:** ```bash @@ -123,15 +123,15 @@ This starts a local dev server at http://localhost:5173 (or similar port shown i ### Running the Desktop App -The desktop app is a native Tauri application that wraps the web UI. +The desktop app is a native Electron application that wraps the web UI. To run the native desktop app: ```bash -bun run --cwd packages/desktop tauri dev +bun run dev:desktop ``` -This starts the web dev server on http://localhost:1420 and opens the native window. +This starts the Electron development app and opens the native window. If you only want the web dev server (no native shell): @@ -139,19 +139,20 @@ If you only want the web dev server (no native shell): bun run --cwd packages/desktop dev ``` -To create a production `dist/` and build the native app bundle: +To create a production `dist/` and build the native macOS app bundle: ```bash -bun run --cwd packages/desktop tauri build +bun run --cwd packages/desktop build +bun run --cwd packages/desktop package:mac -- --arm64 --publish never ``` -This runs `bun run --cwd packages/desktop build` automatically via Tauri’s `beforeBuildCommand`. +The first command builds the renderer and Electron entrypoints. The second command packages the macOS app locally without publishing a release. > [!NOTE] -> Running the desktop app requires additional Tauri dependencies (Rust toolchain, platform-specific libraries). See the [Tauri prerequisites](https://v2.tauri.app/start/prerequisites/) for setup instructions. +> Publishing desktop updates is handled by the GitHub Actions release workflow in this repository. Local desktop packaging is mainly for verification. > [!NOTE] -> If you make changes to the API or SDK (e.g. `packages/opencode/src/server/server.ts`), run `./script/generate.ts` to regenerate the SDK and related files. +> If you make changes to the API or SDK (e.g. `packages/devora/src/server/server.ts`), run `./packages/sdk/js/script/build.ts` to regenerate the JavaScript SDK and related files. Please try to follow the [style guide](./AGENTS.md) @@ -159,17 +160,17 @@ Please try to follow the [style guide](./AGENTS.md) Bun debugging is currently rough around the edges. We hope this guide helps you get set up and avoid some pain points. -The most reliable way to debug OpenCode is to run it manually in a terminal via `bun run --inspect= dev ...` and attach +The most reliable way to debug Devora is to run it manually in a terminal via `bun run --inspect= dev ...` and attach your debugger via that URL. Other methods can result in breakpoints being mapped incorrectly, at least in VSCode (YMMV). Caveats: -- If you want to run the OpenCode TUI and have breakpoints triggered in the server code, you might need to run `bun dev spawn` instead of +- If you want to run the Devora TUI and have breakpoints triggered in the server code, you might need to run `bun dev spawn` instead of the usual `bun dev`. This is because `bun dev` runs the server in a worker thread and breakpoints might not work there. - If `spawn` does not work for you, you can debug the server separately: - - Debug server: `bun run --inspect=ws://localhost:6499/ --cwd packages/opencode ./src/index.ts serve --port 4096`, - then attach TUI with `opencode attach http://localhost:4096` - - Debug TUI: `bun run --inspect=ws://localhost:6499/ --cwd packages/opencode --conditions=browser ./src/index.ts` + - Debug server: `bun run --inspect=ws://localhost:6499/ --cwd packages/devora ./src/index.ts serve --port 4096`, + then attach TUI with `devora attach http://localhost:4096` + - Debug TUI: `bun run --inspect=ws://localhost:6499/ --cwd packages/devora --conditions=browser ./src/index.ts` Other tips and tricks: @@ -178,12 +179,12 @@ Other tips and tricks: #### VSCode Setup -If you use VSCode, you can use our example configurations [.vscode/settings.example.json](.vscode/settings.example.json) and [.vscode/launch.example.json](.vscode/launch.example.json). +If you use VSCode, you can use the example configurations [.vscode/settings.example.json](.vscode/settings.example.json) and [.vscode/launch.example.json](.vscode/launch.example.json). Some debug methods that can be problematic: - Debug configurations with `"request": "launch"` can have breakpoints incorrectly mapped and thus unusable -- The same problem arises when running OpenCode in the VSCode `JavaScript Debug Terminal` +- The same problem arises when running Devora in the VSCode `JavaScript Debug Terminal` With that said, you may want to try these methods, as they might work for you. @@ -236,7 +237,7 @@ You can optionally include a scope to indicate which package is affected: - `feat(app):` feature in the app package - `fix(desktop):` bug fix in the desktop package -- `chore(opencode):` maintenance in the opencode package +- `chore(devora):` maintenance in the devora package Examples: @@ -262,7 +263,7 @@ These are not strictly enforced, they are just general guidelines: ## Feature Requests -For net-new functionality, start with a design conversation. Open an issue describing the problem, your proposed approach (optional), and why it belongs in OpenCode. The core team will help decide whether it should move forward; please wait for that approval instead of opening a feature PR directly. +For net-new functionality, start with a design conversation. Open an issue describing the problem, your proposed approach (optional), and why it belongs in Devora. Sheri Akhtamov or a project maintainer will help decide whether it should move forward; please wait for that approval instead of opening a feature PR directly. ## Trust & Vouch System @@ -271,7 +272,7 @@ This project uses [vouch](https://github.com/mitchellh/vouch) to manage contribu ### How it works - **Vouched users** are explicitly trusted contributors. -- **Denounced users** are explicitly blocked. Issues and pull requests from denounced users are automatically closed. If you have been denounced, you can request to be unvouched by reaching out to a maintainer on [Discord](https://opencode.ai/discord) +- **Denounced users** are explicitly blocked. Issues and pull requests from denounced users are automatically closed. If you have been denounced, you can request to be unvouched by opening a respectful follow-up issue for a maintainer to review. - **Everyone else** can participate normally — you don't need to be vouched to open issues or PRs. ### For maintainers @@ -293,7 +294,7 @@ Denouncement is reserved for users who repeatedly submit low-quality AI-generate ## Issue Requirements -All issues **must** use one of our issue templates: +All issues **must** use one of the Devora issue templates: - **Bug report** — for reporting bugs (requires a description) - **Feature request** — for suggesting enhancements (requires verification checkbox and description) diff --git a/LICENSE b/LICENSE index 83621ff2..c3f8707e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,6 @@ MIT License +Copyright (c) 2026 Sheri Akhtamov and Devora contributors Copyright (c) 2026 MiMo Code, Xiaomi Corporation Copyright (c) 2025 opencode diff --git a/README.md b/README.md index fc276fdc..24ec0ec7 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,24 @@ -

MiMoCode

+

Devora

- MiMoCode + Devora

-

An open-source AI coding agent with cross-session memory.

+

Sheri Akhtamov's open-source AI coding agent with cross-session memory.

中文 | English

- Website | Blog + Repository | Releases

--- -MiMoCode is a terminal-native AI coding assistant. It can read and write code, run commands, manage Git, and use a persistent memory system to keep a deep understanding of your project across sessions while continuously improving itself. +Devora is a terminal-native AI coding assistant maintained by Sheri Akhtamov. It can read and write code, run commands, manage Git, and use a persistent memory system to keep a deep understanding of your project across sessions while continuously improving itself. -MiMo Auto is built in as a free-for-limited-time channel, so you can start with zero configuration. MiMoCode also supports connecting to any mainstream LLM provider API. +Devora Auto is built in as a free-for-limited-time channel, so you can start with zero configuration. Devora also supports connecting to any mainstream LLM provider API. --- @@ -26,15 +26,15 @@ MiMo Auto is built in as a free-for-limited-time channel, so you can start with ```bash # One-line install -curl -fsSL https://mimo.xiaomi.com/install | bash +curl -fsSL https://raw.githubusercontent.com/SheriAkhtamov/Devora/main/install | bash # Or install via npm -npm install -g @mimo-ai/cli +npm install -g @devora-ai/cli ``` The first launch guides you through configuration automatically. Supported options: -- **MiMo Auto (free for a limited time)** — anonymous channel, zero configuration -- **Xiaomi MiMo Platform** — OAuth login +- **Devora Auto (free for a limited time)** — anonymous channel, zero configuration +- **Devora Platform** — OAuth login - **Import from Claude Code** — migrate existing authentication in one step - **Custom Provider** — add any OpenAI-compatible API in the TUI @@ -87,7 +87,7 @@ Compose mode provides a structured workflow for specs-driven development. It inc ### Voice Input -Real-time streaming voice input powered by TenVAD and MiMo ASR. Activate with `/voice`, then speak — audio is segmented by pauses and transcribed incrementally into the input. Available for MiMo logged-in users. +Real-time streaming voice input powered by TenVAD and Devora ASR. Activate with `/voice`, then speak — audio is segmented by pauses and transcribed incrementally into the input. Available for Devora logged-in users. ### Dream & Distill @@ -98,7 +98,7 @@ Real-time streaming voice input powered by TenVAD and MiMo ASR. Activate with `/ ## Configuration -MiMoCode is configured via `.mimocode/mimocode.json` in the project directory (or `~/.config/mimocode/mimocode.json` globally). Key options include: +Devora is configured via `.devora/devora.jsonc` in the project directory (or `~/.config/devora/devora.jsonc` globally). Key options include: - Provider and model selection - Agent permissions and custom agents @@ -120,20 +120,18 @@ bun turbo typecheck # Type check --- -## Relationship to OpenCode +## Project -MiMoCode is built as a fork of [OpenCode](https://github.com/anomalyco/opencode). It keeps all core OpenCode capabilities (multiple providers, TUI, LSP, MCP, plugins) and adds persistent memory, intelligent context management, subagent orchestration, goal-driven autonomous loops, compose workflows, and self-improvement via dream/distill. +Devora is maintained by Sheri Akhtamov in [SheriAkhtamov/Devora](https://github.com/SheriAkhtamov/Devora). This repository contains the CLI, desktop app, web UI, SDK, plugin system, release scripts, and update configuration for the Devora distribution. --- ## Community -Scan the QR code to join the community group chat: +Scan the QR code to subscribe to the author’s channel:

Community group chat QR code 1 -    - Community group chat QR code 2

--- @@ -142,6 +140,6 @@ Scan the QR code to join the community group chat: Source code is licensed under the [MIT License](./LICENSE). -Use of MiMoCode is also subject to the [Use Restrictions](./USE_RESTRICTIONS.md). -Use of Xiaomi MiMo-hosted services is subject to the [MiMo Terms of Service](https://platform.xiaomimimo.com/docs/terms/user-agreement). -Use of the MiMo name, logo, and trademarks is subject to the MiMo Trademark Policy. +Use of Devora is also subject to the [Use Restrictions](./USE_RESTRICTIONS.md). +Provider-hosted services are subject to the terms of the provider you configure. +The Devora name, logo, and distribution branding are maintained by Sheri Akhtamov. diff --git a/README.zh.md b/README.zh.md index dd67ba43..0f54551f 100644 --- a/README.zh.md +++ b/README.zh.md @@ -1,24 +1,24 @@ -

MiMoCode

+

Devora

- MiMoCode + Devora

-

开源 AI 编程智能体,拥有跨会话记忆。

+

Sheri Akhtamov 维护的开源 AI 编程智能体,拥有跨会话记忆。

中文 | English

- 官网 | 博客 + 代码仓库 | 发布版本

--- -MiMoCode 是一个终端原生的 AI 编程助手。它能读写代码、执行命令、管理 Git,通过持久化记忆系统,在多次会话间保持对你项目的深度理解,并自我进化。 +Devora 是 Sheri Akhtamov 维护的终端原生 AI 编程助手。它能读写代码、执行命令、管理 Git,通过持久化记忆系统,在多次会话间保持对你项目的深度理解,并自我进化。 -内置 MiMo Auto 限时免费通道——零配置即可开始使用。也支持接入各家主流 LLM 厂商 API。 +内置 Devora Auto 限时免费通道——零配置即可开始使用。也支持接入各家主流 LLM 厂商 API。 --- @@ -26,15 +26,15 @@ MiMoCode 是一个终端原生的 AI 编程助手。它能读写代码、执行 ```bash # 一键安装 -curl -fsSL https://mimo.xiaomi.com/install | bash +curl -fsSL https://raw.githubusercontent.com/SheriAkhtamov/Devora/main/install | bash # 或通过 npm 安装 -npm install -g @mimo-ai/cli +npm install -g @devora-ai/cli ``` 首次启动自动引导配置。支持: -- **MiMo Auto(限时免费)** — 匿名通道,零配置 -- **小米 MiMo 平台** — OAuth 登录 +- **Devora Auto(限时免费)** — 匿名通道,零配置 +- **Devora 平台** — OAuth 登录 - **从 Claude Code 导入** — 一键迁移已有认证 - **自定义 Provider** — TUI 内添加任意 OpenAI 兼容 API @@ -87,7 +87,7 @@ Compose 模式提供结构化的 specs-driven 开发流程,内置规划、执 ### 语音输入 -基于 TenVAD 和 MiMo ASR 的实时流式语音输入。通过 `/voice` 激活,按停顿分片转写,文本逐段追加到输入框。仅对 MiMo 登录用户可用。 +基于 TenVAD 和 Devora ASR 的实时流式语音输入。通过 `/voice` 激活,按停顿分片转写,文本逐段追加到输入框。仅对 Devora 登录用户可用。 ### Dream & Distill @@ -98,7 +98,7 @@ Compose 模式提供结构化的 specs-driven 开发流程,内置规划、执 ## 配置 -通过项目目录下的 `.mimocode/mimocode.json`(或全局 `~/.config/mimocode/mimocode.json`)配置。主要选项包括: +通过项目目录下的 `.devora/devora.jsonc`(或全局 `~/.config/devora/devora.jsonc`)配置。主要选项包括: - Provider 和模型选择 - Agent 权限和自定义 Agent @@ -120,15 +120,15 @@ bun turbo typecheck # 类型检查 --- -## 与 OpenCode 的关系 +## 项目 -MiMoCode 基于 [OpenCode](https://github.com/anomalyco/opencode) fork 构建,保留其全部核心能力(多 Provider、TUI、LSP、MCP、插件),并在此基础上构建了持久化记忆、智能上下文管理、子智能体编排、目标驱动的自主循环、Compose 工作流,以及通过 dream/distill 实现的自我进化。 +Devora 由 Sheri Akhtamov 维护在 [SheriAkhtamov/Devora](https://github.com/SheriAkhtamov/Devora)。该仓库包含 Devora 发行版的 CLI、桌面应用、Web UI、SDK、插件系统、发布脚本和更新配置。 --- ## 社区 -扫描二维码加入社区群聊: +扫描二维码关注作者频道和社区入口:

社区群聊二维码 1 @@ -142,6 +142,6 @@ MiMoCode 基于 [OpenCode](https://github.com/anomalyco/opencode) fork 构建, 源代码基于 [MIT 许可证](./LICENSE) 开源。 -使用 MiMoCode 还需遵守[使用限制](./USE_RESTRICTIONS.md)。 -使用小米 MiMo 托管服务须遵守 [MiMo 服务条款](https://platform.xiaomimimo.com/docs/terms/user-agreement)。 -使用 MiMo 名称、标志和商标须遵守 MiMo 商标政策。 +使用 Devora 还需遵守[使用限制](./USE_RESTRICTIONS.md)。 +Provider 托管服务须遵守你所配置 provider 的条款。 +Devora 名称、标志和发行版品牌由 Sheri Akhtamov 维护。 diff --git a/SECURITY.md b/SECURITY.md index e7e59f4a..f6b46915 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,25 +2,25 @@ ## IMPORTANT -We do not accept AI generated security reports. We receive a large number of -these and we absolutely do not have the resources to review them all. If you -submit one that will be an automatic ban from the project. +Devora does not accept low-effort AI-generated security reports. Reports must +describe a concrete vulnerability, a realistic impact, and reproducible steps. +Purely automated reports without validation may be closed without review. ## Threat Model ### Overview -OpenCode is an AI-powered coding assistant that runs locally on your machine. It provides an agent system with access to powerful tools including shell execution, file operations, and web access. +Devora is an AI-powered coding assistant that runs locally on your machine. It provides an agent system with access to powerful tools including shell execution, file operations, and web access. ### No Sandbox -OpenCode does **not** sandbox the agent. The permission system exists as a UX feature to help users stay aware of what actions the agent is taking - it prompts for confirmation before executing commands, writing files, etc. However, it is not designed to provide security isolation. +Devora does **not** sandbox the agent. The permission system exists as a UX feature to help users stay aware of what actions the agent is taking - it prompts for confirmation before executing commands, writing files, etc. However, it is not designed to provide security isolation. -If you need true isolation, run OpenCode inside a Docker container or VM. +If you need true isolation, run Devora inside a Docker container or VM. ### Server Mode -Server mode is opt-in only. When enabled, set `OPENCODE_SERVER_PASSWORD` to require HTTP Basic Auth. Without this, the server runs unauthenticated (with a warning). It is the end user's responsibility to secure the server - any functionality it provides is not a vulnerability. +Server mode is opt-in only. When enabled, set `DEVORA_SERVER_PASSWORD` to require HTTP Basic Auth. Without this, the server runs unauthenticated (with a warning). It is the end user's responsibility to secure the server - any functionality it provides is not a vulnerability. ### Out of Scope @@ -29,19 +29,19 @@ Server mode is opt-in only. When enabled, set `OPENCODE_SERVER_PASSWORD` to requ | **Server access when opted-in** | If you enable server mode, API access is expected behavior | | **Sandbox escapes** | The permission system is not a sandbox (see above) | | **LLM provider data handling** | Data sent to your configured LLM provider is governed by their policies | -| **MCP server behavior** | External MCP servers you configure are outside our trust boundary | +| **MCP server behavior** | External MCP servers you configure are outside Devora's trust boundary | | **Malicious config files** | Users control their own config; modifying it is not an attack vector | --- # Reporting Security Issues -We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. +Devora appreciates responsible disclosure and aims to acknowledge valid reports quickly. -To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/anomalyco/opencode/security/advisories/new) tab. +To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/SheriAkhtamov/Devora/security/advisories/new) tab. -The team will send a response indicating the next steps in handling your report. After the initial reply to your report, the security team will keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance. +Sheri Akhtamov or a Devora maintainer will respond with the next steps. After the initial reply, the maintainer handling the report will keep you informed about progress toward a fix and may ask for additional information or guidance. ## Escalation -If you do not receive an acknowledgement of your report within 6 business days, you may send an email to security@anoma.ly +If you do not receive an acknowledgement of your report within 6 business days, please open a follow-up GitHub Security Advisory in this repository. diff --git a/USE_RESTRICTIONS.md b/USE_RESTRICTIONS.md index e5a8f958..c0fd1c0f 100644 --- a/USE_RESTRICTIONS.md +++ b/USE_RESTRICTIONS.md @@ -1,8 +1,8 @@ -# Xiaomi MiMoCode Use Restrictions +# Devora Use Restrictions ## Use Restrictions -You are solely responsible for your use of Xiaomi MiMoCode and any outputs, actions, or consequences arising therefrom, and you agree not to use Xiaomi MiMoCode or any derivatives thereof: +You are solely responsible for your use of Devora and any outputs, actions, or consequences arising therefrom, and you agree not to use Devora or any derivatives thereof: - For any unlawful, fraudulent, or malicious purpose, or in any manner that violates any applicable laws or regulations; @@ -16,4 +16,4 @@ You are solely responsible for your use of Xiaomi MiMoCode and any outputs, acti - To access, collect, process, disclose, or disseminate personal data or other protected information without appropriate authorization or lawful basis; or to access, interact with, scrape, or automate any third-party platform or service in violation of any applicable laws, policies, or authorization requirements; -- To use Xiaomi MiMoCode in a manner that autonomously executes high-risk actions without appropriate human oversight or authorization. +- To use Devora in a manner that autonomously executes high-risk actions without appropriate human oversight or authorization. diff --git a/assets/readme/community-qrcode-1.jpg b/assets/readme/community-qrcode-1.jpg index 8ddff35b..ca37b5fb 100644 Binary files a/assets/readme/community-qrcode-1.jpg and b/assets/readme/community-qrcode-1.jpg differ diff --git "a/assets/readme/community-qrcode-1.\320\276\320\267\320\277" "b/assets/readme/community-qrcode-1.\320\276\320\267\320\277" new file mode 100644 index 00000000..ca37b5fb Binary files /dev/null and "b/assets/readme/community-qrcode-1.\320\276\320\267\320\277" differ diff --git a/assets/readme/community-qrcode-jpg.png b/assets/readme/community-qrcode-jpg.png new file mode 100644 index 00000000..ca37b5fb Binary files /dev/null and b/assets/readme/community-qrcode-jpg.png differ diff --git a/assets/readme/devora-banner.png b/assets/readme/devora-banner.png new file mode 100644 index 00000000..5f056f3a Binary files /dev/null and b/assets/readme/devora-banner.png differ diff --git a/assets/readme/mimocode-banner.png b/assets/readme/mimocode-banner.png deleted file mode 100644 index e9f6db45..00000000 Binary files a/assets/readme/mimocode-banner.png and /dev/null differ diff --git a/bun.lock b/bun.lock index 3881915e..6b0ccdcd 100644 --- a/bun.lock +++ b/bun.lock @@ -3,12 +3,12 @@ "configVersion": 1, "workspaces": { "": { - "name": "opencode", + "name": "devora", "dependencies": { "@aws-sdk/client-s3": "3.933.0", - "@mimo-ai/plugin": "workspace:*", - "@mimo-ai/script": "workspace:*", - "@mimo-ai/sdk": "workspace:*", + "@devora-ai/plugin": "workspace:*", + "@devora-ai/script": "workspace:*", + "@devora-ai/sdk": "workspace:*", "heap-snapshot-toolkit": "1.1.3", "typescript": "catalog:", }, @@ -28,13 +28,13 @@ }, }, "packages/app": { - "name": "@mimo-ai/app", - "version": "1.14.19", + "name": "@devora-ai/app", + "version": "0.1.0", "dependencies": { + "@devora-ai/sdk": "workspace:*", + "@devora-ai/shared": "workspace:*", + "@devora-ai/ui": "workspace:*", "@kobalte/core": "catalog:", - "@mimo-ai/sdk": "workspace:*", - "@mimo-ai/shared": "workspace:*", - "@mimo-ai/ui": "workspace:*", "@shikijs/transformers": "3.9.2", "@solid-primitives/active-element": "2.1.3", "@solid-primitives/audio": "1.4.2", @@ -82,17 +82,17 @@ }, }, "packages/console/app": { - "name": "@mimo-ai/console-app", + "name": "@devora-ai/console-app", "version": "1.14.19", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", + "@devora-ai/console-core": "workspace:*", + "@devora-ai/console-mail": "workspace:*", + "@devora-ai/console-resource": "workspace:*", + "@devora-ai/ui": "workspace:*", "@ibm/plex": "6.4.1", "@jsx-email/render": "1.1.1", "@kobalte/core": "catalog:", - "@mimo-ai/console-core": "workspace:*", - "@mimo-ai/console-mail": "workspace:*", - "@mimo-ai/console-resource": "workspace:*", - "@mimo-ai/ui": "workspace:*", "@openauthjs/openauth": "catalog:", "@smithy/eventstream-codec": "4.2.7", "@smithy/util-utf8": "4.2.0", @@ -116,13 +116,13 @@ }, }, "packages/console/core": { - "name": "@mimo-ai/console-core", + "name": "@devora-ai/console-core", "version": "1.14.19", "dependencies": { "@aws-sdk/client-sts": "3.782.0", + "@devora-ai/console-mail": "workspace:*", + "@devora-ai/console-resource": "workspace:*", "@jsx-email/render": "1.1.1", - "@mimo-ai/console-mail": "workspace:*", - "@mimo-ai/console-resource": "workspace:*", "@planetscale/database": "1.19.0", "aws4fetch": "1.0.20", "drizzle-orm": "catalog:", @@ -143,15 +143,15 @@ }, }, "packages/console/function": { - "name": "@mimo-ai/console-function", + "name": "@devora-ai/console-function", "version": "1.14.19", "dependencies": { "@ai-sdk/anthropic": "3.0.64", "@ai-sdk/openai": "3.0.48", "@ai-sdk/openai-compatible": "2.0.37", + "@devora-ai/console-core": "workspace:*", + "@devora-ai/console-resource": "workspace:*", "@hono/zod-validator": "catalog:", - "@mimo-ai/console-core": "workspace:*", - "@mimo-ai/console-resource": "workspace:*", "@openauthjs/openauth": "0.0.0-20250322224806", "ai": "catalog:", "hono": "catalog:", @@ -167,7 +167,7 @@ }, }, "packages/console/mail": { - "name": "@mimo-ai/console-mail", + "name": "@devora-ai/console-mail", "version": "1.14.19", "dependencies": { "@jsx-email/all": "2.2.3", @@ -179,7 +179,7 @@ }, }, "packages/console/resource": { - "name": "@mimo-ai/console-resource", + "name": "@devora-ai/console-resource", "dependencies": { "@cloudflare/workers-types": "catalog:", }, @@ -191,9 +191,10 @@ }, }, "packages/desktop": { - "name": "@mimo-ai/desktop", - "version": "1.14.19", + "name": "@devora-ai/desktop", + "version": "0.1.1", "dependencies": { + "@parcel/watcher": "2.5.1", "drizzle-orm": "catalog:", "effect": "catalog:", "electron-context-menu": "4.1.2", @@ -205,9 +206,9 @@ }, "devDependencies": { "@actions/artifact": "4.0.0", + "@devora-ai/app": "workspace:*", + "@devora-ai/ui": "workspace:*", "@lydell/node-pty": "catalog:", - "@mimo-ai/app": "workspace:*", - "@mimo-ai/ui": "workspace:*", "@solid-primitives/i18n": "2.2.1", "@solid-primitives/storage": "catalog:", "@solidjs/meta": "catalog:", @@ -232,58 +233,21 @@ "@lydell/node-pty-linux-x64": "1.2.0-beta.10", "@lydell/node-pty-win32-arm64": "1.2.0-beta.10", "@lydell/node-pty-win32-x64": "1.2.0-beta.10", + "@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", }, }, - "packages/enterprise": { - "name": "@mimo-ai/enterprise", - "version": "1.14.19", - "dependencies": { - "@mimo-ai/shared": "workspace:*", - "@mimo-ai/ui": "workspace:*", - "@pierre/diffs": "catalog:", - "@solidjs/meta": "catalog:", - "@solidjs/router": "catalog:", - "@solidjs/start": "catalog:", - "aws4fetch": "^1.0.20", - "hono": "catalog:", - "hono-openapi": "catalog:", - "js-base64": "3.7.7", - "luxon": "catalog:", - "nitro": "3.0.1-alpha.1", - "solid-js": "catalog:", - "zod": "catalog:", - }, - "devDependencies": { - "@cloudflare/workers-types": "catalog:", - "@tailwindcss/vite": "catalog:", - "@types/luxon": "catalog:", - "@typescript/native-preview": "catalog:", - "tailwindcss": "catalog:", - "typescript": "catalog:", - "vite": "catalog:", - }, - }, - "packages/function": { - "name": "@mimo-ai/function", - "version": "1.14.19", - "dependencies": { - "@octokit/auth-app": "8.0.1", - "@octokit/rest": "catalog:", - "hono": "catalog:", - "jose": "6.0.11", - }, - "devDependencies": { - "@cloudflare/workers-types": "catalog:", - "@tsconfig/node22": "22.0.2", - "@types/node": "catalog:", - "typescript": "catalog:", - }, - }, - "packages/opencode": { - "name": "@mimo-ai/cli", - "version": "1.14.19", + "packages/devora": { + "name": "@devora-ai/cli", + "version": "0.1.0", "bin": { - "mimo": "./bin/mimo", + "devora": "./bin/devora", }, "dependencies": { "@actions/core": "1.11.1", @@ -311,6 +275,10 @@ "@ai-sdk/xai": "3.0.82", "@aws-sdk/credential-providers": "3.993.0", "@clack/prompts": "1.0.0-alpha.1", + "@devora-ai/plugin": "workspace:*", + "@devora-ai/script": "workspace:*", + "@devora-ai/sdk": "workspace:*", + "@devora-ai/ui": "workspace:*", "@effect/opentelemetry": "catalog:", "@effect/platform-node": "catalog:", "@gitlab/opencode-gitlab-auth": "1.3.3", @@ -319,10 +287,6 @@ "@hono/standard-validator": "0.1.5", "@hono/zod-validator": "catalog:", "@lydell/node-pty": "catalog:", - "@mimo-ai/plugin": "workspace:*", - "@mimo-ai/script": "workspace:*", - "@mimo-ai/sdk": "workspace:*", - "@mimo-ai/ui": "workspace:*", "@modelcontextprotocol/sdk": "1.27.1", "@npmcli/arborist": "9.4.0", "@npmcli/config": "10.8.1", @@ -397,9 +361,9 @@ }, "devDependencies": { "@babel/core": "7.28.4", + "@devora-ai/script": "workspace:*", + "@devora-ai/shared": "workspace:*", "@effect/language-service": "0.84.2", - "@mimo-ai/script": "workspace:*", - "@mimo-ai/shared": "workspace:*", "@octokit/webhooks-types": "7.6.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", @@ -432,11 +396,56 @@ "zod-to-json-schema": "3.24.5", }, }, + "packages/enterprise": { + "name": "@devora-ai/enterprise", + "version": "0.1.0", + "dependencies": { + "@devora-ai/shared": "workspace:*", + "@devora-ai/ui": "workspace:*", + "@pierre/diffs": "catalog:", + "@solidjs/meta": "catalog:", + "@solidjs/router": "catalog:", + "@solidjs/start": "catalog:", + "aws4fetch": "^1.0.20", + "hono": "catalog:", + "hono-openapi": "catalog:", + "js-base64": "3.7.7", + "luxon": "catalog:", + "nitro": "3.0.1-alpha.1", + "solid-js": "catalog:", + "zod": "catalog:", + }, + "devDependencies": { + "@cloudflare/workers-types": "catalog:", + "@tailwindcss/vite": "catalog:", + "@types/luxon": "catalog:", + "@typescript/native-preview": "catalog:", + "tailwindcss": "catalog:", + "typescript": "catalog:", + "vite": "catalog:", + }, + }, + "packages/function": { + "name": "@devora-ai/function", + "version": "0.1.0", + "dependencies": { + "@octokit/auth-app": "8.0.1", + "@octokit/rest": "catalog:", + "hono": "catalog:", + "jose": "6.0.11", + }, + "devDependencies": { + "@cloudflare/workers-types": "catalog:", + "@tsconfig/node22": "22.0.2", + "@types/node": "catalog:", + "typescript": "catalog:", + }, + }, "packages/plugin": { - "name": "@mimo-ai/plugin", - "version": "1.14.19", + "name": "@devora-ai/plugin", + "version": "0.1.0", "dependencies": { - "@mimo-ai/sdk": "workspace:*", + "@devora-ai/sdk": "workspace:*", "effect": "catalog:", "zod": "catalog:", }, @@ -458,7 +467,7 @@ ], }, "packages/script": { - "name": "@mimo-ai/script", + "name": "@devora-ai/script", "dependencies": { "semver": "^7.6.3", }, @@ -468,7 +477,7 @@ }, }, "packages/sdk/js": { - "name": "@mimo-ai/sdk", + "name": "@devora-ai/sdk", "version": "1.14.19", "dependencies": { "cross-spawn": "catalog:", @@ -483,10 +492,10 @@ }, }, "packages/shared": { - "name": "@mimo-ai/shared", - "version": "1.14.19", + "name": "@devora-ai/shared", + "version": "0.1.0", "bin": { - "opencode": "./bin/opencode", + "devora": "./bin/devora", }, "dependencies": { "@effect/platform-node": "catalog:", @@ -507,10 +516,10 @@ }, }, "packages/slack": { - "name": "@mimo-ai/slack", - "version": "1.14.19", + "name": "@devora-ai/slack", + "version": "0.1.0", "dependencies": { - "@mimo-ai/sdk": "workspace:*", + "@devora-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", }, "devDependencies": { @@ -520,9 +529,9 @@ }, }, "packages/storybook": { - "name": "@mimo-ai/storybook", + "name": "@devora-ai/storybook", "devDependencies": { - "@mimo-ai/ui": "workspace:*", + "@devora-ai/ui": "workspace:*", "@solidjs/meta": "catalog:", "@storybook/addon-a11y": "^10.2.13", "@storybook/addon-docs": "^10.2.13", @@ -542,12 +551,12 @@ }, }, "packages/ui": { - "name": "@mimo-ai/ui", - "version": "1.14.19", + "name": "@devora-ai/ui", + "version": "0.1.0", "dependencies": { + "@devora-ai/sdk": "workspace:*", + "@devora-ai/shared": "workspace:*", "@kobalte/core": "catalog:", - "@mimo-ai/sdk": "workspace:*", - "@mimo-ai/shared": "workspace:*", "@pierre/diffs": "catalog:", "@shikijs/transformers": "3.9.2", "@solid-primitives/bounds": "0.1.3", @@ -590,40 +599,6 @@ "vite-plugin-solid": "catalog:", }, }, - "packages/web": { - "name": "@mimo-ai/web", - "version": "1.14.19", - "dependencies": { - "@astrojs/cloudflare": "12.6.3", - "@astrojs/markdown-remark": "6.3.1", - "@astrojs/solid-js": "5.1.0", - "@astrojs/starlight": "0.34.3", - "@fontsource/ibm-plex-mono": "5.2.5", - "@shikijs/transformers": "3.20.0", - "@solid-primitives/resize-observer": "2.1.5", - "@types/luxon": "catalog:", - "ai": "catalog:", - "astro": "5.7.13", - "diff": "catalog:", - "js-base64": "3.7.7", - "lang-map": "0.4.0", - "luxon": "catalog:", - "marked": "catalog:", - "marked-shiki": "catalog:", - "rehype-autolink-headings": "7.1.0", - "remeda": "catalog:", - "shiki": "catalog:", - "solid-js": "catalog:", - "toolbeam-docs-theme": "0.4.8", - "vscode-languageserver-types": "3.17.5", - }, - "devDependencies": { - "@astrojs/check": "0.9.6", - "@mimo-ai/cli": "workspace:*", - "@types/node": "catalog:", - "typescript": "catalog:", - }, - }, }, "trustedDependencies": [ "esbuild", @@ -771,34 +746,6 @@ "@anycable/core": ["@anycable/core@0.9.2", "", { "dependencies": { "nanoevents": "^7.0.1" } }, "sha512-x5ZXDcW/N4cxWl93CnbHs/u7qq4793jS2kNPWm+duPrXlrva+ml2ZGT7X9tuOBKzyIHf60zWCdIK7TUgMPAwXA=="], - "@astrojs/check": ["@astrojs/check@0.9.6", "", { "dependencies": { "@astrojs/language-server": "^2.16.1", "chokidar": "^4.0.1", "kleur": "^4.1.5", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "bin": { "astro-check": "bin/astro-check.js" } }, "sha512-jlaEu5SxvSgmfGIFfNgcn5/f+29H61NJzEMfAZ82Xopr4XBchXB1GVlcJsE+elUlsYSbXlptZLX+JMG3b/wZEA=="], - - "@astrojs/cloudflare": ["@astrojs/cloudflare@12.6.3", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.1", "@astrojs/underscore-redirects": "1.0.0", "@cloudflare/workers-types": "^4.20250507.0", "tinyglobby": "^0.2.13", "vite": "^6.3.5", "wrangler": "^4.14.1" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-xhJptF5tU2k5eo70nIMyL1Udma0CqmUEnGSlGyFflLqSY82CRQI6nWZ/xZt0ZvmXuErUjIx0YYQNfZsz5CNjLQ=="], - - "@astrojs/compiler": ["@astrojs/compiler@2.13.1", "", {}, "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg=="], - - "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.7.1", "", {}, "sha512-7dwEVigz9vUWDw3nRwLQ/yH/xYovlUA0ZD86xoeKEBmkz9O6iELG1yri67PgAPW6VLL/xInA4t7H0CK6VmtkKQ=="], - - "@astrojs/language-server": ["@astrojs/language-server@2.16.10", "", { "dependencies": { "@astrojs/compiler": "^2.13.1", "@astrojs/yaml2ts": "^0.2.4", "@jridgewell/sourcemap-codec": "^1.5.5", "@volar/kit": "~2.4.28", "@volar/language-core": "~2.4.28", "@volar/language-server": "~2.4.28", "@volar/language-service": "~2.4.28", "muggle-string": "^0.4.1", "tinyglobby": "^0.2.16", "volar-service-css": "0.0.70", "volar-service-emmet": "0.0.70", "volar-service-html": "0.0.70", "volar-service-prettier": "0.0.70", "volar-service-typescript": "0.0.70", "volar-service-typescript-twoslash-queries": "0.0.70", "volar-service-yaml": "0.0.70", "vscode-html-languageservice": "^5.6.2", "vscode-uri": "^3.1.0" }, "peerDependencies": { "prettier": "^3.0.0", "prettier-plugin-astro": ">=0.11.0" }, "optionalPeers": ["prettier", "prettier-plugin-astro"], "bin": { "astro-ls": "./bin/nodeServer.js" } }, "sha512-87VQ/5GSdHlRnUA+hGuerYyIGAj+9RbZmATyuKLEUePinUXhQ5YkRnRrHhOD9sSi5JOErLjrLkHnfZFEvGrV8w=="], - - "@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.1", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.1", "@astrojs/prism": "3.2.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.1.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.1", "remark-smartypants": "^3.0.2", "shiki": "^3.0.0", "smol-toml": "^1.3.1", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-c5F5gGrkczUaTVgmMW9g1YMJGzOtRvjjhw6IfGuxarM6ct09MpwysP10US729dy07gg8y+ofVifezvP3BNsWZg=="], - - "@astrojs/mdx": ["@astrojs/mdx@4.3.14", "", { "dependencies": { "@astrojs/markdown-remark": "6.3.11", "@mdx-js/mdx": "^3.1.1", "acorn": "^8.15.0", "es-module-lexer": "^1.7.0", "estree-util-visit": "^2.0.0", "hast-util-to-html": "^9.0.5", "piccolore": "^0.1.3", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.1", "remark-smartypants": "^3.0.2", "source-map": "^0.7.6", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-FBrqJQORVm+rkRa2TS5CjU9PBA6hkhrwLVBSS9A77gN2+iehvjq1w6yya/d0YKC7osiVorKkr3Qd9wNbl0ZkGA=="], - - "@astrojs/prism": ["@astrojs/prism@3.2.0", "", { "dependencies": { "prismjs": "^1.29.0" } }, "sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw=="], - - "@astrojs/sitemap": ["@astrojs/sitemap@3.7.3", "", { "dependencies": { "sitemap": "^9.0.0", "stream-replace-string": "^2.0.0", "zod": "^4.3.6" } }, "sha512-f8euLVsyeAmAkSm/1M2Kb8sL8byQmfgbvBNaHFItCheTj/IpiJYSEWVcqDHZ/yEHxiS7+w87mQkzwZaPHmk5GA=="], - - "@astrojs/solid-js": ["@astrojs/solid-js@5.1.0", "", { "dependencies": { "vite": "^6.3.5", "vite-plugin-solid": "^2.11.6" }, "peerDependencies": { "solid-devtools": "^0.30.1", "solid-js": "^1.8.5" }, "optionalPeers": ["solid-devtools"] }, "sha512-VmPHOU9k7m6HHCT2Y1mNzifilUnttlowBM36frGcfj5wERJE9Ci0QtWJbzdf6AlcoIirb7xVw+ByupU011Di9w=="], - - "@astrojs/starlight": ["@astrojs/starlight@0.34.3", "", { "dependencies": { "@astrojs/markdown-remark": "^6.3.1", "@astrojs/mdx": "^4.2.3", "@astrojs/sitemap": "^3.3.0", "@pagefind/default-ui": "^1.3.0", "@types/hast": "^3.0.4", "@types/js-yaml": "^4.0.9", "@types/mdast": "^4.0.4", "astro-expressive-code": "^0.41.1", "bcp-47": "^2.1.0", "hast-util-from-html": "^2.0.1", "hast-util-select": "^6.0.2", "hast-util-to-string": "^3.0.0", "hastscript": "^9.0.0", "i18next": "^23.11.5", "js-yaml": "^4.1.0", "klona": "^2.0.6", "mdast-util-directive": "^3.0.0", "mdast-util-to-markdown": "^2.1.0", "mdast-util-to-string": "^4.0.0", "pagefind": "^1.3.0", "rehype": "^13.0.1", "rehype-format": "^5.0.0", "remark-directive": "^3.0.0", "ultrahtml": "^1.6.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0", "vfile": "^6.0.2" }, "peerDependencies": { "astro": "^5.5.0" } }, "sha512-MAuD3NF+E+QXJJuVKofoR6xcPTP4BJmYWeOBd03udVdubNGVnPnSWVZAi+ZtnTofES4+mJdp8BNGf+ubUxkiiA=="], - - "@astrojs/telemetry": ["@astrojs/telemetry@3.2.1", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-SSVM820Jqc6wjsn7qYfV9qfeQvePtVc1nSofhyap7l0/iakUKywj3hfy3UJAOV4sGV4Q/u450RD4AaCaFvNPlg=="], - - "@astrojs/underscore-redirects": ["@astrojs/underscore-redirects@1.0.0", "", {}, "sha512-qZxHwVnmb5FXuvRsaIGaqWgnftjCuMY+GSbaVZdBmE4j8AfgPqKPxYp8SUERyJcjpKCEmO4wD6ybuGH8A2kVRQ=="], - - "@astrojs/yaml2ts": ["@astrojs/yaml2ts@0.2.4", "", { "dependencies": { "yaml": "^2.8.3" } }, "sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A=="], - "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], "@aws-crypto/crc32c": ["@aws-crypto/crc32c@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag=="], @@ -997,8 +944,6 @@ "@bufbuild/protoplugin": ["@bufbuild/protoplugin@2.12.0", "", { "dependencies": { "@bufbuild/protobuf": "2.12.0", "@typescript/vfs": "^1.6.2", "typescript": "5.4.5" } }, "sha512-ORlDITp8AFUXzIhLRoMCG+ud+D3MPKWb5HQXBoskMMnjeyEjE1H1qLonVNPyOr8lkx3xSfYUo8a0dvOZJVAzow=="], - "@capsizecss/unpack": ["@capsizecss/unpack@2.4.0", "", { "dependencies": { "blob-to-buffer": "^1.2.8", "cross-fetch": "^3.0.4", "fontkit": "^2.0.2" } }, "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q=="], - "@clack/core": ["@clack/core@1.0.0-alpha.1", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-rFbCU83JnN7l3W1nfgCqqme4ZZvTTgsiKQ6FM0l+r0P+o2eJpExcocBUWUIwnDzL76Aca9VhUdWmB2MbUv+Qyg=="], "@clack/prompts": ["@clack/prompts@1.0.0-alpha.1", "", { "dependencies": { "@clack/core": "1.0.0-alpha.1", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-07MNT0OsxjKOcyVfX8KhXBhJiyUbDP1vuIAcHc+nx5v93MJO23pX3X/k3bWz6T3rpM9dgWPq90i4Jq7gZAyMbw=="], @@ -1025,10 +970,42 @@ "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], - "@ctrl/tinycolor": ["@ctrl/tinycolor@4.2.0", "", {}, "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A=="], - "@develar/schema-utils": ["@develar/schema-utils@2.6.5", "", { "dependencies": { "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" } }, "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig=="], + "@devora-ai/app": ["@devora-ai/app@workspace:packages/app"], + + "@devora-ai/cli": ["@devora-ai/cli@workspace:packages/devora"], + + "@devora-ai/console-app": ["@devora-ai/console-app@workspace:packages/console/app"], + + "@devora-ai/console-core": ["@devora-ai/console-core@workspace:packages/console/core"], + + "@devora-ai/console-function": ["@devora-ai/console-function@workspace:packages/console/function"], + + "@devora-ai/console-mail": ["@devora-ai/console-mail@workspace:packages/console/mail"], + + "@devora-ai/console-resource": ["@devora-ai/console-resource@workspace:packages/console/resource"], + + "@devora-ai/desktop": ["@devora-ai/desktop@workspace:packages/desktop"], + + "@devora-ai/enterprise": ["@devora-ai/enterprise@workspace:packages/enterprise"], + + "@devora-ai/function": ["@devora-ai/function@workspace:packages/function"], + + "@devora-ai/plugin": ["@devora-ai/plugin@workspace:packages/plugin"], + + "@devora-ai/script": ["@devora-ai/script@workspace:packages/script"], + + "@devora-ai/sdk": ["@devora-ai/sdk@workspace:packages/sdk/js"], + + "@devora-ai/shared": ["@devora-ai/shared@workspace:packages/shared"], + + "@devora-ai/slack": ["@devora-ai/slack@workspace:packages/slack"], + + "@devora-ai/storybook": ["@devora-ai/storybook@workspace:packages/storybook"], + + "@devora-ai/ui": ["@devora-ai/ui@workspace:packages/ui"], + "@dimforge/rapier2d-simd-compat": ["@dimforge/rapier2d-simd-compat@0.17.3", "", {}, "sha512-bijvwWz6NHsNj5e5i1vtd3dU2pDhthSaTUZSh14DUGGKJfw8eMnlWZsxwHBxB/a3AXVNDjL9abuHw1k9FGR+jg=="], "@dot/log": ["@dot/log@0.1.5", "", { "dependencies": { "chalk": "^4.1.2", "loglevelnext": "^6.0.0", "p-defer": "^3.0.0" } }, "sha512-ECraEVJWv2f2mWK93lYiefUkphStVlKD6yKDzisuoEmxuLKrxO9iGetHK2DoEAkj7sxjE886n0OUVVCUx0YPNg=="], @@ -1059,20 +1036,6 @@ "@electron/windows-sign": ["@electron/windows-sign@1.2.2", "", { "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", "fs-extra": "^11.1.1", "minimist": "^1.2.8", "postject": "^1.0.0-alpha.6" }, "bin": { "electron-windows-sign": "bin/electron-windows-sign.js" } }, "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ=="], - "@emmetio/abbreviation": ["@emmetio/abbreviation@2.3.3", "", { "dependencies": { "@emmetio/scanner": "^1.0.4" } }, "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA=="], - - "@emmetio/css-abbreviation": ["@emmetio/css-abbreviation@2.1.8", "", { "dependencies": { "@emmetio/scanner": "^1.0.4" } }, "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw=="], - - "@emmetio/css-parser": ["@emmetio/css-parser@0.4.1", "", { "dependencies": { "@emmetio/stream-reader": "^2.2.0", "@emmetio/stream-reader-utils": "^0.1.0" } }, "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ=="], - - "@emmetio/html-matcher": ["@emmetio/html-matcher@1.3.0", "", { "dependencies": { "@emmetio/scanner": "^1.0.0" } }, "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ=="], - - "@emmetio/scanner": ["@emmetio/scanner@1.0.4", "", {}, "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="], - - "@emmetio/stream-reader": ["@emmetio/stream-reader@2.2.0", "", {}, "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw=="], - - "@emmetio/stream-reader-utils": ["@emmetio/stream-reader-utils@0.1.0", "", {}, "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A=="], - "@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="], "@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="], @@ -1135,14 +1098,6 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], - "@expressive-code/core": ["@expressive-code/core@0.41.7", "", { "dependencies": { "@ctrl/tinycolor": "^4.0.4", "hast-util-select": "^6.0.2", "hast-util-to-html": "^9.0.1", "hast-util-to-text": "^4.0.1", "hastscript": "^9.0.0", "postcss": "^8.4.38", "postcss-nested": "^6.0.1", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1" } }, "sha512-ck92uZYZ9Wba2zxkiZLsZGi9N54pMSAVdrI9uW3Oo9AtLglD5RmrdTwbYPCT2S/jC36JGB2i+pnQtBm/Ib2+dg=="], - - "@expressive-code/plugin-frames": ["@expressive-code/plugin-frames@0.41.7", "", { "dependencies": { "@expressive-code/core": "^0.41.7" } }, "sha512-diKtxjQw/979cTglRFaMCY/sR6hWF0kSMg8jsKLXaZBSfGS0I/Hoe7Qds3vVEgeoW+GHHQzMcwvgx/MOIXhrTA=="], - - "@expressive-code/plugin-shiki": ["@expressive-code/plugin-shiki@0.41.7", "", { "dependencies": { "@expressive-code/core": "^0.41.7", "shiki": "^3.2.2" } }, "sha512-DL605bLrUOgqTdZ0Ot5MlTaWzppRkzzqzeGEu7ODnHF39IkEBbFdsC7pbl3LbUQ1DFtnfx6rD54k/cdofbW6KQ=="], - - "@expressive-code/plugin-text-markers": ["@expressive-code/plugin-text-markers@0.41.7", "", { "dependencies": { "@expressive-code/core": "^0.41.7" } }, "sha512-Ewpwuc5t6eFdZmWlFyeuy3e1PTQC0jFvw2Q+2bpcWXbOZhPLsT7+h8lsSIJxb5mS7wZko7cKyQ2RLYDyK6Fpmw=="], - "@fastify/ajv-compiler": ["@fastify/ajv-compiler@4.0.5", "", { "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^3.0.0" } }, "sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A=="], "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], @@ -1167,8 +1122,6 @@ "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], - "@fontsource/ibm-plex-mono": ["@fontsource/ibm-plex-mono@5.2.5", "", {}, "sha512-G09N3GfuT9qj3Ax2FDZvKqZttzM3v+cco2l8uXamhKyXLdmlaUDH5o88/C3vtTHj2oT7yRKsvxz9F+BXbWKMYA=="], - "@fontsource/inter": ["@fontsource/inter@5.2.8", "", {}, "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg=="], "@gar/promise-retry": ["@gar/promise-retry@1.0.3", "", {}, "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA=="], @@ -1409,46 +1362,8 @@ "@malept/flatpak-bundler": ["@malept/flatpak-bundler@0.4.0", "", { "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.0", "lodash": "^4.17.15", "tmp-promise": "^3.0.2" } }, "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q=="], - "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], - "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="], - "@mimo-ai/app": ["@mimo-ai/app@workspace:packages/app"], - - "@mimo-ai/cli": ["@mimo-ai/cli@workspace:packages/opencode"], - - "@mimo-ai/console-app": ["@mimo-ai/console-app@workspace:packages/console/app"], - - "@mimo-ai/console-core": ["@mimo-ai/console-core@workspace:packages/console/core"], - - "@mimo-ai/console-function": ["@mimo-ai/console-function@workspace:packages/console/function"], - - "@mimo-ai/console-mail": ["@mimo-ai/console-mail@workspace:packages/console/mail"], - - "@mimo-ai/console-resource": ["@mimo-ai/console-resource@workspace:packages/console/resource"], - - "@mimo-ai/desktop": ["@mimo-ai/desktop@workspace:packages/desktop"], - - "@mimo-ai/enterprise": ["@mimo-ai/enterprise@workspace:packages/enterprise"], - - "@mimo-ai/function": ["@mimo-ai/function@workspace:packages/function"], - - "@mimo-ai/plugin": ["@mimo-ai/plugin@workspace:packages/plugin"], - - "@mimo-ai/script": ["@mimo-ai/script@workspace:packages/script"], - - "@mimo-ai/sdk": ["@mimo-ai/sdk@workspace:packages/sdk/js"], - - "@mimo-ai/shared": ["@mimo-ai/shared@workspace:packages/shared"], - - "@mimo-ai/slack": ["@mimo-ai/slack@workspace:packages/slack"], - - "@mimo-ai/storybook": ["@mimo-ai/storybook@workspace:packages/storybook"], - - "@mimo-ai/ui": ["@mimo-ai/ui@workspace:packages/ui"], - - "@mimo-ai/web": ["@mimo-ai/web@workspace:packages/web"], - "@mixmark-io/domino": ["@mixmark-io/domino@2.2.0", "", {}, "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="], "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.27.1", "", { "dependencies": { "@hono/node-server": "^1.19.9", "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.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "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.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA=="], @@ -1811,22 +1726,6 @@ "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.60.0", "", { "os": "win32", "cpu": "x64" }, "sha512-JOro4ZcfBLamJCyfURQmOQByoorgOdx3ZjAkSqnb/CyG/i+lN3KoV5LAgk5ZAW6DPq7/Cx7n23f8DuTWXTWgyQ=="], - "@pagefind/darwin-arm64": ["@pagefind/darwin-arm64@1.5.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ=="], - - "@pagefind/darwin-x64": ["@pagefind/darwin-x64@1.5.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw=="], - - "@pagefind/default-ui": ["@pagefind/default-ui@1.5.2", "", {}, "sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg=="], - - "@pagefind/freebsd-x64": ["@pagefind/freebsd-x64@1.5.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA=="], - - "@pagefind/linux-arm64": ["@pagefind/linux-arm64@1.5.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw=="], - - "@pagefind/linux-x64": ["@pagefind/linux-x64@1.5.2", "", { "os": "linux", "cpu": "x64" }, "sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA=="], - - "@pagefind/windows-arm64": ["@pagefind/windows-arm64@1.5.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g=="], - - "@pagefind/windows-x64": ["@pagefind/windows-x64@1.5.2", "", { "os": "win32", "cpu": "x64" }, "sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg=="], - "@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "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-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="], "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="], @@ -1967,8 +1866,6 @@ "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - "@rollup/pluginutils": ["@rollup/pluginutils@5.4.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.61.1", "", { "os": "android", "cpu": "arm" }, "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA=="], "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.61.1", "", { "os": "android", "cpu": "arm64" }, "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw=="], @@ -2325,14 +2222,10 @@ "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], - "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], - "@types/express": ["@types/express@4.17.25", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "^1" } }, "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw=="], "@types/express-serve-static-core": ["@types/express-serve-static-core@4.19.8", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA=="], - "@types/fontkit": ["@types/fontkit@2.0.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-qNYerFky3muCmZPq+R+B3cUDRA5OONw/oh6aGGFxx2LOBz6yu8eamKusrhkHnC6rc2fm76+G9z9QoWSB2SaQaw=="], - "@types/fs-extra": ["@types/fs-extra@9.0.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA=="], "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], @@ -2343,8 +2236,6 @@ "@types/is-stream": ["@types/is-stream@1.1.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg=="], - "@types/js-yaml": ["@types/js-yaml@4.0.9", "", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="], - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], "@types/jsonwebtoken": ["@types/jsonwebtoken@8.5.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg=="], @@ -2369,8 +2260,6 @@ "@types/mssql": ["@types/mssql@9.1.11", "", { "dependencies": { "@types/node": "*", "tarn": "^3.0.1", "tedious": "*" } }, "sha512-vcujgrDbDezCxNDO4KY6gjwduLYOKfrexpRUwhoysRvcXZ3+IgZ/PMYFDgh8c3cQIxZ6skAwYo+H6ibMrBWPjQ=="], - "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], - "@types/node": ["@types/node@22.13.9", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw=="], "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], @@ -2407,8 +2296,6 @@ "@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="], - "@types/sax": ["@types/sax@1.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A=="], - "@types/scheduler": ["@types/scheduler@0.26.0", "", {}, "sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA=="], "@types/semver": ["@types/semver@7.7.1", "", {}, "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA=="], @@ -2487,22 +2374,6 @@ "@vitest/utils": ["@vitest/utils@4.1.8", "", { "dependencies": { "@vitest/pretty-format": "4.1.8", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg=="], - "@volar/kit": ["@volar/kit@2.4.28", "", { "dependencies": { "@volar/language-service": "2.4.28", "@volar/typescript": "2.4.28", "typesafe-path": "^0.2.2", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "typescript": "*" } }, "sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg=="], - - "@volar/language-core": ["@volar/language-core@2.4.28", "", { "dependencies": { "@volar/source-map": "2.4.28" } }, "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ=="], - - "@volar/language-server": ["@volar/language-server@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "@volar/language-service": "2.4.28", "@volar/typescript": "2.4.28", "path-browserify": "^1.0.1", "request-light": "^0.7.0", "vscode-languageserver": "^9.0.1", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw=="], - - "@volar/language-service": ["@volar/language-service@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw=="], - - "@volar/source-map": ["@volar/source-map@2.4.28", "", {}, "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ=="], - - "@volar/typescript": ["@volar/typescript@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw=="], - - "@vscode/emmet-helper": ["@vscode/emmet-helper@2.11.0", "", { "dependencies": { "emmet": "^2.4.3", "jsonc-parser": "^2.3.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.15.1", "vscode-uri": "^3.0.8" } }, "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw=="], - - "@vscode/l10n": ["@vscode/l10n@0.0.18", "", {}, "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="], - "@webcontainer/env": ["@webcontainer/env@1.1.1", "", {}, "sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng=="], "@webgpu/types": ["@webgpu/types@0.1.54", "", {}, "sha512-81oaalC8LFrXjhsczomEQ0u3jG+TqE6V9QHLA8GNZq/Rnot0KDugu3LhSYSlie8tSdooAN1Hov05asrUUp9qgg=="], @@ -2521,8 +2392,6 @@ "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], - "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "acorn-walk": ["acorn-walk@8.3.2", "", {}, "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A=="], "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], @@ -2535,14 +2404,10 @@ "ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], - "ajv-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" }, "optionalPeers": ["ajv"] }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="], - "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], "ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], - "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], - "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], @@ -2579,8 +2444,6 @@ "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], - "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], - "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], "array.prototype.map": ["array.prototype.map@1.0.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-array-method-boxes-properly": "^1.0.0", "es-object-atoms": "^1.0.0", "is-string": "^1.1.1" } }, "sha512-YocPM7bYYu2hXGxWpb5vwZ8cMeudNHYtYBcUDY4Z1GWa53qcnQMWSl25jeBHNzitjl9HW2AWW4ro/S/nftUaOQ=="], @@ -2595,12 +2458,6 @@ "astral-regex": ["astral-regex@2.0.0", "", {}, "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="], - "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], - - "astro": ["astro@5.7.13", "", { "dependencies": { "@astrojs/compiler": "^2.11.0", "@astrojs/internal-helpers": "0.6.1", "@astrojs/markdown-remark": "6.3.1", "@astrojs/telemetry": "3.2.1", "@capsizecss/unpack": "^2.4.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.4", "acorn": "^8.14.1", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.2.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.0.2", "cssesc": "^3.0.0", "debug": "^4.4.0", "deterministic-object-hash": "^2.0.2", "devalue": "^5.1.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.6.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.3.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.17", "magicast": "^0.3.5", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.0", "package-manager-detector": "^1.1.0", "picomatch": "^4.0.2", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.1", "shiki": "^3.2.1", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.12", "tsconfck": "^3.1.5", "ultrahtml": "^1.6.0", "unifont": "~0.5.0", "unist-util-visit": "^5.0.0", "unstorage": "^1.15.0", "vfile": "^6.0.3", "vite": "^6.3.4", "vitefu": "^1.0.6", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.1", "zod": "^3.24.2", "zod-to-json-schema": "^3.24.5", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.33.3" }, "bin": { "astro": "astro.js" } }, "sha512-cRGq2llKOhV3XMcYwQpfBIUcssN6HEK5CRbcMxAfd9OcFhvWE7KUy50zLioAZVVl3AqgUTJoNTlmZfD2eG0G1w=="], - - "astro-expressive-code": ["astro-expressive-code@0.41.7", "", { "dependencies": { "rehype-expressive-code": "^0.41.7" }, "peerDependencies": { "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta" } }, "sha512-hUpogGc6DdAd+I7pPXsctyYPRBJDK7Q7d06s4cyP0Vz3OcbziP3FNzN0jZci1BpCvLn9675DvS7B9ctKKX64JQ=="], - "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], "async-exit-hook": ["async-exit-hook@2.0.1", "", {}, "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw=="], @@ -2633,8 +2490,6 @@ "axios": ["axios@1.17.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw=="], - "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], - "b4a": ["b4a@1.8.1", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw=="], "babel-dead-code-elimination": ["babel-dead-code-elimination@1.0.12", "", { "dependencies": { "@babel/core": "^7.23.7", "@babel/parser": "^7.23.6", "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6" } }, "sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig=="], @@ -2645,8 +2500,6 @@ "babel-preset-solid": ["babel-preset-solid@1.9.12", "", { "dependencies": { "babel-plugin-jsx-dom-expressions": "^0.40.6" }, "peerDependencies": { "@babel/core": "^7.0.0", "solid-js": "^1.9.12" }, "optionalPeers": ["solid-js"] }, "sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg=="], - "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "bare-events": ["bare-events@2.9.1", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg=="], @@ -2661,16 +2514,10 @@ "bare-url": ["bare-url@2.4.4", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-zbQJi2YQUe3SrX19TItQ8DoPj9E1i5rrdE9iHV4PhUif1GodNRSe85lavVGbmU7P4M8579EQi4akGFuhCATWaQ=="], - "base-64": ["base-64@1.0.0", "", {}, "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="], - "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], "baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], - "bcp-47": ["bcp-47@2.1.0", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w=="], - - "bcp-47-match": ["bcp-47-match@2.0.3", "", {}, "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ=="], - "before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="], "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], @@ -2685,8 +2532,6 @@ "blake3-wasm": ["blake3-wasm@2.1.5", "", {}, "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g=="], - "blob-to-buffer": ["blob-to-buffer@1.2.9", "", {}, "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA=="], - "bmp-ts": ["bmp-ts@1.0.9", "", {}, "sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw=="], "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], @@ -2701,14 +2546,10 @@ "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], - "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], - "brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "brotli": ["brotli@1.3.3", "", { "dependencies": { "base64-js": "^1.1.2" } }, "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg=="], - "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], "buffer": ["buffer@4.9.2", "", { "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="], @@ -2765,8 +2606,6 @@ "camel-case": ["camel-case@4.1.2", "", { "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw=="], - "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], - "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], "caniuse-lite": ["caniuse-lite@1.0.30001793", "", {}, "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA=="], @@ -2779,14 +2618,10 @@ "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], - "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], - "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], - "chart.js": ["chart.js@4.5.1", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw=="], "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], @@ -2809,8 +2644,6 @@ "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], - "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], - "cli-sound": ["cli-sound@1.1.3", "", { "dependencies": { "find-exec": "^1.0.3" }, "bin": { "cli-sound": "dist/esm/cli.js" } }, "sha512-dpdF3KS3wjo1fobKG5iU9KyKqzQWAqueymHzZ9epus/dZ40487gAvS6aXFeBul+GiQAQYUTAtUWgQvw6Jftbyg=="], "cli-spinners": ["cli-spinners@3.4.0", "", {}, "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw=="], @@ -2821,20 +2654,14 @@ "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], - "clone": ["clone@2.1.2", "", {}, "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="], - "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], "cloudflare": ["cloudflare@5.2.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" } }, "sha512-dVzqDpPFYR9ApEC9e+JJshFJZXcw4HzM8W+3DHzO5oy9+8rLC53G7x6fEf9A7/gSuSCxuvndzui5qJKftfIM9A=="], - "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - "cluster-key-slot": ["cluster-key-slot@1.1.1", "", {}, "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw=="], "cmd-shim": ["cmd-shim@8.0.0", "", {}, "sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA=="], - "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], - "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], @@ -2875,7 +2702,7 @@ "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], "cookie-es": ["cookie-es@2.0.1", "", {}, "sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA=="], @@ -2901,10 +2728,6 @@ "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], - "css-selector-parser": ["css-selector-parser@3.3.0", "", {}, "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g=="], - - "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], - "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], "css.escape": ["css.escape@1.5.1", "", {}, "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg=="], @@ -2929,8 +2752,6 @@ "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], - "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], - "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], @@ -2971,14 +2792,8 @@ "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], - "deterministic-object-hash": ["deterministic-object-hash@2.0.2", "", { "dependencies": { "base-64": "^1.0.0" } }, "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ=="], - - "devalue": ["devalue@5.8.1", "", {}, "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw=="], - "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "dfa": ["dfa@1.2.0", "", {}, "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="], - "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], "diff": ["diff@8.0.2", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="], @@ -2987,8 +2802,6 @@ "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], - "direction": ["direction@2.0.1", "", { "bin": { "direction": "cli.js" } }, "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA=="], - "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], "dmg-builder": ["dmg-builder@26.8.1", "", { "dependencies": { "app-builder-lib": "26.8.1", "builder-util": "26.8.1", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" }, "optionalDependencies": { "dmg-license": "^1.0.11" } }, "sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg=="], @@ -3021,8 +2834,6 @@ "drizzle-orm": ["drizzle-orm@1.0.0-beta.19-d95b7a4", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@effect/sql": "^0.48.5", "@effect/sql-pg": "^0.49.7", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@sinclair/typebox": ">=0.34.8", "@sqlitecloud/drivers": ">=1.0.653", "@tidbcloud/serverless": "*", "@tursodatabase/database": ">=0.2.1", "@tursodatabase/database-common": ">=0.2.1", "@tursodatabase/database-wasm": ">=0.2.1", "@types/better-sqlite3": "*", "@types/mssql": "^9.1.4", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "arktype": ">=2.0.0", "better-sqlite3": ">=9.3.0", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "mssql": "^11.0.1", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5", "typebox": ">=1.0.0", "valibot": ">=1.0.0-beta.7", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@effect/sql", "@effect/sql-pg", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@sinclair/typebox", "@sqlitecloud/drivers", "@tidbcloud/serverless", "@tursodatabase/database", "@tursodatabase/database-common", "@tursodatabase/database-wasm", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "arktype", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "mysql2", "pg", "postgres", "sql.js", "sqlite3", "typebox", "valibot", "zod"] }, "sha512-bZZKKeoRKrMVU6zKTscjrSH0+WNb1WEi3N0Jl4wEyQ7aQpTgHzdYY6IJQ1P0M74HuSJVeX4UpkFB/S6dtqLEJg=="], - "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], @@ -3065,8 +2876,6 @@ "electron-winstaller": ["electron-winstaller@5.4.0", "", { "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.21", "temp": "^0.9.0" }, "optionalDependencies": { "@electron/windows-sign": "^1.1.2" } }, "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg=="], - "emmet": ["emmet@2.4.11", "", { "dependencies": { "@emmetio/abbreviation": "^2.3.3", "@emmetio/css-abbreviation": "^2.1.8" } }, "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ=="], - "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "emoji-regex-xs": ["emoji-regex-xs@1.0.0", "", {}, "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="], @@ -3111,10 +2920,6 @@ "es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="], - "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], - - "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], "esbuild-plugin-copy": ["esbuild-plugin-copy@2.1.1", "", { "dependencies": { "chalk": "^4.1.2", "chokidar": "^3.5.3", "fs-extra": "^10.0.1", "globby": "^11.0.3" }, "peerDependencies": { "esbuild": ">= 0.14.0" } }, "sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw=="], @@ -3129,18 +2934,6 @@ "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], - - "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="], - - "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], - - "estree-util-scope": ["estree-util-scope@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ=="], - - "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], - - "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="], - "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], @@ -3171,8 +2964,6 @@ "express-rate-limit": ["express-rate-limit@8.5.2", "", { "dependencies": { "ip-address": "^10.2.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A=="], - "expressive-code": ["expressive-code@0.41.7", "", { "dependencies": { "@expressive-code/core": "^0.41.7", "@expressive-code/plugin-frames": "^0.41.7", "@expressive-code/plugin-shiki": "^0.41.7", "@expressive-code/plugin-text-markers": "^0.41.7" } }, "sha512-2wZjC8OQ3TaVEMcBtYY4Va3lo6J+Ai9jf3d4dbhURMJcU4Pbqe6EcHe424MIZI0VHUA1bR6xdpoHYi3yxokWqA=="], - "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], "ext-list": ["ext-list@2.2.2", "", { "dependencies": { "mime-db": "^1.28.0" } }, "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA=="], @@ -3241,14 +3032,8 @@ "finity": ["finity@0.5.4", "", {}, "sha512-3l+5/1tuw616Lgb0QBimxfdd2TqaDGpfCBpfX6EqtFmqUV3FtQnVEX4Aa62DagYEqnsTIjZcTfbq9msDbXYgyA=="], - "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], - "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], - "fontace": ["fontace@0.3.1", "", { "dependencies": { "@types/fontkit": "^2.0.8", "fontkit": "^2.0.4" } }, "sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg=="], - - "fontkit": ["fontkit@2.0.4", "", { "dependencies": { "@swc/helpers": "^0.5.12", "brotli": "^1.3.2", "clone": "^2.1.2", "dfa": "^1.2.0", "fast-deep-equal": "^3.1.3", "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g=="], - "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], @@ -3319,8 +3104,6 @@ "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], - "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], - "gitlab-ai-provider": ["gitlab-ai-provider@6.6.0", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "openai": "^6.16.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=3.0.0", "@ai-sdk/provider-utils": ">=4.0.0" } }, "sha512-jUxYnKA4XQaPc3wxACDZ8bPDXO0Mzx7cZaBDxbT2uGgLqtGZmSi+9tVNIg7louSS+s/ioVra3SoUz3iOFVhKPA=="], "glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], @@ -3371,65 +3154,25 @@ "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], - "hast-util-embedded": ["hast-util-embedded@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-is-element": "^3.0.0" } }, "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA=="], + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], - "hast-util-format": ["hast-util-format@1.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-embedded": "^3.0.0", "hast-util-minify-whitespace": "^1.0.0", "hast-util-phrasing": "^3.0.0", "hast-util-whitespace": "^3.0.0", "html-whitespace-sensitive-tag-names": "^3.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA=="], + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], - "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], + "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], - "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], + "heap-snapshot-toolkit": ["heap-snapshot-toolkit@1.1.3", "", {}, "sha512-joThu2rEsDu8/l4arupRDI1qP4CZXNG+J6Wr348vnbLGSiBkwRdqZ6aOHl5BzEiC+Dc8OTbMlmWjD0lbXD5K2Q=="], - "hast-util-has-property": ["hast-util-has-property@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA=="], + "hey-listen": ["hey-listen@1.0.8", "", {}, "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="], - "hast-util-heading-rank": ["hast-util-heading-rank@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA=="], + "hono": ["hono@4.10.7", "", {}, "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw=="], - "hast-util-is-body-ok-link": ["hast-util-is-body-ok-link@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ=="], + "hono-openapi": ["hono-openapi@1.1.2", "", { "peerDependencies": { "@hono/standard-validator": "^0.2.0", "@standard-community/standard-json": "^0.3.5", "@standard-community/standard-openapi": "^0.2.9", "@types/json-schema": "^7.0.15", "hono": "^4.8.3", "openapi-types": "^12.1.3" }, "optionalPeers": ["@hono/standard-validator", "hono"] }, "sha512-toUcO60MftRBxqcVyxsHNYs2m4vf4xkQaiARAucQx3TiBPDtMNNkoh+C4I1vAretQZiGyaLOZNWn1YxfSyUA5g=="], - "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], + "hosted-git-info": ["hosted-git-info@9.0.3", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg=="], - "hast-util-minify-whitespace": ["hast-util-minify-whitespace@1.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-embedded": "^3.0.0", "hast-util-is-element": "^3.0.0", "hast-util-whitespace": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw=="], + "html-entities": ["html-entities@2.3.3", "", {}, "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="], - "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], - - "hast-util-phrasing": ["hast-util-phrasing@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-embedded": "^3.0.0", "hast-util-has-property": "^3.0.0", "hast-util-is-body-ok-link": "^3.0.0", "hast-util-is-element": "^3.0.0" } }, "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ=="], - - "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], - - "hast-util-select": ["hast-util-select@6.0.4", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "bcp-47-match": "^2.0.0", "comma-separated-tokens": "^2.0.0", "css-selector-parser": "^3.0.0", "devlop": "^1.0.0", "direction": "^2.0.0", "hast-util-has-property": "^3.0.0", "hast-util-to-string": "^3.0.0", "hast-util-whitespace": "^3.0.0", "nth-check": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw=="], - - "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], - - "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], - - "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], - - "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], - - "hast-util-to-string": ["hast-util-to-string@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A=="], - - "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], - - "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], - - "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], - - "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], - - "heap-snapshot-toolkit": ["heap-snapshot-toolkit@1.1.3", "", {}, "sha512-joThu2rEsDu8/l4arupRDI1qP4CZXNG+J6Wr348vnbLGSiBkwRdqZ6aOHl5BzEiC+Dc8OTbMlmWjD0lbXD5K2Q=="], - - "hey-listen": ["hey-listen@1.0.8", "", {}, "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="], - - "hono": ["hono@4.10.7", "", {}, "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw=="], - - "hono-openapi": ["hono-openapi@1.1.2", "", { "peerDependencies": { "@hono/standard-validator": "^0.2.0", "@standard-community/standard-json": "^0.3.5", "@standard-community/standard-openapi": "^0.2.9", "@types/json-schema": "^7.0.15", "hono": "^4.8.3", "openapi-types": "^12.1.3" }, "optionalPeers": ["@hono/standard-validator", "hono"] }, "sha512-toUcO60MftRBxqcVyxsHNYs2m4vf4xkQaiARAucQx3TiBPDtMNNkoh+C4I1vAretQZiGyaLOZNWn1YxfSyUA5g=="], - - "hosted-git-info": ["hosted-git-info@9.0.3", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg=="], - - "html-entities": ["html-entities@2.3.3", "", {}, "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="], - - "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], - - "html-minifier-terser": ["html-minifier-terser@7.2.0", "", { "dependencies": { "camel-case": "^4.1.2", "clean-css": "~5.3.2", "commander": "^10.0.0", "entities": "^4.4.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.15.1" }, "bin": { "html-minifier-terser": "cli.js" } }, "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA=="], + "html-minifier-terser": ["html-minifier-terser@7.2.0", "", { "dependencies": { "camel-case": "^4.1.2", "clean-css": "~5.3.2", "commander": "^10.0.0", "entities": "^4.4.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.15.1" }, "bin": { "html-minifier-terser": "cli.js" } }, "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA=="], "html-to-image": ["html-to-image@1.11.13", "", {}, "sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg=="], @@ -3437,8 +3180,6 @@ "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], - "html-whitespace-sensitive-tag-names": ["html-whitespace-sensitive-tag-names@3.0.1", "", {}, "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA=="], - "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], @@ -3457,8 +3198,6 @@ "husky": ["husky@9.1.7", "", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="], - "i18next": ["i18next@23.16.8", "", { "dependencies": { "@babel/runtime": "^7.23.2" } }, "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg=="], - "iconv-corefoundation": ["iconv-corefoundation@1.1.7", "", { "dependencies": { "cli-truncate": "^2.1.0", "node-addon-api": "^1.6.3" }, "os": "darwin" }, "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ=="], "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], @@ -3475,8 +3214,6 @@ "import-local": ["import-local@3.2.0", "", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA=="], - "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], - "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], @@ -3495,12 +3232,6 @@ "ipaddr.js": ["ipaddr.js@2.4.0", "", {}, "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ=="], - "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], - - "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], - - "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], - "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=="], "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], @@ -3525,8 +3256,6 @@ "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], - "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], - "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], "is-electron": ["is-electron@2.2.2", "", {}, "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg=="], @@ -3543,8 +3272,6 @@ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], - "is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="], "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], @@ -3557,7 +3284,7 @@ "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], - "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + "is-plain-obj": ["is-plain-obj@1.1.0", "", {}, "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="], "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], @@ -3683,14 +3410,8 @@ "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], - "klona": ["klona@2.0.6", "", {}, "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="], - "kubernetes-types": ["kubernetes-types@1.30.0", "", {}, "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="], - "lang-map": ["lang-map@0.4.0", "", { "dependencies": { "language-map": "^1.1.0" } }, "sha512-oiSqZIEUnWdFeDNsp4HId4tAxdFbx5iMBOwA3666Fn2L8Khj8NiD9xRvMsGmKXopPVkaDFtSv3CJOmXFUB0Hcg=="], - - "language-map": ["language-map@1.5.0", "", {}, "sha512-n7gFZpe+DwEAX9cXVTw43i3wiudWDDtSn28RmdnS/HCPr284dQI/SztsamWanRr75oSlKSaGbV2nmWCTzGCoVg=="], - "lazy-val": ["lazy-val@1.0.5", "", {}, "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q=="], "lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="], @@ -3751,8 +3472,6 @@ "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], - "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], @@ -3777,10 +3496,6 @@ "make-fetch-happen": ["make-fetch-happen@15.0.6", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/agent": "^4.0.0", "@npmcli/redact": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "ssri": "^13.0.0" } }, "sha512-Je0fLJ0F5atA7F+eIlLzk+Wkcl57JDf4kf+EW8xiP5E31xOQxkIxTbgf1Oi1Lw9tRI9UEMRdI5Vz2xTzoNU1Jw=="], - "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], - - "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], - "marked": ["marked@17.0.1", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg=="], "marked-katex-extension": ["marked-katex-extension@5.1.6", "", { "peerDependencies": { "katex": ">=0.16 <0.17", "marked": ">=4 <18" } }, "sha512-vYpLXwmlIDKILIhJtiRTgdyZRn5sEYdFBuTmbpjD7lbCIzg0/DWyK3HXIntN3Tp8zV6hvOUgpZNLWRCgWVc24A=="], @@ -3793,44 +3508,8 @@ "md-to-react-email": ["md-to-react-email@5.0.0", "", { "dependencies": { "marked": "7.0.4" }, "peerDependencies": { "react": "18.x" } }, "sha512-GdBrBUbAAJHypnuyofYGfVos8oUslxHx69hs3CW9P0L8mS1sT6GnJuMBTlz/Fw+2widiwdavcu9UwyLF/BzZ4w=="], - "mdast-util-definitions": ["mdast-util-definitions@6.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="], - - "mdast-util-directive": ["mdast-util-directive@3.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q=="], - - "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], - - "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], - - "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], - - "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], - - "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], - - "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], - - "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], - - "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], - - "mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="], - - "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], - - "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], - - "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], - - "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], - "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], - "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], - - "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - - "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], - "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], "merge-anything": ["merge-anything@5.1.7", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ=="], @@ -3843,74 +3522,12 @@ "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], - "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], - - "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], - - "micromark-extension-directive": ["micromark-extension-directive@3.0.2", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "parse-entities": "^4.0.0" } }, "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA=="], - - "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], - - "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], - - "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], - - "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], - - "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], - - "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], - - "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], - - "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="], - - "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="], - - "micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="], - - "micromark-extension-mdxjs": ["micromark-extension-mdxjs@3.0.0", "", { "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "micromark-extension-mdx-expression": "^3.0.0", "micromark-extension-mdx-jsx": "^3.0.0", "micromark-extension-mdx-md": "^2.0.0", "micromark-extension-mdxjs-esm": "^3.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ=="], - - "micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="], - - "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], - - "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], - - "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="], - - "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], - - "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], - - "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], - "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], - "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], - - "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], - - "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], - - "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], - - "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], - "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], - "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg=="], - - "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], - - "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], - - "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], - "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], - "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], - "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], @@ -3961,8 +3578,6 @@ "motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], - "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "msgpackr": ["msgpackr@1.11.12", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.2" } }, "sha512-RBdJ1Un7yGlXWajrkxcSa93nvQ0w4zBf60c0yYv7YtBelP8H2FA7XsfBbMHtXKXUMUxH7zV3Zuozh+kUQWhHvg=="], @@ -3971,8 +3586,6 @@ "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=="], - "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], - "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=="], @@ -3993,14 +3606,10 @@ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], - "nf3": ["nf3@0.1.12", "", {}, "sha512-qbMXT7RTGh74MYWPeqTIED8nDW70NXOULVHpdWcdZ7IVHVnAsMV9fNugSNnvooipDc1FMOzpis7T9nXJEbJhvQ=="], "nitro": ["nitro@3.0.1-alpha.1", "", { "dependencies": { "consola": "^3.4.2", "crossws": "^0.4.1", "db0": "^0.3.4", "h3": "2.0.1-rc.5", "jiti": "^2.6.1", "nf3": "^0.1.10", "ofetch": "^2.0.0-alpha.3", "ohash": "^2.0.11", "oxc-minify": "^0.96.0", "oxc-transform": "^0.96.0", "srvx": "^0.9.5", "undici": "^7.16.0", "unenv": "^2.0.0-rc.24", "unstorage": "^2.0.0-alpha.4" }, "peerDependencies": { "rolldown": "*", "rollup": "^4", "vite": "^7", "xml2js": "^0.6.2" }, "optionalPeers": ["rolldown", "rollup", "vite", "xml2js"], "bin": { "nitro": "dist/cli/index.mjs" } }, "sha512-U4AxIsXxdkxzkFrK0XAw0e5Qbojk8jQ50MjjRBtBakC4HurTtQoiZvF+lSe382jhuQZCfAyywGWOFa9QzXLFaw=="], - "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], - "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], "node-abi": ["node-abi@4.31.0", "", { "dependencies": { "semver": "^7.6.3" } }, "sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw=="], @@ -4023,8 +3632,6 @@ "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-mock-http": ["node-mock-http@1.0.4", "", {}, "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="], - "node-releases": ["node-releases@2.0.47", "", {}, "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og=="], "nopt": ["nopt@9.0.0", "", { "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw=="], @@ -4121,28 +3728,24 @@ "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], - "p-limit": ["p-limit@6.2.0", "", { "dependencies": { "yocto-queue": "^1.1.1" } }, "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA=="], + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], "p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="], - "p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], "p-retry": ["p-retry@4.6.2", "", { "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" } }, "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ=="], - "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], - "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], - "pacote": ["pacote@21.5.0", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^13.0.0", "npm-packlist": "^10.0.1", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "proc-log": "^6.0.0", "sigstore": "^4.0.0", "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" } }, "sha512-VtZ0SB8mb5Tzw3dXDfVAIjhyVKUHZkS/ZH9/5mpKenwC9sFOXNI0JI7kEF7IMkwOnsWMFrvAZHzx1T5fmrp9FQ=="], - "pagefind": ["pagefind@1.5.2", "", { "optionalDependencies": { "@pagefind/darwin-arm64": "1.5.2", "@pagefind/darwin-x64": "1.5.2", "@pagefind/freebsd-x64": "1.5.2", "@pagefind/linux-arm64": "1.5.2", "@pagefind/linux-x64": "1.5.2", "@pagefind/windows-arm64": "1.5.2", "@pagefind/windows-x64": "1.5.2" }, "bin": { "pagefind": "lib/runner/bin.cjs" } }, "sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q=="], - "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], "param-case": ["param-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="], @@ -4155,10 +3758,6 @@ "parse-conflict-json": ["parse-conflict-json@5.0.1", "", { "dependencies": { "json-parse-even-better-errors": "^5.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" } }, "sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ=="], - "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], - - "parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], - "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], @@ -4171,8 +3770,6 @@ "pascal-case": ["pascal-case@3.1.2", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="], - "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], - "path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], "path-expression-matcher": ["path-expression-matcher@1.5.0", "", {}, "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ=="], @@ -4203,8 +3800,6 @@ "perfect-debounce": ["perfect-debounce@2.1.0", "", {}, "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g=="], - "piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="], - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], @@ -4271,8 +3866,6 @@ "pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], - "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], - "proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], @@ -4293,8 +3886,6 @@ "promise.allsettled": ["promise.allsettled@1.0.7", "", { "dependencies": { "array.prototype.map": "^1.0.5", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "iterate-value": "^1.0.2" } }, "sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA=="], - "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], - "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], @@ -4377,14 +3968,6 @@ "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="], - "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], - - "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="], - - "recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="], - - "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="], - "redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], @@ -4401,44 +3984,12 @@ "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], - "rehype": ["rehype@13.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "rehype-parse": "^9.0.0", "rehype-stringify": "^10.0.0", "unified": "^11.0.0" } }, "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="], - - "rehype-autolink-headings": ["rehype-autolink-headings@7.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-heading-rank": "^3.0.0", "hast-util-is-element": "^3.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw=="], - - "rehype-expressive-code": ["rehype-expressive-code@0.41.7", "", { "dependencies": { "expressive-code": "^0.41.7" } }, "sha512-25f8ZMSF1d9CMscX7Cft0TSQIqdwjce2gDOvQ+d/w0FovsMwrSt3ODP4P3Z7wO1jsIJ4eYyaDRnIR/27bd/EMQ=="], - - "rehype-format": ["rehype-format@5.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-format": "^1.0.0" } }, "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ=="], - - "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], - - "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], - - "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], - - "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], - "relateurl": ["relateurl@0.2.7", "", {}, "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog=="], - "remark-directive": ["remark-directive@3.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-directive": "^3.0.0", "micromark-extension-directive": "^3.0.0", "unified": "^11.0.0" } }, "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A=="], - - "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], - - "remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="], - - "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], - - "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], - - "remark-smartypants": ["remark-smartypants@3.0.2", "", { "dependencies": { "retext": "^9.0.0", "retext-smartypants": "^6.0.0", "unified": "^11.0.4", "unist-util-visit": "^5.0.0" } }, "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA=="], - - "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], - "remeda": ["remeda@2.26.0", "", { "dependencies": { "type-fest": "^4.41.0" } }, "sha512-lmNNwtaC6Co4m0WTTNoZ/JlpjEqAjPZO0+czC9YVRQUpkbS4x8Hmh+Mn9HPfJfiXqUQ5IXXgSXSOB2pBKAytdA=="], "remend": ["remend@1.3.0", "", {}, "sha512-iIhggPkhW3hFImKtB10w0dz4EZbs28mV/dmbcYVonWEJ6UGHHpP+bFZnTh6GNWJONg5m+U56JrL+8IxZRdgWjw=="], - "request-light": ["request-light@0.7.0", "", {}, "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="], - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], @@ -4459,18 +4010,8 @@ "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], - "restructure": ["restructure@3.0.2", "", {}, "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="], - "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], - "retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], - - "retext-latin": ["retext-latin@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "parse-latin": "^7.0.0", "unified": "^11.0.0" } }, "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA=="], - - "retext-smartypants": ["retext-smartypants@6.2.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="], - - "retext-stringify": ["retext-stringify@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unified": "^11.0.0" } }, "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="], - "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], @@ -4579,16 +4120,12 @@ "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], - "sitemap": ["sitemap@9.0.1", "", { "dependencies": { "@types/node": "^24.9.2", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.4.1" }, "bin": { "sitemap": "dist/esm/cli.js" } }, "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ=="], - "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], "slice-ansi": ["slice-ansi@5.0.0", "", { "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ=="], "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], - "smol-toml": ["smol-toml@1.6.1", "", {}, "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg=="], - "socket.io-client": ["socket.io-client@4.8.3", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1", "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" } }, "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g=="], "socket.io-parser": ["socket.io-parser@4.2.6", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1" } }, "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg=="], @@ -4681,8 +4218,6 @@ "storybook-solidjs-vite": ["storybook-solidjs-vite@10.1.1", "", { "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.7.0", "@storybook/builder-vite": "^10.4.0", "@storybook/global": "^5.0.0", "semver": "7.8.1" }, "peerDependencies": { "@solidjs/web": "^2.0.0-0", "solid-js": "^1.8.0-0 || ^2.0.0-0", "storybook": "^0.0.0-0 || ^10.0.0", "typescript": "^4.0.0 || ^5.0.0 || ^6.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vite-plugin-solid": "^2.0.0-0 || ^3.0.0-0" }, "optionalPeers": ["@solidjs/web", "typescript"] }, "sha512-4acj1yxVPM3PieEGFPJukPeIXmpboJprewiX0KMrdYvtAZy8zbkZ7QBf8iENyKNJOayeXWzMm+z7hWBQDUirYg=="], - "stream-replace-string": ["stream-replace-string@2.0.0", "", {}, "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="], - "streamx": ["streamx@2.26.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A=="], "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], @@ -4719,8 +4254,6 @@ "stubborn-utils": ["stubborn-utils@1.0.2", "", {}, "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg=="], - "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], - "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], @@ -4773,8 +4306,6 @@ "tiny-async-pool": ["tiny-async-pool@1.3.0", "", { "dependencies": { "semver": "^5.5.0" } }, "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA=="], - "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], - "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], "tiny-typed-emitter": ["tiny-typed-emitter@2.1.0", "", {}, "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="], @@ -4807,8 +4338,6 @@ "toml": ["toml@4.1.1", "", {}, "sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw=="], - "toolbeam-docs-theme": ["toolbeam-docs-theme@0.4.8", "", { "peerDependencies": { "@astrojs/starlight": "^0.34.3", "astro": "^5.7.13" } }, "sha512-b+5ynEFp4Woe5a22hzNQm42lD23t13ZMihVxHbzjA50zdcM9aOSJTIjdJ0PDSd4/50HbBXcpHiQsz6rM4N88ww=="], - "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "traverse": ["traverse@0.3.9", "", {}, "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="], @@ -4821,8 +4350,6 @@ "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], - "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], - "truncate-utf8-bytes": ["truncate-utf8-bytes@1.0.2", "", { "dependencies": { "utf8-byte-length": "^1.0.1" } }, "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ=="], "ts-algebra": ["ts-algebra@2.0.0", "", {}, "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw=="], @@ -4831,8 +4358,6 @@ "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], - "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "tsscmp": ["tsscmp@1.0.6", "", {}, "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA=="], @@ -4871,56 +4396,28 @@ "typed-array-length": ["typed-array-length@1.0.8", "", { "dependencies": { "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "possible-typed-array-names": "^1.1.0", "reflect.getprototypeof": "^1.0.10" } }, "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g=="], - "typesafe-path": ["typesafe-path@0.2.2", "", {}, "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="], - "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], - "typescript-auto-import-cache": ["typescript-auto-import-cache@0.3.6", "", { "dependencies": { "semver": "^7.3.8" } }, "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ=="], - - "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], - "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], "ulid": ["ulid@3.0.1", "", { "bin": { "ulid": "dist/cli.js" } }, "sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q=="], - "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], - "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], - "undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], "unenv": ["unenv@2.0.0-rc.24", "", { "dependencies": { "pathe": "^2.0.3" } }, "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw=="], - "unicode-properties": ["unicode-properties@1.4.1", "", { "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" } }, "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg=="], - - "unicode-trie": ["unicode-trie@2.0.0", "", { "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" } }, "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ=="], - - "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], - - "unifont": ["unifont@0.5.2", "", { "dependencies": { "css-tree": "^3.0.0", "ofetch": "^1.4.1", "ohash": "^2.0.0" } }, "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg=="], - - "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], - "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "unist-util-modify-children": ["unist-util-modify-children@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "array-iterate": "^2.0.0" } }, "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw=="], - "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], - "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], - - "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], - "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], - "unist-util-visit-children": ["unist-util-visit-children@3.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="], - "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], "universal-github-app-jwt": ["universal-github-app-jwt@2.2.2", "", {}, "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw=="], @@ -4975,8 +4472,6 @@ "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], - "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], - "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], "virtua": ["virtua@0.42.3", "", { "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0", "solid-js": ">=1.0", "svelte": ">=5.0", "vue": ">=3.2" }, "optionalPeers": ["react", "react-dom", "solid-js", "svelte", "vue"] }, "sha512-5FoAKcEvh05qsUF97Yz42SWJ7bwnPExjUYHGuoxz1EUtfWtaOgXaRwnylJbDpA0QcH1rKvJ2qsGRi9MK1fpQbg=="], @@ -4993,44 +4488,12 @@ "vitest": ["vitest@4.1.8", "", { "dependencies": { "@vitest/expect": "4.1.8", "@vitest/mocker": "4.1.8", "@vitest/pretty-format": "4.1.8", "@vitest/runner": "4.1.8", "@vitest/snapshot": "4.1.8", "@vitest/spy": "4.1.8", "@vitest/utils": "4.1.8", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.8", "@vitest/browser-preview": "4.1.8", "@vitest/browser-webdriverio": "4.1.8", "@vitest/coverage-istanbul": "4.1.8", "@vitest/coverage-v8": "4.1.8", "@vitest/ui": "4.1.8", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig=="], - "volar-service-css": ["volar-service-css@0.0.70", "", { "dependencies": { "vscode-css-languageservice": "^6.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-K1qyOvBpE3rzdAv3e4/6Rv5yizrYPy5R/ne3IWCAzLBuMO4qBMV3kSqWzj6KUVe6S0AnN6wxF7cRkiaKfYMYJw=="], - - "volar-service-emmet": ["volar-service-emmet@0.0.70", "", { "dependencies": { "@emmetio/css-parser": "^0.4.1", "@emmetio/html-matcher": "^1.3.0", "@vscode/emmet-helper": "^2.9.3", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-xi5bC4m/VyE3zy/n2CXspKeDZs3qA41tHLTw275/7dNWM/RqE2z3BnDICQybHIVp/6G1iOQj5c1qXMgQC08TNg=="], - - "volar-service-html": ["volar-service-html@0.0.70", "", { "dependencies": { "vscode-html-languageservice": "^5.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-eR6vCgMdmYAo4n+gcT7DSyBQbwB8S3HZZvSagTf0sxNaD4WppMCFfpqWnkrlGStPKMZvMiejRRVmqsX9dYcTvQ=="], - - "volar-service-prettier": ["volar-service-prettier@0.0.70", "", { "dependencies": { "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0", "prettier": "^2.2 || ^3.0" }, "optionalPeers": ["@volar/language-service", "prettier"] }, "sha512-Z6BCFSpGVCd8BPAsZ785Kce1BGlWd5ODqmqZGVuB14MJvrR4+CYz6cDy4F+igmE1gMifqfvMhdgT8Aud4M5ngg=="], - - "volar-service-typescript": ["volar-service-typescript@0.0.70", "", { "dependencies": { "path-browserify": "^1.0.1", "semver": "^7.6.2", "typescript-auto-import-cache": "^0.3.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-nls": "^5.2.0", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-l46Bx4cokkUedTd74ojO5H/zqHZJ8SUuyZ0IB8JN4jfRqUM3bQFBHoOwlZCyZmOeO0A3RQNkMnFclxO4c++gsg=="], - - "volar-service-typescript-twoslash-queries": ["volar-service-typescript-twoslash-queries@0.0.70", "", { "dependencies": { "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-IdD13Z9N2Bu8EM6CM0fDV1E69olEYGHDU25X51YXmq8Y0CmJ2LNj6gOiBJgpS5JGUqFzECVhMNBW7R0sPdRTMQ=="], - - "volar-service-yaml": ["volar-service-yaml@0.0.70", "", { "dependencies": { "vscode-uri": "^3.0.8", "yaml-language-server": "~1.20.0" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-0c8bXDBeoATF9F6iPIlOuYTuZAC4c+yi0siQo920u7eiBJk8oQmUmg9cDUbR4+Gl++bvGP4plj3fErbJuPqdcQ=="], - - "vscode-css-languageservice": ["vscode-css-languageservice@6.3.10", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA=="], - - "vscode-html-languageservice": ["vscode-html-languageservice@5.6.2", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg=="], - - "vscode-json-languageservice": ["vscode-json-languageservice@4.1.8", "", { "dependencies": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.16.0", "vscode-nls": "^5.0.0", "vscode-uri": "^3.0.2" } }, "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg=="], - "vscode-jsonrpc": ["vscode-jsonrpc@8.2.1", "", {}, "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ=="], - "vscode-languageserver": ["vscode-languageserver@9.0.1", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g=="], - - "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.18.0", "", { "dependencies": { "vscode-jsonrpc": "9.0.0", "vscode-languageserver-types": "3.18.0" } }, "sha512-Zdz+kJ12Iz6tc11xfZyEo501bBATHXrCjmMfnaR3pMnf1CoqZBKIynba3P+/bi9VEdrMbNtAVKYpKhbODvqy+Q=="], - - "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="], - "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], - "vscode-nls": ["vscode-nls@5.2.0", "", {}, "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="], - - "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], - "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="], - "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], - "web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="], "web-tree-sitter": ["web-tree-sitter@0.25.10", "", { "peerDependencies": { "@types/emscripten": "^1.40.0" }, "optionalPeers": ["@types/emscripten"] }, "sha512-Y09sF44/13XvgVKgO2cNDw5rGk6s26MgoZPXLESvMXeefBf7i6/73eFurre0IsTW6E14Y0ArIzhUMmjoc7xyzA=="], @@ -5053,14 +4516,10 @@ "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - "which-pm-runs": ["which-pm-runs@1.1.0", "", {}, "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="], - "which-typed-array": ["which-typed-array@1.1.21", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw=="], "why-is-node-running": ["why-is-node-running@3.2.2", "", { "bin": { "why-is-node-running": "cli.js" } }, "sha512-NKUzAelcoCXhXL4dJzKIwXeR8iEVqsA0Lq6Vnd0UXvgaKbzVo4ZTHROF2Jidrv+SgxOQ03fMinnNhzZATxOD3A=="], - "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], - "workerd": ["workerd@1.20251118.0", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20251118.0", "@cloudflare/workerd-darwin-arm64": "1.20251118.0", "@cloudflare/workerd-linux-64": "1.20251118.0", "@cloudflare/workerd-linux-arm64": "1.20251118.0", "@cloudflare/workerd-windows-64": "1.20251118.0" }, "bin": { "workerd": "bin/workerd" } }, "sha512-Om5ns0Lyx/LKtYI04IV0bjIrkBgoFNg0p6urzr2asekJlfP18RqFzyqMFZKf0i9Gnjtz/JfAS/Ol6tjCe5JJsQ=="], "wrangler": ["wrangler@4.50.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.7.11", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20251118.1", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20251118.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20251118.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-+nuZuHZxDdKmAyXOSrHlciGshCoAPiy5dM+t6mEohWm7HpXvTHmWQGUf/na9jjWlWJHCJYOWzkA1P5HBJqrIEA=="], @@ -5089,27 +4548,19 @@ "xmlhttprequest-ssl": ["xmlhttprequest-ssl@2.1.2", "", {}, "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ=="], - "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], - "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], "yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], - "yaml-language-server": ["yaml-language-server@1.20.0", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "ajv": "^8.17.1", "ajv-draft-04": "^1.0.0", "prettier": "^3.5.0", "request-light": "^0.5.7", "vscode-json-languageservice": "4.1.8", "vscode-languageserver": "^9.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.16.0", "vscode-uri": "^3.0.2", "yaml": "2.7.1" }, "bin": { "yaml-language-server": "bin/yaml-language-server" } }, "sha512-qhjK/bzSRZ6HtTvgeFvjNPJGWdZ0+x5NREV/9XZWFjIGezew2b4r5JPy66IfOhd5OA7KeFwk1JfmEbnTvev0cA=="], - "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=="], "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], - "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], - - "yocto-spinner": ["yocto-spinner@0.2.3", "", { "dependencies": { "yoctocolors": "^2.1.1" } }, "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ=="], - - "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], "yoga-layout": ["yoga-layout@3.2.1", "", {}, "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ=="], @@ -5125,8 +4576,6 @@ "zod-to-json-schema": ["zod-to-json-schema@3.24.5", "", { "peerDependencies": { "zod": "^3.24.1" } }, "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g=="], - "zod-to-ts": ["zod-to-ts@1.2.0", "", { "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" } }, "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA=="], - "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], "@actions/artifact/@actions/core": ["@actions/core@2.0.3", "", { "dependencies": { "@actions/exec": "^2.0.0", "@actions/http-client": "^3.0.2" } }, "sha512-Od9Thc3T1mQJYddvVPM4QGiLUewdh+3txmDYHHxoNdkqysR1MbCT+rFOtNUxYAz+7+6RIsqipVahY2GJqGPyxA=="], @@ -5187,24 +4636,6 @@ "@ai-sdk/vercel/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], - "@astrojs/check/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - - "@astrojs/cloudflare/vite": ["vite@6.4.3", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A=="], - - "@astrojs/markdown-remark/@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.6.1", "", {}, "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A=="], - - "@astrojs/markdown-remark/js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], - - "@astrojs/mdx/@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.11", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.6", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.21.0", "smol-toml": "^1.6.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ=="], - - "@astrojs/mdx/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - - "@astrojs/sitemap/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - - "@astrojs/solid-js/vite": ["vite@6.4.3", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A=="], - - "@astrojs/starlight/js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], - "@aws-crypto/crc32/@aws-sdk/types": ["@aws-sdk/types@3.973.10", "", { "dependencies": { "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-992QrTO7G9qCvKD0fx1rMlqcL14plUcRAbwmqqYVsuF3GrqcvlAL9qxR+baMafarEZ+l7DUQ5lCMmt5mbMhF7g=="], "@aws-crypto/crc32c/@aws-sdk/types": ["@aws-sdk/types@3.973.10", "", { "dependencies": { "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-992QrTO7G9qCvKD0fx1rMlqcL14plUcRAbwmqqYVsuF3GrqcvlAL9qxR+baMafarEZ+l7DUQ5lCMmt5mbMhF7g=="], @@ -5383,6 +4814,24 @@ "@develar/schema-utils/ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], + "@devora-ai/console-function/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.64", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-rwLi/Rsuj2pYniQXIrvClHvXDzgM4UQHHnvHTWEF14efnlKclG/1ghpNC+adsRujAbCTr6gRsSbDE2vEqriV7g=="], + + "@devora-ai/console-function/@ai-sdk/openai": ["@ai-sdk/openai@3.0.48", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ALmj/53EXpcRqMbGpPJPP4UOSWw0q4VGpnDo7YctvsynjkrKDmoneDG/1a7VQnSPYHnJp6tTRMf5ZdxZ5whulg=="], + + "@devora-ai/console-function/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.37", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-+POSFVcgiu47BK64dhsI6OpcDC0/VAE2ZSaXdXGNNhpC/ava++uSRJYks0k2bpfY0wwCTgpAWZsXn/dG2Yppiw=="], + + "@devora-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=="], + + "@devora-ai/desktop/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], + + "@devora-ai/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="], + + "@devora-ai/shared/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], + + "@devora-ai/shared/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + + "@devora-ai/ui/@solid-primitives/resize-observer": ["@solid-primitives/resize-observer@2.1.3", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/rootless": "^1.5.2", "@solid-primitives/static-store": "^0.1.2", "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ=="], + "@dot/log/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "@effect/platform-node/undici": ["undici@8.3.0", "", {}, "sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q=="], @@ -5413,8 +4862,6 @@ "@electron/windows-sign/fs-extra": ["fs-extra@11.3.5", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg=="], - "@expressive-code/plugin-shiki/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="], - "@hey-api/json-schema-ref-parser/js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], "@hey-api/openapi-ts/open": ["open@11.0.0", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.1.0", "wsl-utils": "^0.3.0" } }, "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw=="], @@ -5473,28 +4920,6 @@ "@malept/flatpak-bundler/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], - "@mdx-js/mdx/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - - "@mimo-ai/console-function/@ai-sdk/anthropic": ["@ai-sdk/anthropic@3.0.64", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-rwLi/Rsuj2pYniQXIrvClHvXDzgM4UQHHnvHTWEF14efnlKclG/1ghpNC+adsRujAbCTr6gRsSbDE2vEqriV7g=="], - - "@mimo-ai/console-function/@ai-sdk/openai": ["@ai-sdk/openai@3.0.48", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ALmj/53EXpcRqMbGpPJPP4UOSWw0q4VGpnDo7YctvsynjkrKDmoneDG/1a7VQnSPYHnJp6tTRMf5ZdxZ5whulg=="], - - "@mimo-ai/console-function/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@2.0.37", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-+POSFVcgiu47BK64dhsI6OpcDC0/VAE2ZSaXdXGNNhpC/ava++uSRJYks0k2bpfY0wwCTgpAWZsXn/dG2Yppiw=="], - - "@mimo-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=="], - - "@mimo-ai/desktop/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], - - "@mimo-ai/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="], - - "@mimo-ai/shared/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - - "@mimo-ai/shared/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - - "@mimo-ai/ui/@solid-primitives/resize-observer": ["@solid-primitives/resize-observer@2.1.3", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/rootless": "^1.5.2", "@solid-primitives/static-store": "^0.1.2", "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ=="], - - "@mimo-ai/web/@shikijs/transformers": ["@shikijs/transformers@3.20.0", "", { "dependencies": { "@shikijs/core": "3.20.0", "@shikijs/types": "3.20.0" } }, "sha512-PrHHMRr3Q5W1qB/42kJW6laqFyWdhrPF2hNR9qjOm1xcSiAO3hAHo7HaVyHE6pMyevmy3i51O8kuGGXC78uK3g=="], - "@modelcontextprotocol/sdk/hono": ["hono@4.12.23", "", {}, "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA=="], "@modelcontextprotocol/sdk/jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], @@ -5587,8 +5012,6 @@ "@protobuf-ts/plugin/typescript": ["typescript@3.9.10", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q=="], - "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@shikijs/engine-javascript/@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], "@shikijs/engine-oniguruma/@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], @@ -5619,8 +5042,6 @@ "@slack/web-api/is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="], - "@slack/web-api/p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], - "@solidjs/start/path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], "@solidjs/start/shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="], @@ -5661,14 +5082,10 @@ "@vitest/mocker/@vitest/spy": ["@vitest/spy@4.1.8", "", {}, "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA=="], - "@vscode/emmet-helper/jsonc-parser": ["jsonc-parser@2.3.1", "", {}, "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="], - "ai-gateway-provider/@ai-sdk/google": ["@ai-sdk/google@3.0.64", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-CbR82EgGPNrj/6q0HtclwuCqe0/pDShyv3nWDP/A9DroujzWXnLMlUJVrgPOsg4b40zQCwwVs2XSKCxvt/4QaA=="], "ajv-keywords/ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], - "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], "app-builder-lib/@electron/get": ["@electron/get@3.1.0", "", { "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "optionalDependencies": { "global-agent": "^3.0.0" } }, "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ=="], @@ -5691,24 +5108,6 @@ "argparse/sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - "astro/@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.6.1", "", {}, "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A=="], - - "astro/common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], - - "astro/diff": ["diff@5.2.2", "", {}, "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A=="], - - "astro/js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], - - "astro/unstorage": ["unstorage@1.17.5", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.10", "lru-cache": "^11.2.7", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.3" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg=="], - - "astro/vite": ["vite@6.4.3", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A=="], - - "astro/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - - "astro/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - - "astro/zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="], - "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=="], @@ -5755,8 +5154,6 @@ "dir-compare/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "dir-compare/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - "dmg-builder/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "dmg-builder/js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], @@ -5795,10 +5192,6 @@ "esbuild-plugin-copy/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "estree-util-to-js/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], - - "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - "extract-zip/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], "fetch-blob/web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], @@ -5839,6 +5232,8 @@ "lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "light-my-request/cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + "light-my-request/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], "lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], @@ -5897,12 +5292,12 @@ "p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "p-queue/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], + "p-retry/retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], "parse-bmfont-xml/xml2js": ["xml2js@0.5.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA=="], - "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "pixelmatch/pngjs": ["pngjs@6.0.0", "", {}, "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="], @@ -5927,8 +5322,6 @@ "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], - "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], - "proper-lockfile/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], @@ -5953,14 +5346,10 @@ "shiki/@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], - "sitemap/sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], - "slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@4.0.0", "", {}, "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="], - "sort-keys/is-plain-obj": ["is-plain-obj@1.1.0", "", {}, "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="], - "sst/aws4fetch": ["aws4fetch@1.0.18", "", {}, "sha512-3Cf+YaUl07p24MoQ46rFwulAmiyCwH2+1zw1ZyPAX5OtJ34Hh185DwB8y/qRLb6cYYYtSFJ9pthyLc0MD4e8sQ=="], "sst/jose": ["jose@5.2.3", "", {}, "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA=="], @@ -5997,10 +5386,6 @@ "type-is/content-type": ["content-type@2.0.0", "", {}, "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ=="], - "unicode-trie/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], - - "unifont/ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], - "uri-js/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "vite-plugin-icons-spritesheet/glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], @@ -6017,14 +5402,6 @@ "vitest/why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], - "vscode-json-languageservice/vscode-languageserver-types": ["vscode-languageserver-types@3.18.0", "", {}, "sha512-8TsGPNMIMiiBdkORgRSvLjuiEIiAFtO+KssmYWxQ+uSVvlf7RjK8YKCOjPzZ+YA04jXEV7+7LvkSmHkhpNS99g=="], - - "vscode-languageserver/vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="], - - "vscode-languageserver-protocol/vscode-jsonrpc": ["vscode-jsonrpc@9.0.0", "", {}, "sha512-+VvMmQPJhtvJ+8O+zu2JKIRiLxXF8NW7krWgyMGeOHrp4Cn23T5hc0v2LknNeopDOB70wghHAds7mKtcZ0I4Sg=="], - - "vscode-languageserver-protocol/vscode-languageserver-types": ["vscode-languageserver-types@3.18.0", "", {}, "sha512-8TsGPNMIMiiBdkORgRSvLjuiEIiAFtO+KssmYWxQ+uSVvlf7RjK8YKCOjPzZ+YA04jXEV7+7LvkSmHkhpNS99g=="], - "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], "wrangler/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], @@ -6037,15 +5414,11 @@ "xml2js/sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], - "yaml-language-server/request-light": ["request-light@0.5.8", "", {}, "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg=="], - - "yaml-language-server/yaml": ["yaml@2.7.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ=="], - "yauzl/buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], - "zod-to-json-schema/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "youch/cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], - "zod-to-ts/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "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=="], @@ -6075,24 +5448,6 @@ "@ai-sdk/vercel/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@astrojs/check/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - - "@astrojs/check/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "@astrojs/check/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - - "@astrojs/markdown-remark/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "@astrojs/mdx/@astrojs/markdown-remark/@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.7.6", "", {}, "sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q=="], - - "@astrojs/mdx/@astrojs/markdown-remark/@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="], - - "@astrojs/mdx/@astrojs/markdown-remark/js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], - - "@astrojs/mdx/@astrojs/markdown-remark/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="], - - "@astrojs/starlight/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "@aws-crypto/sha1-browser/@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-crypto/sha256-browser/@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=="], @@ -6165,6 +5520,14 @@ "@develar/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + "@devora-ai/console-function/@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], + + "@devora-ai/console-function/@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], + + "@devora-ai/console-function/@ai-sdk/openai-compatible/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], + + "@devora-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=="], + "@effect/platform-node-shared/effect/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], "@electron/asar/minimatch/brace-expansion": ["brace-expansion@1.1.15", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg=="], @@ -6181,18 +5544,6 @@ "@electron/windows-sign/fs-extra/jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], - "@expressive-code/plugin-shiki/shiki/@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], - - "@expressive-code/plugin-shiki/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="], - - "@expressive-code/plugin-shiki/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g=="], - - "@expressive-code/plugin-shiki/shiki/@shikijs/langs": ["@shikijs/langs@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg=="], - - "@expressive-code/plugin-shiki/shiki/@shikijs/themes": ["@shikijs/themes@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA=="], - - "@expressive-code/plugin-shiki/shiki/@shikijs/types": ["@shikijs/types@3.23.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ=="], - "@hey-api/json-schema-ref-parser/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "@jsx-email/cli/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.19.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA=="], @@ -6259,18 +5610,6 @@ "@malept/flatpak-bundler/fs-extra/jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], - "@mimo-ai/console-function/@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], - - "@mimo-ai/console-function/@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], - - "@mimo-ai/console-function/@ai-sdk/openai-compatible/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw=="], - - "@mimo-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=="], - - "@mimo-ai/web/@shikijs/transformers/@shikijs/core": ["@shikijs/core@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g=="], - - "@mimo-ai/web/@shikijs/transformers/@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], - "@octokit/auth-app/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag=="], "@octokit/auth-app/@octokit/request/@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], @@ -6359,8 +5698,6 @@ "@slack/bolt/express/content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], - "@slack/bolt/express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - "@slack/bolt/express/cookie-signature": ["cookie-signature@1.0.7", "", {}, "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="], "@slack/bolt/express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -6383,10 +5720,6 @@ "@slack/web-api/form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - "@slack/web-api/p-queue/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], - - "@slack/web-api/p-queue/p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], - "@solidjs/start/shiki/@shikijs/core": ["@shikijs/core@1.29.2", "", { "dependencies": { "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ=="], "@solidjs/start/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A=="], @@ -6405,10 +5738,6 @@ "ajv-keywords/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "app-builder-lib/@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], "app-builder-lib/@electron/get/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -6425,14 +5754,6 @@ "archiver-utils/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "astro/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "astro/unstorage/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], - - "astro/unstorage/h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], - - "astro/unstorage/ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], - "axios/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "babel-plugin-module-resolver/glob/minimatch": ["minimatch@8.0.7", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg=="], @@ -6453,8 +5774,6 @@ "dir-compare/minimatch/brace-expansion": ["brace-expansion@1.1.15", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg=="], - "dir-compare/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "dmg-builder/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "dmg-license/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], @@ -6541,8 +5860,6 @@ "vitest/@vitest/expect/chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], - "vscode-languageserver/vscode-languageserver-protocol/vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], - "wrangler/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], "wrangler/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], @@ -6599,28 +5916,6 @@ "@actions/artifact/@actions/core/@actions/exec/@actions/io": ["@actions/io@2.0.0", "", {}, "sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg=="], - "@astrojs/check/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "@astrojs/check/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "@astrojs/check/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "@astrojs/check/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "@astrojs/mdx/@astrojs/markdown-remark/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], - - "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="], - - "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g=="], - - "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/langs": ["@shikijs/langs@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg=="], - - "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/themes": ["@shikijs/themes@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA=="], - - "@astrojs/mdx/@astrojs/markdown-remark/shiki/@shikijs/types": ["@shikijs/types@3.23.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ=="], - "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], @@ -6661,6 +5956,12 @@ "@aws-sdk/token-providers/@aws-sdk/core/@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.7.3", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.1.7", "path-expression-matcher": "^1.5.0", "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg=="], + "@devora-ai/console-function/@ai-sdk/anthropic/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@devora-ai/console-function/@ai-sdk/openai-compatible/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@devora-ai/console-function/@ai-sdk/openai/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + "@electron/asar/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "@electron/universal/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -6713,12 +6014,6 @@ "@jsx-email/cli/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], - "@mimo-ai/console-function/@ai-sdk/anthropic/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - - "@mimo-ai/console-function/@ai-sdk/openai-compatible/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - - "@mimo-ai/console-function/@ai-sdk/openai/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@octokit/auth-app/@octokit/request-error/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], "@octokit/auth-app/@octokit/request/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], @@ -6749,8 +6044,6 @@ "@solidjs/start/shiki/@shikijs/engine-javascript/oniguruma-to-es": ["oniguruma-to-es@2.3.0", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^5.1.1", "regex-recursion": "^5.1.1" } }, "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g=="], - "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "app-builder-lib/@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], "archiver-utils/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], @@ -6759,12 +6052,6 @@ "archiver-utils/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "astro/unstorage/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], - - "astro/unstorage/h3/cookie-es": ["cookie-es@1.2.3", "", {}, "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw=="], - - "astro/unstorage/h3/crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], - "babel-plugin-module-resolver/glob/minimatch/brace-expansion": ["brace-expansion@2.1.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="], "babel-plugin-module-resolver/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -6807,10 +6094,6 @@ "tw-to-css/tailwindcss/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], - "@astrojs/check/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "@astrojs/check/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@aws-sdk/client-cognito-identity/@aws-sdk/core/@aws-sdk/xml-builder/fast-xml-parser/strnum": ["strnum@2.3.0", "", {}, "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q=="], "@aws-sdk/client-sts/@aws-sdk/credential-provider-node/@aws-sdk/credential-provider-sso/@aws-sdk/token-providers/@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.782.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.775.0", "@aws-sdk/middleware-host-header": "3.775.0", "@aws-sdk/middleware-logger": "3.775.0", "@aws-sdk/middleware-recursion-detection": "3.775.0", "@aws-sdk/middleware-user-agent": "3.782.0", "@aws-sdk/region-config-resolver": "3.775.0", "@aws-sdk/types": "3.775.0", "@aws-sdk/util-endpoints": "3.782.0", "@aws-sdk/util-user-agent-browser": "3.775.0", "@aws-sdk/util-user-agent-node": "3.782.0", "@smithy/config-resolver": "^4.1.0", "@smithy/core": "^3.2.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", "@smithy/middleware-endpoint": "^4.1.0", "@smithy/middleware-retry": "^4.1.0", "@smithy/middleware-serde": "^4.0.3", "@smithy/middleware-stack": "^4.0.2", "@smithy/node-config-provider": "^4.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", "@smithy/smithy-client": "^4.2.0", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", "@smithy/util-defaults-mode-browser": "^4.0.8", "@smithy/util-defaults-mode-node": "^4.0.8", "@smithy/util-endpoints": "^3.0.2", "@smithy/util-middleware": "^4.0.2", "@smithy/util-retry": "^4.0.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" } }, "sha512-QOYC8q7luzHFXrP0xYAqBctoPkynjfV0r9dqntFu4/IWMTyC1vlo1UTxFAjIPyclYw92XJyEkVCVg9v/nQnsUA=="], diff --git a/docs/build-release.md b/docs/build-release.md index ab5270f0..cdfc02cb 100644 --- a/docs/build-release.md +++ b/docs/build-release.md @@ -1,47 +1,90 @@ -# 构建与发布 +# Devora 构建与发布 -本项目在内部 GitLab 开发,推送到 GitHub (`https://github.com/XiaomiMiMo/MiMo-Code`) 时代码经过裁剪,因此**构建和发布在本地完成**,不使用 GitHub Actions CI 构建。 +Devora 由 Sheri Akhtamov 在 GitHub 仓库 `https://github.com/SheriAkhtamov/Devora` 维护。 + +桌面版更新以 GitHub Release 为源。macOS desktop 包由 GitHub Actions 构建并发布,应用内 updater 会从 `SheriAkhtamov/Devora` 的 release assets 读取更新。CLI/npm 发布仍可按需在本地执行。 --- -## GitHub 保留内容 +## GitHub 自动化内容 ``` .github/ ├── actions/ -│ └── setup-bun/action.yml # bun 安装(typecheck 用) +│ └── setup-bun/action.yml # Bun 安装和依赖缓存 ├── workflows/ -│ └── typecheck.yml # PR 门控:类型检查 +│ ├── typecheck.yml # main / PR 类型检查 +│ └── desktop-macos-release.yml # macOS desktop 构建和发布 ├── ISSUE_TEMPLATE/ # Issue 模板 └── pull_request_template.md # PR 模板 ``` -已删除:publish/test workflow、setup-git-committer、github bot、CODEOWNERS、TEAM_MEMBERS 等。 +已删除或停用:不属于 Devora fork 的上游 bot、团队元数据和旧发布流程。 + +--- + +## GitHub desktop 发布流程 + +### 手动触发 macOS desktop 发布 + +1. 打开 GitHub Actions 中的 **desktop macOS release** workflow。 +2. 选择 **Run workflow**。 +3. 输入版本号,例如 `0.1.1`。 +4. workflow 会构建 `Devora.app`,生成 `.dmg`、`.zip` 和 `latest-mac.yml`,并发布到 `v` release。 + +也可以用 GitHub CLI: + +```bash +gh workflow run "desktop macOS release" --repo SheriAkhtamov/Devora -f version=0.1.1 +``` + +### 自动触发 + +推送形如 `v1.2.3` 的 tag 也会触发同一个 workflow: + +```bash +git tag v1.2.3 +git push origin v1.2.3 +``` + +### macOS 签名 + +如果仓库配置了以下 secrets,workflow 会启用 macOS 签名/公证相关环境变量: + +| Secret | 用途 | +|--------|------| +| `CSC_LINK` | Apple Developer 证书 | +| `CSC_KEY_PASSWORD` | 证书密码 | +| `APPLE_ID` | Apple ID | +| `APPLE_APP_SPECIFIC_PASSWORD` | App-specific password | +| `APPLE_TEAM_ID` | Apple Team ID | + +没有这些 secrets 时,workflow 仍会构建未签名包,适合个人测试。 --- -## 本地发布流程 +## 本地 CLI/npm 发布流程 ### 前置条件 | 环境变量 | 用途 | 获取方式 | |----------|------|----------| -| `NPM_TOKEN` | npm publish (`@mimo-ai` scope) | npmjs.com → Access Tokens → Granular Token | +| `NPM_TOKEN` | npm publish (`@devora-ai` scope) | npmjs.com → Access Tokens → Granular Token | | `GH_TOKEN` | GitHub Release 创建/上传 | `gh auth token` 或 GitHub PAT(repo scope) | -| `GH_REPO` | 目标 GitHub 仓库 | `XiaomiMiMo/MiMo-Code` | +| `GH_REPO` | 目标 GitHub 仓库 | `SheriAkhtamov/Devora` | 可选: | 环境变量 | 用途 | 默认行为 | |----------|------|----------| -| `OPENCODE_VERSION` | 覆盖版本号 | 读取 `packages/opencode/package.json` | -| `OPENCODE_BUMP` | 自动递增 (major/minor/patch) | 不 bump,原样使用 | -| `OPENCODE_RELEASE` | 创建 GitHub Release | 由 `script/version.ts` 自动设置 | -| `OPENCODE_CHANNEL` | 发布 channel (latest/beta/...) | 从 git branch 推断,detached HEAD 默认 latest | +| `DEVORA_VERSION` | 覆盖版本号 | 读取 `packages/devora/package.json` | +| `DEVORA_BUMP` | 自动递增 (major/minor/patch) | 不 bump,原样使用 | +| `DEVORA_RELEASE` | 创建 GitHub Release | 由 `script/version.ts` 自动设置 | +| `DEVORA_CHANNEL` | 发布 channel (latest/beta/...) | 从 git branch 推断,detached HEAD 默认 latest | -### 一键发布 +### 一键发布 CLI/npm ```bash -GH_REPO=XiaomiMiMo/MiMo-Code \ +GH_REPO=SheriAkhtamov/Devora \ NPM_TOKEN=npm_xxxxx \ GH_TOKEN=$(gh auth token) \ ./script/release.ts @@ -50,7 +93,7 @@ GH_TOKEN=$(gh auth token) \ 这会依次执行: 1. **version** — 计算版本号,创建 draft GitHub Release 2. **build** — 编译全平台 CLI 二进制,上传到 draft Release -3. **publish npm** — 发布 `@mimo-ai/cli` + 平台包 + SDK + plugin 到 npm +3. **publish npm** — 发布 `@devora-ai/cli` + 平台包 + SDK + plugin 到 npm 4. **finalize release** — 将 GitHub Release 从 draft 改为 published ### 分步执行 @@ -59,16 +102,16 @@ GH_TOKEN=$(gh auth token) \ ```bash # 仅构建(不发布) -OPENCODE_VERSION=1.2.3 ./packages/opencode/script/build.ts +DEVORA_VERSION=1.2.3 ./packages/devora/script/build.ts # 仅 npm publish(需要先构建) -NPM_TOKEN=npm_xxxxx OPENCODE_VERSION=1.2.3 ./script/publish.ts +NPM_TOKEN=npm_xxxxx DEVORA_VERSION=1.2.3 ./script/publish.ts # 仅创建 GitHub Release(不含 npm) -GH_TOKEN=$(gh auth token) GH_REPO=XiaomiMiMo/MiMo-Code ./script/version.ts +GH_TOKEN=$(gh auth token) GH_REPO=SheriAkhtamov/Devora ./script/version.ts # 然后手动上传二进制: -gh release upload v1.2.3 packages/opencode/dist/*.zip packages/opencode/dist/*.tar.gz --repo XiaomiMiMo/MiMo-Code -gh release edit v1.2.3 --draft=false --repo XiaomiMiMo/MiMo-Code +gh release upload v1.2.3 packages/devora/dist/*.zip packages/devora/dist/*.tar.gz --repo SheriAkhtamov/Devora +gh release edit v1.2.3 --draft=false --repo SheriAkhtamov/Devora ``` --- @@ -79,18 +122,18 @@ gh release edit v1.2.3 --draft=false --repo XiaomiMiMo/MiMo-Code | 优先级 | 条件 | 结果 | |--------|------|------| -| 1 | `OPENCODE_VERSION` 有值 | 直接使用 | +| 1 | `DEVORA_VERSION` 有值 | 直接使用 | | 2 | preview channel(非 latest) | `0.0.0-{channel}-{timestamp}` | -| 3 | `OPENCODE_BUMP` 有值 | 从 package.json 读取并 bump | +| 3 | `DEVORA_BUMP` 有值 | 从 package.json 读取并 bump | | 4 | 无 bump | 原样使用 package.json 版本 | --- ## 首次发布 -1. 确认 npmjs.org 上 `@mimo-ai` org 存在 -2. 创建 Granular Access Token(Packages: Read and write, scope: `@mimo-ai`) -3. 确认 `gh auth status` 有 `XiaomiMiMo/MiMo-Code` 的 repo 权限 +1. 确认 npmjs.org 上 `@devora-ai` org 存在 +2. 创建 Granular Access Token(Packages: Read and write, scope: `@devora-ai`) +3. 确认 `gh auth status` 有 `SheriAkhtamov/Devora` 的 repo 权限 4. 设定 package.json 版本为 `0.1.0` 5. 运行 `./script/release.ts` @@ -100,10 +143,10 @@ gh release edit v1.2.3 --draft=false --repo XiaomiMiMo/MiMo-Code | 包名 | 内容 | |------|------| -| `@mimo-ai/cli` | Wrapper 包(bin shim + postinstall) | -| `mimocode-darwin-arm64` | macOS ARM 二进制 | -| `mimocode-darwin-x64` | macOS x64 二进制 | -| `mimocode-linux-arm64` | Linux ARM 二进制 | -| `mimocode-linux-x64` | Linux x64 二进制 | -| `mimocode-win32-arm64` | Windows ARM 二进制 | -| `mimocode-win32-x64` | Windows x64 二进制 | +| `@devora-ai/cli` | Wrapper 包(bin shim + postinstall) | +| `devora-darwin-arm64` | macOS ARM 二进制 | +| `devora-darwin-x64` | macOS x64 二进制 | +| `devora-linux-arm64` | Linux ARM 二进制 | +| `devora-linux-x64` | Linux x64 二进制 | +| `devora-win32-arm64` | Windows ARM 二进制 | +| `devora-win32-x64` | Windows x64 二进制 | diff --git a/flake.nix b/flake.nix index 40e9d337..ab76d377 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "OpenCode development flake"; + description = "Devora development flake"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; @@ -37,16 +37,16 @@ node_modules = final.callPackage ./nix/node_modules.nix { inherit rev; }; - opencode = final.callPackage ./nix/opencode.nix { + devora = final.callPackage ./nix/devora.nix { inherit node_modules; }; desktop = final.callPackage ./nix/desktop.nix { - inherit opencode; + inherit devora; }; in { - inherit opencode; - opencode-desktop = desktop; + inherit devora; + devora-desktop = desktop; }; }; @@ -56,16 +56,16 @@ node_modules = pkgs.callPackage ./nix/node_modules.nix { inherit rev; }; - opencode = pkgs.callPackage ./nix/opencode.nix { + devora = pkgs.callPackage ./nix/devora.nix { inherit node_modules; }; desktop = pkgs.callPackage ./nix/desktop.nix { - inherit opencode; + inherit devora; }; in { - default = opencode; - inherit opencode desktop; + default = devora; + inherit devora desktop; # Updater derivation with fakeHash - build fails and reveals correct hash node_modules_updater = node_modules.override { hash = pkgs.lib.fakeHash; diff --git a/infra/console.ts b/infra/console.ts index f1f5692b..d2acfc11 100644 --- a/infra/console.ts +++ b/infra/console.ts @@ -6,8 +6,8 @@ import { EMAILOCTOPUS_API_KEY } from "./app" //////////////// const cluster = planetscale.getDatabaseOutput({ - name: "opencode", - organization: "anomalyco", + name: "devora", + organization: "sheriakhtamov", }) const branch = @@ -101,7 +101,7 @@ export const stripeWebhook = new stripe.WebhookEndpoint("StripeWebhookEndpoint", }) const zenLiteProduct = new stripe.Product("ZenLite", { - name: "OpenCode Go", + name: "Devora Go", }) const zenLiteCouponFirstMonth50 = new stripe.Coupon("ZenLiteCouponFirstMonth50", { name: "First month 50% off", @@ -135,7 +135,7 @@ const ZEN_LITE_PRICE = new sst.Linkable("ZEN_LITE_PRICE", { }) const zenBlackProduct = new stripe.Product("ZenBlack", { - name: "OpenCode Black", + name: "Devora Black", }) const zenBlackPriceProps = { product: zenBlackProduct.id, diff --git a/infra/enterprise.ts b/infra/enterprise.ts index dc336a68..3576626c 100644 --- a/infra/enterprise.ts +++ b/infra/enterprise.ts @@ -8,10 +8,10 @@ new sst.cloudflare.x.SolidStart("Teams", { path: "packages/enterprise", buildCommand: "bun run build:cloudflare", environment: { - OPENCODE_STORAGE_ADAPTER: "r2", - OPENCODE_STORAGE_ACCOUNT_ID: sst.cloudflare.DEFAULT_ACCOUNT_ID, - OPENCODE_STORAGE_ACCESS_KEY_ID: SECRET.R2AccessKey.value, - OPENCODE_STORAGE_SECRET_ACCESS_KEY: SECRET.R2SecretKey.value, - OPENCODE_STORAGE_BUCKET: storage.name, + DEVORA_STORAGE_ADAPTER: "r2", + DEVORA_STORAGE_ACCOUNT_ID: sst.cloudflare.DEFAULT_ACCOUNT_ID, + DEVORA_STORAGE_ACCESS_KEY_ID: SECRET.R2AccessKey.value, + DEVORA_STORAGE_SECRET_ACCESS_KEY: SECRET.R2SecretKey.value, + DEVORA_STORAGE_BUCKET: storage.name, }, }) diff --git a/infra/stage.ts b/infra/stage.ts index f9a6fd75..fb1a0017 100644 --- a/infra/stage.ts +++ b/infra/stage.ts @@ -1,7 +1,7 @@ export const domain = (() => { - if ($app.stage === "production") return "opencode.ai" - if ($app.stage === "dev") return "dev.opencode.ai" - return `${$app.stage}.dev.opencode.ai` + if ($app.stage === "production") return "devora.ai" + if ($app.stage === "dev") return "dev.devora.ai" + return `${$app.stage}.dev.devora.ai` })() export const zoneID = "430ba34c138cfb5360826c4909f99be8" diff --git a/install b/install index 916820ce..775ee2f1 100755 --- a/install +++ b/install @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -euo pipefail -APP=mimocode +APP=devora MUTED='\033[0;2m' RED='\033[0;31m' @@ -9,7 +9,7 @@ NC='\033[0m' # No Color usage() { cat </dev/null 2>&1; then - mimo_path=$(which mimo) + if command -v devora >/dev/null 2>&1; then + devora_path=$(which devora) ## Check the installed version - installed_version=$(mimo --version 2>/dev/null || echo "") + installed_version=$(devora --version 2>/dev/null || echo "") if [[ "$installed_version" != "$specific_version" ]]; then print_message info "${MUTED}Installed version: ${NC}$installed_version." @@ -275,7 +275,7 @@ download_with_progress() { fi local tmp_dir=${TMPDIR:-/tmp} - local basename="${tmp_dir}/mimocode_install_$$" + local basename="${tmp_dir}/devora_install_$$" local tracefile="${basename}.trace" rm -f "$tracefile" @@ -325,8 +325,8 @@ download_with_progress() { } download_and_install() { - print_message info "\n${MUTED}Installing ${NC}mimocode ${MUTED}version: ${NC}$specific_version" - local tmp_dir="${TMPDIR:-/tmp}/mimocode_install_$$" + print_message info "\n${MUTED}Installing ${NC}devora ${MUTED}version: ${NC}$specific_version" + local tmp_dir="${TMPDIR:-/tmp}/devora_install_$$" mkdir -p "$tmp_dir" if [[ "$os" == "windows" ]] || ! [ -t 2 ] || ! download_with_progress "$url" "$tmp_dir/$filename"; then @@ -340,15 +340,15 @@ download_and_install() { unzip -q "$tmp_dir/$filename" -d "$tmp_dir" fi - mv "$tmp_dir/mimo" "$INSTALL_DIR" - chmod 755 "${INSTALL_DIR}/mimo" + mv "$tmp_dir/devora" "$INSTALL_DIR" + chmod 755 "${INSTALL_DIR}/devora" rm -rf "$tmp_dir" } install_from_binary() { - print_message info "\n${MUTED}Installing ${NC}mimocode ${MUTED}from: ${NC}$binary_path" - cp "$binary_path" "${INSTALL_DIR}/mimo" - chmod 755 "${INSTALL_DIR}/mimo" + print_message info "\n${MUTED}Installing ${NC}devora ${MUTED}from: ${NC}$binary_path" + cp "$binary_path" "${INSTALL_DIR}/devora" + chmod 755 "${INSTALL_DIR}/devora" } if [ -n "$binary_path" ]; then @@ -366,9 +366,9 @@ add_to_path() { if grep -Fxq "$command" "$config_file"; then print_message info "Command already exists in $config_file, skipping write." elif [[ -w $config_file ]]; then - echo -e "\n# mimocode" >> "$config_file" + echo -e "\n# devora" >> "$config_file" echo "$command" >> "$config_file" - print_message info "${MUTED}Successfully added ${NC}mimocode ${MUTED}to \$PATH in ${NC}$config_file" + print_message info "${MUTED}Successfully added ${NC}devora ${MUTED}to \$PATH in ${NC}$config_file" else print_message warning "Manually add the directory to $config_file (or similar):" print_message info " $command" @@ -453,8 +453,8 @@ echo -e "" echo -e "${MUTED}To start:${NC}" echo -e "" echo -e "cd ${MUTED}# Open directory${NC}" -echo -e "mimo ${MUTED}# Run command${NC}" +echo -e "devora ${MUTED}# Run command${NC}" echo -e "" -echo -e "${MUTED}For more information visit ${NC}https://mimo.xiaomi.com/coder/docs" +echo -e "${MUTED}For more information visit ${NC}https://github.com/SheriAkhtamov/Devora" echo -e "" echo -e "" diff --git a/nix/desktop.nix b/nix/desktop.nix index d0d7fa7e..870b5cb2 100644 --- a/nix/desktop.nix +++ b/nix/desktop.nix @@ -8,14 +8,14 @@ makeWrapper, writableTmpDirAsHomeHook, autoPatchelfHook, - opencode, + devora, }: let electron = electron_41; in stdenv.mkDerivation (finalAttrs: { - pname = "opencode-desktop"; - inherit (opencode) + pname = "devora-desktop"; + inherit (devora) version src node_modules @@ -38,7 +38,7 @@ stdenv.mkDerivation (finalAttrs: { (lib.getLib stdenv.cc.cc) ]; - env = opencode.env // { + env = devora.env // { ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; }; @@ -49,7 +49,7 @@ stdenv.mkDerivation (finalAttrs: { FILES=(src/main/windows.ts) for file in "''${FILES[@]}"; do substituteInPlace $BASE_PATH/$file \ - --replace-fail "process.resourcesPath" "'$out/opt/opencode-desktop/resources'" + --replace-fail "process.resourcesPath" "'$out/opt/devora-desktop/resources'" done ''; @@ -83,15 +83,15 @@ stdenv.mkDerivation (finalAttrs: { + lib.optionalString stdenv.hostPlatform.isDarwin '' mkdir -p $out/Applications mv dist/mac*/*.app $out/Applications - makeWrapper "$out/Applications/OpenCode.app/Contents/MacOS/OpenCode" $out/bin/opencode-desktop + makeWrapper "$out/Applications/Devora.app/Contents/MacOS/Devora" $out/bin/devora-desktop '' + lib.optionalString stdenv.hostPlatform.isLinux '' - mkdir -p $out/opt/opencode-desktop - cp -r dist/linux*-unpacked/{resources,LICENSE*} $out/opt/opencode-desktop - makeWrapper ${lib.getExe electron} $out/bin/opencode-desktop \ + mkdir -p $out/opt/devora-desktop + cp -r dist/linux*-unpacked/{resources,LICENSE*} $out/opt/devora-desktop + makeWrapper ${lib.getExe electron} $out/bin/devora-desktop \ --inherit-argv0 \ --set ELECTRON_FORCE_IS_PACKAGED 1 \ - --add-flags $out/opt/opencode-desktop/resources/app.asar \ + --add-flags $out/opt/devora-desktop/resources/app.asar \ --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" '' + '' @@ -103,8 +103,8 @@ stdenv.mkDerivation (finalAttrs: { ]; meta = { - description = "OpenCode Desktop App"; - mainProgram = "opencode-desktop"; - inherit (opencode.meta) homepage license platforms; + description = "Devora Desktop App"; + mainProgram = "devora-desktop"; + inherit (devora.meta) homepage license platforms; }; }) diff --git a/nix/opencode.nix b/nix/devora.nix similarity index 71% rename from nix/opencode.nix rename to nix/devora.nix index b629d0b5..c1cd04b7 100644 --- a/nix/opencode.nix +++ b/nix/devora.nix @@ -14,7 +14,7 @@ node_modules ? callPackage ./node-modules.nix { }, }: stdenvNoCC.mkDerivation (finalAttrs: { - pname = "opencode"; + pname = "devora"; inherit (node_modules) version src; inherit node_modules; @@ -38,14 +38,14 @@ stdenvNoCC.mkDerivation (finalAttrs: { ''; env.MODELS_DEV_API_JSON = "${models-dev}/dist/_api.json"; - env.OPENCODE_DISABLE_MODELS_FETCH = true; - env.OPENCODE_VERSION = finalAttrs.version; - env.OPENCODE_CHANNEL = "local"; + env.DEVORA_DISABLE_MODELS_FETCH = true; + env.DEVORA_VERSION = finalAttrs.version; + env.DEVORA_CHANNEL = "local"; buildPhase = '' runHook preBuild - cd ./packages/opencode + cd ./packages/devora bun --bun ./script/build.ts --single --skip-install bun --bun ./script/schema.ts schema.json @@ -55,10 +55,10 @@ stdenvNoCC.mkDerivation (finalAttrs: { installPhase = '' runHook preInstall - install -Dm755 dist/opencode-*/bin/opencode $out/bin/opencode - install -Dm644 schema.json $out/share/opencode/schema.json + install -Dm755 dist/devora-*/bin/devora $out/bin/devora + install -Dm644 schema.json $out/share/devora/schema.json - wrapProgram $out/bin/opencode \ + wrapProgram $out/bin/devora \ --prefix PATH : ${ lib.makeBinPath ( [ @@ -74,9 +74,9 @@ stdenvNoCC.mkDerivation (finalAttrs: { postInstall = lib.optionalString (stdenvNoCC.buildPlatform.canExecute stdenvNoCC.hostPlatform) '' # trick yargs into also generating zsh completions - installShellCompletion --cmd opencode \ - --bash <($out/bin/opencode completion) \ - --zsh <(SHELL=/bin/zsh $out/bin/opencode completion) + installShellCompletion --cmd devora \ + --bash <($out/bin/devora completion) \ + --zsh <(SHELL=/bin/zsh $out/bin/devora completion) ''; nativeInstallCheckInputs = [ @@ -84,18 +84,18 @@ stdenvNoCC.mkDerivation (finalAttrs: { writableTmpDirAsHomeHook ]; doInstallCheck = true; - versionCheckKeepEnvironment = [ "HOME" "OPENCODE_DISABLE_MODELS_FETCH" ]; + versionCheckKeepEnvironment = [ "HOME" "DEVORA_DISABLE_MODELS_FETCH" ]; versionCheckProgramArg = "--version"; passthru = { - jsonschema = "${placeholder "out"}/share/opencode/schema.json"; + jsonschema = "${placeholder "out"}/share/devora/schema.json"; }; meta = { description = "The open source coding agent"; - homepage = "https://opencode.ai/"; + homepage = "https://devora.ai/"; license = lib.licenses.mit; - mainProgram = "opencode"; + mainProgram = "devora"; inherit (node_modules.meta) platforms; }; }) diff --git a/nix/node_modules.nix b/nix/node_modules.nix index e2bc36b6..6c0c3955 100644 --- a/nix/node_modules.nix +++ b/nix/node_modules.nix @@ -10,7 +10,7 @@ ]).nodeModules.${stdenvNoCC.hostPlatform.system}, }: let - packageJson = lib.pipe ../packages/opencode/package.json [ + packageJson = lib.pipe ../packages/devora/package.json [ builtins.readFile builtins.fromJSON ]; @@ -19,7 +19,7 @@ let bunOs = if platform.isLinux then "linux" else "darwin"; in stdenvNoCC.mkDerivation { - pname = "opencode-node_modules"; + pname = "devora-node_modules"; version = "${packageJson.version}+${lib.replaceString "-" "." rev}"; src = lib.fileset.toSource { @@ -31,7 +31,7 @@ stdenvNoCC.mkDerivation { ../package.json ../patches ../install # required by desktop build (cli.rs include_str!) - ../.github/TEAM_MEMBERS # required by @mimo-ai/script + ../.github/TEAM_MEMBERS # required by @devora-ai/script ] ); }; @@ -52,7 +52,7 @@ stdenvNoCC.mkDerivation { --cpu="${bunCpu}" \ --os="${bunOs}" \ --filter '!./' \ - --filter './packages/opencode' \ + --filter './packages/devora' \ --filter './packages/desktop' \ --filter './packages/app' \ --filter './packages/shared' \ diff --git a/package.json b/package.json index 57f5ea7f..883343c8 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,19 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "mimocode", - "description": "AI-powered development tool", + "name": "devora", + "description": "Devora, Sheri Akhtamov's AI coding agent", "private": true, "type": "module", "packageManager": "bun@1.3.11", "scripts": { - "dev": "MIMOCODE_HOME=$PWD/.dev-home bun run --cwd packages/opencode --conditions=browser src/index.ts", + "dev": "DEVORA_HOME=$PWD/.dev-home bun run --cwd packages/devora --conditions=browser src/index.ts", "dev:desktop": "bun --cwd packages/desktop dev", "dev:web": "bun --cwd packages/app dev", "dev:console": "ulimit -n 10240 2>/dev/null; bun run --cwd packages/console/app dev", "dev:storybook": "bun --cwd packages/storybook storybook", "lint": "oxlint", "typecheck": "bun turbo typecheck", - "postinstall": "bun run --cwd packages/opencode fix-node-pty", + "postinstall": "bun run --cwd packages/devora fix-node-pty", "prepare": "husky", "random": "echo 'Random script'", "hello": "echo 'Hello World!'", @@ -97,15 +97,15 @@ }, "dependencies": { "@aws-sdk/client-s3": "3.933.0", - "@mimo-ai/plugin": "workspace:*", - "@mimo-ai/script": "workspace:*", - "@mimo-ai/sdk": "workspace:*", + "@devora-ai/plugin": "workspace:*", + "@devora-ai/script": "workspace:*", + "@devora-ai/sdk": "workspace:*", "heap-snapshot-toolkit": "1.1.3", "typescript": "catalog:" }, "repository": { "type": "git", - "url": "https://github.com/XiaomiMiMo/MiMo-Code" + "url": "https://github.com/SheriAkhtamov/Devora" }, "license": "MIT", "prettier": { diff --git a/packages/app/AGENTS.md b/packages/app/AGENTS.md index 765e960c..8d0b6547 100644 --- a/packages/app/AGENTS.md +++ b/packages/app/AGENTS.md @@ -4,9 +4,9 @@ ## Local Dev -- `opencode dev web` proxies `https://app.opencode.ai`, so local UI/CSS changes will not show there. +- `devora dev web` proxies `https://app.devora.ai`, so local UI/CSS changes will not show there. - For local UI changes, run the backend and app dev servers separately. -- Backend (from `packages/opencode`): `bun run --conditions=browser ./src/index.ts serve --port 4096` +- Backend (from `packages/devora`): `bun run --conditions=browser ./src/index.ts serve --port 4096` - App (from `packages/app`): `bun dev -- --port 4444` - Open `http://localhost:4444` to verify UI changes (it targets the backend at `http://localhost:4096`). diff --git a/packages/app/README.md b/packages/app/README.md index 304e272c..831f93fa 100644 --- a/packages/app/README.md +++ b/packages/app/README.md @@ -31,7 +31,7 @@ Your app is ready to be deployed! ## E2E Testing -Playwright starts the Vite dev server automatically via `webServer`, and UI tests expect an opencode backend at `localhost:4096` by default. +Playwright starts the Vite dev server automatically via `webServer`, and UI tests expect an devora backend at `localhost:4096` by default. ```bash bunx playwright install chromium diff --git a/packages/app/index.html b/packages/app/index.html index 8fad7efb..d1b1150e 100644 --- a/packages/app/index.html +++ b/packages/app/index.html @@ -3,7 +3,7 @@ - OpenCode + Devora diff --git a/packages/app/package.json b/packages/app/package.json index 6e68dedf..149f7966 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,5 +1,5 @@ { - "name": "@mimo-ai/app", + "name": "@devora-ai/app", "version": "0.1.0", "description": "", "type": "module", @@ -40,9 +40,9 @@ }, "dependencies": { "@kobalte/core": "catalog:", - "@mimo-ai/sdk": "workspace:*", - "@mimo-ai/ui": "workspace:*", - "@mimo-ai/shared": "workspace:*", + "@devora-ai/sdk": "workspace:*", + "@devora-ai/ui": "workspace:*", + "@devora-ai/shared": "workspace:*", "@shikijs/transformers": "3.9.2", "@solid-primitives/active-element": "2.1.3", "@solid-primitives/audio": "1.4.2", diff --git a/packages/app/playwright.config.ts b/packages/app/playwright.config.ts index e9fb1cfe..c8fab8fb 100644 --- a/packages/app/playwright.config.ts +++ b/packages/app/playwright.config.ts @@ -31,8 +31,8 @@ export default defineConfig({ reuseExistingServer: reuse, timeout: 120_000, env: { - VITE_OPENCODE_SERVER_HOST: serverHost, - VITE_OPENCODE_SERVER_PORT: serverPort, + VITE_DEVORA_SERVER_HOST: serverHost, + VITE_DEVORA_SERVER_PORT: serverPort, }, }, use: { diff --git a/packages/app/public/oc-theme-preload.js b/packages/app/public/oc-theme-preload.js index 36fa5d72..ca4342aa 100644 --- a/packages/app/public/oc-theme-preload.js +++ b/packages/app/public/oc-theme-preload.js @@ -1,15 +1,15 @@ ;(function () { - var key = "opencode-theme-id" + var key = "devora-theme-id" var themeId = localStorage.getItem(key) || "oc-2" if (themeId === "oc-1") { themeId = "oc-2" localStorage.setItem(key, themeId) - localStorage.removeItem("opencode-theme-css-light") - localStorage.removeItem("opencode-theme-css-dark") + localStorage.removeItem("devora-theme-css-light") + localStorage.removeItem("devora-theme-css-dark") } - var scheme = localStorage.getItem("opencode-color-scheme") || "system" + var scheme = localStorage.getItem("devora-color-scheme") || "system" var isDark = scheme === "dark" || (scheme === "system" && matchMedia("(prefers-color-scheme: dark)").matches) var mode = isDark ? "dark" : "light" @@ -18,7 +18,7 @@ if (themeId === "oc-2") return - var css = localStorage.getItem("opencode-theme-css-" + mode) + var css = localStorage.getItem("devora-theme-css-" + mode) if (css) { var style = document.createElement("style") style.id = "oc-theme-preload" diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index f53cd7c6..68f19603 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -1,12 +1,12 @@ import "@/index.css" -import { I18nProvider } from "@mimo-ai/ui/context" -import { DialogProvider } from "@mimo-ai/ui/context/dialog" -import { FileComponentProvider } from "@mimo-ai/ui/context/file" -import { MarkedProvider } from "@mimo-ai/ui/context/marked" -import { File } from "@mimo-ai/ui/file" -import { Font } from "@mimo-ai/ui/font" -import { Splash } from "@mimo-ai/ui/logo" -import { ThemeProvider } from "@mimo-ai/ui/theme/context" +import { I18nProvider } from "@devora-ai/ui/context" +import { DialogProvider } from "@devora-ai/ui/context/dialog" +import { FileComponentProvider } from "@devora-ai/ui/context/file" +import { MarkedProvider } from "@devora-ai/ui/context/marked" +import { File } from "@devora-ai/ui/file" +import { Font } from "@devora-ai/ui/font" +import { Splash } from "@devora-ai/ui/logo" +import { ThemeProvider } from "@devora-ai/ui/theme/context" import { MetaProvider } from "@solidjs/meta" import { type BaseRouterProps, Navigate, Route, Router } from "@solidjs/router" import { QueryClient, QueryClientProvider } from "@tanstack/solid-query" @@ -70,7 +70,7 @@ function UiI18nBridge(props: ParentProps) { declare global { interface Window { - __OPENCODE__?: { + __DEVORA__?: { updaterEnabled?: boolean deepLinks?: string[] wsl?: boolean diff --git a/packages/app/src/components/debug-bar.tsx b/packages/app/src/components/debug-bar.tsx index f1ad3b53..3ee30cda 100644 --- a/packages/app/src/components/debug-bar.tsx +++ b/packages/app/src/components/debug-bar.tsx @@ -2,7 +2,7 @@ import { useIsRouting, useLocation } from "@solidjs/router" import { batch, createEffect, onCleanup, onMount } from "solid-js" import { createStore } from "solid-js/store" import { makeEventListener } from "@solid-primitives/event-listener" -import { Tooltip } from "@mimo-ai/ui/tooltip" +import { Tooltip } from "@devora-ai/ui/tooltip" import { useLanguage } from "@/context/language" type Mem = Performance & { diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index 74ddeb32..6cd0baaf 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -1,14 +1,14 @@ -import type { ProviderAuthAuthorization, ProviderAuthMethod } from "@mimo-ai/sdk/v2/client" -import { Button } from "@mimo-ai/ui/button" -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { Dialog } from "@mimo-ai/ui/dialog" -import { Icon } from "@mimo-ai/ui/icon" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { List, type ListRef } from "@mimo-ai/ui/list" -import { ProviderIcon } from "@mimo-ai/ui/provider-icon" -import { Spinner } from "@mimo-ai/ui/spinner" -import { TextField } from "@mimo-ai/ui/text-field" -import { showToast } from "@mimo-ai/ui/toast" +import type { ProviderAuthAuthorization, ProviderAuthMethod } from "@devora-ai/sdk/v2/client" +import { Button } from "@devora-ai/ui/button" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { Icon } from "@devora-ai/ui/icon" +import { IconButton } from "@devora-ai/ui/icon-button" +import { List, type ListRef } from "@devora-ai/ui/list" +import { ProviderIcon } from "@devora-ai/ui/provider-icon" +import { Spinner } from "@devora-ai/ui/spinner" +import { TextField } from "@devora-ai/ui/text-field" +import { showToast } from "@devora-ai/ui/toast" import { createEffect, createMemo, createResource, Match, onCleanup, onMount, Switch } from "solid-js" import { createStore, produce } from "solid-js/store" import { Link } from "@/components/link" @@ -422,16 +422,16 @@ export function DialogConnectProvider(props: { provider: string }) { return (

- +
-
{language.t("provider.connect.opencodeZen.line1")}
-
{language.t("provider.connect.opencodeZen.line2")}
+
{language.t("provider.connect.devoraZen.line1")}
+
{language.t("provider.connect.devoraZen.line2")}
- {language.t("provider.connect.opencodeZen.visit.prefix")} - - {language.t("provider.connect.opencodeZen.visit.link")} + {language.t("provider.connect.devoraZen.visit.prefix")} + + {language.t("provider.connect.devoraZen.visit.link")} - {language.t("provider.connect.opencodeZen.visit.suffix")} + {language.t("provider.connect.devoraZen.visit.suffix")}
diff --git a/packages/app/src/components/dialog-custom-provider.tsx b/packages/app/src/components/dialog-custom-provider.tsx index daa265ef..bc4002e4 100644 --- a/packages/app/src/components/dialog-custom-provider.tsx +++ b/packages/app/src/components/dialog-custom-provider.tsx @@ -1,11 +1,11 @@ -import { Button } from "@mimo-ai/ui/button" -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { Dialog } from "@mimo-ai/ui/dialog" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { ProviderIcon } from "@mimo-ai/ui/provider-icon" +import { Button } from "@devora-ai/ui/button" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { IconButton } from "@devora-ai/ui/icon-button" +import { ProviderIcon } from "@devora-ai/ui/provider-icon" import { useMutation } from "@tanstack/solid-query" -import { TextField } from "@mimo-ai/ui/text-field" -import { showToast } from "@mimo-ai/ui/toast" +import { TextField } from "@devora-ai/ui/text-field" +import { showToast } from "@devora-ai/ui/toast" import { batch, For } from "solid-js" import { createStore, produce } from "solid-js/store" import { Link } from "@/components/link" @@ -183,7 +183,7 @@ export function DialogCustomProvider(props: Props) {

{language.t("provider.custom.description.prefix")} - + {language.t("provider.custom.description.link")} {language.t("provider.custom.description.suffix")} diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index 9c548767..58e6340e 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -1,16 +1,16 @@ -import { Button } from "@mimo-ai/ui/button" -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { Dialog } from "@mimo-ai/ui/dialog" -import { TextField } from "@mimo-ai/ui/text-field" +import { Button } from "@devora-ai/ui/button" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { TextField } from "@devora-ai/ui/text-field" import { useMutation } from "@tanstack/solid-query" -import { Icon } from "@mimo-ai/ui/icon" +import { Icon } from "@devora-ai/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 "@mimo-ai/shared/util/path" -import { Avatar } from "@mimo-ai/ui/avatar" +import { getFilename } from "@devora-ai/shared/util/path" +import { Avatar } from "@devora-ai/ui/avatar" import { useLanguage } from "@/context/language" const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const diff --git a/packages/app/src/components/dialog-fork.tsx b/packages/app/src/components/dialog-fork.tsx index 1af702fa..f2a1573b 100644 --- a/packages/app/src/components/dialog-fork.tsx +++ b/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 "@mimo-ai/ui/context/dialog" -import { Dialog } from "@mimo-ai/ui/dialog" -import { List } from "@mimo-ai/ui/list" -import { showToast } from "@mimo-ai/ui/toast" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { List } from "@devora-ai/ui/list" +import { showToast } from "@devora-ai/ui/toast" import { extractPromptFromParts } from "@/utils/prompt" -import type { TextPart as SDKTextPart } from "@mimo-ai/sdk/v2/client" -import { base64Encode } from "@mimo-ai/shared/util/encode" +import type { TextPart as SDKTextPart } from "@devora-ai/sdk/v2/client" +import { base64Encode } from "@devora-ai/shared/util/encode" import { useLanguage } from "@/context/language" interface ForkableMessage { diff --git a/packages/app/src/components/dialog-manage-models.tsx b/packages/app/src/components/dialog-manage-models.tsx index 7cd2bde4..a24f9b78 100644 --- a/packages/app/src/components/dialog-manage-models.tsx +++ b/packages/app/src/components/dialog-manage-models.tsx @@ -1,13 +1,13 @@ -import { Dialog } from "@mimo-ai/ui/dialog" -import { List } from "@mimo-ai/ui/list" -import { Switch } from "@mimo-ai/ui/switch" -import { Tooltip } from "@mimo-ai/ui/tooltip" -import { Button } from "@mimo-ai/ui/button" +import { Dialog } from "@devora-ai/ui/dialog" +import { List } from "@devora-ai/ui/list" +import { Switch } from "@devora-ai/ui/switch" +import { Tooltip } from "@devora-ai/ui/tooltip" +import { Button } from "@devora-ai/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 "@mimo-ai/ui/context/dialog" +import { useDialog } from "@devora-ai/ui/context/dialog" import { DialogSelectProvider } from "./dialog-select-provider" export const DialogManageModels: Component = () => { diff --git a/packages/app/src/components/dialog-release-notes.tsx b/packages/app/src/components/dialog-release-notes.tsx index 57908355..3e6df619 100644 --- a/packages/app/src/components/dialog-release-notes.tsx +++ b/packages/app/src/components/dialog-release-notes.tsx @@ -1,7 +1,7 @@ import { createSignal } from "solid-js" -import { Dialog } from "@mimo-ai/ui/dialog" -import { Button } from "@mimo-ai/ui/button" -import { useDialog } from "@mimo-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { Button } from "@devora-ai/ui/button" +import { useDialog } from "@devora-ai/ui/context/dialog" import { useLanguage } from "@/context/language" import { useSettings } from "@/context/settings" diff --git a/packages/app/src/components/dialog-select-directory.tsx b/packages/app/src/components/dialog-select-directory.tsx index c9df27b8..94ec725f 100644 --- a/packages/app/src/components/dialog-select-directory.tsx +++ b/packages/app/src/components/dialog-select-directory.tsx @@ -1,9 +1,9 @@ -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { Dialog } from "@mimo-ai/ui/dialog" -import { FileIcon } from "@mimo-ai/ui/file-icon" -import { List } from "@mimo-ai/ui/list" -import type { ListRef } from "@mimo-ai/ui/list" -import { getDirectory, getFilename } from "@mimo-ai/shared/util/path" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { FileIcon } from "@devora-ai/ui/file-icon" +import { List } from "@devora-ai/ui/list" +import type { ListRef } from "@devora-ai/ui/list" +import { getDirectory, getFilename } from "@devora-ai/shared/util/path" import fuzzysort from "fuzzysort" import { createMemo, createResource, createSignal } from "solid-js" import { useGlobalSDK } from "@/context/global-sdk" diff --git a/packages/app/src/components/dialog-select-file.tsx b/packages/app/src/components/dialog-select-file.tsx index 69f13aab..27d56075 100644 --- a/packages/app/src/components/dialog-select-file.tsx +++ b/packages/app/src/components/dialog-select-file.tsx @@ -1,11 +1,11 @@ -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { Dialog } from "@mimo-ai/ui/dialog" -import { FileIcon } from "@mimo-ai/ui/file-icon" -import { Icon } from "@mimo-ai/ui/icon" -import { Keybind } from "@mimo-ai/ui/keybind" -import { List } from "@mimo-ai/ui/list" -import { base64Encode } from "@mimo-ai/shared/util/encode" -import { getDirectory, getFilename } from "@mimo-ai/shared/util/path" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { FileIcon } from "@devora-ai/ui/file-icon" +import { Icon } from "@devora-ai/ui/icon" +import { Keybind } from "@devora-ai/ui/keybind" +import { List } from "@devora-ai/ui/list" +import { base64Encode } from "@devora-ai/shared/util/encode" +import { getDirectory, getFilename } from "@devora-ai/shared/util/path" import { useNavigate } from "@solidjs/router" import { createMemo, createSignal, Match, onCleanup, Show, Switch } from "solid-js" import { formatKeybind, useCommand, type CommandOption } from "@/context/command" diff --git a/packages/app/src/components/dialog-select-mcp.tsx b/packages/app/src/components/dialog-select-mcp.tsx index 83baaceb..0542f459 100644 --- a/packages/app/src/components/dialog-select-mcp.tsx +++ b/packages/app/src/components/dialog-select-mcp.tsx @@ -3,10 +3,10 @@ import { Component, createEffect, createMemo, on, Show } from "solid-js" import { createStore } from "solid-js/store" import { useSync } from "@/context/sync" import { useSDK } from "@/context/sdk" -import { Dialog } from "@mimo-ai/ui/dialog" -import { List } from "@mimo-ai/ui/list" -import { Switch } from "@mimo-ai/ui/switch" -import { showToast } from "@mimo-ai/ui/toast" +import { Dialog } from "@devora-ai/ui/dialog" +import { List } from "@devora-ai/ui/list" +import { Switch } from "@devora-ai/ui/switch" +import { showToast } from "@devora-ai/ui/toast" import { useLanguage } from "@/context/language" const statusLabels = { diff --git a/packages/app/src/components/dialog-select-model-unpaid.tsx b/packages/app/src/components/dialog-select-model-unpaid.tsx index 0dd4ab5e..1f422a6a 100644 --- a/packages/app/src/components/dialog-select-model-unpaid.tsx +++ b/packages/app/src/components/dialog-select-model-unpaid.tsx @@ -1,10 +1,10 @@ -import { Button } from "@mimo-ai/ui/button" -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { Dialog } from "@mimo-ai/ui/dialog" -import { List, type ListRef } from "@mimo-ai/ui/list" -import { ProviderIcon } from "@mimo-ai/ui/provider-icon" -import { Tag } from "@mimo-ai/ui/tag" -import { Tooltip } from "@mimo-ai/ui/tooltip" +import { Button } from "@devora-ai/ui/button" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { List, type ListRef } from "@devora-ai/ui/list" +import { ProviderIcon } from "@devora-ai/ui/provider-icon" +import { Tag } from "@devora-ai/ui/tag" +import { Tooltip } from "@devora-ai/ui/tooltip" import { type Component, Show } from "solid-js" import { useLocal } from "@/context/local" import { popularProviders, useProviders } from "@/hooks/use-providers" @@ -59,7 +59,7 @@ export const DialogSelectModelUnpaid: Component<{ model?: ModelState }> = (props } > @@ -108,16 +108,16 @@ export const DialogSelectModelUnpaid: Component<{ model?: ModelState }> = (props

{i.name} - -
{language.t("dialog.provider.opencode.tagline")}
+ +
{language.t("dialog.provider.devora.tagline")}
- + {language.t("dialog.provider.tag.recommended")} - + <>
- {language.t("dialog.provider.opencodeGo.tagline")} + {language.t("dialog.provider.devoraGo.tagline")}
{language.t("dialog.provider.tag.recommended")} diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index c7452d30..c23b58f5 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -2,19 +2,19 @@ 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 "@mimo-ai/ui/context/dialog" +import { useDialog } from "@devora-ai/ui/context/dialog" import { popularProviders } from "@/hooks/use-providers" -import { Button } from "@mimo-ai/ui/button" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { Tag } from "@mimo-ai/ui/tag" -import { Dialog } from "@mimo-ai/ui/dialog" -import { List } from "@mimo-ai/ui/list" -import { Tooltip } from "@mimo-ai/ui/tooltip" +import { Button } from "@devora-ai/ui/button" +import { IconButton } from "@devora-ai/ui/icon-button" +import { Tag } from "@devora-ai/ui/tag" +import { Dialog } from "@devora-ai/ui/dialog" +import { List } from "@devora-ai/ui/list" +import { Tooltip } from "@devora-ai/ui/tooltip" import { ModelTooltip } from "./model-tooltip" import { useLanguage } from "@/context/language" const isFree = (provider: string, cost: { input: number } | undefined) => - provider === "opencode" && (!cost || cost.input === 0) + provider === "devora" && (!cost || cost.input === 0) type ModelState = ReturnType["model"] diff --git a/packages/app/src/components/dialog-select-provider.tsx b/packages/app/src/components/dialog-select-provider.tsx index b05e2cda..f8ef5c44 100644 --- a/packages/app/src/components/dialog-select-provider.tsx +++ b/packages/app/src/components/dialog-select-provider.tsx @@ -1,10 +1,10 @@ import { Component, Show } from "solid-js" -import { useDialog } from "@mimo-ai/ui/context/dialog" +import { useDialog } from "@devora-ai/ui/context/dialog" import { popularProviders, useProviders } from "@/hooks/use-providers" -import { Dialog } from "@mimo-ai/ui/dialog" -import { List } from "@mimo-ai/ui/list" -import { Tag } from "@mimo-ai/ui/tag" -import { ProviderIcon } from "@mimo-ai/ui/provider-icon" +import { Dialog } from "@devora-ai/ui/dialog" +import { List } from "@devora-ai/ui/list" +import { Tag } from "@devora-ai/ui/tag" +import { ProviderIcon } from "@devora-ai/ui/provider-icon" import { DialogConnectProvider } from "./dialog-connect-provider" import { useLanguage } from "@/context/language" import { DialogCustomProvider } from "./dialog-custom-provider" @@ -23,7 +23,7 @@ export const DialogSelectProvider: Component = () => { if (id === "anthropic") return language.t("dialog.provider.anthropic.note") if (id === "openai") return language.t("dialog.provider.openai.note") if (id.startsWith("github-copilot")) return language.t("dialog.provider.copilot.note") - if (id === "opencode-go") return language.t("dialog.provider.opencodeGo.tagline") + if (id === "devora-go") return language.t("dialog.provider.devoraGo.tagline") } return ( @@ -65,17 +65,17 @@ export const DialogSelectProvider: Component = () => {
{i.name} - -
{language.t("dialog.provider.opencode.tagline")}
+ +
{language.t("dialog.provider.devora.tagline")}
{language.t("settings.providers.tag.custom")} - + {language.t("dialog.provider.tag.recommended")} {(value) =>
{value()}
}
- + {language.t("dialog.provider.tag.recommended")}
diff --git a/packages/app/src/components/dialog-select-server.tsx b/packages/app/src/components/dialog-select-server.tsx index 83c07cf2..c7db28cf 100644 --- a/packages/app/src/components/dialog-select-server.tsx +++ b/packages/app/src/components/dialog-select-server.tsx @@ -1,13 +1,13 @@ -import { Button } from "@mimo-ai/ui/button" -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { Dialog } from "@mimo-ai/ui/dialog" -import { DropdownMenu } from "@mimo-ai/ui/dropdown-menu" -import { Icon } from "@mimo-ai/ui/icon" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { List } from "@mimo-ai/ui/list" -import { TextField } from "@mimo-ai/ui/text-field" +import { Button } from "@devora-ai/ui/button" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Dialog } from "@devora-ai/ui/dialog" +import { DropdownMenu } from "@devora-ai/ui/dropdown-menu" +import { Icon } from "@devora-ai/ui/icon" +import { IconButton } from "@devora-ai/ui/icon-button" +import { List } from "@devora-ai/ui/list" +import { TextField } from "@devora-ai/ui/text-field" import { useMutation } from "@tanstack/solid-query" -import { showToast } from "@mimo-ai/ui/toast" +import { showToast } from "@devora-ai/ui/toast" import { useNavigate } from "@solidjs/router" import { createEffect, createMemo, createResource, onCleanup, Show } from "solid-js" import { createStore, reconcile } from "solid-js/store" @@ -17,7 +17,7 @@ import { usePlatform } from "@/context/platform" import { normalizeServerUrl, ServerConnection, useServer } from "@/context/server" import { type ServerHealth, useCheckServerHealth } from "@/utils/server-health" -const DEFAULT_USERNAME = "opencode" +const DEFAULT_USERNAME = "devora" interface ServerFormProps { value: string diff --git a/packages/app/src/components/dialog-settings.tsx b/packages/app/src/components/dialog-settings.tsx index fc2da990..da3935f2 100644 --- a/packages/app/src/components/dialog-settings.tsx +++ b/packages/app/src/components/dialog-settings.tsx @@ -1,7 +1,7 @@ import { Component } from "solid-js" -import { Dialog } from "@mimo-ai/ui/dialog" -import { Tabs } from "@mimo-ai/ui/tabs" -import { Icon } from "@mimo-ai/ui/icon" +import { Dialog } from "@devora-ai/ui/dialog" +import { Tabs } from "@devora-ai/ui/tabs" +import { Icon } from "@devora-ai/ui/icon" import { useLanguage } from "@/context/language" import { usePlatform } from "@/context/platform" import { SettingsGeneral } from "./settings-general" diff --git a/packages/app/src/components/file-tree.test.ts b/packages/app/src/components/file-tree.test.ts index 871ab0e4..d590036b 100644 --- a/packages/app/src/components/file-tree.test.ts +++ b/packages/app/src/components/file-tree.test.ts @@ -20,15 +20,15 @@ beforeAll(async () => { }, }), })) - mock.module("@mimo-ai/ui/collapsible", () => ({ + mock.module("@devora-ai/ui/collapsible", () => ({ Collapsible: { Trigger: (props: { children?: unknown }) => props.children, Content: (props: { children?: unknown }) => props.children, }, })) - mock.module("@mimo-ai/ui/file-icon", () => ({ FileIcon: () => null })) - mock.module("@mimo-ai/ui/icon", () => ({ Icon: () => null })) - mock.module("@mimo-ai/ui/tooltip", () => ({ Tooltip: (props: { children?: unknown }) => props.children })) + mock.module("@devora-ai/ui/file-icon", () => ({ FileIcon: () => null })) + mock.module("@devora-ai/ui/icon", () => ({ Icon: () => null })) + mock.module("@devora-ai/ui/tooltip", () => ({ Tooltip: (props: { children?: unknown }) => props.children })) const mod = await import("./file-tree") shouldListRoot = mod.shouldListRoot shouldListExpanded = mod.shouldListExpanded diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index 3e5ca854..4eeaaf1b 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/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 "@mimo-ai/ui/collapsible" -import { FileIcon } from "@mimo-ai/ui/file-icon" -import { Icon } from "@mimo-ai/ui/icon" +import { Collapsible } from "@devora-ai/ui/collapsible" +import { FileIcon } from "@devora-ai/ui/file-icon" +import { Icon } from "@devora-ai/ui/icon" import { createEffect, createMemo, @@ -17,7 +17,7 @@ import { type ParentProps, } from "solid-js" import { Dynamic } from "solid-js/web" -import type { FileNode } from "@mimo-ai/sdk/v2" +import type { FileNode } from "@devora-ai/sdk/v2" const MAX_DEPTH = 128 diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 4a5af542..706df54f 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1,5 +1,5 @@ -import { useFilteredList } from "@mimo-ai/ui/hooks" -import { useSpring } from "@mimo-ai/ui/motion-spring" +import { useFilteredList } from "@devora-ai/ui/hooks" +import { useSpring } from "@devora-ai/ui/motion-spring" import { createEffect, on, Component, Show, onCleanup, createMemo, createSignal, createResource } from "solid-js" import { createStore } from "solid-js/store" import { useLocal } from "@/context/local" @@ -18,14 +18,14 @@ import { useLayout } from "@/context/layout" import { useSDK } from "@/context/sdk" import { useSync } from "@/context/sync" import { useComments } from "@/context/comments" -import { Button } from "@mimo-ai/ui/button" -import { DockShellForm, DockTray } from "@mimo-ai/ui/dock-surface" -import { Icon } from "@mimo-ai/ui/icon" -import { ProviderIcon } from "@mimo-ai/ui/provider-icon" -import { Tooltip, TooltipKeybind } from "@mimo-ai/ui/tooltip" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { Select } from "@mimo-ai/ui/select" -import { useDialog } from "@mimo-ai/ui/context/dialog" +import { Button } from "@devora-ai/ui/button" +import { DockShellForm, DockTray } from "@devora-ai/ui/dock-surface" +import { Icon } from "@devora-ai/ui/icon" +import { ProviderIcon } from "@devora-ai/ui/provider-icon" +import { Tooltip, TooltipKeybind } from "@devora-ai/ui/tooltip" +import { IconButton } from "@devora-ai/ui/icon-button" +import { Select } from "@devora-ai/ui/select" +import { useDialog } from "@devora-ai/ui/context/dialog" import { ModelSelectorPopover } from "@/components/dialog-select-model" import { useProviders } from "@/hooks/use-providers" import { useCommand } from "@/context/command" @@ -53,7 +53,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 "@mimo-ai/ui/image-preview" +import { ImagePreview } from "@devora-ai/ui/image-preview" import { useQueries, useQuery } from "@tanstack/solid-query" import { loadAgentsQuery, loadProvidersQuery } from "@/context/global-sync/bootstrap" @@ -479,6 +479,14 @@ export const PromptInput: Component = (props) => { const closePopover = () => setStore("popover", null) + const commandOption = (id: string) => command.options.find((option) => option.id === id) + const commandDisabled = (id: string) => commandOption(id)?.disabled ?? true + const commandTitle = (id: string, fallback: string) => commandOption(id)?.title ?? fallback + const runCommand = (id: string) => { + command.trigger(id, "palette") + restoreFocus() + } + const resetHistoryNavigation = (force = false) => { if (!force && (store.historyIndex < 0 || store.applyingHistory)) return setStore("historyIndex", -1) @@ -521,6 +529,15 @@ export const PromptInput: Component = (props) => { }) } + const openHelperPopover = (popover: "at" | "agent" | "slash") => { + if (popover === "at") atOnInput("") + if (popover === "agent") agentOnInput("") + if (popover === "slash") slashOnInput("") + setStore("popover", popover) + restoreFocus() + } + const preserveEditorFocus = (event: MouseEvent) => event.preventDefault() + const renderEditorWithCursor = (parts: Prompt) => { const cursor = currentCursor() renderEditor(parts) @@ -1072,7 +1089,8 @@ export const PromptInput: Component = (props) => { readClipboardImage: platform.readClipboardImage, }) - const variants = createMemo(() => ["default", ...local.model.variant.list()]) + const variants = createMemo(() => local.model.variant.list()) + const variantOptions = createMemo(() => ["default", ...variants()]) const accepting = createMemo(() => { const id = params.id if (!id) return permission.isAutoAcceptingDirectory(sdk.directory) @@ -1469,7 +1487,7 @@ export const PromptInput: Component = (props) => { -
+
= (props) => {
-
- - (x === "default" ? language.t("common.default") : x)} + onSelect={(value) => { + local.model.variant.set(value === "default" ? undefined : value) + restoreFocus() + }} + class="capitalize max-w-[160px] text-text-base" + valueClass="truncate text-13-regular text-text-base" + triggerStyle={control()} + triggerProps={{ "data-action": "prompt-model-variant" }} + variant="ghost" + /> + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + runCommand("session.undo")} + aria-label={language.t("command.session.undo")} + /> + + + runCommand("session.redo")} + aria-label={language.t("command.session.redo")} + /> + + + runCommand("session.compact")} + aria-label={language.t("command.session.compact")} + /> + + + runCommand("session.fork")} + aria-label={language.t("command.session.fork")} + /> + +
diff --git a/packages/app/src/components/prompt-input/attachments.ts b/packages/app/src/components/prompt-input/attachments.ts index 2229f99d..a02869b7 100644 --- a/packages/app/src/components/prompt-input/attachments.ts +++ b/packages/app/src/components/prompt-input/attachments.ts @@ -1,6 +1,6 @@ import { onMount } from "solid-js" import { makeEventListener } from "@solid-primitives/event-listener" -import { showToast } from "@mimo-ai/ui/toast" +import { showToast } from "@devora-ai/ui/toast" import { usePrompt, type ContentPart, type ImageAttachmentPart } from "@/context/prompt" import { useLanguage } from "@/context/language" import { uuid } from "@/utils/uuid" diff --git a/packages/app/src/components/prompt-input/build-request-parts.test.ts b/packages/app/src/components/prompt-input/build-request-parts.test.ts index 06c37733..05d20337 100644 --- a/packages/app/src/components/prompt-input/build-request-parts.test.ts +++ b/packages/app/src/components/prompt-input/build-request-parts.test.ts @@ -40,8 +40,8 @@ describe("buildRequestParts", () => { (part) => part.type === "text" && part.synthetic && - part.metadata?.opencodeComment && - (part.metadata.opencodeComment as { comment?: string }).comment === "check this", + part.metadata?.devoraComment && + (part.metadata.devoraComment as { comment?: string }).comment === "check this", ), ).toBe(true) @@ -208,7 +208,7 @@ describe("buildRequestParts", () => { text: "@README.md", messageID: "msg_mac_1", sessionID: "ses_mac_1", - sessionDirectory: "/Users/kelvin/Projects/opencode", + sessionDirectory: "/Users/kelvin/Projects/devora", }) const filePart = result.requestParts.find((part) => part.type === "file") @@ -217,7 +217,7 @@ describe("buildRequestParts", () => { // URL should be parseable expect(() => new URL(filePart.url)).not.toThrow() // Should be a normal Unix path - expect(filePart.url).toBe("file:///Users/kelvin/Projects/opencode/README.md") + expect(filePart.url).toBe("file:///Users/kelvin/Projects/devora/README.md") } }) diff --git a/packages/app/src/components/prompt-input/build-request-parts.ts b/packages/app/src/components/prompt-input/build-request-parts.ts index 7fc2339c..e2ff882e 100644 --- a/packages/app/src/components/prompt-input/build-request-parts.ts +++ b/packages/app/src/components/prompt-input/build-request-parts.ts @@ -1,5 +1,5 @@ -import { getFilename } from "@mimo-ai/shared/util/path" -import { type AgentPartInput, type FilePartInput, type Part, type TextPartInput } from "@mimo-ai/sdk/v2/client" +import { getFilename } from "@devora-ai/shared/util/path" +import { type AgentPartInput, type FilePartInput, type Part, type TextPartInput } from "@devora-ai/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/packages/app/src/components/prompt-input/context-items.tsx b/packages/app/src/components/prompt-input/context-items.tsx index 806404c8..6799228c 100644 --- a/packages/app/src/components/prompt-input/context-items.tsx +++ b/packages/app/src/components/prompt-input/context-items.tsx @@ -1,8 +1,8 @@ import { Component, For, Show } from "solid-js" -import { FileIcon } from "@mimo-ai/ui/file-icon" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { Tooltip } from "@mimo-ai/ui/tooltip" -import { getDirectory, getFilename, getFilenameTruncated } from "@mimo-ai/shared/util/path" +import { FileIcon } from "@devora-ai/ui/file-icon" +import { IconButton } from "@devora-ai/ui/icon-button" +import { Tooltip } from "@devora-ai/ui/tooltip" +import { getDirectory, getFilename, getFilenameTruncated } from "@devora-ai/shared/util/path" import type { ContextItem } from "@/context/prompt" type PromptContextItem = ContextItem & { key: string } diff --git a/packages/app/src/components/prompt-input/drag-overlay.tsx b/packages/app/src/components/prompt-input/drag-overlay.tsx index 4860b3c8..77f8f4a5 100644 --- a/packages/app/src/components/prompt-input/drag-overlay.tsx +++ b/packages/app/src/components/prompt-input/drag-overlay.tsx @@ -1,5 +1,5 @@ import { Component, Show } from "solid-js" -import { Icon } from "@mimo-ai/ui/icon" +import { Icon } from "@devora-ai/ui/icon" type PromptDragOverlayProps = { type: "image" | "@mention" | null diff --git a/packages/app/src/components/prompt-input/image-attachments.tsx b/packages/app/src/components/prompt-input/image-attachments.tsx index 6313035a..0aa2d73f 100644 --- a/packages/app/src/components/prompt-input/image-attachments.tsx +++ b/packages/app/src/components/prompt-input/image-attachments.tsx @@ -1,6 +1,6 @@ import { Component, For, Show } from "solid-js" -import { Icon } from "@mimo-ai/ui/icon" -import { Tooltip } from "@mimo-ai/ui/tooltip" +import { Icon } from "@devora-ai/ui/icon" +import { Tooltip } from "@devora-ai/ui/tooltip" import type { ImageAttachmentPart } from "@/context/prompt" type PromptImageAttachmentsProps = { diff --git a/packages/app/src/components/prompt-input/slash-popover.tsx b/packages/app/src/components/prompt-input/slash-popover.tsx index 91b424fb..6b3d1618 100644 --- a/packages/app/src/components/prompt-input/slash-popover.tsx +++ b/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 "@mimo-ai/ui/file-icon" -import { Icon } from "@mimo-ai/ui/icon" -import { getDirectory, getFilename } from "@mimo-ai/shared/util/path" +import { FileIcon } from "@devora-ai/ui/file-icon" +import { Icon } from "@devora-ai/ui/icon" +import { getDirectory, getFilename } from "@devora-ai/shared/util/path" export type AtOption = { path: string; display: string; recent?: boolean } export type AgentOption = { name: string; display: string } diff --git a/packages/app/src/components/prompt-input/submit.test.ts b/packages/app/src/components/prompt-input/submit.test.ts index cd946d74..998aa1c8 100644 --- a/packages/app/src/components/prompt-input/submit.test.ts +++ b/packages/app/src/components/prompt-input/submit.test.ts @@ -63,18 +63,18 @@ beforeAll(async () => { useParams: () => params, })) - mock.module("@mimo-ai/sdk/v2/client", () => ({ - createOpencodeClient: (input: { directory: string }) => { + mock.module("@devora-ai/sdk/v2/client", () => ({ + createDevoraClient: (input: { directory: string }) => { createdClients.push(input.directory) return clientFor(input.directory) }, })) - mock.module("@mimo-ai/ui/toast", () => ({ + mock.module("@devora-ai/ui/toast", () => ({ showToast: () => 0, })) - mock.module("@mimo-ai/shared/util/encode", () => ({ + mock.module("@devora-ai/shared/util/encode", () => ({ base64Encode: (value: string) => value, })) diff --git a/packages/app/src/components/prompt-input/submit.ts b/packages/app/src/components/prompt-input/submit.ts index 108884a6..6f75082a 100644 --- a/packages/app/src/components/prompt-input/submit.ts +++ b/packages/app/src/components/prompt-input/submit.ts @@ -1,7 +1,7 @@ -import type { Message, Session } from "@mimo-ai/sdk/v2/client" -import { showToast } from "@mimo-ai/ui/toast" -import { base64Encode } from "@mimo-ai/shared/util/encode" -import { Binary } from "@mimo-ai/shared/util/binary" +import type { Message, Session } from "@devora-ai/sdk/v2/client" +import { showToast } from "@devora-ai/ui/toast" +import { base64Encode } from "@devora-ai/shared/util/encode" +import { Binary } from "@devora-ai/shared/util/binary" import { useNavigate, useParams } from "@solidjs/router" import { batch, type Accessor } from "solid-js" import type { FileSelection } from "@/context/file" diff --git a/packages/app/src/components/server/server-row.tsx b/packages/app/src/components/server/server-row.tsx index 82150f11..dff2d5d6 100644 --- a/packages/app/src/components/server/server-row.tsx +++ b/packages/app/src/components/server/server-row.tsx @@ -1,4 +1,4 @@ -import { Tooltip } from "@mimo-ai/ui/tooltip" +import { Tooltip } from "@devora-ai/ui/tooltip" import { createResizeObserver } from "@solid-primitives/resize-observer" import { children, diff --git a/packages/app/src/components/session-context-usage.tsx b/packages/app/src/components/session-context-usage.tsx index 8cfc34d5..b1434b11 100644 --- a/packages/app/src/components/session-context-usage.tsx +++ b/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 "@mimo-ai/ui/tooltip" -import { ProgressCircle } from "@mimo-ai/ui/progress-circle" -import { Button } from "@mimo-ai/ui/button" +import { Tooltip, type TooltipProps } from "@devora-ai/ui/tooltip" +import { ProgressCircle } from "@devora-ai/ui/progress-circle" +import { Button } from "@devora-ai/ui/button" import { useFile } from "@/context/file" import { useLayout } from "@/context/layout" diff --git a/packages/app/src/components/session/session-context-breakdown.test.ts b/packages/app/src/components/session/session-context-breakdown.test.ts index 1b19f7e0..e075632c 100644 --- a/packages/app/src/components/session/session-context-breakdown.test.ts +++ b/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 "@mimo-ai/sdk/v2/client" +import type { Message, Part } from "@devora-ai/sdk/v2/client" import { estimateSessionContextBreakdown } from "./session-context-breakdown" const user = (id: string) => { diff --git a/packages/app/src/components/session/session-context-breakdown.ts b/packages/app/src/components/session/session-context-breakdown.ts index 78ccf8f9..c2851f60 100644 --- a/packages/app/src/components/session/session-context-breakdown.ts +++ b/packages/app/src/components/session/session-context-breakdown.ts @@ -1,4 +1,4 @@ -import type { Message, Part } from "@mimo-ai/sdk/v2/client" +import type { Message, Part } from "@devora-ai/sdk/v2/client" export type SessionContextBreakdownKey = "system" | "user" | "assistant" | "tool" | "other" diff --git a/packages/app/src/components/session/session-context-metrics.test.ts b/packages/app/src/components/session/session-context-metrics.test.ts index 528a291b..0082da33 100644 --- a/packages/app/src/components/session/session-context-metrics.test.ts +++ b/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 "@mimo-ai/sdk/v2/client" +import type { Message } from "@devora-ai/sdk/v2/client" import { getSessionContextMetrics } from "./session-context-metrics" const assistant = ( diff --git a/packages/app/src/components/session/session-context-metrics.ts b/packages/app/src/components/session/session-context-metrics.ts index 4feb97cb..fb261927 100644 --- a/packages/app/src/components/session/session-context-metrics.ts +++ b/packages/app/src/components/session/session-context-metrics.ts @@ -1,4 +1,4 @@ -import type { AssistantMessage, Message } from "@mimo-ai/sdk/v2/client" +import type { AssistantMessage, Message } from "@devora-ai/sdk/v2/client" type Provider = { id: string diff --git a/packages/app/src/components/session/session-context-tab.tsx b/packages/app/src/components/session/session-context-tab.tsx index 3331a443..d5d8d549 100644 --- a/packages/app/src/components/session/session-context-tab.tsx +++ b/packages/app/src/components/session/session-context-tab.tsx @@ -1,16 +1,16 @@ import { createMemo, createEffect, on, onCleanup, For, Show } from "solid-js" import type { JSX } from "solid-js" import { useSync } from "@/context/sync" -import { checksum } from "@mimo-ai/shared/util/encode" -import { findLast } from "@mimo-ai/shared/util/array" +import { checksum } from "@devora-ai/shared/util/encode" +import { findLast } from "@devora-ai/shared/util/array" import { same } from "@/utils/same" -import { Icon } from "@mimo-ai/ui/icon" -import { Accordion } from "@mimo-ai/ui/accordion" -import { StickyAccordionHeader } from "@mimo-ai/ui/sticky-accordion-header" -import { File } from "@mimo-ai/ui/file" -import { Markdown } from "@mimo-ai/ui/markdown" -import { ScrollView } from "@mimo-ai/ui/scroll-view" -import type { Message, Part, UserMessage } from "@mimo-ai/sdk/v2/client" +import { Icon } from "@devora-ai/ui/icon" +import { Accordion } from "@devora-ai/ui/accordion" +import { StickyAccordionHeader } from "@devora-ai/ui/sticky-accordion-header" +import { File } from "@devora-ai/ui/file" +import { Markdown } from "@devora-ai/ui/markdown" +import { ScrollView } from "@devora-ai/ui/scroll-view" +import type { Message, Part, UserMessage } from "@devora-ai/sdk/v2/client" import { useLanguage } from "@/context/language" import { useProviders } from "@/hooks/use-providers" import { useSessionLayout } from "@/pages/session/session-layout" diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index a7f8834d..a78a5c56 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -1,13 +1,13 @@ -import { AppIcon } from "@mimo-ai/ui/app-icon" -import { Button } from "@mimo-ai/ui/button" -import { DropdownMenu } from "@mimo-ai/ui/dropdown-menu" -import { Icon } from "@mimo-ai/ui/icon" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { Keybind } from "@mimo-ai/ui/keybind" -import { Spinner } from "@mimo-ai/ui/spinner" -import { showToast } from "@mimo-ai/ui/toast" -import { Tooltip, TooltipKeybind } from "@mimo-ai/ui/tooltip" -import { getFilename } from "@mimo-ai/shared/util/path" +import { AppIcon } from "@devora-ai/ui/app-icon" +import { Button } from "@devora-ai/ui/button" +import { DropdownMenu } from "@devora-ai/ui/dropdown-menu" +import { Icon } from "@devora-ai/ui/icon" +import { IconButton } from "@devora-ai/ui/icon-button" +import { Keybind } from "@devora-ai/ui/keybind" +import { Spinner } from "@devora-ai/ui/spinner" +import { showToast } from "@devora-ai/ui/toast" +import { Tooltip, TooltipKeybind } from "@devora-ai/ui/tooltip" +import { getFilename } from "@devora-ai/shared/util/path" import { createEffect, createMemo, createSignal, For, onMount, Show } from "solid-js" import { createStore } from "solid-js/store" import { Portal } from "solid-js/web" @@ -153,7 +153,7 @@ export function SessionHeader() { }) const hotkey = createMemo(() => command.keybind("file.open")) const os = createMemo(() => detectOS(platform)) - const isDesktopBeta = platform.platform === "desktop" && import.meta.env.VITE_OPENCODE_CHANNEL === "beta" + const isDesktopBeta = platform.platform === "desktop" && import.meta.env.VITE_DEVORA_CHANNEL === "beta" const search = createMemo(() => !isDesktopBeta || settings.general.showSearch()) const tree = createMemo(() => !isDesktopBeta || settings.general.showFileTree()) const term = createMemo(() => !isDesktopBeta || settings.general.showTerminal()) @@ -272,8 +272,8 @@ export function SessionHeader() { const [centerMount, setCenterMount] = createSignal(null) const [rightMount, setRightMount] = createSignal(null) onMount(() => { - setCenterMount(document.getElementById("opencode-titlebar-center")) - setRightMount(document.getElementById("opencode-titlebar-right")) + setCenterMount(document.getElementById("devora-titlebar-center")) + setRightMount(document.getElementById("devora-titlebar-right")) }) return ( diff --git a/packages/app/src/components/session/session-new-view.tsx b/packages/app/src/components/session/session-new-view.tsx index 2c5d6410..f1a5be3e 100644 --- a/packages/app/src/components/session/session-new-view.tsx +++ b/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 "@mimo-ai/ui/icon" -import { Mark } from "@mimo-ai/ui/logo" -import { getDirectory, getFilename } from "@mimo-ai/shared/util/path" +import { Icon } from "@devora-ai/ui/icon" +import { Mark } from "@devora-ai/ui/logo" +import { getDirectory, getFilename } from "@devora-ai/shared/util/path" const MAIN_WORKTREE = "main" const CREATE_WORKTREE = "create" diff --git a/packages/app/src/components/session/session-sortable-tab.tsx b/packages/app/src/components/session/session-sortable-tab.tsx index 007b348e..a3823597 100644 --- a/packages/app/src/components/session/session-sortable-tab.tsx +++ b/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 "@mimo-ai/ui/file-icon" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { TooltipKeybind } from "@mimo-ai/ui/tooltip" -import { Tabs } from "@mimo-ai/ui/tabs" -import { getFilename } from "@mimo-ai/shared/util/path" +import { FileIcon } from "@devora-ai/ui/file-icon" +import { IconButton } from "@devora-ai/ui/icon-button" +import { TooltipKeybind } from "@devora-ai/ui/tooltip" +import { Tabs } from "@devora-ai/ui/tabs" +import { getFilename } from "@devora-ai/shared/util/path" import { useFile } from "@/context/file" import { useLanguage } from "@/context/language" import { useCommand } from "@/context/command" diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index d452f630..f0331250 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/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 "@mimo-ai/ui/icon-button" -import { Tabs } from "@mimo-ai/ui/tabs" -import { DropdownMenu } from "@mimo-ai/ui/dropdown-menu" -import { Icon } from "@mimo-ai/ui/icon" +import { IconButton } from "@devora-ai/ui/icon-button" +import { Tabs } from "@devora-ai/ui/tabs" +import { DropdownMenu } from "@devora-ai/ui/dropdown-menu" +import { Icon } from "@devora-ai/ui/icon" import { isDefaultTitle as isDefaultTerminalTitle } from "@/context/terminal-title" import { useTerminal, type LocalPTY } from "@/context/terminal" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index 51452b9c..5111c57c 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -1,13 +1,13 @@ import { Component, Show, createMemo, createResource, onMount, type JSX } from "solid-js" import { createStore } from "solid-js/store" -import { Button } from "@mimo-ai/ui/button" -import { Icon } from "@mimo-ai/ui/icon" -import { Select } from "@mimo-ai/ui/select" -import { Switch } from "@mimo-ai/ui/switch" -import { TextField } from "@mimo-ai/ui/text-field" -import { Tooltip } from "@mimo-ai/ui/tooltip" -import { useTheme, type ColorScheme } from "@mimo-ai/ui/theme/context" -import { showToast } from "@mimo-ai/ui/toast" +import { Button } from "@devora-ai/ui/button" +import { Icon } from "@devora-ai/ui/icon" +import { Select } from "@devora-ai/ui/select" +import { Switch } from "@devora-ai/ui/switch" +import { TextField } from "@devora-ai/ui/text-field" +import { Tooltip } from "@devora-ai/ui/tooltip" +import { useTheme, type ColorScheme } from "@devora-ai/ui/theme/context" +import { showToast } from "@devora-ai/ui/toast" import { useParams } from "@solidjs/router" import { useLanguage } from "@/context/language" import { usePermission } from "@/context/permission" @@ -385,7 +385,7 @@ export const SettingsGeneral: Component = () => { description={ <> {language.t("settings.general.row.theme.description")}{" "} - {language.t("common.learnMore")} + {language.t("common.learnMore")} } > @@ -707,7 +707,7 @@ export const SettingsGeneral: Component = () => { }}
- +
diff --git a/packages/app/src/components/settings-keybinds.tsx b/packages/app/src/components/settings-keybinds.tsx index f66be4e5..b5ad62ae 100644 --- a/packages/app/src/components/settings-keybinds.tsx +++ b/packages/app/src/components/settings-keybinds.tsx @@ -1,11 +1,11 @@ import { Component, For, Show, createMemo, onCleanup, onMount } from "solid-js" import { createStore } from "solid-js/store" import { makeEventListener } from "@solid-primitives/event-listener" -import { Button } from "@mimo-ai/ui/button" -import { Icon } from "@mimo-ai/ui/icon" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { TextField } from "@mimo-ai/ui/text-field" -import { showToast } from "@mimo-ai/ui/toast" +import { Button } from "@devora-ai/ui/button" +import { Icon } from "@devora-ai/ui/icon" +import { IconButton } from "@devora-ai/ui/icon-button" +import { TextField } from "@devora-ai/ui/text-field" +import { showToast } from "@devora-ai/ui/toast" import fuzzysort from "fuzzysort" import { formatKeybind, parseKeybind, useCommand } from "@/context/command" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/components/settings-models.tsx b/packages/app/src/components/settings-models.tsx index 00826f69..40129fd8 100644 --- a/packages/app/src/components/settings-models.tsx +++ b/packages/app/src/components/settings-models.tsx @@ -1,9 +1,9 @@ -import { useFilteredList } from "@mimo-ai/ui/hooks" -import { ProviderIcon } from "@mimo-ai/ui/provider-icon" -import { Switch } from "@mimo-ai/ui/switch" -import { Icon } from "@mimo-ai/ui/icon" -import { IconButton } from "@mimo-ai/ui/icon-button" -import { TextField } from "@mimo-ai/ui/text-field" +import { useFilteredList } from "@devora-ai/ui/hooks" +import { ProviderIcon } from "@devora-ai/ui/provider-icon" +import { Switch } from "@devora-ai/ui/switch" +import { Icon } from "@devora-ai/ui/icon" +import { IconButton } from "@devora-ai/ui/icon-button" +import { TextField } from "@devora-ai/ui/text-field" import { type Component, For, Show } from "solid-js" import { useLanguage } from "@/context/language" import { useModels } from "@/context/models" diff --git a/packages/app/src/components/settings-providers.tsx b/packages/app/src/components/settings-providers.tsx index 4d139408..516f50c4 100644 --- a/packages/app/src/components/settings-providers.tsx +++ b/packages/app/src/components/settings-providers.tsx @@ -1,8 +1,8 @@ -import { Button } from "@mimo-ai/ui/button" -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { ProviderIcon } from "@mimo-ai/ui/provider-icon" -import { Tag } from "@mimo-ai/ui/tag" -import { showToast } from "@mimo-ai/ui/toast" +import { Button } from "@devora-ai/ui/button" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { ProviderIcon } from "@devora-ai/ui/provider-icon" +import { Tag } from "@devora-ai/ui/tag" +import { showToast } from "@devora-ai/ui/toast" import { popularProviders, useProviders } from "@/hooks/use-providers" import { createMemo, type Component, For, Show } from "solid-js" import { useLanguage } from "@/context/language" @@ -17,8 +17,8 @@ type ProviderSource = "env" | "api" | "config" | "custom" type ProviderItem = ReturnType["connected"]>[number] const PROVIDER_NOTES = [ - { match: (id: string) => id === "opencode", key: "dialog.provider.opencode.note" }, - { match: (id: string) => id === "opencode-go", key: "dialog.provider.opencodeGo.tagline" }, + { match: (id: string) => id === "devora", key: "dialog.provider.devora.note" }, + { match: (id: string) => id === "devora-go", key: "dialog.provider.devoraGo.tagline" }, { match: (id: string) => id === "anthropic", key: "dialog.provider.anthropic.note" }, { match: (id: string) => id.startsWith("github-copilot"), key: "dialog.provider.copilot.note" }, { match: (id: string) => id === "openai", key: "dialog.provider.openai.note" }, @@ -37,7 +37,7 @@ export const SettingsProviders: Component = () => { const connected = createMemo(() => { return providers .connected() - .filter((p) => p.id !== "opencode" || Object.values(p.models).find((m) => m.cost?.input)) + .filter((p) => p.id !== "devora" || Object.values(p.models).find((m) => m.cost?.input)) }) const popular = createMemo(() => { @@ -183,10 +183,10 @@ export const SettingsProviders: Component = () => {
{item.name} - + {language.t("dialog.provider.tag.recommended")} - + {language.t("dialog.provider.tag.recommended")}
diff --git a/packages/app/src/components/status-popover-body.tsx b/packages/app/src/components/status-popover-body.tsx index 2100bea7..f2902bb0 100644 --- a/packages/app/src/components/status-popover-body.tsx +++ b/packages/app/src/components/status-popover-body.tsx @@ -1,10 +1,10 @@ -import { Button } from "@mimo-ai/ui/button" -import { useDialog } from "@mimo-ai/ui/context/dialog" -import { Icon } from "@mimo-ai/ui/icon" -import { Switch } from "@mimo-ai/ui/switch" -import { Tabs } from "@mimo-ai/ui/tabs" +import { Button } from "@devora-ai/ui/button" +import { useDialog } from "@devora-ai/ui/context/dialog" +import { Icon } from "@devora-ai/ui/icon" +import { Switch } from "@devora-ai/ui/switch" +import { Tabs } from "@devora-ai/ui/tabs" import { useMutation } from "@tanstack/solid-query" -import { showToast } from "@mimo-ai/ui/toast" +import { showToast } from "@devora-ai/ui/toast" import { useNavigate } from "@solidjs/router" import { type Accessor, createEffect, createMemo, For, type JSXElement, onCleanup, Show } from "solid-js" import { createStore, reconcile } from "solid-js/store" @@ -243,7 +243,7 @@ export function StatusPopoverBody(props: { shown: Accessor }) { (sync.data.config.plugin ?? []).map((item) => (typeof item === "string" ? item : item[0])), ) const pluginCount = createMemo(() => plugins().length) - const pluginEmpty = createMemo(() => pluginEmptyMessage(language.t("dialog.plugins.empty"), "opencode.json")) + const pluginEmpty = createMemo(() => pluginEmptyMessage(language.t("dialog.plugins.empty"), "devora.json")) return (
diff --git a/packages/app/src/components/status-popover.tsx b/packages/app/src/components/status-popover.tsx index 921e0427..90700051 100644 --- a/packages/app/src/components/status-popover.tsx +++ b/packages/app/src/components/status-popover.tsx @@ -1,6 +1,6 @@ -import { Button } from "@mimo-ai/ui/button" -import { Icon } from "@mimo-ai/ui/icon" -import { Popover } from "@mimo-ai/ui/popover" +import { Button } from "@devora-ai/ui/button" +import { Icon } from "@devora-ai/ui/icon" +import { Popover } from "@devora-ai/ui/popover" import { Suspense, createMemo, createSignal, lazy, Show } from "solid-js" import { useLanguage } from "@/context/language" import { useServer } from "@/context/server" diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index 9f2a17b8..4f1fffca 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -1,8 +1,8 @@ -import { withAlpha } from "@mimo-ai/ui/theme/color" -import { useTheme } from "@mimo-ai/ui/theme/context" -import { resolveThemeVariant } from "@mimo-ai/ui/theme/resolve" -import type { HexColor } from "@mimo-ai/ui/theme/types" -import { showToast } from "@mimo-ai/ui/toast" +import { withAlpha } from "@devora-ai/ui/theme/color" +import { useTheme } from "@devora-ai/ui/theme/context" +import { resolveThemeVariant } from "@devora-ai/ui/theme/resolve" +import type { HexColor } from "@devora-ai/ui/theme/types" +import { showToast } from "@devora-ai/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" @@ -171,7 +171,7 @@ export const Terminal = (props: TerminalProps) => { const client = sdk.client const url = sdk.url const auth = server.current?.http - const username = auth?.username ?? "opencode" + const username = auth?.username ?? "devora" const password = auth?.password ?? "" const sameOrigin = new URL(url, location.href).origin === location.origin let container!: HTMLDivElement diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index 03c2212e..3bcfa2d5 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/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 "@mimo-ai/ui/icon-button" -import { Icon } from "@mimo-ai/ui/icon" -import { Button } from "@mimo-ai/ui/button" -import { Tooltip, TooltipKeybind } from "@mimo-ai/ui/tooltip" -import { useTheme } from "@mimo-ai/ui/theme/context" +import { IconButton } from "@devora-ai/ui/icon-button" +import { Icon } from "@devora-ai/ui/icon" +import { Button } from "@devora-ai/ui/button" +import { Tooltip, TooltipKeybind } from "@devora-ai/ui/tooltip" +import { useTheme } from "@devora-ai/ui/theme/context" import { useLayout } from "@/context/layout" import { usePlatform } from "@/context/platform" @@ -80,7 +80,7 @@ export function Titlebar() { const canBack = createMemo(() => history.index > 0) const canForward = createMemo(() => history.index < history.stack.length - 1) const hasProjects = createMemo(() => layout.projects.list().length > 0) - const nav = createMemo(() => import.meta.env.VITE_OPENCODE_CHANNEL !== "beta" || settings.general.showNavigation()) + const nav = createMemo(() => import.meta.env.VITE_DEVORA_CHANNEL !== "beta" || settings.general.showNavigation()) const back = () => { const next = backPath(history) @@ -287,10 +287,10 @@ export function Titlebar() {
-
- {["beta", "dev"].includes(import.meta.env.VITE_OPENCODE_CHANNEL) && ( +
+ {["beta", "dev"].includes(import.meta.env.VITE_DEVORA_CHANNEL) && (
- {import.meta.env.VITE_OPENCODE_CHANNEL.toUpperCase()} + {import.meta.env.VITE_DEVORA_CHANNEL.toUpperCase()}
)}
@@ -299,7 +299,7 @@ export function Titlebar() {
-
+
-
+
{!tauriApi() &&
}
diff --git a/packages/app/src/context/command.tsx b/packages/app/src/context/command.tsx index 59395940..ee545389 100644 --- a/packages/app/src/context/command.tsx +++ b/packages/app/src/context/command.tsx @@ -1,5 +1,5 @@ -import { createSimpleContext } from "@mimo-ai/ui/context" -import { useDialog } from "@mimo-ai/ui/context/dialog" +import { createSimpleContext } from "@devora-ai/ui/context" +import { useDialog } from "@devora-ai/ui/context/dialog" import { type Accessor, createEffect, createMemo, onCleanup, onMount } from "solid-js" import { createStore } from "solid-js/store" import { makeEventListener } from "@solid-primitives/event-listener" diff --git a/packages/app/src/context/comments.test.ts b/packages/app/src/context/comments.test.ts index c9cb4316..0a804fbf 100644 --- a/packages/app/src/context/comments.test.ts +++ b/packages/app/src/context/comments.test.ts @@ -9,7 +9,7 @@ beforeAll(async () => { useNavigate: () => () => undefined, useParams: () => ({}), })) - mock.module("@mimo-ai/ui/context", () => ({ + mock.module("@devora-ai/ui/context", () => ({ createSimpleContext: () => ({ use: () => undefined, provider: () => undefined, diff --git a/packages/app/src/context/comments.tsx b/packages/app/src/context/comments.tsx index d1aaf68f..ad519f58 100644 --- a/packages/app/src/context/comments.tsx +++ b/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 "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/ui/context" import { useParams } from "@solidjs/router" import { Persist, persisted } from "@/utils/persist" import { createScopedCache } from "@/utils/scoped-cache" diff --git a/packages/app/src/context/file.tsx b/packages/app/src/context/file.tsx index dc5aea6d..2c1df662 100644 --- a/packages/app/src/context/file.tsx +++ b/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 "@mimo-ai/ui/context" -import { showToast } from "@mimo-ai/ui/toast" +import { createSimpleContext } from "@devora-ai/ui/context" +import { showToast } from "@devora-ai/ui/toast" import { useParams } from "@solidjs/router" -import { getFilename } from "@mimo-ai/shared/util/path" +import { getFilename } from "@devora-ai/shared/util/path" import { useSDK } from "./sdk" import { useSync } from "./sync" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/context/file/content-cache.ts b/packages/app/src/context/file/content-cache.ts index d57251cb..cddd8575 100644 --- a/packages/app/src/context/file/content-cache.ts +++ b/packages/app/src/context/file/content-cache.ts @@ -1,4 +1,4 @@ -import type { FileContent } from "@mimo-ai/sdk/v2" +import type { FileContent } from "@devora-ai/sdk/v2" const MAX_FILE_CONTENT_ENTRIES = 40 const MAX_FILE_CONTENT_BYTES = 20 * 1024 * 1024 diff --git a/packages/app/src/context/file/path.test.ts b/packages/app/src/context/file/path.test.ts index feef6d46..ef4d2364 100644 --- a/packages/app/src/context/file/path.test.ts +++ b/packages/app/src/context/file/path.test.ts @@ -86,12 +86,12 @@ describe("encodeFilePath", () => { describe("macOS paths", () => { test("should handle macOS absolute path", () => { - const macPath = "/Users/kelvin/Projects/opencode/README.md" + const macPath = "/Users/kelvin/Projects/devora/README.md" const result = encodeFilePath(macPath) const fileUrl = `file://${result}` expect(() => new URL(fileUrl)).not.toThrow() - expect(result).toBe("/Users/kelvin/Projects/opencode/README.md") + expect(result).toBe("/Users/kelvin/Projects/devora/README.md") }) test("should handle macOS path with spaces", () => { @@ -106,7 +106,7 @@ describe("encodeFilePath", () => { describe("Windows paths", () => { test("should handle Windows absolute path with backslashes", () => { - const windowsPath = "D:\\dev\\projects\\opencode\\README.bs.md" + const windowsPath = "D:\\dev\\projects\\devora\\README.bs.md" const result = encodeFilePath(windowsPath) const fileUrl = `file://${result}` @@ -116,17 +116,17 @@ describe("encodeFilePath", () => { const url = new URL(fileUrl) expect(url.protocol).toBe("file:") expect(url.pathname).toContain("README.bs.md") - expect(result).toBe("/D:/dev/projects/opencode/README.bs.md") + expect(result).toBe("/D:/dev/projects/devora/README.bs.md") }) test("should handle mixed separator path (Windows + Unix)", () => { // This is what happens in build-request-parts.ts when concatenating paths - const mixedPath = "D:\\dev\\projects\\opencode/README.bs.md" + const mixedPath = "D:\\dev\\projects\\devora/README.bs.md" const result = encodeFilePath(mixedPath) const fileUrl = `file://${result}` expect(() => new URL(fileUrl)).not.toThrow() - expect(result).toBe("/D:/dev/projects/opencode/README.bs.md") + expect(result).toBe("/D:/dev/projects/devora/README.bs.md") }) test("should handle Windows path with spaces", () => { @@ -167,13 +167,13 @@ describe("encodeFilePath", () => { test("should NOT create invalid URL like the bug report", () => { // This is the exact scenario from bug report by @alexyaroshuk - const windowsPath = "D:\\dev\\projects\\opencode\\README.bs.md" + const windowsPath = "D:\\dev\\projects\\devora\\README.bs.md" const result = encodeFilePath(windowsPath) const fileUrl = `file://${result}` - // The bug was creating: file://D%3A%5Cdev%5Cprojects%5Copencode/README.bs.md + // The bug was creating: file://D%3A%5Cdev%5Cprojects%5Cdevora/README.bs.md expect(result).not.toContain("%5C") // Should not have encoded backslashes - expect(result).not.toBe("D%3A%5Cdev%5Cprojects%5Copencode/README.bs.md") + expect(result).not.toBe("D%3A%5Cdev%5Cprojects%5Cdevora/README.bs.md") // Should be valid expect(() => new URL(fileUrl)).not.toThrow() diff --git a/packages/app/src/context/file/tree-store.ts b/packages/app/src/context/file/tree-store.ts index 424b492d..8f2df185 100644 --- a/packages/app/src/context/file/tree-store.ts +++ b/packages/app/src/context/file/tree-store.ts @@ -1,5 +1,5 @@ import { createStore, produce, reconcile } from "solid-js/store" -import type { FileNode } from "@mimo-ai/sdk/v2" +import type { FileNode } from "@devora-ai/sdk/v2" type DirectoryState = { expanded: boolean diff --git a/packages/app/src/context/file/types.ts b/packages/app/src/context/file/types.ts index e234372b..6d7cf3f6 100644 --- a/packages/app/src/context/file/types.ts +++ b/packages/app/src/context/file/types.ts @@ -1,4 +1,4 @@ -import type { FileContent } from "@mimo-ai/sdk/v2" +import type { FileContent } from "@devora-ai/sdk/v2" export type FileSelection = { startLine: number diff --git a/packages/app/src/context/file/watcher.ts b/packages/app/src/context/file/watcher.ts index c10ffedb..e26a7bfa 100644 --- a/packages/app/src/context/file/watcher.ts +++ b/packages/app/src/context/file/watcher.ts @@ -1,4 +1,4 @@ -import type { FileNode } from "@mimo-ai/sdk/v2" +import type { FileNode } from "@devora-ai/sdk/v2" type WatcherEvent = { type: string diff --git a/packages/app/src/context/global-sdk.tsx b/packages/app/src/context/global-sdk.tsx index 6fcd890f..5826af33 100644 --- a/packages/app/src/context/global-sdk.tsx +++ b/packages/app/src/context/global-sdk.tsx @@ -1,5 +1,5 @@ -import type { Event } from "@mimo-ai/sdk/v2/client" -import { createSimpleContext } from "@mimo-ai/ui/context" +import type { Event } from "@devora-ai/sdk/v2/client" +import { createSimpleContext } from "@devora-ai/ui/context" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { makeEventListener } from "@solid-primitives/event-listener" import { batch, onCleanup, onMount } from "solid-js" diff --git a/packages/app/src/context/global-sync.tsx b/packages/app/src/context/global-sync.tsx index f53fcce1..35217239 100644 --- a/packages/app/src/context/global-sync.tsx +++ b/packages/app/src/context/global-sync.tsx @@ -1,14 +1,14 @@ import type { Config, - OpencodeClient, + DevoraClient, Path, Project, ProviderAuthResponse, ProviderListResponse, Todo, -} from "@mimo-ai/sdk/v2/client" -import { showToast } from "@mimo-ai/ui/toast" -import { getFilename } from "@mimo-ai/shared/util/path" +} from "@devora-ai/sdk/v2/client" +import { showToast } from "@devora-ai/ui/toast" +import { getFilename } from "@devora-ai/shared/util/path" import { batch, createContext, getOwner, onCleanup, onMount, type ParentProps, untrack, useContext } from "solid-js" import { createStore, produce, reconcile, unwrap } from "solid-js/store" import { useLanguage } from "@/context/language" @@ -51,7 +51,7 @@ function createGlobalSync() { const owner = getOwner() if (!owner) throw new Error("GlobalSync must be created within owner") - const sdkCache = new Map() + const sdkCache = new Map() const booting = new Map>() const sessionLoads = new Map>() const sessionMeta = new Map() diff --git a/packages/app/src/context/global-sync/bootstrap.ts b/packages/app/src/context/global-sync/bootstrap.ts index b59ccbb8..4e02e79e 100644 --- a/packages/app/src/context/global-sync/bootstrap.ts +++ b/packages/app/src/context/global-sync/bootstrap.ts @@ -1,6 +1,6 @@ import type { Config, - OpencodeClient, + DevoraClient, Path, PermissionRequest, Project, @@ -9,10 +9,10 @@ import type { QuestionRequest, Session, Todo, -} from "@mimo-ai/sdk/v2/client" -import { showToast } from "@mimo-ai/ui/toast" -import { getFilename } from "@mimo-ai/shared/util/path" -import { retry } from "@mimo-ai/shared/util/retry" +} from "@devora-ai/sdk/v2/client" +import { showToast } from "@devora-ai/ui/toast" +import { getFilename } from "@devora-ai/shared/util/path" +import { retry } from "@devora-ai/shared/util/retry" import { batch } from "solid-js" import { reconcile, type SetStoreFunction, type Store } from "solid-js/store" import type { State, VcsCache } from "./types" @@ -67,7 +67,7 @@ function runAll(list: Array<() => Promise>) { } export async function bootstrapGlobal(input: { - globalSDK: OpencodeClient + globalSDK: DevoraClient requestFailedTitle: string translate: (key: string, vars?: Record) => string formatMoreCount: (count: number) => string @@ -106,7 +106,7 @@ export async function bootstrapGlobal(input: { input.globalSDK.project.list().then((x) => { const projects = (x.data ?? []) .filter((p) => !!p?.id) - .filter((p) => !!p.worktree && !p.worktree.includes("opencode-test")) + .filter((p) => !!p.worktree && !p.worktree.includes("devora-test")) .slice() .sort((a, b) => cmp(a.id, b.id)) input.setGlobalStore("project", projects) @@ -163,7 +163,7 @@ function warmSessions(input: { ids: string[] store: Store setStore: SetStoreFunction - sdk: OpencodeClient + sdk: DevoraClient }) { const known = new Set(input.store.session.map((item) => item.id)) const ids = [...new Set(input.ids)].filter((id) => !!id && !known.has(id)) @@ -184,8 +184,8 @@ export const loadProvidersQuery = (directory: string | null) => export const loadAgentsQuery = ( directory: string | null, - sdk?: OpencodeClient, - transform?: (x: Awaited>) => void, + sdk?: DevoraClient, + transform?: (x: Awaited>) => void, ) => queryOptions({ queryKey: [directory, "agents"], @@ -203,8 +203,8 @@ export const loadAgentsQuery = ( export const loadPathQuery = ( directory: string | null, - sdk?: OpencodeClient, - transform?: (x: Awaited>) => void, + sdk?: DevoraClient, + transform?: (x: Awaited>) => void, ) => queryOptions({ queryKey: [directory, "path"], @@ -222,7 +222,7 @@ export const loadPathQuery = ( export async function bootstrapDirectory(input: { directory: string - sdk: OpencodeClient + sdk: DevoraClient store: Store setStore: SetStoreFunction vcsCache: VcsCache diff --git a/packages/app/src/context/global-sync/child-store.ts b/packages/app/src/context/global-sync/child-store.ts index 2f13069d..30bb5c4d 100644 --- a/packages/app/src/context/global-sync/child-store.ts +++ b/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 "@mimo-ai/sdk/v2/client" +import type { VcsInfo } from "@devora-ai/sdk/v2/client" import { DIR_IDLE_TTL_MS, MAX_DIR_STORES, diff --git a/packages/app/src/context/global-sync/event-reducer.test.ts b/packages/app/src/context/global-sync/event-reducer.test.ts index d6d9bdf0..3230dae2 100644 --- a/packages/app/src/context/global-sync/event-reducer.test.ts +++ b/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 "@mimo-ai/sdk/v2/client" +import type { Message, Part, PermissionRequest, Project, QuestionRequest, Session } from "@devora-ai/sdk/v2/client" import { createStore } from "solid-js/store" import type { State } from "./types" import { applyDirectoryEvent, applyGlobalEvent, cleanupDroppedSessionCaches } from "./event-reducer" diff --git a/packages/app/src/context/global-sync/event-reducer.ts b/packages/app/src/context/global-sync/event-reducer.ts index c2db1394..4c78507c 100644 --- a/packages/app/src/context/global-sync/event-reducer.ts +++ b/packages/app/src/context/global-sync/event-reducer.ts @@ -1,4 +1,4 @@ -import { Binary } from "@mimo-ai/shared/util/binary" +import { Binary } from "@devora-ai/shared/util/binary" import { produce, reconcile, type SetStoreFunction, type Store } from "solid-js/store" import type { Message, @@ -10,7 +10,7 @@ import type { SessionStatus, SnapshotFileDiff, Todo, -} from "@mimo-ai/sdk/v2/client" +} from "@devora-ai/sdk/v2/client" import type { State, VcsCache } from "./types" import { trimSessions } from "./session-trim" import { dropSessionCaches } from "./session-cache" diff --git a/packages/app/src/context/global-sync/session-cache.test.ts b/packages/app/src/context/global-sync/session-cache.test.ts index fa142617..e0388296 100644 --- a/packages/app/src/context/global-sync/session-cache.test.ts +++ b/packages/app/src/context/global-sync/session-cache.test.ts @@ -7,7 +7,7 @@ import type { SessionStatus, SnapshotFileDiff, Todo, -} from "@mimo-ai/sdk/v2/client" +} from "@devora-ai/sdk/v2/client" import { dropSessionCaches, pickSessionCacheEvictions } from "./session-cache" const msg = (id: string, sessionID: string) => diff --git a/packages/app/src/context/global-sync/session-cache.ts b/packages/app/src/context/global-sync/session-cache.ts index 9ec49db6..8c1d62ef 100644 --- a/packages/app/src/context/global-sync/session-cache.ts +++ b/packages/app/src/context/global-sync/session-cache.ts @@ -6,7 +6,7 @@ import type { SessionStatus, SnapshotFileDiff, Todo, -} from "@mimo-ai/sdk/v2/client" +} from "@devora-ai/sdk/v2/client" export const SESSION_CACHE_LIMIT = 40 diff --git a/packages/app/src/context/global-sync/session-trim.test.ts b/packages/app/src/context/global-sync/session-trim.test.ts index f17ad502..a4c52de5 100644 --- a/packages/app/src/context/global-sync/session-trim.test.ts +++ b/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 "@mimo-ai/sdk/v2/client" +import type { PermissionRequest, Session } from "@devora-ai/sdk/v2/client" import { trimSessions } from "./session-trim" const session = (input: { id: string; parentID?: string; created: number; updated?: number; archived?: number }) => diff --git a/packages/app/src/context/global-sync/session-trim.ts b/packages/app/src/context/global-sync/session-trim.ts index 083d5f19..008b7a25 100644 --- a/packages/app/src/context/global-sync/session-trim.ts +++ b/packages/app/src/context/global-sync/session-trim.ts @@ -1,4 +1,4 @@ -import type { PermissionRequest, Session } from "@mimo-ai/sdk/v2/client" +import type { PermissionRequest, Session } from "@devora-ai/sdk/v2/client" import { cmp } from "./utils" import { SESSION_RECENT_LIMIT, SESSION_RECENT_WINDOW } from "./types" diff --git a/packages/app/src/context/global-sync/types.ts b/packages/app/src/context/global-sync/types.ts index 91f25c11..1737ebdb 100644 --- a/packages/app/src/context/global-sync/types.ts +++ b/packages/app/src/context/global-sync/types.ts @@ -15,7 +15,7 @@ import type { SnapshotFileDiff, Todo, VcsInfo, -} from "@mimo-ai/sdk/v2/client" +} from "@devora-ai/sdk/v2/client" import type { Accessor } from "solid-js" import type { SetStoreFunction, Store } from "solid-js/store" diff --git a/packages/app/src/context/global-sync/utils.test.ts b/packages/app/src/context/global-sync/utils.test.ts index 359d3418..14a2ff98 100644 --- a/packages/app/src/context/global-sync/utils.test.ts +++ b/packages/app/src/context/global-sync/utils.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { Agent } from "@mimo-ai/sdk/v2/client" +import type { Agent } from "@devora-ai/sdk/v2/client" import { normalizeAgentList } from "./utils" const agent = (name = "build") => diff --git a/packages/app/src/context/global-sync/utils.ts b/packages/app/src/context/global-sync/utils.ts index b7d27bbe..b21bf566 100644 --- a/packages/app/src/context/global-sync/utils.ts +++ b/packages/app/src/context/global-sync/utils.ts @@ -1,4 +1,4 @@ -import type { Agent, Project, ProviderListResponse } from "@mimo-ai/sdk/v2/client" +import type { Agent, Project, ProviderListResponse } from "@devora-ai/sdk/v2/client" export const cmp = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0) diff --git a/packages/app/src/context/highlights.tsx b/packages/app/src/context/highlights.tsx index 3c181d04..e17d9d49 100644 --- a/packages/app/src/context/highlights.tsx +++ b/packages/app/src/context/highlights.tsx @@ -1,13 +1,13 @@ import { createEffect, onCleanup } from "solid-js" import { createStore } from "solid-js/store" -import { createSimpleContext } from "@mimo-ai/ui/context" -import { useDialog } from "@mimo-ai/ui/context/dialog" +import { createSimpleContext } from "@devora-ai/ui/context" +import { useDialog } from "@devora-ai/ui/context/dialog" import { usePlatform } from "@/context/platform" import { useSettings } from "@/context/settings" import { persisted } from "@/utils/persist" import { DialogReleaseNotes, type Highlight } from "@/components/dialog-release-notes" -const CHANGELOG_URL = "https://opencode.ai/changelog.json" +const CHANGELOG_URL = "https://devora.ai/changelog.json" type Store = { version?: string diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index a6215abe..b3767ae8 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -1,10 +1,10 @@ import * as i18n from "@solid-primitives/i18n" import { createEffect, createMemo, createResource } from "solid-js" import { createStore } from "solid-js/store" -import { createSimpleContext } from "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/ui/context" import { Persist, persisted } from "@/utils/persist" import { dict as en } from "@/i18n/en" -import { dict as uiEn } from "@mimo-ai/ui/i18n/en" +import { dict as uiEn } from "@devora-ai/ui/i18n/en" export type Locale = | "en" @@ -100,22 +100,22 @@ const merge = (app: Promise, ui: Promise) => Promise.all([app, ui]).then(([a, b]) => ({ ...base, ...i18n.flatten({ ...a.dict, ...b.dict }) }) as Dictionary) const loaders: Record, () => Promise> = { - zh: () => merge(import("@/i18n/zh"), import("@mimo-ai/ui/i18n/zh")), - zht: () => merge(import("@/i18n/zht"), import("@mimo-ai/ui/i18n/zht")), - ko: () => merge(import("@/i18n/ko"), import("@mimo-ai/ui/i18n/ko")), - de: () => merge(import("@/i18n/de"), import("@mimo-ai/ui/i18n/de")), - es: () => merge(import("@/i18n/es"), import("@mimo-ai/ui/i18n/es")), - fr: () => merge(import("@/i18n/fr"), import("@mimo-ai/ui/i18n/fr")), - da: () => merge(import("@/i18n/da"), import("@mimo-ai/ui/i18n/da")), - ja: () => merge(import("@/i18n/ja"), import("@mimo-ai/ui/i18n/ja")), - pl: () => merge(import("@/i18n/pl"), import("@mimo-ai/ui/i18n/pl")), - ru: () => merge(import("@/i18n/ru"), import("@mimo-ai/ui/i18n/ru")), - ar: () => merge(import("@/i18n/ar"), import("@mimo-ai/ui/i18n/ar")), - no: () => merge(import("@/i18n/no"), import("@mimo-ai/ui/i18n/no")), - br: () => merge(import("@/i18n/br"), import("@mimo-ai/ui/i18n/br")), - th: () => merge(import("@/i18n/th"), import("@mimo-ai/ui/i18n/th")), - bs: () => merge(import("@/i18n/bs"), import("@mimo-ai/ui/i18n/bs")), - tr: () => merge(import("@/i18n/tr"), import("@mimo-ai/ui/i18n/tr")), + zh: () => merge(import("@/i18n/zh"), import("@devora-ai/ui/i18n/zh")), + zht: () => merge(import("@/i18n/zht"), import("@devora-ai/ui/i18n/zht")), + ko: () => merge(import("@/i18n/ko"), import("@devora-ai/ui/i18n/ko")), + de: () => merge(import("@/i18n/de"), import("@devora-ai/ui/i18n/de")), + es: () => merge(import("@/i18n/es"), import("@devora-ai/ui/i18n/es")), + fr: () => merge(import("@/i18n/fr"), import("@devora-ai/ui/i18n/fr")), + da: () => merge(import("@/i18n/da"), import("@devora-ai/ui/i18n/da")), + ja: () => merge(import("@/i18n/ja"), import("@devora-ai/ui/i18n/ja")), + pl: () => merge(import("@/i18n/pl"), import("@devora-ai/ui/i18n/pl")), + ru: () => merge(import("@/i18n/ru"), import("@devora-ai/ui/i18n/ru")), + ar: () => merge(import("@/i18n/ar"), import("@devora-ai/ui/i18n/ar")), + no: () => merge(import("@/i18n/no"), import("@devora-ai/ui/i18n/no")), + br: () => merge(import("@/i18n/br"), import("@devora-ai/ui/i18n/br")), + th: () => merge(import("@/i18n/th"), import("@devora-ai/ui/i18n/th")), + bs: () => merge(import("@/i18n/bs"), import("@devora-ai/ui/i18n/bs")), + tr: () => merge(import("@/i18n/tr"), import("@devora-ai/ui/i18n/tr")), } function loadDict(locale: Locale) { @@ -177,7 +177,7 @@ export function normalizeLocale(value: string): Locale { function readStoredLocale() { if (typeof localStorage !== "object") return try { - const raw = localStorage.getItem("opencode.global.dat:language") + const raw = localStorage.getItem("devora.global.dat:language") if (!raw) return const next = JSON.parse(raw) as { locale?: string } if (typeof next?.locale !== "string") return diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index 57cbb716..48139b39 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -1,12 +1,12 @@ import { createStore, produce } from "solid-js/store" import { batch, createEffect, createMemo, onCleanup, onMount, type Accessor } from "solid-js" -import { createSimpleContext } from "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/ui/context" import { makeEventListener } from "@solid-primitives/event-listener" import { useGlobalSync } from "./global-sync" import { useGlobalSDK } from "./global-sdk" import { useServer } from "./server" import { usePlatform } from "./platform" -import { Project } from "@mimo-ai/sdk/v2" +import { Project } from "@devora-ai/sdk/v2" import { Persist, persisted, removePersisted } from "@/utils/persist" import { decode64 } from "@/utils/base64" import { same } from "@/utils/same" diff --git a/packages/app/src/context/local.tsx b/packages/app/src/context/local.tsx index 1ad4151e..64c5d478 100644 --- a/packages/app/src/context/local.tsx +++ b/packages/app/src/context/local.tsx @@ -1,12 +1,13 @@ -import { createSimpleContext } from "@mimo-ai/ui/context" -import { base64Encode } from "@mimo-ai/shared/util/encode" +import { createSimpleContext } from "@devora-ai/ui/context" +import { base64Encode } from "@devora-ai/shared/util/encode" import { useParams } from "@solidjs/router" import { batch, createEffect, createMemo } from "solid-js" import { createStore } from "solid-js/store" import { useModels } from "@/context/models" import { useProviders } from "@/hooks/use-providers" import { Persist, persisted } from "@/utils/persist" -import { cycleModelVariant, getConfiguredAgentVariant, resolveModelVariant } from "./model-variant" +import { cycleModelVariant, getConfiguredAgentVariant, modelVariantList, resolveModelVariant } from "./model-variant" +import { parseModelRef } from "./model-ref" import { useSDK } from "./sdk" import { useSync } from "./sync" @@ -141,9 +142,8 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ }) const configuredModel = () => { - if (!sync.data.config.model) return - const [providerID, modelID] = sync.data.config.model.split("/") - const model = { providerID, modelID } + const model = parseModelRef(sync.data.config.model) + if (!model) return if (validModel(model)) return model } @@ -153,6 +153,12 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } } + const savedVariant = (model: ModelKey | undefined) => { + if (!model) return undefined + const variant = models.variant.get(model) + return variant === "default" ? null : variant + } + const defaultModel = () => { const defaults = providers.default() for (const provider of providers.connected()) { @@ -184,18 +190,19 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } batch(() => { + const variant = item.variant ?? savedVariant(item.model) setStore("current", item.name) setStore("last", { type: "agent", agent: item.name, model: item.model, - variant: item.variant ?? null, + variant: variant ?? null, }) const prev = scope() const next = { agent: item.name, model: item.model ?? prev?.model, - variant: item.variant ?? prev?.variant, + variant: variant === undefined ? prev?.variant : variant, } satisfies State const session = id() if (session) { @@ -241,7 +248,17 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ }) } - const selected = () => scope()?.variant + const selected = () => { + const model = current() + const scoped = scope()?.variant + const value = + scoped !== undefined + ? scoped + : model + ? savedVariant({ providerID: model.provider.id, modelID: model.id }) + : undefined + return value === "default" ? null : value + } const snapshot = () => { const model = current() @@ -297,7 +314,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ model: item ?? null, variant: selected(), }) - write({ model: item }) + write({ model: item, variant: savedVariant(item) }) if (!item) return models.setVisibility(item, true) if (!options?.recent) return @@ -322,8 +339,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ }, list() { const item = current() - if (!item?.variants) return [] - return Object.keys(item.variants) + return modelVariantList(item) }, set(value: string | undefined) { batch(() => { @@ -334,6 +350,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ model: model ? { providerID: model.provider.id, modelID: model.id } : null, variant: value ?? null, }) + if (model) models.variant.set({ providerID: model.provider.id, modelID: model.id }, value ?? null) write({ variant: value ?? null }) }) }, diff --git a/packages/app/src/context/model-ref.test.ts b/packages/app/src/context/model-ref.test.ts new file mode 100644 index 00000000..9d3fd15e --- /dev/null +++ b/packages/app/src/context/model-ref.test.ts @@ -0,0 +1,18 @@ +import { describe, expect, test } from "bun:test" +import { parseModelRef } from "./model-ref" + +describe("parseModelRef", () => { + test("keeps slashes inside model ids", () => { + expect(parseModelRef("nvidia/nvidia/nemotron-3-super-120b-a12b")).toEqual({ + providerID: "nvidia", + modelID: "nvidia/nemotron-3-super-120b-a12b", + }) + }) + + test("rejects missing provider or model", () => { + expect(parseModelRef(undefined)).toBeUndefined() + expect(parseModelRef("nvidia")).toBeUndefined() + expect(parseModelRef("/model")).toBeUndefined() + expect(parseModelRef("provider/")).toBeUndefined() + }) +}) diff --git a/packages/app/src/context/model-ref.ts b/packages/app/src/context/model-ref.ts new file mode 100644 index 00000000..bd60beba --- /dev/null +++ b/packages/app/src/context/model-ref.ts @@ -0,0 +1,14 @@ +export type ModelRef = { + providerID: string + modelID: string +} + +export function parseModelRef(value: string | undefined): ModelRef | undefined { + if (!value) return undefined + const separator = value.indexOf("/") + if (separator <= 0 || separator === value.length - 1) return undefined + return { + providerID: value.slice(0, separator), + modelID: value.slice(separator + 1), + } +} diff --git a/packages/app/src/context/model-variant.test.ts b/packages/app/src/context/model-variant.test.ts index 583bc5c3..1bd440e8 100644 --- a/packages/app/src/context/model-variant.test.ts +++ b/packages/app/src/context/model-variant.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import { cycleModelVariant, getConfiguredAgentVariant, resolveModelVariant } from "./model-variant" +import { cycleModelVariant, getConfiguredAgentVariant, modelVariantList, resolveModelVariant } from "./model-variant" describe("model variant", () => { test("resolves configured agent variant when model matches", () => { @@ -54,6 +54,24 @@ describe("model variant", () => { expect(value).toBeUndefined() }) + test("treats legacy default string as explicit default", () => { + const value = resolveModelVariant({ + variants: ["low", "high", "xhigh"], + selected: "default", + configured: "xhigh", + }) + + expect(value).toBeUndefined() + }) + + test("filters provider default from selectable variants", () => { + const value = modelVariantList({ + variants: { default: {}, low: {}, high: {} }, + }) + + expect(value).toEqual(["low", "high"]) + }) + test("cycles from configured variant to next", () => { const value = cycleModelVariant({ variants: ["low", "high", "xhigh"], @@ -83,4 +101,14 @@ describe("model variant", () => { expect(value).toBe("low") }) + + test("cycles from legacy default string to the first variant", () => { + const value = cycleModelVariant({ + variants: ["low", "high", "xhigh"], + selected: "default", + configured: "xhigh", + }) + + expect(value).toBe("low") + }) }) diff --git a/packages/app/src/context/model-variant.ts b/packages/app/src/context/model-variant.ts index 525acbba..fdfa9598 100644 --- a/packages/app/src/context/model-variant.ts +++ b/packages/app/src/context/model-variant.ts @@ -18,6 +18,11 @@ type VariantInput = { configured: string | undefined } +export function modelVariantList(input: { variants?: Record } | undefined) { + if (!input?.variants) return [] + return Object.keys(input.variants).filter((variant) => variant !== "default") +} + export function getConfiguredAgentVariant(input: { agent: Agent | undefined; model: Model | undefined }) { if (!input.agent?.variant) return undefined if (!input.agent.model) return undefined @@ -29,7 +34,7 @@ export function getConfiguredAgentVariant(input: { agent: Agent | undefined; mod } export function resolveModelVariant(input: VariantInput) { - if (input.selected === null) return undefined + if (input.selected === null || input.selected === "default") return undefined if (input.selected && input.variants.includes(input.selected)) return input.selected if (input.configured && input.variants.includes(input.configured)) return input.configured return undefined @@ -37,7 +42,7 @@ export function resolveModelVariant(input: VariantInput) { export function cycleModelVariant(input: VariantInput) { if (input.variants.length === 0) return undefined - if (input.selected === null) return input.variants[0] + if (input.selected === null || input.selected === "default") return input.variants[0] if (input.selected && input.variants.includes(input.selected)) { const index = input.variants.indexOf(input.selected) if (index === input.variants.length - 1) return undefined diff --git a/packages/app/src/context/models.tsx b/packages/app/src/context/models.tsx index 35a61c8b..77e27d5d 100644 --- a/packages/app/src/context/models.tsx +++ b/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 "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/ui/context" import { useProviders } from "@/hooks/use-providers" import { Persist, persisted } from "@/utils/persist" @@ -13,7 +13,7 @@ type User = ModelKey & { visibility: Visibility; favorite?: boolean } type Store = { user: User[] recent: ModelKey[] - variant?: Record + variant?: Record } const RECENT_LIMIT = 5 @@ -135,7 +135,7 @@ export const { use: useModels, provider: ModelsProvider } = createSimpleContext( const variantKey = (model: ModelKey) => `${model.providerID}/${model.modelID}` const getVariant = (model: ModelKey) => store.variant?.[variantKey(model)] - const setVariant = (model: ModelKey, value: string | undefined) => { + const setVariant = (model: ModelKey, value: string | null | undefined) => { const key = variantKey(model) if (!store.variant) { setStore("variant", { [key]: value }) diff --git a/packages/app/src/context/notification.tsx b/packages/app/src/context/notification.tsx index 896267a4..9a145a6f 100644 --- a/packages/app/src/context/notification.tsx +++ b/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 "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/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 "@mimo-ai/shared/util/binary" -import { base64Encode } from "@mimo-ai/shared/util/encode" +import { Binary } from "@devora-ai/shared/util/binary" +import { base64Encode } from "@devora-ai/shared/util/encode" import { decode64 } from "@/utils/base64" -import { EventSessionError } from "@mimo-ai/sdk/v2" +import { EventSessionError } from "@devora-ai/sdk/v2" import { Persist, persisted } from "@/utils/persist" import { playSoundById } from "@/utils/sound" diff --git a/packages/app/src/context/permission-auto-respond.test.ts b/packages/app/src/context/permission-auto-respond.test.ts index eb9bd253..9a0bc274 100644 --- a/packages/app/src/context/permission-auto-respond.test.ts +++ b/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 "@mimo-ai/sdk/v2/client" -import { base64Encode } from "@mimo-ai/shared/util/encode" +import type { PermissionRequest, Session } from "@devora-ai/sdk/v2/client" +import { base64Encode } from "@devora-ai/shared/util/encode" import { autoRespondsPermission, isDirectoryAutoAccepting } from "./permission-auto-respond" const session = (input: { id: string; parentID?: string }) => diff --git a/packages/app/src/context/permission-auto-respond.ts b/packages/app/src/context/permission-auto-respond.ts index f865d152..d13298cf 100644 --- a/packages/app/src/context/permission-auto-respond.ts +++ b/packages/app/src/context/permission-auto-respond.ts @@ -1,4 +1,4 @@ -import { base64Encode } from "@mimo-ai/shared/util/encode" +import { base64Encode } from "@devora-ai/shared/util/encode" export function acceptKey(sessionID: string, directory?: string) { if (!directory) return sessionID diff --git a/packages/app/src/context/permission.tsx b/packages/app/src/context/permission.tsx index 5459c683..c691b18e 100644 --- a/packages/app/src/context/permission.tsx +++ b/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 "@mimo-ai/ui/context" -import type { PermissionRequest } from "@mimo-ai/sdk/v2/client" +import { createSimpleContext } from "@devora-ai/ui/context" +import type { PermissionRequest } from "@devora-ai/sdk/v2/client" import { Persist, persisted } from "@/utils/persist" import { useGlobalSDK } from "@/context/global-sdk" import { useGlobalSync } from "./global-sync" diff --git a/packages/app/src/context/platform.tsx b/packages/app/src/context/platform.tsx index 5c02b936..907321a7 100644 --- a/packages/app/src/context/platform.tsx +++ b/packages/app/src/context/platform.tsx @@ -1,4 +1,4 @@ -import { createSimpleContext } from "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/ui/context" import type { AsyncStorage, SyncStorage } from "@solid-primitives/storage" import type { Accessor } from "solid-js" import { ServerConnection } from "./server" @@ -55,6 +55,9 @@ export type Platform = { /** Install updates (Tauri only) */ update?(): Promise + /** Install or refresh the terminal CLI from the desktop app */ + installCli?(): Promise + /** Fetch override */ fetch?: typeof fetch diff --git a/packages/app/src/context/prompt.tsx b/packages/app/src/context/prompt.tsx index 0bd485bc..61e87829 100644 --- a/packages/app/src/context/prompt.tsx +++ b/packages/app/src/context/prompt.tsx @@ -1,5 +1,5 @@ -import { createSimpleContext } from "@mimo-ai/ui/context" -import { checksum } from "@mimo-ai/shared/util/encode" +import { createSimpleContext } from "@devora-ai/ui/context" +import { checksum } from "@devora-ai/shared/util/encode" import { useParams } from "@solidjs/router" import { batch, createMemo, createRoot, getOwner, onCleanup } from "solid-js" import { createStore, type SetStoreFunction } from "solid-js/store" diff --git a/packages/app/src/context/sdk.tsx b/packages/app/src/context/sdk.tsx index e2236a3a..7327803f 100644 --- a/packages/app/src/context/sdk.tsx +++ b/packages/app/src/context/sdk.tsx @@ -1,5 +1,5 @@ -import type { Event } from "@mimo-ai/sdk/v2/client" -import { createSimpleContext } from "@mimo-ai/ui/context" +import type { Event } from "@devora-ai/sdk/v2/client" +import { createSimpleContext } from "@devora-ai/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/packages/app/src/context/server.tsx b/packages/app/src/context/server.tsx index 7ede8e19..d9675b55 100644 --- a/packages/app/src/context/server.tsx +++ b/packages/app/src/context/server.tsx @@ -1,4 +1,4 @@ -import { createSimpleContext } from "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/ui/context" import { type Accessor, batch, createEffect, createMemo, onCleanup } from "solid-js" import { createStore } from "solid-js/store" import { Persist, persisted } from "@/utils/persist" diff --git a/packages/app/src/context/settings.tsx b/packages/app/src/context/settings.tsx index 0d80a5a6..7a30d104 100644 --- a/packages/app/src/context/settings.tsx +++ b/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 "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/ui/context" import { persisted } from "@/utils/persist" export interface NotificationSettings { diff --git a/packages/app/src/context/sync-optimistic.test.ts b/packages/app/src/context/sync-optimistic.test.ts index dc3fe181..57f8a9f7 100644 --- a/packages/app/src/context/sync-optimistic.test.ts +++ b/packages/app/src/context/sync-optimistic.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { Message, Part } from "@mimo-ai/sdk/v2/client" +import type { Message, Part } from "@devora-ai/sdk/v2/client" import { applyOptimisticAdd, applyOptimisticRemove, mergeOptimisticPage } from "./sync" type Text = Extract diff --git a/packages/app/src/context/sync.tsx b/packages/app/src/context/sync.tsx index 80759aa7..5832f6ee 100644 --- a/packages/app/src/context/sync.tsx +++ b/packages/app/src/context/sync.tsx @@ -1,8 +1,8 @@ import { batch, createMemo } from "solid-js" import { createStore, produce, reconcile } from "solid-js/store" -import { Binary } from "@mimo-ai/shared/util/binary" -import { retry } from "@mimo-ai/shared/util/retry" -import { createSimpleContext } from "@mimo-ai/ui/context" +import { Binary } from "@devora-ai/shared/util/binary" +import { retry } from "@devora-ai/shared/util/retry" +import { createSimpleContext } from "@devora-ai/ui/context" import { clearSessionPrefetch, getSessionPrefetch, @@ -11,7 +11,7 @@ import { } from "./global-sync/session-prefetch" import { useGlobalSync } from "./global-sync" import { useSDK } from "./sdk" -import type { Message, Part } from "@mimo-ai/sdk/v2/client" +import type { Message, Part } from "@devora-ai/sdk/v2/client" import { SESSION_CACHE_LIMIT, dropSessionCaches, pickSessionCacheEvictions } from "./global-sync/session-cache" import { diffs as list, message as clean } from "@/utils/diffs" diff --git a/packages/app/src/context/terminal.test.ts b/packages/app/src/context/terminal.test.ts index e5934e93..8a45bb67 100644 --- a/packages/app/src/context/terminal.test.ts +++ b/packages/app/src/context/terminal.test.ts @@ -9,7 +9,7 @@ beforeAll(async () => { useNavigate: () => () => undefined, useParams: () => ({}), })) - mock.module("@mimo-ai/ui/context", () => ({ + mock.module("@devora-ai/ui/context", () => ({ createSimpleContext: () => ({ use: () => undefined, provider: () => undefined, diff --git a/packages/app/src/context/terminal.tsx b/packages/app/src/context/terminal.tsx index b926d405..4c77a462 100644 --- a/packages/app/src/context/terminal.tsx +++ b/packages/app/src/context/terminal.tsx @@ -1,5 +1,5 @@ import { createStore, produce } from "solid-js/store" -import { createSimpleContext } from "@mimo-ai/ui/context" +import { createSimpleContext } from "@devora-ai/ui/context" import { batch, createEffect, createMemo, createRoot, on, onCleanup } from "solid-js" import { useParams } from "@solidjs/router" import { useSDK } from "./sdk" diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index b5cbed6e..03f77194 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -9,7 +9,7 @@ import { handleNotificationClick } from "@/utils/notification-click" import pkg from "../package.json" import { ServerConnection } from "./context/server" -const DEFAULT_SERVER_URL_KEY = "opencode.settings.dat:defaultServerUrl" +const DEFAULT_SERVER_URL_KEY = "devora.settings.dat:defaultServerUrl" const getLocale = () => { if (typeof navigator !== "object") return "en" as const @@ -67,7 +67,7 @@ const notify: Platform["notify"] = async (title, description, href) => { const notification = new Notification(title, { body: description ?? "", - icon: "https://opencode.ai/favicon-96x96-v3.png", + icon: "/favicon-96x96-v3.png", }) notification.onclick = () => { @@ -98,9 +98,8 @@ if (!(root instanceof HTMLElement) && import.meta.env.DEV) { } const getCurrentUrl = () => { - if (location.hostname.includes("opencode.ai")) return "http://localhost:4096" if (import.meta.env.DEV) - return `http://${import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"}` + return `http://${import.meta.env.VITE_DEVORA_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_DEVORA_SERVER_PORT ?? "4096"}` return location.origin } diff --git a/packages/app/src/env.d.ts b/packages/app/src/env.d.ts index 9b03d336..51b153c1 100644 --- a/packages/app/src/env.d.ts +++ b/packages/app/src/env.d.ts @@ -1,7 +1,7 @@ interface ImportMetaEnv { - readonly VITE_OPENCODE_SERVER_HOST: string - readonly VITE_OPENCODE_SERVER_PORT: string - readonly VITE_OPENCODE_CHANNEL?: "dev" | "beta" | "prod" + readonly VITE_DEVORA_SERVER_HOST: string + readonly VITE_DEVORA_SERVER_PORT: string + readonly VITE_DEVORA_CHANNEL?: "dev" | "beta" | "prod" } interface ImportMeta { diff --git a/packages/app/src/hooks/use-providers.ts b/packages/app/src/hooks/use-providers.ts index f4ed359d..ba285588 100644 --- a/packages/app/src/hooks/use-providers.ts +++ b/packages/app/src/hooks/use-providers.ts @@ -4,8 +4,8 @@ import { useParams } from "@solidjs/router" import { createMemo } from "solid-js" export const popularProviders = [ - "opencode", - "opencode-go", + "devora", + "devora-go", "anthropic", "github-copilot", "openai", @@ -37,7 +37,7 @@ export function useProviders() { paid: () => { const connected = new Set(providers().connected) return providers().all.filter( - (p) => connected.has(p.id) && (p.id !== "opencode" || Object.values(p.models).some((m) => m.cost?.input)), + (p) => connected.has(p.id) && (p.id !== "devora" || Object.values(p.models).some((m) => m.cost?.input)), ) }, } diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts index 9e9a88c2..86359e2a 100644 --- a/packages/app/src/i18n/ar.ts +++ b/packages/app/src/i18n/ar.ts @@ -90,9 +90,9 @@ export const dict = { "dialog.provider.group.popular": "شائع", "dialog.provider.group.other": "آخر", "dialog.provider.tag.recommended": "موصى به", - "dialog.provider.opencode.note": "نماذج مختارة تتضمن Claude و GPT و Gemini والمزيد", - "dialog.provider.opencode.tagline": "نماذج موثوقة ومحسنة", - "dialog.provider.opencodeGo.tagline": "اشتراك منخفض التكلفة للجميع", + "dialog.provider.devora.note": "نماذج مختارة تتضمن Claude و GPT و Gemini والمزيد", + "dialog.provider.devora.tagline": "نماذج موثوقة ومحسنة", + "dialog.provider.devoraGo.tagline": "اشتراك منخفض التكلفة للجميع", "dialog.provider.anthropic.note": "اتصل باستخدام Claude Pro/Max أو مفتاح API", "dialog.provider.copilot.note": "اتصل باستخدام Copilot أو مفتاح API", "dialog.provider.openai.note": "اتصل باستخدام ChatGPT Pro/Plus أو مفتاح API", @@ -105,7 +105,7 @@ export const dict = { "dialog.model.manage": "إدارة النماذج", "dialog.model.manage.description": "تخصيص النماذج التي تظهر في محدد النماذج.", "dialog.model.manage.provider.toggle": "تبديل جميع نماذج {{provider}}", - "dialog.model.unpaid.freeModels.title": "نماذج مجانية مقدمة من OpenCode", + "dialog.model.unpaid.freeModels.title": "نماذج مجانية مقدمة من Devora", "dialog.model.unpaid.addMore.title": "إضافة المزيد من النماذج من موفرين مشهورين", "dialog.provider.viewAll": "عرض المزيد من الموفرين", "provider.connect.title": "اتصال {{provider}}", @@ -116,21 +116,21 @@ export const dict = { "provider.connect.status.waiting": "في انتظار التفويض...", "provider.connect.status.failed": "فشل التفويض: {{error}}", "provider.connect.apiKey.description": - "أدخل مفتاح واجهة برمجة تطبيقات {{provider}} الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", + "أدخل مفتاح واجهة برمجة تطبيقات {{provider}} الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في Devora.", "provider.connect.apiKey.label": "مفتاح واجهة برمجة تطبيقات {{provider}}", "provider.connect.apiKey.placeholder": "مفتاح API", "provider.connect.apiKey.required": "مفتاح API مطلوب", - "provider.connect.opencodeZen.line1": - "يمنحك OpenCode Zen الوصول إلى مجموعة مختارة من النماذج الموثوقة والمحسنة لوكلاء البرمجة.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "يمنحك Devora Zen الوصول إلى مجموعة مختارة من النماذج الموثوقة والمحسنة لوكلاء البرمجة.", + "provider.connect.devoraZen.line2": "باستخدام مفتاح API واحد، ستحصل على إمكانية الوصول إلى نماذج مثل Claude و GPT و Gemini و GLM والمزيد.", - "provider.connect.opencodeZen.visit.prefix": "قم بزيارة ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " للحصول على مفتاح API الخاص بك.", + "provider.connect.devoraZen.visit.prefix": "قم بزيارة ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " للحصول على مفتاح API الخاص بك.", "provider.connect.oauth.code.visit.prefix": "قم بزيارة ", "provider.connect.oauth.code.visit.link": "هذا الرابط", "provider.connect.oauth.code.visit.suffix": - " للحصول على رمز التفويض الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", + " للحصول على رمز التفويض الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في Devora.", "provider.connect.oauth.code.label": "رمز تفويض {{method}}", "provider.connect.oauth.code.placeholder": "رمز التفويض", "provider.connect.oauth.code.required": "رمز التفويض مطلوب", @@ -138,7 +138,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "قم بزيارة ", "provider.connect.oauth.auto.visit.link": "هذا الرابط", "provider.connect.oauth.auto.visit.suffix": - " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", + " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في Devora.", "provider.connect.oauth.auto.confirmationCode": "رمز التأكيد", "provider.connect.toast.connected.title": "تم توصيل {{provider}}", "provider.connect.toast.connected.description": "نماذج {{provider}} متاحة الآن للاستخدام.", @@ -272,7 +272,7 @@ export const dict = { "dialog.mcp.description": "{{enabled}} من {{total}} مفعل", "dialog.mcp.empty": "لم يتم تكوين MCPs", "dialog.lsp.empty": "تم الكشف تلقائيًا عن LSPs من أنواع الملفات", - "dialog.plugins.empty": "الإضافات المكونة في opencode.json", + "dialog.plugins.empty": "الإضافات المكونة في devora.json", "mcp.status.connected": "متصل", "mcp.status.failed": "فشل", "mcp.status.needs_auth": "يحتاج إلى مصادقة", @@ -281,7 +281,7 @@ export const dict = { "dialog.directory.search.placeholder": "البحث في المجلدات", "dialog.directory.empty": "لم يتم العثور على مجلدات", "dialog.server.title": "الخوادم", - "dialog.server.description": "تبديل خادم OpenCode الذي يتصل به هذا التطبيق.", + "dialog.server.description": "تبديل خادم Devora الذي يتصل به هذا التطبيق.", "dialog.server.search.placeholder": "البحث في الخوادم", "dialog.server.empty": "لا توجد خوادم بعد", "dialog.server.add.title": "إضافة خادم", @@ -395,7 +395,7 @@ export const dict = { "toast.session.unshare.failed.description": "حدث خطأ أثناء إلغاء مشاركة الجلسة", "toast.session.listFailed.title": "فشل تحميل الجلسات لـ {{project}}", "toast.update.title": "تحديث متاح", - "toast.update.description": "نسخة جديدة من OpenCode ({{version}}) متاحة الآن للتثبيت.", + "toast.update.description": "نسخة جديدة من Devora ({{version}}) متاحة الآن للتثبيت.", "toast.update.action.installRestart": "تثبيت وإعادة تشغيل", "toast.update.action.notYet": "ليس الآن", "error.page.title": "حدث خطأ ما", @@ -405,7 +405,7 @@ export const dict = { "error.page.action.checking": "جارٍ التحقق...", "error.page.action.checkUpdates": "التحقق من وجود تحديثات", "error.page.action.updateTo": "تحديث إلى {{version}}", - "error.page.report.prefix": "يرجى الإبلاغ عن هذا الخطأ لفريق OpenCode", + "error.page.report.prefix": "يرجى الإبلاغ عن هذا الخطأ لفريق Devora", "error.page.report.discord": "على Discord", "error.page.version": "الإصدار: {{version}}", "error.dev.rootNotFound": @@ -420,8 +420,8 @@ export const dict = { "error.chain.responseBody": "نص الاستجابة:\n{{body}}", "error.chain.didYouMean": "هل كنت تعني: {{suggestions}}", "error.chain.modelNotFound": "النموذج غير موجود: {{provider}}/{{model}}", - "error.chain.checkConfig": "تحقق من أسماء الموفر/النموذج في التكوين (opencode.json)", - "error.chain.mcpFailed": 'فشل خادم MCP "{{name}}". لاحظ أن OpenCode لا يدعم مصادقة MCP بعد.', + "error.chain.checkConfig": "تحقق من أسماء الموفر/النموذج في التكوين (devora.json)", + "error.chain.mcpFailed": 'فشل خادم MCP "{{name}}". لاحظ أن Devora لا يدعم مصادقة MCP بعد.', "error.chain.providerAuthFailed": "فشلت مصادقة الموفر ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'فشل تهيئة الموفر "{{provider}}". تحقق من بيانات الاعتماد والتكوين.', "error.chain.configJsonInvalid": "ملف التكوين في {{path}} ليس JSON(C) صالحًا", @@ -537,19 +537,19 @@ export const dict = { "sidebar.workspaces.enable": "تمكين مساحات العمل", "sidebar.workspaces.disable": "تعطيل مساحات العمل", "sidebar.gettingStarted.title": "البدء", - "sidebar.gettingStarted.line1": "يتضمن OpenCode نماذج مجانية حتى تتمكن من البدء فورًا.", + "sidebar.gettingStarted.line1": "يتضمن Devora نماذج مجانية حتى تتمكن من البدء فورًا.", "sidebar.gettingStarted.line2": "قم بتوصيل أي موفر لاستخدام النماذج، بما في ذلك Claude و GPT و Gemini وما إلى ذلك.", "sidebar.project.recentSessions": "الجلسات الحديثة", "sidebar.project.viewAllSessions": "عرض جميع الجلسات", "sidebar.project.clearNotifications": "مسح الإشعارات", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "سطح المكتب", "settings.section.server": "الخادم", "settings.tab.general": "عام", "settings.tab.shortcuts": "اختصارات", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "تكامل WSL", - "settings.desktop.wsl.description": "تشغيل خادم OpenCode داخل WSL على Windows.", + "settings.desktop.wsl.description": "تشغيل خادم Devora داخل WSL على Windows.", "settings.general.section.appearance": "المظهر", "settings.general.section.notifications": "إشعارات النظام", "settings.general.section.updates": "التحديثات", @@ -557,13 +557,13 @@ export const dict = { "settings.general.section.feed": "الخلاصة", "settings.general.section.display": "شاشة العرض", "settings.general.row.language.title": "اللغة", - "settings.general.row.language.description": "تغيير لغة العرض لـ OpenCode", + "settings.general.row.language.description": "تغيير لغة العرض لـ Devora", "settings.general.row.appearance.title": "المظهر", - "settings.general.row.appearance.description": "تخصيص كيفية ظهور OpenCode على جهازك", + "settings.general.row.appearance.description": "تخصيص كيفية ظهور Devora على جهازك", "settings.general.row.colorScheme.title": "مخطط الألوان", - "settings.general.row.colorScheme.description": "اختر ما إذا كان OpenCode يتبع سمة النظام أو الفاتح أو الداكن", + "settings.general.row.colorScheme.description": "اختر ما إذا كان Devora يتبع سمة النظام أو الفاتح أو الداكن", "settings.general.row.theme.title": "السمة", - "settings.general.row.theme.description": "تخصيص سمة OpenCode.", + "settings.general.row.theme.description": "تخصيص سمة Devora.", "settings.general.row.font.title": "خط الكود", "settings.general.row.font.description": "خصّص الخط المستخدم في كتل التعليمات البرمجية", "settings.general.row.terminalFont.title": "Terminal Font", @@ -589,13 +589,13 @@ export const dict = { "settings.general.row.releaseNotes.title": "ملاحظات الإصدار", "settings.general.row.releaseNotes.description": 'عرض نوافذ "ما الجديد" المنبثقة بعد التحديثات', "settings.updates.row.startup.title": "التحقق من التحديثات عند بدء التشغيل", - "settings.updates.row.startup.description": "التحقق تلقائيًا من التحديثات عند تشغيل OpenCode", + "settings.updates.row.startup.description": "التحقق تلقائيًا من التحديثات عند تشغيل Devora", "settings.updates.row.check.title": "التحقق من التحديثات", "settings.updates.row.check.description": "التحقق يدويًا من التحديثات وتثبيتها إذا كانت متاحة", "settings.updates.action.checkNow": "تحقق الآن", "settings.updates.action.checking": "جارٍ التحقق...", "settings.updates.toast.latest.title": "أنت على آخر إصدار", - "settings.updates.toast.latest.description": "أنت تستخدم أحدث إصدار من OpenCode.", + "settings.updates.toast.latest.description": "أنت تستخدم أحدث إصدار من Devora.", "sound.option.none": "بلا", "sound.option.alert01": "تنبيه 01", "sound.option.alert02": "تنبيه 02", diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts index 5fd1aee7..15b1d9c5 100644 --- a/packages/app/src/i18n/br.ts +++ b/packages/app/src/i18n/br.ts @@ -90,9 +90,9 @@ export const dict = { "dialog.provider.group.popular": "Popular", "dialog.provider.group.other": "Outro", "dialog.provider.tag.recommended": "Recomendado", - "dialog.provider.opencode.note": "Modelos selecionados incluindo Claude, GPT, Gemini e mais", - "dialog.provider.opencode.tagline": "Modelos otimizados e confiáveis", - "dialog.provider.opencodeGo.tagline": "Assinatura de baixo custo para todos", + "dialog.provider.devora.note": "Modelos selecionados incluindo Claude, GPT, Gemini e mais", + "dialog.provider.devora.tagline": "Modelos otimizados e confiáveis", + "dialog.provider.devoraGo.tagline": "Assinatura de baixo custo para todos", "dialog.provider.anthropic.note": "Conectar com Claude Pro/Max ou chave de API", "dialog.provider.copilot.note": "Conectar com Copilot ou chave de API", "dialog.provider.openai.note": "Conectar com ChatGPT Pro/Plus ou chave de API", @@ -105,7 +105,7 @@ export const dict = { "dialog.model.manage": "Gerenciar modelos", "dialog.model.manage.description": "Personalizar quais modelos aparecem no seletor de modelos.", "dialog.model.manage.provider.toggle": "Alternar todos os modelos {{provider}}", - "dialog.model.unpaid.freeModels.title": "Modelos gratuitos fornecidos pelo OpenCode", + "dialog.model.unpaid.freeModels.title": "Modelos gratuitos fornecidos pelo Devora", "dialog.model.unpaid.addMore.title": "Adicionar mais modelos de provedores populares", "dialog.provider.viewAll": "Ver mais provedores", "provider.connect.title": "Conectar {{provider}}", @@ -116,21 +116,21 @@ export const dict = { "provider.connect.status.waiting": "Aguardando autorização...", "provider.connect.status.failed": "Autorização falhou: {{error}}", "provider.connect.apiKey.description": - "Digite sua chave de API do {{provider}} para conectar sua conta e usar modelos do {{provider}} no OpenCode.", + "Digite sua chave de API do {{provider}} para conectar sua conta e usar modelos do {{provider}} no Devora.", "provider.connect.apiKey.label": "Chave de API do {{provider}}", "provider.connect.apiKey.placeholder": "Chave de API", "provider.connect.apiKey.required": "A chave de API é obrigatória", - "provider.connect.opencodeZen.line1": - "OpenCode Zen oferece acesso a um conjunto selecionado de modelos confiáveis otimizados para agentes de código.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen oferece acesso a um conjunto selecionado de modelos confiáveis otimizados para agentes de código.", + "provider.connect.devoraZen.line2": "Com uma única chave de API você terá acesso a modelos como Claude, GPT, Gemini, GLM e mais.", - "provider.connect.opencodeZen.visit.prefix": "Visite ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " para obter sua chave de API.", + "provider.connect.devoraZen.visit.prefix": "Visite ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " para obter sua chave de API.", "provider.connect.oauth.code.visit.prefix": "Visite ", "provider.connect.oauth.code.visit.link": "este link", "provider.connect.oauth.code.visit.suffix": - " para obter seu código de autorização e conectar sua conta para usar modelos do {{provider}} no OpenCode.", + " para obter seu código de autorização e conectar sua conta para usar modelos do {{provider}} no Devora.", "provider.connect.oauth.code.label": "Código de autorização {{method}}", "provider.connect.oauth.code.placeholder": "Código de autorização", "provider.connect.oauth.code.required": "O código de autorização é obrigatório", @@ -138,7 +138,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Visite ", "provider.connect.oauth.auto.visit.link": "este link", "provider.connect.oauth.auto.visit.suffix": - " e digite o código abaixo para conectar sua conta e usar modelos do {{provider}} no OpenCode.", + " e digite o código abaixo para conectar sua conta e usar modelos do {{provider}} no Devora.", "provider.connect.oauth.auto.confirmationCode": "Código de confirmação", "provider.connect.toast.connected.title": "{{provider}} conectado", "provider.connect.toast.connected.description": "Modelos do {{provider}} agora estão disponíveis para uso.", @@ -272,7 +272,7 @@ export const dict = { "dialog.mcp.description": "{{enabled}} of {{total}} habilitados", "dialog.mcp.empty": "Nenhum MCP configurado", "dialog.lsp.empty": "LSPs detectados automaticamente pelos tipos de arquivo", - "dialog.plugins.empty": "Plugins configurados em opencode.json", + "dialog.plugins.empty": "Plugins configurados em devora.json", "mcp.status.connected": "conectado", "mcp.status.failed": "falhou", "mcp.status.needs_auth": "precisa de autenticação", @@ -281,7 +281,7 @@ export const dict = { "dialog.directory.search.placeholder": "Buscar pastas", "dialog.directory.empty": "Nenhuma pasta encontrada", "dialog.server.title": "Servidores", - "dialog.server.description": "Trocar para qual servidor OpenCode este aplicativo se conecta.", + "dialog.server.description": "Trocar para qual servidor Devora este aplicativo se conecta.", "dialog.server.search.placeholder": "Buscar servidores", "dialog.server.empty": "Nenhum servidor ainda", "dialog.server.add.title": "Adicionar um servidor", @@ -396,7 +396,7 @@ export const dict = { "toast.session.unshare.failed.description": "Ocorreu um erro ao parar de compartilhar a sessão", "toast.session.listFailed.title": "Falha ao carregar sessões para {{project}}", "toast.update.title": "Atualização disponível", - "toast.update.description": "Uma nova versão do OpenCode ({{version}}) está disponível para instalação.", + "toast.update.description": "Uma nova versão do Devora ({{version}}) está disponível para instalação.", "toast.update.action.installRestart": "Instalar e reiniciar", "toast.update.action.notYet": "Agora não", "error.page.title": "Algo deu errado", @@ -406,7 +406,7 @@ export const dict = { "error.page.action.checking": "Verificando...", "error.page.action.checkUpdates": "Verificar atualizações", "error.page.action.updateTo": "Atualizar para {{version}}", - "error.page.report.prefix": "Por favor, reporte este erro para a equipe do OpenCode", + "error.page.report.prefix": "Por favor, reporte este erro para a equipe do Devora", "error.page.report.discord": "no Discord", "error.page.version": "Versão: {{version}}", "error.dev.rootNotFound": @@ -421,8 +421,8 @@ export const dict = { "error.chain.responseBody": "Corpo da resposta:\n{{body}}", "error.chain.didYouMean": "Você quis dizer: {{suggestions}}", "error.chain.modelNotFound": "Modelo não encontrado: {{provider}}/{{model}}", - "error.chain.checkConfig": "Verifique os nomes de provedor/modelo na sua configuração (opencode.json)", - "error.chain.mcpFailed": 'Servidor MCP "{{name}}" falhou. Nota: OpenCode ainda não suporta autenticação MCP.', + "error.chain.checkConfig": "Verifique os nomes de provedor/modelo na sua configuração (devora.json)", + "error.chain.mcpFailed": 'Servidor MCP "{{name}}" falhou. Nota: Devora ainda não suporta autenticação MCP.', "error.chain.providerAuthFailed": "Autenticação do provedor falhou ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Falha ao inicializar provedor "{{provider}}". Verifique credenciais e configuração.', @@ -544,19 +544,19 @@ export const dict = { "sidebar.workspaces.enable": "Habilitar espaços de trabalho", "sidebar.workspaces.disable": "Desabilitar espaços de trabalho", "sidebar.gettingStarted.title": "Começando", - "sidebar.gettingStarted.line1": "OpenCode inclui modelos gratuitos para você começar imediatamente.", + "sidebar.gettingStarted.line1": "Devora inclui modelos gratuitos para você começar imediatamente.", "sidebar.gettingStarted.line2": "Conecte qualquer provedor para usar modelos, incluindo Claude, GPT, Gemini etc.", "sidebar.project.recentSessions": "Sessões recentes", "sidebar.project.viewAllSessions": "Ver todas as sessões", "sidebar.project.clearNotifications": "Limpar notificações", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Desktop", "settings.section.server": "Servidor", "settings.tab.general": "Geral", "settings.tab.shortcuts": "Atalhos", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL integration", - "settings.desktop.wsl.description": "Executar o servidor OpenCode dentro do WSL no Windows.", + "settings.desktop.wsl.description": "Executar o servidor Devora dentro do WSL no Windows.", "settings.general.section.appearance": "Aparência", "settings.general.section.notifications": "Notificações do sistema", "settings.general.section.updates": "Atualizações", @@ -564,13 +564,13 @@ export const dict = { "settings.general.section.feed": "Feed", "settings.general.section.display": "Tela", "settings.general.row.language.title": "Idioma", - "settings.general.row.language.description": "Alterar o idioma de exibição do OpenCode", + "settings.general.row.language.description": "Alterar o idioma de exibição do Devora", "settings.general.row.appearance.title": "Aparência", - "settings.general.row.appearance.description": "Personalize como o OpenCode aparece no seu dispositivo", + "settings.general.row.appearance.description": "Personalize como o Devora aparece no seu dispositivo", "settings.general.row.colorScheme.title": "Esquema de cores", - "settings.general.row.colorScheme.description": "Escolha se o OpenCode segue o tema do sistema, claro ou escuro", + "settings.general.row.colorScheme.description": "Escolha se o Devora segue o tema do sistema, claro ou escuro", "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Personalize como o OpenCode é tematizado.", + "settings.general.row.theme.description": "Personalize como o Devora é tematizado.", "settings.general.row.font.title": "Fonte de código", "settings.general.row.font.description": "Personalize a fonte usada em blocos de código", "settings.general.row.terminalFont.title": "Terminal Font", @@ -597,13 +597,13 @@ export const dict = { "settings.general.row.releaseNotes.title": "Notas da versão", "settings.general.row.releaseNotes.description": 'Mostrar pop-ups de "Novidades" após atualizações', "settings.updates.row.startup.title": "Verificar atualizações ao iniciar", - "settings.updates.row.startup.description": "Verificar atualizações automaticamente quando o OpenCode iniciar", + "settings.updates.row.startup.description": "Verificar atualizações automaticamente quando o Devora iniciar", "settings.updates.row.check.title": "Verificar atualizações", "settings.updates.row.check.description": "Verificar atualizações manualmente e instalar se houver", "settings.updates.action.checkNow": "Verificar agora", "settings.updates.action.checking": "Verificando...", "settings.updates.toast.latest.title": "Você está atualizado", - "settings.updates.toast.latest.description": "Você está usando a versão mais recente do OpenCode.", + "settings.updates.toast.latest.description": "Você está usando a versão mais recente do Devora.", "sound.option.none": "Nenhum", "sound.option.alert01": "Alerta 01", "sound.option.alert02": "Alerta 02", diff --git a/packages/app/src/i18n/bs.ts b/packages/app/src/i18n/bs.ts index f872db1f..cfb4fc08 100644 --- a/packages/app/src/i18n/bs.ts +++ b/packages/app/src/i18n/bs.ts @@ -98,9 +98,9 @@ export const dict = { "dialog.provider.group.popular": "Popularno", "dialog.provider.group.other": "Ostalo", "dialog.provider.tag.recommended": "Preporučeno", - "dialog.provider.opencode.note": "Kurirani modeli uključujući Claude, GPT, Gemini i druge", - "dialog.provider.opencode.tagline": "Pouzdani optimizovani modeli", - "dialog.provider.opencodeGo.tagline": "Povoljna pretplata za sve", + "dialog.provider.devora.note": "Kurirani modeli uključujući Claude, GPT, Gemini i druge", + "dialog.provider.devora.tagline": "Pouzdani optimizovani modeli", + "dialog.provider.devoraGo.tagline": "Povoljna pretplata za sve", "dialog.provider.anthropic.note": "Direktan pristup Claude modelima, uključujući Pro i Max", "dialog.provider.copilot.note": "AI modeli za pomoć pri kodiranju putem GitHub Copilot", "dialog.provider.openai.note": "GPT modeli za brze, sposobne opšte AI zadatke", @@ -115,7 +115,7 @@ export const dict = { "dialog.model.manage.description": "Prilagodi koji se modeli prikazuju u izborniku modela.", "dialog.model.manage.provider.toggle": "Uključi/isključi sve {{provider}} modele", - "dialog.model.unpaid.freeModels.title": "Besplatni modeli koje obezbjeđuje OpenCode", + "dialog.model.unpaid.freeModels.title": "Besplatni modeli koje obezbjeđuje Devora", "dialog.model.unpaid.addMore.title": "Dodaj još modela od popularnih provajdera", "dialog.provider.viewAll": "Prikaži više provajdera", @@ -128,21 +128,21 @@ export const dict = { "provider.connect.status.waiting": "Čekanje na autorizaciju...", "provider.connect.status.failed": "Autorizacija nije uspjela: {{error}}", "provider.connect.apiKey.description": - "Unesi svoj {{provider}} API ključ da povežeš račun i koristiš {{provider}} modele u OpenCode-u.", + "Unesi svoj {{provider}} API ključ da povežeš račun i koristiš {{provider}} modele u Devora-u.", "provider.connect.apiKey.label": "{{provider}} API ključ", "provider.connect.apiKey.placeholder": "API ključ", "provider.connect.apiKey.required": "API ključ je obavezan", - "provider.connect.opencodeZen.line1": - "OpenCode Zen ti daje pristup kuriranom skupu pouzdanih, optimizovanih modela za coding agente.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen ti daje pristup kuriranom skupu pouzdanih, optimizovanih modela za coding agente.", + "provider.connect.devoraZen.line2": "Sa jednim API ključem dobijaš pristup modelima kao što su Claude, GPT, Gemini, GLM i drugi.", - "provider.connect.opencodeZen.visit.prefix": "Posjeti ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " da preuzmeš svoj API ključ.", + "provider.connect.devoraZen.visit.prefix": "Posjeti ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " da preuzmeš svoj API ključ.", "provider.connect.oauth.code.visit.prefix": "Posjeti ", "provider.connect.oauth.code.visit.link": "ovaj link", "provider.connect.oauth.code.visit.suffix": - " da preuzmeš autorizacijski kod i povežeš račun te koristiš {{provider}} modele u OpenCode-u.", + " da preuzmeš autorizacijski kod i povežeš račun te koristiš {{provider}} modele u Devora-u.", "provider.connect.oauth.code.label": "{{method}} autorizacijski kod", "provider.connect.oauth.code.placeholder": "Autorizacijski kod", "provider.connect.oauth.code.required": "Autorizacijski kod je obavezan", @@ -150,7 +150,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Posjeti ", "provider.connect.oauth.auto.visit.link": "ovaj link", "provider.connect.oauth.auto.visit.suffix": - " i unesi kod ispod da povežeš račun i koristiš {{provider}} modele u OpenCode-u.", + " i unesi kod ispod da povežeš račun i koristiš {{provider}} modele u Devora-u.", "provider.connect.oauth.auto.confirmationCode": "Kod za potvrdu", "provider.connect.toast.connected.title": "{{provider}} povezan", "provider.connect.toast.connected.description": "{{provider}} modeli su sada dostupni za korištenje.", @@ -295,7 +295,7 @@ export const dict = { "dialog.mcp.empty": "Nema konfigurisnih MCP-ova", "dialog.lsp.empty": "LSP-ovi se automatski otkrivaju prema tipu datoteke", - "dialog.plugins.empty": "Plugini su konfigurisani u opencode.json", + "dialog.plugins.empty": "Plugini su konfigurisani u devora.json", "mcp.status.connected": "povezano", "mcp.status.failed": "neuspjelo", @@ -308,7 +308,7 @@ export const dict = { "dialog.directory.empty": "Nema pronađenih foldera", "dialog.server.title": "Serveri", - "dialog.server.description": "Promijeni na koji se OpenCode server ova aplikacija povezuje.", + "dialog.server.description": "Promijeni na koji se Devora server ova aplikacija povezuje.", "dialog.server.search.placeholder": "Pretraži servere", "dialog.server.empty": "Još nema servera", "dialog.server.add.title": "Dodaj server", @@ -441,7 +441,7 @@ export const dict = { "toast.session.listFailed.title": "Neuspjelo učitavanje sesija za {{project}}", "toast.update.title": "Dostupno ažuriranje", - "toast.update.description": "Nova verzija OpenCode-a ({{version}}) je dostupna za instalaciju.", + "toast.update.description": "Nova verzija Devora-a ({{version}}) je dostupna za instalaciju.", "toast.update.action.installRestart": "Instaliraj i restartuj", "toast.update.action.notYet": "Ne još", @@ -452,7 +452,7 @@ export const dict = { "error.page.action.checking": "Provjera...", "error.page.action.checkUpdates": "Provjeri ažuriranja", "error.page.action.updateTo": "Ažuriraj na {{version}}", - "error.page.report.prefix": "Molimo prijavi ovu grešku OpenCode timu", + "error.page.report.prefix": "Molimo prijavi ovu grešku Devora timu", "error.page.report.discord": "na Discordu", "error.page.version": "Verzija: {{version}}", @@ -470,8 +470,8 @@ export const dict = { "error.chain.responseBody": "Tijelo odgovora:\n{{body}}", "error.chain.didYouMean": "Da li si mislio: {{suggestions}}", "error.chain.modelNotFound": "Model nije pronađen: {{provider}}/{{model}}", - "error.chain.checkConfig": "Provjeri konfiguraciju (opencode.json) provider/model names", - "error.chain.mcpFailed": 'MCP server "{{name}}" nije uspio. Napomena: OpenCode još ne podržava MCP autentifikaciju.', + "error.chain.checkConfig": "Provjeri konfiguraciju (devora.json) provider/model names", + "error.chain.mcpFailed": 'MCP server "{{name}}" nije uspio. Napomena: Devora još ne podržava MCP autentifikaciju.', "error.chain.providerAuthFailed": "Autentifikacija provajdera nije uspjela ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Neuspjelo inicijalizovanje provajdera "{{provider}}". Provjeri kredencijale i konfiguraciju.', @@ -605,13 +605,13 @@ export const dict = { "sidebar.workspaces.enable": "Omogući radne prostore", "sidebar.workspaces.disable": "Onemogući radne prostore", "sidebar.gettingStarted.title": "Početak", - "sidebar.gettingStarted.line1": "OpenCode uključuje besplatne modele, tako da možeš odmah početi.", + "sidebar.gettingStarted.line1": "Devora uključuje besplatne modele, tako da možeš odmah početi.", "sidebar.gettingStarted.line2": "Poveži bilo kojeg provajdera da koristiš modele, npr. Claude, GPT, Gemini itd.", "sidebar.project.recentSessions": "Nedavne sesije", "sidebar.project.viewAllSessions": "Prikaži sve sesije", "sidebar.project.clearNotifications": "Očisti obavijesti", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Desktop", "settings.section.server": "Server", @@ -619,7 +619,7 @@ export const dict = { "settings.tab.shortcuts": "Prečice", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL integracija", - "settings.desktop.wsl.description": "Pokreni OpenCode server unutar WSL-a na Windowsu.", + "settings.desktop.wsl.description": "Pokreni Devora server unutar WSL-a na Windowsu.", "settings.general.section.appearance": "Izgled", "settings.general.section.notifications": "Sistemske obavijesti", @@ -629,13 +629,13 @@ export const dict = { "settings.general.section.display": "Prikaz", "settings.general.row.language.title": "Jezik", - "settings.general.row.language.description": "Promijeni jezik prikaza u OpenCode-u", + "settings.general.row.language.description": "Promijeni jezik prikaza u Devora-u", "settings.general.row.appearance.title": "Izgled", - "settings.general.row.appearance.description": "Prilagodi kako OpenCode izgleda na tvom uređaju", + "settings.general.row.appearance.description": "Prilagodi kako Devora izgleda na tvom uređaju", "settings.general.row.colorScheme.title": "Šema boja", - "settings.general.row.colorScheme.description": "Odaberi da li OpenCode prati sistemsku, svijetlu ili tamnu temu", + "settings.general.row.colorScheme.description": "Odaberi da li Devora prati sistemsku, svijetlu ili tamnu temu", "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Prilagodi temu OpenCode-a.", + "settings.general.row.theme.description": "Prilagodi temu Devora-a.", "settings.general.row.font.title": "Font za kod", "settings.general.row.font.description": "Prilagodi font koji se koristi u blokovima koda", "settings.general.row.terminalFont.title": "Terminal Font", @@ -664,13 +664,13 @@ export const dict = { "settings.general.row.releaseNotes.description": 'Prikaži iskačuće prozore "Šta je novo" nakon ažuriranja', "settings.updates.row.startup.title": "Provjeri ažuriranja pri pokretanju", - "settings.updates.row.startup.description": "Automatski provjerava ažuriranja kada se OpenCode pokrene", + "settings.updates.row.startup.description": "Automatski provjerava ažuriranja kada se Devora pokrene", "settings.updates.row.check.title": "Provjeri ažuriranja", "settings.updates.row.check.description": "Ručno provjeri ažuriranja i instaliraj ako su dostupna", "settings.updates.action.checkNow": "Provjeri sada", "settings.updates.action.checking": "Provjera...", "settings.updates.toast.latest.title": "Sve je ažurno", - "settings.updates.toast.latest.description": "Koristiš najnoviju verziju OpenCode-a.", + "settings.updates.toast.latest.description": "Koristiš najnoviju verziju Devora-a.", "sound.option.none": "Nijedan", "sound.option.alert01": "Upozorenje 01", "sound.option.alert02": "Upozorenje 02", diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 82f4fe3f..4f379160 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -98,9 +98,9 @@ export const dict = { "dialog.provider.group.popular": "Populære", "dialog.provider.group.other": "Andre", "dialog.provider.tag.recommended": "Anbefalet", - "dialog.provider.opencode.note": "Udvalgte modeller inklusive Claude, GPT, Gemini og flere", - "dialog.provider.opencode.tagline": "Pålidelige optimerede modeller", - "dialog.provider.opencodeGo.tagline": "Billigt abonnement for alle", + "dialog.provider.devora.note": "Udvalgte modeller inklusive Claude, GPT, Gemini og flere", + "dialog.provider.devora.tagline": "Pålidelige optimerede modeller", + "dialog.provider.devoraGo.tagline": "Billigt abonnement for alle", "dialog.provider.anthropic.note": "Direkte adgang til Claude-modeller, inklusive Pro og Max", "dialog.provider.copilot.note": "AI-modeller til kodningsassistance via GitHub Copilot", "dialog.provider.openai.note": "GPT-modeller til hurtige, kompetente generelle AI-opgaver", @@ -115,7 +115,7 @@ export const dict = { "dialog.model.manage.description": "Tilpas hvilke modeller der vises i modelvælgeren.", "dialog.model.manage.provider.toggle": "Skift alle {{provider}}-modeller", - "dialog.model.unpaid.freeModels.title": "Gratis modeller leveret af OpenCode", + "dialog.model.unpaid.freeModels.title": "Gratis modeller leveret af Devora", "dialog.model.unpaid.addMore.title": "Tilføj flere modeller fra populære udbydere", "dialog.provider.viewAll": "Vis flere udbydere", @@ -128,21 +128,21 @@ export const dict = { "provider.connect.status.waiting": "Venter på godkendelse...", "provider.connect.status.failed": "Godkendelse mislykkedes: {{error}}", "provider.connect.apiKey.description": - "Indtast din {{provider}} API-nøgle for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", + "Indtast din {{provider}} API-nøgle for at forbinde din konto og bruge {{provider}} modeller i Devora.", "provider.connect.apiKey.label": "{{provider}} API-nøgle", "provider.connect.apiKey.placeholder": "API-nøgle", "provider.connect.apiKey.required": "API-nøgle er påkrævet", - "provider.connect.opencodeZen.line1": - "OpenCode Zen giver dig adgang til et udvalg af pålidelige optimerede modeller til kodningsagenter.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen giver dig adgang til et udvalg af pålidelige optimerede modeller til kodningsagenter.", + "provider.connect.devoraZen.line2": "Med en enkelt API-nøgle får du adgang til modeller som Claude, GPT, Gemini, GLM og flere.", - "provider.connect.opencodeZen.visit.prefix": "Besøg ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " for at hente din API-nøgle.", + "provider.connect.devoraZen.visit.prefix": "Besøg ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " for at hente din API-nøgle.", "provider.connect.oauth.code.visit.prefix": "Besøg ", "provider.connect.oauth.code.visit.link": "dette link", "provider.connect.oauth.code.visit.suffix": - " for at hente din godkendelseskode for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", + " for at hente din godkendelseskode for at forbinde din konto og bruge {{provider}} modeller i Devora.", "provider.connect.oauth.code.label": "{{method}} godkendelseskode", "provider.connect.oauth.code.placeholder": "Godkendelseskode", "provider.connect.oauth.code.required": "Godkendelseskode er påkrævet", @@ -150,7 +150,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Besøg ", "provider.connect.oauth.auto.visit.link": "dette link", "provider.connect.oauth.auto.visit.suffix": - " og indtast koden nedenfor for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", + " og indtast koden nedenfor for at forbinde din konto og bruge {{provider}} modeller i Devora.", "provider.connect.oauth.auto.confirmationCode": "Bekræftelseskode", "provider.connect.toast.connected.title": "{{provider}} forbundet", "provider.connect.toast.connected.description": "{{provider}} modeller er nu tilgængelige.", @@ -293,7 +293,7 @@ export const dict = { "dialog.mcp.empty": "Ingen MCP'er konfigureret", "dialog.lsp.empty": "LSP'er registreret automatisk fra filtyper", - "dialog.plugins.empty": "Plugins konfigureret i opencode.json", + "dialog.plugins.empty": "Plugins konfigureret i devora.json", "mcp.status.connected": "forbundet", "mcp.status.failed": "mislykkedes", @@ -306,7 +306,7 @@ export const dict = { "dialog.directory.empty": "Ingen mapper fundet", "dialog.server.title": "Servere", - "dialog.server.description": "Skift hvilken OpenCode-server denne app forbinder til.", + "dialog.server.description": "Skift hvilken Devora-server denne app forbinder til.", "dialog.server.search.placeholder": "Søg servere", "dialog.server.empty": "Ingen servere endnu", "dialog.server.add.title": "Tilføj en server", @@ -438,7 +438,7 @@ export const dict = { "toast.session.listFailed.title": "Kunne ikke indlæse sessioner for {{project}}", "toast.update.title": "Opdatering tilgængelig", - "toast.update.description": "En ny version af OpenCode ({{version}}) er nu tilgængelig til installation.", + "toast.update.description": "En ny version af Devora ({{version}}) er nu tilgængelig til installation.", "toast.update.action.installRestart": "Installer og genstart", "toast.update.action.notYet": "Ikke endnu", @@ -449,7 +449,7 @@ export const dict = { "error.page.action.checking": "Tjekker...", "error.page.action.checkUpdates": "Tjek for opdateringer", "error.page.action.updateTo": "Opdater til {{version}}", - "error.page.report.prefix": "Rapporter venligst denne fejl til OpenCode-teamet", + "error.page.report.prefix": "Rapporter venligst denne fejl til Devora-teamet", "error.page.report.discord": "på Discord", "error.page.version": "Version: {{version}}", @@ -467,8 +467,8 @@ export const dict = { "error.chain.responseBody": "Svarindhold:\n{{body}}", "error.chain.didYouMean": "Mente du: {{suggestions}}", "error.chain.modelNotFound": "Model ikke fundet: {{provider}}/{{model}}", - "error.chain.checkConfig": "Tjek dine konfigurations (opencode.json) udbyder/modelnavne", - "error.chain.mcpFailed": 'MCP-server "{{name}}" fejlede. Bemærk, OpenCode understøtter ikke MCP-godkendelse endnu.', + "error.chain.checkConfig": "Tjek dine konfigurations (devora.json) udbyder/modelnavne", + "error.chain.mcpFailed": 'MCP-server "{{name}}" fejlede. Bemærk, Devora understøtter ikke MCP-godkendelse endnu.', "error.chain.providerAuthFailed": "Udbydergodkendelse mislykkedes ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Kunne ikke initialisere udbyder "{{provider}}". Tjek legitimationsoplysninger og konfiguration.', @@ -601,20 +601,20 @@ export const dict = { "sidebar.workspaces.enable": "Aktiver arbejdsområder", "sidebar.workspaces.disable": "Deaktiver arbejdsområder", "sidebar.gettingStarted.title": "Kom i gang", - "sidebar.gettingStarted.line1": "OpenCode inkluderer gratis modeller så du kan starte med det samme.", + "sidebar.gettingStarted.line1": "Devora inkluderer gratis modeller så du kan starte med det samme.", "sidebar.gettingStarted.line2": "Forbind enhver udbyder for at bruge modeller, inkl. Claude, GPT, Gemini osv.", "sidebar.project.recentSessions": "Seneste sessioner", "sidebar.project.viewAllSessions": "Vis alle sessioner", "sidebar.project.clearNotifications": "Ryd notifikationer", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Desktop", "settings.section.server": "Server", "settings.tab.general": "Generelt", "settings.tab.shortcuts": "Genveje", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL integration", - "settings.desktop.wsl.description": "Kør OpenCode-serveren inde i WSL på Windows.", + "settings.desktop.wsl.description": "Kør Devora-serveren inde i WSL på Windows.", "settings.general.section.appearance": "Udseende", "settings.general.section.notifications": "Systemmeddelelser", @@ -624,13 +624,13 @@ export const dict = { "settings.general.section.display": "Skærm", "settings.general.row.language.title": "Sprog", - "settings.general.row.language.description": "Ændr visningssproget for OpenCode", + "settings.general.row.language.description": "Ændr visningssproget for Devora", "settings.general.row.appearance.title": "Udseende", - "settings.general.row.appearance.description": "Tilpas hvordan OpenCode ser ud på din enhed", + "settings.general.row.appearance.description": "Tilpas hvordan Devora ser ud på din enhed", "settings.general.row.colorScheme.title": "Farveskema", - "settings.general.row.colorScheme.description": "Vælg om OpenCode følger systemets, lyst eller mørkt tema", + "settings.general.row.colorScheme.description": "Vælg om Devora følger systemets, lyst eller mørkt tema", "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Tilpas hvordan OpenCode er temabestemt.", + "settings.general.row.theme.description": "Tilpas hvordan Devora er temabestemt.", "settings.general.row.font.title": "Kode-skrifttype", "settings.general.row.font.description": "Tilpas skrifttypen, der bruges i kodeblokke", "settings.general.row.terminalFont.title": "Terminal Font", @@ -658,13 +658,13 @@ export const dict = { "settings.general.row.releaseNotes.description": 'Vis "Hvad er nyt"-popups efter opdateringer', "settings.updates.row.startup.title": "Tjek for opdateringer ved opstart", - "settings.updates.row.startup.description": "Tjek automatisk for opdateringer, når OpenCode starter", + "settings.updates.row.startup.description": "Tjek automatisk for opdateringer, når Devora starter", "settings.updates.row.check.title": "Tjek for opdateringer", "settings.updates.row.check.description": "Tjek manuelt for opdateringer og installer, hvis tilgængelig", "settings.updates.action.checkNow": "Tjek nu", "settings.updates.action.checking": "Tjekker...", "settings.updates.toast.latest.title": "Du er opdateret", - "settings.updates.toast.latest.description": "Du kører den nyeste version af OpenCode.", + "settings.updates.toast.latest.description": "Du kører den nyeste version af Devora.", "sound.option.none": "Ingen", "sound.option.alert01": "Alarm 01", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index d5b95459..daa19188 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -94,9 +94,9 @@ export const dict = { "dialog.provider.group.popular": "Beliebt", "dialog.provider.group.other": "Andere", "dialog.provider.tag.recommended": "Empfohlen", - "dialog.provider.opencode.note": "Kuratierte Modelle inklusive Claude, GPT, Gemini und mehr", - "dialog.provider.opencode.tagline": "Zuverlässige, optimierte Modelle", - "dialog.provider.opencodeGo.tagline": "Kostengünstiges Abo für alle", + "dialog.provider.devora.note": "Kuratierte Modelle inklusive Claude, GPT, Gemini und mehr", + "dialog.provider.devora.tagline": "Zuverlässige, optimierte Modelle", + "dialog.provider.devoraGo.tagline": "Kostengünstiges Abo für alle", "dialog.provider.anthropic.note": "Mit Claude Pro/Max oder API-Schlüssel verbinden", "dialog.provider.copilot.note": "Mit Copilot oder API-Schlüssel verbinden", "dialog.provider.openai.note": "Mit ChatGPT Pro/Plus oder API-Schlüssel verbinden", @@ -109,7 +109,7 @@ export const dict = { "dialog.model.manage": "Modelle verwalten", "dialog.model.manage.description": "Anpassen, welche Modelle in der Modellauswahl erscheinen.", "dialog.model.manage.provider.toggle": "Alle {{provider}}-Modelle umschalten", - "dialog.model.unpaid.freeModels.title": "Kostenlose Modelle von OpenCode", + "dialog.model.unpaid.freeModels.title": "Kostenlose Modelle von Devora", "dialog.model.unpaid.addMore.title": "Weitere Modelle von beliebten Anbietern hinzufügen", "dialog.provider.viewAll": "Mehr Anbieter anzeigen", "provider.connect.title": "{{provider}} verbinden", @@ -120,21 +120,21 @@ export const dict = { "provider.connect.status.waiting": "Warten auf Autorisierung...", "provider.connect.status.failed": "Autorisierung fehlgeschlagen: {{error}}", "provider.connect.apiKey.description": - "Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in Devora zu nutzen.", "provider.connect.apiKey.label": "{{provider}} API-Schlüssel", "provider.connect.apiKey.placeholder": "API-Schlüssel", "provider.connect.apiKey.required": "API-Schlüssel ist erforderlich", - "provider.connect.opencodeZen.line1": - "OpenCode Zen bietet Ihnen Zugriff auf eine kuratierte Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen bietet Ihnen Zugriff auf eine kuratierte Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.", + "provider.connect.devoraZen.line2": "Mit einem einzigen API-Schlüssel erhalten Sie Zugriff auf Modelle wie Claude, GPT, Gemini, GLM und mehr.", - "provider.connect.opencodeZen.visit.prefix": "Besuchen Sie ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": ", um Ihren API-Schlüssel zu erhalten.", + "provider.connect.devoraZen.visit.prefix": "Besuchen Sie ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": ", um Ihren API-Schlüssel zu erhalten.", "provider.connect.oauth.code.visit.prefix": "Besuchen Sie ", "provider.connect.oauth.code.visit.link": "diesen Link", "provider.connect.oauth.code.visit.suffix": - ", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + ", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in Devora zu nutzen.", "provider.connect.oauth.code.label": "{{method}} Autorisierungscode", "provider.connect.oauth.code.placeholder": "Autorisierungscode", "provider.connect.oauth.code.required": "Autorisierungscode ist erforderlich", @@ -142,7 +142,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Besuchen Sie ", "provider.connect.oauth.auto.visit.link": "diesen Link", "provider.connect.oauth.auto.visit.suffix": - " und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + " und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in Devora zu nutzen.", "provider.connect.oauth.auto.confirmationCode": "Bestätigungscode", "provider.connect.toast.connected.title": "{{provider}} verbunden", "provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.", @@ -278,7 +278,7 @@ export const dict = { "dialog.mcp.description": "{{enabled}} von {{total}} aktiviert", "dialog.mcp.empty": "Keine MCPs konfiguriert", "dialog.lsp.empty": "LSPs automatisch nach Dateityp erkannt", - "dialog.plugins.empty": "In opencode.json konfigurierte Plugins", + "dialog.plugins.empty": "In devora.json konfigurierte Plugins", "mcp.status.connected": "verbunden", "mcp.status.failed": "fehlgeschlagen", "mcp.status.needs_auth": "benötigt Authentifizierung", @@ -287,7 +287,7 @@ export const dict = { "dialog.directory.search.placeholder": "Ordner durchsuchen", "dialog.directory.empty": "Keine Ordner gefunden", "dialog.server.title": "Server", - "dialog.server.description": "Wechseln Sie den OpenCode-Server, mit dem sich diese App verbindet.", + "dialog.server.description": "Wechseln Sie den Devora-Server, mit dem sich diese App verbindet.", "dialog.server.search.placeholder": "Server durchsuchen", "dialog.server.empty": "Noch keine Server", "dialog.server.add.title": "Server hinzufügen", @@ -403,7 +403,7 @@ export const dict = { "toast.session.unshare.failed.description": "Beim Aufheben des Teilens ist ein Fehler aufgetreten", "toast.session.listFailed.title": "Sitzungen für {{project}} konnten nicht geladen werden", "toast.update.title": "Update verfügbar", - "toast.update.description": "Eine neue Version von OpenCode ({{version}}) ist zur Installation verfügbar.", + "toast.update.description": "Eine neue Version von Devora ({{version}}) ist zur Installation verfügbar.", "toast.update.action.installRestart": "Installieren und neu starten", "toast.update.action.notYet": "Noch nicht", "error.page.title": "Etwas ist schiefgelaufen", @@ -413,7 +413,7 @@ export const dict = { "error.page.action.checking": "Prüfen...", "error.page.action.checkUpdates": "Nach Updates suchen", "error.page.action.updateTo": "Auf {{version}} aktualisieren", - "error.page.report.prefix": "Bitte melden Sie diesen Fehler dem OpenCode-Team", + "error.page.report.prefix": "Bitte melden Sie diesen Fehler dem Devora-Team", "error.page.report.discord": "auf Discord", "error.page.version": "Version: {{version}}", "error.dev.rootNotFound": @@ -428,9 +428,9 @@ export const dict = { "error.chain.responseBody": "Antwort-Body:\n{{body}}", "error.chain.didYouMean": "Meinten Sie: {{suggestions}}", "error.chain.modelNotFound": "Modell nicht gefunden: {{provider}}/{{model}}", - "error.chain.checkConfig": "Überprüfen Sie Ihre Konfiguration (opencode.json) auf Anbieter-/Modellnamen", + "error.chain.checkConfig": "Überprüfen Sie Ihre Konfiguration (devora.json) auf Anbieter-/Modellnamen", "error.chain.mcpFailed": - 'MCP-Server "{{name}}" fehlgeschlagen. Hinweis: OpenCode unterstützt noch keine MCP-Authentifizierung.', + 'MCP-Server "{{name}}" fehlgeschlagen. Hinweis: Devora unterstützt noch keine MCP-Authentifizierung.', "error.chain.providerAuthFailed": "Anbieter-Authentifizierung fehlgeschlagen ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Anbieter "{{provider}}" konnte nicht initialisiert werden. Überprüfen Sie Anmeldeinformationen und Konfiguration.', @@ -552,20 +552,20 @@ export const dict = { "sidebar.workspaces.enable": "Arbeitsbereiche aktivieren", "sidebar.workspaces.disable": "Arbeitsbereiche deaktivieren", "sidebar.gettingStarted.title": "Erste Schritte", - "sidebar.gettingStarted.line1": "OpenCode enthält kostenlose Modelle, damit Sie sofort loslegen können.", + "sidebar.gettingStarted.line1": "Devora enthält kostenlose Modelle, damit Sie sofort loslegen können.", "sidebar.gettingStarted.line2": "Verbinden Sie einen beliebigen Anbieter, um Modelle wie Claude, GPT, Gemini usw. zu nutzen.", "sidebar.project.recentSessions": "Letzte Sitzungen", "sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen", "sidebar.project.clearNotifications": "Benachrichtigungen löschen", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Desktop", "settings.section.server": "Server", "settings.tab.general": "Allgemein", "settings.tab.shortcuts": "Tastenkombinationen", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL-Integration", - "settings.desktop.wsl.description": "OpenCode-Server innerhalb von WSL unter Windows ausführen.", + "settings.desktop.wsl.description": "Devora-Server innerhalb von WSL unter Windows ausführen.", "settings.general.section.appearance": "Erscheinungsbild", "settings.general.section.notifications": "Systembenachrichtigungen", "settings.general.section.updates": "Updates", @@ -573,14 +573,14 @@ export const dict = { "settings.general.section.feed": "Feed", "settings.general.section.display": "Anzeige", "settings.general.row.language.title": "Sprache", - "settings.general.row.language.description": "Die Anzeigesprache für OpenCode ändern", + "settings.general.row.language.description": "Die Anzeigesprache für Devora ändern", "settings.general.row.appearance.title": "Erscheinungsbild", - "settings.general.row.appearance.description": "Anpassen, wie OpenCode auf Ihrem Gerät aussieht", + "settings.general.row.appearance.description": "Anpassen, wie Devora auf Ihrem Gerät aussieht", "settings.general.row.colorScheme.title": "Farbschema", "settings.general.row.colorScheme.description": - "Wählen Sie, ob OpenCode dem System-, hellen oder dunklen Thema folgt", + "Wählen Sie, ob Devora dem System-, hellen oder dunklen Thema folgt", "settings.general.row.theme.title": "Thema", - "settings.general.row.theme.description": "Das Thema von OpenCode anpassen.", + "settings.general.row.theme.description": "Das Thema von Devora anpassen.", "settings.general.row.font.title": "Code-Schriftart", "settings.general.row.font.description": "Die in Codeblöcken verwendete Schriftart anpassen", "settings.general.row.terminalFont.title": "Terminal Font", @@ -608,13 +608,13 @@ export const dict = { "settings.general.row.releaseNotes.title": "Versionshinweise", "settings.general.row.releaseNotes.description": '"Neuigkeiten"-Pop-ups nach Updates anzeigen', "settings.updates.row.startup.title": "Beim Start nach Updates suchen", - "settings.updates.row.startup.description": "Beim Start von OpenCode automatisch nach Updates suchen", + "settings.updates.row.startup.description": "Beim Start von Devora automatisch nach Updates suchen", "settings.updates.row.check.title": "Nach Updates suchen", "settings.updates.row.check.description": "Manuell nach Updates suchen und installieren, wenn verfügbar", "settings.updates.action.checkNow": "Jetzt prüfen", "settings.updates.action.checking": "Wird geprüft...", "settings.updates.toast.latest.title": "Du bist auf dem neuesten Stand", - "settings.updates.toast.latest.description": "Du verwendest die aktuelle Version von OpenCode.", + "settings.updates.toast.latest.description": "Du verwendest die aktuelle Version von Devora.", "sound.option.none": "Keine", "sound.option.alert01": "Alarm 01", "sound.option.alert02": "Alarm 02", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 8a2fbf87..d61b93c9 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -100,9 +100,9 @@ export const dict = { "dialog.provider.group.popular": "Popular", "dialog.provider.group.other": "Other", "dialog.provider.tag.recommended": "Recommended", - "dialog.provider.opencode.note": "Curated models including Claude, GPT, Gemini and more", - "dialog.provider.opencode.tagline": "Reliable optimized models", - "dialog.provider.opencodeGo.tagline": "Low cost subscription for everyone", + "dialog.provider.devora.note": "Curated models including Claude, GPT, Gemini and more", + "dialog.provider.devora.tagline": "Reliable optimized models", + "dialog.provider.devoraGo.tagline": "Low cost subscription for everyone", "dialog.provider.anthropic.note": "Direct access to Claude models, including Pro and Max", "dialog.provider.copilot.note": "AI models for coding assistance via GitHub Copilot", "dialog.provider.openai.note": "GPT models for fast, capable general AI tasks", @@ -117,7 +117,7 @@ export const dict = { "dialog.model.manage.description": "Customize which models appear in the model selector.", "dialog.model.manage.provider.toggle": "Toggle all {{provider}} models", - "dialog.model.unpaid.freeModels.title": "Free models provided by OpenCode", + "dialog.model.unpaid.freeModels.title": "Free models provided by Devora", "dialog.model.unpaid.addMore.title": "Add more models from popular providers", "dialog.provider.viewAll": "Show more providers", @@ -130,21 +130,21 @@ export const dict = { "provider.connect.status.waiting": "Waiting for authorization...", "provider.connect.status.failed": "Authorization failed: {{error}}", "provider.connect.apiKey.description": - "Enter your {{provider}} API key to connect your account and use {{provider}} models in OpenCode.", + "Enter your {{provider}} API key to connect your account and use {{provider}} models in Devora.", "provider.connect.apiKey.label": "{{provider}} API key", "provider.connect.apiKey.placeholder": "API key", "provider.connect.apiKey.required": "API key is required", - "provider.connect.opencodeZen.line1": - "OpenCode Zen gives you access to a curated set of reliable optimized models for coding agents.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen gives you access to a curated set of reliable optimized models for coding agents.", + "provider.connect.devoraZen.line2": "With a single API key you'll get access to models such as Claude, GPT, Gemini, GLM and more.", - "provider.connect.opencodeZen.visit.prefix": "Visit ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " to collect your API key.", + "provider.connect.devoraZen.visit.prefix": "Visit ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " to collect your API key.", "provider.connect.oauth.code.visit.prefix": "Visit ", "provider.connect.oauth.code.visit.link": "this link", "provider.connect.oauth.code.visit.suffix": - " to collect your authorization code to connect your account and use {{provider}} models in OpenCode.", + " to collect your authorization code to connect your account and use {{provider}} models in Devora.", "provider.connect.oauth.code.label": "{{method}} authorization code", "provider.connect.oauth.code.placeholder": "Authorization code", "provider.connect.oauth.code.required": "Authorization code is required", @@ -152,7 +152,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Visit ", "provider.connect.oauth.auto.visit.link": "this link", "provider.connect.oauth.auto.visit.suffix": - " and enter the code below to connect your account and use {{provider}} models in OpenCode.", + " and enter the code below to connect your account and use {{provider}} models in Devora.", "provider.connect.oauth.auto.confirmationCode": "Confirmation code", "provider.connect.toast.connected.title": "{{provider}} connected", "provider.connect.toast.connected.description": "{{provider}} models are now available to use.", @@ -299,7 +299,7 @@ export const dict = { "dialog.mcp.empty": "No MCPs configured", "dialog.lsp.empty": "LSPs auto-detected from file types", - "dialog.plugins.empty": "Plugins configured in opencode.json", + "dialog.plugins.empty": "Plugins configured in devora.json", "mcp.status.connected": "connected", "mcp.status.failed": "failed", @@ -316,7 +316,7 @@ export const dict = { "app.server.otherServers": "Other servers", "dialog.server.title": "Servers", - "dialog.server.description": "Switch which OpenCode server this app connects to.", + "dialog.server.description": "Switch which Devora server this app connects to.", "dialog.server.search.placeholder": "Search servers", "dialog.server.empty": "No servers yet", "dialog.server.add.title": "Add server", @@ -457,7 +457,7 @@ export const dict = { "toast.project.reloadFailed.title": "Failed to reload {{project}}", "toast.update.title": "Update available", - "toast.update.description": "A new version of OpenCode ({{version}}) is now available to install.", + "toast.update.description": "A new version of Devora ({{version}}) is now available to install.", "toast.update.action.installRestart": "Install and restart", "toast.update.action.notYet": "Not yet", @@ -469,7 +469,7 @@ export const dict = { "error.page.action.checkUpdates": "Check for updates", "error.page.action.updateTo": "Update to {{version}}", "error.page.circular": "[Circular]", - "error.page.report.prefix": "Please report this error to the OpenCode team", + "error.page.report.prefix": "Please report this error to the Devora team", "error.page.report.discord": "on Discord", "error.page.version": "Version: {{version}}", @@ -494,8 +494,8 @@ export const dict = { "error.chain.responseBody": "Response body:\n{{body}}", "error.chain.didYouMean": "Did you mean: {{suggestions}}", "error.chain.modelNotFound": "Model not found: {{provider}}/{{model}}", - "error.chain.checkConfig": "Check your config (opencode.json) provider/model names", - "error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, OpenCode does not support MCP authentication yet.', + "error.chain.checkConfig": "Check your config (devora.json) provider/model names", + "error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, Devora does not support MCP authentication yet.', "error.chain.providerAuthFailed": "Provider authentication failed ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Failed to initialize provider "{{provider}}". Check credentials and configuration.', @@ -676,7 +676,7 @@ export const dict = { "sidebar.workspaces.enable": "Enable workspaces", "sidebar.workspaces.disable": "Disable workspaces", "sidebar.gettingStarted.title": "Getting started", - "sidebar.gettingStarted.line1": "OpenCode includes free models so you can start immediately.", + "sidebar.gettingStarted.line1": "Devora includes free models so you can start immediately.", "sidebar.gettingStarted.line2": "Connect any provider to use models, inc. Claude, GPT, Gemini etc.", "sidebar.project.recentSessions": "Recent sessions", "sidebar.project.viewAllSessions": "View all sessions", @@ -708,7 +708,7 @@ export const dict = { "debugBar.mem.tipUnavailable": "Used JS heap vs heap limit. Chromium only.", "debugBar.mem.tip": "Used JS heap vs heap limit. {{used}} of {{limit}}.", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Desktop", "settings.section.server": "Server", @@ -716,7 +716,7 @@ export const dict = { "settings.tab.shortcuts": "Shortcuts", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL integration", - "settings.desktop.wsl.description": "Run the OpenCode server inside WSL on Windows.", + "settings.desktop.wsl.description": "Run the Devora server inside WSL on Windows.", "settings.general.section.appearance": "Appearance", "settings.general.section.advanced": "Advanced", @@ -727,13 +727,13 @@ export const dict = { "settings.general.section.display": "Display", "settings.general.row.language.title": "Language", - "settings.general.row.language.description": "Change the display language for OpenCode", + "settings.general.row.language.description": "Change the display language for Devora", "settings.general.row.appearance.title": "Appearance", - "settings.general.row.appearance.description": "Customise how OpenCode looks on your device", + "settings.general.row.appearance.description": "Customise how Devora looks on your device", "settings.general.row.colorScheme.title": "Color scheme", - "settings.general.row.colorScheme.description": "Choose whether OpenCode follows the system, light, or dark theme", + "settings.general.row.colorScheme.description": "Choose whether Devora follows the system, light, or dark theme", "settings.general.row.theme.title": "Theme", - "settings.general.row.theme.description": "Customise how OpenCode is themed.", + "settings.general.row.theme.description": "Customise how Devora is themed.", "settings.general.row.font.title": "Code Font", "settings.general.row.font.description": "Customise the font used in code blocks", "settings.general.row.terminalFont.title": "Terminal Font", @@ -772,13 +772,13 @@ export const dict = { "settings.general.row.releaseNotes.description": "Show What's New popups after updates", "settings.updates.row.startup.title": "Check for updates on startup", - "settings.updates.row.startup.description": "Automatically check for updates when OpenCode launches", + "settings.updates.row.startup.description": "Automatically check for updates when Devora launches", "settings.updates.row.check.title": "Check for updates", "settings.updates.row.check.description": "Manually check for updates and install if available", "settings.updates.action.checkNow": "Check now", "settings.updates.action.checking": "Checking...", "settings.updates.toast.latest.title": "You're up to date", - "settings.updates.toast.latest.description": "You're running the latest version of OpenCode.", + "settings.updates.toast.latest.description": "You're running the latest version of Devora.", "sound.option.none": "None", "sound.option.alert01": "Alert 01", "sound.option.alert02": "Alert 02", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 12bc45cf..2c61112f 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -98,9 +98,9 @@ export const dict = { "dialog.provider.group.popular": "Popular", "dialog.provider.group.other": "Otro", "dialog.provider.tag.recommended": "Recomendado", - "dialog.provider.opencode.note": "Modelos seleccionados incluyendo Claude, GPT, Gemini y más", - "dialog.provider.opencode.tagline": "Modelos optimizados y fiables", - "dialog.provider.opencodeGo.tagline": "Suscripción económica para todos", + "dialog.provider.devora.note": "Modelos seleccionados incluyendo Claude, GPT, Gemini y más", + "dialog.provider.devora.tagline": "Modelos optimizados y fiables", + "dialog.provider.devoraGo.tagline": "Suscripción económica para todos", "dialog.provider.anthropic.note": "Acceso directo a modelos Claude, incluyendo Pro y Max", "dialog.provider.copilot.note": "Modelos de IA para asistencia de codificación a través de GitHub Copilot", "dialog.provider.openai.note": "Modelos GPT para tareas de IA generales rápidas y capaces", @@ -115,7 +115,7 @@ export const dict = { "dialog.model.manage.description": "Personalizar qué modelos aparecen en el selector de modelos.", "dialog.model.manage.provider.toggle": "Alternar todos los modelos de {{provider}}", - "dialog.model.unpaid.freeModels.title": "Modelos gratuitos proporcionados por OpenCode", + "dialog.model.unpaid.freeModels.title": "Modelos gratuitos proporcionados por Devora", "dialog.model.unpaid.addMore.title": "Añadir más modelos de proveedores populares", "dialog.provider.viewAll": "Ver más proveedores", @@ -128,21 +128,21 @@ export const dict = { "provider.connect.status.waiting": "Esperando autorización...", "provider.connect.status.failed": "Autorización fallida: {{error}}", "provider.connect.apiKey.description": - "Introduce tu clave API de {{provider}} para conectar tu cuenta y usar modelos de {{provider}} en OpenCode.", + "Introduce tu clave API de {{provider}} para conectar tu cuenta y usar modelos de {{provider}} en Devora.", "provider.connect.apiKey.label": "Clave API de {{provider}}", "provider.connect.apiKey.placeholder": "Clave API", "provider.connect.apiKey.required": "La clave API es obligatoria", - "provider.connect.opencodeZen.line1": - "OpenCode Zen te da acceso a un conjunto curado de modelos fiables optimizados para agentes de programación.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen te da acceso a un conjunto curado de modelos fiables optimizados para agentes de programación.", + "provider.connect.devoraZen.line2": "Con una sola clave API obtendrás acceso a modelos como Claude, GPT, Gemini, GLM y más.", - "provider.connect.opencodeZen.visit.prefix": "Visita ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " para obtener tu clave API.", + "provider.connect.devoraZen.visit.prefix": "Visita ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " para obtener tu clave API.", "provider.connect.oauth.code.visit.prefix": "Visita ", "provider.connect.oauth.code.visit.link": "este enlace", "provider.connect.oauth.code.visit.suffix": - " para obtener tu código de autorización para conectar tu cuenta y usar modelos de {{provider}} en OpenCode.", + " para obtener tu código de autorización para conectar tu cuenta y usar modelos de {{provider}} en Devora.", "provider.connect.oauth.code.label": "Código de autorización {{method}}", "provider.connect.oauth.code.placeholder": "Código de autorización", "provider.connect.oauth.code.required": "El código de autorización es obligatorio", @@ -150,7 +150,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Visita ", "provider.connect.oauth.auto.visit.link": "este enlace", "provider.connect.oauth.auto.visit.suffix": - " e introduce el código a continuación para conectar tu cuenta y usar modelos de {{provider}} en OpenCode.", + " e introduce el código a continuación para conectar tu cuenta y usar modelos de {{provider}} en Devora.", "provider.connect.oauth.auto.confirmationCode": "Código de confirmación", "provider.connect.toast.connected.title": "{{provider}} conectado", "provider.connect.toast.connected.description": "Los modelos de {{provider}} ahora están disponibles para usar.", @@ -294,7 +294,7 @@ export const dict = { "dialog.mcp.empty": "No hay MCPs configurados", "dialog.lsp.empty": "LSPs detectados automáticamente por tipo de archivo", - "dialog.plugins.empty": "Plugins configurados en opencode.json", + "dialog.plugins.empty": "Plugins configurados en devora.json", "mcp.status.connected": "conectado", "mcp.status.failed": "fallido", @@ -307,7 +307,7 @@ export const dict = { "dialog.directory.empty": "No se encontraron carpetas", "dialog.server.title": "Servidores", - "dialog.server.description": "Cambiar a qué servidor de OpenCode se conecta esta app.", + "dialog.server.description": "Cambiar a qué servidor de Devora se conecta esta app.", "dialog.server.search.placeholder": "Buscar servidores", "dialog.server.empty": "No hay servidores aún", "dialog.server.add.title": "Añadir un servidor", @@ -441,7 +441,7 @@ export const dict = { "toast.session.listFailed.title": "Fallo al cargar sesiones para {{project}}", "toast.update.title": "Actualización disponible", - "toast.update.description": "Una nueva versión de OpenCode ({{version}}) está disponible para instalar.", + "toast.update.description": "Una nueva versión de Devora ({{version}}) está disponible para instalar.", "toast.update.action.installRestart": "Instalar y reiniciar", "toast.update.action.notYet": "Todavía no", @@ -452,7 +452,7 @@ export const dict = { "error.page.action.checking": "Comprobando...", "error.page.action.checkUpdates": "Buscar actualizaciones", "error.page.action.updateTo": "Actualizar a {{version}}", - "error.page.report.prefix": "Por favor reporta este error al equipo de OpenCode", + "error.page.report.prefix": "Por favor reporta este error al equipo de Devora", "error.page.report.discord": "en Discord", "error.page.version": "Versión: {{version}}", @@ -470,8 +470,8 @@ export const dict = { "error.chain.responseBody": "Cuerpo de la respuesta:\n{{body}}", "error.chain.didYouMean": "¿Quisiste decir: {{suggestions}}", "error.chain.modelNotFound": "Modelo no encontrado: {{provider}}/{{model}}", - "error.chain.checkConfig": "Comprueba los nombres de proveedor/modelo en tu configuración (opencode.json)", - "error.chain.mcpFailed": 'El servidor MCP "{{name}}" falló. Nota, OpenCode no soporta autenticación MCP todavía.', + "error.chain.checkConfig": "Comprueba los nombres de proveedor/modelo en tu configuración (devora.json)", + "error.chain.mcpFailed": 'El servidor MCP "{{name}}" falló. Nota, Devora no soporta autenticación MCP todavía.', "error.chain.providerAuthFailed": "Autenticación de proveedor fallida ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Fallo al inicializar proveedor "{{provider}}". Comprueba credenciales y configuración.', @@ -608,13 +608,13 @@ export const dict = { "sidebar.workspaces.enable": "Habilitar espacios de trabajo", "sidebar.workspaces.disable": "Deshabilitar espacios de trabajo", "sidebar.gettingStarted.title": "Empezando", - "sidebar.gettingStarted.line1": "OpenCode incluye modelos gratuitos para que puedas empezar inmediatamente.", + "sidebar.gettingStarted.line1": "Devora incluye modelos gratuitos para que puedas empezar inmediatamente.", "sidebar.gettingStarted.line2": "Conecta cualquier proveedor para usar modelos, inc. Claude, GPT, Gemini etc.", "sidebar.project.recentSessions": "Sesiones recientes", "sidebar.project.viewAllSessions": "Ver todas las sesiones", "sidebar.project.clearNotifications": "Borrar notificaciones", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Escritorio", "settings.section.server": "Servidor", @@ -622,7 +622,7 @@ export const dict = { "settings.tab.shortcuts": "Atajos", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "Integración con WSL", - "settings.desktop.wsl.description": "Ejecutar el servidor OpenCode dentro de WSL en Windows.", + "settings.desktop.wsl.description": "Ejecutar el servidor Devora dentro de WSL en Windows.", "settings.general.section.appearance": "Apariencia", "settings.general.section.notifications": "Notificaciones del sistema", @@ -632,13 +632,13 @@ export const dict = { "settings.general.section.display": "Pantalla", "settings.general.row.language.title": "Idioma", - "settings.general.row.language.description": "Cambiar el idioma de visualización para OpenCode", + "settings.general.row.language.description": "Cambiar el idioma de visualización para Devora", "settings.general.row.appearance.title": "Apariencia", - "settings.general.row.appearance.description": "Personaliza cómo se ve OpenCode en tu dispositivo", + "settings.general.row.appearance.description": "Personaliza cómo se ve Devora en tu dispositivo", "settings.general.row.colorScheme.title": "Esquema de color", - "settings.general.row.colorScheme.description": "Elige si OpenCode sigue el tema del sistema, claro u oscuro", + "settings.general.row.colorScheme.description": "Elige si Devora sigue el tema del sistema, claro u oscuro", "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Personaliza el tema de OpenCode.", + "settings.general.row.theme.description": "Personaliza el tema de Devora.", "settings.general.row.font.title": "Fuente de código", "settings.general.row.font.description": "Personaliza la fuente usada en bloques de código", "settings.general.row.terminalFont.title": "Terminal Font", @@ -669,13 +669,13 @@ export const dict = { 'Mostrar ventanas emergentes de "Novedades" después de las actualizaciones', "settings.updates.row.startup.title": "Buscar actualizaciones al iniciar", - "settings.updates.row.startup.description": "Buscar actualizaciones automáticamente cuando se inicia OpenCode", + "settings.updates.row.startup.description": "Buscar actualizaciones automáticamente cuando se inicia Devora", "settings.updates.row.check.title": "Buscar actualizaciones", "settings.updates.row.check.description": "Buscar actualizaciones manualmente e instalarlas si hay alguna", "settings.updates.action.checkNow": "Buscar ahora", "settings.updates.action.checking": "Buscando...", "settings.updates.toast.latest.title": "Estás al día", - "settings.updates.toast.latest.description": "Estás usando la última versión de OpenCode.", + "settings.updates.toast.latest.description": "Estás usando la última versión de Devora.", "sound.option.none": "Ninguno", "sound.option.alert01": "Alerta 01", "sound.option.alert02": "Alerta 02", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index 6c98b9ca..4b368182 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -90,9 +90,9 @@ export const dict = { "dialog.provider.group.popular": "Populaire", "dialog.provider.group.other": "Autre", "dialog.provider.tag.recommended": "Recommandé", - "dialog.provider.opencode.note": "Modèles sélectionnés incluant Claude, GPT, Gemini et plus", - "dialog.provider.opencode.tagline": "Modèles optimisés et fiables", - "dialog.provider.opencodeGo.tagline": "Abonnement abordable pour tous", + "dialog.provider.devora.note": "Modèles sélectionnés incluant Claude, GPT, Gemini et plus", + "dialog.provider.devora.tagline": "Modèles optimisés et fiables", + "dialog.provider.devoraGo.tagline": "Abonnement abordable pour tous", "dialog.provider.anthropic.note": "Connectez-vous avec Claude Pro/Max ou une clé API", "dialog.provider.copilot.note": "Connectez-vous avec Copilot ou une clé API", "dialog.provider.openai.note": "Connectez-vous avec ChatGPT Pro/Plus ou une clé API", @@ -105,7 +105,7 @@ export const dict = { "dialog.model.manage": "Gérer les modèles", "dialog.model.manage.description": "Personnalisez les modèles qui apparaissent dans le sélecteur.", "dialog.model.manage.provider.toggle": "Basculer tous les modèles {{provider}}", - "dialog.model.unpaid.freeModels.title": "Modèles gratuits fournis par OpenCode", + "dialog.model.unpaid.freeModels.title": "Modèles gratuits fournis par Devora", "dialog.model.unpaid.addMore.title": "Ajouter plus de modèles de fournisseurs populaires", "dialog.provider.viewAll": "Voir plus de fournisseurs", "provider.connect.title": "Connecter {{provider}}", @@ -116,21 +116,21 @@ export const dict = { "provider.connect.status.waiting": "En attente d'autorisation...", "provider.connect.status.failed": "Échec de l'autorisation : {{error}}", "provider.connect.apiKey.description": - "Entrez votre clé API {{provider}} pour connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", + "Entrez votre clé API {{provider}} pour connecter votre compte et utiliser les modèles {{provider}} dans Devora.", "provider.connect.apiKey.label": "Clé API {{provider}}", "provider.connect.apiKey.placeholder": "Clé API", "provider.connect.apiKey.required": "La clé API est requise", - "provider.connect.opencodeZen.line1": - "OpenCode Zen vous donne accès à un ensemble sélectionné de modèles fiables et optimisés pour les agents de codage.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen vous donne accès à un ensemble sélectionné de modèles fiables et optimisés pour les agents de codage.", + "provider.connect.devoraZen.line2": "Avec une seule clé API, vous aurez accès à des modèles tels que Claude, GPT, Gemini, GLM et plus encore.", - "provider.connect.opencodeZen.visit.prefix": "Visitez ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " pour récupérer votre clé API.", + "provider.connect.devoraZen.visit.prefix": "Visitez ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " pour récupérer votre clé API.", "provider.connect.oauth.code.visit.prefix": "Visitez ", "provider.connect.oauth.code.visit.link": "ce lien", "provider.connect.oauth.code.visit.suffix": - " pour récupérer votre code d'autorisation afin de connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", + " pour récupérer votre code d'autorisation afin de connecter votre compte et utiliser les modèles {{provider}} dans Devora.", "provider.connect.oauth.code.label": "Code d'autorisation {{method}}", "provider.connect.oauth.code.placeholder": "Code d'autorisation", "provider.connect.oauth.code.required": "Le code d'autorisation est requis", @@ -138,7 +138,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Visitez ", "provider.connect.oauth.auto.visit.link": "ce lien", "provider.connect.oauth.auto.visit.suffix": - " et entrez le code ci-dessous pour connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", + " et entrez le code ci-dessous pour connecter votre compte et utiliser les modèles {{provider}} dans Devora.", "provider.connect.oauth.auto.confirmationCode": "Code de confirmation", "provider.connect.toast.connected.title": "{{provider}} connecté", "provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.", @@ -273,7 +273,7 @@ export const dict = { "dialog.mcp.description": "{{enabled}} sur {{total}} activés", "dialog.mcp.empty": "Aucun MCP configuré", "dialog.lsp.empty": "LSPs détectés automatiquement par type de fichier", - "dialog.plugins.empty": "Plugins configurés dans opencode.json", + "dialog.plugins.empty": "Plugins configurés dans devora.json", "mcp.status.connected": "connecté", "mcp.status.failed": "échoué", "mcp.status.needs_auth": "nécessite auth", @@ -282,7 +282,7 @@ export const dict = { "dialog.directory.search.placeholder": "Rechercher des dossiers", "dialog.directory.empty": "Aucun dossier trouvé", "dialog.server.title": "Serveurs", - "dialog.server.description": "Changez le serveur OpenCode auquel cette application se connecte.", + "dialog.server.description": "Changez le serveur Devora auquel cette application se connecte.", "dialog.server.search.placeholder": "Rechercher des serveurs", "dialog.server.empty": "Aucun serveur pour l'instant", "dialog.server.add.title": "Ajouter un serveur", @@ -399,7 +399,7 @@ export const dict = { "toast.session.listFailed.title": "Échec du chargement des sessions pour {{project}}", "toast.update.title": "Mise à jour disponible", "toast.update.description": - "Une nouvelle version d'OpenCode ({{version}}) est maintenant disponible pour installation.", + "Une nouvelle version d'Devora ({{version}}) est maintenant disponible pour installation.", "toast.update.action.installRestart": "Installer et redémarrer", "toast.update.action.notYet": "Pas encore", "error.page.title": "Quelque chose s'est mal passé", @@ -409,7 +409,7 @@ export const dict = { "error.page.action.checking": "Vérification...", "error.page.action.checkUpdates": "Vérifier les mises à jour", "error.page.action.updateTo": "Mettre à jour vers {{version}}", - "error.page.report.prefix": "Veuillez signaler cette erreur à l'équipe OpenCode", + "error.page.report.prefix": "Veuillez signaler cette erreur à l'équipe Devora", "error.page.report.discord": "sur Discord", "error.page.version": "Version : {{version}}", "error.dev.rootNotFound": @@ -425,9 +425,9 @@ export const dict = { "error.chain.responseBody": "Corps de la réponse :\n{{body}}", "error.chain.didYouMean": "Vouliez-vous dire : {{suggestions}}", "error.chain.modelNotFound": "Modèle introuvable : {{provider}}/{{model}}", - "error.chain.checkConfig": "Vérifiez votre configuration (opencode.json) pour les noms de fournisseur/modèle", + "error.chain.checkConfig": "Vérifiez votre configuration (devora.json) pour les noms de fournisseur/modèle", "error.chain.mcpFailed": - "Le serveur MCP \"{{name}}\" a échoué. Notez qu'OpenCode ne supporte pas encore l'authentification MCP.", + "Le serveur MCP \"{{name}}\" a échoué. Notez qu'Devora ne supporte pas encore l'authentification MCP.", "error.chain.providerAuthFailed": "Échec de l'authentification du fournisseur ({{provider}}) : {{message}}", "error.chain.providerInitFailed": 'Échec de l\'initialisation du fournisseur "{{provider}}". Vérifiez les identifiants et la configuration.', @@ -550,20 +550,20 @@ export const dict = { "sidebar.workspaces.disable": "Désactiver les espaces de travail", "sidebar.gettingStarted.title": "Commencer", "sidebar.gettingStarted.line1": - "OpenCode inclut des modèles gratuits pour que vous puissiez commencer immédiatement.", + "Devora inclut des modèles gratuits pour que vous puissiez commencer immédiatement.", "sidebar.gettingStarted.line2": "Connectez n'importe quel fournisseur pour utiliser des modèles, y compris Claude, GPT, Gemini etc.", "sidebar.project.recentSessions": "Sessions récentes", "sidebar.project.viewAllSessions": "Voir toutes les sessions", "sidebar.project.clearNotifications": "Effacer les notifications", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Bureau", "settings.section.server": "Serveur", "settings.tab.general": "Général", "settings.tab.shortcuts": "Raccourcis", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "Intégration WSL", - "settings.desktop.wsl.description": "Exécuter le serveur OpenCode dans WSL sur Windows.", + "settings.desktop.wsl.description": "Exécuter le serveur Devora dans WSL sur Windows.", "settings.general.section.appearance": "Apparence", "settings.general.section.notifications": "Notifications système", "settings.general.section.updates": "Mises à jour", @@ -571,13 +571,13 @@ export const dict = { "settings.general.section.feed": "Flux", "settings.general.section.display": "Affichage", "settings.general.row.language.title": "Langue", - "settings.general.row.language.description": "Changer la langue d'affichage pour OpenCode", + "settings.general.row.language.description": "Changer la langue d'affichage pour Devora", "settings.general.row.appearance.title": "Apparence", - "settings.general.row.appearance.description": "Personnaliser l'apparence d'OpenCode sur votre appareil", + "settings.general.row.appearance.description": "Personnaliser l'apparence d'Devora sur votre appareil", "settings.general.row.colorScheme.title": "Schéma de couleurs", - "settings.general.row.colorScheme.description": "Choisissez si OpenCode suit le thème système, clair ou sombre", + "settings.general.row.colorScheme.description": "Choisissez si Devora suit le thème système, clair ou sombre", "settings.general.row.theme.title": "Thème", - "settings.general.row.theme.description": "Personnaliser le thème d'OpenCode.", + "settings.general.row.theme.description": "Personnaliser le thème d'Devora.", "settings.general.row.font.title": "Police de code", "settings.general.row.font.description": "Personnaliser la police utilisée dans les blocs de code", "settings.general.row.terminalFont.title": "Terminal Font", @@ -605,13 +605,13 @@ export const dict = { "settings.general.row.releaseNotes.title": "Notes de version", "settings.general.row.releaseNotes.description": 'Afficher des pop-ups "Quoi de neuf" après les mises à jour', "settings.updates.row.startup.title": "Vérifier les mises à jour au démarrage", - "settings.updates.row.startup.description": "Vérifier automatiquement les mises à jour au lancement d'OpenCode", + "settings.updates.row.startup.description": "Vérifier automatiquement les mises à jour au lancement d'Devora", "settings.updates.row.check.title": "Vérifier les mises à jour", "settings.updates.row.check.description": "Vérifier manuellement les mises à jour et installer si disponible", "settings.updates.action.checkNow": "Vérifier maintenant", "settings.updates.action.checking": "Vérification...", "settings.updates.toast.latest.title": "Vous êtes à jour", - "settings.updates.toast.latest.description": "Vous utilisez la dernière version d'OpenCode.", + "settings.updates.toast.latest.description": "Vous utilisez la dernière version d'Devora.", "sound.option.none": "Aucun", "sound.option.alert01": "Alerte 01", "sound.option.alert02": "Alerte 02", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 76783341..749887fb 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -90,9 +90,9 @@ export const dict = { "dialog.provider.group.popular": "人気", "dialog.provider.group.other": "その他", "dialog.provider.tag.recommended": "推奨", - "dialog.provider.opencode.note": "Claude, GPT, Geminiなどを含む厳選されたモデル", - "dialog.provider.opencode.tagline": "信頼性の高い最適化モデル", - "dialog.provider.opencodeGo.tagline": "すべての人に低価格のサブスクリプション", + "dialog.provider.devora.note": "Claude, GPT, Geminiなどを含む厳選されたモデル", + "dialog.provider.devora.tagline": "信頼性の高い最適化モデル", + "dialog.provider.devoraGo.tagline": "すべての人に低価格のサブスクリプション", "dialog.provider.anthropic.note": "Claude Pro/MaxまたはAPIキーで接続", "dialog.provider.copilot.note": "CopilotまたはAPIキーで接続", "dialog.provider.openai.note": "ChatGPT Pro/PlusまたはAPIキーで接続", @@ -105,7 +105,7 @@ export const dict = { "dialog.model.manage": "モデルを管理", "dialog.model.manage.description": "モデルセレクターに表示するモデルをカスタマイズします。", "dialog.model.manage.provider.toggle": "すべての{{provider}}モデルを切り替え", - "dialog.model.unpaid.freeModels.title": "OpenCodeが提供する無料モデル", + "dialog.model.unpaid.freeModels.title": "Devoraが提供する無料モデル", "dialog.model.unpaid.addMore.title": "人気のプロバイダーからモデルを追加", "dialog.provider.viewAll": "さらにプロバイダーを表示", "provider.connect.title": "{{provider}}を接続", @@ -116,20 +116,20 @@ export const dict = { "provider.connect.status.waiting": "認証を待機中...", "provider.connect.status.failed": "認証に失敗しました: {{error}}", "provider.connect.apiKey.description": - "{{provider}}のAPIキーを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用します。", + "{{provider}}のAPIキーを入力してアカウントを接続し、Devoraで{{provider}}モデルを使用します。", "provider.connect.apiKey.label": "{{provider}} APIキー", "provider.connect.apiKey.placeholder": "APIキー", "provider.connect.apiKey.required": "APIキーが必要です", - "provider.connect.opencodeZen.line1": - "OpenCode Zenは、コーディングエージェント向けに最適化された信頼性の高いモデルへのアクセスを提供します。", - "provider.connect.opencodeZen.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。", - "provider.connect.opencodeZen.visit.prefix": " ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " にアクセスしてAPIキーを取得してください。", + "provider.connect.devoraZen.line1": + "Devora Zenは、コーディングエージェント向けに最適化された信頼性の高いモデルへのアクセスを提供します。", + "provider.connect.devoraZen.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。", + "provider.connect.devoraZen.visit.prefix": " ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " にアクセスしてAPIキーを取得してください。", "provider.connect.oauth.code.visit.prefix": " ", "provider.connect.oauth.code.visit.link": "このリンク", "provider.connect.oauth.code.visit.suffix": - " にアクセスして認証コードを取得し、アカウントを接続してOpenCodeで{{provider}}モデルを使用してください。", + " にアクセスして認証コードを取得し、アカウントを接続してDevoraで{{provider}}モデルを使用してください。", "provider.connect.oauth.code.label": "{{method}} 認証コード", "provider.connect.oauth.code.placeholder": "認証コード", "provider.connect.oauth.code.required": "認証コードが必要です", @@ -137,7 +137,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": " ", "provider.connect.oauth.auto.visit.link": "このリンク", "provider.connect.oauth.auto.visit.suffix": - " にアクセスし、以下のコードを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用してください。", + " にアクセスし、以下のコードを入力してアカウントを接続し、Devoraで{{provider}}モデルを使用してください。", "provider.connect.oauth.auto.confirmationCode": "確認コード", "provider.connect.toast.connected.title": "{{provider}}が接続されました", "provider.connect.toast.connected.description": "{{provider}}モデルが使用可能になりました。", @@ -271,7 +271,7 @@ export const dict = { "dialog.mcp.description": "{{total}}個中{{enabled}}個が有効", "dialog.mcp.empty": "MCPが設定されていません", "dialog.lsp.empty": "ファイルタイプから自動検出されたLSP", - "dialog.plugins.empty": "opencode.jsonで設定されたプラグイン", + "dialog.plugins.empty": "devora.jsonで設定されたプラグイン", "mcp.status.connected": "接続済み", "mcp.status.failed": "失敗", "mcp.status.needs_auth": "認証が必要", @@ -280,7 +280,7 @@ export const dict = { "dialog.directory.search.placeholder": "フォルダを検索", "dialog.directory.empty": "フォルダが見つかりません", "dialog.server.title": "サーバー", - "dialog.server.description": "このアプリが接続するOpenCodeサーバーを切り替えます。", + "dialog.server.description": "このアプリが接続するDevoraサーバーを切り替えます。", "dialog.server.search.placeholder": "サーバーを検索", "dialog.server.empty": "サーバーはまだありません", "dialog.server.add.title": "サーバーを追加", @@ -395,7 +395,7 @@ export const dict = { "toast.session.unshare.failed.description": "セッションの共有解除中にエラーが発生しました", "toast.session.listFailed.title": "{{project}}のセッション読み込みに失敗しました", "toast.update.title": "アップデートが利用可能です", - "toast.update.description": "OpenCodeの新しいバージョン ({{version}}) がインストール可能です。", + "toast.update.description": "Devoraの新しいバージョン ({{version}}) がインストール可能です。", "toast.update.action.installRestart": "インストールして再起動", "toast.update.action.notYet": "今はしない", "error.page.title": "問題が発生しました", @@ -405,7 +405,7 @@ export const dict = { "error.page.action.checking": "確認中...", "error.page.action.checkUpdates": "アップデートを確認", "error.page.action.updateTo": "{{version}}にアップデート", - "error.page.report.prefix": "このエラーをOpenCodeチームに報告してください: ", + "error.page.report.prefix": "このエラーをDevoraチームに報告してください: ", "error.page.report.discord": "Discord", "error.page.version": "バージョン: {{version}}", "error.dev.rootNotFound": @@ -420,8 +420,8 @@ export const dict = { "error.chain.responseBody": "レスポンス本文:\n{{body}}", "error.chain.didYouMean": "もしかして: {{suggestions}}", "error.chain.modelNotFound": "モデルが見つかりません: {{provider}}/{{model}}", - "error.chain.checkConfig": "config (opencode.json) のプロバイダー/モデル名を確認してください", - "error.chain.mcpFailed": 'MCPサーバー "{{name}}" が失敗しました。注意: OpenCodeはまだMCP認証をサポートしていません。', + "error.chain.checkConfig": "config (devora.json) のプロバイダー/モデル名を確認してください", + "error.chain.mcpFailed": 'MCPサーバー "{{name}}" が失敗しました。注意: DevoraはまだMCP認証をサポートしていません。', "error.chain.providerAuthFailed": "プロバイダー認証に失敗しました ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'プロバイダー "{{provider}}" の初期化に失敗しました。認証情報と設定を確認してください。', @@ -541,19 +541,19 @@ export const dict = { "sidebar.workspaces.enable": "ワークスペースを有効化", "sidebar.workspaces.disable": "ワークスペースを無効化", "sidebar.gettingStarted.title": "はじめに", - "sidebar.gettingStarted.line1": "OpenCodeには無料モデルが含まれているため、すぐに開始できます。", + "sidebar.gettingStarted.line1": "Devoraには無料モデルが含まれているため、すぐに開始できます。", "sidebar.gettingStarted.line2": "プロバイダーを接続して、Claude、GPT、Geminiなどのモデルを使用できます。", "sidebar.project.recentSessions": "最近のセッション", "sidebar.project.viewAllSessions": "すべてのセッションを表示", "sidebar.project.clearNotifications": "通知をクリア", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "デスクトップ", "settings.section.server": "サーバー", "settings.tab.general": "一般", "settings.tab.shortcuts": "ショートカット", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL連携", - "settings.desktop.wsl.description": "WindowsのWSL環境でOpenCodeサーバーを実行します。", + "settings.desktop.wsl.description": "WindowsのWSL環境でDevoraサーバーを実行します。", "settings.general.section.appearance": "外観", "settings.general.section.notifications": "システム通知", "settings.general.section.updates": "アップデート", @@ -561,13 +561,13 @@ export const dict = { "settings.general.section.feed": "フィード", "settings.general.section.display": "ディスプレイ", "settings.general.row.language.title": "言語", - "settings.general.row.language.description": "OpenCodeの表示言語を変更します", + "settings.general.row.language.description": "Devoraの表示言語を変更します", "settings.general.row.appearance.title": "外観", - "settings.general.row.appearance.description": "デバイスでのOpenCodeの表示をカスタマイズします", + "settings.general.row.appearance.description": "デバイスでのDevoraの表示をカスタマイズします", "settings.general.row.colorScheme.title": "配色", - "settings.general.row.colorScheme.description": "OpenCodeがシステム、ライト、またはダークテーマに従うかを選択します", + "settings.general.row.colorScheme.description": "Devoraがシステム、ライト、またはダークテーマに従うかを選択します", "settings.general.row.theme.title": "テーマ", - "settings.general.row.theme.description": "OpenCodeのテーマをカスタマイズします。", + "settings.general.row.theme.description": "Devoraのテーマをカスタマイズします。", "settings.general.row.font.title": "コードフォント", "settings.general.row.font.description": "コードブロックで使用するフォントをカスタマイズします", "settings.general.row.terminalFont.title": "Terminal Font", @@ -594,13 +594,13 @@ export const dict = { "settings.general.row.releaseNotes.title": "リリースノート", "settings.general.row.releaseNotes.description": "アップデート後に「新機能」ポップアップを表示", "settings.updates.row.startup.title": "起動時にアップデートを確認", - "settings.updates.row.startup.description": "OpenCode の起動時に自動でアップデートを確認します", + "settings.updates.row.startup.description": "Devora の起動時に自動でアップデートを確認します", "settings.updates.row.check.title": "アップデートを確認", "settings.updates.row.check.description": "手動でアップデートを確認し、利用可能ならインストールします", "settings.updates.action.checkNow": "今すぐ確認", "settings.updates.action.checking": "確認中...", "settings.updates.toast.latest.title": "最新です", - "settings.updates.toast.latest.description": "OpenCode は最新バージョンです。", + "settings.updates.toast.latest.description": "Devora は最新バージョンです。", "sound.option.none": "なし", "sound.option.alert01": "アラート 01", "sound.option.alert02": "アラート 02", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 76bf33df..1e6852e2 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -90,9 +90,9 @@ export const dict = { "dialog.provider.group.popular": "인기", "dialog.provider.group.other": "기타", "dialog.provider.tag.recommended": "추천", - "dialog.provider.opencode.note": "Claude, GPT, Gemini 등을 포함한 엄선된 모델", - "dialog.provider.opencode.tagline": "신뢰할 수 있는 최적화 모델", - "dialog.provider.opencodeGo.tagline": "모두를 위한 저렴한 구독", + "dialog.provider.devora.note": "Claude, GPT, Gemini 등을 포함한 엄선된 모델", + "dialog.provider.devora.tagline": "신뢰할 수 있는 최적화 모델", + "dialog.provider.devoraGo.tagline": "모두를 위한 저렴한 구독", "dialog.provider.anthropic.note": "Claude Pro/Max 또는 API 키로 연결", "dialog.provider.copilot.note": "Copilot 또는 API 키로 연결", "dialog.provider.openai.note": "ChatGPT Pro/Plus 또는 API 키로 연결", @@ -105,7 +105,7 @@ export const dict = { "dialog.model.manage": "모델 관리", "dialog.model.manage.description": "모델 선택기에 표시할 모델 사용자 지정", "dialog.model.manage.provider.toggle": "모든 {{provider}} 모델 토글", - "dialog.model.unpaid.freeModels.title": "OpenCode에서 제공하는 무료 모델", + "dialog.model.unpaid.freeModels.title": "Devora에서 제공하는 무료 모델", "dialog.model.unpaid.addMore.title": "인기 공급자의 모델 추가", "dialog.provider.viewAll": "더 많은 공급자 보기", "provider.connect.title": "{{provider}} 연결", @@ -116,20 +116,20 @@ export const dict = { "provider.connect.status.waiting": "인증 대기 중...", "provider.connect.status.failed": "인증 실패: {{error}}", "provider.connect.apiKey.description": - "{{provider}} API 키를 입력하여 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", + "{{provider}} API 키를 입력하여 계정을 연결하고 Devora에서 {{provider}} 모델을 사용하세요.", "provider.connect.apiKey.label": "{{provider}} API 키", "provider.connect.apiKey.placeholder": "API 키", "provider.connect.apiKey.required": "API 키가 필요합니다", - "provider.connect.opencodeZen.line1": - "OpenCode Zen은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.", - "provider.connect.opencodeZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.", - "provider.connect.opencodeZen.visit.prefix": "다음 ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": "을 방문하여 API 키를 받으세요.", + "provider.connect.devoraZen.line1": + "Devora Zen은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.", + "provider.connect.devoraZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.", + "provider.connect.devoraZen.visit.prefix": "다음 ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": "을 방문하여 API 키를 받으세요.", "provider.connect.oauth.code.visit.prefix": "다음 ", "provider.connect.oauth.code.visit.link": "이 링크", "provider.connect.oauth.code.visit.suffix": - "를 방문하여 인증 코드를 받아 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", + "를 방문하여 인증 코드를 받아 계정을 연결하고 Devora에서 {{provider}} 모델을 사용하세요.", "provider.connect.oauth.code.label": "{{method}} 인증 코드", "provider.connect.oauth.code.placeholder": "인증 코드", "provider.connect.oauth.code.required": "인증 코드가 필요합니다", @@ -137,7 +137,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "다음 ", "provider.connect.oauth.auto.visit.link": "이 링크", "provider.connect.oauth.auto.visit.suffix": - "를 방문하고 아래 코드를 입력하여 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", + "를 방문하고 아래 코드를 입력하여 계정을 연결하고 Devora에서 {{provider}} 모델을 사용하세요.", "provider.connect.oauth.auto.confirmationCode": "확인 코드", "provider.connect.toast.connected.title": "{{provider}} 연결됨", "provider.connect.toast.connected.description": "이제 {{provider}} 모델을 사용할 수 있습니다.", @@ -271,7 +271,7 @@ export const dict = { "dialog.mcp.description": "{{total}}개 중 {{enabled}}개 활성화됨", "dialog.mcp.empty": "구성된 MCP 없음", "dialog.lsp.empty": "파일 유형에서 자동 감지된 LSP", - "dialog.plugins.empty": "opencode.json에 구성된 플러그인", + "dialog.plugins.empty": "devora.json에 구성된 플러그인", "mcp.status.connected": "연결됨", "mcp.status.failed": "실패", "mcp.status.needs_auth": "인증 필요", @@ -280,7 +280,7 @@ export const dict = { "dialog.directory.search.placeholder": "폴더 검색", "dialog.directory.empty": "폴더 없음", "dialog.server.title": "서버", - "dialog.server.description": "이 앱이 연결할 OpenCode 서버를 전환합니다.", + "dialog.server.description": "이 앱이 연결할 Devora 서버를 전환합니다.", "dialog.server.search.placeholder": "서버 검색", "dialog.server.empty": "서버 없음", "dialog.server.add.title": "서버 추가", @@ -394,7 +394,7 @@ export const dict = { "toast.session.unshare.failed.description": "세션 공유를 해제하는 동안 오류가 발생했습니다", "toast.session.listFailed.title": "{{project}}에 대한 세션을 로드하지 못했습니다", "toast.update.title": "업데이트 가능", - "toast.update.description": "OpenCode의 새 버전({{version}})을 설치할 수 있습니다.", + "toast.update.description": "Devora의 새 버전({{version}})을 설치할 수 있습니다.", "toast.update.action.installRestart": "설치 및 다시 시작", "toast.update.action.notYet": "나중에", "error.page.title": "문제가 발생했습니다", @@ -404,7 +404,7 @@ export const dict = { "error.page.action.checking": "확인 중...", "error.page.action.checkUpdates": "업데이트 확인", "error.page.action.updateTo": "{{version}} 버전으로 업데이트", - "error.page.report.prefix": "이 오류를 OpenCode 팀에 제보해 주세요: ", + "error.page.report.prefix": "이 오류를 Devora 팀에 제보해 주세요: ", "error.page.report.discord": "Discord", "error.page.version": "버전: {{version}}", "error.dev.rootNotFound": @@ -419,8 +419,8 @@ export const dict = { "error.chain.responseBody": "응답 본문:\n{{body}}", "error.chain.didYouMean": "혹시 {{suggestions}}을(를) 의미하셨나요?", "error.chain.modelNotFound": "모델을 찾을 수 없음: {{provider}}/{{model}}", - "error.chain.checkConfig": "구성(opencode.json)의 공급자/모델 이름을 확인하세요", - "error.chain.mcpFailed": 'MCP 서버 "{{name}}" 실패. 참고: OpenCode는 아직 MCP 인증을 지원하지 않습니다.', + "error.chain.checkConfig": "구성(devora.json)의 공급자/모델 이름을 확인하세요", + "error.chain.mcpFailed": 'MCP 서버 "{{name}}" 실패. 참고: Devora는 아직 MCP 인증을 지원하지 않습니다.', "error.chain.providerAuthFailed": "공급자 인증 실패 ({{provider}}): {{message}}", "error.chain.providerInitFailed": '공급자 "{{provider}}" 초기화 실패. 자격 증명과 구성을 확인하세요.', "error.chain.configJsonInvalid": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다", @@ -538,19 +538,19 @@ export const dict = { "sidebar.workspaces.enable": "작업 공간 활성화", "sidebar.workspaces.disable": "작업 공간 비활성화", "sidebar.gettingStarted.title": "시작하기", - "sidebar.gettingStarted.line1": "OpenCode에는 무료 모델이 포함되어 있어 즉시 시작할 수 있습니다.", + "sidebar.gettingStarted.line1": "Devora에는 무료 모델이 포함되어 있어 즉시 시작할 수 있습니다.", "sidebar.gettingStarted.line2": "Claude, GPT, Gemini 등을 포함한 모델을 사용하려면 공급자를 연결하세요.", "sidebar.project.recentSessions": "최근 세션", "sidebar.project.viewAllSessions": "모든 세션 보기", "sidebar.project.clearNotifications": "알림 지우기", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "데스크톱", "settings.section.server": "서버", "settings.tab.general": "일반", "settings.tab.shortcuts": "단축키", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL 통합", - "settings.desktop.wsl.description": "Windows의 WSL 내부에서 OpenCode 서버를 실행합니다.", + "settings.desktop.wsl.description": "Windows의 WSL 내부에서 Devora 서버를 실행합니다.", "settings.general.section.appearance": "모양", "settings.general.section.notifications": "시스템 알림", "settings.general.section.updates": "업데이트", @@ -558,13 +558,13 @@ export const dict = { "settings.general.section.feed": "피드", "settings.general.section.display": "디스플레이", "settings.general.row.language.title": "언어", - "settings.general.row.language.description": "OpenCode 표시 언어 변경", + "settings.general.row.language.description": "Devora 표시 언어 변경", "settings.general.row.appearance.title": "모양", - "settings.general.row.appearance.description": "기기에서 OpenCode가 보이는 방식 사용자 지정", + "settings.general.row.appearance.description": "기기에서 Devora가 보이는 방식 사용자 지정", "settings.general.row.colorScheme.title": "색상 테마", - "settings.general.row.colorScheme.description": "OpenCode가 시스템, 라이트 또는 다크 테마를 따를지 선택하세요", + "settings.general.row.colorScheme.description": "Devora가 시스템, 라이트 또는 다크 테마를 따를지 선택하세요", "settings.general.row.theme.title": "테마", - "settings.general.row.theme.description": "OpenCode 테마 사용자 지정", + "settings.general.row.theme.description": "Devora 테마 사용자 지정", "settings.general.row.font.title": "코드 글꼴", "settings.general.row.font.description": "코드 블록에 사용되는 글꼴을 사용자 지정", "settings.general.row.terminalFont.title": "Terminal Font", @@ -590,13 +590,13 @@ export const dict = { "settings.general.row.releaseNotes.title": "릴리스 노트", "settings.general.row.releaseNotes.description": "업데이트 후 '새 소식' 팝업 표시", "settings.updates.row.startup.title": "시작 시 업데이트 확인", - "settings.updates.row.startup.description": "OpenCode를 실행할 때 업데이트를 자동으로 확인합니다", + "settings.updates.row.startup.description": "Devora를 실행할 때 업데이트를 자동으로 확인합니다", "settings.updates.row.check.title": "업데이트 확인", "settings.updates.row.check.description": "업데이트를 수동으로 확인하고, 사용 가능하면 설치합니다", "settings.updates.action.checkNow": "지금 확인", "settings.updates.action.checking": "확인 중...", "settings.updates.toast.latest.title": "최신 상태입니다", - "settings.updates.toast.latest.description": "현재 최신 버전의 OpenCode를 사용 중입니다.", + "settings.updates.toast.latest.description": "현재 최신 버전의 Devora를 사용 중입니다.", "sound.option.none": "없음", "sound.option.alert01": "알림 01", "sound.option.alert02": "알림 02", diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts index 75e557b1..8f494672 100644 --- a/packages/app/src/i18n/no.ts +++ b/packages/app/src/i18n/no.ts @@ -101,9 +101,9 @@ export const dict = { "dialog.provider.group.popular": "Populære", "dialog.provider.group.other": "Andre", "dialog.provider.tag.recommended": "Anbefalt", - "dialog.provider.opencode.note": "Utvalgte modeller inkludert Claude, GPT, Gemini og mer", - "dialog.provider.opencode.tagline": "Pålitelige, optimaliserte modeller", - "dialog.provider.opencodeGo.tagline": "Rimelig abonnement for alle", + "dialog.provider.devora.note": "Utvalgte modeller inkludert Claude, GPT, Gemini og mer", + "dialog.provider.devora.tagline": "Pålitelige, optimaliserte modeller", + "dialog.provider.devoraGo.tagline": "Rimelig abonnement for alle", "dialog.provider.anthropic.note": "Direkte tilgang til Claude-modeller, inkludert Pro og Max", "dialog.provider.copilot.note": "AI-modeller for kodeassistanse via GitHub Copilot", "dialog.provider.openai.note": "GPT-modeller for raske, dyktige generelle AI-oppgaver", @@ -118,7 +118,7 @@ export const dict = { "dialog.model.manage.description": "Tilpass hvilke modeller som vises i modellvelgeren.", "dialog.model.manage.provider.toggle": "Veksle alle {{provider}}-modeller", - "dialog.model.unpaid.freeModels.title": "Gratis modeller levert av OpenCode", + "dialog.model.unpaid.freeModels.title": "Gratis modeller levert av Devora", "dialog.model.unpaid.addMore.title": "Legg til flere modeller fra populære leverandører", "dialog.provider.viewAll": "Vis flere leverandører", @@ -131,21 +131,21 @@ export const dict = { "provider.connect.status.waiting": "Venter på autorisering...", "provider.connect.status.failed": "Autorisering mislyktes: {{error}}", "provider.connect.apiKey.description": - "Skriv inn din {{provider}} API-nøkkel for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", + "Skriv inn din {{provider}} API-nøkkel for å koble til kontoen din og bruke {{provider}}-modeller i Devora.", "provider.connect.apiKey.label": "{{provider}} API-nøkkel", "provider.connect.apiKey.placeholder": "API-nøkkel", "provider.connect.apiKey.required": "API-nøkkel er påkrevd", - "provider.connect.opencodeZen.line1": - "OpenCode Zen gir deg tilgang til et utvalg av pålitelige optimaliserte modeller for kodeagenter.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen gir deg tilgang til et utvalg av pålitelige optimaliserte modeller for kodeagenter.", + "provider.connect.devoraZen.line2": "Med én enkelt API-nøkkel får du tilgang til modeller som Claude, GPT, Gemini, GLM og flere.", - "provider.connect.opencodeZen.visit.prefix": "Besøk ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " for å hente API-nøkkelen din.", + "provider.connect.devoraZen.visit.prefix": "Besøk ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " for å hente API-nøkkelen din.", "provider.connect.oauth.code.visit.prefix": "Besøk ", "provider.connect.oauth.code.visit.link": "denne lenken", "provider.connect.oauth.code.visit.suffix": - " for å hente autorisasjonskoden din for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", + " for å hente autorisasjonskoden din for å koble til kontoen din og bruke {{provider}}-modeller i Devora.", "provider.connect.oauth.code.label": "{{method}} autorisasjonskode", "provider.connect.oauth.code.placeholder": "Autorisasjonskode", "provider.connect.oauth.code.required": "Autorisasjonskode er påkrevd", @@ -153,7 +153,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Besøk ", "provider.connect.oauth.auto.visit.link": "denne lenken", "provider.connect.oauth.auto.visit.suffix": - " og skriv inn koden nedenfor for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", + " og skriv inn koden nedenfor for å koble til kontoen din og bruke {{provider}}-modeller i Devora.", "provider.connect.oauth.auto.confirmationCode": "Bekreftelseskode", "provider.connect.toast.connected.title": "{{provider}} tilkoblet", "provider.connect.toast.connected.description": "{{provider}}-modeller er nå tilgjengelige.", @@ -297,7 +297,7 @@ export const dict = { "dialog.mcp.empty": "Ingen MCP-er konfigurert", "dialog.lsp.empty": "LSP-er automatisk oppdaget fra filtyper", - "dialog.plugins.empty": "Plugins konfigurert i opencode.json", + "dialog.plugins.empty": "Plugins konfigurert i devora.json", "mcp.status.connected": "tilkoblet", "mcp.status.failed": "mislyktes", @@ -310,7 +310,7 @@ export const dict = { "dialog.directory.empty": "Ingen mapper funnet", "dialog.server.title": "Servere", - "dialog.server.description": "Bytt hvilken OpenCode-server denne appen kobler til.", + "dialog.server.description": "Bytt hvilken Devora-server denne appen kobler til.", "dialog.server.search.placeholder": "Søk etter servere", "dialog.server.empty": "Ingen servere ennå", "dialog.server.add.title": "Legg til en server", @@ -442,7 +442,7 @@ export const dict = { "toast.session.listFailed.title": "Kunne ikke laste sesjoner for {{project}}", "toast.update.title": "Oppdatering tilgjengelig", - "toast.update.description": "En ny versjon av OpenCode ({{version}}) er nå tilgjengelig for installasjon.", + "toast.update.description": "En ny versjon av Devora ({{version}}) er nå tilgjengelig for installasjon.", "toast.update.action.installRestart": "Installer og start på nytt", "toast.update.action.notYet": "Ikke nå", @@ -453,7 +453,7 @@ export const dict = { "error.page.action.checking": "Sjekker...", "error.page.action.checkUpdates": "Se etter oppdateringer", "error.page.action.updateTo": "Oppdater til {{version}}", - "error.page.report.prefix": "Vennligst rapporter denne feilen til OpenCode-teamet", + "error.page.report.prefix": "Vennligst rapporter denne feilen til Devora-teamet", "error.page.report.discord": "på Discord", "error.page.version": "Versjon: {{version}}", @@ -471,8 +471,8 @@ export const dict = { "error.chain.responseBody": "Responsinnhold:\n{{body}}", "error.chain.didYouMean": "Mente du: {{suggestions}}", "error.chain.modelNotFound": "Modell ikke funnet: {{provider}}/{{model}}", - "error.chain.checkConfig": "Sjekk leverandør-/modellnavnene i konfigurasjonen din (opencode.json)", - "error.chain.mcpFailed": 'MCP-server "{{name}}" mislyktes. Merk at OpenCode ikke støtter MCP-autentisering ennå.', + "error.chain.checkConfig": "Sjekk leverandør-/modellnavnene i konfigurasjonen din (devora.json)", + "error.chain.mcpFailed": 'MCP-server "{{name}}" mislyktes. Merk at Devora ikke støtter MCP-autentisering ennå.', "error.chain.providerAuthFailed": "Leverandørautentisering mislyktes ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Kunne ikke initialisere leverandør "{{provider}}". Sjekk legitimasjon og konfigurasjon.', @@ -608,13 +608,13 @@ export const dict = { "sidebar.workspaces.enable": "Aktiver arbeidsområder", "sidebar.workspaces.disable": "Deaktiver arbeidsområder", "sidebar.gettingStarted.title": "Kom i gang", - "sidebar.gettingStarted.line1": "OpenCode inkluderer gratis modeller så du kan starte umiddelbart.", + "sidebar.gettingStarted.line1": "Devora inkluderer gratis modeller så du kan starte umiddelbart.", "sidebar.gettingStarted.line2": "Koble til en leverandør for å bruke modeller, inkl. Claude, GPT, Gemini osv.", "sidebar.project.recentSessions": "Nylige sesjoner", "sidebar.project.viewAllSessions": "Vis alle sesjoner", "sidebar.project.clearNotifications": "Fjern varsler", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Skrivebord", "settings.section.server": "Server", @@ -622,7 +622,7 @@ export const dict = { "settings.tab.shortcuts": "Snarveier", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL-integrasjon", - "settings.desktop.wsl.description": "Kjør OpenCode-serveren i WSL på Windows.", + "settings.desktop.wsl.description": "Kjør Devora-serveren i WSL på Windows.", "settings.general.section.appearance": "Utseende", "settings.general.section.notifications": "Systemvarsler", @@ -632,13 +632,13 @@ export const dict = { "settings.general.section.display": "Skjerm", "settings.general.row.language.title": "Språk", - "settings.general.row.language.description": "Endre visningsspråket for OpenCode", + "settings.general.row.language.description": "Endre visningsspråket for Devora", "settings.general.row.appearance.title": "Utseende", - "settings.general.row.appearance.description": "Tilpass hvordan OpenCode ser ut på enheten din", + "settings.general.row.appearance.description": "Tilpass hvordan Devora ser ut på enheten din", "settings.general.row.colorScheme.title": "Fargevalg", - "settings.general.row.colorScheme.description": "Velg om OpenCode skal følge systemets, lyst eller mørkt tema", + "settings.general.row.colorScheme.description": "Velg om Devora skal følge systemets, lyst eller mørkt tema", "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "Tilpass hvordan OpenCode er tematisert.", + "settings.general.row.theme.description": "Tilpass hvordan Devora er tematisert.", "settings.general.row.font.title": "Kodefont", "settings.general.row.font.description": "Tilpass skrifttypen som brukes i kodeblokker", "settings.general.row.terminalFont.title": "Terminal Font", @@ -665,13 +665,13 @@ export const dict = { "settings.general.row.releaseNotes.description": 'Vis "Hva er nytt"-vinduer etter oppdateringer', "settings.updates.row.startup.title": "Se etter oppdateringer ved oppstart", - "settings.updates.row.startup.description": "Se automatisk etter oppdateringer når OpenCode starter", + "settings.updates.row.startup.description": "Se automatisk etter oppdateringer når Devora starter", "settings.updates.row.check.title": "Se etter oppdateringer", "settings.updates.row.check.description": "Se etter oppdateringer manuelt og installer hvis tilgjengelig", "settings.updates.action.checkNow": "Sjekk nå", "settings.updates.action.checking": "Sjekker...", "settings.updates.toast.latest.title": "Du er oppdatert", - "settings.updates.toast.latest.description": "Du bruker den nyeste versjonen av OpenCode.", + "settings.updates.toast.latest.description": "Du bruker den nyeste versjonen av Devora.", "sound.option.none": "Ingen", "sound.option.alert01": "Varsel 01", "sound.option.alert02": "Varsel 02", diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts index 0ab4a690..64010a00 100644 --- a/packages/app/src/i18n/pl.ts +++ b/packages/app/src/i18n/pl.ts @@ -90,9 +90,9 @@ export const dict = { "dialog.provider.group.popular": "Popularne", "dialog.provider.group.other": "Inne", "dialog.provider.tag.recommended": "Zalecane", - "dialog.provider.opencode.note": "Wyselekcjonowane modele, w tym Claude, GPT, Gemini i inne", - "dialog.provider.opencode.tagline": "Niezawodne, zoptymalizowane modele", - "dialog.provider.opencodeGo.tagline": "Tania subskrypcja dla każdego", + "dialog.provider.devora.note": "Wyselekcjonowane modele, w tym Claude, GPT, Gemini i inne", + "dialog.provider.devora.tagline": "Niezawodne, zoptymalizowane modele", + "dialog.provider.devoraGo.tagline": "Tania subskrypcja dla każdego", "dialog.provider.anthropic.note": "Bezpośredni dostęp do modeli Claude, w tym Pro i Max", "dialog.provider.copilot.note": "Modele AI do pomocy w kodowaniu przez GitHub Copilot", "dialog.provider.openai.note": "Modele GPT do szybkich i wszechstronnych zadań AI", @@ -105,7 +105,7 @@ export const dict = { "dialog.model.manage": "Zarządzaj modelami", "dialog.model.manage.description": "Dostosuj, które modele pojawiają się w wyborze modelu.", "dialog.model.manage.provider.toggle": "Przełącz wszystkie modele {{provider}}", - "dialog.model.unpaid.freeModels.title": "Darmowe modele dostarczane przez OpenCode", + "dialog.model.unpaid.freeModels.title": "Darmowe modele dostarczane przez Devora", "dialog.model.unpaid.addMore.title": "Dodaj więcej modeli od popularnych dostawców", "dialog.provider.viewAll": "Zobacz więcej dostawców", "provider.connect.title": "Połącz {{provider}}", @@ -116,21 +116,21 @@ export const dict = { "provider.connect.status.waiting": "Oczekiwanie na autoryzację...", "provider.connect.status.failed": "Autoryzacja nie powiodła się: {{error}}", "provider.connect.apiKey.description": - "Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + "Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w Devora.", "provider.connect.apiKey.label": "Klucz API {{provider}}", "provider.connect.apiKey.placeholder": "Klucz API", "provider.connect.apiKey.required": "Klucz API jest wymagany", - "provider.connect.opencodeZen.line1": - "OpenCode Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.", + "provider.connect.devoraZen.line2": "Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.", - "provider.connect.opencodeZen.visit.prefix": "Odwiedź ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": ", aby odebrać swój klucz API.", + "provider.connect.devoraZen.visit.prefix": "Odwiedź ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": ", aby odebrać swój klucz API.", "provider.connect.oauth.code.visit.prefix": "Odwiedź ", "provider.connect.oauth.code.visit.link": "ten link", "provider.connect.oauth.code.visit.suffix": - ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w OpenCode.", + ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w Devora.", "provider.connect.oauth.code.label": "Kod autoryzacyjny {{method}}", "provider.connect.oauth.code.placeholder": "Kod autoryzacyjny", "provider.connect.oauth.code.required": "Kod autoryzacyjny jest wymagany", @@ -138,7 +138,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Odwiedź ", "provider.connect.oauth.auto.visit.link": "ten link", "provider.connect.oauth.auto.visit.suffix": - " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w Devora.", "provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający", "provider.connect.toast.connected.title": "Połączono {{provider}}", "provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.", @@ -273,7 +273,7 @@ export const dict = { "dialog.mcp.description": "{{enabled}} z {{total}} włączone", "dialog.mcp.empty": "Brak skonfigurowanych MCP", "dialog.lsp.empty": "LSP wykryte automatycznie na podstawie typów plików", - "dialog.plugins.empty": "Wtyczki skonfigurowane w opencode.json", + "dialog.plugins.empty": "Wtyczki skonfigurowane w devora.json", "mcp.status.connected": "połączono", "mcp.status.failed": "niepowodzenie", "mcp.status.needs_auth": "wymaga autoryzacji", @@ -282,7 +282,7 @@ export const dict = { "dialog.directory.search.placeholder": "Szukaj folderów", "dialog.directory.empty": "Nie znaleziono folderów", "dialog.server.title": "Serwery", - "dialog.server.description": "Przełącz serwer OpenCode, z którym łączy się ta aplikacja.", + "dialog.server.description": "Przełącz serwer Devora, z którym łączy się ta aplikacja.", "dialog.server.search.placeholder": "Szukaj serwerów", "dialog.server.empty": "Brak serwerów", "dialog.server.add.title": "Dodaj serwer", @@ -396,7 +396,7 @@ export const dict = { "toast.session.unshare.failed.description": "Wystąpił błąd podczas zatrzymywania udostępniania sesji", "toast.session.listFailed.title": "Nie udało się załadować sesji dla {{project}}", "toast.update.title": "Dostępna aktualizacja", - "toast.update.description": "Nowa wersja OpenCode ({{version}}) jest teraz dostępna do instalacji.", + "toast.update.description": "Nowa wersja Devora ({{version}}) jest teraz dostępna do instalacji.", "toast.update.action.installRestart": "Zainstaluj i zrestartuj", "toast.update.action.notYet": "Jeszcze nie", "error.page.title": "Coś poszło nie tak", @@ -406,7 +406,7 @@ export const dict = { "error.page.action.checking": "Sprawdzanie...", "error.page.action.checkUpdates": "Sprawdź aktualizacje", "error.page.action.updateTo": "Zaktualizuj do {{version}}", - "error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu OpenCode", + "error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu Devora", "error.page.report.discord": "na Discordzie", "error.page.version": "Wersja: {{version}}", "error.dev.rootNotFound": @@ -421,8 +421,8 @@ export const dict = { "error.chain.responseBody": "Treść odpowiedzi:\n{{body}}", "error.chain.didYouMean": "Czy miałeś na myśli: {{suggestions}}", "error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}", - "error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli", - "error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, OpenCode does not support MCP authentication yet.', + "error.chain.checkConfig": "Sprawdź swoją konfigurację (devora.json) nazwy dostawców/modeli", + "error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, Devora does not support MCP authentication yet.', "error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.', @@ -542,19 +542,19 @@ export const dict = { "sidebar.workspaces.enable": "Włącz przestrzenie robocze", "sidebar.workspaces.disable": "Wyłącz przestrzenie robocze", "sidebar.gettingStarted.title": "Pierwsze kroki", - "sidebar.gettingStarted.line1": "OpenCode zawiera darmowe modele, więc możesz zacząć od razu.", + "sidebar.gettingStarted.line1": "Devora zawiera darmowe modele, więc możesz zacząć od razu.", "sidebar.gettingStarted.line2": "Połącz dowolnego dostawcę, aby używać modeli, w tym Claude, GPT, Gemini itp.", "sidebar.project.recentSessions": "Ostatnie sesje", "sidebar.project.viewAllSessions": "Zobacz wszystkie sesje", "sidebar.project.clearNotifications": "Wyczyść powiadomienia", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Pulpit", "settings.section.server": "Serwer", "settings.tab.general": "Ogólne", "settings.tab.shortcuts": "Skróty", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL integration", - "settings.desktop.wsl.description": "Run the OpenCode server inside WSL on Windows.", + "settings.desktop.wsl.description": "Run the Devora server inside WSL on Windows.", "settings.general.section.appearance": "Wygląd", "settings.general.section.notifications": "Powiadomienia systemowe", "settings.general.section.updates": "Aktualizacje", @@ -562,14 +562,14 @@ export const dict = { "settings.general.section.feed": "Kanał", "settings.general.section.display": "Ekran", "settings.general.row.language.title": "Język", - "settings.general.row.language.description": "Zmień język wyświetlania dla OpenCode", + "settings.general.row.language.description": "Zmień język wyświetlania dla Devora", "settings.general.row.appearance.title": "Wygląd", - "settings.general.row.appearance.description": "Dostosuj wygląd OpenCode na swoim urządzeniu", + "settings.general.row.appearance.description": "Dostosuj wygląd Devora na swoim urządzeniu", "settings.general.row.colorScheme.title": "Schemat kolorów", "settings.general.row.colorScheme.description": - "Wybierz, czy OpenCode ma używać motywu systemowego, jasnego czy ciemnego", + "Wybierz, czy Devora ma używać motywu systemowego, jasnego czy ciemnego", "settings.general.row.theme.title": "Motyw", - "settings.general.row.theme.description": "Dostosuj motyw OpenCode.", + "settings.general.row.theme.description": "Dostosuj motyw Devora.", "settings.general.row.font.title": "Czcionka kodu", "settings.general.row.font.description": "Dostosuj czcionkę używaną w blokach kodu", "settings.general.row.terminalFont.title": "Terminal Font", @@ -595,13 +595,13 @@ export const dict = { "settings.general.row.releaseNotes.title": "Informacje o wydaniu", "settings.general.row.releaseNotes.description": 'Pokazuj wyskakujące okna "Co nowego" po aktualizacjach', "settings.updates.row.startup.title": "Sprawdzaj aktualizacje przy uruchomieniu", - "settings.updates.row.startup.description": "Automatycznie sprawdzaj aktualizacje podczas uruchamiania OpenCode", + "settings.updates.row.startup.description": "Automatycznie sprawdzaj aktualizacje podczas uruchamiania Devora", "settings.updates.row.check.title": "Sprawdź aktualizacje", "settings.updates.row.check.description": "Ręcznie sprawdź aktualizacje i zainstaluj, jeśli są dostępne", "settings.updates.action.checkNow": "Sprawdź teraz", "settings.updates.action.checking": "Sprawdzanie...", "settings.updates.toast.latest.title": "Masz najnowszą wersję", - "settings.updates.toast.latest.description": "Korzystasz z najnowszej wersji OpenCode.", + "settings.updates.toast.latest.description": "Korzystasz z najnowszej wersji Devora.", "sound.option.none": "Brak", "sound.option.alert01": "Alert 01", "sound.option.alert02": "Alert 02", diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts index 135c8e66..674d6752 100644 --- a/packages/app/src/i18n/ru.ts +++ b/packages/app/src/i18n/ru.ts @@ -98,9 +98,9 @@ export const dict = { "dialog.provider.group.popular": "Популярные", "dialog.provider.group.other": "Другие", "dialog.provider.tag.recommended": "Рекомендуемые", - "dialog.provider.opencode.note": "Отобранные модели, включая Claude, GPT, Gemini и другие", - "dialog.provider.opencode.tagline": "Надежные оптимизированные модели", - "dialog.provider.opencodeGo.tagline": "Доступная подписка для всех", + "dialog.provider.devora.note": "Отобранные модели, включая Claude, GPT, Gemini и другие", + "dialog.provider.devora.tagline": "Надежные оптимизированные модели", + "dialog.provider.devoraGo.tagline": "Доступная подписка для всех", "dialog.provider.anthropic.note": "Прямой доступ к моделям Claude, включая Pro и Max", "dialog.provider.copilot.note": "ИИ-модели для помощи в кодировании через GitHub Copilot", "dialog.provider.openai.note": "Модели GPT для быстрых и мощных задач общего ИИ", @@ -115,7 +115,7 @@ export const dict = { "dialog.model.manage.description": "Настройте какие модели появляются в выборе модели", "dialog.model.manage.provider.toggle": "Переключить все модели {{provider}}", - "dialog.model.unpaid.freeModels.title": "Бесплатные модели от OpenCode", + "dialog.model.unpaid.freeModels.title": "Бесплатные модели от Devora", "dialog.model.unpaid.addMore.title": "Добавьте больше моделей от популярных провайдеров", "dialog.provider.viewAll": "Показать больше провайдеров", @@ -128,21 +128,21 @@ export const dict = { "provider.connect.status.waiting": "Ожидание авторизации...", "provider.connect.status.failed": "Ошибка авторизации: {{error}}", "provider.connect.apiKey.description": - "Введите ваш API ключ {{provider}} для подключения аккаунта и использования моделей {{provider}} в OpenCode.", + "Введите ваш API ключ {{provider}} для подключения аккаунта и использования моделей {{provider}} в Devora.", "provider.connect.apiKey.label": "{{provider}} API ключ", "provider.connect.apiKey.placeholder": "API ключ", "provider.connect.apiKey.required": "API ключ обязателен", - "provider.connect.opencodeZen.line1": - "OpenCode Zen даёт вам доступ к отобранным надёжным оптимизированным моделям для агентов программирования.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen даёт вам доступ к отобранным надёжным оптимизированным моделям для агентов программирования.", + "provider.connect.devoraZen.line2": "С одним API ключом вы получите доступ к таким моделям как Claude, GPT, Gemini, GLM и другим.", - "provider.connect.opencodeZen.visit.prefix": "Посетите ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " чтобы получить ваш API ключ.", + "provider.connect.devoraZen.visit.prefix": "Посетите ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " чтобы получить ваш API ключ.", "provider.connect.oauth.code.visit.prefix": "Посетите ", "provider.connect.oauth.code.visit.link": "эту ссылку", "provider.connect.oauth.code.visit.suffix": - " чтобы получить код авторизации для подключения аккаунта и использования моделей {{provider}} в OpenCode.", + " чтобы получить код авторизации для подключения аккаунта и использования моделей {{provider}} в Devora.", "provider.connect.oauth.code.label": "{{method}} код авторизации", "provider.connect.oauth.code.placeholder": "Код авторизации", "provider.connect.oauth.code.required": "Код авторизации обязателен", @@ -150,7 +150,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "Посетите ", "provider.connect.oauth.auto.visit.link": "эту ссылку", "provider.connect.oauth.auto.visit.suffix": - " и введите код ниже для подключения аккаунта и использования моделей {{provider}} в OpenCode.", + " и введите код ниже для подключения аккаунта и использования моделей {{provider}} в Devora.", "provider.connect.oauth.auto.confirmationCode": "Код подтверждения", "provider.connect.toast.connected.title": "{{provider}} подключён", "provider.connect.toast.connected.description": "Модели {{provider}} теперь доступны.", @@ -294,7 +294,7 @@ export const dict = { "dialog.mcp.empty": "MCP не настроены", "dialog.lsp.empty": "LSP автоматически обнаружены по типам файлов", - "dialog.plugins.empty": "Плагины настроены в opencode.json", + "dialog.plugins.empty": "Плагины настроены в devora.json", "mcp.status.connected": "подключено", "mcp.status.failed": "ошибка", @@ -307,7 +307,7 @@ export const dict = { "dialog.directory.empty": "Папки не найдены", "dialog.server.title": "Серверы", - "dialog.server.description": "Переключите сервер OpenCode к которому подключается приложение.", + "dialog.server.description": "Переключите сервер Devora к которому подключается приложение.", "dialog.server.search.placeholder": "Поиск серверов", "dialog.server.empty": "Серверов пока нет", "dialog.server.add.title": "Добавить сервер", @@ -440,7 +440,7 @@ export const dict = { "toast.session.listFailed.title": "Не удалось загрузить сессии для {{project}}", "toast.update.title": "Доступно обновление", - "toast.update.description": "Новая версия OpenCode ({{version}}) доступна для установки.", + "toast.update.description": "Новая версия Devora ({{version}}) доступна для установки.", "toast.update.action.installRestart": "Установить и перезапустить", "toast.update.action.notYet": "Пока нет", @@ -451,7 +451,7 @@ export const dict = { "error.page.action.checking": "Проверка...", "error.page.action.checkUpdates": "Проверить обновления", "error.page.action.updateTo": "Обновить до {{version}}", - "error.page.report.prefix": "Пожалуйста, сообщите об этой ошибке команде OpenCode", + "error.page.report.prefix": "Пожалуйста, сообщите об этой ошибке команде Devora", "error.page.report.discord": "в Discord", "error.page.version": "Версия: {{version}}", @@ -469,9 +469,9 @@ export const dict = { "error.chain.responseBody": "Тело ответа:\n{{body}}", "error.chain.didYouMean": "Возможно, вы имели в виду: {{suggestions}}", "error.chain.modelNotFound": "Модель не найдена: {{provider}}/{{model}}", - "error.chain.checkConfig": "Проверьте названия провайдера/модели в конфиге (opencode.json)", + "error.chain.checkConfig": "Проверьте названия провайдера/модели в конфиге (devora.json)", "error.chain.mcpFailed": - 'MCP сервер "{{name}}" завершился с ошибкой. Обратите внимание, что OpenCode пока не поддерживает MCP авторизацию.', + 'MCP сервер "{{name}}" завершился с ошибкой. Обратите внимание, что Devora пока не поддерживает MCP авторизацию.', "error.chain.providerAuthFailed": "Ошибка аутентификации провайдера ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'Не удалось инициализировать провайдера "{{provider}}". Проверьте учётные данные и конфигурацию.', @@ -605,21 +605,21 @@ export const dict = { "sidebar.workspaces.enable": "Включить рабочие пространства", "sidebar.workspaces.disable": "Отключить рабочие пространства", "sidebar.gettingStarted.title": "Начало работы", - "sidebar.gettingStarted.line1": "OpenCode включает бесплатные модели, чтобы вы могли начать сразу.", + "sidebar.gettingStarted.line1": "Devora включает бесплатные модели, чтобы вы могли начать сразу.", "sidebar.gettingStarted.line2": "Подключите любого провайдера для использования моделей, включая Claude, GPT, Gemini и др.", "sidebar.project.recentSessions": "Недавние сессии", "sidebar.project.viewAllSessions": "Посмотреть все сессии", "sidebar.project.clearNotifications": "Очистить уведомления", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "Приложение", "settings.section.server": "Сервер", "settings.tab.general": "Основные", "settings.tab.shortcuts": "Горячие клавиши", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "Интеграция с WSL", - "settings.desktop.wsl.description": "Запускать сервер OpenCode внутри WSL на Windows.", + "settings.desktop.wsl.description": "Запускать сервер Devora внутри WSL на Windows.", "settings.general.section.appearance": "Внешний вид", "settings.general.section.notifications": "Системные уведомления", @@ -629,13 +629,13 @@ export const dict = { "settings.general.section.display": "Дисплей", "settings.general.row.language.title": "Язык", - "settings.general.row.language.description": "Изменить язык отображения OpenCode", + "settings.general.row.language.description": "Изменить язык отображения Devora", "settings.general.row.appearance.title": "Внешний вид", - "settings.general.row.appearance.description": "Настройте как OpenCode выглядит на вашем устройстве", + "settings.general.row.appearance.description": "Настройте как Devora выглядит на вашем устройстве", "settings.general.row.colorScheme.title": "Цветовая схема", - "settings.general.row.colorScheme.description": "Выберите, следует ли OpenCode системной, светлой или тёмной теме", + "settings.general.row.colorScheme.description": "Выберите, следует ли Devora системной, светлой или тёмной теме", "settings.general.row.theme.title": "Тема", - "settings.general.row.theme.description": "Настройте оформление OpenCode.", + "settings.general.row.theme.description": "Настройте оформление Devora.", "settings.general.row.font.title": "Шрифт кода", "settings.general.row.font.description": "Настройте шрифт, используемый в блоках кода", "settings.general.row.terminalFont.title": "Terminal Font", @@ -665,13 +665,13 @@ export const dict = { "settings.general.row.releaseNotes.description": 'Показывать всплывающие окна "Что нового" после обновлений', "settings.updates.row.startup.title": "Проверять обновления при запуске", - "settings.updates.row.startup.description": "Автоматически проверять обновления при запуске OpenCode", + "settings.updates.row.startup.description": "Автоматически проверять обновления при запуске Devora", "settings.updates.row.check.title": "Проверить обновления", "settings.updates.row.check.description": "Проверить обновления вручную и установить, если доступны", "settings.updates.action.checkNow": "Проверить сейчас", "settings.updates.action.checking": "Проверка...", "settings.updates.toast.latest.title": "У вас последняя версия", - "settings.updates.toast.latest.description": "Вы используете последнюю версию OpenCode.", + "settings.updates.toast.latest.description": "Вы используете последнюю версию Devora.", "sound.option.none": "Нет", "sound.option.alert01": "Alert 01", "sound.option.alert02": "Alert 02", diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts index 81674df3..46b9b60b 100644 --- a/packages/app/src/i18n/th.ts +++ b/packages/app/src/i18n/th.ts @@ -98,9 +98,9 @@ export const dict = { "dialog.provider.group.popular": "ยอดนิยม", "dialog.provider.group.other": "อื่น ๆ", "dialog.provider.tag.recommended": "แนะนำ", - "dialog.provider.opencode.note": "โมเดลที่คัดสรร รวมถึง Claude, GPT, Gemini และอื่น ๆ", - "dialog.provider.opencode.tagline": "โมเดลที่เชื่อถือได้และปรับให้เหมาะสม", - "dialog.provider.opencodeGo.tagline": "การสมัครสมาชิกราคาประหยัดสำหรับทุกคน", + "dialog.provider.devora.note": "โมเดลที่คัดสรร รวมถึง Claude, GPT, Gemini และอื่น ๆ", + "dialog.provider.devora.tagline": "โมเดลที่เชื่อถือได้และปรับให้เหมาะสม", + "dialog.provider.devoraGo.tagline": "การสมัครสมาชิกราคาประหยัดสำหรับทุกคน", "dialog.provider.anthropic.note": "เข้าถึงโมเดล Claude โดยตรง รวมถึง Pro และ Max", "dialog.provider.copilot.note": "โมเดล AI สำหรับการช่วยเหลือในการเขียนโค้ดผ่าน GitHub Copilot", "dialog.provider.openai.note": "โมเดล GPT สำหรับงาน AI ทั่วไปที่รวดเร็วและมีความสามารถ", @@ -115,7 +115,7 @@ export const dict = { "dialog.model.manage.description": "ปรับแต่งโมเดลที่จะปรากฏในตัวเลือกโมเดล", "dialog.model.manage.provider.toggle": "สลับโมเดลทั้งหมดของ {{provider}}", - "dialog.model.unpaid.freeModels.title": "โมเดลฟรีที่จัดหาให้โดย OpenCode", + "dialog.model.unpaid.freeModels.title": "โมเดลฟรีที่จัดหาให้โดย Devora", "dialog.model.unpaid.addMore.title": "เพิ่มโมเดลเพิ่มเติมจากผู้ให้บริการยอดนิยม", "dialog.provider.viewAll": "แสดงผู้ให้บริการเพิ่มเติม", @@ -128,21 +128,21 @@ export const dict = { "provider.connect.status.waiting": "รอการอนุญาต...", "provider.connect.status.failed": "การอนุญาตล้มเหลว: {{error}}", "provider.connect.apiKey.description": - "ป้อนคีย์ API ของ {{provider}} เพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode", + "ป้อนคีย์ API ของ {{provider}} เพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Devora", "provider.connect.apiKey.label": "คีย์ API ของ {{provider}}", "provider.connect.apiKey.placeholder": "คีย์ API", "provider.connect.apiKey.required": "ต้องใช้คีย์ API", - "provider.connect.opencodeZen.line1": - "OpenCode Zen ให้คุณเข้าถึงชุดโมเดลที่เชื่อถือได้และปรับแต่งแล้วสำหรับเอเจนต์การเขียนโค้ด", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen ให้คุณเข้าถึงชุดโมเดลที่เชื่อถือได้และปรับแต่งแล้วสำหรับเอเจนต์การเขียนโค้ด", + "provider.connect.devoraZen.line2": "ด้วยคีย์ API เดียวคุณจะได้รับการเข้าถึงโมเดล เช่น Claude, GPT, Gemini, GLM และอื่น ๆ", - "provider.connect.opencodeZen.visit.prefix": "เยี่ยมชม ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " เพื่อรวบรวมคีย์ API ของคุณ", + "provider.connect.devoraZen.visit.prefix": "เยี่ยมชม ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " เพื่อรวบรวมคีย์ API ของคุณ", "provider.connect.oauth.code.visit.prefix": "เยี่ยมชม ", "provider.connect.oauth.code.visit.link": "ลิงก์นี้", "provider.connect.oauth.code.visit.suffix": - " เพื่อรวบรวมรหัสการอนุญาตของคุณเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode", + " เพื่อรวบรวมรหัสการอนุญาตของคุณเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Devora", "provider.connect.oauth.code.label": "รหัสการอนุญาต {{method}}", "provider.connect.oauth.code.placeholder": "รหัสการอนุญาต", "provider.connect.oauth.code.required": "ต้องใช้รหัสการอนุญาต", @@ -150,7 +150,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "เยี่ยมชม ", "provider.connect.oauth.auto.visit.link": "ลิงก์นี้", "provider.connect.oauth.auto.visit.suffix": - " และป้อนรหัสด้านล่างเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode", + " และป้อนรหัสด้านล่างเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Devora", "provider.connect.oauth.auto.confirmationCode": "รหัสยืนยัน", "provider.connect.toast.connected.title": "{{provider}} ที่เชื่อมต่อแล้ว", "provider.connect.toast.connected.description": "โมเดล {{provider}} พร้อมใช้งานแล้ว", @@ -294,7 +294,7 @@ export const dict = { "dialog.mcp.empty": "ไม่มี MCP ที่กำหนดค่า", "dialog.lsp.empty": "LSPs ตรวจจับอัตโนมัติจากประเภทไฟล์", - "dialog.plugins.empty": "ปลั๊กอินที่กำหนดค่าใน opencode.json", + "dialog.plugins.empty": "ปลั๊กอินที่กำหนดค่าใน devora.json", "mcp.status.connected": "เชื่อมต่อแล้ว", "mcp.status.failed": "ล้มเหลว", @@ -307,7 +307,7 @@ export const dict = { "dialog.directory.empty": "ไม่พบโฟลเดอร์", "dialog.server.title": "เซิร์ฟเวอร์", - "dialog.server.description": "สลับเซิร์ฟเวอร์ OpenCode ที่แอปนี้เชื่อมต่อด้วย", + "dialog.server.description": "สลับเซิร์ฟเวอร์ Devora ที่แอปนี้เชื่อมต่อด้วย", "dialog.server.search.placeholder": "ค้นหาเซิร์ฟเวอร์", "dialog.server.empty": "ยังไม่มีเซิร์ฟเวอร์", "dialog.server.add.title": "เพิ่มเซิร์ฟเวอร์", @@ -439,7 +439,7 @@ export const dict = { "toast.session.listFailed.title": "ไม่สามารถโหลดเซสชันสำหรับ {{project}}", "toast.update.title": "มีการอัปเดต", - "toast.update.description": "เวอร์ชันใหม่ของ OpenCode ({{version}}) พร้อมใช้งานสำหรับติดตั้ง", + "toast.update.description": "เวอร์ชันใหม่ของ Devora ({{version}}) พร้อมใช้งานสำหรับติดตั้ง", "toast.update.action.installRestart": "ติดตั้งและรีสตาร์ท", "toast.update.action.notYet": "ยังไม่", @@ -450,7 +450,7 @@ export const dict = { "error.page.action.checking": "กำลังตรวจสอบ...", "error.page.action.checkUpdates": "ตรวจสอบการอัปเดต", "error.page.action.updateTo": "อัปเดตเป็น {{version}}", - "error.page.report.prefix": "โปรดรายงานข้อผิดพลาดนี้ให้ทีม OpenCode", + "error.page.report.prefix": "โปรดรายงานข้อผิดพลาดนี้ให้ทีม Devora", "error.page.report.discord": "บน Discord", "error.page.version": "เวอร์ชัน: {{version}}", @@ -467,8 +467,8 @@ export const dict = { "error.chain.responseBody": "เนื้อหาการตอบสนอง:\n{{body}}", "error.chain.didYouMean": "คุณหมายถึง: {{suggestions}}", "error.chain.modelNotFound": "ไม่พบโมเดล: {{provider}}/{{model}}", - "error.chain.checkConfig": "ตรวจสอบการกำหนดค่าของคุณ (opencode.json) ชื่อผู้ให้บริการ/โมเดล", - "error.chain.mcpFailed": 'เซิร์ฟเวอร์ MCP "{{name}}" ล้มเหลว โปรดทราบว่า OpenCode ยังไม่รองรับการตรวจสอบสิทธิ์ MCP', + "error.chain.checkConfig": "ตรวจสอบการกำหนดค่าของคุณ (devora.json) ชื่อผู้ให้บริการ/โมเดล", + "error.chain.mcpFailed": 'เซิร์ฟเวอร์ MCP "{{name}}" ล้มเหลว โปรดทราบว่า Devora ยังไม่รองรับการตรวจสอบสิทธิ์ MCP', "error.chain.providerAuthFailed": "การตรวจสอบสิทธิ์ผู้ให้บริการล้มเหลว ({{provider}}): {{message}}", "error.chain.providerInitFailed": 'ไม่สามารถเริ่มต้นผู้ให้บริการ "{{provider}}" ตรวจสอบข้อมูลรับรองและการกำหนดค่า', "error.chain.configJsonInvalid": "ไฟล์กำหนดค่าที่ {{path}} ไม่ใช่ JSON(C) ที่ถูกต้อง", @@ -599,13 +599,13 @@ export const dict = { "sidebar.workspaces.enable": "เปิดใช้งานพื้นที่ทำงาน", "sidebar.workspaces.disable": "ปิดใช้งานพื้นที่ทำงาน", "sidebar.gettingStarted.title": "เริ่มต้นใช้งาน", - "sidebar.gettingStarted.line1": "OpenCode รวมถึงโมเดลฟรีเพื่อให้คุณเริ่มต้นได้ทันที", + "sidebar.gettingStarted.line1": "Devora รวมถึงโมเดลฟรีเพื่อให้คุณเริ่มต้นได้ทันที", "sidebar.gettingStarted.line2": "เชื่อมต่อผู้ให้บริการใด ๆ เพื่อใช้โมเดล รวมถึง Claude, GPT, Gemini ฯลฯ", "sidebar.project.recentSessions": "เซสชันล่าสุด", "sidebar.project.viewAllSessions": "ดูเซสชันทั้งหมด", "sidebar.project.clearNotifications": "ล้างการแจ้งเตือน", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "เดสก์ท็อป", "settings.section.server": "เซิร์ฟเวอร์", @@ -613,7 +613,7 @@ export const dict = { "settings.tab.shortcuts": "ทางลัด", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "การรวม WSL", - "settings.desktop.wsl.description": "เรียกใช้เซิร์ฟเวอร์ OpenCode ภายใน WSL บน Windows", + "settings.desktop.wsl.description": "เรียกใช้เซิร์ฟเวอร์ Devora ภายใน WSL บน Windows", "settings.general.section.appearance": "รูปลักษณ์", "settings.general.section.notifications": "การแจ้งเตือนระบบ", @@ -623,13 +623,13 @@ export const dict = { "settings.general.section.display": "การแสดงผล", "settings.general.row.language.title": "ภาษา", - "settings.general.row.language.description": "เปลี่ยนภาษาที่แสดงสำหรับ OpenCode", + "settings.general.row.language.description": "เปลี่ยนภาษาที่แสดงสำหรับ Devora", "settings.general.row.appearance.title": "รูปลักษณ์", - "settings.general.row.appearance.description": "ปรับแต่งวิธีการที่ OpenCode มีลักษณะบนอุปกรณ์ของคุณ", + "settings.general.row.appearance.description": "ปรับแต่งวิธีการที่ Devora มีลักษณะบนอุปกรณ์ของคุณ", "settings.general.row.colorScheme.title": "โทนสี", - "settings.general.row.colorScheme.description": "เลือกว่าจะให้ OpenCode ใช้ธีมตามระบบ สว่าง หรือมืด", + "settings.general.row.colorScheme.description": "เลือกว่าจะให้ Devora ใช้ธีมตามระบบ สว่าง หรือมืด", "settings.general.row.theme.title": "ธีม", - "settings.general.row.theme.description": "ปรับแต่งวิธีการที่ OpenCode มีธีม", + "settings.general.row.theme.description": "ปรับแต่งวิธีการที่ Devora มีธีม", "settings.general.row.font.title": "ฟอนต์โค้ด", "settings.general.row.font.description": "ปรับแต่งฟอนต์ที่ใช้ในบล็อกโค้ด", "settings.general.row.terminalFont.title": "Terminal Font", @@ -655,13 +655,13 @@ export const dict = { "settings.general.row.releaseNotes.description": "แสดงป๊อปอัพ What's New หลังจากอัปเดต", "settings.updates.row.startup.title": "ตรวจสอบการอัปเดตเมื่อเริ่มต้น", - "settings.updates.row.startup.description": "ตรวจสอบการอัปเดตโดยอัตโนมัติเมื่อ OpenCode เปิดใช้งาน", + "settings.updates.row.startup.description": "ตรวจสอบการอัปเดตโดยอัตโนมัติเมื่อ Devora เปิดใช้งาน", "settings.updates.row.check.title": "ตรวจสอบการอัปเดต", "settings.updates.row.check.description": "ตรวจสอบการอัปเดตด้วยตนเองและติดตั้งหากมี", "settings.updates.action.checkNow": "ตรวจสอบทันที", "settings.updates.action.checking": "กำลังตรวจสอบ...", "settings.updates.toast.latest.title": "คุณเป็นเวอร์ชันล่าสุดแล้ว", - "settings.updates.toast.latest.description": "คุณกำลังใช้งาน OpenCode เวอร์ชันล่าสุด", + "settings.updates.toast.latest.description": "คุณกำลังใช้งาน Devora เวอร์ชันล่าสุด", "sound.option.none": "ไม่มี", "sound.option.alert01": "เสียงเตือน 01", diff --git a/packages/app/src/i18n/tr.ts b/packages/app/src/i18n/tr.ts index f3cb3ab4..66bc0a45 100644 --- a/packages/app/src/i18n/tr.ts +++ b/packages/app/src/i18n/tr.ts @@ -102,9 +102,9 @@ export const dict = { "dialog.provider.group.popular": "Popüler", "dialog.provider.group.other": "Diğer", "dialog.provider.tag.recommended": "Önerilen", - "dialog.provider.opencode.note": "Claude, GPT, Gemini ve daha fazlasını içeren seçilmiş modeller", - "dialog.provider.opencode.tagline": "Güvenilir optimize edilmiş modeller", - "dialog.provider.opencodeGo.tagline": "Herkes için düşük maliyetli abonelik", + "dialog.provider.devora.note": "Claude, GPT, Gemini ve daha fazlasını içeren seçilmiş modeller", + "dialog.provider.devora.tagline": "Güvenilir optimize edilmiş modeller", + "dialog.provider.devoraGo.tagline": "Herkes için düşük maliyetli abonelik", "dialog.provider.anthropic.note": "Pro ve Max dahil Claude modellerine doğrudan erişim", "dialog.provider.copilot.note": "GitHub Copilot üzerinden kodlama yardımı için yapay zekâ modelleri", "dialog.provider.openai.note": "Hızlı ve yetenekli genel yapay zekâ görevleri için GPT modelleri", @@ -119,7 +119,7 @@ export const dict = { "dialog.model.manage.description": "Model seçicide hangi modellerin görüneceğini özelleştirin.", "dialog.model.manage.provider.toggle": "Tüm {{provider}} modellerini aç/kapat", - "dialog.model.unpaid.freeModels.title": "OpenCode tarafından sunulan ücretsiz modeller", + "dialog.model.unpaid.freeModels.title": "Devora tarafından sunulan ücretsiz modeller", "dialog.model.unpaid.addMore.title": "Popüler sağlayıcılardan daha fazla model ekleyin", "dialog.provider.viewAll": "Daha fazla sağlayıcı göster", @@ -132,19 +132,19 @@ export const dict = { "provider.connect.status.waiting": "Yetkilendirme bekleniyor...", "provider.connect.status.failed": "Yetkilendirme başarısız: {{error}}", "provider.connect.apiKey.description": - "{{provider}} hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için {{provider}} API anahtarınızı girin.", + "{{provider}} hesabınızı bağlamak ve Devora'da {{provider}} modellerini kullanmak için {{provider}} API anahtarınızı girin.", "provider.connect.apiKey.label": "{{provider}} API anahtarı", "provider.connect.apiKey.placeholder": "API anahtarı", "provider.connect.apiKey.required": "API anahtarı gerekli", - "provider.connect.opencodeZen.line1": - "OpenCode Zen, kodlama ajanları için seçilmiş güvenilir optimize edilmiş modellere erişim sağlar.", - "provider.connect.opencodeZen.line2": + "provider.connect.devoraZen.line1": + "Devora Zen, kodlama ajanları için seçilmiş güvenilir optimize edilmiş modellere erişim sağlar.", + "provider.connect.devoraZen.line2": "Tek bir API anahtarıyla Claude, GPT, Gemini, GLM ve daha fazlası gibi modellere erişebilirsiniz.", - "provider.connect.opencodeZen.visit.prefix": "", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " adresini ziyaret ederek API anahtarınızı alın.", + "provider.connect.devoraZen.visit.prefix": "", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " adresini ziyaret ederek API anahtarınızı alın.", "provider.connect.oauth.code.visit.prefix": - "Hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için ", + "Hesabınızı bağlamak ve Devora'da {{provider}} modellerini kullanmak için ", "provider.connect.oauth.code.visit.link": "bu bağlantıya", "provider.connect.oauth.code.visit.suffix": " tıklayarak yetkilendirme kodunuzu alın.", "provider.connect.oauth.code.label": "{{method}} yetkilendirme kodu", @@ -154,7 +154,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "", "provider.connect.oauth.auto.visit.link": "Bu bağlantıya", "provider.connect.oauth.auto.visit.suffix": - " tıklayarak aşağıdaki kodu girin ve hesabınızı bağlayarak OpenCode'da {{provider}} modellerini kullanın.", + " tıklayarak aşağıdaki kodu girin ve hesabınızı bağlayarak Devora'da {{provider}} modellerini kullanın.", "provider.connect.oauth.auto.confirmationCode": "Onay kodu", "provider.connect.toast.connected.title": "{{provider}} bağlandı", "provider.connect.toast.connected.description": "{{provider}} modelleri artık kullanımda.", @@ -299,7 +299,7 @@ export const dict = { "dialog.mcp.empty": "Yapılandırılmış MCP yok", "dialog.lsp.empty": "LSP'ler dosya türlerinden otomatik algılanır", - "dialog.plugins.empty": "Eklentiler opencode.json içinde yapılandırılır", + "dialog.plugins.empty": "Eklentiler devora.json içinde yapılandırılır", "mcp.status.connected": "bağlı", "mcp.status.failed": "başarısız", @@ -312,7 +312,7 @@ export const dict = { "dialog.directory.empty": "Klasör bulunamadı", "dialog.server.title": "Sunucular", - "dialog.server.description": "Bu uygulamanın hangi OpenCode sunucusuna bağlanacağını değiştirin.", + "dialog.server.description": "Bu uygulamanın hangi Devora sunucusuna bağlanacağını değiştirin.", "dialog.server.search.placeholder": "Sunucu ara", "dialog.server.empty": "Henüz sunucu yok", "dialog.server.add.title": "Sunucu ekle", @@ -444,7 +444,7 @@ export const dict = { "toast.session.listFailed.title": "{{project}} için oturumlar yüklenemedi", "toast.update.title": "Güncelleme mevcut", - "toast.update.description": "OpenCode'un yeni bir sürümü ({{version}}) yüklemeye hazır.", + "toast.update.description": "Devora'un yeni bir sürümü ({{version}}) yüklemeye hazır.", "toast.update.action.installRestart": "Yükle ve yeniden başlat", "toast.update.action.notYet": "Şimdi değil", @@ -455,7 +455,7 @@ export const dict = { "error.page.action.checking": "Kontrol ediliyor...", "error.page.action.checkUpdates": "Güncellemeleri kontrol et", "error.page.action.updateTo": "{{version}} sürümüne güncelle", - "error.page.report.prefix": "Lütfen bu hatayı OpenCode ekibine bildirin", + "error.page.report.prefix": "Lütfen bu hatayı Devora ekibine bildirin", "error.page.report.discord": "Discord üzerinden", "error.page.version": "Sürüm: {{version}}", @@ -473,9 +473,9 @@ export const dict = { "error.chain.responseBody": "Yanıt gövdesi:\n{{body}}", "error.chain.didYouMean": "Bunu mu demek istediniz: {{suggestions}}", "error.chain.modelNotFound": "Model bulunamadı: {{provider}}/{{model}}", - "error.chain.checkConfig": "Yapılandırma dosyanızı (opencode.json) sağlayıcı/model adlarını kontrol edin", + "error.chain.checkConfig": "Yapılandırma dosyanızı (devora.json) sağlayıcı/model adlarını kontrol edin", "error.chain.mcpFailed": - 'MCP sunucusu "{{name}}" başarısız oldu. Not: OpenCode henüz MCP kimlik doğrulamasını desteklemiyor.', + 'MCP sunucusu "{{name}}" başarısız oldu. Not: Devora henüz MCP kimlik doğrulamasını desteklemiyor.', "error.chain.providerAuthFailed": "Sağlayıcı kimlik doğrulaması başarısız ({{provider}}): {{message}}", "error.chain.providerInitFailed": '"{{provider}}" sağlayıcısı başlatılamadı. Kimlik bilgilerini ve yapılandırmayı kontrol edin.', @@ -611,13 +611,13 @@ export const dict = { "sidebar.workspaces.enable": "Çalışma alanlarını etkinleştir", "sidebar.workspaces.disable": "Çalışma alanlarını devre dışı bırak", "sidebar.gettingStarted.title": "Başlarken", - "sidebar.gettingStarted.line1": "OpenCode ücretsiz modeller içerir, böylece hemen başlayabilirsiniz.", + "sidebar.gettingStarted.line1": "Devora ücretsiz modeller içerir, böylece hemen başlayabilirsiniz.", "sidebar.gettingStarted.line2": "Claude, GPT, Gemini vb. modelleri kullanmak için herhangi bir sağlayıcı bağlayın.", "sidebar.project.recentSessions": "Son oturumlar", "sidebar.project.viewAllSessions": "Tüm oturumları görüntüle", "sidebar.project.clearNotifications": "Bildirimleri temizle", - "app.name.desktop": "OpenCode Masaüstü", + "app.name.desktop": "Devora Masaüstü", "settings.section.desktop": "Masaüstü", "settings.section.server": "Sunucu", @@ -625,7 +625,7 @@ export const dict = { "settings.tab.shortcuts": "Kısayollar", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL entegrasyonu", - "settings.desktop.wsl.description": "OpenCode sunucusunu Windows'ta WSL içinde çalıştırın.", + "settings.desktop.wsl.description": "Devora sunucusunu Windows'ta WSL içinde çalıştırın.", "settings.general.section.appearance": "Görünüm", "settings.general.section.notifications": "Sistem bildirimleri", @@ -635,14 +635,14 @@ export const dict = { "settings.general.section.display": "Ekran", "settings.general.row.language.title": "Dil", - "settings.general.row.language.description": "OpenCode'un görünüm dilini değiştirin", + "settings.general.row.language.description": "Devora'un görünüm dilini değiştirin", "settings.general.row.appearance.title": "Görünüm", - "settings.general.row.appearance.description": "OpenCode'un cihazınızdaki görünümünü özelleştirin", + "settings.general.row.appearance.description": "Devora'un cihazınızdaki görünümünü özelleştirin", "settings.general.row.colorScheme.title": "Renk şeması", "settings.general.row.colorScheme.description": - "OpenCode'un sistem, açık veya koyu temayı takip etip etmeyeceğini seçin", + "Devora'un sistem, açık veya koyu temayı takip etip etmeyeceğini seçin", "settings.general.row.theme.title": "Tema", - "settings.general.row.theme.description": "OpenCode'un temasını özelleştirin.", + "settings.general.row.theme.description": "Devora'un temasını özelleştirin.", "settings.general.row.font.title": "Kod Yazı Tipi", "settings.general.row.font.description": "Kod bloklarında kullanılan yazı tipini özelleştirin", "settings.general.row.terminalFont.title": "Terminal Font", @@ -673,13 +673,13 @@ export const dict = { "settings.general.row.releaseNotes.description": "Güncellemelerden sonra Yenilikler bildirimlerini göster", "settings.updates.row.startup.title": "Başlangıçta güncellemeleri kontrol et", - "settings.updates.row.startup.description": "OpenCode başladığında otomatik güncelleme kontrolü yap", + "settings.updates.row.startup.description": "Devora başladığında otomatik güncelleme kontrolü yap", "settings.updates.row.check.title": "Güncellemeleri kontrol et", "settings.updates.row.check.description": "Elle güncelleme kontrolü yap ve varsa yükle", "settings.updates.action.checkNow": "Şimdi kontrol et", "settings.updates.action.checking": "Kontrol ediliyor...", "settings.updates.toast.latest.title": "Güncelsiniz", - "settings.updates.toast.latest.description": "OpenCode'un en son sürümünü kullanıyorsunuz.", + "settings.updates.toast.latest.description": "Devora'un en son sürümünü kullanıyorsunuz.", "sound.option.none": "Yok", "sound.option.alert01": "Uyarı 01", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index d95bfd19..a34cd5cf 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -125,9 +125,9 @@ export const dict = { "dialog.provider.group.popular": "热门", "dialog.provider.group.other": "其他", "dialog.provider.tag.recommended": "推荐", - "dialog.provider.opencode.note": "使用 OpenCode Zen 或 API 密钥连接", - "dialog.provider.opencode.tagline": "可靠的优化模型", - "dialog.provider.opencodeGo.tagline": "适合所有人的低成本订阅", + "dialog.provider.devora.note": "使用 Devora Zen 或 API 密钥连接", + "dialog.provider.devora.tagline": "可靠的优化模型", + "dialog.provider.devoraGo.tagline": "适合所有人的低成本订阅", "dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 密钥连接", "dialog.provider.copilot.note": "使用 Copilot 或 API 密钥连接", "dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 密钥连接", @@ -141,7 +141,7 @@ export const dict = { "dialog.model.manage": "管理模型", "dialog.model.manage.description": "自定义模型选择器中显示的模型。", "dialog.model.manage.provider.toggle": "切换所有 {{provider}} 模型", - "dialog.model.unpaid.freeModels.title": "OpenCode 提供的免费模型", + "dialog.model.unpaid.freeModels.title": "Devora 提供的免费模型", "dialog.model.unpaid.addMore.title": "从热门提供商添加更多模型", "dialog.provider.viewAll": "查看更多提供商", @@ -154,25 +154,25 @@ export const dict = { "provider.connect.status.waiting": "等待授权...", "provider.connect.status.failed": "授权失败:{{error}}", "provider.connect.apiKey.description": - "输入你的 {{provider}} API 密钥以连接帐户,并在 OpenCode 中使用 {{provider}} 模型。", + "输入你的 {{provider}} API 密钥以连接帐户,并在 Devora 中使用 {{provider}} 模型。", "provider.connect.apiKey.label": "{{provider}} API 密钥", "provider.connect.apiKey.placeholder": "API 密钥", "provider.connect.apiKey.required": "API 密钥为必填项", - "provider.connect.opencodeZen.line1": "OpenCode Zen 为你提供一组精选的可靠优化模型,用于代码智能体。", - "provider.connect.opencodeZen.line2": "只需一个 API 密钥,你就能使用 Claude、GPT、Gemini、GLM 等模型。", - "provider.connect.opencodeZen.visit.prefix": "访问 ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " 获取你的 API 密钥。", + "provider.connect.devoraZen.line1": "Devora Zen 为你提供一组精选的可靠优化模型,用于代码智能体。", + "provider.connect.devoraZen.line2": "只需一个 API 密钥,你就能使用 Claude、GPT、Gemini、GLM 等模型。", + "provider.connect.devoraZen.visit.prefix": "访问 ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " 获取你的 API 密钥。", "provider.connect.oauth.code.visit.prefix": "访问 ", "provider.connect.oauth.code.visit.link": "此链接", - "provider.connect.oauth.code.visit.suffix": " 获取授权码,以连接你的帐户并在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.code.visit.suffix": " 获取授权码,以连接你的帐户并在 Devora 中使用 {{provider}} 模型。", "provider.connect.oauth.code.label": "{{method}} 授权码", "provider.connect.oauth.code.placeholder": "授权码", "provider.connect.oauth.code.required": "授权码为必填项", "provider.connect.oauth.code.invalid": "授权码无效", "provider.connect.oauth.auto.visit.prefix": "访问 ", "provider.connect.oauth.auto.visit.link": "此链接", - "provider.connect.oauth.auto.visit.suffix": " 并输入以下代码,以连接你的帐户并在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.auto.visit.suffix": " 并输入以下代码,以连接你的帐户并在 Devora 中使用 {{provider}} 模型。", "provider.connect.oauth.auto.confirmationCode": "确认码", "provider.connect.toast.connected.title": "{{provider}} 已连接", "provider.connect.toast.connected.description": "现在可以使用 {{provider}} 模型了。", @@ -314,7 +314,7 @@ export const dict = { "dialog.lsp.empty": "已从文件类型自动检测到 LSPs", - "dialog.plugins.empty": "在 opencode.json 中配置的插件", + "dialog.plugins.empty": "在 devora.json 中配置的插件", "mcp.status.connected": "已连接", "mcp.status.failed": "失败", @@ -327,7 +327,7 @@ export const dict = { "dialog.directory.empty": "未找到文件夹", "dialog.server.title": "服务器", - "dialog.server.description": "切换此应用连接的 OpenCode 服务器。", + "dialog.server.description": "切换此应用连接的 Devora 服务器。", "dialog.server.search.placeholder": "搜索服务器", "dialog.server.empty": "暂无服务器", "dialog.server.add.title": "添加服务器", @@ -444,7 +444,7 @@ export const dict = { "toast.session.unshare.failed.description": "取消分享会话时发生错误", "toast.session.listFailed.title": "无法加载 {{project}} 的会话", "toast.update.title": "有可用更新", - "toast.update.description": "OpenCode 有新版本 ({{version}}) 可安装。", + "toast.update.description": "Devora 有新版本 ({{version}}) 可安装。", "toast.update.action.installRestart": "安装并重启", "toast.update.action.notYet": "稍后", @@ -455,7 +455,7 @@ export const dict = { "error.page.action.checking": "检查中...", "error.page.action.checkUpdates": "检查更新", "error.page.action.updateTo": "更新到 {{version}}", - "error.page.report.prefix": "请将此错误报告给 OpenCode 团队", + "error.page.report.prefix": "请将此错误报告给 Devora 团队", "error.page.report.discord": "在 Discord 上", "error.page.version": "版本:{{version}}", "error.dev.rootNotFound": "未找到根元素。你是不是忘了把它添加到 index.html?或者 id 属性拼写错了?", @@ -471,8 +471,8 @@ export const dict = { "error.chain.responseBody": "响应内容:\n{{body}}", "error.chain.didYouMean": "你是不是想输入:{{suggestions}}", "error.chain.modelNotFound": "未找到模型:{{provider}}/{{model}}", - "error.chain.checkConfig": "请检查你的配置 (opencode.json) 中的 provider/model 名称", - "error.chain.mcpFailed": 'MCP 服务器 "{{name}}" 启动失败。注意: OpenCode 暂不支持 MCP 认证。', + "error.chain.checkConfig": "请检查你的配置 (devora.json) 中的 provider/model 名称", + "error.chain.mcpFailed": 'MCP 服务器 "{{name}}" 启动失败。注意: Devora 暂不支持 MCP 认证。', "error.chain.providerAuthFailed": "提供商认证失败({{provider}}):{{message}}", "error.chain.providerInitFailed": '无法初始化提供商 "{{provider}}"。请检查凭据和配置。', "error.chain.configJsonInvalid": "配置文件 {{path}} 不是有效的 JSON(C)", @@ -598,13 +598,13 @@ export const dict = { "sidebar.workspaces.enable": "启用工作区", "sidebar.workspaces.disable": "禁用工作区", "sidebar.gettingStarted.title": "入门", - "sidebar.gettingStarted.line1": "OpenCode 提供免费模型,你可以立即开始使用。", + "sidebar.gettingStarted.line1": "Devora 提供免费模型,你可以立即开始使用。", "sidebar.gettingStarted.line2": "连接任意提供商即可使用更多模型,如 Claude、GPT、Gemini 等。", "sidebar.project.recentSessions": "最近会话", "sidebar.project.viewAllSessions": "查看全部会话", "sidebar.project.clearNotifications": "清除通知", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "桌面", "settings.section.server": "服务器", @@ -614,7 +614,7 @@ export const dict = { "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL 集成", - "settings.desktop.wsl.description": "在 Windows 的 WSL 环境中运行 OpenCode 服务器。", + "settings.desktop.wsl.description": "在 Windows 的 WSL 环境中运行 Devora 服务器。", "settings.general.section.appearance": "外观", "settings.general.section.notifications": "系统通知", @@ -623,13 +623,13 @@ export const dict = { "settings.general.section.feed": "动态", "settings.general.section.display": "显示", "settings.general.row.language.title": "语言", - "settings.general.row.language.description": "更改 OpenCode 的显示语言", + "settings.general.row.language.description": "更改 Devora 的显示语言", "settings.general.row.appearance.title": "外观", - "settings.general.row.appearance.description": "自定义 OpenCode 在你的设备上的外观", + "settings.general.row.appearance.description": "自定义 Devora 在你的设备上的外观", "settings.general.row.colorScheme.title": "配色方案", - "settings.general.row.colorScheme.description": "选择 OpenCode 跟随系统、浅色或深色主题", + "settings.general.row.colorScheme.description": "选择 Devora 跟随系统、浅色或深色主题", "settings.general.row.theme.title": "主题", - "settings.general.row.theme.description": "自定义 OpenCode 的主题。", + "settings.general.row.theme.description": "自定义 Devora 的主题。", "settings.general.row.font.title": "代码字体", "settings.general.row.font.description": "自定义代码块使用的字体", "settings.general.row.terminalFont.title": "Terminal Font", @@ -653,13 +653,13 @@ export const dict = { "settings.general.row.releaseNotes.description": "更新后显示“新功能”弹窗", "settings.updates.row.startup.title": "启动时检查更新", - "settings.updates.row.startup.description": "在 OpenCode 启动时自动检查更新", + "settings.updates.row.startup.description": "在 Devora 启动时自动检查更新", "settings.updates.row.check.title": "检查更新", "settings.updates.row.check.description": "手动检查更新并在有更新时安装", "settings.updates.action.checkNow": "立即检查", "settings.updates.action.checking": "正在检查...", "settings.updates.toast.latest.title": "已是最新版本", - "settings.updates.toast.latest.description": "你正在使用最新版本的 OpenCode。", + "settings.updates.toast.latest.description": "你正在使用最新版本的 Devora。", "sound.option.none": "无", "sound.option.alert01": "警报 01", diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts index 4a88ca4f..ed33a862 100644 --- a/packages/app/src/i18n/zht.ts +++ b/packages/app/src/i18n/zht.ts @@ -102,9 +102,9 @@ export const dict = { "dialog.provider.group.popular": "熱門", "dialog.provider.group.other": "其他", "dialog.provider.tag.recommended": "推薦", - "dialog.provider.opencode.note": "精選模型,包含 Claude、GPT、Gemini 等等", - "dialog.provider.opencode.tagline": "可靠的優化模型", - "dialog.provider.opencodeGo.tagline": "適合所有人的低成本訂閱", + "dialog.provider.devora.note": "精選模型,包含 Claude、GPT、Gemini 等等", + "dialog.provider.devora.tagline": "可靠的優化模型", + "dialog.provider.devoraGo.tagline": "適合所有人的低成本訂閱", "dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 金鑰連線", "dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 金鑰連線", "dialog.provider.copilot.note": "使用 Copilot 或 API 金鑰連線", @@ -119,7 +119,7 @@ export const dict = { "dialog.model.manage.description": "自訂模型選擇器中顯示的模型。", "dialog.model.manage.provider.toggle": "切換所有 {{provider}} 模型", - "dialog.model.unpaid.freeModels.title": "OpenCode 提供的免費模型", + "dialog.model.unpaid.freeModels.title": "Devora 提供的免費模型", "dialog.model.unpaid.addMore.title": "從熱門提供者新增更多模型", "dialog.provider.viewAll": "查看更多提供者", @@ -132,18 +132,18 @@ export const dict = { "provider.connect.status.waiting": "等待授權...", "provider.connect.status.failed": "授權失敗: {{error}}", "provider.connect.apiKey.description": - "輸入你的 {{provider}} API 金鑰以連線帳戶,並在 OpenCode 中使用 {{provider}} 模型。", + "輸入你的 {{provider}} API 金鑰以連線帳戶,並在 Devora 中使用 {{provider}} 模型。", "provider.connect.apiKey.label": "{{provider}} API 金鑰", "provider.connect.apiKey.placeholder": "API 金鑰", "provider.connect.apiKey.required": "API 金鑰為必填", - "provider.connect.opencodeZen.line1": "OpenCode Zen 為你提供一組精選的可靠最佳化模型,用於程式碼代理程式。", - "provider.connect.opencodeZen.line2": "只需一個 API 金鑰,你就能使用 Claude、GPT、Gemini、GLM 等模型。", - "provider.connect.opencodeZen.visit.prefix": "造訪 ", - "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", - "provider.connect.opencodeZen.visit.suffix": " 取得你的 API 金鑰。", + "provider.connect.devoraZen.line1": "Devora Zen 為你提供一組精選的可靠最佳化模型,用於程式碼代理程式。", + "provider.connect.devoraZen.line2": "只需一個 API 金鑰,你就能使用 Claude、GPT、Gemini、GLM 等模型。", + "provider.connect.devoraZen.visit.prefix": "造訪 ", + "provider.connect.devoraZen.visit.link": "devora.ai/zen", + "provider.connect.devoraZen.visit.suffix": " 取得你的 API 金鑰。", "provider.connect.oauth.code.visit.prefix": "造訪 ", "provider.connect.oauth.code.visit.link": "此連結", - "provider.connect.oauth.code.visit.suffix": " 取得授權碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.code.visit.suffix": " 取得授權碼,以連線你的帳戶並在 Devora 中使用 {{provider}} 模型。", "provider.connect.oauth.code.label": "{{method}} 授權碼", "provider.connect.oauth.code.placeholder": "授權碼", "provider.connect.oauth.code.required": "授權碼為必填", @@ -151,7 +151,7 @@ export const dict = { "provider.connect.oauth.auto.visit.prefix": "造訪 ", "provider.connect.oauth.auto.visit.link": "此連結", "provider.connect.oauth.auto.visit.suffix": - " 並輸入以下程式碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。", + " 並輸入以下程式碼,以連線你的帳戶並在 Devora 中使用 {{provider}} 模型。", "provider.connect.oauth.auto.confirmationCode": "確認碼", "provider.connect.toast.connected.title": "{{provider}} 已連線", "provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。", @@ -294,7 +294,7 @@ export const dict = { "dialog.mcp.empty": "未設定 MCP", "dialog.lsp.empty": "已從檔案類型自動偵測到 LSPs", - "dialog.plugins.empty": "在 opencode.json 中設定的外掛程式", + "dialog.plugins.empty": "在 devora.json 中設定的外掛程式", "mcp.status.connected": "已連線", "mcp.status.failed": "失敗", @@ -307,7 +307,7 @@ export const dict = { "dialog.directory.empty": "找不到資料夾", "dialog.server.title": "伺服器", - "dialog.server.description": "切換此應用程式連線的 OpenCode 伺服器。", + "dialog.server.description": "切換此應用程式連線的 Devora 伺服器。", "dialog.server.search.placeholder": "搜尋伺服器", "dialog.server.empty": "暫無伺服器", "dialog.server.add.title": "新增伺服器", @@ -437,7 +437,7 @@ export const dict = { "toast.session.listFailed.title": "無法載入 {{project}} 的工作階段", "toast.update.title": "有可用更新", - "toast.update.description": "OpenCode 有新版本 ({{version}}) 可安裝。", + "toast.update.description": "Devora 有新版本 ({{version}}) 可安裝。", "toast.update.action.installRestart": "安裝並重新啟動", "toast.update.action.notYet": "稍後", @@ -448,7 +448,7 @@ export const dict = { "error.page.action.checking": "檢查中...", "error.page.action.checkUpdates": "檢查更新", "error.page.action.updateTo": "更新到 {{version}}", - "error.page.report.prefix": "請將此錯誤回報給 OpenCode 團隊", + "error.page.report.prefix": "請將此錯誤回報給 Devora 團隊", "error.page.report.discord": "在 Discord 上", "error.page.version": "版本: {{version}}", @@ -465,8 +465,8 @@ export const dict = { "error.chain.responseBody": "回應內容:\n{{body}}", "error.chain.didYouMean": "你是不是想輸入: {{suggestions}}", "error.chain.modelNotFound": "找不到模型: {{provider}}/{{model}}", - "error.chain.checkConfig": "請檢查你的設定 (opencode.json) 中的 provider/model 名稱", - "error.chain.mcpFailed": 'MCP 伺服器 "{{name}}" 啟動失敗。注意: OpenCode 暫不支援 MCP 認證。', + "error.chain.checkConfig": "請檢查你的設定 (devora.json) 中的 provider/model 名稱", + "error.chain.mcpFailed": 'MCP 伺服器 "{{name}}" 啟動失敗。注意: Devora 暫不支援 MCP 認證。', "error.chain.providerAuthFailed": "提供者認證失敗 ({{provider}}): {{message}}", "error.chain.providerInitFailed": '無法初始化提供者 "{{provider}}"。請檢查憑證和設定。', "error.chain.configJsonInvalid": "設定檔 {{path}} 不是有效的 JSON(C)", @@ -595,20 +595,20 @@ export const dict = { "sidebar.workspaces.enable": "啟用工作區", "sidebar.workspaces.disable": "停用工作區", "sidebar.gettingStarted.title": "開始使用", - "sidebar.gettingStarted.line1": "OpenCode 提供免費模型,你可以立即開始使用。", + "sidebar.gettingStarted.line1": "Devora 提供免費模型,你可以立即開始使用。", "sidebar.gettingStarted.line2": "連線任意提供者即可使用更多模型,如 Claude、GPT、Gemini 等。", "sidebar.project.recentSessions": "最近工作階段", "sidebar.project.viewAllSessions": "查看全部工作階段", "sidebar.project.clearNotifications": "清除通知", - "app.name.desktop": "OpenCode Desktop", + "app.name.desktop": "Devora Desktop", "settings.section.desktop": "桌面", "settings.section.server": "伺服器", "settings.tab.general": "一般", "settings.tab.shortcuts": "快速鍵", "settings.desktop.section.wsl": "WSL", "settings.desktop.wsl.title": "WSL 整合", - "settings.desktop.wsl.description": "在 Windows 上的 WSL 中執行 OpenCode 伺服器。", + "settings.desktop.wsl.description": "在 Windows 上的 WSL 中執行 Devora 伺服器。", "settings.general.section.appearance": "外觀", "settings.general.section.notifications": "系統通知", @@ -618,13 +618,13 @@ export const dict = { "settings.general.section.display": "顯示", "settings.general.row.language.title": "語言", - "settings.general.row.language.description": "變更 OpenCode 的顯示語言", + "settings.general.row.language.description": "變更 Devora 的顯示語言", "settings.general.row.appearance.title": "外觀", - "settings.general.row.appearance.description": "自訂 OpenCode 在你的裝置上的外觀", + "settings.general.row.appearance.description": "自訂 Devora 在你的裝置上的外觀", "settings.general.row.colorScheme.title": "配色方案", - "settings.general.row.colorScheme.description": "選擇 OpenCode 要跟隨系統、淺色或深色主題", + "settings.general.row.colorScheme.description": "選擇 Devora 要跟隨系統、淺色或深色主題", "settings.general.row.theme.title": "主題", - "settings.general.row.theme.description": "自訂 OpenCode 的主題。", + "settings.general.row.theme.description": "自訂 Devora 的主題。", "settings.general.row.font.title": "程式碼字型", "settings.general.row.font.description": "自訂程式碼區塊使用的字型", "settings.general.row.terminalFont.title": "Terminal Font", @@ -650,13 +650,13 @@ export const dict = { "settings.general.row.releaseNotes.description": "更新後顯示「新功能」彈出視窗", "settings.updates.row.startup.title": "啟動時檢查更新", - "settings.updates.row.startup.description": "在 OpenCode 啟動時自動檢查更新", + "settings.updates.row.startup.description": "在 Devora 啟動時自動檢查更新", "settings.updates.row.check.title": "檢查更新", "settings.updates.row.check.description": "手動檢查更新並在有更新時安裝", "settings.updates.action.checkNow": "立即檢查", "settings.updates.action.checking": "檢查中...", "settings.updates.toast.latest.title": "已是最新版本", - "settings.updates.toast.latest.description": "你正在使用最新版本的 OpenCode。", + "settings.updates.toast.latest.description": "你正在使用最新版本的 Devora。", "sound.option.none": "無", "sound.option.alert01": "警報 01", diff --git a/packages/app/src/index.css b/packages/app/src/index.css index a9d6a338..8a70e532 100644 --- a/packages/app/src/index.css +++ b/packages/app/src/index.css @@ -1,4 +1,4 @@ -@import "@mimo-ai/ui/styles/tailwind"; +@import "@devora-ai/ui/styles/tailwind"; @font-face { font-family: "JetBrainsMono Nerd Font Mono"; diff --git a/packages/app/src/pages/directory-layout.tsx b/packages/app/src/pages/directory-layout.tsx index 8d53d4e3..0f7ba588 100644 --- a/packages/app/src/pages/directory-layout.tsx +++ b/packages/app/src/pages/directory-layout.tsx @@ -1,6 +1,6 @@ -import { DataProvider } from "@mimo-ai/ui/context" -import { showToast } from "@mimo-ai/ui/toast" -import { base64Encode } from "@mimo-ai/shared/util/encode" +import { DataProvider } from "@devora-ai/ui/context" +import { showToast } from "@devora-ai/ui/toast" +import { base64Encode } from "@devora-ai/shared/util/encode" import { useLocation, useNavigate, useParams } from "@solidjs/router" import { createEffect, createMemo, createResource, type ParentProps, Show } from "solid-js" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/pages/error.tsx b/packages/app/src/pages/error.tsx index 69856e6a..e987db36 100644 --- a/packages/app/src/pages/error.tsx +++ b/packages/app/src/pages/error.tsx @@ -1,11 +1,11 @@ -import { TextField } from "@mimo-ai/ui/text-field" -import { Logo } from "@mimo-ai/ui/logo" -import { Button } from "@mimo-ai/ui/button" +import { TextField } from "@devora-ai/ui/text-field" +import { Logo } from "@devora-ai/ui/logo" +import { Button } from "@devora-ai/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 "@mimo-ai/ui/icon" +import { Icon } from "@devora-ai/ui/icon" export type InitError = { name: string @@ -301,7 +301,7 @@ export const ErrorPage: Component = (props) => {
diff --git a/packages/console/app/src/routes/brand/index.tsx b/packages/console/app/src/routes/brand/index.tsx index af89f498..1bae892c 100644 --- a/packages/console/app/src/routes/brand/index.tsx +++ b/packages/console/app/src/routes/brand/index.tsx @@ -5,31 +5,31 @@ import { Footer } from "~/component/footer" import { Legal } from "~/component/legal" import { useI18n } from "~/context/i18n" import { LocaleLinks } from "~/component/locale-links" -import previewLogoLight from "../../asset/brand/preview-opencode-logo-light.png" -import previewLogoDark from "../../asset/brand/preview-opencode-logo-dark.png" -import previewLogoLightSquare from "../../asset/brand/preview-opencode-logo-light-square.png" -import previewLogoDarkSquare from "../../asset/brand/preview-opencode-logo-dark-square.png" -import previewWordmarkLight from "../../asset/brand/preview-opencode-wordmark-light.png" -import previewWordmarkDark from "../../asset/brand/preview-opencode-wordmark-dark.png" -import previewWordmarkSimpleLight from "../../asset/brand/preview-opencode-wordmark-simple-light.png" -import previewWordmarkSimpleDark from "../../asset/brand/preview-opencode-wordmark-simple-dark.png" -import logoLightPng from "../../asset/brand/opencode-logo-light.png" -import logoDarkPng from "../../asset/brand/opencode-logo-dark.png" -import logoLightSquarePng from "../../asset/brand/opencode-logo-light-square.png" -import logoDarkSquarePng from "../../asset/brand/opencode-logo-dark-square.png" -import wordmarkLightPng from "../../asset/brand/opencode-wordmark-light.png" -import wordmarkDarkPng from "../../asset/brand/opencode-wordmark-dark.png" -import wordmarkSimpleLightPng from "../../asset/brand/opencode-wordmark-simple-light.png" -import wordmarkSimpleDarkPng from "../../asset/brand/opencode-wordmark-simple-dark.png" -import logoLightSvg from "../../asset/brand/opencode-logo-light.svg" -import logoDarkSvg from "../../asset/brand/opencode-logo-dark.svg" -import logoLightSquareSvg from "../../asset/brand/opencode-logo-light-square.svg" -import logoDarkSquareSvg from "../../asset/brand/opencode-logo-dark-square.svg" -import wordmarkLightSvg from "../../asset/brand/opencode-wordmark-light.svg" -import wordmarkDarkSvg from "../../asset/brand/opencode-wordmark-dark.svg" -import wordmarkSimpleLightSvg from "../../asset/brand/opencode-wordmark-simple-light.svg" -import wordmarkSimpleDarkSvg from "../../asset/brand/opencode-wordmark-simple-dark.svg" -const brandAssets = "/opencode-brand-assets.zip" +import previewLogoLight from "../../asset/brand/preview-devora-logo-light.png" +import previewLogoDark from "../../asset/brand/preview-devora-logo-dark.png" +import previewLogoLightSquare from "../../asset/brand/preview-devora-logo-light-square.png" +import previewLogoDarkSquare from "../../asset/brand/preview-devora-logo-dark-square.png" +import previewWordmarkLight from "../../asset/brand/preview-devora-wordmark-light.png" +import previewWordmarkDark from "../../asset/brand/preview-devora-wordmark-dark.png" +import previewWordmarkSimpleLight from "../../asset/brand/preview-devora-wordmark-simple-light.png" +import previewWordmarkSimpleDark from "../../asset/brand/preview-devora-wordmark-simple-dark.png" +import logoLightPng from "../../asset/brand/devora-logo-light.png" +import logoDarkPng from "../../asset/brand/devora-logo-dark.png" +import logoLightSquarePng from "../../asset/brand/devora-logo-light-square.png" +import logoDarkSquarePng from "../../asset/brand/devora-logo-dark-square.png" +import wordmarkLightPng from "../../asset/brand/devora-wordmark-light.png" +import wordmarkDarkPng from "../../asset/brand/devora-wordmark-dark.png" +import wordmarkSimpleLightPng from "../../asset/brand/devora-wordmark-simple-light.png" +import wordmarkSimpleDarkPng from "../../asset/brand/devora-wordmark-simple-dark.png" +import logoLightSvg from "../../asset/brand/devora-logo-light.svg" +import logoDarkSvg from "../../asset/brand/devora-logo-dark.svg" +import logoLightSquareSvg from "../../asset/brand/devora-logo-light-square.svg" +import logoDarkSquareSvg from "../../asset/brand/devora-logo-dark-square.svg" +import wordmarkLightSvg from "../../asset/brand/devora-wordmark-light.svg" +import wordmarkDarkSvg from "../../asset/brand/devora-wordmark-dark.svg" +import wordmarkSimpleLightSvg from "../../asset/brand/devora-wordmark-simple-light.svg" +import wordmarkSimpleDarkSvg from "../../asset/brand/devora-wordmark-simple-dark.svg" +const brandAssets = "/devora-brand-assets.zip" export default function Brand() { const i18n = useI18n() @@ -74,7 +74,7 @@ export default function Brand() {

{i18n.t("brand.subtitle")}

- - - - - - - - - - - - @@ -157,9 +157,9 @@ export default function Download() { [2] {i18n.t("download.section.desktop")}
- diff --git a/packages/console/app/src/routes/enterprise/index.tsx b/packages/console/app/src/routes/enterprise/index.tsx index 9e3d0347..aca4be9c 100644 --- a/packages/console/app/src/routes/enterprise/index.tsx +++ b/packages/console/app/src/routes/enterprise/index.tsx @@ -94,7 +94,7 @@ export default function Enterprise() { />
- Thanks to OpenCode, we found a way to create software to track all our assets — even the imaginary + Thanks to Devora, we found a way to create software to track all our assets — even the imaginary ones.
diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index de8dce47..e171b3db 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -83,7 +83,7 @@ body { } @supports (background: -webkit-named-image(i)) { - [data-page="opencode"] { + [data-page="devora"] { border-top: 1px solid var(--color-border-weak); } } diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index bae5ddd2..09332523 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -12,7 +12,7 @@ import { Footer } from "~/component/footer" import { Header } from "~/component/header" import { config } from "~/config" import { getLastSeenWorkspaceID } from "../workspace/common" -import { IconMiniMax, IconMiMo, IconZai, IconAlibaba } from "~/component/icon" +import { IconMiniMax, IconDevora, IconZai, IconAlibaba } from "~/component/icon" import { useI18n } from "~/context/i18n" import { useLanguage } from "~/context/language" import { LocaleLinks } from "~/component/locale-links" @@ -27,8 +27,8 @@ const models = [ { name: "GLM-5", provider: "DeepInfra, Z.ai" }, { name: "Kimi K2.5", provider: "Moonshot AI" }, { name: "Kimi K2.6", provider: "Moonshot AI" }, - { name: "MiMo-V2-Pro", provider: "Xiaomi MiMo" }, - { name: "MiMo-V2-Omni", provider: "Xiaomi MiMo" }, + { name: "Devora-V2-Pro", provider: "Devora" }, + { name: "Devora-V2-Omni", provider: "Devora" }, { name: "Qwen3.5 Plus", provider: "Alibaba Cloud Model Studio" }, { name: "Qwen3.6 Plus", provider: "Alibaba Cloud Model Studio" }, { name: "MiniMax M2.7", provider: "MiniMax" }, @@ -60,7 +60,7 @@ function LimitsGraph(props: { href: string }) { const graph = [ { id: "glm-5.1", name: "GLM-5.1", req: 880, d: "100ms" }, { id: "kimi-k2.6", name: "Kimi K2.6 (3x usage)", req: 3450, baseReq: 1150, d: "150ms" }, - { id: "mimo-v2-pro", name: "MiMo-V2-Pro", req: 1290, d: "150ms" }, + { id: "devora-v2-pro", name: "Devora-V2-Pro", req: 1290, d: "150ms" }, { id: "qwen3.6-plus", name: "Qwen3.6 Plus", req: 3300, d: "280ms" }, { id: "minimax-m2.7", name: "MiniMax M2.7", req: 3400, d: "300ms" }, { id: "qwen3.5-plus", name: "Qwen3.5 Plus", req: 10200, d: "360ms" }, @@ -251,7 +251,7 @@ export default function Home() { - +
@@ -335,7 +335,7 @@ export default function Home() {
- +
{/*
diff --git a/packages/console/app/src/routes/index.css b/packages/console/app/src/routes/index.css index d06e2659..f5a879d2 100644 --- a/packages/console/app/src/routes/index.css +++ b/packages/console/app/src/routes/index.css @@ -8,7 +8,7 @@ } } -[data-page="opencode"] { +[data-page="devora"] { --color-background: hsl(0, 20%, 99%); --color-background-weak: hsl(0, 8%, 97%); --color-background-weak-hover: hsl(0, 8%, 94%); @@ -35,7 +35,7 @@ body { background: var(--color-background); } -[data-page="opencode"] { +[data-page="devora"] { @media (prefers-color-scheme: dark) { --color-background: hsl(0, 9%, 7%); --color-background-weak: hsl(0, 6%, 10%); @@ -59,7 +59,7 @@ body { } @supports (background: -webkit-named-image(i)) { - [data-page="opencode"] { + [data-page="devora"] { border-top: 1px solid var(--color-border-weak); } } @@ -72,7 +72,7 @@ body { } } -[data-page="opencode"] { +[data-page="devora"] { background: var(--color-background); --padding: 5rem; --vertical-padding: 4rem; diff --git a/packages/console/app/src/routes/index.tsx b/packages/console/app/src/routes/index.tsx index c046a56a..10b13144 100644 --- a/packages/console/app/src/routes/index.tsx +++ b/packages/console/app/src/routes/index.tsx @@ -1,8 +1,8 @@ import "./index.css" import { Title, Meta } from "@solidjs/meta" //import { HttpHeader } from "@solidjs/start" -import video from "../asset/lander/opencode-min.mp4" -import videoPoster from "../asset/lander/opencode-poster.png" +import video from "../asset/lander/devora-min.mp4" +import videoPoster from "../asset/lander/devora-poster.png" import { IconCopy, IconCheck } from "../component/icon" import { A, createAsync } from "@solidjs/router" import { EmailSignup } from "~/component/email-signup" @@ -43,7 +43,7 @@ export default function Home() { } return ( -
+
{/**/} {i18n.t("home.title")} @@ -115,7 +115,7 @@ export default function Home() { curl -fsSL https:// - opencode.ai/install + devora.ai/install | bash @@ -125,7 +125,7 @@ export default function Home() { @@ -134,7 +134,7 @@ export default function Home() { @@ -143,7 +143,7 @@ export default function Home() { @@ -152,7 +152,7 @@ export default function Home() { diff --git a/packages/console/app/src/routes/legal/privacy-policy/index.tsx b/packages/console/app/src/routes/legal/privacy-policy/index.tsx index 42bb71aa..8121689b 100644 --- a/packages/console/app/src/routes/legal/privacy-policy/index.tsx +++ b/packages/console/app/src/routes/legal/privacy-policy/index.tsx @@ -11,9 +11,9 @@ export default function PrivacyPolicy() { const language = useLanguage() return (
- OpenCode | Privacy Policy + Devora | Privacy Policy - +
@@ -24,7 +24,7 @@ export default function PrivacyPolicy() {

Effective date: Mar 6, 2026

- At OpenCode, we take your privacy seriously. Please read this Privacy Policy to learn how we treat your + At Devora, we take your privacy seriously. Please read this Privacy Policy to learn how we treat your personal data.{" "} By using or accessing our Services in any manner, you acknowledge that you accept the practices and @@ -37,8 +37,8 @@ export default function PrivacyPolicy() {

- Remember that your use of OpenCode is at all times subject to our Terms of Use,{" "} - https://opencode.ai/legal/terms-of-service, + Remember that your use of Devora is at all times subject to our Terms of Use,{" "} + Devora Terms of Use, which incorporates this Privacy Policy. Any terms we use in this Policy without defining them have the definitions given to them in the Terms of Use.

@@ -47,7 +47,7 @@ export default function PrivacyPolicy() {

As we continually work to improve our Services, we may need to change this Privacy Policy from time to - time. We will alert you of material changes by placing a notice on the OpenCode website, by sending you + time. We will alert you of material changes by placing a notice on the Devora website, by sending you an email and/or by some other means. Please note that if you've opted not to receive legal notice emails from us (or you haven't provided us with your email address), those legal notices will still govern your use of the Services, and you are still responsible for reading and understanding them. If you use the @@ -288,7 +288,7 @@ export default function PrivacyPolicy() {

  • Responding to correspondence that we receive from you, contacting you when necessary or requested, and - sending you information about OpenCode. + sending you information about Devora.
  • Sending emails and other communications according to your preferences.
@@ -300,7 +300,7 @@ export default function PrivacyPolicy() { requirements and enforcing legal terms including: fulfilling our legal obligations under applicable law, regulation, court order or other legal process, such as preventing, detecting and investigating security incidents and potentially illegal or prohibited activities; protecting the rights, property or safety of - you, OpenCode or another party; enforcing any agreements with you; responding to claims that any posting + you, Devora or another party; enforcing any agreements with you; responding to claims that any posting or other content violates third-party rights; and resolving disputes.

@@ -501,7 +501,7 @@ export default function PrivacyPolicy() { otherwise use the Services or send us any Personal Data. If we learn we have collected Personal Data from a child under 18 years of age, we will delete that information as quickly as possible. If you believe that a child under 18 years of age may have provided Personal Data to us, please contact us at{" "} - contact@anoma.ly. + Devora GitHub Issues.

California Resident Rights

@@ -520,7 +520,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a California resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following - rights apply to you, please contact us at contact@anoma.ly. + rights apply to you, please contact us at Devora GitHub Issues.

Access

@@ -605,7 +605,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a Colorado resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following - rights apply to you, please contact us at contact@anoma.ly. + rights apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -676,7 +676,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a Connecticut resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following - rights apply to you, please contact us at contact@anoma.ly. + rights apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -745,7 +745,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a Delaware resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following - rights apply to you, please contact us at contact@anoma.ly. + rights apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -818,7 +818,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are an Iowa resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following rights - apply to you, please contact us at contact@anoma.ly. + apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -864,7 +864,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a Montana resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following rights - apply to you, please contact us at contact@anoma.ly. + apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -937,7 +937,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a Nebraska resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following - rights apply to you, please contact us at contact@anoma.ly. + rights apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -1007,7 +1007,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a New Hampshire resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following - rights apply to you, please contact us at contact@anoma.ly. + rights apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -1078,7 +1078,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a New Jersey resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following - rights apply to you, please contact us at contact@anoma.ly. + rights apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -1151,7 +1151,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are an Oregon resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following rights - apply to you, please contact us at contact@anoma.ly. + apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -1225,7 +1225,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a Texas resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following rights - apply to you, please contact us at contact@anoma.ly. + apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -1293,7 +1293,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a Utah resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following rights apply - to you, please contact us at contact@anoma.ly. + to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -1339,7 +1339,7 @@ export default function PrivacyPolicy() { If there are any conflicts between this section and any other provision of this Privacy Policy and you are a Virginia resident, the portion that is more protective of Personal Data shall control to the extent of such conflict. If you have any questions about this section or whether any of the following - rights apply to you, please contact us at contact@anoma.ly. + rights apply to you, please contact us at Devora GitHub Issues.

Access and Portability

@@ -1418,7 +1418,7 @@ export default function PrivacyPolicy() {

@@ -1430,7 +1430,7 @@ export default function PrivacyPolicy() {

@@ -1457,7 +1457,7 @@ export default function PrivacyPolicy() {

@@ -1475,7 +1475,7 @@ export default function PrivacyPolicy() { Under California Civil Code Sections 1798.83-1798.84, California residents are entitled to contact us to prevent disclosure of Personal Data to third parties for such third parties' direct marketing purposes; in order to submit such a request, please contact us at{" "} - contact@anoma.ly. + Devora GitHub Issues.

@@ -1500,10 +1500,10 @@ export default function PrivacyPolicy() {

  • - Email: contact@anoma.ly + Email: Devora GitHub Issues
  • -
  • Phone: +1 415 794-0209
  • -
  • Address: 2443 Fillmore St #380-6343, San Francisco, CA 94115, United States
  • +
  • Maintainer: Sheri Akhtamov
  • +
  • Repository: https://github.com/SheriAkhtamov/Devora
diff --git a/packages/console/app/src/routes/legal/terms-of-service/index.tsx b/packages/console/app/src/routes/legal/terms-of-service/index.tsx index 55a9fd42..6826c08e 100644 --- a/packages/console/app/src/routes/legal/terms-of-service/index.tsx +++ b/packages/console/app/src/routes/legal/terms-of-service/index.tsx @@ -11,9 +11,9 @@ export default function TermsOfService() { const language = useLanguage() return (
- OpenCode | Terms of Service + Devora | Terms of Service - +
@@ -24,21 +24,21 @@ export default function TermsOfService() {

Effective date: Mar 6, 2026

- Welcome to OpenCode. Please read on to learn the rules and restrictions that govern your use of - OpenCode's website, inference product and hosted software offering (the "Services"). If you have + Welcome to Devora. Please read on to learn the rules and restrictions that govern your use of + Devora's website, inference product and hosted software offering (the "Services"). If you have any questions, comments, or concerns regarding these terms or the Services, please contact us at:

- Email: contact@anoma.ly + Email: Devora GitHub Issues

These Terms of Use (the "Terms") are a binding contract between you and{" "} - ANOMALY INNOVATIONS, INC. ("OpenCode," "we" and "us"). Your use of the Services in any - way means that you agree to all of these Terms, and these Terms will remain in effect while you use the - Services. These Terms include the provisions in this document as well as those in the Privacy Policy{" "} - https://opencode.ai/legal/privacy-policy.{" "} + Sheri Akhtamov, maintaining Devora ("Devora," "we" and "us"). Your use of the + Services in any way means that you agree to all of these Terms, and these Terms will remain in effect + while you use the Services. These Terms include the provisions in this document as well as those in the + Privacy Policy Devora Privacy Policy.{" "} Your use of or participation in certain Services may also be subject to additional policies, rules and/or conditions ("Additional Terms"), which are incorporated herein by reference, and you understand @@ -71,12 +71,12 @@ export default function TermsOfService() { RIGHT TO PARTICIPATE IN A CLASS ACTION LAWSUIT OR CLASS-WIDE ARBITRATION.

-

What is OpenCode?

+

What is Devora?

- OpenCode is an AI-powered coding agent that helps you write, understand, and modify code using large + Devora is an AI-powered coding agent that helps you write, understand, and modify code using large language models. Certain of these large language models are provided by third parties ("Third Party - Models") and certain of these models are provided directly by us if you use the OpenCode Zen paid - offering ("Zen"). Regardless of whether you use Third Party Models or Zen, OpenCode enables you to + Models") and certain of these models are provided directly by us if you use the Devora Zen paid + offering ("Zen"). Regardless of whether you use Third Party Models or Zen, Devora enables you to access the functionality of models through a coding agent running within your terminal.

@@ -84,7 +84,7 @@ export default function TermsOfService() {

We are constantly trying to improve our Services, so these Terms may need to change along with our Services. We reserve the right to change the Terms at any time, but if we do, we will place a notice on - our site located at opencode.ai, send you an email, and/or notify you by some other means. + the Devora repository or website, send you an email, and/or notify you by some other means.

@@ -100,9 +100,8 @@ export default function TermsOfService() {

What about my privacy?

- OpenCode takes the privacy of its users very seriously. For the current OpenCode Privacy Policy, please - click here{" "} - https://opencode.ai/legal/privacy-policy. + Devora takes the privacy of its users very seriously. For the current Devora Privacy Policy, please + click here Devora Privacy Policy.

Children's Online Privacy Protection Act

@@ -114,10 +113,10 @@ export default function TermsOfService() { attempt to register for or otherwise use the Services or send us any personal information. If we learn we have collected personal information from a child under 13 years of age, we will delete that information as quickly as possible. If you believe that a child under 13 years of age may have provided - us personal information, please contact us at contact@anoma.ly. + us personal information, please contact us at Devora GitHub Issues.

-

What are the basics of using OpenCode?

+

What are the basics of using Devora?

You represent and warrant that you are an individual of legal age to form a binding contract (or if not, you've received your parent's or guardian's permission to use the Services and have gotten your parent @@ -144,11 +143,11 @@ export default function TermsOfService() {

  1. infringes or violates the intellectual property rights or any other rights of anyone else (including - OpenCode); + Devora);
  2. violates any law or regulation, including, without limitation, any applicable export control laws, - privacy laws or any other purpose not reasonably intended by OpenCode; + privacy laws or any other purpose not reasonably intended by Devora;
  3. is dangerous, harmful, fraudulent, deceptive, threatening, harassing, defamatory, obscene, or @@ -224,7 +223,7 @@ export default function TermsOfService() {

    - If you use OpenCode with Third Party Models, then your Content will be subject to the data retention + If you use Devora with Third Party Models, then your Content will be subject to the data retention policies of the providers of such Third Party Models. Although we will not retain your Content, we cannot and do not control the retention practices of Third Party Model providers. You should review the terms and conditions applicable to any Third Party Model for more information about the data use and @@ -234,19 +233,19 @@ export default function TermsOfService() {

    What about Third Party Models?

    The Services enable you to access and use Third Party Models, which are not owned or controlled by - OpenCode. Your ability to access Third Party Models is contingent on you having API keys or otherwise + Devora. Your ability to access Third Party Models is contingent on you having API keys or otherwise having the right to access such Third Party Models.

    - OpenCode has no control over, and assumes no responsibility for, the content, accuracy, privacy + Devora has no control over, and assumes no responsibility for, the content, accuracy, privacy policies, or practices of any providers of Third Party Models. We encourage you to read the terms and conditions and privacy policy of each provider of a Third Party Model that you choose to utilize. By using the Services, you release and hold us harmless from any and all liability arising from your use of any Third Party Model.

    -

    Will OpenCode ever change the Services?

    +

    Will Devora ever change the Services?

    We're always trying to improve our Services, so they may change over time. We may suspend or discontinue any part of the Services, or we may introduce new features or impose limits on certain features or @@ -265,7 +264,7 @@ export default function TermsOfService() {

    Certain of our Services, including Zen, may be subject to payments now or in the future (the "Paid Services"). Please see our Paid Services page{" "} - https://opencode.ai/zen for a description of the current Paid + Devora Zen for a description of the current Paid Services. Please note that any payment terms presented to you in the process of using or signing up for a Paid Service are deemed part of these Terms.

    @@ -306,7 +305,7 @@ export default function TermsOfService() { CONFIRMED BY US) THAT YOU HAVE TERMINATED THIS AUTHORIZATION OR WISH TO CHANGE YOUR PAYMENT METHOD. SUCH NOTICE WILL NOT AFFECT CHARGES SUBMITTED BEFORE WE REASONABLY COULD ACT. TO TERMINATE YOUR AUTHORIZATION OR CHANGE YOUR PAYMENT METHOD, GO TO ACCOUNT SETTINGS{" "} - https://opencode.ai/auth. + Devora repository.

    Free Trials and Other Promotions

    @@ -315,20 +314,20 @@ export default function TermsOfService() { specified time of the trial. You must stop using a Paid Service before the end of the trial period in order to avoid being charged for that Paid Service. If you cancel prior to the end of the trial period and are inadvertently charged for a Paid Service, please contact us at{" "} - contact@anoma.ly. + Devora GitHub Issues.

    What if I want to stop using the Services?

    You're free to do that at any time; please refer to our Privacy Policy{" "} - https://opencode.ai/legal/privacy-policy, as well + Devora Privacy Policy, as well as the licenses above, to understand how we treat information you provide to us after you have stopped using our Services.

    - OpenCode is also free to terminate (or suspend access to) your use of the Services for any reason in our - discretion, including your breach of these Terms. OpenCode has the sole right to decide whether you are + Devora is also free to terminate (or suspend access to) your use of the Services for any reason in our + discretion, including your breach of these Terms. Devora has the sole right to decide whether you are in violation of any of the restrictions set forth in these Terms.

    @@ -343,17 +342,17 @@ export default function TermsOfService() {

    Warranty Disclaimer

    - OpenCode and its licensors, suppliers, partners, parent, subsidiaries or affiliated entities, and each + Devora and its licensors, suppliers, partners, parent, subsidiaries or affiliated entities, and each of their respective officers, directors, members, employees, consultants, contract employees, - representatives and agents, and each of their respective successors and assigns (OpenCode and all such - parties together, the "OpenCode Parties") make no representations or warranties concerning the Services, + representatives and agents, and each of their respective successors and assigns (Devora and all such + parties together, the "Devora Parties") make no representations or warranties concerning the Services, including without limitation regarding any Content contained in or accessed through the Services, and - the OpenCode Parties will not be responsible or liable for the accuracy, copyright compliance, legality, + the Devora Parties will not be responsible or liable for the accuracy, copyright compliance, legality, or decency of material contained in or accessed through the Services or any claims, actions, suits procedures, costs, expenses, damages or liabilities arising out of use of, or in any way related to your - participation in, the Services. The OpenCode Parties make no representations or warranties regarding + participation in, the Services. The Devora Parties make no representations or warranties regarding suggestions or recommendations of services or products offered or purchased through or in connection - with the Services. THE SERVICES AND CONTENT ARE PROVIDED BY OPENCODE (AND ITS LICENSORS AND SUPPLIERS) + with the Services. THE SERVICES AND CONTENT ARE PROVIDED BY DEVORA (AND ITS LICENSORS AND SUPPLIERS) ON AN "AS-IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR THAT USE OF THE SERVICES WILL BE UNINTERRUPTED OR ERROR-FREE. SOME STATES DO NOT ALLOW LIMITATIONS ON @@ -364,12 +363,12 @@ export default function TermsOfService() {

    TO THE FULLEST EXTENT ALLOWED BY APPLICABLE LAW, UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, TORT, CONTRACT, STRICT LIABILITY, OR OTHERWISE) SHALL ANY OF THE - OPENCODE PARTIES BE LIABLE TO YOU OR TO ANY OTHER PERSON FOR (A) ANY INDIRECT, SPECIAL, INCIDENTAL, + DEVORA PARTIES BE LIABLE TO YOU OR TO ANY OTHER PERSON FOR (A) ANY INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES OF ANY KIND, INCLUDING DAMAGES FOR LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF DATA, LOSS OF GOODWILL, WORK STOPPAGE, ACCURACY OF RESULTS, OR COMPUTER FAILURE OR MALFUNCTION, (B) ANY SUBSTITUTE GOODS, SERVICES OR TECHNOLOGY, (C) ANY AMOUNT, IN THE AGGREGATE, IN EXCESS OF THE GREATER OF (I) ONE-HUNDRED ($100) DOLLARS OR (II) THE AMOUNTS PAID AND/OR PAYABLE BY YOU - TO OPENCODE IN CONNECTION WITH THE SERVICES IN THE TWELVE (12) MONTH PERIOD PRECEDING THIS APPLICABLE + TO DEVORA IN CONNECTION WITH THE SERVICES IN THE TWELVE (12) MONTH PERIOD PRECEDING THIS APPLICABLE CLAIM OR (D) ANY MATTER BEYOND OUR REASONABLE CONTROL. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL OR CERTAIN OTHER DAMAGES, SO THE ABOVE LIMITATION AND EXCLUSIONS MAY NOT APPLY TO YOU. @@ -377,7 +376,7 @@ export default function TermsOfService() {

    Indemnity

    - You agree to indemnify and hold the OpenCode Parties harmless from and against any and all claims, + You agree to indemnify and hold the Devora Parties harmless from and against any and all claims, liabilities, damages (actual and consequential), losses and expenses (including attorneys' fees) arising from or in any way related to any claims relating to (a) your use of the Services, and (b) your violation of these Terms. In the event of such a claim, suit, or action ("Claim"), we will attempt to @@ -388,7 +387,7 @@ export default function TermsOfService() {

    Assignment

    You may not assign, delegate or transfer these Terms or your rights or obligations hereunder, or your - Services account, in any way (by operation of law or otherwise) without OpenCode's prior written + Services account, in any way (by operation of law or otherwise) without Devora's prior written consent. We may transfer, assign, or delegate these Terms and our rights and obligations without consent.

    @@ -402,9 +401,9 @@ export default function TermsOfService() {

    Arbitration Agreement

    Please read the following ARBITRATION AGREEMENT carefully because it requires you to arbitrate certain - disputes and claims with OpenCode and limits the manner in which you can seek relief from OpenCode. Both - you and OpenCode acknowledge and agree that for the purposes of any dispute arising out of or relating - to the subject matter of these Terms, OpenCode's officers, directors, employees and independent + disputes and claims with Devora and limits the manner in which you can seek relief from Devora. Both + you and Devora acknowledge and agree that for the purposes of any dispute arising out of or relating + to the subject matter of these Terms, Devora's officers, directors, employees and independent contractors ("Personnel") are third-party beneficiaries of these Terms, and that upon your acceptance of these Terms, Personnel will have the right (and will be deemed to have accepted the right) to enforce these Terms against you as the third-party beneficiary hereof. @@ -425,14 +424,14 @@ export default function TermsOfService() {

    Costs of Arbitration

    - The Rules will govern payment of all arbitration fees. OpenCode will pay all arbitration fees for claims - less than seventy-five thousand ($75,000) dollars. OpenCode will not seek its attorneys' fees and costs + The Rules will govern payment of all arbitration fees. Devora will pay all arbitration fees for claims + less than seventy-five thousand ($75,000) dollars. Devora will not seek its attorneys' fees and costs in arbitration unless the arbitrator determines that your claim is frivolous.

    Small Claims Court; Infringement

    - Either you or OpenCode may assert claims, if they qualify, in small claims court in New Castle County, + Either you or Devora may assert claims, if they qualify, in small claims court in New Castle County, Delaware or any United States county where you live or work. Furthermore, notwithstanding the foregoing obligation to arbitrate disputes, each party shall have the right to pursue injunctive or other equitable relief at any time, from any court of competent jurisdiction, to prevent the actual or @@ -442,11 +441,11 @@ export default function TermsOfService() {

    Waiver of Jury Trial

    - YOU AND OPENCODE WAIVE ANY CONSTITUTIONAL AND STATUTORY RIGHTS TO GO TO COURT AND HAVE A TRIAL IN FRONT - OF A JUDGE OR JURY. You and OpenCode are instead choosing to have claims and disputes resolved by + YOU AND DEVORA WAIVE ANY CONSTITUTIONAL AND STATUTORY RIGHTS TO GO TO COURT AND HAVE A TRIAL IN FRONT + OF A JUDGE OR JURY. You and Devora are instead choosing to have claims and disputes resolved by arbitration. Arbitration procedures are typically more limited, more efficient, and less costly than rules applicable in court and are subject to very limited review by a court. In any litigation between - you and OpenCode over whether to vacate or enforce an arbitration award, YOU AND OPENCODE WAIVE ALL + you and Devora over whether to vacate or enforce an arbitration award, YOU AND DEVORA WAIVE ALL RIGHTS TO A JURY TRIAL, and elect instead to have the dispute be resolved by a judge.

    @@ -456,7 +455,7 @@ export default function TermsOfService() { ON AN INDIVIDUAL BASIS AND NOT ON A CLASS BASIS. CLAIMS OF MORE THAN ONE CUSTOMER OR USER CANNOT BE ARBITRATED OR LITIGATED JOINTLY OR CONSOLIDATED WITH THOSE OF ANY OTHER CUSTOMER OR USER. If however, this waiver of class or consolidated actions is deemed invalid or unenforceable, neither you nor - OpenCode is entitled to arbitration; instead all claims and disputes will be resolved in a court as set + Devora is entitled to arbitration; instead all claims and disputes will be resolved in a court as set forth in (g) below.

    @@ -472,9 +471,9 @@ export default function TermsOfService() {

    Exclusive Venue

    If you send the opt-out notice in (f), and/or in any circumstances where the foregoing arbitration - agreement permits either you or OpenCode to litigate any dispute arising out of or relating to the + agreement permits either you or Devora to litigate any dispute arising out of or relating to the subject matter of these Terms in court, then the foregoing arbitration agreement will not apply to - either party, and both you and OpenCode agree that any judicial proceeding (other than small claims + either party, and both you and Devora agree that any judicial proceeding (other than small claims actions) will be brought in the state or federal courts located in, respectively, New Castle County, Delaware, or the federal district in which that county falls.

    @@ -484,27 +483,27 @@ export default function TermsOfService() { If the prohibition against class actions and other claims brought on behalf of third parties contained above is found to be unenforceable, then all of the preceding language in this Arbitration Agreement section will be null and void. This arbitration agreement will survive the termination of your - relationship with OpenCode. + relationship with Devora.

    Miscellaneous

    You will be responsible for paying, withholding, filing, and reporting all taxes, duties, and other governmental assessments associated with your activity in connection with the Services, provided that - the OpenCode may, in its sole discretion, do any of the foregoing on your behalf or for itself as it + the Devora may, in its sole discretion, do any of the foregoing on your behalf or for itself as it sees fit. The failure of either you or us to exercise, in any way, any right herein shall not be deemed a waiver of any further rights hereunder. If any provision of these Terms are found to be unenforceable or invalid, that provision will be limited or eliminated, to the minimum extent necessary, so that these - Terms shall otherwise remain in full force and effect and enforceable. You and OpenCode agree that these - Terms are the complete and exclusive statement of the mutual understanding between you and OpenCode, and + Terms shall otherwise remain in full force and effect and enforceable. You and Devora agree that these + Terms are the complete and exclusive statement of the mutual understanding between you and Devora, and that these Terms supersede and cancel all previous written and oral agreements, communications and other understandings relating to the subject matter of these Terms. You hereby acknowledge and agree that you - are not an employee, agent, partner, or joint venture of OpenCode, and you do not have any authority of - any kind to bind OpenCode in any respect whatsoever. + are not an employee, agent, partner, or joint venture of Devora, and you do not have any authority of + any kind to bind Devora in any respect whatsoever.

    - Except as expressly set forth in the section above regarding the arbitration agreement, you and OpenCode + Except as expressly set forth in the section above regarding the arbitration agreement, you and Devora agree there are no third-party beneficiaries intended under these Terms.

    diff --git a/packages/console/app/src/routes/openapi.json.ts b/packages/console/app/src/routes/openapi.json.ts index 2789e85c..83947c53 100644 --- a/packages/console/app/src/routes/openapi.json.ts +++ b/packages/console/app/src/routes/openapi.json.ts @@ -1,6 +1,6 @@ export async function GET() { const response = await fetch( - "https://raw.githubusercontent.com/anomalyco/opencode/refs/heads/dev/packages/sdk/openapi.json", + "https://raw.githubusercontent.com/SheriAkhtamov/Devora/refs/heads/dev/packages/sdk/openapi.json", ) const json = await response.json() return json diff --git a/packages/console/app/src/routes/s/[id].ts b/packages/console/app/src/routes/s/[id].ts index 5e4ed479..a929cd8b 100644 --- a/packages/console/app/src/routes/s/[id].ts +++ b/packages/console/app/src/routes/s/[id].ts @@ -1,12 +1,12 @@ import type { APIEvent } from "@solidjs/start/server" -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" import { cookie, docs, localeFromRequest, tag } from "~/lib/language" async function handler(evt: APIEvent) { const req = evt.request.clone() const url = new URL(req.url) const locale = localeFromRequest(req) - const host = Resource.App.stage === "production" ? "docs.opencode.ai" : "docs.dev.opencode.ai" + const host = Resource.App.stage === "production" ? "docs.devora.ai" : "docs.dev.devora.ai" const targetUrl = `https://${host}${docs(locale, `/docs${url.pathname}`)}${url.search}` const headers = new Headers(req.headers) diff --git a/packages/console/app/src/routes/stripe/webhook.ts b/packages/console/app/src/routes/stripe/webhook.ts index edae0cf5..c0fd071c 100644 --- a/packages/console/app/src/routes/stripe/webhook.ts +++ b/packages/console/app/src/routes/stripe/webhook.ts @@ -1,15 +1,15 @@ import type { Stripe } from "stripe" -import { Billing } from "@mimo-ai/console-core/billing.js" +import { Billing } from "@devora-ai/console-core/billing.js" import type { APIEvent } from "@solidjs/start/server" -import { and, Database, eq, sql } from "@mimo-ai/console-core/drizzle/index.js" -import { BillingTable, LiteTable, PaymentTable } from "@mimo-ai/console-core/schema/billing.sql.js" -import { Identifier } from "@mimo-ai/console-core/identifier.js" -import { centsToMicroCents } from "@mimo-ai/console-core/util/price.js" -import { Actor } from "@mimo-ai/console-core/actor.js" -import { Resource } from "@mimo-ai/console-resource" -import { LiteData } from "@mimo-ai/console-core/lite.js" -import { BlackData } from "@mimo-ai/console-core/black.js" -import { User } from "@mimo-ai/console-core/user.js" +import { and, Database, eq, sql } from "@devora-ai/console-core/drizzle/index.js" +import { BillingTable, LiteTable, PaymentTable } from "@devora-ai/console-core/schema/billing.sql.js" +import { Identifier } from "@devora-ai/console-core/identifier.js" +import { centsToMicroCents } from "@devora-ai/console-core/util/price.js" +import { Actor } from "@devora-ai/console-core/actor.js" +import { Resource } from "@devora-ai/console-resource" +import { LiteData } from "@devora-ai/console-core/lite.js" +import { BlackData } from "@devora-ai/console-core/black.js" +import { User } from "@devora-ai/console-core/user.js" export async function POST(input: APIEvent) { const body = await Billing.stripe().webhooks.constructEventAsync( diff --git a/packages/console/app/src/routes/t/[...path].tsx b/packages/console/app/src/routes/t/[...path].tsx index 3f65c682..0f9a0c1b 100644 --- a/packages/console/app/src/routes/t/[...path].tsx +++ b/packages/console/app/src/routes/t/[...path].tsx @@ -4,7 +4,7 @@ import { LOCALE_HEADER, localeFromCookieHeader, parseLocale, tag } from "~/lib/l async function handler(evt: APIEvent) { const req = evt.request.clone() const url = new URL(req.url) - const targetUrl = `https://enterprise.opencode.ai/${url.pathname}${url.search}` + const targetUrl = `https://enterprise.devora.ai/${url.pathname}${url.search}` const headers = new Headers(req.headers) const locale = parseLocale(req.headers.get(LOCALE_HEADER)) ?? localeFromCookieHeader(req.headers.get("cookie")) diff --git a/packages/console/app/src/routes/temp.tsx b/packages/console/app/src/routes/temp.tsx index 6bbabc9e..3cf03e2c 100644 --- a/packages/console/app/src/routes/temp.tsx +++ b/packages/console/app/src/routes/temp.tsx @@ -67,7 +67,7 @@ export default function Home() { curl -fsSL https:// - opencode.ai/install + devora.ai/install | bash @@ -113,7 +113,7 @@ export default function Home() {

    npm

    @@ -122,7 +122,7 @@ export default function Home() {

    bun

    @@ -131,7 +131,7 @@ export default function Home() {

    homebrew

    @@ -140,7 +140,7 @@ export default function Home() {

    paru

    @@ -158,20 +158,20 @@ export default function Home() {
- ©2025 Anomaly + ©2025 Devora
diff --git a/packages/console/app/src/routes/workspace-picker.tsx b/packages/console/app/src/routes/workspace-picker.tsx index 9f2cac5b..f2a3ac4a 100644 --- a/packages/console/app/src/routes/workspace-picker.tsx +++ b/packages/console/app/src/routes/workspace-picker.tsx @@ -2,11 +2,11 @@ import { query, useParams, action, createAsync, redirect, useSubmission } from " import { For, createEffect } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" -import { Actor } from "@mimo-ai/console-core/actor.js" -import { and, Database, eq, isNull } from "@mimo-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@mimo-ai/console-core/schema/workspace.sql.js" -import { UserTable } from "@mimo-ai/console-core/schema/user.sql.js" -import { Workspace } from "@mimo-ai/console-core/workspace.js" +import { Actor } from "@devora-ai/console-core/actor.js" +import { and, Database, eq, isNull } from "@devora-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@devora-ai/console-core/schema/workspace.sql.js" +import { UserTable } from "@devora-ai/console-core/schema/user.sql.js" +import { Workspace } from "@devora-ai/console-core/workspace.js" import { Dropdown, DropdownItem } from "~/component/dropdown" import { Modal } from "~/component/modal" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/routes/workspace.tsx b/packages/console/app/src/routes/workspace.tsx index bf78da2d..c08d7c59 100644 --- a/packages/console/app/src/routes/workspace.tsx +++ b/packages/console/app/src/routes/workspace.tsx @@ -4,8 +4,8 @@ import { IconWorkspaceLogo } from "../component/icon" import { WorkspacePicker } from "./workspace-picker" import { UserMenu } from "./user-menu" import { withActor } from "~/context/auth.withActor" -import { User } from "@mimo-ai/console-core/user.js" -import { Actor } from "@mimo-ai/console-core/actor.js" +import { User } from "@devora-ai/console-core/user.js" +import { Actor } from "@devora-ai/console-core/actor.js" import { useLanguage } from "~/context/language" const getUserEmail = query(async (workspaceID: string) => { diff --git a/packages/console/app/src/routes/workspace/[id]/billing/billing-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/billing-section.tsx index 09eb0fee..29c01b92 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/billing-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/billing-section.tsx @@ -1,7 +1,7 @@ import { action, useParams, useAction, createAsync, useSubmission, json } from "@solidjs/router" import { createMemo, Match, Show, Switch, createEffect } from "solid-js" import { createStore } from "solid-js/store" -import { Billing } from "@mimo-ai/console-core/billing.js" +import { Billing } from "@devora-ai/console-core/billing.js" import { withActor } from "~/context/auth.withActor" import { IconAlipay, IconCreditCard, IconStripe, IconUpi, IconWechat } from "~/component/icon" import styles from "./billing-section.module.css" @@ -143,7 +143,7 @@ export function BillingSection() {

{i18n.t("workspace.billing.title")}

{i18n.t("workspace.billing.subtitle.beforeLink")}{" "} - {i18n.t("workspace.billing.contactUs")}{" "} + {i18n.t("workspace.billing.contactUs")}{" "} {i18n.t("workspace.billing.subtitle.afterLink")}

diff --git a/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx index 074cfc76..c8273a9b 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx @@ -1,12 +1,12 @@ import { action, useParams, useAction, useSubmission, json, query, createAsync } from "@solidjs/router" import { createStore } from "solid-js/store" import { Show } from "solid-js" -import { Billing } from "@mimo-ai/console-core/billing.js" -import { Database, eq, and, isNull, sql } from "@mimo-ai/console-core/drizzle/index.js" -import { BillingTable, SubscriptionTable } from "@mimo-ai/console-core/schema/billing.sql.js" -import { Actor } from "@mimo-ai/console-core/actor.js" -import { Subscription } from "@mimo-ai/console-core/subscription.js" -import { BlackData } from "@mimo-ai/console-core/black.js" +import { Billing } from "@devora-ai/console-core/billing.js" +import { Database, eq, and, isNull, sql } from "@devora-ai/console-core/drizzle/index.js" +import { BillingTable, SubscriptionTable } from "@devora-ai/console-core/schema/billing.sql.js" +import { Actor } from "@devora-ai/console-core/actor.js" +import { Subscription } from "@devora-ai/console-core/subscription.js" +import { BlackData } from "@devora-ai/console-core/black.js" import { withActor } from "~/context/auth.withActor" import { queryBillingInfo } from "../../common" import styles from "./black-section.module.css" diff --git a/packages/console/app/src/routes/workspace/[id]/billing/monthly-limit-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/monthly-limit-section.tsx index 1703ee78..13c25000 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/monthly-limit-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/monthly-limit-section.tsx @@ -2,7 +2,7 @@ import { json, action, useParams, createAsync, useSubmission } from "@solidjs/ro import { createEffect, Show } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" -import { Billing } from "@mimo-ai/console-core/billing.js" +import { Billing } from "@devora-ai/console-core/billing.js" import styles from "./monthly-limit-section.module.css" import { queryBillingInfo } from "../../common" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/routes/workspace/[id]/billing/payment-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/payment-section.tsx index 868df598..9a285e4c 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/payment-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/payment-section.tsx @@ -1,4 +1,4 @@ -import { Billing } from "@mimo-ai/console-core/billing.js" +import { Billing } from "@devora-ai/console-core/billing.js" import { query, action, useParams, createAsync, useAction } from "@solidjs/router" import { For, Match, Show, Switch } from "solid-js" import { withActor } from "~/context/auth.withActor" diff --git a/packages/console/app/src/routes/workspace/[id]/billing/redeem-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/redeem-section.tsx index ddab1927..156fabb7 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/redeem-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/redeem-section.tsx @@ -1,10 +1,10 @@ import { json, action, useParams, useSubmission } from "@solidjs/router" import { Show } from "solid-js" import { withActor } from "~/context/auth.withActor" -import { Billing } from "@mimo-ai/console-core/billing.js" -import { User } from "@mimo-ai/console-core/user.js" -import { Actor } from "@mimo-ai/console-core/actor.js" -import { CouponType } from "@mimo-ai/console-core/schema/billing.sql.js" +import { Billing } from "@devora-ai/console-core/billing.js" +import { User } from "@devora-ai/console-core/user.js" +import { Actor } from "@devora-ai/console-core/actor.js" +import { CouponType } from "@devora-ai/console-core/schema/billing.sql.js" import styles from "./redeem-section.module.css" import { queryBillingInfo } from "../../common" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx index d90aa871..64e36259 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx @@ -2,9 +2,9 @@ import { json, action, useParams, createAsync, useSubmission } from "@solidjs/ro import { createEffect, Show, createMemo } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" -import { Billing } from "@mimo-ai/console-core/billing.js" -import { Database, eq } from "@mimo-ai/console-core/drizzle/index.js" -import { BillingTable } from "@mimo-ai/console-core/schema/billing.sql.js" +import { Billing } from "@devora-ai/console-core/billing.js" +import { Database, eq } from "@devora-ai/console-core/drizzle/index.js" +import { BillingTable } from "@devora-ai/console-core/schema/billing.sql.js" import styles from "./reload-section.module.css" import { queryBillingInfo } from "../../common" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx index 20a54409..79597bf6 100644 --- a/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/go/lite-section.tsx @@ -2,12 +2,12 @@ import { action, useParams, useAction, useSubmission, json, query, createAsync } import { createStore } from "solid-js/store" import { createMemo, For, Show } from "solid-js" import { Modal } from "~/component/modal" -import { Billing } from "@mimo-ai/console-core/billing.js" -import { Database, eq, and, isNull } from "@mimo-ai/console-core/drizzle/index.js" -import { BillingTable, LiteTable } from "@mimo-ai/console-core/schema/billing.sql.js" -import { Actor } from "@mimo-ai/console-core/actor.js" -import { Subscription } from "@mimo-ai/console-core/subscription.js" -import { LiteData } from "@mimo-ai/console-core/lite.js" +import { Billing } from "@devora-ai/console-core/billing.js" +import { Database, eq, and, isNull } from "@devora-ai/console-core/drizzle/index.js" +import { BillingTable, LiteTable } from "@devora-ai/console-core/schema/billing.sql.js" +import { Actor } from "@devora-ai/console-core/actor.js" +import { Subscription } from "@devora-ai/console-core/subscription.js" +import { LiteData } from "@devora-ai/console-core/lite.js" import { withActor } from "~/context/auth.withActor" import { queryBillingInfo } from "../../common" import styles from "./lite-section.module.css" @@ -201,7 +201,7 @@ export function LiteSection() {
{i18n.t("workspace.lite.subscription.selectProvider")}{" "} - + {i18n.t("common.learnMore")} . @@ -289,8 +289,8 @@ export function LiteSection() {
  • Kimi K2.6
  • GLM-5
  • GLM-5.1
  • -
  • Mimo-V2-Pro
  • -
  • Mimo-V2-Omni
  • +
  • Devora-V2-Pro
  • +
  • Devora-V2-Omni
  • MiniMax M2.5
  • MiniMax M2.7
  • Qwen3.5 Plus
  • diff --git a/packages/console/app/src/routes/workspace/[id]/keys/key-section.tsx b/packages/console/app/src/routes/workspace/[id]/keys/key-section.tsx index 6d7fc400..8501a4af 100644 --- a/packages/console/app/src/routes/workspace/[id]/keys/key-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/keys/key-section.tsx @@ -1,12 +1,12 @@ import { json, query, action, useParams, createAsync, useSubmission } from "@solidjs/router" import { createEffect, createSignal, For, Show } from "solid-js" import { IconCopy, IconCheck } from "~/component/icon" -import { Key } from "@mimo-ai/console-core/key.js" +import { Key } from "@devora-ai/console-core/key.js" import { withActor } from "~/context/auth.withActor" import { createStore } from "solid-js/store" import { formatDateUTC, formatDateForTable } from "../../common" import styles from "./key-section.module.css" -import { Actor } from "@mimo-ai/console-core/actor.js" +import { Actor } from "@devora-ai/console-core/actor.js" import { useI18n } from "~/context/i18n" import { formError, localizeError } from "~/lib/form-error" diff --git a/packages/console/app/src/routes/workspace/[id]/members/member-section.tsx b/packages/console/app/src/routes/workspace/[id]/members/member-section.tsx index 54f7b405..92af0312 100644 --- a/packages/console/app/src/routes/workspace/[id]/members/member-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/members/member-section.tsx @@ -3,9 +3,9 @@ import { createEffect, For, Show } from "solid-js" import { withActor } from "~/context/auth.withActor" import { createStore } from "solid-js/store" import styles from "./member-section.module.css" -import { UserRole } from "@mimo-ai/console-core/schema/user.sql.js" -import { Actor } from "@mimo-ai/console-core/actor.js" -import { User } from "@mimo-ai/console-core/user.js" +import { UserRole } from "@devora-ai/console-core/schema/user.sql.js" +import { Actor } from "@devora-ai/console-core/actor.js" +import { User } from "@devora-ai/console-core/user.js" import { RoleDropdown } from "./role-dropdown" import { useI18n } from "~/context/i18n" import { useLanguage } from "~/context/language" diff --git a/packages/console/app/src/routes/workspace/[id]/model-section.tsx b/packages/console/app/src/routes/workspace/[id]/model-section.tsx index 04efc9ce..72a7fd75 100644 --- a/packages/console/app/src/routes/workspace/[id]/model-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/model-section.tsx @@ -1,8 +1,8 @@ -import { Model } from "@mimo-ai/console-core/model.js" +import { Model } from "@devora-ai/console-core/model.js" import { query, action, useParams, createAsync, json } from "@solidjs/router" import { createMemo, For, Show } from "solid-js" import { withActor } from "~/context/auth.withActor" -import { ZenData } from "@mimo-ai/console-core/model.js" +import { ZenData } from "@devora-ai/console-core/model.js" import styles from "./model-section.module.css" import { querySessionInfo } from "../common" import { @@ -16,7 +16,7 @@ import { IconOpenAI, IconStealth, IconXai, - IconXiaomi, + IconDevora, IconZai, } from "~/component/icon" import { useI18n } from "~/context/i18n" @@ -32,7 +32,7 @@ const getModelLab = (modelId: string) => { if (modelId.startsWith("qwen")) return "Alibaba" if (modelId.startsWith("minimax")) return "MiniMax" if (modelId.startsWith("grok")) return "xAI" - if (modelId.startsWith("mimo")) return "Xiaomi" + if (modelId.startsWith("devora")) return "Devora" if (modelId.startsWith("nemotron")) return "NVIDIA" if (modelId.startsWith("trinity")) return "Arcee" return "Stealth" @@ -145,8 +145,8 @@ export function ModelSection() { return case "MiniMax": return - case "Xiaomi": - return + case "Devora": + return case "NVIDIA": return case "Arcee": diff --git a/packages/console/app/src/routes/workspace/[id]/new-user-section.tsx b/packages/console/app/src/routes/workspace/[id]/new-user-section.tsx index 684430ee..49401097 100644 --- a/packages/console/app/src/routes/workspace/[id]/new-user-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/new-user-section.tsx @@ -1,8 +1,8 @@ import { query, useParams, createAsync } from "@solidjs/router" import { createMemo, createSignal, Show } from "solid-js" import { IconCopy, IconCheck } from "~/component/icon" -import { Key } from "@mimo-ai/console-core/key.js" -import { Billing } from "@mimo-ai/console-core/billing.js" +import { Key } from "@devora-ai/console-core/key.js" +import { Billing } from "@devora-ai/console-core/billing.js" import { withActor } from "~/context/auth.withActor" import styles from "./new-user-section.module.css" import { useI18n } from "~/context/i18n" @@ -92,7 +92,7 @@ export function NewUserSection() {
    1. {i18n.t("workspace.newUser.step.enableBilling")}
    2. - {i18n.t("workspace.newUser.step.login.before")} opencode auth login{" "} + {i18n.t("workspace.newUser.step.login.before")} devora auth login{" "} {i18n.t("workspace.newUser.step.login.after")}
    3. {i18n.t("workspace.newUser.step.pasteKey")}
    4. diff --git a/packages/console/app/src/routes/workspace/[id]/provider-section.tsx b/packages/console/app/src/routes/workspace/[id]/provider-section.tsx index a9d7d2d2..6d17dd13 100644 --- a/packages/console/app/src/routes/workspace/[id]/provider-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/provider-section.tsx @@ -1,6 +1,6 @@ import { json, query, action, useParams, createAsync, useSubmission } from "@solidjs/router" import { createEffect, For, Show } from "solid-js" -import { Provider } from "@mimo-ai/console-core/provider.js" +import { Provider } from "@devora-ai/console-core/provider.js" import { withActor } from "~/context/auth.withActor" import { createStore } from "solid-js/store" import styles from "./provider-section.module.css" diff --git a/packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx b/packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx index ffe8eae8..e6f5a82d 100644 --- a/packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx @@ -2,10 +2,10 @@ import { json, action, useParams, useSubmission, createAsync, query } from "@sol import { createEffect, Show } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" -import { Workspace } from "@mimo-ai/console-core/workspace.js" +import { Workspace } from "@devora-ai/console-core/workspace.js" import styles from "./settings-section.module.css" -import { Database, eq } from "@mimo-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@mimo-ai/console-core/schema/workspace.sql.js" +import { Database, eq } from "@devora-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@devora-ai/console-core/schema/workspace.sql.js" import { useI18n } from "~/context/i18n" import { formError, localizeError } from "~/lib/form-error" diff --git a/packages/console/app/src/routes/workspace/[id]/usage/graph-section.tsx b/packages/console/app/src/routes/workspace/[id]/usage/graph-section.tsx index dc014f68..53906603 100644 --- a/packages/console/app/src/routes/workspace/[id]/usage/graph-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/usage/graph-section.tsx @@ -1,8 +1,8 @@ -import { and, Database, eq, gte, inArray, isNull, lt, or, sql, sum } from "@mimo-ai/console-core/drizzle/index.js" -import { UsageTable } from "@mimo-ai/console-core/schema/billing.sql.js" -import { KeyTable } from "@mimo-ai/console-core/schema/key.sql.js" -import { UserTable } from "@mimo-ai/console-core/schema/user.sql.js" -import { AuthTable } from "@mimo-ai/console-core/schema/auth.sql.js" +import { and, Database, eq, gte, inArray, isNull, lt, or, sql, sum } from "@devora-ai/console-core/drizzle/index.js" +import { UsageTable } from "@devora-ai/console-core/schema/billing.sql.js" +import { KeyTable } from "@devora-ai/console-core/schema/key.sql.js" +import { UserTable } from "@devora-ai/console-core/schema/user.sql.js" +import { AuthTable } from "@devora-ai/console-core/schema/auth.sql.js" import { useParams } from "@solidjs/router" import { createEffect, createMemo, onCleanup, Show, For } from "solid-js" import { createStore } from "solid-js/store" diff --git a/packages/console/app/src/routes/workspace/[id]/usage/usage-section.tsx b/packages/console/app/src/routes/workspace/[id]/usage/usage-section.tsx index 47f5dc07..f06e5f70 100644 --- a/packages/console/app/src/routes/workspace/[id]/usage/usage-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/usage/usage-section.tsx @@ -1,4 +1,4 @@ -import { Billing } from "@mimo-ai/console-core/billing.js" +import { Billing } from "@devora-ai/console-core/billing.js" import { createAsync, query, useParams } from "@solidjs/router" import { createMemo, For, Show, Switch, Match, createEffect, createSignal } from "solid-js" import { formatDateUTC, formatDateForTable } from "../../common" diff --git a/packages/console/app/src/routes/workspace/common.tsx b/packages/console/app/src/routes/workspace/common.tsx index 7457ae77..53143c19 100644 --- a/packages/console/app/src/routes/workspace/common.tsx +++ b/packages/console/app/src/routes/workspace/common.tsx @@ -1,11 +1,11 @@ -import { Resource } from "@mimo-ai/console-resource" -import { Actor } from "@mimo-ai/console-core/actor.js" +import { Resource } from "@devora-ai/console-resource" +import { Actor } from "@devora-ai/console-core/actor.js" import { action, json, query } from "@solidjs/router" import { withActor } from "~/context/auth.withActor" -import { Billing } from "@mimo-ai/console-core/billing.js" -import { and, Database, desc, eq, isNull } from "@mimo-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@mimo-ai/console-core/schema/workspace.sql.js" -import { UserTable } from "@mimo-ai/console-core/schema/user.sql.js" +import { Billing } from "@devora-ai/console-core/billing.js" +import { and, Database, desc, eq, isNull } from "@devora-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@devora-ai/console-core/schema/workspace.sql.js" +import { UserTable } from "@devora-ai/console-core/schema/user.sql.js" export function formatDateForTable(date: Date) { const options: Intl.DateTimeFormatOptions = { diff --git a/packages/console/app/src/routes/zen/index.css b/packages/console/app/src/routes/zen/index.css index 1b575528..67261c45 100644 --- a/packages/console/app/src/routes/zen/index.css +++ b/packages/console/app/src/routes/zen/index.css @@ -55,7 +55,7 @@ body { } @supports (background: -webkit-named-image(i)) { - [data-page="opencode"] { + [data-page="devora"] { border-top: 1px solid var(--color-border-weak); } } diff --git a/packages/console/app/src/routes/zen/index.tsx b/packages/console/app/src/routes/zen/index.tsx index 6285a0bd..ae2d0900 100644 --- a/packages/console/app/src/routes/zen/index.tsx +++ b/packages/console/app/src/routes/zen/index.tsx @@ -4,8 +4,8 @@ import { Title, Meta } from "@solidjs/meta" //import { HttpHeader } from "@solidjs/start" import zenLogoLight from "../../asset/zen-ornate-light.svg" import zenLogoDark from "../../asset/zen-ornate-dark.svg" -import compareVideo from "../../asset/lander/opencode-comparison-min.mp4" -import compareVideoPoster from "../../asset/lander/opencode-comparison-poster.png" +import compareVideo from "../../asset/lander/devora-comparison-min.mp4" +import compareVideoPoster from "../../asset/lander/devora-comparison-poster.png" import avatarDax from "../../asset/lander/avatar-dax.png" import avatarJay from "../../asset/lander/avatar-jay.png" import avatarFrank from "../../asset/lander/avatar-frank.png" @@ -38,7 +38,7 @@ export default function Home() { - +
      @@ -221,7 +221,7 @@ export default function Home() { ex-CEO, Terminal Products
      - @OpenCode + @Devora {" Zen has been life changing, it's truly a no-brainer."}
    @@ -236,7 +236,7 @@ export default function Home() {
    {"4 out of 5 people on our team love using "} - @OpenCode + @Devora {" Zen."}
    @@ -251,7 +251,7 @@ export default function Home() {
    {"I can't recommend "} - @OpenCode + @Devora {" Zen enough. Seriously, it's really good."}
    @@ -266,7 +266,7 @@ export default function Home() {
    {"With "} - @OpenCode + @Devora {" Zen I know all the models are tested and perfect for coding agents."}
    diff --git a/packages/console/app/src/routes/zen/util/dataDumper.ts b/packages/console/app/src/routes/zen/util/dataDumper.ts index 0a0209cd..5159a639 100644 --- a/packages/console/app/src/routes/zen/util/dataDumper.ts +++ b/packages/console/app/src/routes/zen/util/dataDumper.ts @@ -1,4 +1,4 @@ -import { Resource, waitUntil } from "@mimo-ai/console-resource" +import { Resource, waitUntil } from "@devora-ai/console-resource" export function createDataDumper(sessionId: string, requestId: string, projectId: string) { if (Resource.App.stage !== "production") return diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 76e0d79d..c4705a1b 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -1,19 +1,19 @@ import type { APIEvent } from "@solidjs/start/server" -import { and, Database, eq, isNull, lt, or, sql } from "@mimo-ai/console-core/drizzle/index.js" -import { KeyTable } from "@mimo-ai/console-core/schema/key.sql.js" -import { BillingTable, LiteTable, SubscriptionTable, UsageTable } from "@mimo-ai/console-core/schema/billing.sql.js" -import { centsToMicroCents } from "@mimo-ai/console-core/util/price.js" -import { getMonthlyBounds, getWeekBounds } from "@mimo-ai/console-core/util/date.js" -import { Identifier } from "@mimo-ai/console-core/identifier.js" -import { Billing } from "@mimo-ai/console-core/billing.js" -import { Actor } from "@mimo-ai/console-core/actor.js" -import { WorkspaceTable } from "@mimo-ai/console-core/schema/workspace.sql.js" -import { ZenData } from "@mimo-ai/console-core/model.js" -import { Subscription } from "@mimo-ai/console-core/subscription.js" -import { BlackData } from "@mimo-ai/console-core/black.js" -import { UserTable } from "@mimo-ai/console-core/schema/user.sql.js" -import { ModelTable } from "@mimo-ai/console-core/schema/model.sql.js" -import { ProviderTable } from "@mimo-ai/console-core/schema/provider.sql.js" +import { and, Database, eq, isNull, lt, or, sql } from "@devora-ai/console-core/drizzle/index.js" +import { KeyTable } from "@devora-ai/console-core/schema/key.sql.js" +import { BillingTable, LiteTable, SubscriptionTable, UsageTable } from "@devora-ai/console-core/schema/billing.sql.js" +import { centsToMicroCents } from "@devora-ai/console-core/util/price.js" +import { getMonthlyBounds, getWeekBounds } from "@devora-ai/console-core/util/date.js" +import { Identifier } from "@devora-ai/console-core/identifier.js" +import { Billing } from "@devora-ai/console-core/billing.js" +import { Actor } from "@devora-ai/console-core/actor.js" +import { WorkspaceTable } from "@devora-ai/console-core/schema/workspace.sql.js" +import { ZenData } from "@devora-ai/console-core/model.js" +import { Subscription } from "@devora-ai/console-core/subscription.js" +import { BlackData } from "@devora-ai/console-core/black.js" +import { UserTable } from "@devora-ai/console-core/schema/user.sql.js" +import { ModelTable } from "@devora-ai/console-core/schema/model.sql.js" +import { ProviderTable } from "@devora-ai/console-core/schema/provider.sql.js" import { logger } from "./logger" import { AuthError, @@ -41,8 +41,8 @@ import { createRateLimiter as createKeyRateLimiter } from "./keyRateLimiter" import { createDataDumper } from "./dataDumper" import { createTrialLimiter } from "./trialLimiter" import { createStickyTracker } from "./stickyProviderTracker" -import { LiteData } from "@mimo-ai/console-core/lite.js" -import { Resource } from "@mimo-ai/console-resource" +import { LiteData } from "@devora-ai/console-core/lite.js" +import { Resource } from "@devora-ai/console-resource" import { i18n, type Key } from "~/i18n" import { localeFromRequest } from "~/lib/language" import { createModelTpmLimiter } from "./modelTpmLimiter" @@ -97,16 +97,16 @@ export async function handler( const ip = rawIp.includes(":") ? rawIp.split(":").slice(0, 4).join(":") : rawIp const rawZenApiKey = opts.parseApiKey(input.request.headers) const zenApiKey = rawZenApiKey === "public" ? undefined : rawZenApiKey - const sessionId = input.request.headers.get("x-opencode-session") ?? "" - const requestId = input.request.headers.get("x-opencode-request") ?? "" - const projectId = input.request.headers.get("x-opencode-project") ?? "" - const ocClient = input.request.headers.get("x-opencode-client") ?? "" + const sessionId = input.request.headers.get("x-devora-session") ?? "" + const requestId = input.request.headers.get("x-devora-request") ?? "" + const projectId = input.request.headers.get("x-devora-project") ?? "" + const ocClient = input.request.headers.get("x-devora-client") ?? "" logger.metric({ is_stream: isStream, session: sessionId, request: requestId, client: ocClient, - ...(model === "mimo-v2-pro-free" && JSON.stringify(body).length < 1000 ? { payload: JSON.stringify(body) } : {}), + ...(model === "devora-v2-pro-free" && JSON.stringify(body).length < 1000 ? { payload: JSON.stringify(body) } : {}), }) const zenData = ZenData.list(opts.modelList) const modelInfo = validateModel(zenData, model) @@ -168,10 +168,10 @@ export async function handler( }) headers.delete("host") headers.delete("content-length") - headers.delete("x-opencode-request") - headers.delete("x-opencode-session") - headers.delete("x-opencode-project") - headers.delete("x-opencode-client") + headers.delete("x-devora-request") + headers.delete("x-devora-session") + headers.delete("x-devora-project") + headers.delete("x-devora-client") return headers })(), body: reqBody, @@ -420,7 +420,7 @@ export async function handler( throw new ModelError( `${t("zen.api.error.trialEnded", { model: modelData.name, - link: "https://opencode.ai/go", + link: "https://devora.ai/go", })}`, ) @@ -762,8 +762,8 @@ export async function handler( // Validate pay as you go billing const billing = authInfo.billing - const billingUrl = `https://opencode.ai/workspace/${authInfo.workspaceID}/billing` - const membersUrl = `https://opencode.ai/workspace/${authInfo.workspaceID}/members` + const billingUrl = `https://devora.ai/workspace/${authInfo.workspaceID}/billing` + const membersUrl = `https://devora.ai/workspace/${authInfo.workspaceID}/members` if (!billing.paymentMethodID && billing.balance <= 0) throw new CreditsError(t("zen.api.error.noPaymentMethod", { billingUrl })) if (billing.balance <= 0) throw new CreditsError(t("zen.api.error.insufficientBalance", { billingUrl })) diff --git a/packages/console/app/src/routes/zen/util/ipRateLimiter.ts b/packages/console/app/src/routes/zen/util/ipRateLimiter.ts index 76e113ea..ca9911ce 100644 --- a/packages/console/app/src/routes/zen/util/ipRateLimiter.ts +++ b/packages/console/app/src/routes/zen/util/ipRateLimiter.ts @@ -1,10 +1,10 @@ -import { Database, eq, and, sql, inArray } from "@mimo-ai/console-core/drizzle/index.js" -import { IpRateLimitTable } from "@mimo-ai/console-core/schema/ip.sql.js" +import { Database, eq, and, sql, inArray } from "@devora-ai/console-core/drizzle/index.js" +import { IpRateLimitTable } from "@devora-ai/console-core/schema/ip.sql.js" import { FreeUsageLimitError } from "./error" import { logger } from "./logger" import { i18n } from "~/i18n" import { localeFromRequest } from "~/lib/language" -import { Subscription } from "@mimo-ai/console-core/subscription.js" +import { Subscription } from "@devora-ai/console-core/subscription.js" export function createRateLimiter(modelId: string, rateLimit: number | undefined, rawIp: string, request: Request) { const dict = i18n(localeFromRequest(request)) diff --git a/packages/console/app/src/routes/zen/util/keyRateLimiter.ts b/packages/console/app/src/routes/zen/util/keyRateLimiter.ts index 12c1274d..cb0e8cd0 100644 --- a/packages/console/app/src/routes/zen/util/keyRateLimiter.ts +++ b/packages/console/app/src/routes/zen/util/keyRateLimiter.ts @@ -1,5 +1,5 @@ -import { Database, eq, and, sql } from "@mimo-ai/console-core/drizzle/index.js" -import { KeyRateLimitTable } from "@mimo-ai/console-core/schema/ip.sql.js" +import { Database, eq, and, sql } from "@devora-ai/console-core/drizzle/index.js" +import { KeyRateLimitTable } from "@devora-ai/console-core/schema/ip.sql.js" import { RateLimitError } from "./error" import { i18n } from "~/i18n" import { localeFromRequest } from "~/lib/language" diff --git a/packages/console/app/src/routes/zen/util/logger.ts b/packages/console/app/src/routes/zen/util/logger.ts index 9d8ab2b8..c7cbe007 100644 --- a/packages/console/app/src/routes/zen/util/logger.ts +++ b/packages/console/app/src/routes/zen/util/logger.ts @@ -1,4 +1,4 @@ -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" export const logger = { metric: (values: Record) => { diff --git a/packages/console/app/src/routes/zen/util/modelTpmLimiter.ts b/packages/console/app/src/routes/zen/util/modelTpmLimiter.ts index 26ce3111..7c5f22c9 100644 --- a/packages/console/app/src/routes/zen/util/modelTpmLimiter.ts +++ b/packages/console/app/src/routes/zen/util/modelTpmLimiter.ts @@ -1,5 +1,5 @@ -import { and, Database, eq, inArray, sql } from "@mimo-ai/console-core/drizzle/index.js" -import { ModelTpmRateLimitTable } from "@mimo-ai/console-core/schema/ip.sql.js" +import { and, Database, eq, inArray, sql } from "@devora-ai/console-core/drizzle/index.js" +import { ModelTpmRateLimitTable } from "@devora-ai/console-core/schema/ip.sql.js" import { UsageInfo } from "./provider/provider" export function createModelTpmLimiter(providers: { id: string; model: string; tpmLimit?: number }[]) { diff --git a/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts b/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts index 97b0abc6..1b82cd6a 100644 --- a/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts +++ b/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts @@ -28,7 +28,7 @@ export const oaCompatHelper: ProviderHelper = ({ adjustCacheUsage, safetyIdentif modifyUrl: (providerApi: string) => providerApi + "/chat/completions", modifyHeaders: (headers: Headers, body: Record, apiKey: string) => { headers.set("authorization", `Bearer ${apiKey}`) - headers.set("x-session-affinity", headers.get("x-opencode-session") ?? "") + headers.set("x-session-affinity", headers.get("x-devora-session") ?? "") }, modifyBody: (body: Record, _workspaceID?: string) => { return { diff --git a/packages/console/app/src/routes/zen/util/provider/provider.ts b/packages/console/app/src/routes/zen/util/provider/provider.ts index 5cc00202..d5a2b269 100644 --- a/packages/console/app/src/routes/zen/util/provider/provider.ts +++ b/packages/console/app/src/routes/zen/util/provider/provider.ts @@ -1,4 +1,4 @@ -import { ZenData } from "@mimo-ai/console-core/model.js" +import { ZenData } from "@devora-ai/console-core/model.js" import { fromAnthropicChunk, fromAnthropicRequest, diff --git a/packages/console/app/src/routes/zen/util/stickyProviderTracker.ts b/packages/console/app/src/routes/zen/util/stickyProviderTracker.ts index e1ea787a..01b6b7ee 100644 --- a/packages/console/app/src/routes/zen/util/stickyProviderTracker.ts +++ b/packages/console/app/src/routes/zen/util/stickyProviderTracker.ts @@ -1,4 +1,4 @@ -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" export function createStickyTracker(stickyProvider: "strict" | "prefer" | undefined, session: string) { if (!stickyProvider) return diff --git a/packages/console/app/src/routes/zen/util/trialLimiter.ts b/packages/console/app/src/routes/zen/util/trialLimiter.ts index 2c7ce6aa..a273a6ba 100644 --- a/packages/console/app/src/routes/zen/util/trialLimiter.ts +++ b/packages/console/app/src/routes/zen/util/trialLimiter.ts @@ -1,7 +1,7 @@ -import { Database, eq, sql } from "@mimo-ai/console-core/drizzle/index.js" -import { IpTable } from "@mimo-ai/console-core/schema/ip.sql.js" +import { Database, eq, sql } from "@devora-ai/console-core/drizzle/index.js" +import { IpTable } from "@devora-ai/console-core/schema/ip.sql.js" import { UsageInfo } from "./provider/provider" -import { Subscription } from "@mimo-ai/console-core/subscription.js" +import { Subscription } from "@devora-ai/console-core/subscription.js" export function createTrialLimiter(trialProviders: string[] | undefined, ip: string) { if (!trialProviders) return diff --git a/packages/console/app/src/routes/zen/v1/models.ts b/packages/console/app/src/routes/zen/v1/models.ts index 4f95a6ea..4731742c 100644 --- a/packages/console/app/src/routes/zen/v1/models.ts +++ b/packages/console/app/src/routes/zen/v1/models.ts @@ -1,9 +1,9 @@ import type { APIEvent } from "@solidjs/start/server" -import { and, Database, eq, isNull } from "@mimo-ai/console-core/drizzle/index.js" -import { KeyTable } from "@mimo-ai/console-core/schema/key.sql.js" -import { WorkspaceTable } from "@mimo-ai/console-core/schema/workspace.sql.js" -import { ModelTable } from "@mimo-ai/console-core/schema/model.sql.js" -import { ZenData } from "@mimo-ai/console-core/model.js" +import { and, Database, eq, isNull } from "@devora-ai/console-core/drizzle/index.js" +import { KeyTable } from "@devora-ai/console-core/schema/key.sql.js" +import { WorkspaceTable } from "@devora-ai/console-core/schema/workspace.sql.js" +import { ModelTable } from "@devora-ai/console-core/schema/model.sql.js" +import { ZenData } from "@devora-ai/console-core/model.js" export async function OPTIONS(_input: APIEvent) { return new Response(null, { @@ -30,7 +30,7 @@ export async function GET(input: APIEvent) { id, object: "model", created: Math.floor(Date.now() / 1000), - owned_by: "opencode", + owned_by: "devora", })), }), { diff --git a/packages/console/app/src/routes/zen/v1/models/[model].ts b/packages/console/app/src/routes/zen/v1/models/[model].ts index bc1168eb..3f389636 100644 --- a/packages/console/app/src/routes/zen/v1/models/[model].ts +++ b/packages/console/app/src/routes/zen/v1/models/[model].ts @@ -8,7 +8,7 @@ export function POST(input: APIEvent) { parseApiKey: (headers: Headers) => headers.get("x-goog-api-key") ?? undefined, parseModel: (url: string, _body: any) => url.split("/").pop()?.split(":")?.[0] ?? "", parseIsStream: (url: string, _body: any) => - // ie. url: https://opencode.ai/zen/v1/models/gemini-3-pro:streamGenerateContent?alt=sse' + // ie. url: https://devora.ai/zen/v1/models/gemini-3-pro:streamGenerateContent?alt=sse' url.split("/").pop()?.split(":")?.[1]?.startsWith("streamGenerateContent") ?? false, }) } diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 6ad71222..2820110d 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@mimo-ai/console-core", + "name": "@devora-ai/console-core", "version": "1.14.19", "private": true, "type": "module", @@ -8,8 +8,8 @@ "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", - "@mimo-ai/console-mail": "workspace:*", - "@mimo-ai/console-resource": "workspace:*", + "@devora-ai/console-mail": "workspace:*", + "@devora-ai/console-resource": "workspace:*", "@planetscale/database": "1.19.0", "aws4fetch": "1.0.20", "drizzle-orm": "catalog:", diff --git a/packages/console/core/script/reset-db.ts b/packages/console/core/script/reset-db.ts index 3b259026..c97d0de3 100644 --- a/packages/console/core/script/reset-db.ts +++ b/packages/console/core/script/reset-db.ts @@ -1,4 +1,4 @@ -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" import { Database } from "../src/drizzle/index.js" import { UserTable } from "../src/schema/user.sql.js" import { AccountTable } from "../src/schema/account.sql.js" diff --git a/packages/console/core/src/aws.ts b/packages/console/core/src/aws.ts index 2d91c150..e96dd59e 100644 --- a/packages/console/core/src/aws.ts +++ b/packages/console/core/src/aws.ts @@ -1,5 +1,5 @@ import { z } from "zod" -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" import { AwsClient } from "aws4fetch" import { fn } from "./util/fn" @@ -32,7 +32,7 @@ export namespace AWS { "Content-Type": "application/json", }, body: JSON.stringify({ - FromEmailAddress: `OpenCode Zen `, + FromEmailAddress: `Devora Zen `, Destination: { ToAddresses: [input.to], }, diff --git a/packages/console/core/src/billing.ts b/packages/console/core/src/billing.ts index 46ce4350..0e8b8380 100644 --- a/packages/console/core/src/billing.ts +++ b/packages/console/core/src/billing.ts @@ -12,7 +12,7 @@ import { import { Actor } from "./actor" import { fn } from "./util/fn" import { z } from "zod" -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" import { Identifier } from "./identifier" import { centsToMicroCents } from "./util/price" import { User } from "./user" @@ -20,7 +20,7 @@ import { BlackData } from "./black" import { LiteData } from "./lite" export namespace Billing { - export const ITEM_CREDIT_NAME = "opencode credits" + export const ITEM_CREDIT_NAME = "devora credits" export const ITEM_FEE_NAME = "processing fee" export const RELOAD_AMOUNT = 20 export const RELOAD_AMOUNT_MIN = 10 diff --git a/packages/console/core/src/black.ts b/packages/console/core/src/black.ts index 8480378b..5c75fe72 100644 --- a/packages/console/core/src/black.ts +++ b/packages/console/core/src/black.ts @@ -1,6 +1,6 @@ import { z } from "zod" import { fn } from "./util/fn" -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" import { BlackPlans } from "./schema/billing.sql" import { Subscription } from "./subscription" diff --git a/packages/console/core/src/drizzle/index.ts b/packages/console/core/src/drizzle/index.ts index 27c5e9c1..e476cd7f 100644 --- a/packages/console/core/src/drizzle/index.ts +++ b/packages/console/core/src/drizzle/index.ts @@ -1,5 +1,5 @@ import { drizzle } from "drizzle-orm/planetscale-serverless" -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" export * from "drizzle-orm" import { Client } from "@planetscale/database" diff --git a/packages/console/core/src/lite.ts b/packages/console/core/src/lite.ts index d01a8aa3..9e5ac2ae 100644 --- a/packages/console/core/src/lite.ts +++ b/packages/console/core/src/lite.ts @@ -1,6 +1,6 @@ import { z } from "zod" import { fn } from "./util/fn" -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" import { Subscription } from "./subscription" export namespace LiteData { diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts index 8332f863..53bb83a8 100644 --- a/packages/console/core/src/model.ts +++ b/packages/console/core/src/model.ts @@ -5,7 +5,7 @@ import { ModelTable } from "./schema/model.sql" import { Identifier } from "./identifier" import { fn } from "./util/fn" import { Actor } from "./actor" -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" export namespace ZenData { const FormatSchema = z.enum(["anthropic", "google", "openai", "oa-compat"]) diff --git a/packages/console/core/src/subscription.ts b/packages/console/core/src/subscription.ts index 4821ff43..1e65fe3c 100644 --- a/packages/console/core/src/subscription.ts +++ b/packages/console/core/src/subscription.ts @@ -2,7 +2,7 @@ import { z } from "zod" import { fn } from "./util/fn" import { centsToMicroCents } from "./util/price" import { getWeekBounds, getMonthlyBounds } from "./util/date" -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" export namespace Subscription { const LimitsSchema = z.object({ diff --git a/packages/console/core/src/user.ts b/packages/console/core/src/user.ts index a0170b53..6e20cde6 100644 --- a/packages/console/core/src/user.ts +++ b/packages/console/core/src/user.ts @@ -138,15 +138,15 @@ export namespace User { .then((rows) => rows[0]), ) - const { InviteEmail } = await import("@mimo-ai/console-mail/InviteEmail.jsx") + const { InviteEmail } = await import("@devora-ai/console-mail/InviteEmail.jsx") await AWS.sendEmail({ to: email, - subject: `You've been invited to join the ${emailInfo.workspaceName} workspace on OpenCode`, + subject: `You've been invited to join the ${emailInfo.workspaceName} workspace on Devora`, body: render( // @ts-ignore InviteEmail({ inviter: emailInfo.inviterEmail, - assetsUrl: `https://opencode.ai/email`, + assetsUrl: `https://devora.ai/email`, workspaceID: workspaceID, workspaceName: emailInfo.workspaceName, }), diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 7257e48f..6e8842d4 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,5 +1,5 @@ { - "name": "@mimo-ai/console-function", + "name": "@devora-ai/console-function", "version": "1.14.19", "$schema": "https://json.schemastore.org/package.json", "private": true, @@ -21,8 +21,8 @@ "@ai-sdk/openai": "3.0.48", "@ai-sdk/openai-compatible": "2.0.37", "@hono/zod-validator": "catalog:", - "@mimo-ai/console-core": "workspace:*", - "@mimo-ai/console-resource": "workspace:*", + "@devora-ai/console-core": "workspace:*", + "@devora-ai/console-resource": "workspace:*", "@openauthjs/openauth": "0.0.0-20250322224806", "ai": "catalog:", "hono": "catalog:", diff --git a/packages/console/function/src/auth.ts b/packages/console/function/src/auth.ts index 57d4b6ba..f83c80b9 100644 --- a/packages/console/function/src/auth.ts +++ b/packages/console/function/src/auth.ts @@ -7,16 +7,16 @@ import { THEME_OPENAUTH } from "@openauthjs/openauth/ui/theme" import { GithubProvider } from "@openauthjs/openauth/provider/github" import { GoogleOidcProvider } from "@openauthjs/openauth/provider/google" import { CloudflareStorage } from "@openauthjs/openauth/storage/cloudflare" -import { Account } from "@mimo-ai/console-core/account.js" -import { Workspace } from "@mimo-ai/console-core/workspace.js" -import { Actor } from "@mimo-ai/console-core/actor.js" -import { Resource } from "@mimo-ai/console-resource" -import { User } from "@mimo-ai/console-core/user.js" -import { and, Database, eq, isNull, or } from "@mimo-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@mimo-ai/console-core/schema/workspace.sql.js" -import { UserTable } from "@mimo-ai/console-core/schema/user.sql.js" -import { AuthTable } from "@mimo-ai/console-core/schema/auth.sql.js" -import { Identifier } from "@mimo-ai/console-core/identifier.js" +import { Account } from "@devora-ai/console-core/account.js" +import { Workspace } from "@devora-ai/console-core/workspace.js" +import { Actor } from "@devora-ai/console-core/actor.js" +import { Resource } from "@devora-ai/console-resource" +import { User } from "@devora-ai/console-core/user.js" +import { and, Database, eq, isNull, or } from "@devora-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@devora-ai/console-core/schema/workspace.sql.js" +import { UserTable } from "@devora-ai/console-core/schema/user.sql.js" +import { AuthTable } from "@devora-ai/console-core/schema/auth.sql.js" +import { Identifier } from "@devora-ai/console-core/identifier.js" type Env = { AuthStorage: KVNamespace @@ -35,7 +35,7 @@ export const subjects = createSubjects({ const MY_THEME: Theme = { ...THEME_OPENAUTH, - logo: "https://opencode.ai/favicon-v3.svg", + logo: "https://devora.ai/favicon-v3.svg", } export default { @@ -111,14 +111,14 @@ export default { const emails = (await fetch("https://api.github.com/user/emails", { headers: { Authorization: `Bearer ${response.tokenset.access}`, - "User-Agent": "opencode", + "User-Agent": "devora", Accept: "application/vnd.github+json", }, }).then((x) => x.json())) as any const user = (await fetch("https://api.github.com/user", { headers: { Authorization: `Bearer ${response.tokenset.access}`, - "User-Agent": "opencode", + "User-Agent": "devora", Accept: "application/vnd.github+json", }, }).then((x) => x.json())) as any @@ -137,7 +137,7 @@ export default { if (!email) throw new Error("No email found") if (!subject) throw new Error("No subject found") - if (Resource.App.stage !== "production" && !email.endsWith("@anoma.ly")) { + if (Resource.App.stage !== "production" && !email.endsWith("@devora.local")) { throw new Error("Invalid email") } diff --git a/packages/console/function/src/log-processor.ts b/packages/console/function/src/log-processor.ts index eb422bcd..609bee51 100644 --- a/packages/console/function/src/log-processor.ts +++ b/packages/console/function/src/log-processor.ts @@ -1,4 +1,4 @@ -import { Resource } from "@mimo-ai/console-resource" +import { Resource } from "@devora-ai/console-resource" import type { TraceItem } from "@cloudflare/workers-types" export default { diff --git a/packages/console/mail/emails/templates/InviteEmail.tsx b/packages/console/mail/emails/templates/InviteEmail.tsx index baf0d383..92cdba21 100644 --- a/packages/console/mail/emails/templates/InviteEmail.tsx +++ b/packages/console/mail/emails/templates/InviteEmail.tsx @@ -15,7 +15,7 @@ import { buttonText, } from "../styles" -const CONSOLE_URL = "https://opencode.ai/" +const CONSOLE_URL = "https://devora.ai/" interface InviteEmailProps { inviter: string @@ -24,7 +24,7 @@ interface InviteEmailProps { assetsUrl: string } export const InviteEmail = ({ - inviter = "test@anoma.ly", + inviter = "test@devora.local", workspaceID = "wrk_01K6XFY7V53T8XN0A7X8G9BTN3", workspaceName = "anomaly", assetsUrl = `${CONSOLE_URL}email`, @@ -34,7 +34,7 @@ export const InviteEmail = ({ return ( - {`OpenCode — ${messagePlain}`} + {`Devora — ${messagePlain}`} {messagePlain} @@ -44,16 +44,16 @@ export const InviteEmail = ({ - OpenCode Logo + Devora Logo
    - Join your team's OpenCode workspace + Join your team's Devora workspace You have been invited by {inviter} to join the{" "} - {workspaceName} workspace on OpenCode. + {workspaceName} workspace on Devora.
    diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index ee64ed34..b05a8328 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,5 +1,5 @@ { - "name": "@mimo-ai/console-mail", + "name": "@devora-ai/console-mail", "version": "1.14.19", "dependencies": { "@jsx-email/all": "2.2.3", diff --git a/packages/console/resource/package.json b/packages/console/resource/package.json index d08c11ea..551cd186 100644 --- a/packages/console/resource/package.json +++ b/packages/console/resource/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@mimo-ai/console-resource", + "name": "@devora-ai/console-resource", "license": "MIT", "dependencies": { "@cloudflare/workers-types": "catalog:" diff --git a/packages/containers/README.md b/packages/containers/README.md index a1cfe60d..d5fe2fea 100644 --- a/packages/containers/README.md +++ b/packages/containers/README.md @@ -15,8 +15,8 @@ Images Build ``` -REGISTRY=ghcr.io/anomalyco TAG=24.04 bun ./packages/containers/script/build.ts -REGISTRY=ghcr.io/anomalyco TAG=24.04 bun ./packages/containers/script/build.ts --push +REGISTRY=ghcr.io/sheriakhtamov TAG=24.04 bun ./packages/containers/script/build.ts +REGISTRY=ghcr.io/sheriakhtamov TAG=24.04 bun ./packages/containers/script/build.ts --push ``` Workflow usage @@ -26,7 +26,7 @@ jobs: build-cli: runs-on: ubuntu-latest container: - image: ghcr.io/anomalyco/build/bun-node:24.04 + image: ghcr.io/sheriakhtamov/build/bun-node:24.04 ``` Notes diff --git a/packages/containers/bun-node/Dockerfile b/packages/containers/bun-node/Dockerfile index 485375dd..28e37e9a 100644 --- a/packages/containers/bun-node/Dockerfile +++ b/packages/containers/bun-node/Dockerfile @@ -1,4 +1,4 @@ -ARG REGISTRY=ghcr.io/anomalyco +ARG REGISTRY=ghcr.io/sheriakhtamov FROM ${REGISTRY}/build/base:24.04 SHELL ["/bin/bash", "-lc"] diff --git a/packages/containers/publish/Dockerfile b/packages/containers/publish/Dockerfile index 4780d227..437b0df5 100644 --- a/packages/containers/publish/Dockerfile +++ b/packages/containers/publish/Dockerfile @@ -1,4 +1,4 @@ -ARG REGISTRY=ghcr.io/anomalyco +ARG REGISTRY=ghcr.io/sheriakhtamov FROM ${REGISTRY}/build/bun-node:24.04 ARG DEBIAN_FRONTEND=noninteractive diff --git a/packages/containers/rust/Dockerfile b/packages/containers/rust/Dockerfile index 533f348b..9b216fd9 100644 --- a/packages/containers/rust/Dockerfile +++ b/packages/containers/rust/Dockerfile @@ -1,4 +1,4 @@ -ARG REGISTRY=ghcr.io/anomalyco +ARG REGISTRY=ghcr.io/sheriakhtamov FROM ${REGISTRY}/build/bun-node:24.04 ARG RUST_TOOLCHAIN=stable diff --git a/packages/containers/script/build.ts b/packages/containers/script/build.ts index 6b880e7a..ac31e252 100644 --- a/packages/containers/script/build.ts +++ b/packages/containers/script/build.ts @@ -7,7 +7,7 @@ import { fileURLToPath } from "url" const rootDir = fileURLToPath(new URL("../../..", import.meta.url)) process.chdir(rootDir) -const reg = process.env.REGISTRY ?? "ghcr.io/anomalyco" +const reg = process.env.REGISTRY ?? "ghcr.io/sheriakhtamov" const tag = process.env.TAG ?? "24.04" const push = process.argv.includes("--push") || process.env.PUSH === "1" @@ -22,11 +22,11 @@ const images = ["base", "bun-node", "rust", "tauri-linux", "publish"] const setup = async () => { if (!push) return const list = await $`docker buildx ls`.text() - if (list.includes("opencode")) { - await $`docker buildx use opencode` + if (list.includes("devora")) { + await $`docker buildx use devora` return } - await $`docker buildx create --name opencode --use` + await $`docker buildx create --name devora --use` } await setup() diff --git a/packages/containers/tauri-linux/Dockerfile b/packages/containers/tauri-linux/Dockerfile index 9f67a280..e2335e5f 100644 --- a/packages/containers/tauri-linux/Dockerfile +++ b/packages/containers/tauri-linux/Dockerfile @@ -1,4 +1,4 @@ -ARG REGISTRY=ghcr.io/anomalyco +ARG REGISTRY=ghcr.io/sheriakhtamov FROM ${REGISTRY}/build/rust:24.04 ARG DEBIAN_FRONTEND=noninteractive diff --git a/packages/desktop/.gitignore b/packages/desktop/.gitignore index ac9d8db9..17c8ca4f 100644 --- a/packages/desktop/.gitignore +++ b/packages/desktop/.gitignore @@ -24,5 +24,5 @@ dist-ssr *.sw? out/ -resources/opencode-cli* +resources/devora-cli* resources/icons diff --git a/packages/desktop/README.md b/packages/desktop/README.md index 6dd9a202..bd205299 100644 --- a/packages/desktop/README.md +++ b/packages/desktop/README.md @@ -1,6 +1,6 @@ -# OpenCode Desktop +# Devora Desktop -The OpenCode Desktop app, built with Electron. +The Devora Desktop app, built with Electron. ## Development diff --git a/packages/desktop/electron-builder.config.ts b/packages/desktop/electron-builder.config.ts index 99e8c961..ab6b825b 100644 --- a/packages/desktop/electron-builder.config.ts +++ b/packages/desktop/electron-builder.config.ts @@ -21,13 +21,36 @@ async function signWindows(configuration: { path: string }) { } const channel = (() => { - const raw = process.env.OPENCODE_CHANNEL + const raw = process.env.DEVORA_CHANNEL if (raw === "dev" || raw === "beta" || raw === "prod") return raw return "dev" })() +const updateRepository = (() => { + const fallback = process.env.GITHUB_REPOSITORY?.split("/") + return { + owner: process.env.DEVORA_UPDATE_OWNER || fallback?.[0] || "SheriAkhtamov", + repo: process.env.DEVORA_UPDATE_REPO || fallback?.[1] || "Devora", + } +})() + +const macSigningEnabled = process.env.DEVORA_SIGN_MAC === "true" +const macNotarizeEnabled = + macSigningEnabled && + !!process.env.APPLE_ID && + !!process.env.APPLE_APP_SPECIFIC_PASSWORD && + !!process.env.APPLE_TEAM_ID + +const githubPublish = { + provider: "github" as const, + owner: updateRepository.owner, + repo: updateRepository.repo, + channel: "latest", + releaseType: "release", +} + const getBase = (): Configuration => ({ - artifactName: "opencode-desktop-${os}-${arch}.${ext}", + artifactName: "devora-desktop-${os}-${arch}.${ext}", directories: { output: "dist", buildResources: "resources", @@ -43,19 +66,20 @@ const getBase = (): Configuration => ({ mac: { category: "public.app-category.developer-tools", icon: `resources/icons/icon.icns`, - hardenedRuntime: true, + identity: macSigningEnabled ? undefined : null, + hardenedRuntime: macSigningEnabled, gatekeeperAssess: false, entitlements: "resources/entitlements.plist", entitlementsInherit: "resources/entitlements.plist", - notarize: true, + notarize: macNotarizeEnabled, target: ["dmg", "zip"], }, dmg: { - sign: true, + sign: macSigningEnabled, }, protocols: { - name: "OpenCode", - schemes: ["opencode"], + name: "Devora", + schemes: ["devora"], }, win: { icon: `resources/icons/icon.ico`, @@ -84,29 +108,29 @@ function getConfig() { case "dev": { return { ...base, - appId: "ai.opencode.desktop.dev", - productName: "OpenCode Dev", - rpm: { packageName: "opencode-dev" }, + appId: "io.github.sheriakhtamov.devora.dev", + productName: "Devora Dev", + rpm: { packageName: "devora-dev" }, } } case "beta": { return { ...base, - appId: "ai.opencode.desktop.beta", - productName: "OpenCode Beta", - protocols: { name: "OpenCode Beta", schemes: ["opencode"] }, - publish: { provider: "github", owner: "anomalyco", repo: "opencode-beta", channel: "latest" }, - rpm: { packageName: "opencode-beta" }, + appId: "io.github.sheriakhtamov.devora.beta", + productName: "Devora Beta", + protocols: { name: "Devora Beta", schemes: ["devora"] }, + publish: githubPublish, + rpm: { packageName: "devora-beta" }, } } case "prod": { return { ...base, - appId: "ai.opencode.desktop", - productName: "OpenCode", - protocols: { name: "OpenCode", schemes: ["opencode"] }, - publish: { provider: "github", owner: "anomalyco", repo: "opencode", channel: "latest" }, - rpm: { packageName: "opencode" }, + appId: "io.github.sheriakhtamov.devora", + productName: "Devora", + protocols: { name: "Devora", schemes: ["devora"] }, + publish: githubPublish, + rpm: { packageName: "devora" }, } } } diff --git a/packages/desktop/electron.vite.config.ts b/packages/desktop/electron.vite.config.ts index 4e9e8fc8..1a2ca073 100644 --- a/packages/desktop/electron.vite.config.ts +++ b/packages/desktop/electron.vite.config.ts @@ -1,21 +1,23 @@ import { defineConfig } from "electron-vite" -import appPlugin from "@mimo-ai/app/vite" +import appPlugin from "@devora-ai/app/vite" import * as fs from "node:fs/promises" const channel = (() => { - const raw = process.env.OPENCODE_CHANNEL + const raw = process.env.DEVORA_CHANNEL if (raw === "dev" || raw === "beta" || raw === "prod") return raw return "dev" })() -const OPENCODE_SERVER_DIST = "../opencode/dist/node" +const macSigningEnabled = process.env.DEVORA_SIGN_MAC === "true" +const DEVORA_SERVER_DIST = "../devora/dist/node" const nodePtyPkg = `@lydell/node-pty-${process.platform}-${process.arch}` export default defineConfig({ main: { define: { - "import.meta.env.OPENCODE_CHANNEL": JSON.stringify(channel), + "import.meta.env.DEVORA_CHANNEL": JSON.stringify(channel), + "import.meta.env.DEVORA_SIGN_MAC": JSON.stringify(macSigningEnabled ? "true" : "false"), }, build: { rollupOptions: { @@ -25,25 +27,25 @@ export default defineConfig({ }, plugins: [ { - name: "opencode:node-pty-narrower", + name: "devora:node-pty-narrower", enforce: "pre", resolveId(s) { if (s === "@lydell/node-pty") return nodePtyPkg }, }, { - name: "opencode:virtual-server-module", + name: "devora:virtual-server-module", enforce: "pre", resolveId(id) { - if (id === "virtual:opencode-server") return this.resolve(`${OPENCODE_SERVER_DIST}/node.js`) + if (id === "virtual:devora-server") return this.resolve(`${DEVORA_SERVER_DIST}/node.js`) }, }, { - name: "opencode:copy-server-assets", + name: "devora:copy-server-assets", async writeBundle() { - for (const l of await fs.readdir(OPENCODE_SERVER_DIST)) { + for (const l of await fs.readdir(DEVORA_SERVER_DIST)) { if (!l.endsWith(".wasm")) continue - await fs.writeFile(`./out/main/chunks/${l}`, await fs.readFile(`${OPENCODE_SERVER_DIST}/${l}`)) + await fs.writeFile(`./out/main/chunks/${l}`, await fs.readFile(`${DEVORA_SERVER_DIST}/${l}`)) } }, }, @@ -65,7 +67,7 @@ export default defineConfig({ publicDir: "../../../app/public", root: "src/renderer", define: { - "import.meta.env.VITE_OPENCODE_CHANNEL": JSON.stringify(channel), + "import.meta.env.VITE_DEVORA_CHANNEL": JSON.stringify(channel), }, build: { rollupOptions: { diff --git a/packages/desktop/icons/beta/128x128.png b/packages/desktop/icons/beta/128x128.png index 751e80f1..82820150 100644 Binary files a/packages/desktop/icons/beta/128x128.png and b/packages/desktop/icons/beta/128x128.png differ diff --git a/packages/desktop/icons/beta/128x128@2x.png b/packages/desktop/icons/beta/128x128@2x.png index fe330df4..c71b2e61 100644 Binary files a/packages/desktop/icons/beta/128x128@2x.png and b/packages/desktop/icons/beta/128x128@2x.png differ diff --git a/packages/desktop/icons/beta/32x32.png b/packages/desktop/icons/beta/32x32.png index 2703048e..82e8e9b7 100644 Binary files a/packages/desktop/icons/beta/32x32.png and b/packages/desktop/icons/beta/32x32.png differ diff --git a/packages/desktop/icons/beta/64x64.png b/packages/desktop/icons/beta/64x64.png index ecd7fe31..ce6f1d61 100644 Binary files a/packages/desktop/icons/beta/64x64.png and b/packages/desktop/icons/beta/64x64.png differ diff --git a/packages/desktop/icons/beta/Square107x107Logo.png b/packages/desktop/icons/beta/Square107x107Logo.png index e6ea73f4..68a2074c 100644 Binary files a/packages/desktop/icons/beta/Square107x107Logo.png and b/packages/desktop/icons/beta/Square107x107Logo.png differ diff --git a/packages/desktop/icons/beta/Square142x142Logo.png b/packages/desktop/icons/beta/Square142x142Logo.png index 74ae729c..e28d1f1b 100644 Binary files a/packages/desktop/icons/beta/Square142x142Logo.png and b/packages/desktop/icons/beta/Square142x142Logo.png differ diff --git a/packages/desktop/icons/beta/Square150x150Logo.png b/packages/desktop/icons/beta/Square150x150Logo.png index 0b109b8f..49cba0f8 100644 Binary files a/packages/desktop/icons/beta/Square150x150Logo.png and b/packages/desktop/icons/beta/Square150x150Logo.png differ diff --git a/packages/desktop/icons/beta/Square284x284Logo.png b/packages/desktop/icons/beta/Square284x284Logo.png index 0261ded4..0a622b71 100644 Binary files a/packages/desktop/icons/beta/Square284x284Logo.png and b/packages/desktop/icons/beta/Square284x284Logo.png differ diff --git a/packages/desktop/icons/beta/Square30x30Logo.png b/packages/desktop/icons/beta/Square30x30Logo.png index 34158f10..1021a270 100644 Binary files a/packages/desktop/icons/beta/Square30x30Logo.png and b/packages/desktop/icons/beta/Square30x30Logo.png differ diff --git a/packages/desktop/icons/beta/Square310x310Logo.png b/packages/desktop/icons/beta/Square310x310Logo.png index f18bfada..4524b5eb 100644 Binary files a/packages/desktop/icons/beta/Square310x310Logo.png and b/packages/desktop/icons/beta/Square310x310Logo.png differ diff --git a/packages/desktop/icons/beta/Square44x44Logo.png b/packages/desktop/icons/beta/Square44x44Logo.png index 6d1cc06c..30e64d55 100644 Binary files a/packages/desktop/icons/beta/Square44x44Logo.png and b/packages/desktop/icons/beta/Square44x44Logo.png differ diff --git a/packages/desktop/icons/beta/Square71x71Logo.png b/packages/desktop/icons/beta/Square71x71Logo.png index a26084dc..33fd3f0f 100644 Binary files a/packages/desktop/icons/beta/Square71x71Logo.png and b/packages/desktop/icons/beta/Square71x71Logo.png differ diff --git a/packages/desktop/icons/beta/Square89x89Logo.png b/packages/desktop/icons/beta/Square89x89Logo.png index 58b0eb60..eb5c58c5 100644 Binary files a/packages/desktop/icons/beta/Square89x89Logo.png and b/packages/desktop/icons/beta/Square89x89Logo.png differ diff --git a/packages/desktop/icons/beta/StoreLogo.png b/packages/desktop/icons/beta/StoreLogo.png index 648fd211..931e60a0 100644 Binary files a/packages/desktop/icons/beta/StoreLogo.png and b/packages/desktop/icons/beta/StoreLogo.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher.png b/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher.png index 39d1dd0d..d1bfb573 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher.png and b/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher_foreground.png b/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher_foreground.png index 84908e71..c943af92 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher_foreground.png and b/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher_round.png b/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher_round.png index a6b8cb61..d1bfb573 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher_round.png and b/packages/desktop/icons/beta/android/mipmap-hdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher.png b/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher.png index 6522e0fb..f86b3244 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher.png and b/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher_foreground.png b/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher_foreground.png index b3449bd4..2c3bf7b8 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher_foreground.png and b/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher_round.png b/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher_round.png index 7aa97d82..f86b3244 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher_round.png and b/packages/desktop/icons/beta/android/mipmap-mdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher.png b/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher.png index 82bc9d22..70a24622 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher.png and b/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher_foreground.png b/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher_foreground.png index 6b031ce8..6806ec68 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher_round.png b/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher_round.png index 34859de5..70a24622 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher_round.png and b/packages/desktop/icons/beta/android/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher.png b/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher.png index 4cdb71d6..6b11d858 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher.png and b/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher_foreground.png b/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher_foreground.png index a64be6ad..d6cb9463 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher_round.png b/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher_round.png index 2de3c273..6b11d858 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher_round.png and b/packages/desktop/icons/beta/android/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher.png b/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher.png index 0ead2886..09fdbdb6 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher.png and b/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher_foreground.png index bdd17482..2c2fd286 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher_round.png b/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher_round.png index 69f74758..09fdbdb6 100644 Binary files a/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher_round.png and b/packages/desktop/icons/beta/android/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/beta/dock.png b/packages/desktop/icons/beta/dock.png index f274ef64..c71b2e61 100644 Binary files a/packages/desktop/icons/beta/dock.png and b/packages/desktop/icons/beta/dock.png differ diff --git a/packages/desktop/icons/beta/icon.icns b/packages/desktop/icons/beta/icon.icns index f98de5da..e5724e5f 100644 Binary files a/packages/desktop/icons/beta/icon.icns and b/packages/desktop/icons/beta/icon.icns differ diff --git a/packages/desktop/icons/beta/icon.ico b/packages/desktop/icons/beta/icon.ico index df8588c8..5c0a6ca4 100644 Binary files a/packages/desktop/icons/beta/icon.ico and b/packages/desktop/icons/beta/icon.ico differ diff --git a/packages/desktop/icons/beta/icon.png b/packages/desktop/icons/beta/icon.png index 53130495..ea4389b5 100644 Binary files a/packages/desktop/icons/beta/icon.png and b/packages/desktop/icons/beta/icon.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-20x20@1x.png b/packages/desktop/icons/beta/ios/AppIcon-20x20@1x.png index e8ebb28e..c8a1be42 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-20x20@1x.png and b/packages/desktop/icons/beta/ios/AppIcon-20x20@1x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-20x20@2x-1.png b/packages/desktop/icons/beta/ios/AppIcon-20x20@2x-1.png index 50c8015d..5c193ace 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-20x20@2x-1.png and b/packages/desktop/icons/beta/ios/AppIcon-20x20@2x-1.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-20x20@2x.png b/packages/desktop/icons/beta/ios/AppIcon-20x20@2x.png index 50c8015d..5c193ace 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-20x20@2x.png and b/packages/desktop/icons/beta/ios/AppIcon-20x20@2x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-20x20@3x.png b/packages/desktop/icons/beta/ios/AppIcon-20x20@3x.png index 6e290dbc..6473aa45 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-20x20@3x.png and b/packages/desktop/icons/beta/ios/AppIcon-20x20@3x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-29x29@1x.png b/packages/desktop/icons/beta/ios/AppIcon-29x29@1x.png index 4ef554b4..7f569dbe 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-29x29@1x.png and b/packages/desktop/icons/beta/ios/AppIcon-29x29@1x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-29x29@2x-1.png b/packages/desktop/icons/beta/ios/AppIcon-29x29@2x-1.png index b9ddfd47..18dd45dc 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-29x29@2x-1.png and b/packages/desktop/icons/beta/ios/AppIcon-29x29@2x-1.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-29x29@2x.png b/packages/desktop/icons/beta/ios/AppIcon-29x29@2x.png index b9ddfd47..18dd45dc 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-29x29@2x.png and b/packages/desktop/icons/beta/ios/AppIcon-29x29@2x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-29x29@3x.png b/packages/desktop/icons/beta/ios/AppIcon-29x29@3x.png index 052322d6..8f0e6271 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-29x29@3x.png and b/packages/desktop/icons/beta/ios/AppIcon-29x29@3x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-40x40@1x.png b/packages/desktop/icons/beta/ios/AppIcon-40x40@1x.png index 50c8015d..5c193ace 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-40x40@1x.png and b/packages/desktop/icons/beta/ios/AppIcon-40x40@1x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-40x40@2x-1.png b/packages/desktop/icons/beta/ios/AppIcon-40x40@2x-1.png index 9317b250..2f1ad75e 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-40x40@2x-1.png and b/packages/desktop/icons/beta/ios/AppIcon-40x40@2x-1.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-40x40@2x.png b/packages/desktop/icons/beta/ios/AppIcon-40x40@2x.png index 9317b250..2f1ad75e 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-40x40@2x.png and b/packages/desktop/icons/beta/ios/AppIcon-40x40@2x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-40x40@3x.png b/packages/desktop/icons/beta/ios/AppIcon-40x40@3x.png index 6b921a17..fe0bf505 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-40x40@3x.png and b/packages/desktop/icons/beta/ios/AppIcon-40x40@3x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-512@2x.png b/packages/desktop/icons/beta/ios/AppIcon-512@2x.png index b83131d6..80c777fe 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-512@2x.png and b/packages/desktop/icons/beta/ios/AppIcon-512@2x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-60x60@2x.png b/packages/desktop/icons/beta/ios/AppIcon-60x60@2x.png index 6b921a17..fe0bf505 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-60x60@2x.png and b/packages/desktop/icons/beta/ios/AppIcon-60x60@2x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-60x60@3x.png b/packages/desktop/icons/beta/ios/AppIcon-60x60@3x.png index 68500499..0e83c6a7 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-60x60@3x.png and b/packages/desktop/icons/beta/ios/AppIcon-60x60@3x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-76x76@1x.png b/packages/desktop/icons/beta/ios/AppIcon-76x76@1x.png index 1ffceb75..e63e6f4d 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-76x76@1x.png and b/packages/desktop/icons/beta/ios/AppIcon-76x76@1x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-76x76@2x.png b/packages/desktop/icons/beta/ios/AppIcon-76x76@2x.png index 81c4178c..729e1c59 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-76x76@2x.png and b/packages/desktop/icons/beta/ios/AppIcon-76x76@2x.png differ diff --git a/packages/desktop/icons/beta/ios/AppIcon-83.5x83.5@2x.png b/packages/desktop/icons/beta/ios/AppIcon-83.5x83.5@2x.png index d5453adf..d95c80ad 100644 Binary files a/packages/desktop/icons/beta/ios/AppIcon-83.5x83.5@2x.png and b/packages/desktop/icons/beta/ios/AppIcon-83.5x83.5@2x.png differ diff --git a/packages/desktop/icons/dev/128x128.png b/packages/desktop/icons/dev/128x128.png index d7fc4db1..82820150 100644 Binary files a/packages/desktop/icons/dev/128x128.png and b/packages/desktop/icons/dev/128x128.png differ diff --git a/packages/desktop/icons/dev/128x128@2x.png b/packages/desktop/icons/dev/128x128@2x.png index 59188230..c71b2e61 100644 Binary files a/packages/desktop/icons/dev/128x128@2x.png and b/packages/desktop/icons/dev/128x128@2x.png differ diff --git a/packages/desktop/icons/dev/32x32.png b/packages/desktop/icons/dev/32x32.png index 53925cc4..82e8e9b7 100644 Binary files a/packages/desktop/icons/dev/32x32.png and b/packages/desktop/icons/dev/32x32.png differ diff --git a/packages/desktop/icons/dev/64x64.png b/packages/desktop/icons/dev/64x64.png index a88ef15c..ce6f1d61 100644 Binary files a/packages/desktop/icons/dev/64x64.png and b/packages/desktop/icons/dev/64x64.png differ diff --git a/packages/desktop/icons/dev/Square107x107Logo.png b/packages/desktop/icons/dev/Square107x107Logo.png index 0de29ec8..68a2074c 100644 Binary files a/packages/desktop/icons/dev/Square107x107Logo.png and b/packages/desktop/icons/dev/Square107x107Logo.png differ diff --git a/packages/desktop/icons/dev/Square142x142Logo.png b/packages/desktop/icons/dev/Square142x142Logo.png index af62e8e1..e28d1f1b 100644 Binary files a/packages/desktop/icons/dev/Square142x142Logo.png and b/packages/desktop/icons/dev/Square142x142Logo.png differ diff --git a/packages/desktop/icons/dev/Square150x150Logo.png b/packages/desktop/icons/dev/Square150x150Logo.png index 2b19dc39..49cba0f8 100644 Binary files a/packages/desktop/icons/dev/Square150x150Logo.png and b/packages/desktop/icons/dev/Square150x150Logo.png differ diff --git a/packages/desktop/icons/dev/Square284x284Logo.png b/packages/desktop/icons/dev/Square284x284Logo.png index eda6d990..0a622b71 100644 Binary files a/packages/desktop/icons/dev/Square284x284Logo.png and b/packages/desktop/icons/dev/Square284x284Logo.png differ diff --git a/packages/desktop/icons/dev/Square30x30Logo.png b/packages/desktop/icons/dev/Square30x30Logo.png index dad821ba..1021a270 100644 Binary files a/packages/desktop/icons/dev/Square30x30Logo.png and b/packages/desktop/icons/dev/Square30x30Logo.png differ diff --git a/packages/desktop/icons/dev/Square310x310Logo.png b/packages/desktop/icons/dev/Square310x310Logo.png index 555b3b19..4524b5eb 100644 Binary files a/packages/desktop/icons/dev/Square310x310Logo.png and b/packages/desktop/icons/dev/Square310x310Logo.png differ diff --git a/packages/desktop/icons/dev/Square44x44Logo.png b/packages/desktop/icons/dev/Square44x44Logo.png index 9f8ad001..30e64d55 100644 Binary files a/packages/desktop/icons/dev/Square44x44Logo.png and b/packages/desktop/icons/dev/Square44x44Logo.png differ diff --git a/packages/desktop/icons/dev/Square71x71Logo.png b/packages/desktop/icons/dev/Square71x71Logo.png index 43feb784..33fd3f0f 100644 Binary files a/packages/desktop/icons/dev/Square71x71Logo.png and b/packages/desktop/icons/dev/Square71x71Logo.png differ diff --git a/packages/desktop/icons/dev/Square89x89Logo.png b/packages/desktop/icons/dev/Square89x89Logo.png index 628cc597..eb5c58c5 100644 Binary files a/packages/desktop/icons/dev/Square89x89Logo.png and b/packages/desktop/icons/dev/Square89x89Logo.png differ diff --git a/packages/desktop/icons/dev/StoreLogo.png b/packages/desktop/icons/dev/StoreLogo.png index 8d3aa53c..931e60a0 100644 Binary files a/packages/desktop/icons/dev/StoreLogo.png and b/packages/desktop/icons/dev/StoreLogo.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher.png b/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher.png index b355e37f..d1bfb573 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher.png and b/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher_foreground.png b/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher_foreground.png index c33f8713..c943af92 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher_foreground.png and b/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher_round.png b/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher_round.png index 04e37aa6..d1bfb573 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher_round.png and b/packages/desktop/icons/dev/android/mipmap-hdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher.png b/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher.png index 98e53cd2..f86b3244 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher.png and b/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher_foreground.png b/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher_foreground.png index 40fe6e37..2c3bf7b8 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher_foreground.png and b/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher_round.png b/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher_round.png index 4814f1dd..f86b3244 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher_round.png and b/packages/desktop/icons/dev/android/mipmap-mdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher.png b/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher.png index 60849328..70a24622 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher.png and b/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher_foreground.png b/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher_foreground.png index 898066a3..6806ec68 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher_round.png b/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher_round.png index 64035c0f..70a24622 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher_round.png and b/packages/desktop/icons/dev/android/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher.png b/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher.png index f47691bf..6b11d858 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher.png and b/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher_foreground.png b/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher_foreground.png index dba6f563..d6cb9463 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher_round.png b/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher_round.png index 76470260..6b11d858 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher_round.png and b/packages/desktop/icons/dev/android/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher.png b/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher.png index 2e8430a6..09fdbdb6 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher.png and b/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher_foreground.png index db953d12..2c2fd286 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher_round.png b/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher_round.png index d5c9ba6a..09fdbdb6 100644 Binary files a/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher_round.png and b/packages/desktop/icons/dev/android/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/dev/dock.png b/packages/desktop/icons/dev/dock.png index 4953d553..c71b2e61 100644 Binary files a/packages/desktop/icons/dev/dock.png and b/packages/desktop/icons/dev/dock.png differ diff --git a/packages/desktop/icons/dev/icon.icns b/packages/desktop/icons/dev/icon.icns index d73a9490..e5724e5f 100644 Binary files a/packages/desktop/icons/dev/icon.icns and b/packages/desktop/icons/dev/icon.icns differ diff --git a/packages/desktop/icons/dev/icon.ico b/packages/desktop/icons/dev/icon.ico index bec385d9..5c0a6ca4 100644 Binary files a/packages/desktop/icons/dev/icon.ico and b/packages/desktop/icons/dev/icon.ico differ diff --git a/packages/desktop/icons/dev/icon.png b/packages/desktop/icons/dev/icon.png index 6de37ea2..ea4389b5 100644 Binary files a/packages/desktop/icons/dev/icon.png and b/packages/desktop/icons/dev/icon.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-20x20@1x.png b/packages/desktop/icons/dev/ios/AppIcon-20x20@1x.png index 0e823043..c8a1be42 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-20x20@1x.png and b/packages/desktop/icons/dev/ios/AppIcon-20x20@1x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-20x20@2x-1.png b/packages/desktop/icons/dev/ios/AppIcon-20x20@2x-1.png index 54e4b2aa..5c193ace 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-20x20@2x-1.png and b/packages/desktop/icons/dev/ios/AppIcon-20x20@2x-1.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-20x20@2x.png b/packages/desktop/icons/dev/ios/AppIcon-20x20@2x.png index 54e4b2aa..5c193ace 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-20x20@2x.png and b/packages/desktop/icons/dev/ios/AppIcon-20x20@2x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-20x20@3x.png b/packages/desktop/icons/dev/ios/AppIcon-20x20@3x.png index 645b0156..6473aa45 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-20x20@3x.png and b/packages/desktop/icons/dev/ios/AppIcon-20x20@3x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-29x29@1x.png b/packages/desktop/icons/dev/ios/AppIcon-29x29@1x.png index 054225c6..7f569dbe 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-29x29@1x.png and b/packages/desktop/icons/dev/ios/AppIcon-29x29@1x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-29x29@2x-1.png b/packages/desktop/icons/dev/ios/AppIcon-29x29@2x-1.png index 0b1b2e0b..18dd45dc 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-29x29@2x-1.png and b/packages/desktop/icons/dev/ios/AppIcon-29x29@2x-1.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-29x29@2x.png b/packages/desktop/icons/dev/ios/AppIcon-29x29@2x.png index 0b1b2e0b..18dd45dc 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-29x29@2x.png and b/packages/desktop/icons/dev/ios/AppIcon-29x29@2x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-29x29@3x.png b/packages/desktop/icons/dev/ios/AppIcon-29x29@3x.png index d2c42592..8f0e6271 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-29x29@3x.png and b/packages/desktop/icons/dev/ios/AppIcon-29x29@3x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-40x40@1x.png b/packages/desktop/icons/dev/ios/AppIcon-40x40@1x.png index 54e4b2aa..5c193ace 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-40x40@1x.png and b/packages/desktop/icons/dev/ios/AppIcon-40x40@1x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-40x40@2x-1.png b/packages/desktop/icons/dev/ios/AppIcon-40x40@2x-1.png index 471ed2ee..2f1ad75e 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-40x40@2x-1.png and b/packages/desktop/icons/dev/ios/AppIcon-40x40@2x-1.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-40x40@2x.png b/packages/desktop/icons/dev/ios/AppIcon-40x40@2x.png index 471ed2ee..2f1ad75e 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-40x40@2x.png and b/packages/desktop/icons/dev/ios/AppIcon-40x40@2x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-40x40@3x.png b/packages/desktop/icons/dev/ios/AppIcon-40x40@3x.png index 1a490cbf..fe0bf505 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-40x40@3x.png and b/packages/desktop/icons/dev/ios/AppIcon-40x40@3x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-512@2x.png b/packages/desktop/icons/dev/ios/AppIcon-512@2x.png index f53b404e..80c777fe 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-512@2x.png and b/packages/desktop/icons/dev/ios/AppIcon-512@2x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-60x60@2x.png b/packages/desktop/icons/dev/ios/AppIcon-60x60@2x.png index 1a490cbf..fe0bf505 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-60x60@2x.png and b/packages/desktop/icons/dev/ios/AppIcon-60x60@2x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-60x60@3x.png b/packages/desktop/icons/dev/ios/AppIcon-60x60@3x.png index bdc759ee..0e83c6a7 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-60x60@3x.png and b/packages/desktop/icons/dev/ios/AppIcon-60x60@3x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-76x76@1x.png b/packages/desktop/icons/dev/ios/AppIcon-76x76@1x.png index d22096a2..e63e6f4d 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-76x76@1x.png and b/packages/desktop/icons/dev/ios/AppIcon-76x76@1x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-76x76@2x.png b/packages/desktop/icons/dev/ios/AppIcon-76x76@2x.png index d675773d..729e1c59 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-76x76@2x.png and b/packages/desktop/icons/dev/ios/AppIcon-76x76@2x.png differ diff --git a/packages/desktop/icons/dev/ios/AppIcon-83.5x83.5@2x.png b/packages/desktop/icons/dev/ios/AppIcon-83.5x83.5@2x.png index 31698afc..d95c80ad 100644 Binary files a/packages/desktop/icons/dev/ios/AppIcon-83.5x83.5@2x.png and b/packages/desktop/icons/dev/ios/AppIcon-83.5x83.5@2x.png differ diff --git a/packages/desktop/icons/prod/128x128.png b/packages/desktop/icons/prod/128x128.png index caf7b02e..82820150 100644 Binary files a/packages/desktop/icons/prod/128x128.png and b/packages/desktop/icons/prod/128x128.png differ diff --git a/packages/desktop/icons/prod/128x128@2x.png b/packages/desktop/icons/prod/128x128@2x.png index 47fe4c61..c71b2e61 100644 Binary files a/packages/desktop/icons/prod/128x128@2x.png and b/packages/desktop/icons/prod/128x128@2x.png differ diff --git a/packages/desktop/icons/prod/32x32.png b/packages/desktop/icons/prod/32x32.png index 5868bcc9..82e8e9b7 100644 Binary files a/packages/desktop/icons/prod/32x32.png and b/packages/desktop/icons/prod/32x32.png differ diff --git a/packages/desktop/icons/prod/64x64.png b/packages/desktop/icons/prod/64x64.png index 1ed7425d..ce6f1d61 100644 Binary files a/packages/desktop/icons/prod/64x64.png and b/packages/desktop/icons/prod/64x64.png differ diff --git a/packages/desktop/icons/prod/Square107x107Logo.png b/packages/desktop/icons/prod/Square107x107Logo.png index 1db249bf..68a2074c 100644 Binary files a/packages/desktop/icons/prod/Square107x107Logo.png and b/packages/desktop/icons/prod/Square107x107Logo.png differ diff --git a/packages/desktop/icons/prod/Square142x142Logo.png b/packages/desktop/icons/prod/Square142x142Logo.png index 1961c340..e28d1f1b 100644 Binary files a/packages/desktop/icons/prod/Square142x142Logo.png and b/packages/desktop/icons/prod/Square142x142Logo.png differ diff --git a/packages/desktop/icons/prod/Square150x150Logo.png b/packages/desktop/icons/prod/Square150x150Logo.png index abc50734..49cba0f8 100644 Binary files a/packages/desktop/icons/prod/Square150x150Logo.png and b/packages/desktop/icons/prod/Square150x150Logo.png differ diff --git a/packages/desktop/icons/prod/Square284x284Logo.png b/packages/desktop/icons/prod/Square284x284Logo.png index 51e2a1b9..0a622b71 100644 Binary files a/packages/desktop/icons/prod/Square284x284Logo.png and b/packages/desktop/icons/prod/Square284x284Logo.png differ diff --git a/packages/desktop/icons/prod/Square30x30Logo.png b/packages/desktop/icons/prod/Square30x30Logo.png index 066a1fd0..1021a270 100644 Binary files a/packages/desktop/icons/prod/Square30x30Logo.png and b/packages/desktop/icons/prod/Square30x30Logo.png differ diff --git a/packages/desktop/icons/prod/Square310x310Logo.png b/packages/desktop/icons/prod/Square310x310Logo.png index 2a85c8e9..4524b5eb 100644 Binary files a/packages/desktop/icons/prod/Square310x310Logo.png and b/packages/desktop/icons/prod/Square310x310Logo.png differ diff --git a/packages/desktop/icons/prod/Square44x44Logo.png b/packages/desktop/icons/prod/Square44x44Logo.png index c855b806..30e64d55 100644 Binary files a/packages/desktop/icons/prod/Square44x44Logo.png and b/packages/desktop/icons/prod/Square44x44Logo.png differ diff --git a/packages/desktop/icons/prod/Square71x71Logo.png b/packages/desktop/icons/prod/Square71x71Logo.png index c8168f71..33fd3f0f 100644 Binary files a/packages/desktop/icons/prod/Square71x71Logo.png and b/packages/desktop/icons/prod/Square71x71Logo.png differ diff --git a/packages/desktop/icons/prod/Square89x89Logo.png b/packages/desktop/icons/prod/Square89x89Logo.png index 19ec1777..eb5c58c5 100644 Binary files a/packages/desktop/icons/prod/Square89x89Logo.png and b/packages/desktop/icons/prod/Square89x89Logo.png differ diff --git a/packages/desktop/icons/prod/StoreLogo.png b/packages/desktop/icons/prod/StoreLogo.png index 3fd053d3..931e60a0 100644 Binary files a/packages/desktop/icons/prod/StoreLogo.png and b/packages/desktop/icons/prod/StoreLogo.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher.png b/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher.png index 4f3ea0e3..d1bfb573 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher.png and b/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher_foreground.png b/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher_foreground.png index 7db80699..c943af92 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher_foreground.png and b/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher_round.png b/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher_round.png index a54ebe65..d1bfb573 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher_round.png and b/packages/desktop/icons/prod/android/mipmap-hdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher.png b/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher.png index 9337ccfa..f86b3244 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher.png and b/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher_foreground.png b/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher_foreground.png index 0bfc1082..2c3bf7b8 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher_foreground.png and b/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher_round.png b/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher_round.png index 5b02ec73..f86b3244 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher_round.png and b/packages/desktop/icons/prod/android/mipmap-mdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher.png b/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher.png index 322aeaea..70a24622 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher.png and b/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher_foreground.png b/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher_foreground.png index ca1e336c..6806ec68 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher_round.png b/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher_round.png index f7111079..70a24622 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher_round.png and b/packages/desktop/icons/prod/android/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher.png b/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher.png index 287a6b50..6b11d858 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher.png and b/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher_foreground.png b/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher_foreground.png index 9d3d06a8..d6cb9463 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher_round.png b/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher_round.png index d4b6fde1..6b11d858 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher_round.png and b/packages/desktop/icons/prod/android/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher.png b/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher.png index bde8d759..09fdbdb6 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher.png and b/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher_foreground.png index 03df7809..2c2fd286 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher_foreground.png and b/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher_round.png b/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher_round.png index 62363be0..09fdbdb6 100644 Binary files a/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher_round.png and b/packages/desktop/icons/prod/android/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/packages/desktop/icons/prod/dock.png b/packages/desktop/icons/prod/dock.png index f2ab694e..c71b2e61 100644 Binary files a/packages/desktop/icons/prod/dock.png and b/packages/desktop/icons/prod/dock.png differ diff --git a/packages/desktop/icons/prod/icon.icns b/packages/desktop/icons/prod/icon.icns index be910ad5..e5724e5f 100644 Binary files a/packages/desktop/icons/prod/icon.icns and b/packages/desktop/icons/prod/icon.icns differ diff --git a/packages/desktop/icons/prod/icon.ico b/packages/desktop/icons/prod/icon.ico index ff88d21e..5c0a6ca4 100644 Binary files a/packages/desktop/icons/prod/icon.ico and b/packages/desktop/icons/prod/icon.ico differ diff --git a/packages/desktop/icons/prod/icon.png b/packages/desktop/icons/prod/icon.png index 0ecbb6d5..ea4389b5 100644 Binary files a/packages/desktop/icons/prod/icon.png and b/packages/desktop/icons/prod/icon.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-20x20@1x.png b/packages/desktop/icons/prod/ios/AppIcon-20x20@1x.png index eb137e16..c8a1be42 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-20x20@1x.png and b/packages/desktop/icons/prod/ios/AppIcon-20x20@1x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-20x20@2x-1.png b/packages/desktop/icons/prod/ios/AppIcon-20x20@2x-1.png index aa76ab10..5c193ace 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-20x20@2x-1.png and b/packages/desktop/icons/prod/ios/AppIcon-20x20@2x-1.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-20x20@2x.png b/packages/desktop/icons/prod/ios/AppIcon-20x20@2x.png index aa76ab10..5c193ace 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-20x20@2x.png and b/packages/desktop/icons/prod/ios/AppIcon-20x20@2x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-20x20@3x.png b/packages/desktop/icons/prod/ios/AppIcon-20x20@3x.png index c58ea3d4..6473aa45 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-20x20@3x.png and b/packages/desktop/icons/prod/ios/AppIcon-20x20@3x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-29x29@1x.png b/packages/desktop/icons/prod/ios/AppIcon-29x29@1x.png index 0eeb4d9b..7f569dbe 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-29x29@1x.png and b/packages/desktop/icons/prod/ios/AppIcon-29x29@1x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-29x29@2x-1.png b/packages/desktop/icons/prod/ios/AppIcon-29x29@2x-1.png index 32601c70..18dd45dc 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-29x29@2x-1.png and b/packages/desktop/icons/prod/ios/AppIcon-29x29@2x-1.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-29x29@2x.png b/packages/desktop/icons/prod/ios/AppIcon-29x29@2x.png index 32601c70..18dd45dc 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-29x29@2x.png and b/packages/desktop/icons/prod/ios/AppIcon-29x29@2x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-29x29@3x.png b/packages/desktop/icons/prod/ios/AppIcon-29x29@3x.png index a372c4a1..8f0e6271 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-29x29@3x.png and b/packages/desktop/icons/prod/ios/AppIcon-29x29@3x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-40x40@1x.png b/packages/desktop/icons/prod/ios/AppIcon-40x40@1x.png index aa76ab10..5c193ace 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-40x40@1x.png and b/packages/desktop/icons/prod/ios/AppIcon-40x40@1x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-40x40@2x-1.png b/packages/desktop/icons/prod/ios/AppIcon-40x40@2x-1.png index e82ce276..2f1ad75e 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-40x40@2x-1.png and b/packages/desktop/icons/prod/ios/AppIcon-40x40@2x-1.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-40x40@2x.png b/packages/desktop/icons/prod/ios/AppIcon-40x40@2x.png index e82ce276..2f1ad75e 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-40x40@2x.png and b/packages/desktop/icons/prod/ios/AppIcon-40x40@2x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-40x40@3x.png b/packages/desktop/icons/prod/ios/AppIcon-40x40@3x.png index 15ad5936..fe0bf505 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-40x40@3x.png and b/packages/desktop/icons/prod/ios/AppIcon-40x40@3x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-512@2x.png b/packages/desktop/icons/prod/ios/AppIcon-512@2x.png index 2260671c..80c777fe 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-512@2x.png and b/packages/desktop/icons/prod/ios/AppIcon-512@2x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-60x60@2x.png b/packages/desktop/icons/prod/ios/AppIcon-60x60@2x.png index 15ad5936..fe0bf505 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-60x60@2x.png and b/packages/desktop/icons/prod/ios/AppIcon-60x60@2x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-60x60@3x.png b/packages/desktop/icons/prod/ios/AppIcon-60x60@3x.png index 5c66bd3b..0e83c6a7 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-60x60@3x.png and b/packages/desktop/icons/prod/ios/AppIcon-60x60@3x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-76x76@1x.png b/packages/desktop/icons/prod/ios/AppIcon-76x76@1x.png index a5b05f3b..e63e6f4d 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-76x76@1x.png and b/packages/desktop/icons/prod/ios/AppIcon-76x76@1x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-76x76@2x.png b/packages/desktop/icons/prod/ios/AppIcon-76x76@2x.png index 9c0615d4..729e1c59 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-76x76@2x.png and b/packages/desktop/icons/prod/ios/AppIcon-76x76@2x.png differ diff --git a/packages/desktop/icons/prod/ios/AppIcon-83.5x83.5@2x.png b/packages/desktop/icons/prod/ios/AppIcon-83.5x83.5@2x.png index 6b792b36..d95c80ad 100644 Binary files a/packages/desktop/icons/prod/ios/AppIcon-83.5x83.5@2x.png and b/packages/desktop/icons/prod/ios/AppIcon-83.5x83.5@2x.png differ diff --git a/packages/desktop/package.json b/packages/desktop/package.json index df5b9352..3ad7d8d8 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,13 +1,12 @@ { - "name": "@mimo-ai/desktop", + "name": "@devora-ai/desktop", "private": true, - "version": "0.1.0", + "version": "0.1.1", "type": "module", "license": "MIT", - "homepage": "https://opencode.ai", + "homepage": "https://github.com/SheriAkhtamov/Devora", "author": { - "name": "OpenCode", - "email": "hello@opencode.ai" + "name": "SheriAkhtamov" }, "scripts": { "typecheck": "tsgo -b", @@ -31,13 +30,14 @@ "electron-updater": "^6", "electron-window-state": "^5.0.3", "drizzle-orm": "catalog:", - "marked": "^15" + "marked": "^15", + "@parcel/watcher": "2.5.1" }, "devDependencies": { "@actions/artifact": "4.0.0", "@lydell/node-pty": "catalog:", - "@mimo-ai/app": "workspace:*", - "@mimo-ai/ui": "workspace:*", + "@devora-ai/app": "workspace:*", + "@devora-ai/ui": "workspace:*", "@solid-primitives/i18n": "2.2.1", "@solid-primitives/storage": "catalog:", "@solidjs/meta": "catalog:", @@ -61,6 +61,14 @@ "@lydell/node-pty-linux-arm64": "1.2.0-beta.10", "@lydell/node-pty-linux-x64": "1.2.0-beta.10", "@lydell/node-pty-win32-arm64": "1.2.0-beta.10", - "@lydell/node-pty-win32-x64": "1.2.0-beta.10" + "@lydell/node-pty-win32-x64": "1.2.0-beta.10", + "@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" } } diff --git a/packages/desktop/scripts/finalize-latest-json.ts b/packages/desktop/scripts/finalize-latest-json.ts index cb0f26b9..36a7193a 100644 --- a/packages/desktop/scripts/finalize-latest-json.ts +++ b/packages/desktop/scripts/finalize-latest-json.ts @@ -16,11 +16,11 @@ const dryRun = values["dry-run"] const repo = process.env.GH_REPO if (!repo) throw new Error("GH_REPO is required") -const releaseId = process.env.OPENCODE_RELEASE -if (!releaseId) throw new Error("OPENCODE_RELEASE is required") +const releaseId = process.env.DEVORA_RELEASE +if (!releaseId) throw new Error("DEVORA_RELEASE is required") -const version = process.env.OPENCODE_VERSION -if (!version) throw new Error("OPENCODE_VERSION is required") +const version = process.env.DEVORA_VERSION +if (!version) throw new Error("DEVORA_VERSION is required") const dir = process.env.LATEST_YML_DIR if (!dir) throw new Error("LATEST_YML_DIR is required") @@ -160,8 +160,8 @@ const out: Record = {} const winxexe = pick(winx?.files ?? [], [".exe"]) const winaexe = pick(wina?.files ?? [], [".exe"]) -const macxTarGz = "opencode-desktop-mac-x64.app.tar.gz" -const macaTarGz = "opencode-desktop-mac-arm64.app.tar.gz" +const macxTarGz = "devora-desktop-mac-x64.app.tar.gz" +const macaTarGz = "devora-desktop-mac-arm64.app.tar.gz" const linxDeb = pick(linx?.files ?? [], [".deb"]) const linxRpm = pick(linx?.files ?? [], [".rpm"]) diff --git a/packages/desktop/scripts/finalize-latest-yml.ts b/packages/desktop/scripts/finalize-latest-yml.ts index aa2ae5c9..91bed806 100644 --- a/packages/desktop/scripts/finalize-latest-yml.ts +++ b/packages/desktop/scripts/finalize-latest-yml.ts @@ -9,8 +9,8 @@ if (!dir) throw new Error("LATEST_YML_DIR is required") const repo = process.env.GH_REPO if (!repo) throw new Error("GH_REPO is required") -const version = process.env.OPENCODE_VERSION -if (!version) throw new Error("OPENCODE_VERSION is required") +const version = process.env.DEVORA_VERSION +if (!version) throw new Error("DEVORA_VERSION is required") type FileEntry = { url: string diff --git a/packages/desktop/scripts/prebuild.ts b/packages/desktop/scripts/prebuild.ts index 46a2475e..37145ae7 100644 --- a/packages/desktop/scripts/prebuild.ts +++ b/packages/desktop/scripts/prebuild.ts @@ -6,4 +6,4 @@ import { resolveChannel } from "./utils" const channel = resolveChannel() await $`bun ./scripts/copy-icons.ts ${channel}` -await $`cd ../opencode && bun script/build-node.ts` +await $`cd ../devora && bun script/build-node.ts` diff --git a/packages/desktop/scripts/predev.ts b/packages/desktop/scripts/predev.ts index 37c31d7e..1780827e 100644 --- a/packages/desktop/scripts/predev.ts +++ b/packages/desktop/scripts/predev.ts @@ -1,5 +1,5 @@ import { $ } from "bun" -await $`bun ./scripts/copy-icons.ts ${process.env.OPENCODE_CHANNEL ?? "dev"}` +await $`bun ./scripts/copy-icons.ts ${process.env.DEVORA_CHANNEL ?? "dev"}` -await $`cd ../opencode && bun script/build-node.ts` +await $`cd ../devora && bun script/build-node.ts` diff --git a/packages/desktop/scripts/prepare.ts b/packages/desktop/scripts/prepare.ts index f5a92b0f..ee5116e8 100755 --- a/packages/desktop/scripts/prepare.ts +++ b/packages/desktop/scripts/prepare.ts @@ -1,5 +1,5 @@ #!/usr/bin/env bun -import { Script } from "@mimo-ai/script" +import { Script } from "@devora-ai/script" await import("./prebuild") diff --git a/packages/desktop/scripts/utils.ts b/packages/desktop/scripts/utils.ts index 19b96b0a..bf42aa35 100644 --- a/packages/desktop/scripts/utils.ts +++ b/packages/desktop/scripts/utils.ts @@ -3,7 +3,7 @@ import { $ } from "bun" export type Channel = "dev" | "beta" | "prod" export function resolveChannel(): Channel { - const raw = Bun.env.OPENCODE_CHANNEL + const raw = Bun.env.DEVORA_CHANNEL if (raw === "dev" || raw === "beta" || raw === "prod") return raw return "dev" } @@ -11,32 +11,32 @@ export function resolveChannel(): Channel { export const SIDECAR_BINARIES: Array<{ rustTarget: string; ocBinary: string; assetExt: string }> = [ { rustTarget: "aarch64-apple-darwin", - ocBinary: "opencode-darwin-arm64", + ocBinary: "devora-darwin-arm64", assetExt: "zip", }, { rustTarget: "x86_64-apple-darwin", - ocBinary: "opencode-darwin-x64-baseline", + ocBinary: "devora-darwin-x64-baseline", assetExt: "zip", }, { rustTarget: "aarch64-pc-windows-msvc", - ocBinary: "opencode-windows-arm64", + ocBinary: "devora-windows-arm64", assetExt: "zip", }, { rustTarget: "x86_64-pc-windows-msvc", - ocBinary: "opencode-windows-x64-baseline", + ocBinary: "devora-windows-x64-baseline", assetExt: "zip", }, { rustTarget: "x86_64-unknown-linux-gnu", - ocBinary: "opencode-linux-x64-baseline", + ocBinary: "devora-linux-x64-baseline", assetExt: "tar.gz", }, { rustTarget: "aarch64-unknown-linux-gnu", - ocBinary: "opencode-linux-arm64", + ocBinary: "devora-linux-arm64", assetExt: "tar.gz", }, ] @@ -61,7 +61,7 @@ export function getCurrentSidecar(target = RUST_TARGET ?? nativeTarget()) { export async function copyBinaryToSidecarFolder(source: string) { const dir = `resources` await $`mkdir -p ${dir}` - const dest = windowsify(`${dir}/opencode-cli`) + const dest = windowsify(`${dir}/devora-cli`) await $`cp ${source} ${dest}` if (process.platform === "win32" && process.env.GITHUB_ACTIONS === "true") { await $`pwsh -NoLogo -NoProfile -ExecutionPolicy Bypass -File ../../script/sign-windows.ps1 ${dest}` diff --git a/packages/desktop/src/main/bun-polyfill.ts b/packages/desktop/src/main/bun-polyfill.ts new file mode 100644 index 00000000..8f91c17a --- /dev/null +++ b/packages/desktop/src/main/bun-polyfill.ts @@ -0,0 +1,83 @@ +import { createReadStream } from "node:fs" +import fs from "node:fs/promises" +import { dirname } from "node:path" +import { fileURLToPath } from "node:url" + +type PathLike = string | URL +type NodeBunFile = { + path: string + text(): Promise + json(): Promise + arrayBuffer(): Promise + exists(): Promise + stream(): ReturnType +} + +const toPath = (input: PathLike | NodeBunFile): string => { + if (typeof input === "string") return input + if (input instanceof URL) return fileURLToPath(input) + return input.path +} + +function file(input: PathLike): NodeBunFile { + const path = toPath(input) + return { + path, + async text() { + return fs.readFile(path, "utf8") + }, + async json() { + return JSON.parse(await this.text()) + }, + async arrayBuffer() { + const buffer = await fs.readFile(path) + return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength) as ArrayBuffer + }, + async exists() { + try { + await fs.access(path) + return true + } catch { + return false + } + }, + stream() { + return createReadStream(path) + }, + } +} + +async function write(destination: PathLike | NodeBunFile, input: string | ArrayBuffer | ArrayBufferView | Blob) { + const path = toPath(destination) + let data: string | NodeJS.ArrayBufferView + + if (typeof input === "string") { + data = input + } else if (input instanceof Blob) { + data = Buffer.from(await input.arrayBuffer()) + } else if (input instanceof ArrayBuffer) { + data = Buffer.from(input) + } else { + data = Buffer.from(input.buffer, input.byteOffset, input.byteLength) + } + + await fs.mkdir(dirname(path), { recursive: true }) + await fs.writeFile(path, data) + return typeof data === "string" ? Buffer.byteLength(data) : data.byteLength +} + +const globals = globalThis as typeof globalThis & { + Bun?: { + file: typeof file + write: typeof write + stringWidth: (value: string) => number + } +} + +globals.Bun ??= { + file, + write, + stringWidth(value: string) { + return Array.from(value).length + }, +} diff --git a/packages/desktop/src/main/cli.test.ts b/packages/desktop/src/main/cli.test.ts new file mode 100644 index 00000000..41b5cc6b --- /dev/null +++ b/packages/desktop/src/main/cli.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, test } from "bun:test" +import { homedir } from "node:os" +import { join } from "node:path" + +import { installCli, installCliCommand, type InstallCliRunner } from "./cli" + +describe("desktop CLI install", () => { + test("uses the official main-branch installer", () => { + const command = installCliCommand() + + expect(command.command).toBe("bash") + expect(command.args).toEqual([ + "-lc", + "curl -fsSL https://raw.githubusercontent.com/SheriAkhtamov/Devora/main/install | bash", + ]) + }) + + test("returns the installed CLI path after the installer succeeds", async () => { + const calls: Array<{ command: string; args: string[] }> = [] + const run: InstallCliRunner = async (command, args) => { + calls.push({ command, args }) + } + + await expect(installCli(run)).resolves.toBe(join(homedir(), ".devora", "bin", "devora")) + expect(calls).toEqual([installCliCommand()]) + }) +}) diff --git a/packages/desktop/src/main/cli.ts b/packages/desktop/src/main/cli.ts new file mode 100644 index 00000000..797eafd5 --- /dev/null +++ b/packages/desktop/src/main/cli.ts @@ -0,0 +1,39 @@ +import { execFile } from "node:child_process" +import { homedir } from "node:os" +import { join } from "node:path" + +const INSTALL_URL = "https://raw.githubusercontent.com/SheriAkhtamov/Devora/main/install" +const INSTALL_PATH = join(homedir(), ".devora", "bin", "devora") + +export type InstallCliRunner = ( + command: string, + args: string[], + opts: { env: NodeJS.ProcessEnv }, +) => Promise + +export function installCliCommand() { + return { + command: "bash", + args: ["-lc", `curl -fsSL ${INSTALL_URL} | bash`], + } +} + +export async function installCli(run: InstallCliRunner = runInstaller) { + const command = installCliCommand() + await run(command.command, command.args, { env: { ...process.env } }) + return INSTALL_PATH +} + +function runInstaller(command: string, args: string[], opts: { env: NodeJS.ProcessEnv }) { + return new Promise((resolve, reject) => { + execFile(command, args, { env: opts.env, maxBuffer: 1024 * 1024 * 8 }, (error, _stdout, stderr) => { + if (!error) { + resolve() + return + } + + const details = stderr.trim() + reject(new Error(details || error.message, { cause: error })) + }) + }) +} diff --git a/packages/desktop/src/main/constants.ts b/packages/desktop/src/main/constants.ts index 1e21661c..93023752 100644 --- a/packages/desktop/src/main/constants.ts +++ b/packages/desktop/src/main/constants.ts @@ -1,10 +1,11 @@ import { app } from "electron" type Channel = "dev" | "beta" | "prod" -const raw = import.meta.env.OPENCODE_CHANNEL +const raw = import.meta.env.DEVORA_CHANNEL export const CHANNEL: Channel = raw === "dev" || raw === "beta" || raw === "prod" ? raw : "dev" +const macUpdaterSupported = process.platform !== "darwin" || import.meta.env.DEVORA_SIGN_MAC === "true" -export const SETTINGS_STORE = "opencode.settings" +export const SETTINGS_STORE = "devora.settings" export const DEFAULT_SERVER_URL_KEY = "defaultServerUrl" export const WSL_ENABLED_KEY = "wslEnabled" -export const UPDATER_ENABLED = app.isPackaged && CHANNEL !== "dev" +export const UPDATER_ENABLED = app.isPackaged && CHANNEL !== "dev" && macUpdaterSupported diff --git a/packages/desktop/src/main/env.d.ts b/packages/desktop/src/main/env.d.ts index 1de56e1c..bb3ba879 100644 --- a/packages/desktop/src/main/env.d.ts +++ b/packages/desktop/src/main/env.d.ts @@ -1,29 +1,30 @@ interface ImportMetaEnv { - readonly OPENCODE_CHANNEL: string + readonly DEVORA_CHANNEL: string + readonly DEVORA_SIGN_MAC: string } interface ImportMeta { readonly env: ImportMetaEnv } -declare module "virtual:opencode-server" { +declare module "virtual:devora-server" { export namespace Server { - export const listen: typeof import("../../../opencode/dist/types/src/node").Server.listen - export type Listener = import("../../../opencode/dist/types/src/node").Server.Listener + export const listen: typeof import("../../../devora/dist/types/src/node").Server.listen + export type Listener = import("../../../devora/dist/types/src/node").Server.Listener } export namespace Config { - export const get: typeof import("../../../opencode/dist/types/src/node").Config.get - export type Info = import("../../../opencode/dist/types/src/node").Config.Info + export const get: typeof import("../../../devora/dist/types/src/node").Config.get + export type Info = import("../../../devora/dist/types/src/node").Config.Info } export namespace Log { - export const init: typeof import("../../../opencode/dist/types/src/node").Log.init + export const init: typeof import("../../../devora/dist/types/src/node").Log.init } export namespace Database { - export const Path: typeof import("../../../opencode/dist/types/src/node").Database.Path - export const Client: typeof import("../../../opencode/dist/types/src/node").Database.Client + export const Path: typeof import("../../../devora/dist/types/src/node").Database.Path + export const Client: typeof import("../../../devora/dist/types/src/node").Database.Client } export namespace JsonMigration { - export type Progress = import("../../../opencode/dist/types/src/node").JsonMigration.Progress - export const run: typeof import("../../../opencode/dist/types/src/node").JsonMigration.run + export type Progress = import("../../../devora/dist/types/src/node").JsonMigration.Progress + export const run: typeof import("../../../devora/dist/types/src/node").JsonMigration.run } - export const bootstrap: typeof import("../../../opencode/dist/types/src/node").bootstrap + export const bootstrap: typeof import("../../../devora/dist/types/src/node").bootstrap } diff --git a/packages/desktop/src/main/index.ts b/packages/desktop/src/main/index.ts index ae9f5811..645e33e7 100644 --- a/packages/desktop/src/main/index.ts +++ b/packages/desktop/src/main/index.ts @@ -7,6 +7,7 @@ import { join } from "node:path" import type { Event } from "electron" import { app, BrowserWindow, dialog } from "electron" import pkg from "electron-updater" +import "./bun-polyfill" import contextMenu from "electron-context-menu" contextMenu({ showSaveImageAs: true, showLookUpSelection: false, showSearchWithGoogle: false }) @@ -16,20 +17,20 @@ try { process.chdir(homedir()) } catch {} -process.env.OPENCODE_DISABLE_EMBEDDED_WEB_UI = "true" +process.env.DEVORA_DISABLE_EMBEDDED_WEB_UI = "true" const APP_NAMES: Record = { - dev: "OpenCode Dev", - beta: "OpenCode Beta", - prod: "OpenCode", + dev: "Devora Dev", + beta: "Devora Beta", + prod: "Devora", } const APP_IDS: Record = { - dev: "ai.opencode.desktop.dev", - beta: "ai.opencode.desktop.beta", - prod: "ai.opencode.desktop", + dev: "io.github.sheriakhtamov.devora.dev", + beta: "io.github.sheriakhtamov.devora.beta", + prod: "io.github.sheriakhtamov.devora", } -const appId = app.isPackaged ? APP_IDS[CHANNEL] : "ai.opencode.desktop.dev" -app.setName(app.isPackaged ? APP_NAMES[CHANNEL] : "OpenCode Dev") +const appId = app.isPackaged ? APP_IDS[CHANNEL] : APP_IDS.dev +app.setName(app.isPackaged ? APP_NAMES[CHANNEL] : "Devora Dev") app.setAppUserModelId(appId) app.setPath("userData", join(app.getPath("appData"), appId)) const { autoUpdater } = pkg @@ -37,6 +38,7 @@ const { autoUpdater } = pkg import type { InitStep, ServerReadyData, SqliteMigrationProgress, WslConfig } from "../preload/types" import { checkAppExists, resolveAppPath, wslPath } from "./apps" import { CHANNEL, UPDATER_ENABLED } from "./constants" +import { installCli } from "./cli" import { registerIpcHandlers, sendDeepLinks, sendMenuCommand, sendSqliteMigrationProgress } from "./ipc" import { initLogging } from "./logging" import { parseMarkdown } from "./markdown" @@ -50,7 +52,7 @@ import { setDockIcon, } from "./windows" import { drizzle } from "drizzle-orm/node-sqlite/driver" -import type { Server } from "virtual:opencode-server" +import type { Server } from "virtual:devora-server" const initEmitter = new EventEmitter() let initStep: InitStep = { phase: "server_waiting" } @@ -81,7 +83,7 @@ function setupApp() { } app.on("second-instance", (_event: Event, argv: string[]) => { - const urls = argv.filter((arg: string) => arg.startsWith("opencode://")) + const urls = argv.filter(isDeepLink) if (urls.length) { logger.log("deep link received via second-instance", { urls }) emitDeepLinks(urls) @@ -111,7 +113,7 @@ function setupApp() { } void app.whenReady().then(async () => { - app.setAsDefaultProtocolClient("opencode") + app.setAsDefaultProtocolClient("devora") registerRendererProtocol() setDockIcon() setupAutoUpdater() @@ -125,6 +127,10 @@ function emitDeepLinks(urls: string[]) { if (mainWindow) sendDeepLinks(mainWindow, urls) } +function isDeepLink(url: string) { + return url.startsWith("devora://") || url.startsWith("devora://") +} + function focusMainWindow() { if (!mainWindow) return mainWindow.show() @@ -158,7 +164,7 @@ async function initialize() { }) if (needsMigration) { - const { Database, JsonMigration } = await import("virtual:opencode-server") + const { Database, JsonMigration } = await import("virtual:devora-server") await JsonMigration.run(drizzle({ client: Database.Client().$client }), { progress: (event: { current: number; total: number }) => { const percent = Math.round(event.current / event.total) * 100 @@ -179,7 +185,7 @@ async function initialize() { server = listener serverReady.resolve({ url, - username: "opencode", + username: "devora", password, }) @@ -234,6 +240,7 @@ function wireMenu() { registerIpcHandlers({ killSidecar: () => killSidecar(), + installCli: () => installCli(), awaitInitialization: async (sendStep) => { sendStep(initStep) const listener = (step: InitStep) => sendStep(step) @@ -293,7 +300,7 @@ function ensureLoopbackNoProxy() { } async function getSidecarPort() { - const fromEnv = process.env.OPENCODE_PORT + const fromEnv = process.env.DEVORA_PORT if (fromEnv) { const parsed = Number.parseInt(fromEnv, 10) if (!Number.isNaN(parsed)) return parsed @@ -318,7 +325,7 @@ async function getSidecarPort() { function sqliteFileExists() { const xdg = process.env.XDG_DATA_HOME const base = xdg && xdg.length > 0 ? xdg : join(homedir(), ".local", "share") - return existsSync(join(base, "opencode", "opencode.db")) + return existsSync(join(base, "devora", "devora.db")) } function setupAutoUpdater() { @@ -326,7 +333,7 @@ function setupAutoUpdater() { autoUpdater.logger = logger autoUpdater.channel = "latest" autoUpdater.allowPrerelease = false - autoUpdater.allowDowngrade = true + autoUpdater.allowDowngrade = false autoUpdater.autoDownload = false autoUpdater.autoInstallOnAppQuit = true logger.log("auto updater configured", { diff --git a/packages/desktop/src/main/ipc.ts b/packages/desktop/src/main/ipc.ts index 8dbca8ee..fc906df2 100644 --- a/packages/desktop/src/main/ipc.ts +++ b/packages/desktop/src/main/ipc.ts @@ -20,6 +20,7 @@ const pickerFilters = (ext?: string[]) => { type Deps = { killSidecar: () => void + installCli: () => Promise | string awaitInitialization: (sendStep: (step: InitStep) => void) => Promise getWindowConfig: () => Promise | WindowConfig consumeInitialDeepLinks: () => Promise | string[] @@ -42,6 +43,7 @@ type Deps = { export function registerIpcHandlers(deps: Deps) { ipcMain.handle("kill-sidecar", () => deps.killSidecar()) + ipcMain.handle("install-cli", () => deps.installCli()) ipcMain.handle("await-initialization", (event: IpcMainInvokeEvent) => { const send = (step: InitStep) => event.sender.send("init-step", step) return deps.awaitInitialization(send) diff --git a/packages/desktop/src/main/menu.ts b/packages/desktop/src/main/menu.ts index 0d9a697f..d912785f 100644 --- a/packages/desktop/src/main/menu.ts +++ b/packages/desktop/src/main/menu.ts @@ -15,7 +15,7 @@ export function createMenu(deps: Deps) { const template: Electron.MenuItemConstructorOptions[] = [ { - label: "OpenCode", + label: "Devora", submenu: [ { role: "about" }, { @@ -23,6 +23,10 @@ export function createMenu(deps: Deps) { enabled: UPDATER_ENABLED, click: () => deps.checkForUpdates(), }, + { + label: "Install CLI...", + click: () => deps.trigger("desktop.installCli"), + }, { label: "Reload Webview", click: () => deps.reload(), @@ -115,18 +119,19 @@ export function createMenu(deps: Deps) { { label: "Help", submenu: [ - { label: "OpenCode Documentation", click: () => shell.openExternal("https://opencode.ai/docs") }, - { label: "Support Forum", click: () => shell.openExternal("https://discord.com/invite/opencode") }, - { type: "separator" }, + { label: "Devora Repository", click: () => shell.openExternal("https://github.com/SheriAkhtamov/Devora") }, { type: "separator" }, { label: "Share Feedback", click: () => - shell.openExternal("https://github.com/anomalyco/opencode/issues/new?template=feature_request.yml"), + shell.openExternal( + "https://github.com/SheriAkhtamov/Devora/issues/new?template=feature-request.yml", + ), }, { label: "Report a Bug", - click: () => shell.openExternal("https://github.com/anomalyco/opencode/issues/new?template=bug_report.yml"), + click: () => + shell.openExternal("https://github.com/SheriAkhtamov/Devora/issues/new?template=bug-report.yml"), }, ], }, diff --git a/packages/desktop/src/main/migrate.ts b/packages/desktop/src/main/migrate.ts index 70e3dc9c..1137c06d 100644 --- a/packages/desktop/src/main/migrate.ts +++ b/packages/desktop/src/main/migrate.ts @@ -23,19 +23,19 @@ function tauriDir(id: string) { // The Tauri app identifier changes between dev/beta/prod builds. const TAURI_APP_IDS: Record = { - dev: "ai.opencode.desktop.dev", - beta: "ai.opencode.desktop.beta", - prod: "ai.opencode.desktop", + dev: "ai.devora.desktop.dev", + beta: "ai.devora.desktop.beta", + prod: "ai.devora.desktop", } function tauriAppId() { - return app.isPackaged ? TAURI_APP_IDS[CHANNEL] : "ai.opencode.desktop.dev" + return app.isPackaged ? TAURI_APP_IDS[CHANNEL] : "ai.devora.desktop.dev" } // Migrate a single Tauri .dat file into the corresponding electron-store. -// `opencode.settings.dat` is special: it maps to the `opencode.settings` store +// `devora.settings.dat` is special: it maps to the `devora.settings` store // (the electron-store name without the `.dat` extension). All other .dat files // keep their full filename as the electron-store name so they match what the -// renderer already passes via IPC (e.g. `"default.dat"`, `"opencode.global.dat"`). +// renderer already passes via IPC (e.g. `"default.dat"`, `"devora.global.dat"`). function migrateFile(datPath: string, filename: string) { let data: Record try { @@ -45,10 +45,10 @@ function migrateFile(datPath: string, filename: string) { return } - // opencode.settings.dat → the electron settings store ("opencode.settings"). + // devora.settings.dat → the electron settings store ("devora.settings"). // All other .dat files keep their full filename as the store name so they match - // what the renderer passes via IPC (e.g. "default.dat", "opencode.global.dat"). - const storeName = filename === "opencode.settings.dat" ? "opencode.settings" : filename + // what the renderer passes via IPC (e.g. "default.dat", "devora.global.dat"). + const storeName = filename === "devora.settings.dat" ? "devora.settings" : filename const target = getStore(storeName) const migrated: string[] = [] const skipped: string[] = [] diff --git a/packages/desktop/src/main/server.ts b/packages/desktop/src/main/server.ts index 83d50f7c..5fa26903 100644 --- a/packages/desktop/src/main/server.ts +++ b/packages/desktop/src/main/server.ts @@ -1,4 +1,5 @@ import { app } from "electron" +import "./bun-polyfill" import { DEFAULT_SERVER_URL_KEY, WSL_ENABLED_KEY } from "./constants" import { getUserShell, loadShellEnv } from "./shell-env" import { getStore } from "./store" @@ -32,12 +33,12 @@ export function setWslConfig(config: WslConfig) { export async function spawnLocalServer(hostname: string, port: number, password: string) { prepareServerEnv(password) - const { Log, Server } = await import("virtual:opencode-server") + const { Log, Server } = await import("virtual:devora-server") await Log.init({ level: "WARN" }) const listener = await Server.listen({ port, hostname, - username: "opencode", + username: "devora", password, cors: ["oc://renderer"], }) @@ -64,11 +65,10 @@ function prepareServerEnv(password: string) { const env = { ...process.env, ...shellEnv, - OPENCODE_EXPERIMENTAL_ICON_DISCOVERY: "true", - OPENCODE_EXPERIMENTAL_FILEWATCHER: "true", - OPENCODE_CLIENT: "desktop", - OPENCODE_SERVER_USERNAME: "opencode", - OPENCODE_SERVER_PASSWORD: password, + DEVORA_EXPERIMENTAL_ICON_DISCOVERY: "true", + DEVORA_CLIENT: "desktop", + DEVORA_SERVER_USERNAME: "devora", + DEVORA_SERVER_PASSWORD: password, XDG_STATE_HOME: app.getPath("userData"), } Object.assign(process.env, env) @@ -84,7 +84,7 @@ export async function checkHealth(url: string, password?: string | null): Promis const headers = new Headers() if (password) { - const auth = Buffer.from(`opencode:${password}`).toString("base64") + const auth = Buffer.from(`devora:${password}`).toString("base64") headers.set("authorization", `Basic ${auth}`) } diff --git a/packages/desktop/src/main/shell-env.test.ts b/packages/desktop/src/main/shell-env.test.ts index cfe88277..b874778a 100644 --- a/packages/desktop/src/main/shell-env.test.ts +++ b/packages/desktop/src/main/shell-env.test.ts @@ -25,13 +25,13 @@ describe("shell env", () => { }, { PATH: "/desktop/path", - OPENCODE_CLIENT: "desktop", + DEVORA_CLIENT: "desktop", }, ) expect(env.PATH).toBe("/desktop/path") expect(env.HOME).toBe("/tmp/home") - expect(env.OPENCODE_CLIENT).toBe("desktop") + expect(env.DEVORA_CLIENT).toBe("desktop") }) test("isNushell handles path and binary name", () => { diff --git a/packages/desktop/src/main/store.ts b/packages/desktop/src/main/store.ts index 7b3bd7c6..a9fce5f8 100644 --- a/packages/desktop/src/main/store.ts +++ b/packages/desktop/src/main/store.ts @@ -7,7 +7,7 @@ const cache = new Map() // We cannot instantiate the electron-store at module load time because // module import hoisting causes this to run before app.setPath("userData", ...) // in index.ts has executed, which would result in files being written to the default directory -// (e.g. bad: %APPDATA%\@opencode-ai\desktop\opencode.settings vs good: %APPDATA%\ai.opencode.desktop.dev\opencode.settings). +// (e.g. bad: %APPDATA%\@devora-ai\desktop\devora.settings vs good: %APPDATA%\ai.devora.desktop.dev\devora.settings). export function getStore(name = SETTINGS_STORE) { const cached = cache.get(name) if (cached) return cached diff --git a/packages/desktop/src/main/windows.ts b/packages/desktop/src/main/windows.ts index 337e1ca0..99b8e9ca 100644 --- a/packages/desktop/src/main/windows.ts +++ b/packages/desktop/src/main/windows.ts @@ -76,7 +76,7 @@ export function createMainWindow() { width: state.width, height: state.height, show: false, - title: "OpenCode", + title: "Devora", icon: iconPath(), backgroundColor, ...(process.platform === "darwin" diff --git a/packages/desktop/src/renderer/env.d.ts b/packages/desktop/src/renderer/env.d.ts index 6dff3baf..ba44e070 100644 --- a/packages/desktop/src/renderer/env.d.ts +++ b/packages/desktop/src/renderer/env.d.ts @@ -3,7 +3,7 @@ import type { ElectronAPI } from "../preload/types" declare global { interface Window { api: ElectronAPI - __OPENCODE__?: { + __DEVORA__?: { deepLinks?: string[] } } diff --git a/packages/desktop/src/renderer/i18n/ar.ts b/packages/desktop/src/renderer/i18n/ar.ts index fdbf0a80..c57e99ca 100644 --- a/packages/desktop/src/renderer/i18n/ar.ts +++ b/packages/desktop/src/renderer/i18n/ar.ts @@ -11,16 +11,16 @@ export const dict = { "desktop.updater.checkFailed.title": "فشل التحقق من التحديثات", "desktop.updater.checkFailed.message": "فشل التحقق من وجود تحديثات", "desktop.updater.none.title": "لا توجد تحديثات متاحة", - "desktop.updater.none.message": "أنت تستخدم بالفعل أحدث إصدار من OpenCode", + "desktop.updater.none.message": "أنت تستخدم بالفعل أحدث إصدار من Devora", "desktop.updater.downloadFailed.title": "فشل التحديث", "desktop.updater.downloadFailed.message": "فشل تنزيل التحديث", "desktop.updater.downloaded.title": "تم تنزيل التحديث", - "desktop.updater.downloaded.prompt": "تم تنزيل إصدار {{version}} من OpenCode، هل ترغب في تثبيته وإعادة تشغيله؟", + "desktop.updater.downloaded.prompt": "تم تنزيل إصدار {{version}} من Devora، هل ترغب في تثبيته وإعادة تشغيله؟", "desktop.updater.installFailed.title": "فشل التحديث", "desktop.updater.installFailed.message": "فشل تثبيت التحديث", "desktop.cli.installed.title": "تم تثبيت CLI", - "desktop.cli.installed.message": "تم تثبيت CLI في {{path}}\n\nأعد تشغيل الطرفية لاستخدام الأمر 'opencode'.", + "desktop.cli.installed.message": "تم تثبيت CLI في {{path}}\n\nأعد تشغيل الطرفية لاستخدام الأمر 'devora'.", "desktop.cli.failed.title": "فشل التثبيت", "desktop.cli.failed.message": "فشل تثبيت CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/br.ts b/packages/desktop/src/renderer/i18n/br.ts index 75fe2dc3..3caaf0ea 100644 --- a/packages/desktop/src/renderer/i18n/br.ts +++ b/packages/desktop/src/renderer/i18n/br.ts @@ -11,17 +11,17 @@ export const dict = { "desktop.updater.checkFailed.title": "Falha ao verificar atualizações", "desktop.updater.checkFailed.message": "Falha ao verificar atualizações", "desktop.updater.none.title": "Nenhuma atualização disponível", - "desktop.updater.none.message": "Você já está usando a versão mais recente do OpenCode", + "desktop.updater.none.message": "Você já está usando a versão mais recente do Devora", "desktop.updater.downloadFailed.title": "Falha na atualização", "desktop.updater.downloadFailed.message": "Falha ao baixar a atualização", "desktop.updater.downloaded.title": "Atualização baixada", "desktop.updater.downloaded.prompt": - "A versão {{version}} do OpenCode foi baixada. Você gostaria de instalá-la e reiniciar?", + "A versão {{version}} do Devora foi baixada. Você gostaria de instalá-la e reiniciar?", "desktop.updater.installFailed.title": "Falha na atualização", "desktop.updater.installFailed.message": "Falha ao instalar a atualização", "desktop.cli.installed.title": "CLI instalada", - "desktop.cli.installed.message": "CLI instalada em {{path}}\n\nReinicie seu terminal para usar o comando 'opencode'.", + "desktop.cli.installed.message": "CLI instalada em {{path}}\n\nReinicie seu terminal para usar o comando 'devora'.", "desktop.cli.failed.title": "Falha na instalação", "desktop.cli.failed.message": "Falha ao instalar a CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/bs.ts b/packages/desktop/src/renderer/i18n/bs.ts index 58c266f5..00b0601c 100644 --- a/packages/desktop/src/renderer/i18n/bs.ts +++ b/packages/desktop/src/renderer/i18n/bs.ts @@ -11,18 +11,18 @@ export const dict = { "desktop.updater.checkFailed.title": "Provjera ažuriranja nije uspjela", "desktop.updater.checkFailed.message": "Nije moguće provjeriti ažuriranja", "desktop.updater.none.title": "Nema dostupnog ažuriranja", - "desktop.updater.none.message": "Već koristiš najnoviju verziju OpenCode-a", + "desktop.updater.none.message": "Već koristiš najnoviju verziju Devora-a", "desktop.updater.downloadFailed.title": "Ažuriranje nije uspjelo", "desktop.updater.downloadFailed.message": "Neuspjelo preuzimanje ažuriranja", "desktop.updater.downloaded.title": "Ažuriranje preuzeto", "desktop.updater.downloaded.prompt": - "Verzija {{version}} OpenCode-a je preuzeta. Želiš li da je instaliraš i ponovo pokreneš aplikaciju?", + "Verzija {{version}} Devora-a je preuzeta. Želiš li da je instaliraš i ponovo pokreneš aplikaciju?", "desktop.updater.installFailed.title": "Ažuriranje nije uspjelo", "desktop.updater.installFailed.message": "Neuspjela instalacija ažuriranja", "desktop.cli.installed.title": "CLI instaliran", "desktop.cli.installed.message": - "CLI je instaliran u {{path}}\n\nRestartuj terminal da bi koristio komandu 'opencode'.", + "CLI je instaliran u {{path}}\n\nRestartuj terminal da bi koristio komandu 'devora'.", "desktop.cli.failed.title": "Instalacija nije uspjela", "desktop.cli.failed.message": "Neuspjela instalacija CLI-a: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/da.ts b/packages/desktop/src/renderer/i18n/da.ts index 2109495f..caa42f7c 100644 --- a/packages/desktop/src/renderer/i18n/da.ts +++ b/packages/desktop/src/renderer/i18n/da.ts @@ -11,18 +11,18 @@ export const dict = { "desktop.updater.checkFailed.title": "Opdateringstjek mislykkedes", "desktop.updater.checkFailed.message": "Kunne ikke tjekke for opdateringer", "desktop.updater.none.title": "Ingen opdatering tilgængelig", - "desktop.updater.none.message": "Du bruger allerede den nyeste version af OpenCode", + "desktop.updater.none.message": "Du bruger allerede den nyeste version af Devora", "desktop.updater.downloadFailed.title": "Opdatering mislykkedes", "desktop.updater.downloadFailed.message": "Kunne ikke downloade opdateringen", "desktop.updater.downloaded.title": "Opdatering downloadet", "desktop.updater.downloaded.prompt": - "Version {{version}} af OpenCode er blevet downloadet. Vil du installere den og genstarte?", + "Version {{version}} af Devora er blevet downloadet. Vil du installere den og genstarte?", "desktop.updater.installFailed.title": "Opdatering mislykkedes", "desktop.updater.installFailed.message": "Kunne ikke installere opdateringen", "desktop.cli.installed.title": "CLI installeret", "desktop.cli.installed.message": - "CLI installeret i {{path}}\n\nGenstart din terminal for at bruge 'opencode'-kommandoen.", + "CLI installeret i {{path}}\n\nGenstart din terminal for at bruge 'devora'-kommandoen.", "desktop.cli.failed.title": "Installation mislykkedes", "desktop.cli.failed.message": "Kunne ikke installere CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/de.ts b/packages/desktop/src/renderer/i18n/de.ts index 38ad8096..bcad4a8c 100644 --- a/packages/desktop/src/renderer/i18n/de.ts +++ b/packages/desktop/src/renderer/i18n/de.ts @@ -11,18 +11,18 @@ export const dict = { "desktop.updater.checkFailed.title": "Updateprüfung fehlgeschlagen", "desktop.updater.checkFailed.message": "Updates konnten nicht geprüft werden", "desktop.updater.none.title": "Kein Update verfügbar", - "desktop.updater.none.message": "Sie verwenden bereits die neueste Version von OpenCode", + "desktop.updater.none.message": "Sie verwenden bereits die neueste Version von Devora", "desktop.updater.downloadFailed.title": "Update fehlgeschlagen", "desktop.updater.downloadFailed.message": "Update konnte nicht heruntergeladen werden", "desktop.updater.downloaded.title": "Update heruntergeladen", "desktop.updater.downloaded.prompt": - "Version {{version}} von OpenCode wurde heruntergeladen. Möchten Sie sie installieren und neu starten?", + "Version {{version}} von Devora wurde heruntergeladen. Möchten Sie sie installieren und neu starten?", "desktop.updater.installFailed.title": "Update fehlgeschlagen", "desktop.updater.installFailed.message": "Update konnte nicht installiert werden", "desktop.cli.installed.title": "CLI installiert", "desktop.cli.installed.message": - "CLI wurde in {{path}} installiert\n\nStarten Sie Ihr Terminal neu, um den Befehl 'opencode' zu verwenden.", + "CLI wurde in {{path}} installiert\n\nStarten Sie Ihr Terminal neu, um den Befehl 'devora' zu verwenden.", "desktop.cli.failed.title": "Installation fehlgeschlagen", "desktop.cli.failed.message": "CLI konnte nicht installiert werden: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/en.ts b/packages/desktop/src/renderer/i18n/en.ts index 4c30380d..c77663a4 100644 --- a/packages/desktop/src/renderer/i18n/en.ts +++ b/packages/desktop/src/renderer/i18n/en.ts @@ -11,17 +11,17 @@ export const dict = { "desktop.updater.checkFailed.title": "Update Check Failed", "desktop.updater.checkFailed.message": "Failed to check for updates", "desktop.updater.none.title": "No Update Available", - "desktop.updater.none.message": "You are already using the latest version of OpenCode", + "desktop.updater.none.message": "You are already using the latest version of Devora", "desktop.updater.downloadFailed.title": "Update Failed", "desktop.updater.downloadFailed.message": "Failed to download update", "desktop.updater.downloaded.title": "Update Downloaded", "desktop.updater.downloaded.prompt": - "Version {{version}} of OpenCode has been downloaded, would you like to install it and relaunch?", + "Version {{version}} of Devora has been downloaded, would you like to install it and relaunch?", "desktop.updater.installFailed.title": "Update Failed", "desktop.updater.installFailed.message": "Failed to install update", "desktop.cli.installed.title": "CLI Installed", - "desktop.cli.installed.message": "CLI installed to {{path}}\n\nRestart your terminal to use the 'opencode' command.", + "desktop.cli.installed.message": "CLI installed to {{path}}\n\nRestart your terminal to use the 'devora' command.", "desktop.cli.failed.title": "Installation Failed", "desktop.cli.failed.message": "Failed to install CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/es.ts b/packages/desktop/src/renderer/i18n/es.ts index 80504a8f..cb552f8d 100644 --- a/packages/desktop/src/renderer/i18n/es.ts +++ b/packages/desktop/src/renderer/i18n/es.ts @@ -11,17 +11,17 @@ export const dict = { "desktop.updater.checkFailed.title": "Comprobación de actualizaciones fallida", "desktop.updater.checkFailed.message": "No se pudieron buscar actualizaciones", "desktop.updater.none.title": "No hay actualizaciones disponibles", - "desktop.updater.none.message": "Ya estás usando la versión más reciente de OpenCode", + "desktop.updater.none.message": "Ya estás usando la versión más reciente de Devora", "desktop.updater.downloadFailed.title": "Actualización fallida", "desktop.updater.downloadFailed.message": "No se pudo descargar la actualización", "desktop.updater.downloaded.title": "Actualización descargada", "desktop.updater.downloaded.prompt": - "Se ha descargado la versión {{version}} de OpenCode. ¿Quieres instalarla y reiniciar?", + "Se ha descargado la versión {{version}} de Devora. ¿Quieres instalarla y reiniciar?", "desktop.updater.installFailed.title": "Actualización fallida", "desktop.updater.installFailed.message": "No se pudo instalar la actualización", "desktop.cli.installed.title": "CLI instalada", - "desktop.cli.installed.message": "CLI instalada en {{path}}\n\nReinicia tu terminal para usar el comando 'opencode'.", + "desktop.cli.installed.message": "CLI instalada en {{path}}\n\nReinicia tu terminal para usar el comando 'devora'.", "desktop.cli.failed.title": "Instalación fallida", "desktop.cli.failed.message": "No se pudo instalar la CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/fr.ts b/packages/desktop/src/renderer/i18n/fr.ts index 4f0bb2b1..6ac3d1a8 100644 --- a/packages/desktop/src/renderer/i18n/fr.ts +++ b/packages/desktop/src/renderer/i18n/fr.ts @@ -11,18 +11,18 @@ export const dict = { "desktop.updater.checkFailed.title": "Échec de la vérification des mises à jour", "desktop.updater.checkFailed.message": "Impossible de vérifier les mises à jour", "desktop.updater.none.title": "Aucune mise à jour disponible", - "desktop.updater.none.message": "Vous utilisez déjà la dernière version d'OpenCode", + "desktop.updater.none.message": "Vous utilisez déjà la dernière version d'Devora", "desktop.updater.downloadFailed.title": "Échec de la mise à jour", "desktop.updater.downloadFailed.message": "Impossible de télécharger la mise à jour", "desktop.updater.downloaded.title": "Mise à jour téléchargée", "desktop.updater.downloaded.prompt": - "La version {{version}} d'OpenCode a été téléchargée. Voulez-vous l'installer et redémarrer ?", + "La version {{version}} d'Devora a été téléchargée. Voulez-vous l'installer et redémarrer ?", "desktop.updater.installFailed.title": "Échec de la mise à jour", "desktop.updater.installFailed.message": "Impossible d'installer la mise à jour", "desktop.cli.installed.title": "CLI installée", "desktop.cli.installed.message": - "CLI installée dans {{path}}\n\nRedémarrez votre terminal pour utiliser la commande 'opencode'.", + "CLI installée dans {{path}}\n\nRedémarrez votre terminal pour utiliser la commande 'devora'.", "desktop.cli.failed.title": "Échec de l'installation", "desktop.cli.failed.message": "Impossible d'installer la CLI : {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/index.ts b/packages/desktop/src/renderer/i18n/index.ts index be87f94f..911300ae 100644 --- a/packages/desktop/src/renderer/i18n/index.ts +++ b/packages/desktop/src/renderer/i18n/index.ts @@ -174,7 +174,7 @@ export function initI18n(): Promise { if (cached) return cached const promise = (async () => { - const raw = await window.api.storeGet("opencode.global.dat", "language").catch(() => null) + const raw = await window.api.storeGet("devora.global.dat", "language").catch(() => null) const value = parseStored(raw) const next = pickLocale(value) ?? state.locale diff --git a/packages/desktop/src/renderer/i18n/ja.ts b/packages/desktop/src/renderer/i18n/ja.ts index fc485c6f..8ced1839 100644 --- a/packages/desktop/src/renderer/i18n/ja.ts +++ b/packages/desktop/src/renderer/i18n/ja.ts @@ -11,18 +11,18 @@ export const dict = { "desktop.updater.checkFailed.title": "アップデートの確認に失敗しました", "desktop.updater.checkFailed.message": "アップデートを確認できませんでした", "desktop.updater.none.title": "利用可能なアップデートはありません", - "desktop.updater.none.message": "すでに最新バージョンの OpenCode を使用しています", + "desktop.updater.none.message": "すでに最新バージョンの Devora を使用しています", "desktop.updater.downloadFailed.title": "アップデートに失敗しました", "desktop.updater.downloadFailed.message": "アップデートをダウンロードできませんでした", "desktop.updater.downloaded.title": "アップデートをダウンロードしました", "desktop.updater.downloaded.prompt": - "OpenCode のバージョン {{version}} がダウンロードされました。インストールして再起動しますか?", + "Devora のバージョン {{version}} がダウンロードされました。インストールして再起動しますか?", "desktop.updater.installFailed.title": "アップデートに失敗しました", "desktop.updater.installFailed.message": "アップデートをインストールできませんでした", "desktop.cli.installed.title": "CLI をインストールしました", "desktop.cli.installed.message": - "CLI を {{path}} にインストールしました\n\nターミナルを再起動して 'opencode' コマンドを使用してください。", + "CLI を {{path}} にインストールしました\n\nターミナルを再起動して 'devora' コマンドを使用してください。", "desktop.cli.failed.title": "インストールに失敗しました", "desktop.cli.failed.message": "CLI のインストールに失敗しました: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/ko.ts b/packages/desktop/src/renderer/i18n/ko.ts index be27cec8..c37d9594 100644 --- a/packages/desktop/src/renderer/i18n/ko.ts +++ b/packages/desktop/src/renderer/i18n/ko.ts @@ -11,17 +11,17 @@ export const dict = { "desktop.updater.checkFailed.title": "업데이트 확인 실패", "desktop.updater.checkFailed.message": "업데이트를 확인하지 못했습니다", "desktop.updater.none.title": "사용 가능한 업데이트 없음", - "desktop.updater.none.message": "이미 최신 버전의 OpenCode를 사용하고 있습니다", + "desktop.updater.none.message": "이미 최신 버전의 Devora를 사용하고 있습니다", "desktop.updater.downloadFailed.title": "업데이트 실패", "desktop.updater.downloadFailed.message": "업데이트를 다운로드하지 못했습니다", "desktop.updater.downloaded.title": "업데이트 다운로드 완료", - "desktop.updater.downloaded.prompt": "OpenCode {{version}} 버전을 다운로드했습니다. 설치하고 다시 실행할까요?", + "desktop.updater.downloaded.prompt": "Devora {{version}} 버전을 다운로드했습니다. 설치하고 다시 실행할까요?", "desktop.updater.installFailed.title": "업데이트 실패", "desktop.updater.installFailed.message": "업데이트를 설치하지 못했습니다", "desktop.cli.installed.title": "CLI 설치됨", "desktop.cli.installed.message": - "CLI가 {{path}}에 설치되었습니다\n\n터미널을 다시 시작하여 'opencode' 명령을 사용하세요.", + "CLI가 {{path}}에 설치되었습니다\n\n터미널을 다시 시작하여 'devora' 명령을 사용하세요.", "desktop.cli.failed.title": "설치 실패", "desktop.cli.failed.message": "CLI 설치 실패: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/no.ts b/packages/desktop/src/renderer/i18n/no.ts index e39bd7f3..03762971 100644 --- a/packages/desktop/src/renderer/i18n/no.ts +++ b/packages/desktop/src/renderer/i18n/no.ts @@ -11,18 +11,18 @@ export const dict = { "desktop.updater.checkFailed.title": "Oppdateringssjekk mislyktes", "desktop.updater.checkFailed.message": "Kunne ikke se etter oppdateringer", "desktop.updater.none.title": "Ingen oppdatering tilgjengelig", - "desktop.updater.none.message": "Du bruker allerede den nyeste versjonen av OpenCode", + "desktop.updater.none.message": "Du bruker allerede den nyeste versjonen av Devora", "desktop.updater.downloadFailed.title": "Oppdatering mislyktes", "desktop.updater.downloadFailed.message": "Kunne ikke laste ned oppdateringen", "desktop.updater.downloaded.title": "Oppdatering lastet ned", "desktop.updater.downloaded.prompt": - "Versjon {{version}} av OpenCode er lastet ned. Vil du installere den og starte på nytt?", + "Versjon {{version}} av Devora er lastet ned. Vil du installere den og starte på nytt?", "desktop.updater.installFailed.title": "Oppdatering mislyktes", "desktop.updater.installFailed.message": "Kunne ikke installere oppdateringen", "desktop.cli.installed.title": "CLI installert", "desktop.cli.installed.message": - "CLI installert til {{path}}\n\nStart terminalen på nytt for å bruke 'opencode'-kommandoen.", + "CLI installert til {{path}}\n\nStart terminalen på nytt for å bruke 'devora'-kommandoen.", "desktop.cli.failed.title": "Installasjon mislyktes", "desktop.cli.failed.message": "Kunne ikke installere CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/pl.ts b/packages/desktop/src/renderer/i18n/pl.ts index d3ad7ce6..157c50a1 100644 --- a/packages/desktop/src/renderer/i18n/pl.ts +++ b/packages/desktop/src/renderer/i18n/pl.ts @@ -11,18 +11,18 @@ export const dict = { "desktop.updater.checkFailed.title": "Nie udało się sprawdzić aktualizacji", "desktop.updater.checkFailed.message": "Nie udało się sprawdzić aktualizacji", "desktop.updater.none.title": "Brak dostępnych aktualizacji", - "desktop.updater.none.message": "Korzystasz już z najnowszej wersji OpenCode", + "desktop.updater.none.message": "Korzystasz już z najnowszej wersji Devora", "desktop.updater.downloadFailed.title": "Aktualizacja nie powiodła się", "desktop.updater.downloadFailed.message": "Nie udało się pobrać aktualizacji", "desktop.updater.downloaded.title": "Aktualizacja pobrana", "desktop.updater.downloaded.prompt": - "Pobrano wersję {{version}} OpenCode. Czy chcesz ją zainstalować i uruchomić ponownie?", + "Pobrano wersję {{version}} Devora. Czy chcesz ją zainstalować i uruchomić ponownie?", "desktop.updater.installFailed.title": "Aktualizacja nie powiodła się", "desktop.updater.installFailed.message": "Nie udało się zainstalować aktualizacji", "desktop.cli.installed.title": "CLI zainstalowane", "desktop.cli.installed.message": - "CLI zainstalowane w {{path}}\n\nUruchom ponownie terminal, aby użyć polecenia 'opencode'.", + "CLI zainstalowane w {{path}}\n\nUruchom ponownie terminal, aby użyć polecenia 'devora'.", "desktop.cli.failed.title": "Instalacja nie powiodła się", "desktop.cli.failed.message": "Nie udało się zainstalować CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/ru.ts b/packages/desktop/src/renderer/i18n/ru.ts index 8e09cc45..dec353df 100644 --- a/packages/desktop/src/renderer/i18n/ru.ts +++ b/packages/desktop/src/renderer/i18n/ru.ts @@ -11,17 +11,17 @@ export const dict = { "desktop.updater.checkFailed.title": "Не удалось проверить обновления", "desktop.updater.checkFailed.message": "Не удалось проверить обновления", "desktop.updater.none.title": "Обновлений нет", - "desktop.updater.none.message": "Вы уже используете последнюю версию OpenCode", + "desktop.updater.none.message": "Вы уже используете последнюю версию Devora", "desktop.updater.downloadFailed.title": "Обновление не удалось", "desktop.updater.downloadFailed.message": "Не удалось скачать обновление", "desktop.updater.downloaded.title": "Обновление загружено", - "desktop.updater.downloaded.prompt": "Версия OpenCode {{version}} загружена. Хотите установить и перезапустить?", + "desktop.updater.downloaded.prompt": "Версия Devora {{version}} загружена. Хотите установить и перезапустить?", "desktop.updater.installFailed.title": "Обновление не удалось", "desktop.updater.installFailed.message": "Не удалось установить обновление", "desktop.cli.installed.title": "CLI установлен", "desktop.cli.installed.message": - "CLI установлен в {{path}}\n\nПерезапустите терминал, чтобы использовать команду 'opencode'.", + "CLI установлен в {{path}}\n\nПерезапустите терминал, чтобы использовать команду 'devora'.", "desktop.cli.failed.title": "Ошибка установки", "desktop.cli.failed.message": "Не удалось установить CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/zh.ts b/packages/desktop/src/renderer/i18n/zh.ts index aeb3a54e..1137dee8 100644 --- a/packages/desktop/src/renderer/i18n/zh.ts +++ b/packages/desktop/src/renderer/i18n/zh.ts @@ -11,16 +11,16 @@ export const dict = { "desktop.updater.checkFailed.title": "检查更新失败", "desktop.updater.checkFailed.message": "无法检查更新", "desktop.updater.none.title": "没有可用更新", - "desktop.updater.none.message": "你已经在使用最新版本的 OpenCode", + "desktop.updater.none.message": "你已经在使用最新版本的 Devora", "desktop.updater.downloadFailed.title": "更新失败", "desktop.updater.downloadFailed.message": "无法下载更新", "desktop.updater.downloaded.title": "更新已下载", - "desktop.updater.downloaded.prompt": "已下载 OpenCode {{version}} 版本,是否安装并重启?", + "desktop.updater.downloaded.prompt": "已下载 Devora {{version}} 版本,是否安装并重启?", "desktop.updater.installFailed.title": "更新失败", "desktop.updater.installFailed.message": "无法安装更新", "desktop.cli.installed.title": "CLI 已安装", - "desktop.cli.installed.message": "CLI 已安装到 {{path}}\n\n重启终端以使用 'opencode' 命令。", + "desktop.cli.installed.message": "CLI 已安装到 {{path}}\n\n重启终端以使用 'devora' 命令。", "desktop.cli.failed.title": "安装失败", "desktop.cli.failed.message": "无法安装 CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/i18n/zht.ts b/packages/desktop/src/renderer/i18n/zht.ts index 7fd677ac..2160d88d 100644 --- a/packages/desktop/src/renderer/i18n/zht.ts +++ b/packages/desktop/src/renderer/i18n/zht.ts @@ -11,16 +11,16 @@ export const dict = { "desktop.updater.checkFailed.title": "檢查更新失敗", "desktop.updater.checkFailed.message": "無法檢查更新", "desktop.updater.none.title": "沒有可用更新", - "desktop.updater.none.message": "你已在使用最新版的 OpenCode", + "desktop.updater.none.message": "你已在使用最新版的 Devora", "desktop.updater.downloadFailed.title": "更新失敗", "desktop.updater.downloadFailed.message": "無法下載更新", "desktop.updater.downloaded.title": "更新已下載", - "desktop.updater.downloaded.prompt": "已下載 OpenCode {{version}} 版本,是否安裝並重新啟動?", + "desktop.updater.downloaded.prompt": "已下載 Devora {{version}} 版本,是否安裝並重新啟動?", "desktop.updater.installFailed.title": "更新失敗", "desktop.updater.installFailed.message": "無法安裝更新", "desktop.cli.installed.title": "CLI 已安裝", - "desktop.cli.installed.message": "CLI 已安裝到 {{path}}\n\n重新啟動終端機以使用 'opencode' 命令。", + "desktop.cli.installed.message": "CLI 已安裝到 {{path}}\n\n重新啟動終端機以使用 'devora' 命令。", "desktop.cli.failed.title": "安裝失敗", "desktop.cli.failed.message": "無法安裝 CLI: {{error}}", } diff --git a/packages/desktop/src/renderer/index.html b/packages/desktop/src/renderer/index.html index dd8675ee..604dc020 100644 --- a/packages/desktop/src/renderer/index.html +++ b/packages/desktop/src/renderer/index.html @@ -3,7 +3,7 @@ - OpenCode + Devora diff --git a/packages/desktop/src/renderer/index.tsx b/packages/desktop/src/renderer/index.tsx index f7df9d4d..c89e0e8a 100644 --- a/packages/desktop/src/renderer/index.tsx +++ b/packages/desktop/src/renderer/index.tsx @@ -13,16 +13,17 @@ import { PlatformProvider, ServerConnection, useCommand, -} from "@mimo-ai/app" +} from "@devora-ai/app" import type { AsyncStorage } from "@solid-primitives/storage" import { MemoryRouter } from "@solidjs/router" import { createEffect, createResource, onCleanup, onMount, Show } from "solid-js" import { render } from "solid-js/web" import pkg from "../../package.json" +import { installCli } from "./cli" import { initI18n, t } from "./i18n" import { webviewZoom } from "./webview-zoom" import "./styles.css" -import { useTheme } from "@mimo-ai/ui/theme" +import { useTheme } from "@devora-ai/ui/theme" const root = document.getElementById("root") if (import.meta.env.DEV && !(root instanceof HTMLElement)) { @@ -31,13 +32,13 @@ if (import.meta.env.DEV && !(root instanceof HTMLElement)) { void initI18n() -const deepLinkEvent = "opencode:deep-link" +const deepLinkEvent = "devora:deep-link" const emitDeepLinks = (urls: string[]) => { if (urls.length === 0) return - window.__OPENCODE__ ??= {} - const pending = window.__OPENCODE__.deepLinks ?? [] - window.__OPENCODE__.deepLinks = [...pending, ...urls] + window.__DEVORA__ ??= {} + const pending = window.__DEVORA__.deepLinks ?? [] + window.__DEVORA__.deepLinks = [...pending, ...urls] window.dispatchEvent(new CustomEvent(deepLinkEvent, { detail: { urls } })) } @@ -176,6 +177,8 @@ const createPlatform = (): Platform => { await window.api.installUpdate() }, + installCli, + restart: async () => { await window.api.killSidecar().catch(() => undefined) window.api.relaunch() @@ -187,7 +190,7 @@ const createPlatform = (): Platform => { const notification = new Notification(title, { body: description ?? "", - icon: "https://opencode.ai/favicon-96x96-v3.png", + icon: "/favicon-96x96-v3.png", }) notification.onclick = () => { void window.api.showWindow() @@ -255,7 +258,7 @@ render(() => { const platform = createPlatform() const [windowConfig] = createResource(() => window.api.getWindowConfig().catch(() => ({ updaterEnabled: false }))) const loadLocale = async () => { - const current = await platform.storage?.("opencode.global.dat").getItem("language") + const current = await platform.storage?.("devora.global.dat").getItem("language") const legacy = current ? undefined : await platform.storage?.().getItem("language.v1") const raw = current ?? legacy if (!raw) return diff --git a/packages/desktop/src/renderer/loading.html b/packages/desktop/src/renderer/loading.html index ae3725af..c2563133 100644 --- a/packages/desktop/src/renderer/loading.html +++ b/packages/desktop/src/renderer/loading.html @@ -3,7 +3,7 @@ - OpenCode + Devora diff --git a/packages/desktop/src/renderer/loading.tsx b/packages/desktop/src/renderer/loading.tsx index 281dd3b0..9a7f852d 100644 --- a/packages/desktop/src/renderer/loading.tsx +++ b/packages/desktop/src/renderer/loading.tsx @@ -1,9 +1,9 @@ import { MetaProvider } from "@solidjs/meta" import { render } from "solid-js/web" -import "@mimo-ai/app/index.css" -import { Font } from "@mimo-ai/ui/font" -import { Splash } from "@mimo-ai/ui/logo" -import { Progress } from "@mimo-ai/ui/progress" +import "@devora-ai/app/index.css" +import { Font } from "@devora-ai/ui/font" +import { Splash } from "@devora-ai/ui/logo" +import { Progress } from "@devora-ai/ui/progress" import "./styles.css" import { createEffect, createMemo, createSignal, onCleanup, onMount } from "solid-js" import type { InitStep, SqliteMigrationProgress } from "../preload/types" diff --git a/packages/opencode/.gitignore b/packages/devora/.gitignore similarity index 100% rename from packages/opencode/.gitignore rename to packages/devora/.gitignore diff --git a/packages/opencode/AGENTS.md b/packages/devora/AGENTS.md similarity index 98% rename from packages/opencode/AGENTS.md rename to packages/devora/AGENTS.md index 2ef6e59e..e0bfaf86 100644 --- a/packages/opencode/AGENTS.md +++ b/packages/devora/AGENTS.md @@ -1,4 +1,4 @@ -# opencode database guide +# devora database guide ## Database @@ -19,7 +19,7 @@ of the file: ```ts // src/foo/foo.ts export interface Interface { ... } -export class Service extends Context.Service()("@opencode/Foo") {} +export class Service extends Context.Service()("@devora/Foo") {} export const layer = Layer.effect(Service, ...) export const defaultLayer = layer.pipe(...) @@ -66,7 +66,7 @@ import { SessionStatus } from "@/session/status" Barrels in multi-sibling directories force every import through the barrel to evaluate every sibling, which defeats tree-shaking and slows module load. -# opencode Effect rules +# devora Effect rules Use these rules when writing or migrating Effect code. diff --git a/packages/opencode/Dockerfile b/packages/devora/Dockerfile similarity index 66% rename from packages/opencode/Dockerfile rename to packages/devora/Dockerfile index f92b48a6..1f39e5b9 100644 --- a/packages/opencode/Dockerfile +++ b/packages/devora/Dockerfile @@ -7,12 +7,12 @@ ENV BUN_RUNTIME_TRANSPILER_CACHE_PATH=${BUN_RUNTIME_TRANSPILER_CACHE_PATH} RUN apk add libgcc libstdc++ ripgrep FROM base AS build-amd64 -COPY dist/opencode-linux-x64-baseline-musl/bin/opencode /usr/local/bin/opencode +COPY dist/devora-linux-x64-baseline-musl/bin/devora /usr/local/bin/devora FROM base AS build-arm64 -COPY dist/opencode-linux-arm64-musl/bin/opencode /usr/local/bin/opencode +COPY dist/devora-linux-arm64-musl/bin/devora /usr/local/bin/devora ARG TARGETARCH FROM build-${TARGETARCH} -RUN opencode --version -ENTRYPOINT ["opencode"] +RUN devora --version +ENTRYPOINT ["devora"] diff --git a/packages/opencode/README.md b/packages/devora/README.md similarity index 100% rename from packages/opencode/README.md rename to packages/devora/README.md diff --git a/packages/opencode/bin/mimo b/packages/devora/bin/devora similarity index 93% rename from packages/opencode/bin/mimo rename to packages/devora/bin/devora index 333a7340..77ee8cbb 100755 --- a/packages/opencode/bin/mimo +++ b/packages/devora/bin/devora @@ -17,7 +17,7 @@ function run(target) { process.exit(code) } -const envPath = process.env.MIMOCODE_BIN_PATH +const envPath = process.env.DEVORA_BIN_PATH if (envPath) { run(envPath) } @@ -26,7 +26,7 @@ const scriptPath = fs.realpathSync(__filename) const scriptDir = path.dirname(scriptPath) // -const cached = path.join(scriptDir, ".mimocode") +const cached = path.join(scriptDir, ".devora") if (fs.existsSync(cached)) { run(cached) } @@ -50,8 +50,8 @@ let arch = archMap[os.arch()] if (!arch) { arch = os.arch() } -const base = "opencode-" + platform + "-" + arch -const binary = platform === "windows" ? "opencode.exe" : "opencode" +const base = "devora-" + platform + "-" + arch +const binary = platform === "windows" ? "devora.exe" : "devora" function supportsAvx2() { if (arch !== "x64") return false @@ -169,7 +169,7 @@ function findBinary(startDir) { const resolved = findBinary(scriptDir) if (!resolved) { console.error( - "It seems that your package manager failed to install the right version of the mimocode CLI for your platform. You can try manually installing " + + "It seems that your package manager failed to install the right version of the devora CLI for your platform. You can try manually installing " + names.map((n) => `\"${n}\"`).join(" or ") + " package", ) diff --git a/packages/opencode/bunfig.toml b/packages/devora/bunfig.toml similarity index 100% rename from packages/opencode/bunfig.toml rename to packages/devora/bunfig.toml diff --git a/packages/opencode/drizzle.config.ts b/packages/devora/drizzle.config.ts similarity index 75% rename from packages/opencode/drizzle.config.ts rename to packages/devora/drizzle.config.ts index 1b4fd556..a06f91aa 100644 --- a/packages/opencode/drizzle.config.ts +++ b/packages/devora/drizzle.config.ts @@ -5,6 +5,6 @@ export default defineConfig({ schema: "./src/**/*.sql.ts", out: "./migration", dbCredentials: { - url: "/home/thdxr/.local/share/opencode/opencode.db", + url: "/home/thdxr/.local/share/devora/devora.db", }, }) diff --git a/packages/opencode/git b/packages/devora/git similarity index 100% rename from packages/opencode/git rename to packages/devora/git diff --git a/packages/opencode/migration/20260127222353_familiar_lady_ursula/migration.sql b/packages/devora/migration/20260127222353_familiar_lady_ursula/migration.sql similarity index 100% rename from packages/opencode/migration/20260127222353_familiar_lady_ursula/migration.sql rename to packages/devora/migration/20260127222353_familiar_lady_ursula/migration.sql diff --git a/packages/opencode/migration/20260127222353_familiar_lady_ursula/snapshot.json b/packages/devora/migration/20260127222353_familiar_lady_ursula/snapshot.json similarity index 100% rename from packages/opencode/migration/20260127222353_familiar_lady_ursula/snapshot.json rename to packages/devora/migration/20260127222353_familiar_lady_ursula/snapshot.json diff --git a/packages/opencode/migration/20260211171708_add_project_commands/migration.sql b/packages/devora/migration/20260211171708_add_project_commands/migration.sql similarity index 100% rename from packages/opencode/migration/20260211171708_add_project_commands/migration.sql rename to packages/devora/migration/20260211171708_add_project_commands/migration.sql diff --git a/packages/opencode/migration/20260211171708_add_project_commands/snapshot.json b/packages/devora/migration/20260211171708_add_project_commands/snapshot.json similarity index 100% rename from packages/opencode/migration/20260211171708_add_project_commands/snapshot.json rename to packages/devora/migration/20260211171708_add_project_commands/snapshot.json diff --git a/packages/opencode/migration/20260213144116_wakeful_the_professor/migration.sql b/packages/devora/migration/20260213144116_wakeful_the_professor/migration.sql similarity index 100% rename from packages/opencode/migration/20260213144116_wakeful_the_professor/migration.sql rename to packages/devora/migration/20260213144116_wakeful_the_professor/migration.sql diff --git a/packages/opencode/migration/20260213144116_wakeful_the_professor/snapshot.json b/packages/devora/migration/20260213144116_wakeful_the_professor/snapshot.json similarity index 100% rename from packages/opencode/migration/20260213144116_wakeful_the_professor/snapshot.json rename to packages/devora/migration/20260213144116_wakeful_the_professor/snapshot.json diff --git a/packages/opencode/migration/20260225215848_workspace/migration.sql b/packages/devora/migration/20260225215848_workspace/migration.sql similarity index 100% rename from packages/opencode/migration/20260225215848_workspace/migration.sql rename to packages/devora/migration/20260225215848_workspace/migration.sql diff --git a/packages/opencode/migration/20260225215848_workspace/snapshot.json b/packages/devora/migration/20260225215848_workspace/snapshot.json similarity index 100% rename from packages/opencode/migration/20260225215848_workspace/snapshot.json rename to packages/devora/migration/20260225215848_workspace/snapshot.json diff --git a/packages/opencode/migration/20260227213759_add_session_workspace_id/migration.sql b/packages/devora/migration/20260227213759_add_session_workspace_id/migration.sql similarity index 100% rename from packages/opencode/migration/20260227213759_add_session_workspace_id/migration.sql rename to packages/devora/migration/20260227213759_add_session_workspace_id/migration.sql diff --git a/packages/opencode/migration/20260227213759_add_session_workspace_id/snapshot.json b/packages/devora/migration/20260227213759_add_session_workspace_id/snapshot.json similarity index 100% rename from packages/opencode/migration/20260227213759_add_session_workspace_id/snapshot.json rename to packages/devora/migration/20260227213759_add_session_workspace_id/snapshot.json diff --git a/packages/opencode/migration/20260228203230_blue_harpoon/migration.sql b/packages/devora/migration/20260228203230_blue_harpoon/migration.sql similarity index 100% rename from packages/opencode/migration/20260228203230_blue_harpoon/migration.sql rename to packages/devora/migration/20260228203230_blue_harpoon/migration.sql diff --git a/packages/opencode/migration/20260228203230_blue_harpoon/snapshot.json b/packages/devora/migration/20260228203230_blue_harpoon/snapshot.json similarity index 100% rename from packages/opencode/migration/20260228203230_blue_harpoon/snapshot.json rename to packages/devora/migration/20260228203230_blue_harpoon/snapshot.json diff --git a/packages/opencode/migration/20260303231226_add_workspace_fields/migration.sql b/packages/devora/migration/20260303231226_add_workspace_fields/migration.sql similarity index 100% rename from packages/opencode/migration/20260303231226_add_workspace_fields/migration.sql rename to packages/devora/migration/20260303231226_add_workspace_fields/migration.sql diff --git a/packages/opencode/migration/20260303231226_add_workspace_fields/snapshot.json b/packages/devora/migration/20260303231226_add_workspace_fields/snapshot.json similarity index 100% rename from packages/opencode/migration/20260303231226_add_workspace_fields/snapshot.json rename to packages/devora/migration/20260303231226_add_workspace_fields/snapshot.json diff --git a/packages/opencode/migration/20260309230000_move_org_to_state/migration.sql b/packages/devora/migration/20260309230000_move_org_to_state/migration.sql similarity index 100% rename from packages/opencode/migration/20260309230000_move_org_to_state/migration.sql rename to packages/devora/migration/20260309230000_move_org_to_state/migration.sql diff --git a/packages/opencode/migration/20260309230000_move_org_to_state/snapshot.json b/packages/devora/migration/20260309230000_move_org_to_state/snapshot.json similarity index 100% rename from packages/opencode/migration/20260309230000_move_org_to_state/snapshot.json rename to packages/devora/migration/20260309230000_move_org_to_state/snapshot.json diff --git a/packages/opencode/migration/20260312043431_session_message_cursor/migration.sql b/packages/devora/migration/20260312043431_session_message_cursor/migration.sql similarity index 100% rename from packages/opencode/migration/20260312043431_session_message_cursor/migration.sql rename to packages/devora/migration/20260312043431_session_message_cursor/migration.sql diff --git a/packages/opencode/migration/20260312043431_session_message_cursor/snapshot.json b/packages/devora/migration/20260312043431_session_message_cursor/snapshot.json similarity index 100% rename from packages/opencode/migration/20260312043431_session_message_cursor/snapshot.json rename to packages/devora/migration/20260312043431_session_message_cursor/snapshot.json diff --git a/packages/opencode/migration/20260323234822_events/migration.sql b/packages/devora/migration/20260323234822_events/migration.sql similarity index 100% rename from packages/opencode/migration/20260323234822_events/migration.sql rename to packages/devora/migration/20260323234822_events/migration.sql diff --git a/packages/opencode/migration/20260323234822_events/snapshot.json b/packages/devora/migration/20260323234822_events/snapshot.json similarity index 100% rename from packages/opencode/migration/20260323234822_events/snapshot.json rename to packages/devora/migration/20260323234822_events/snapshot.json diff --git a/packages/opencode/migration/20260410174513_workspace-name/migration.sql b/packages/devora/migration/20260410174513_workspace-name/migration.sql similarity index 100% rename from packages/opencode/migration/20260410174513_workspace-name/migration.sql rename to packages/devora/migration/20260410174513_workspace-name/migration.sql diff --git a/packages/opencode/migration/20260410174513_workspace-name/snapshot.json b/packages/devora/migration/20260410174513_workspace-name/snapshot.json similarity index 100% rename from packages/opencode/migration/20260410174513_workspace-name/snapshot.json rename to packages/devora/migration/20260410174513_workspace-name/snapshot.json diff --git a/packages/opencode/migration/20260413175956_chief_energizer/migration.sql b/packages/devora/migration/20260413175956_chief_energizer/migration.sql similarity index 100% rename from packages/opencode/migration/20260413175956_chief_energizer/migration.sql rename to packages/devora/migration/20260413175956_chief_energizer/migration.sql diff --git a/packages/opencode/migration/20260413175956_chief_energizer/snapshot.json b/packages/devora/migration/20260413175956_chief_energizer/snapshot.json similarity index 100% rename from packages/opencode/migration/20260413175956_chief_energizer/snapshot.json rename to packages/devora/migration/20260413175956_chief_energizer/snapshot.json diff --git a/packages/opencode/migration/20260422160000_context_inheritance/migration.sql b/packages/devora/migration/20260422160000_context_inheritance/migration.sql similarity index 100% rename from packages/opencode/migration/20260422160000_context_inheritance/migration.sql rename to packages/devora/migration/20260422160000_context_inheritance/migration.sql diff --git a/packages/opencode/migration/20260422170000_task_registry/migration.sql b/packages/devora/migration/20260422170000_task_registry/migration.sql similarity index 100% rename from packages/opencode/migration/20260422170000_task_registry/migration.sql rename to packages/devora/migration/20260422170000_task_registry/migration.sql diff --git a/packages/opencode/migration/20260423145421_remove_session_entry/migration.sql b/packages/devora/migration/20260423145421_remove_session_entry/migration.sql similarity index 100% rename from packages/opencode/migration/20260423145421_remove_session_entry/migration.sql rename to packages/devora/migration/20260423145421_remove_session_entry/migration.sql diff --git a/packages/opencode/migration/20260515000000_actor_rename/migration.sql b/packages/devora/migration/20260515000000_actor_rename/migration.sql similarity index 100% rename from packages/opencode/migration/20260515000000_actor_rename/migration.sql rename to packages/devora/migration/20260515000000_actor_rename/migration.sql diff --git a/packages/opencode/migration/20260515010000_memory_fts/migration.sql b/packages/devora/migration/20260515010000_memory_fts/migration.sql similarity index 100% rename from packages/opencode/migration/20260515010000_memory_fts/migration.sql rename to packages/devora/migration/20260515010000_memory_fts/migration.sql diff --git a/packages/opencode/migration/20260515020000_user_task/migration.sql b/packages/devora/migration/20260515020000_user_task/migration.sql similarity index 100% rename from packages/opencode/migration/20260515020000_user_task/migration.sql rename to packages/devora/migration/20260515020000_user_task/migration.sql diff --git a/packages/opencode/migration/20260519000000_last_checkpoint_message_id/migration.sql b/packages/devora/migration/20260519000000_last_checkpoint_message_id/migration.sql similarity index 100% rename from packages/opencode/migration/20260519000000_last_checkpoint_message_id/migration.sql rename to packages/devora/migration/20260519000000_last_checkpoint_message_id/migration.sql diff --git a/packages/opencode/migration/20260521000000_message_agent_id/migration.sql b/packages/devora/migration/20260521000000_message_agent_id/migration.sql similarity index 100% rename from packages/opencode/migration/20260521000000_message_agent_id/migration.sql rename to packages/devora/migration/20260521000000_message_agent_id/migration.sql diff --git a/packages/opencode/migration/20260521000100_actor_registry_v6/migration.sql b/packages/devora/migration/20260521000100_actor_registry_v6/migration.sql similarity index 100% rename from packages/opencode/migration/20260521000100_actor_registry_v6/migration.sql rename to packages/devora/migration/20260521000100_actor_registry_v6/migration.sql diff --git a/packages/opencode/migration/20260521010000_memory_fts_v6/migration.sql b/packages/devora/migration/20260521010000_memory_fts_v6/migration.sql similarity index 100% rename from packages/opencode/migration/20260521010000_memory_fts_v6/migration.sql rename to packages/devora/migration/20260521010000_memory_fts_v6/migration.sql diff --git a/packages/opencode/migration/20260521020000_memory_fts_triggers/migration.sql b/packages/devora/migration/20260521020000_memory_fts_triggers/migration.sql similarity index 100% rename from packages/opencode/migration/20260521020000_memory_fts_triggers/migration.sql rename to packages/devora/migration/20260521020000_memory_fts_triggers/migration.sql diff --git a/packages/opencode/migration/20260526000000_agent_id_main/migration.sql b/packages/devora/migration/20260526000000_agent_id_main/migration.sql similarity index 100% rename from packages/opencode/migration/20260526000000_agent_id_main/migration.sql rename to packages/devora/migration/20260526000000_agent_id_main/migration.sql diff --git a/packages/opencode/migration/20260527000000_actor_lifecycle/migration.sql b/packages/devora/migration/20260527000000_actor_lifecycle/migration.sql similarity index 100% rename from packages/opencode/migration/20260527000000_actor_lifecycle/migration.sql rename to packages/devora/migration/20260527000000_actor_lifecycle/migration.sql diff --git a/packages/opencode/migration/20260527000100_inbox/migration.sql b/packages/devora/migration/20260527000100_inbox/migration.sql similarity index 100% rename from packages/opencode/migration/20260527000100_inbox/migration.sql rename to packages/devora/migration/20260527000100_inbox/migration.sql diff --git a/packages/opencode/migration/20260529000000_task_todo_redesign/migration.sql b/packages/devora/migration/20260529000000_task_todo_redesign/migration.sql similarity index 100% rename from packages/opencode/migration/20260529000000_task_todo_redesign/migration.sql rename to packages/devora/migration/20260529000000_task_todo_redesign/migration.sql diff --git a/packages/opencode/migration/20260603000000_task_in_progress_owner/migration.sql b/packages/devora/migration/20260603000000_task_in_progress_owner/migration.sql similarity index 100% rename from packages/opencode/migration/20260603000000_task_in_progress_owner/migration.sql rename to packages/devora/migration/20260603000000_task_in_progress_owner/migration.sql diff --git a/packages/opencode/migration/20260603000000_workflow_run/migration.sql b/packages/devora/migration/20260603000000_workflow_run/migration.sql similarity index 100% rename from packages/opencode/migration/20260603000000_workflow_run/migration.sql rename to packages/devora/migration/20260603000000_workflow_run/migration.sql diff --git a/packages/opencode/migration/20260604000000_workflow_script_sha/migration.sql b/packages/devora/migration/20260604000000_workflow_script_sha/migration.sql similarity index 100% rename from packages/opencode/migration/20260604000000_workflow_script_sha/migration.sql rename to packages/devora/migration/20260604000000_workflow_script_sha/migration.sql diff --git a/packages/opencode/migration/20260608000000_claude_import/migration.sql b/packages/devora/migration/20260608000000_claude_import/migration.sql similarity index 100% rename from packages/opencode/migration/20260608000000_claude_import/migration.sql rename to packages/devora/migration/20260608000000_claude_import/migration.sql diff --git a/packages/opencode/migration/20260608010000_claude_import_message_ids/migration.sql b/packages/devora/migration/20260608010000_claude_import_message_ids/migration.sql similarity index 100% rename from packages/opencode/migration/20260608010000_claude_import_message_ids/migration.sql rename to packages/devora/migration/20260608010000_claude_import_message_ids/migration.sql diff --git a/packages/opencode/migration/20260609000000_history_fts/migration.sql b/packages/devora/migration/20260609000000_history_fts/migration.sql similarity index 100% rename from packages/opencode/migration/20260609000000_history_fts/migration.sql rename to packages/devora/migration/20260609000000_history_fts/migration.sql diff --git a/packages/opencode/migration/20260609230000_workflow_agent_timeout/migration.sql b/packages/devora/migration/20260609230000_workflow_agent_timeout/migration.sql similarity index 100% rename from packages/opencode/migration/20260609230000_workflow_agent_timeout/migration.sql rename to packages/devora/migration/20260609230000_workflow_agent_timeout/migration.sql diff --git a/packages/opencode/package.json b/packages/devora/package.json similarity index 94% rename from packages/opencode/package.json rename to packages/devora/package.json index 425ce8d4..f02db0a3 100644 --- a/packages/opencode/package.json +++ b/packages/devora/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "version": "0.1.0", - "name": "@mimo-ai/cli", + "name": "@devora-ai/cli", "type": "module", "license": "MIT", "publishConfig": { @@ -14,7 +14,7 @@ "test": "bun test --timeout 30000", "test:ci": "mkdir -p .artifacts/unit && bun test --timeout 30000 --reporter=junit --reporter-outfile=.artifacts/unit/junit.xml", "build": "bun run script/build.ts", - "build:dev": "OPENCODE_CHANNEL=prod bun run script/build.ts --single", + "build:dev": "DEVORA_CHANNEL=prod bun run script/build.ts --single", "fix-node-pty": "bun run script/fix-node-pty.ts", "upgrade-opentui": "bun run script/upgrade-opentui.ts", "dev": "bun run --conditions=browser ./src/index.ts", @@ -22,7 +22,7 @@ "db": "bun drizzle-kit" }, "bin": { - "mimo": "./bin/mimo" + "devora": "./bin/devora" }, "exports": { "./*": "./src/*.ts" @@ -48,8 +48,8 @@ "@babel/core": "7.28.4", "@effect/language-service": "0.84.2", "@octokit/webhooks-types": "7.6.1", - "@mimo-ai/script": "workspace:*", - "@mimo-ai/shared": "workspace:*", + "@devora-ai/script": "workspace:*", + "@devora-ai/shared": "workspace:*", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", @@ -114,10 +114,10 @@ "@hono/standard-validator": "0.1.5", "@hono/zod-validator": "catalog:", "@lydell/node-pty": "catalog:", - "@mimo-ai/plugin": "workspace:*", - "@mimo-ai/script": "workspace:*", - "@mimo-ai/sdk": "workspace:*", - "@mimo-ai/ui": "workspace:*", + "@devora-ai/plugin": "workspace:*", + "@devora-ai/script": "workspace:*", + "@devora-ai/sdk": "workspace:*", + "@devora-ai/ui": "workspace:*", "@modelcontextprotocol/sdk": "1.27.1", "@npmcli/arborist": "9.4.0", "@npmcli/config": "10.8.1", diff --git a/packages/opencode/parsers-config.ts b/packages/devora/parsers-config.ts similarity index 100% rename from packages/opencode/parsers-config.ts rename to packages/devora/parsers-config.ts diff --git a/packages/opencode/script/build-node.ts b/packages/devora/script/build-node.ts similarity index 87% rename from packages/opencode/script/build-node.ts rename to packages/devora/script/build-node.ts index 5d9c5178..9da7dd15 100755 --- a/packages/opencode/script/build-node.ts +++ b/packages/devora/script/build-node.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun -import { Script } from "@mimo-ai/script" +import { Script } from "@devora-ai/script" import fs from "fs" import path from "path" import { fileURLToPath } from "url" @@ -51,11 +51,12 @@ await Bun.build({ sourcemap: "linked", external: ["jsonc-parser", "@lydell/node-pty"], define: { - OPENCODE_MIGRATIONS: JSON.stringify(migrations), - OPENCODE_CHANNEL: `'${Script.channel}'`, + DEVORA_MIGRATIONS: JSON.stringify(migrations), + DEVORA_VERSION: `'${Script.version}'`, + DEVORA_CHANNEL: `'${Script.channel}'`, }, files: { - "opencode-web-ui.gen.ts": "", + "devora-web-ui.gen.ts": "", }, }) diff --git a/packages/opencode/script/build.ts b/packages/devora/script/build.ts similarity index 91% rename from packages/opencode/script/build.ts rename to packages/devora/script/build.ts index 65525dc4..f2f395c5 100755 --- a/packages/opencode/script/build.ts +++ b/packages/devora/script/build.ts @@ -14,10 +14,10 @@ process.chdir(dir) await import("./generate.ts") -import { Script } from "@mimo-ai/script" +import { Script } from "@devora-ai/script" import pkg from "../package.json" -const BINARY_PREFIX = "mimocode" +const BINARY_PREFIX = "devora" // Load migrations from migration directories const migrationDirs = ( @@ -208,25 +208,25 @@ for (const item of targets) { autoloadTsconfig: true, autoloadPackageJson: true, target: name.replace(BINARY_PREFIX, "bun") as any, - outfile: `dist/${name}/bin/mimo`, - execArgv: [`--user-agent=mimocode/${Script.version}`, "--use-system-ca", "--"], + outfile: `dist/${name}/bin/devora`, + execArgv: [`--user-agent=devora/${Script.version}`, "--use-system-ca", "--"], windows: {}, }, - files: embeddedFileMap ? { "opencode-web-ui.gen.ts": embeddedFileMap } : {}, - entrypoints: ["./src/index.ts", parserWorker, workerPath, ...(embeddedFileMap ? ["opencode-web-ui.gen.ts"] : [])], + files: embeddedFileMap ? { "devora-web-ui.gen.ts": embeddedFileMap } : {}, + entrypoints: ["./src/index.ts", parserWorker, workerPath, ...(embeddedFileMap ? ["devora-web-ui.gen.ts"] : [])], define: { - OPENCODE_VERSION: `'${Script.version}'`, - OPENCODE_MIGRATIONS: JSON.stringify(migrations), + DEVORA_VERSION: `'${Script.version}'`, + DEVORA_MIGRATIONS: JSON.stringify(migrations), OTUI_TREE_SITTER_WORKER_PATH: bunfsRoot + workerRelativePath, - OPENCODE_WORKER_PATH: workerPath, - OPENCODE_CHANNEL: `'${Script.channel}'`, - OPENCODE_LIBC: item.os === "linux" ? `'${item.abi ?? "glibc"}'` : "", + DEVORA_WORKER_PATH: workerPath, + DEVORA_CHANNEL: `'${Script.channel}'`, + DEVORA_LIBC: item.os === "linux" ? `'${item.abi ?? "glibc"}'` : "", }, }) // Smoke test: only run if binary is for current platform if (item.os === process.platform && item.arch === process.arch && !item.abi) { - const binaryPath = `dist/${name}/bin/mimo` + const binaryPath = `dist/${name}/bin/devora` console.log(`Running smoke test: ${binaryPath} --version`) try { const versionOutput = await $`${binaryPath} --version`.text() diff --git a/packages/opencode/script/check-migrations.ts b/packages/devora/script/check-migrations.ts similarity index 100% rename from packages/opencode/script/check-migrations.ts rename to packages/devora/script/check-migrations.ts diff --git a/packages/opencode/script/fix-node-pty.ts b/packages/devora/script/fix-node-pty.ts similarity index 100% rename from packages/opencode/script/fix-node-pty.ts rename to packages/devora/script/fix-node-pty.ts diff --git a/packages/opencode/script/generate.ts b/packages/devora/script/generate.ts similarity index 61% rename from packages/opencode/script/generate.ts rename to packages/devora/script/generate.ts index 26748821..65251d35 100644 --- a/packages/opencode/script/generate.ts +++ b/packages/devora/script/generate.ts @@ -7,11 +7,19 @@ const dir = path.resolve(__dirname, "..") process.chdir(dir) -const modelsUrl = process.env.MIMOCODE_MODELS_URL || "https://models.dev" +const modelsUrl = process.env.DEVORA_MODELS_URL || "https://models.dev" // Fetch and generate models.dev snapshot -const modelsData = process.env.MODELS_DEV_API_JSON +const modelsRaw = process.env.MODELS_DEV_API_JSON ? await Bun.file(process.env.MODELS_DEV_API_JSON).text() : await fetch(`${modelsUrl}/api.json`).then((x) => x.text()) +const blockedProviderPattern = new RegExp([["xi", "ao", "mi"].join(""), ["mi", "mo"].join("")].join("|"), "i") +const modelsData = JSON.stringify( + Object.fromEntries( + Object.entries(JSON.parse(modelsRaw) as Record).filter( + ([providerID, provider]) => !blockedProviderPattern.test(JSON.stringify({ providerID, provider })), + ), + ), +) await Bun.write( path.join(dir, "src/provider/models-snapshot.js"), `// @ts-nocheck\n// Auto-generated by build.ts - do not edit\nexport const snapshot = ${modelsData}\n`, diff --git a/packages/opencode/script/postinstall.mjs b/packages/devora/script/postinstall.mjs similarity index 90% rename from packages/opencode/script/postinstall.mjs rename to packages/devora/script/postinstall.mjs index 7c6f85d2..9afe04ac 100644 --- a/packages/opencode/script/postinstall.mjs +++ b/packages/devora/script/postinstall.mjs @@ -49,8 +49,8 @@ function detectPlatformAndArch() { function findBinary() { const { platform, arch } = detectPlatformAndArch() - const packageName = `opencode-${platform}-${arch}` - const binaryName = platform === "windows" ? "opencode.exe" : "opencode" + const packageName = `devora-${platform}-${arch}` + const binaryName = platform === "windows" ? "devora.exe" : "devora" try { // Use require.resolve to find the package @@ -80,7 +80,7 @@ async function main() { // On non-Windows platforms, just verify the binary package exists // Don't replace the wrapper script - it handles binary execution const { binaryPath } = findBinary() - const target = path.join(__dirname, "bin", ".opencode") + const target = path.join(__dirname, "bin", ".devora") if (fs.existsSync(target)) fs.unlinkSync(target) try { fs.linkSync(binaryPath, target) @@ -89,7 +89,7 @@ async function main() { } fs.chmodSync(target, 0o755) } catch (error) { - console.error("Failed to setup opencode binary:", error.message) + console.error("Failed to setup devora binary:", error.message) process.exit(1) } } diff --git a/packages/opencode/script/publish.ts b/packages/devora/script/publish.ts similarity index 95% rename from packages/opencode/script/publish.ts rename to packages/devora/script/publish.ts index f8596ccd..6bfe0858 100755 --- a/packages/opencode/script/publish.ts +++ b/packages/devora/script/publish.ts @@ -1,7 +1,7 @@ #!/usr/bin/env bun import { $ } from "bun" import pkg from "../package.json" -import { Script } from "@mimo-ai/script" +import { Script } from "@devora-ai/script" import { fileURLToPath } from "url" const dir = fileURLToPath(new URL("..", import.meta.url)) @@ -39,7 +39,7 @@ await Bun.file(`./dist/${pkg.name}/package.json`).write( { name: pkg.name, bin: { - mimo: "./bin/mimo", + devora: "./bin/devora", }, scripts: { postinstall: "bun ./postinstall.mjs || node ./postinstall.mjs", diff --git a/packages/opencode/script/run-workspace-server b/packages/devora/script/run-workspace-server similarity index 87% rename from packages/opencode/script/run-workspace-server rename to packages/devora/script/run-workspace-server index 4371a157..1598a319 100755 --- a/packages/opencode/script/run-workspace-server +++ b/packages/devora/script/run-workspace-server @@ -1,20 +1,20 @@ #!/usr/bin/env bun -// This script runs a separate OpenCode server to be used as a remote +// This script runs a separate Devora server to be used as a remote // workspace, simulating a remote environment but all local to make // debugger easier // // *Important*: make sure you add the debug workspace plugin first. -// In `.opencode/opencode.jsonc` in the root of this project add: +// In `.devora/devora.jsonc` in the root of this project add: // -// "plugin": ["../packages/opencode/src/control-plane/dev/debug-workspace-plugin.ts"] +// "plugin": ["../packages/devora/src/control-plane/dev/debug-workspace-plugin.ts"] // -// Afterwards, run `./packages/opencode/script/run-workspace-server` +// Afterwards, run `./packages/devora/script/run-workspace-server` import { stat } from "node:fs/promises" import { setTimeout as sleep } from "node:timers/promises" -const DEV_DATA_FILE = "/tmp/opencode-workspace-dev-data.json" +const DEV_DATA_FILE = "/tmp/devora-workspace-dev-data.json" const RESTART_POLL_INTERVAL = 250 async function readData() { diff --git a/packages/opencode/script/schema.ts b/packages/devora/script/schema.ts similarity index 100% rename from packages/opencode/script/schema.ts rename to packages/devora/script/schema.ts diff --git a/packages/opencode/script/time.ts b/packages/devora/script/time.ts similarity index 100% rename from packages/opencode/script/time.ts rename to packages/devora/script/time.ts diff --git a/packages/opencode/script/trace-imports.ts b/packages/devora/script/trace-imports.ts similarity index 98% rename from packages/opencode/script/trace-imports.ts rename to packages/devora/script/trace-imports.ts index 3aad3385..c8d13276 100755 --- a/packages/opencode/script/trace-imports.ts +++ b/packages/devora/script/trace-imports.ts @@ -2,7 +2,7 @@ import * as path from "path" import * as ts from "typescript" -const BASE_DIR = "/home/thdxr/dev/projects/anomalyco/opencode/packages/opencode" +const BASE_DIR = process.env.DEVORA_TRACE_BASE_DIR ?? process.cwd() // Get entry file from command line arg or use default const ENTRY_FILE = process.argv[2] || "src/cli/cmd/tui/plugin/index.ts" diff --git a/packages/opencode/script/upgrade-opentui.ts b/packages/devora/script/upgrade-opentui.ts similarity index 95% rename from packages/opencode/script/upgrade-opentui.ts rename to packages/devora/script/upgrade-opentui.ts index 615a4077..33d0d472 100644 --- a/packages/opencode/script/upgrade-opentui.ts +++ b/packages/devora/script/upgrade-opentui.ts @@ -10,7 +10,7 @@ if (!raw) { const ver = raw.replace(/^v/, "") const root = path.resolve(import.meta.dir, "../../..") -const skip = new Set([".git", ".opencode", ".turbo", "dist", "node_modules"]) +const skip = new Set([".git", ".devora", ".turbo", "dist", "node_modules"]) const keys = ["@opentui/core", "@opentui/solid"] as const const files = (await Array.fromAsync(new Bun.Glob("**/package.json").scan({ cwd: root }))).filter( diff --git a/packages/opencode/src/account/account.sql.ts b/packages/devora/src/account/account.sql.ts similarity index 100% rename from packages/opencode/src/account/account.sql.ts rename to packages/devora/src/account/account.sql.ts diff --git a/packages/opencode/src/account/account.ts b/packages/devora/src/account/account.ts similarity index 99% rename from packages/opencode/src/account/account.ts rename to packages/devora/src/account/account.ts index a0aed88c..27935d81 100644 --- a/packages/opencode/src/account/account.ts +++ b/packages/devora/src/account/account.ts @@ -131,7 +131,7 @@ class TokenRefreshRequest extends Schema.Class("TokenRefres client_id: Schema.String, }) {} -const clientId = "opencode-cli" +const clientId = "devora-cli" const eagerRefreshThreshold = Duration.minutes(5) const eagerRefreshThresholdMs = Duration.toMillis(eagerRefreshThreshold) @@ -179,7 +179,7 @@ export interface Interface { readonly poll: (input: Login) => Effect.Effect } -export class Service extends Context.Service()("@opencode/Account") {} +export class Service extends Context.Service()("@devora/Account") {} export const layer: Layer.Layer = Layer.effect( Service, diff --git a/packages/opencode/src/account/repo.ts b/packages/devora/src/account/repo.ts similarity index 99% rename from packages/opencode/src/account/repo.ts rename to packages/devora/src/account/repo.ts index 5596e000..37ecf962 100644 --- a/packages/opencode/src/account/repo.ts +++ b/packages/devora/src/account/repo.ts @@ -36,7 +36,7 @@ export interface Interface { }) => Effect.Effect } -export class Service extends Context.Service()("@opencode/AccountRepo") {} +export class Service extends Context.Service()("@devora/AccountRepo") {} export const layer: Layer.Layer = Layer.effect( Service, diff --git a/packages/opencode/src/account/schema.ts b/packages/devora/src/account/schema.ts similarity index 100% rename from packages/opencode/src/account/schema.ts rename to packages/devora/src/account/schema.ts diff --git a/packages/opencode/src/account/url.ts b/packages/devora/src/account/url.ts similarity index 100% rename from packages/opencode/src/account/url.ts rename to packages/devora/src/account/url.ts diff --git a/packages/opencode/src/acp/README.md b/packages/devora/src/acp/README.md similarity index 91% rename from packages/opencode/src/acp/README.md rename to packages/devora/src/acp/README.md index aab33259..55830c89 100644 --- a/packages/opencode/src/acp/README.md +++ b/packages/devora/src/acp/README.md @@ -1,6 +1,6 @@ # ACP (Agent Client Protocol) Implementation -This directory contains a clean, protocol-compliant implementation of the [Agent Client Protocol](https://agentclientprotocol.com/) for opencode. +This directory contains a clean, protocol-compliant implementation of the [Agent Client Protocol](https://agentclientprotocol.com/) for devora. ## Architecture @@ -21,7 +21,7 @@ The implementation follows a clean separation of concerns: - **`session.ts`** - Session state management - Creates and tracks ACP sessions - - Maps ACP sessions to internal opencode sessions + - Maps ACP sessions to internal devora sessions - Maintains working directory context - Handles MCP server configurations @@ -38,10 +38,10 @@ The implementation follows a clean separation of concerns: ```bash # Start the ACP server in the current directory -opencode acp +devora acp # Start in a specific directory -opencode acp --cwd /path/to/project +devora acp --cwd /path/to/project ``` ### Question Tool Opt-In @@ -49,7 +49,7 @@ opencode acp --cwd /path/to/project ACP excludes `QuestionTool` by default. ```bash -OPENCODE_ENABLE_QUESTION_TOOL=1 opencode acp +DEVORA_ENABLE_QUESTION_TOOL=1 devora acp ``` Enable this only for ACP clients that support interactive question prompts. @@ -69,8 +69,8 @@ Add to your Zed configuration (`~/.config/zed/settings.json`): ```json { "agent_servers": { - "OpenCode": { - "command": "opencode", + "Devora": { + "command": "devora", "args": ["acp"] } } @@ -124,7 +124,7 @@ This implementation follows the ACP specification v1: - **Session Persistence**: Save and restore full conversation history - **Mode Support**: Implement different operational modes (ask, code, etc.) - **Enhanced Permissions**: More sophisticated permission handling -- **Terminal Integration**: Full terminal support via opencode's bash tool +- **Terminal Integration**: Full terminal support via devora's bash tool ## Testing @@ -133,7 +133,7 @@ This implementation follows the ACP specification v1: bun test test/acp.test.ts # Test manually with stdio -echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' | opencode acp +echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' | devora acp ``` ## Design Decisions @@ -158,9 +158,9 @@ Each component has a single responsibility: This makes the codebase maintainable and testable. -### Mapping to OpenCode +### Mapping to Devora -ACP sessions map cleanly to opencode's internal session model: +ACP sessions map cleanly to devora's internal session model: - ACP `session/new` → creates internal Session - ACP `session/prompt` → uses SessionPrompt.prompt() diff --git a/packages/opencode/src/acp/agent.ts b/packages/devora/src/acp/agent.ts similarity index 98% rename from packages/opencode/src/acp/agent.ts rename to packages/devora/src/acp/agent.ts index a3f2ebd0..8990ec5a 100644 --- a/packages/opencode/src/acp/agent.ts +++ b/packages/devora/src/acp/agent.ts @@ -33,7 +33,7 @@ import { import { Log } from "../util" import { pathToFileURL } from "url" import { Filesystem } from "../util" -import { Hash } from "@mimo-ai/shared/util/hash" +import { Hash } from "@devora-ai/shared/util/hash" import { ACPSessionManager } from "./session" import type { ACPConfig } from "./types" import { Provider } from "../provider" @@ -46,7 +46,7 @@ import { Config } from "@/config" import { ConfigMCP } from "@/config/mcp" import { z } from "zod" import { LoadAPIKeyError } from "ai" -import type { AssistantMessage, Event, OpencodeClient, SessionMessageResponse, ToolPart } from "@mimo-ai/sdk/v2" +import type { AssistantMessage, Event, DevoraClient, SessionMessageResponse, ToolPart } from "@devora-ai/sdk/v2" import { applyPatch } from "diff" import { InstallationVersion } from "@/installation/version" @@ -58,7 +58,7 @@ const DEFAULT_VARIANT_VALUE = "default" const log = Log.create({ service: "acp-agent" }) async function getContextLimit( - sdk: OpencodeClient, + sdk: DevoraClient, providerID: ProviderID, modelID: ModelID, directory: string, @@ -78,7 +78,7 @@ async function getContextLimit( async function sendUsageUpdate( connection: AgentSideConnection, - sdk: OpencodeClient, + sdk: DevoraClient, sessionID: string, directory: string, ): Promise { @@ -126,7 +126,7 @@ async function sendUsageUpdate( }) } -export async function init({ sdk: _sdk }: { sdk: OpencodeClient }) { +export async function init({ sdk: _sdk }: { sdk: DevoraClient }) { return { create: (connection: AgentSideConnection, fullConfig: ACPConfig) => { return new Agent(connection, fullConfig) @@ -137,7 +137,7 @@ export async function init({ sdk: _sdk }: { sdk: OpencodeClient }) { export class Agent implements ACPAgent { private connection: AgentSideConnection private config: ACPConfig - private sdk: OpencodeClient + private sdk: DevoraClient private sessionManager: ACPSessionManager private eventAbort = new AbortController() private eventStarted = false @@ -505,18 +505,18 @@ export class Agent implements ACPAgent { log.info("initialize", { protocolVersion: params.protocolVersion }) const authMethod: AuthMethod = { - description: "Run `opencode auth login` in the terminal", - name: "Login with opencode", - id: "opencode-login", + description: "Run `devora auth login` in the terminal", + name: "Login with devora", + id: "devora-login", } // If client supports terminal-auth capability, use that instead. if (params.clientCapabilities?._meta?.["terminal-auth"] === true) { authMethod._meta = { "terminal-auth": { - command: "opencode", + command: "devora", args: ["auth", "login"], - label: "OpenCode Login", + label: "Devora Login", }, } } @@ -541,7 +541,7 @@ export class Agent implements ACPAgent { }, authMethods: [authMethod], agentInfo: { - name: "OpenCode", + name: "Devora", version: InstallationVersion, }, } @@ -949,7 +949,7 @@ export class Agent implements ACPAgent { } } else if (part.type === "file") { // Replay file attachments as appropriate ACP content blocks. - // OpenCode stores files internally as { type: "file", url, filename, mime }. + // Devora 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 @@ -1570,12 +1570,12 @@ async function defaultModel(config: ACPConfig, cwd?: string): Promise<{ provider if (specified && !providers.length) return specified - const opencodeProvider = providers.find((p) => p.id === "opencode") - if (opencodeProvider) { - if (opencodeProvider.models["big-pickle"]) { - return { providerID: ProviderID.opencode, modelID: ModelID.make("big-pickle") } + const devoraProvider = providers.find((p) => p.id === "devora") + if (devoraProvider) { + if (devoraProvider.models["big-pickle"]) { + return { providerID: ProviderID.devora, modelID: ModelID.make("big-pickle") } } - const [best] = Provider.sort(Object.values(opencodeProvider.models)) + const [best] = Provider.sort(Object.values(devoraProvider.models)) if (best) { return { providerID: ProviderID.make(best.providerID), @@ -1595,7 +1595,7 @@ async function defaultModel(config: ACPConfig, cwd?: string): Promise<{ provider if (specified) return specified - return { providerID: ProviderID.opencode, modelID: ModelID.make("big-pickle") } + return { providerID: ProviderID.devora, modelID: ModelID.make("big-pickle") } } function parseUri( @@ -1708,7 +1708,7 @@ function buildVariantMeta(input: { availableVariants: string[] }) { return { - opencode: { + devora: { modelId: `${input.model.providerID}/${input.model.modelID}`, variant: input.variant ?? null, availableVariants: input.availableVariants, diff --git a/packages/opencode/src/acp/session.ts b/packages/devora/src/acp/session.ts similarity index 95% rename from packages/opencode/src/acp/session.ts rename to packages/devora/src/acp/session.ts index e5e65e9e..b9f9f313 100644 --- a/packages/opencode/src/acp/session.ts +++ b/packages/devora/src/acp/session.ts @@ -1,15 +1,15 @@ import { RequestError, type McpServer } from "@agentclientprotocol/sdk" import type { ACPSessionState } from "./types" import { Log } from "@/util" -import type { OpencodeClient } from "@mimo-ai/sdk/v2" +import type { DevoraClient } from "@devora-ai/sdk/v2" const log = Log.create({ service: "acp-session-manager" }) export class ACPSessionManager { private sessions = new Map() - private sdk: OpencodeClient + private sdk: DevoraClient - constructor(sdk: OpencodeClient) { + constructor(sdk: DevoraClient) { this.sdk = sdk } diff --git a/packages/opencode/src/acp/types.ts b/packages/devora/src/acp/types.ts similarity index 85% rename from packages/opencode/src/acp/types.ts rename to packages/devora/src/acp/types.ts index 3584028f..989a5244 100644 --- a/packages/opencode/src/acp/types.ts +++ b/packages/devora/src/acp/types.ts @@ -1,5 +1,5 @@ import type { McpServer } from "@agentclientprotocol/sdk" -import type { OpencodeClient } from "@mimo-ai/sdk/v2" +import type { DevoraClient } from "@devora-ai/sdk/v2" import type { ProviderID, ModelID } from "../provider/schema" export interface ACPSessionState { @@ -16,7 +16,7 @@ export interface ACPSessionState { } export interface ACPConfig { - sdk: OpencodeClient + sdk: DevoraClient defaultModel?: { providerID: ProviderID modelID: ModelID diff --git a/packages/opencode/src/actor/actor.sql.ts b/packages/devora/src/actor/actor.sql.ts similarity index 100% rename from packages/opencode/src/actor/actor.sql.ts rename to packages/devora/src/actor/actor.sql.ts diff --git a/packages/opencode/src/actor/events.ts b/packages/devora/src/actor/events.ts similarity index 100% rename from packages/opencode/src/actor/events.ts rename to packages/devora/src/actor/events.ts diff --git a/packages/opencode/src/actor/index.ts b/packages/devora/src/actor/index.ts similarity index 100% rename from packages/opencode/src/actor/index.ts rename to packages/devora/src/actor/index.ts diff --git a/packages/opencode/src/actor/registry.ts b/packages/devora/src/actor/registry.ts similarity index 99% rename from packages/opencode/src/actor/registry.ts rename to packages/devora/src/actor/registry.ts index 3347cd4f..588cb2e5 100644 --- a/packages/opencode/src/actor/registry.ts +++ b/packages/devora/src/actor/registry.ts @@ -76,7 +76,7 @@ export interface Interface { readonly allocateActorID: (sessionID: SessionID, agentType: string) => Effect.Effect } -export class Service extends Context.Service()("@opencode/ActorRegistry") {} +export class Service extends Context.Service()("@devora/ActorRegistry") {} export const layer: Layer.Layer = Layer.effect( Service, diff --git a/packages/opencode/src/actor/return-header.ts b/packages/devora/src/actor/return-header.ts similarity index 100% rename from packages/opencode/src/actor/return-header.ts rename to packages/devora/src/actor/return-header.ts diff --git a/packages/opencode/src/actor/schema.ts b/packages/devora/src/actor/schema.ts similarity index 100% rename from packages/opencode/src/actor/schema.ts rename to packages/devora/src/actor/schema.ts diff --git a/packages/opencode/src/actor/spawn-ref.ts b/packages/devora/src/actor/spawn-ref.ts similarity index 100% rename from packages/opencode/src/actor/spawn-ref.ts rename to packages/devora/src/actor/spawn-ref.ts diff --git a/packages/opencode/src/actor/spawn.ts b/packages/devora/src/actor/spawn.ts similarity index 99% rename from packages/opencode/src/actor/spawn.ts rename to packages/devora/src/actor/spawn.ts index b846dde4..9058c56d 100644 --- a/packages/opencode/src/actor/spawn.ts +++ b/packages/devora/src/actor/spawn.ts @@ -25,7 +25,7 @@ const log = Log.create({ service: "actor.spawn" }) /** * Cap on preStop ReAct re-entries per spawn — prevents infinite loops. - * TODO: lift to mimocode.json config (e.g. actor.maxPreReact) and add per-hook + * TODO: lift to devora.json config (e.g. actor.maxPreReact) and add per-hook * `maxContinue` clamp at registration. Plan: platform cap = hard ceiling, hook * cap may only narrow, never widen. See spec Future work. */ @@ -171,7 +171,7 @@ export interface Interface { readonly getForkContext: (actorID: string) => Effect.Effect } -export class Service extends Context.Service()("@opencode/Actor") {} +export class Service extends Context.Service()("@devora/Actor") {} export const layer = Layer.effect( Service, @@ -305,7 +305,7 @@ export const layer = Layer.effect( // runtime tool-stripping only under a session-level override — e.g. session "*":allow // un-stripping a read-only agent's write (we skip though runtime allows), or session // "*":deny on a writable agent (we nudge though runtime strips). Both are deliberately - // ignored: not reachable in normal usage (mimo run sets no such rule, spawn doesn't + // ignored: not reachable in normal usage (devora run sets no such rule, spawn doesn't // rewrite session.permission). See spec §Decision. Unknown agent → fail-open (true). const forkAgentInfo = yield* agents.get(input.agentType) const canWrite = forkAgentInfo ? !Permission.disabled(["write"], forkAgentInfo.permission).has("write") : true diff --git a/packages/opencode/src/actor/turn.ts b/packages/devora/src/actor/turn.ts similarity index 100% rename from packages/opencode/src/actor/turn.ts rename to packages/devora/src/actor/turn.ts diff --git a/packages/opencode/src/actor/waiter.ts b/packages/devora/src/actor/waiter.ts similarity index 99% rename from packages/opencode/src/actor/waiter.ts rename to packages/devora/src/actor/waiter.ts index 5300ca8f..f11e9057 100644 --- a/packages/opencode/src/actor/waiter.ts +++ b/packages/devora/src/actor/waiter.ts @@ -47,7 +47,7 @@ export interface Interface { }) => Effect.Effect } -export class Service extends Context.Service()("@opencode/ActorWaiter") {} +export class Service extends Context.Service()("@devora/ActorWaiter") {} export const layer: Layer.Layer = Layer.effect( Service, diff --git a/packages/opencode/src/agent/agent.ts b/packages/devora/src/agent/agent.ts similarity index 99% rename from packages/opencode/src/agent/agent.ts rename to packages/devora/src/agent/agent.ts index ff342ff2..9e3ac483 100644 --- a/packages/opencode/src/agent/agent.ts +++ b/packages/devora/src/agent/agent.ts @@ -71,7 +71,7 @@ export interface Interface { type State = Omit -export class Service extends Context.Service()("@opencode/Agent") {} +export class Service extends Context.Service()("@devora/Agent") {} export const layer = Layer.effect( Service, @@ -165,7 +165,7 @@ export const layer = Layer.effect( }, edit: { "*": "deny", - [path.join(".mimocode", "plans", "*.md")]: "allow", + [path.join(".devora", "plans", "*.md")]: "allow", [path.relative(Instance.worktree, path.join(Global.Path.data, path.join("plans", "*.md")))]: "allow", }, }), diff --git a/packages/opencode/src/agent/config.ts b/packages/devora/src/agent/config.ts similarity index 100% rename from packages/opencode/src/agent/config.ts rename to packages/devora/src/agent/config.ts diff --git a/packages/opencode/src/agent/generate.txt b/packages/devora/src/agent/generate.txt similarity index 100% rename from packages/opencode/src/agent/generate.txt rename to packages/devora/src/agent/generate.txt diff --git a/packages/opencode/src/agent/prompt/checkpoint-writer.txt b/packages/devora/src/agent/prompt/checkpoint-writer.txt similarity index 100% rename from packages/opencode/src/agent/prompt/checkpoint-writer.txt rename to packages/devora/src/agent/prompt/checkpoint-writer.txt diff --git a/packages/opencode/src/agent/prompt/compaction.txt b/packages/devora/src/agent/prompt/compaction.txt similarity index 100% rename from packages/opencode/src/agent/prompt/compaction.txt rename to packages/devora/src/agent/prompt/compaction.txt diff --git a/packages/opencode/src/agent/prompt/distill.txt b/packages/devora/src/agent/prompt/distill.txt similarity index 89% rename from packages/opencode/src/agent/prompt/distill.txt rename to packages/devora/src/agent/prompt/distill.txt index 912ead66..8511d1e7 100644 --- a/packages/opencode/src/agent/prompt/distill.txt +++ b/packages/devora/src/agent/prompt/distill.txt @@ -14,14 +14,14 @@ You have bash access for inspection and SQLite queries, but use it carefully. Use available evidence in this order: -1. Recent mimocode sessions and their assistant work, from the raw trajectory +1. Recent devora sessions and their assistant work, from the raw trajectory database. This is the source of truth for what actually happened. 2. Memory files (project `MEMORY.md`, session `checkpoint.md`, `notes.md`, `tasks/*/progress.md`) to find patterns repeated across sessions. 3. Existing skills, custom agents, custom commands, and plugins, so you reuse or extend what already exists instead of duplicating it. -Trajectory database: `/mimocode.db` (SQLite, read-only) +Trajectory database: `/devora.db` (SQLite, read-only) Memory files root: `/memory/` ## Ground Rules @@ -46,8 +46,8 @@ Memory files root: `/memory/` time", "rule", and "decision". 2. Use Glob/Read to inspect the memory paths from the system memory instructions. 3. Use bash to locate the database: - - Infer `/mimocode.db` from the resolved memory root. - - If `MIMOCODE_DB` is visible in the shell environment, account for its + - Infer `/devora.db` from the resolved memory root. + - If `DEVORA_DB` is visible in the shell environment, account for its override behavior. - Treat the resolved database path as read-only. 4. If there is no recent project activity and memory is empty, report "Nothing to @@ -58,13 +58,13 @@ Memory files root: `/memory/` Before proposing anything, know what already exists so you reuse or extend rather than duplicate. -- Skills: Glob `{skill,skills}/**/SKILL.md` under the project `.mimocode/` dir, +- Skills: Glob `{skill,skills}/**/SKILL.md` under the project `.devora/` dir, any config directories, and the home external dirs (`.claude`, `.agents`, - `.codex`, `.opencode`). Read each one's name + description. + `.codex`, `.devora`). Read each one's name + description. - Custom commands: Glob `{command,commands}/**/*.md` under config directories. - Custom agents: Glob `{agent,agents}/**/*.md` and `{mode,modes}/*.md` under config directories. -- Plugins: Glob `.mimocode/plugin*/**` for existing automation hooks. +- Plugins: Glob `.devora/plugin*/**` for existing automation hooks. Record what each asset already covers. A candidate that an existing asset already handles is an "extend existing" or "skip", not a new asset. @@ -151,18 +151,18 @@ For each high-confidence candidate, pick the smallest appropriate form: - Skill - a reusable workflow or playbook. Write `SKILL.md` with YAML frontmatter (`name`, `description`) under the project - `.mimocode/skills//` directory. Use a focused, imperative description so + `.devora/skills//` directory. Use a focused, imperative description so it is discoverable. - Custom subagent - a bounded specialist role or investigation task suitable for - delegation. Write `.mimocode/agent/.md` with frontmatter + delegation. Write `.devora/agent/.md` with frontmatter (`description`, optional `mode`, `model`, `tools`/permission) and the system prompt as the body. - Command - a parameterized prompt for a recurring task. Write - `.mimocode/command/.md` with frontmatter (`description`, optional + `.devora/command/.md` with frontmatter (`description`, optional `agent`) and a template body using `$ARGUMENTS` / `$1` placeholders. -- Automation - mimocode has no built-in scheduler. Package recurring work as a +- Automation - devora has no built-in scheduler. Package recurring work as a command the user can re-run, or, only if clearly justified, a plugin lifecycle - hook under `.mimocode/plugins/`. Do not invent a scheduler. If a true schedule + hook under `.devora/plugins/`. Do not invent a scheduler. If a true schedule is needed, recommend it and explain the manual trigger instead. - Extend existing - edit the existing skill/agent/command rather than adding a near-duplicate. @@ -174,7 +174,7 @@ For each high-confidence candidate, pick the smallest appropriate form: Create only the high-confidence missing items. Keep them narrow, practical, source-aware, and easy to validate. -- Write to the project `.mimocode/` directory unless the user asked for global +- Write to the project `.devora/` directory unless the user asked for global scope. - Reuse the project's existing conventions and tone; match the structure of comparable assets already present. diff --git a/packages/opencode/src/agent/prompt/dream.txt b/packages/devora/src/agent/prompt/dream.txt similarity index 96% rename from packages/opencode/src/agent/prompt/dream.txt rename to packages/devora/src/agent/prompt/dream.txt index 019d6da2..850292d0 100644 --- a/packages/opencode/src/agent/prompt/dream.txt +++ b/packages/devora/src/agent/prompt/dream.txt @@ -3,7 +3,7 @@ You consolidate durable project memory from two sources: 1. Memory files under the data directory's memory tree. -2. Raw mimocode trajectory in the local SQLite database. +2. Raw devora trajectory in the local SQLite database. Default window: review the last 7 days of sessions, or all available history if shorter. @@ -12,7 +12,7 @@ You have bash access for inspection and SQLite queries, but use it carefully. ## Data Source -Trajectory database: `/mimocode.db` (SQLite, read-only) +Trajectory database: `/devora.db` (SQLite, read-only) Memory files root: `/memory/` ## Ground Rules @@ -31,8 +31,8 @@ Memory files root: `/memory/` 1. Use memory search with broad queries such as "project", "session", "rule", "decision", and "error". 2. Use Glob/Read to inspect the memory paths from the system memory instructions. 3. Use bash to locate the database: - - Infer `/mimocode.db` from the resolved memory root. - - If `MIMOCODE_DB` is visible in the shell environment, account for its override behavior. + - Infer `/devora.db` from the resolved memory root. + - If `DEVORA_DB` is visible in the shell environment, account for its override behavior. - Treat the resolved database path as read-only. 4. If memory is empty and the database has no current project sessions, report "Nothing to consolidate - memory is empty" and stop. diff --git a/packages/opencode/src/agent/prompt/explore.txt b/packages/devora/src/agent/prompt/explore.txt similarity index 100% rename from packages/opencode/src/agent/prompt/explore.txt rename to packages/devora/src/agent/prompt/explore.txt diff --git a/packages/opencode/src/agent/prompt/summary.txt b/packages/devora/src/agent/prompt/summary.txt similarity index 100% rename from packages/opencode/src/agent/prompt/summary.txt rename to packages/devora/src/agent/prompt/summary.txt diff --git a/packages/opencode/src/agent/prompt/title.txt b/packages/devora/src/agent/prompt/title.txt similarity index 100% rename from packages/opencode/src/agent/prompt/title.txt rename to packages/devora/src/agent/prompt/title.txt diff --git a/packages/opencode/src/audio.d.ts b/packages/devora/src/audio.d.ts similarity index 100% rename from packages/opencode/src/audio.d.ts rename to packages/devora/src/audio.d.ts diff --git a/packages/opencode/src/auth/index.ts b/packages/devora/src/auth/index.ts similarity index 92% rename from packages/opencode/src/auth/index.ts rename to packages/devora/src/auth/index.ts index b9698b98..c81fc7d1 100644 --- a/packages/opencode/src/auth/index.ts +++ b/packages/devora/src/auth/index.ts @@ -2,9 +2,9 @@ import path from "path" import { Effect, Layer, Record, Result, Schema, Context } from "effect" import { zod } from "@/util/effect-zod" import { Global } from "../global" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" -export const OAUTH_DUMMY_KEY = "mimocode-oauth-dummy-key" +export const OAUTH_DUMMY_KEY = "devora-oauth-dummy-key" const file = path.join(Global.Path.data, "auth.json") @@ -47,7 +47,7 @@ export interface Interface { readonly remove: (key: string) => Effect.Effect } -export class Service extends Context.Service()("@opencode/Auth") {} +export class Service extends Context.Service()("@devora/Auth") {} export const layer = Layer.effect( Service, @@ -56,9 +56,9 @@ export const layer = Layer.effect( const decode = Schema.decodeUnknownOption(Info) const all = Effect.fn("Auth.all")(function* () { - if (process.env.MIMOCODE_AUTH_CONTENT) { + if (process.env.DEVORA_AUTH_CONTENT) { try { - return JSON.parse(process.env.MIMOCODE_AUTH_CONTENT) + return JSON.parse(process.env.DEVORA_AUTH_CONTENT) } catch (err) {} } diff --git a/packages/opencode/src/bus/bus-event.ts b/packages/devora/src/bus/bus-event.ts similarity index 100% rename from packages/opencode/src/bus/bus-event.ts rename to packages/devora/src/bus/bus-event.ts diff --git a/packages/opencode/src/bus/global.ts b/packages/devora/src/bus/global.ts similarity index 100% rename from packages/opencode/src/bus/global.ts rename to packages/devora/src/bus/global.ts diff --git a/packages/opencode/src/bus/index.ts b/packages/devora/src/bus/index.ts similarity index 99% rename from packages/opencode/src/bus/index.ts rename to packages/devora/src/bus/index.ts index 8a9579b5..e5870e48 100644 --- a/packages/opencode/src/bus/index.ts +++ b/packages/devora/src/bus/index.ts @@ -40,7 +40,7 @@ export interface Interface { readonly subscribeAllCallback: (callback: (event: any) => unknown) => Effect.Effect<() => void> } -export class Service extends Context.Service()("@opencode/Bus") {} +export class Service extends Context.Service()("@devora/Bus") {} export const layer = Layer.effect( Service, diff --git a/packages/opencode/src/cli/bootstrap.ts b/packages/devora/src/cli/bootstrap.ts similarity index 94% rename from packages/opencode/src/cli/bootstrap.ts rename to packages/devora/src/cli/bootstrap.ts index f4b3fe5b..7643a571 100644 --- a/packages/opencode/src/cli/bootstrap.ts +++ b/packages/devora/src/cli/bootstrap.ts @@ -15,7 +15,7 @@ export async function bootstrap(directory: string, cb: () => Promise) { return await cb() } finally { // Give detached background checkpoint writers a chance to finish - // before teardown. Headless `mimo run` would otherwise exit right + // before teardown. Headless `devora run` would otherwise exit right // after the main response, killing any forked writer mid-LLM-call // and leaving zero checkpoint files on disk. // diff --git a/packages/opencode/src/cli/cmd/account.ts b/packages/devora/src/cli/cmd/account.ts similarity index 100% rename from packages/opencode/src/cli/cmd/account.ts rename to packages/devora/src/cli/cmd/account.ts diff --git a/packages/opencode/src/cli/cmd/acp.ts b/packages/devora/src/cli/cmd/acp.ts similarity index 93% rename from packages/opencode/src/cli/cmd/acp.ts rename to packages/devora/src/cli/cmd/acp.ts index 875a5f34..e334c1c4 100644 --- a/packages/opencode/src/cli/cmd/acp.ts +++ b/packages/devora/src/cli/cmd/acp.ts @@ -4,7 +4,7 @@ import { cmd } from "./cmd" import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk" import { ACP } from "@/acp/agent" import { Server } from "@/server/server" -import { createOpencodeClient } from "@mimo-ai/sdk/v2" +import { createDevoraClient } from "@devora-ai/sdk/v2" import { withNetworkOptions, resolveNetworkOptions } from "../network" const log = Log.create({ service: "acp-command" }) @@ -20,12 +20,12 @@ export const AcpCommand = cmd({ }) }, handler: async (args) => { - process.env.MIMOCODE_CLIENT = "acp" + process.env.DEVORA_CLIENT = "acp" await bootstrap(process.cwd(), async () => { const opts = await resolveNetworkOptions(args) const server = await Server.listen(opts) - const sdk = createOpencodeClient({ + const sdk = createDevoraClient({ baseUrl: `http://${server.hostname}:${server.port}`, }) diff --git a/packages/opencode/src/cli/cmd/agent.ts b/packages/devora/src/cli/cmd/agent.ts similarity index 99% rename from packages/opencode/src/cli/cmd/agent.ts rename to packages/devora/src/cli/cmd/agent.ts index fe01cc81..5c768251 100644 --- a/packages/opencode/src/cli/cmd/agent.ts +++ b/packages/devora/src/cli/cmd/agent.ts @@ -88,7 +88,7 @@ const AgentCreateCommand = cmd({ scope = scopeResult } targetPath = path.join( - scope === "global" ? Global.Path.config : path.join(Instance.worktree, ".mimocode"), + scope === "global" ? Global.Path.config : path.join(Instance.worktree, ".devora"), "agent", ) } diff --git a/packages/opencode/src/cli/cmd/cmd.ts b/packages/devora/src/cli/cmd/cmd.ts similarity index 100% rename from packages/opencode/src/cli/cmd/cmd.ts rename to packages/devora/src/cli/cmd/cmd.ts diff --git a/packages/opencode/src/cli/cmd/db.ts b/packages/devora/src/cli/cmd/db.ts similarity index 100% rename from packages/opencode/src/cli/cmd/db.ts rename to packages/devora/src/cli/cmd/db.ts diff --git a/packages/opencode/src/cli/cmd/debug/agent.ts b/packages/devora/src/cli/cmd/debug/agent.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/agent.ts rename to packages/devora/src/cli/cmd/debug/agent.ts diff --git a/packages/opencode/src/cli/cmd/debug/config.ts b/packages/devora/src/cli/cmd/debug/config.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/config.ts rename to packages/devora/src/cli/cmd/debug/config.ts diff --git a/packages/opencode/src/cli/cmd/debug/file.ts b/packages/devora/src/cli/cmd/debug/file.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/file.ts rename to packages/devora/src/cli/cmd/debug/file.ts diff --git a/packages/opencode/src/cli/cmd/debug/index.ts b/packages/devora/src/cli/cmd/debug/index.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/index.ts rename to packages/devora/src/cli/cmd/debug/index.ts diff --git a/packages/opencode/src/cli/cmd/debug/lsp.ts b/packages/devora/src/cli/cmd/debug/lsp.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/lsp.ts rename to packages/devora/src/cli/cmd/debug/lsp.ts diff --git a/packages/opencode/src/cli/cmd/debug/ripgrep.ts b/packages/devora/src/cli/cmd/debug/ripgrep.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/ripgrep.ts rename to packages/devora/src/cli/cmd/debug/ripgrep.ts diff --git a/packages/opencode/src/cli/cmd/debug/scrap.ts b/packages/devora/src/cli/cmd/debug/scrap.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/scrap.ts rename to packages/devora/src/cli/cmd/debug/scrap.ts diff --git a/packages/opencode/src/cli/cmd/debug/skill.ts b/packages/devora/src/cli/cmd/debug/skill.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/skill.ts rename to packages/devora/src/cli/cmd/debug/skill.ts diff --git a/packages/opencode/src/cli/cmd/debug/snapshot.ts b/packages/devora/src/cli/cmd/debug/snapshot.ts similarity index 100% rename from packages/opencode/src/cli/cmd/debug/snapshot.ts rename to packages/devora/src/cli/cmd/debug/snapshot.ts diff --git a/packages/opencode/src/cli/cmd/export.ts b/packages/devora/src/cli/cmd/export.ts similarity index 100% rename from packages/opencode/src/cli/cmd/export.ts rename to packages/devora/src/cli/cmd/export.ts diff --git a/packages/opencode/src/cli/cmd/generate.ts b/packages/devora/src/cli/cmd/generate.ts similarity index 92% rename from packages/opencode/src/cli/cmd/generate.ts rename to packages/devora/src/cli/cmd/generate.ts index 21b4b31f..a3ef3a11 100644 --- a/packages/opencode/src/cli/cmd/generate.ts +++ b/packages/devora/src/cli/cmd/generate.ts @@ -14,9 +14,9 @@ export const GenerateCommand = { { lang: "js", source: [ - `import { createOpencodeClient } from "@mimo-ai/sdk`, + `import { createDevoraClient } from "@devora-ai/sdk`, ``, - `const client = createOpencodeClient()`, + `const client = createDevoraClient()`, `await client.${operation.operationId}({`, ` ...`, `})`, diff --git a/packages/opencode/src/cli/cmd/github.ts b/packages/devora/src/cli/cmd/github.ts similarity index 97% rename from packages/opencode/src/cli/cmd/github.ts rename to packages/devora/src/cli/cmd/github.ts index ebfc1f23..d7434384 100644 --- a/packages/opencode/src/cli/cmd/github.ts +++ b/packages/devora/src/cli/cmd/github.ts @@ -138,9 +138,9 @@ type IssueQueryResponse = { } } -const AGENT_USERNAME = "opencode-agent[bot]" +const AGENT_USERNAME = "devora-agent[bot]" const AGENT_REACTION = "eyes" -const WORKFLOW_FILE = ".github/workflows/opencode.yml" +const WORKFLOW_FILE = ".github/workflows/devora.yml" // Event categories for routing // USER_EVENTS: triggered by user actions, have actor/issueId, support reactions/comments @@ -247,7 +247,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://devora.ai/docs/github/#usage-examples", ].join("\n"), ) } @@ -273,7 +273,7 @@ export const GithubInstallCommand = cmd({ async function promptProvider() { const priority: Record = { - opencode: 0, + devora: 0, anthropic: 1, openai: 2, google: 3, @@ -331,7 +331,7 @@ export const GithubInstallCommand = cmd({ if (installation) return s.stop("GitHub app already installed") // Open browser - const url = "https://github.com/apps/opencode-agent" + const url = "https://github.com/apps/devora-agent" const command = process.platform === "darwin" ? `open "${url}"` @@ -368,7 +368,7 @@ export const GithubInstallCommand = cmd({ async function getInstallation() { return await fetch( - `https://api.opencode.ai/get_github_app_installation?owner=${app.owner}&repo=${app.repo}`, + `https://api.devora.ai/get_github_app_installation?owner=${app.owner}&repo=${app.repo}`, ) .then((res) => res.json()) .then((data) => data.installation) @@ -383,7 +383,7 @@ export const GithubInstallCommand = cmd({ await Filesystem.write( path.join(app.root, WORKFLOW_FILE), - `name: opencode + `name: devora on: issue_comment: @@ -392,12 +392,12 @@ on: types: [created] jobs: - opencode: + devora: if: | contains(github.event.comment.body, ' /oc') || startsWith(github.event.comment.body, '/oc') || - contains(github.event.comment.body, ' /opencode') || - startsWith(github.event.comment.body, '/opencode') + contains(github.event.comment.body, ' /devora') || + startsWith(github.event.comment.body, '/devora') runs-on: ubuntu-latest permissions: id-token: write @@ -410,8 +410,8 @@ jobs: with: persist-credentials: false - - name: Run opencode - uses: anomalyco/opencode/github@latest${envStr} + - name: Run devora + uses: SheriAkhtamov/Devora/github@latest${envStr} with: model: ${provider}/${model}`, ) @@ -481,7 +481,7 @@ 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.devora.ai" : "https://devora.ai" let appToken: string let octoRest: Octokit @@ -550,7 +550,7 @@ export const GithubRunCommand = cmd({ await addReaction(commentType) } - // Setup opencode session + // Setup devora session const repoData = await fetchRepo() session = await AppRuntime.runPromise( Session.Service.use((svc) => @@ -572,7 +572,7 @@ export const GithubRunCommand = cmd({ await AppRuntime.runPromise(SessionShare.Service.use((svc) => svc.share(session.id))) return session.id.slice(-8) })() - console.log("mimocode session", session.id) + console.log("devora session", session.id) // Handle event types: // REPO_EVENTS (schedule, workflow_dispatch): no issue/PR context, output to logs/PR only @@ -745,7 +745,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.devora.ai" return value.replace(/\/+$/, "") } @@ -794,7 +794,7 @@ export const GithubRunCommand = cmd({ } const reviewContext = getReviewCommentContext() - const mentions = (process.env["MENTIONS"] || "/opencode,/oc") + const mentions = (process.env["MENTIONS"] || "/devora,/oc") .split(",") .map((m) => m.trim().toLowerCase()) .filter(Boolean) @@ -940,7 +940,7 @@ export const GithubRunCommand = cmd({ } async function chat(message: string, files: PromptFiles = []) { - console.log("Sending message to mimocode...") + console.log("Sending message to devora...") return AppRuntime.runPromise( Effect.gen(function* () { @@ -1026,7 +1026,7 @@ export const GithubRunCommand = cmd({ async function getOidcToken() { try { - return await core.getIDToken("opencode-github-action") + return await core.getIDToken("devora-github-action") } catch (error) { console.error("Failed to get OIDC token:", error instanceof Error ? error.message : error) throw new Error( @@ -1129,9 +1129,9 @@ export const GithubRunCommand = cmd({ .join("") if (type === "schedule" || type === "dispatch") { const hex = crypto.randomUUID().slice(0, 6) - return `opencode/${type}-${hex}-${timestamp}` + return `devora/${type}-${hex}-${timestamp}` } - return `opencode/${type}${issueId}-${timestamp}` + return `devora/${type}${issueId}-${timestamp}` } async function pushToNewBranch(summary: string, branch: string, commit: boolean, isSchedule: boolean) { @@ -1403,9 +1403,9 @@ export const GithubRunCommand = cmd({ const titleAlt = encodeURIComponent(session.title.substring(0, 50)) const title64 = Buffer.from(session.title.substring(0, 700), "utf8").toString("base64") - return `${titleAlt}\n` + return `${titleAlt}\n` })() - const shareUrl = shareId ? `[opencode session](${shareBaseUrl}/s/${shareId})  |  ` : "" + const shareUrl = shareId ? `[devora session](${shareBaseUrl}/s/${shareId})  |  ` : "" return `\n\n${image}${shareUrl}[github run](${runUrl})` } @@ -1466,7 +1466,7 @@ query($owner: String!, $repo: String!, $number: Int!) { return [ "", "You are running as a GitHub Action. Important:", - "- Git push and PR creation are handled AUTOMATICALLY by the opencode infrastructure after your response", + "- Git push and PR creation are handled AUTOMATICALLY by the devora infrastructure after your response", "- Do NOT include warnings or disclaimers about GitHub tokens, workflow permissions, or PR creation capabilities", "- Do NOT suggest manual steps for creating PRs or pushing code - this happens automatically", "- Focus only on the code changes and your analysis/response", @@ -1604,7 +1604,7 @@ query($owner: String!, $repo: String!, $number: Int!) { return [ "", "You are running as a GitHub Action. Important:", - "- Git push and PR creation are handled AUTOMATICALLY by the opencode infrastructure after your response", + "- Git push and PR creation are handled AUTOMATICALLY by the devora infrastructure after your response", "- Do NOT include warnings or disclaimers about GitHub tokens, workflow permissions, or PR creation capabilities", "- Do NOT suggest manual steps for creating PRs or pushing code - this happens automatically", "- Focus only on the code changes and your analysis/response", diff --git a/packages/opencode/src/cli/cmd/import.ts b/packages/devora/src/cli/cmd/import.ts similarity index 98% rename from packages/opencode/src/cli/cmd/import.ts rename to packages/devora/src/cli/cmd/import.ts index 3532b279..a04568df 100644 --- a/packages/opencode/src/cli/cmd/import.ts +++ b/packages/devora/src/cli/cmd/import.ts @@ -1,5 +1,5 @@ import type { Argv } from "yargs" -import type { Session as SDKSession, Message, Part } from "@mimo-ai/sdk/v2" +import type { Session as SDKSession, Message, Part } from "@devora-ai/sdk/v2" import { Session } from "../../session" import { MessageV2 } from "../../session/message-v2" import { cmd } from "./cmd" diff --git a/packages/opencode/src/cli/cmd/mcp.ts b/packages/devora/src/cli/cmd/mcp.ts similarity index 97% rename from packages/opencode/src/cli/cmd/mcp.ts rename to packages/devora/src/cli/cmd/mcp.ts index 6b59e5b7..338567e0 100644 --- a/packages/opencode/src/cli/cmd/mcp.ts +++ b/packages/devora/src/cli/cmd/mcp.ts @@ -60,7 +60,7 @@ function configuredServers(config: Config.Info) { function sourceLabel(config: Config.Info, name: string) { const origin = config.mcp_origins?.[name] - if (!origin) return "opencode" + if (!origin) return "devora" const home = Global.Path.home const source = origin.source === home ? "~" : origin.source.startsWith(home + path.sep) ? "~" + origin.source.slice(home.length) : origin.source return `${origin.type}:${source}` @@ -133,7 +133,7 @@ export const McpListCommand = cmd({ if (servers.length === 0) { prompts.log.warn("No MCP servers configured") - prompts.outro("Add servers with: mimo mcp add") + prompts.outro("Add servers with: devora mcp add") return } @@ -212,7 +212,7 @@ export const McpAuthCommand = cmd({ if (servers.length === 0) { prompts.log.warn("No OAuth-capable MCP servers configured") - prompts.log.info("Remote MCP servers support OAuth by default. Add a remote server in mimocode.json:") + prompts.log.info("Remote MCP servers support OAuth by default. Add a remote server in devora.json:") prompts.log.info(` "mcp": { "my-server": { @@ -424,11 +424,11 @@ export const McpLogoutCommand = cmd({ }) async function resolveConfigPath(baseDir: string, global = false) { - // Check for existing config files (prefer .jsonc over .json, check .mimocode/ subdirectory too) - const candidates = [path.join(baseDir, "mimocode.json"), path.join(baseDir, "mimocode.jsonc")] + // Check for existing config files (prefer .jsonc over .json, check .devora/ subdirectory too) + const candidates = [path.join(baseDir, "devora.json"), path.join(baseDir, "devora.jsonc")] if (!global) { - candidates.push(path.join(baseDir, ".mimocode", "mimocode.json"), path.join(baseDir, ".mimocode", "mimocode.jsonc")) + candidates.push(path.join(baseDir, ".devora", "devora.json"), path.join(baseDir, ".devora", "devora.jsonc")) } for (const candidate of candidates) { @@ -437,7 +437,7 @@ async function resolveConfigPath(baseDir: string, global = false) { } } - // Default to mimocode.json if none exist + // Default to devora.json if none exist return candidates[0] } @@ -524,7 +524,7 @@ export const McpAddCommand = cmd({ if (type === "local") { const command = await prompts.text({ message: "Enter command to run", - placeholder: "e.g., mimo x @modelcontextprotocol/server-filesystem", + placeholder: "e.g., devora x @modelcontextprotocol/server-filesystem", validate: (x) => (x && x.length > 0 ? undefined : "Required"), }) if (prompts.isCancel(command)) throw new UI.CancelledError() @@ -713,7 +713,7 @@ export const McpDebugCommand = cmd({ params: { protocolVersion: "2024-11-05", capabilities: {}, - clientInfo: { name: "mimocode-debug", version: InstallationVersion }, + clientInfo: { name: "devora-debug", version: InstallationVersion }, }, id: 1, }), @@ -761,7 +761,7 @@ export const McpDebugCommand = cmd({ try { const client = new Client({ - name: "mimocode-debug", + name: "devora-debug", version: InstallationVersion, }) await client.connect(transport) diff --git a/packages/opencode/src/cli/cmd/models.ts b/packages/devora/src/cli/cmd/models.ts similarity index 92% rename from packages/opencode/src/cli/cmd/models.ts rename to packages/devora/src/cli/cmd/models.ts index 446d21f5..5566835e 100644 --- a/packages/opencode/src/cli/cmd/models.ts +++ b/packages/devora/src/cli/cmd/models.ts @@ -68,10 +68,10 @@ export const ModelsCommand = cmd({ } const ids = 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 aIsDevora = a.startsWith("devora") + const bIsDevora = b.startsWith("devora") + if (aIsDevora && !bIsDevora) return -1 + if (!aIsDevora && bIsDevora) return 1 return a.localeCompare(b) }) diff --git a/packages/opencode/src/cli/cmd/plug.ts b/packages/devora/src/cli/cmd/plug.ts similarity index 99% rename from packages/opencode/src/cli/cmd/plug.ts rename to packages/devora/src/cli/cmd/plug.ts index 970939ed..b2f1b877 100644 --- a/packages/opencode/src/cli/cmd/plug.ts +++ b/packages/devora/src/cli/cmd/plug.ts @@ -28,7 +28,7 @@ export type PlugDeps = { readText: (file: string) => Promise write: (file: string, text: string) => Promise exists: (file: string) => Promise - files: (dir: string, name: "mimocode" | "tui") => string[] + files: (dir: string, name: "devora" | "tui") => string[] global: string } diff --git a/packages/opencode/src/cli/cmd/pr.ts b/packages/devora/src/cli/cmd/pr.ts similarity index 88% rename from packages/opencode/src/cli/cmd/pr.ts rename to packages/devora/src/cli/cmd/pr.ts index f4d45047..8659c67c 100644 --- a/packages/opencode/src/cli/cmd/pr.ts +++ b/packages/devora/src/cli/cmd/pr.ts @@ -7,7 +7,7 @@ import { Process } from "@/util" export const PrCommand = cmd({ command: "pr ", - describe: "fetch and checkout a GitHub PR branch, then run mimocode", + describe: "fetch and checkout a GitHub PR branch, then run devora", builder: (yargs) => yargs.positional("number", { type: "number", @@ -93,15 +93,15 @@ export const PrCommand = cmd({ ) } - // Check for mimocode session link in PR body + // Check for devora session link in PR body if (prInfo && prInfo.body) { const sessionMatch = prInfo.body.match(/https:\/\/opncd\.ai\/s\/([a-zA-Z0-9_-]+)/) if (sessionMatch) { const sessionUrl = sessionMatch[0] - UI.println(`Found mimocode session: ${sessionUrl}`) + UI.println(`Found devora session: ${sessionUrl}`) UI.println(`Importing session...`) - const importResult = await Process.text(["mimo", "import", sessionUrl], { + const importResult = await Process.text(["devora", "import", sessionUrl], { nothrow: true, }) if (importResult.code === 0) { @@ -120,18 +120,18 @@ export const PrCommand = cmd({ UI.println(`Successfully checked out PR #${prNumber} as branch '${localBranchName}'`) UI.println() - UI.println("Starting mimocode...") + UI.println("Starting devora...") UI.println() - const mimoArgs = sessionId ? ["-s", sessionId] : [] - const mimoProcess = Process.spawn(["mimo", ...mimoArgs], { + const devoraArgs = sessionId ? ["-s", sessionId] : [] + const devoraProcess = Process.spawn(["devora", ...devoraArgs], { stdin: "inherit", stdout: "inherit", stderr: "inherit", cwd: process.cwd(), }) - const code = await mimoProcess.exited - if (code !== 0) throw new Error(`mimo exited with code ${code}`) + const code = await devoraProcess.exited + if (code !== 0) throw new Error(`devora exited with code ${code}`) }, }) }, diff --git a/packages/opencode/src/cli/cmd/providers.ts b/packages/devora/src/cli/cmd/providers.ts similarity index 89% rename from packages/opencode/src/cli/cmd/providers.ts rename to packages/devora/src/cli/cmd/providers.ts index 4ae70a82..0c957e71 100644 --- a/packages/opencode/src/cli/cmd/providers.ts +++ b/packages/devora/src/cli/cmd/providers.ts @@ -10,10 +10,10 @@ import os from "os" import { Config } from "../../config" import { Global } from "../../global" import { Plugin } from "../../plugin" -import { MimoFree } from "../../plugin/mimo-free" +import { DevoraFree } from "../../plugin/devora-free" import { t } from "../i18n" import { Instance } from "../../project/instance" -import type { Hooks } from "@mimo-ai/plugin" +import type { Hooks } from "@devora-ai/plugin" import { Process } from "../../util" import { text } from "node:stream/consumers" import { Effect } from "effect" @@ -215,44 +215,44 @@ export function resolvePluginProviders(input: { return result } -async function mimoFreeLogin() { +async function devoraFreeLogin() { const spinner = prompts.spinner() - spinner.start(t("cli.providers.mimo_free.verifying")) + spinner.start(t("cli.providers.devora_free.verifying")) try { - const { fingerprint, exp } = await MimoFree.verify() - spinner.stop(t("cli.providers.mimo_free.ready")) + const { fingerprint, exp } = await DevoraFree.verify() + spinner.stop(t("cli.providers.devora_free.ready")) const expDate = new Date(exp).toISOString() - prompts.log.success(t("cli.providers.mimo_free.default_set")) + prompts.log.success(t("cli.providers.devora_free.default_set")) prompts.log.info( [ - `Endpoint: ${MimoFree.chatBaseUrl}/chat`, + `Endpoint: ${DevoraFree.chatBaseUrl}/chat`, `Fingerprint: ${fingerprint.slice(0, 12)}…${fingerprint.slice(-4)}`, `Token exp: ${expDate}`, ].join("\n"), ) - prompts.log.info(t("cli.providers.mimo_free.usage_hint")) + prompts.log.info(t("cli.providers.devora_free.usage_hint")) prompts.outro("Done") } catch (err) { - spinner.stop(t("cli.providers.mimo_free.failed"), 1) + spinner.stop(t("cli.providers.devora_free.failed"), 1) prompts.log.error(err instanceof Error ? err.message : String(err)) prompts.outro("Done") } } -async function mimoLogin() { +async function devoraLogin() { const hooks = await AppRuntime.runPromise( Effect.gen(function* () { const plugin = yield* Plugin.Service return yield* plugin.list() }), ) - const mimoHook = hooks.findLast((h) => h.auth?.provider === "xiaomi") - if (!mimoHook?.auth) { - prompts.log.error("MiMo auth plugin not found") + const devoraHook = hooks.findLast((h) => h.auth?.provider === "devora") + if (!devoraHook?.auth) { + prompts.log.error("Devora auth plugin not found") return } - const method = mimoHook.auth.methods[0] + const method = devoraHook.auth.methods[0] if (method.type !== "oauth") return const authorize = await method.authorize() @@ -268,7 +268,7 @@ async function mimoLogin() { if (raceResult.source === "browser") { if (raceResult.data.type === "success" && "key" in raceResult.data) { - await put("xiaomi", { + await put("devora", { type: "api", key: raceResult.data.key, ...(raceResult.data.metadata ? { metadata: raceResult.data.metadata } : {}), @@ -284,7 +284,7 @@ async function mimoLogin() { const callbackResult = await authorize.callback(raceResult.input) if (callbackResult.type === "success" && "key" in callbackResult) { - await put("xiaomi", { + await put("devora", { type: "api", key: callbackResult.key, ...(callbackResult.metadata ? { metadata: callbackResult.metadata } : {}), @@ -296,9 +296,9 @@ async function mimoLogin() { const remaining = MAX_RETRIES - attempt - 1 if (remaining > 0) { - prompts.log.error(t("cli.providers.mimo_login.decrypt_retry", { remaining })) + prompts.log.error(t("cli.providers.devora_login.decrypt_retry", { remaining })) } else { - prompts.log.error(t("cli.providers.mimo_login.decrypt_exhausted")) + prompts.log.error(t("cli.providers.devora_login.decrypt_exhausted")) } } } @@ -405,7 +405,7 @@ export const ProvidersLoginCommand = cmd({ builder: (yargs) => yargs .positional("url", { - describe: "mimocode auth provider", + describe: "devora auth provider", type: "string", }) .option("provider", { @@ -426,7 +426,7 @@ export const ProvidersLoginCommand = cmd({ prompts.intro("Add credential") if (args.url) { const url = args.url.replace(/\/+$/, "") - const wellknown = (await fetch(`${url}/.well-known/opencode`).then((x) => x.json())) as { + const wellknown = (await fetch(`${url}/.well-known/devora`).then((x) => x.json())) as { auth: { command: string[]; env: string } } prompts.log.info(`Running \`${wellknown.auth.command.join(" ")}\``) @@ -477,7 +477,7 @@ export const ProvidersLoginCommand = cmd({ ) const priority: Record = { - opencode: 0, + devora: 0, openai: 1, "github-copilot": 2, google: 3, @@ -504,7 +504,7 @@ export const ProvidersLoginCommand = cmd({ label: x.name, value: x.id, hint: { - opencode: "recommended", + devora: "recommended", openai: "ChatGPT Plus/Pro or API key", }[x.id], })), @@ -517,11 +517,11 @@ export const ProvidersLoginCommand = cmd({ ] let provider: string - if (args.provider === "xiaomi") { - await mimoLogin() + if (args.provider === "devora") { + await devoraLogin() return - } else if (args.provider === "mimo" || args.provider === "mimo-free") { - await mimoFreeLogin() + } else if (args.provider === "devora" || args.provider === "devora-free") { + await devoraFreeLogin() return } else if (args.provider) { const input = args.provider @@ -537,20 +537,20 @@ export const ProvidersLoginCommand = cmd({ const choice = await prompts.select({ message: t("cli.providers.select"), options: [ - { label: "MiMo", value: "xiaomi", hint: t("cli.providers.mimo.recommended_hint") }, - { label: "MiMo Auto (free)", value: "mimo-free", hint: t("cli.providers.mimo_free.hint") }, + { label: "Devora", value: "devora", hint: t("cli.providers.devora.recommended_hint") }, + { label: "Devora Auto (free)", value: "devora-free", hint: t("cli.providers.devora_free.hint") }, { label: t("cli.providers.other"), value: "__other__" }, ], }) if (prompts.isCancel(choice)) throw new UI.CancelledError() - if (choice === "xiaomi") { - await mimoLogin() + if (choice === "devora") { + await devoraLogin() return } - if (choice === "mimo-free") { - await mimoFreeLogin() + if (choice === "devora-free") { + await devoraFreeLogin() return } @@ -590,7 +590,7 @@ export const ProvidersLoginCommand = cmd({ } prompts.log.warn( - `This only stores a credential for ${provider} - you will need configure it in mimocode.json, check the docs for examples.`, + `This only stores a credential for ${provider} - you will need configure it in devora.json, check the docs for examples.`, ) } @@ -599,13 +599,13 @@ export const ProvidersLoginCommand = cmd({ "Amazon Bedrock authentication priority:\n" + " 1. Bearer token (AWS_BEARER_TOKEN_BEDROCK or /connect)\n" + " 2. AWS credential chain (profile, access keys, IAM roles, EKS IRSA)\n\n" + - "Configure via mimocode.json options (profile, region, endpoint) or\n" + + "Configure via devora.json options (profile, region, endpoint) or\n" + "AWS environment variables (AWS_PROFILE, AWS_REGION, AWS_ACCESS_KEY_ID, AWS_WEB_IDENTITY_TOKEN_FILE).", ) } - if (provider === "opencode") { - prompts.log.info("Create an api key at https://opencode.ai/auth") + if (provider === "devora") { + prompts.log.info("Create an api key at https://devora.ai/auth") } if (provider === "vercel") { @@ -614,7 +614,7 @@ export const ProvidersLoginCommand = 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://devora.ai/docs/providers/#cloudflare-ai-gateway", ) } @@ -679,18 +679,18 @@ export const ProvidersWhoamiCommand = cmd({ const info = await AppRuntime.runPromise( Effect.gen(function* () { const auth = yield* Auth.Service - return yield* auth.get("xiaomi") + return yield* auth.get("devora") }), ) if (!info) { - prompts.log.error("Not logged in. Run `mimo auth login` to log in.") + prompts.log.error("Not logged in. Run `devora auth login` to log in.") return } if (info.type === "api" && info.metadata) { - prompts.log.info(`Provider: MiMo`) + prompts.log.info(`Provider: Devora`) prompts.log.info(`User ID: ${info.metadata.uid ?? "unknown"}`) } else { - prompts.log.info(`Provider: MiMo`) + prompts.log.info(`Provider: Devora`) prompts.log.info(`Type: ${info.type}`) } prompts.outro("") diff --git a/packages/opencode/src/cli/cmd/run-completion.ts b/packages/devora/src/cli/cmd/run-completion.ts similarity index 97% rename from packages/opencode/src/cli/cmd/run-completion.ts rename to packages/devora/src/cli/cmd/run-completion.ts index acbc1321..be0aad3f 100644 --- a/packages/opencode/src/cli/cmd/run-completion.ts +++ b/packages/devora/src/cli/cmd/run-completion.ts @@ -1,4 +1,4 @@ -// packages/opencode/src/cli/cmd/run-completion.ts +// packages/devora/src/cli/cmd/run-completion.ts export type StatusInfo = { type: "idle" | "busy" | "retry"; [k: string]: unknown } diff --git a/packages/opencode/src/cli/cmd/run.ts b/packages/devora/src/cli/cmd/run.ts similarity index 96% rename from packages/opencode/src/cli/cmd/run.ts rename to packages/devora/src/cli/cmd/run.ts index 3fdadcdd..65a5dacd 100644 --- a/packages/opencode/src/cli/cmd/run.ts +++ b/packages/devora/src/cli/cmd/run.ts @@ -7,7 +7,7 @@ import { Flag } from "../../flag/flag" import { bootstrap } from "../bootstrap" import { EOL } from "os" import { Filesystem, Log } from "../../util" -import { createOpencodeClient, type OpencodeClient, type ToolPart } from "@mimo-ai/sdk/v2" +import { createDevoraClient, type DevoraClient, type ToolPart } from "@devora-ai/sdk/v2" import { Server } from "../../server/server" import { Provider } from "../../provider" import { Agent } from "../../agent/agent" @@ -201,7 +201,7 @@ function normalizePath(input?: string) { export const RunCommand = cmd({ command: "run [message..]", - describe: "run mimocode with a message", + describe: "run devora with a message", builder: (yargs: Argv) => { return yargs .positional("message", { @@ -259,12 +259,12 @@ export const RunCommand = cmd({ }) .option("attach", { type: "string", - describe: "attach to a running mimocode server (e.g., http://localhost:4096)", + describe: "attach to a running devora server (e.g., http://localhost:4096)", }) .option("password", { alias: ["p"], type: "string", - describe: "basic auth password (defaults to MIMOCODE_SERVER_PASSWORD)", + describe: "basic auth password (defaults to DEVORA_SERVER_PASSWORD)", }) .option("dir", { type: "string", @@ -364,7 +364,7 @@ export const RunCommand = cmd({ return message.slice(0, 50) + (message.length > 50 ? "..." : "") } - async function session(sdk: OpencodeClient) { + async function session(sdk: DevoraClient) { const baseID = args.continue ? (await sdk.session.list()).data?.find((s) => !s.parentID)?.id : args.session if (baseID && args.fork) { @@ -379,10 +379,10 @@ export const RunCommand = cmd({ return result.data?.id } - async function share(sdk: OpencodeClient, sessionID: string) { + async function share(sdk: DevoraClient, sessionID: string) { const cfg = await sdk.config.get() if (!cfg.data) return - if (cfg.data.share !== "auto" && !Flag.MIMOCODE_AUTO_SHARE && !args.share) return + if (cfg.data.share !== "auto" && !Flag.DEVORA_AUTO_SHARE && !args.share) return const res = await sdk.session.share({ sessionID }).catch((error) => { if (error instanceof Error && error.message.includes("disabled")) { UI.println(UI.Style.TEXT_DANGER_BOLD + "! " + error.message) @@ -394,7 +394,7 @@ export const RunCommand = cmd({ } } - async function execute(sdk: OpencodeClient) { + async function execute(sdk: DevoraClient) { function tool(part: ToolPart) { try { if (part.tool === "bash") return bash(props(part)) @@ -672,13 +672,13 @@ export const RunCommand = cmd({ if (args.attach) { const headers = (() => { - const password = args.password ?? process.env.MIMOCODE_SERVER_PASSWORD + const password = args.password ?? process.env.DEVORA_SERVER_PASSWORD if (!password) return undefined - const username = process.env.MIMOCODE_SERVER_USERNAME ?? "mimocode" + const username = process.env.DEVORA_SERVER_USERNAME ?? "devora" const auth = `Basic ${Buffer.from(`${username}:${password}`).toString("base64")}` return { Authorization: auth } })() - const sdk = createOpencodeClient({ baseUrl: args.attach, directory, headers }) + const sdk = createDevoraClient({ baseUrl: args.attach, directory, headers }) return await execute(sdk) } @@ -687,7 +687,7 @@ export const RunCommand = cmd({ const request = new Request(input, init) return Server.Default().app.fetch(request) }) as typeof globalThis.fetch - const sdk = createOpencodeClient({ baseUrl: "http://opencode.internal", fetch: fetchFn }) + const sdk = createDevoraClient({ baseUrl: "http://devora.internal", fetch: fetchFn }) await execute(sdk) }) }, diff --git a/packages/opencode/src/cli/cmd/serve.ts b/packages/devora/src/cli/cmd/serve.ts similarity index 64% rename from packages/opencode/src/cli/cmd/serve.ts rename to packages/devora/src/cli/cmd/serve.ts index 379698a0..c5a6f2b0 100644 --- a/packages/opencode/src/cli/cmd/serve.ts +++ b/packages/devora/src/cli/cmd/serve.ts @@ -6,14 +6,14 @@ import { Flag } from "../../flag/flag" export const ServeCommand = cmd({ command: "serve", builder: (yargs) => withNetworkOptions(yargs), - describe: "starts a headless mimocode server", + describe: "starts a headless devora server", handler: async (args) => { - if (!Flag.MIMOCODE_SERVER_PASSWORD) { - console.log("Warning: MIMOCODE_SERVER_PASSWORD is not set; server is unsecured.") + if (!Flag.DEVORA_SERVER_PASSWORD) { + console.log("Warning: DEVORA_SERVER_PASSWORD is not set; server is unsecured.") } const opts = await resolveNetworkOptions(args) const server = await Server.listen(opts) - console.log(`mimocode server listening on http://${server.hostname}:${server.port}`) + console.log(`devora server listening on http://${server.hostname}:${server.port}`) await new Promise(() => {}) await server.stop() diff --git a/packages/opencode/src/cli/cmd/session.ts b/packages/devora/src/cli/cmd/session.ts similarity index 97% rename from packages/opencode/src/cli/cmd/session.ts rename to packages/devora/src/cli/cmd/session.ts index 689d0a2c..861249d1 100644 --- a/packages/opencode/src/cli/cmd/session.ts +++ b/packages/devora/src/cli/cmd/session.ts @@ -26,8 +26,8 @@ function pagerCmd(): string[] { if (Filesystem.stat(lessOnPath)?.size) return [lessOnPath, ...lessOptions] } - if (Flag.MIMOCODE_GIT_BASH_PATH) { - const less = path.join(Flag.MIMOCODE_GIT_BASH_PATH, "..", "..", "usr", "bin", "less.exe") + if (Flag.DEVORA_GIT_BASH_PATH) { + const less = path.join(Flag.DEVORA_GIT_BASH_PATH, "..", "..", "usr", "bin", "less.exe") if (Filesystem.stat(less)?.size) return [less, ...lessOptions] } @@ -51,7 +51,7 @@ export const SessionCommand = cmd({ export const SessionImportClaudeCommand = cmd({ command: "import-claude", - describe: "import Claude Code sessions (~/.claude/projects) into mimocode", + describe: "import Claude Code sessions (~/.claude/projects) into devora", builder: (yargs: Argv) => yargs.option("force", { describe: "re-sync every session, ignoring the mtime cache", diff --git a/packages/opencode/src/cli/cmd/stats.ts b/packages/devora/src/cli/cmd/stats.ts similarity index 100% rename from packages/opencode/src/cli/cmd/stats.ts rename to packages/devora/src/cli/cmd/stats.ts diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/devora/src/cli/cmd/tui/app.tsx similarity index 96% rename from packages/opencode/src/cli/cmd/tui/app.tsx rename to packages/devora/src/cli/cmd/tui/app.tsx index 11263232..117d0d87 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/devora/src/cli/cmd/tui/app.tsx @@ -18,7 +18,7 @@ import { win32DisableProcessedInput, win32InstallCtrlCGuard } from "./win32" import { Flag } from "@/flag/flag" import semver from "semver" import { DialogProvider, useDialog } from "@tui/ui/dialog" -import { DialogMimoLogin } from "@tui/component/dialog-mimo-login" +import { DialogDevoraLogin } from "@tui/component/dialog-devora-login" import { ErrorComponent } from "@tui/component/error-component" import { PluginRouteMissing } from "@tui/component/plugin-route-missing" import { ProjectProvider } from "@tui/context/project" @@ -73,7 +73,7 @@ import type { EventSource } from "./context/sdk" import { DialogVariant } from "./component/dialog-variant" function rendererConfig(_config: TuiConfig.Info, plainTerminal: boolean): CliRendererConfig { - const mouseEnabled = !plainTerminal && !Flag.MIMOCODE_DISABLE_MOUSE && (_config.mouse ?? true) + const mouseEnabled = !plainTerminal && !Flag.DEVORA_DISABLE_MOUSE && (_config.mouse ?? true) return { externalOutputMode: "passthrough", @@ -279,7 +279,7 @@ function App(props: { onSnapshot?: () => Promise }) { }) useKeyboard((evt) => { - if (!Flag.MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT) return + if (!Flag.DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT) return const sel = renderer.getSelection() if (!sel) return @@ -327,17 +327,17 @@ function App(props: { onSnapshot?: () => Promise }) { // Update terminal window title based on current route and session createEffect(() => { - if (!terminalTitleEnabled() || Flag.MIMOCODE_DISABLE_TERMINAL_TITLE) return + if (!terminalTitleEnabled() || Flag.DEVORA_DISABLE_TERMINAL_TITLE) return if (route.data.type === "home") { - renderer.setTerminalTitle("MiMoCode") + renderer.setTerminalTitle("Devora") return } if (route.data.type === "session") { const session = sync.session.get(route.data.sessionID) if (!session || SessionApi.isDefaultTitle(session.title)) { - renderer.setTerminalTitle("MiMoCode") + renderer.setTerminalTitle("Devora") return } @@ -444,7 +444,7 @@ function App(props: { onSnapshot?: () => Promise }) { title: t("tui.command.workflow.list.title"), value: "workflow.list", category: "session", - enabled: Flag.MIMOCODE_EXPERIMENTAL_WORKFLOW_TOOL, + enabled: Flag.DEVORA_EXPERIMENTAL_WORKFLOW_TOOL, slash: { name: "workflows", }, @@ -614,7 +614,7 @@ function App(props: { onSnapshot?: () => Promise }) { name: "login", }, onSelect: () => { - dialog.replace(() => ) + dialog.replace(() => ) }, category: "provider", }, @@ -626,7 +626,7 @@ function App(props: { onSnapshot?: () => Promise }) { name: "connect", }, onSelect: () => { - dialog.replace(() => ) + dialog.replace(() => ) }, category: "provider", }, @@ -637,7 +637,7 @@ function App(props: { onSnapshot?: () => Promise }) { name: "logout", }, onSelect: async () => { - await sdk.client.auth.remove({ providerID: "xiaomi" }) + await sdk.client.auth.remove({ providerID: "devora" }) await sdk.client.instance.dispose() await sync.bootstrap() toast.show({ message: t("tui.command.logout.toast"), variant: "info" }) @@ -663,9 +663,9 @@ function App(props: { onSnapshot?: () => Promise }) { ] : []), { - title: t("tui.command.opencode.status.title"), + title: t("tui.command.devora.status.title"), keybind: "status_view", - value: "opencode.status", + value: "devora.status", slash: { name: "status", }, @@ -773,7 +773,7 @@ function App(props: { onSnapshot?: () => Promise }) { aliases: ["docs"], }, onSelect: () => { - open("https://mimo.xiaomi.com/coder/docs").catch(() => {}) + open("https://github.com/SheriAkhtamov/Devora").catch(() => {}) dialog.clear() }, category: "system", @@ -998,7 +998,7 @@ function App(props: { onSnapshot?: () => Promise }) { await DialogAlert.show( dialog, "Update Complete", - `Successfully updated to MiMoCode v${result.data.version}. Please restart the application.`, + `Successfully updated to Devora v${result.data.version}. Please restart the application.`, ) void exit() @@ -1091,7 +1091,7 @@ function App(props: { onSnapshot?: () => Promise }) { // When copy-on-mousedown is enabled, prefer copying an active selection; // fall through to paste when there is nothing selected. if ( - Flag.MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT && + Flag.DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT && Selection.copy(renderer, toast, t("tui.toast.copied_to_clipboard")) ) { evt.preventDefault() @@ -1104,12 +1104,12 @@ function App(props: { onSnapshot?: () => Promise }) { evt.stopPropagation() }} onMouseUp={ - Flag.MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT + Flag.DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT ? undefined : () => Selection.copy(renderer, toast, t("tui.toast.copied_to_clipboard")) } > - + diff --git a/packages/opencode/src/cli/cmd/tui/asset/TEN_VAD_LICENSE b/packages/devora/src/cli/cmd/tui/asset/TEN_VAD_LICENSE similarity index 100% rename from packages/opencode/src/cli/cmd/tui/asset/TEN_VAD_LICENSE rename to packages/devora/src/cli/cmd/tui/asset/TEN_VAD_LICENSE diff --git a/packages/opencode/src/cli/cmd/tui/asset/charge.wav b/packages/devora/src/cli/cmd/tui/asset/charge.wav similarity index 100% rename from packages/opencode/src/cli/cmd/tui/asset/charge.wav rename to packages/devora/src/cli/cmd/tui/asset/charge.wav diff --git a/packages/opencode/src/cli/cmd/tui/asset/pulse-a.wav b/packages/devora/src/cli/cmd/tui/asset/pulse-a.wav similarity index 100% rename from packages/opencode/src/cli/cmd/tui/asset/pulse-a.wav rename to packages/devora/src/cli/cmd/tui/asset/pulse-a.wav diff --git a/packages/opencode/src/cli/cmd/tui/asset/pulse-b.wav b/packages/devora/src/cli/cmd/tui/asset/pulse-b.wav similarity index 100% rename from packages/opencode/src/cli/cmd/tui/asset/pulse-b.wav rename to packages/devora/src/cli/cmd/tui/asset/pulse-b.wav diff --git a/packages/opencode/src/cli/cmd/tui/asset/pulse-c.wav b/packages/devora/src/cli/cmd/tui/asset/pulse-c.wav similarity index 100% rename from packages/opencode/src/cli/cmd/tui/asset/pulse-c.wav rename to packages/devora/src/cli/cmd/tui/asset/pulse-c.wav diff --git a/packages/opencode/src/cli/cmd/tui/asset/ten_vad.wasm b/packages/devora/src/cli/cmd/tui/asset/ten_vad.wasm similarity index 100% rename from packages/opencode/src/cli/cmd/tui/asset/ten_vad.wasm rename to packages/devora/src/cli/cmd/tui/asset/ten_vad.wasm diff --git a/packages/opencode/src/cli/cmd/tui/asset/ten_vad_loader.js b/packages/devora/src/cli/cmd/tui/asset/ten_vad_loader.js similarity index 100% rename from packages/opencode/src/cli/cmd/tui/asset/ten_vad_loader.js rename to packages/devora/src/cli/cmd/tui/asset/ten_vad_loader.js diff --git a/packages/opencode/src/cli/cmd/tui/attach.ts b/packages/devora/src/cli/cmd/tui/attach.ts similarity index 87% rename from packages/opencode/src/cli/cmd/tui/attach.ts rename to packages/devora/src/cli/cmd/tui/attach.ts index e74c3a84..b1896239 100644 --- a/packages/opencode/src/cli/cmd/tui/attach.ts +++ b/packages/devora/src/cli/cmd/tui/attach.ts @@ -6,7 +6,7 @@ import { TuiConfig } from "@/cli/cmd/tui/config/tui" export const AttachCommand = cmd({ command: "attach ", - describe: "attach to a running mimocode server", + describe: "attach to a running devora server", builder: (yargs) => yargs .positional("url", { @@ -35,7 +35,7 @@ export const AttachCommand = cmd({ .option("password", { alias: ["p"], type: "string", - describe: "basic auth password (defaults to MIMOCODE_SERVER_PASSWORD)", + describe: "basic auth password (defaults to DEVORA_SERVER_PASSWORD)", }), handler: async (args) => { const unguard = win32InstallCtrlCGuard() @@ -59,9 +59,9 @@ export const AttachCommand = cmd({ } })() const headers = (() => { - const password = args.password ?? process.env.MIMOCODE_SERVER_PASSWORD + const password = args.password ?? process.env.DEVORA_SERVER_PASSWORD if (!password) return undefined - const auth = `Basic ${Buffer.from(`opencode:${password}`).toString("base64")}` + const auth = `Basic ${Buffer.from(`devora:${password}`).toString("base64")}` return { Authorization: auth } })() const config = await TuiConfig.get() diff --git a/packages/opencode/src/cli/cmd/tui/component/background-image.tsx b/packages/devora/src/cli/cmd/tui/component/background-image.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/background-image.tsx rename to packages/devora/src/cli/cmd/tui/component/background-image.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/bg-pulse.tsx b/packages/devora/src/cli/cmd/tui/component/bg-pulse.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/bg-pulse.tsx rename to packages/devora/src/cli/cmd/tui/component/bg-pulse.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/border.tsx b/packages/devora/src/cli/cmd/tui/component/border.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/border.tsx rename to packages/devora/src/cli/cmd/tui/component/border.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-agent.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-agent.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-agent.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-agent.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-command.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-command.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-console-org.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-console-org.tsx similarity index 97% rename from packages/opencode/src/cli/cmd/tui/component/dialog-console-org.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-console-org.tsx index 4bd86776..10cbfc08 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-console-org.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-console-org.tsx @@ -4,7 +4,7 @@ import { useSDK } from "@tui/context/sdk" import { useDialog } from "@tui/ui/dialog" import { useToast } from "@tui/ui/toast" import { useTheme } from "@tui/context/theme" -import type { ExperimentalConsoleListOrgsResponse } from "@mimo-ai/sdk/v2" +import type { ExperimentalConsoleListOrgsResponse } from "@devora-ai/sdk/v2" type OrgOption = ExperimentalConsoleListOrgsResponse["orgs"][number] diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-mimo-login.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-devora-login.tsx similarity index 83% rename from packages/opencode/src/cli/cmd/tui/component/dialog-mimo-login.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-devora-login.tsx index 0c92e7f4..45d937db 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-mimo-login.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-devora-login.tsx @@ -12,7 +12,7 @@ import { useToast } from "../ui/toast" import os from "os" import path from "path" -export function DialogMimoLogin() { +export function DialogDevoraLogin() { const dialog = useDialog() const sdk = useSDK() const sync = useSync() @@ -26,12 +26,12 @@ export function DialogMimoLogin() { skipFilter options={[ { - title: t("tui.dialog.login.xiaomi"), - value: "xiaomi", - description: t("tui.dialog.login.xiaomi.desc"), + title: t("tui.dialog.login.devora"), + value: "devora", + description: t("tui.dialog.login.devora.desc"), onSelect: async () => { const result = await sdk.client.provider.oauth.authorize({ - providerID: "xiaomi", + providerID: "devora", method: 0, }) if (result.error) { @@ -40,24 +40,24 @@ export function DialogMimoLogin() { return } dialog.replace(() => ( - + )) }, }, { - title: t("tui.dialog.login.mimo_free"), - value: "mimo-free", - description: t("tui.dialog.login.mimo_free.desc"), + title: t("tui.dialog.login.devora_free"), + value: "devora-free", + description: t("tui.dialog.login.devora_free.desc"), onSelect: async () => { await sync.bootstrap() - const mimo = sync.data.provider.find((p) => p.id === "mimo") - if (!mimo || !("mimo-auto" in mimo.models)) { - toast.show({ message: t("tui.dialog.login.mimo_free.unavailable"), variant: "error" }) + const devora = sync.data.provider.find((p) => p.id === "devora") + if (!devora || !("devora-auto" in devora.models)) { + toast.show({ message: t("tui.dialog.login.devora_free.unavailable"), variant: "error" }) dialog.clear() return } - local.model.set({ providerID: "mimo", modelID: "mimo-auto" }, { recent: true }) - toast.show({ message: t("tui.dialog.login.mimo_free.success"), variant: "info" }) + local.model.set({ providerID: "devora", modelID: "devora-auto" }, { recent: true }) + toast.show({ message: t("tui.dialog.login.devora_free.success"), variant: "info" }) dialog.clear() }, }, @@ -154,7 +154,7 @@ export function DialogMimoLogin() { ) } -function MimoOAuthFlow(props: { url: string; instructions: string }) { +function DevoraOAuthFlow(props: { url: string; instructions: string }) { const dialog = useDialog() const sdk = useSDK() const sync = useSync() @@ -167,17 +167,17 @@ function MimoOAuthFlow(props: { url: string; instructions: string }) { async function onLoginSuccess() { await sdk.client.instance.dispose() await sync.bootstrap() - const xiaomi = sync.data.provider.find((p) => p.id === "xiaomi") - const defaultModel = xiaomi && "mimo-v2.5-pro" in xiaomi.models ? "mimo-v2.5-pro" : xiaomi ? Object.keys(xiaomi.models)[0] : undefined + const devora = sync.data.provider.find((p) => p.id === "devora") + const defaultModel = devora && "devora-v2.5-pro" in devora.models ? "devora-v2.5-pro" : devora ? Object.keys(devora.models)[0] : undefined if (defaultModel) { - local.model.set({ providerID: "xiaomi", modelID: defaultModel }, { recent: true }) + local.model.set({ providerID: "devora", modelID: defaultModel }, { recent: true }) } dialog.clear() } onMount(async () => { const callbackResult = await sdk.client.provider.oauth.callback({ - providerID: "xiaomi", + providerID: "devora", method: 0, }) if (callbackResult.error) return @@ -206,7 +206,7 @@ function MimoOAuthFlow(props: { url: string; instructions: string }) { if (!value) return setBusy(true) const { error: err } = await sdk.client.provider.oauth.callback({ - providerID: "xiaomi", + providerID: "devora", method: 0, code: value.trim(), }) diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-go-upsell.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-go-upsell.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/component/dialog-go-upsell.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-go-upsell.tsx index ace4b090..7396b5c8 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-go-upsell.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-go-upsell.tsx @@ -8,7 +8,7 @@ import { Link } from "@tui/ui/link" import { GoLogo } from "./logo" import { BgPulse, type BgPulseMask } from "./bg-pulse" -const GO_URL = "https://opencode.ai/go" +const GO_URL = "https://devora.ai/go" const PAD_X = 3 const PAD_TOP_OUTER = 1 @@ -100,7 +100,7 @@ export function DialogGoUpsell(props: DialogGoUpsellProps) { Subscribe to - OpenCode Go + Devora Go for reliable access to the diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-image-list.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-image-list.tsx similarity index 97% rename from packages/opencode/src/cli/cmd/tui/component/dialog-image-list.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-image-list.tsx index b721b187..90b84b69 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-image-list.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-image-list.tsx @@ -12,8 +12,8 @@ import fs from "fs/promises" const BG_DIR = path.join(Global.Path.config, "backgrounds") const IMAGE_EXT = new Set([".png", ".jpg", ".jpeg"]) -const NONE_VALUE = "__mimocode_image_none__" -const IMPORT_VALUE = "__mimocode_image_import__" +const NONE_VALUE = "__devora_image_none__" +const IMPORT_VALUE = "__devora_image_import__" async function listBackgrounds() { await fs.mkdir(BG_DIR, { recursive: true }).catch(() => {}) diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-logo-design.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-logo-design.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-logo-design.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-logo-design.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-mcp.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-mcp.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-model.tsx similarity index 94% rename from packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-model.tsx index a7d1a248..bff290fa 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-model.tsx @@ -17,7 +17,7 @@ const ADD_MODEL_SENTINEL = "__add_model__" export function useConnected() { 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 !== "devora" || Object.values(x.models).some((y) => y.cost?.input !== 0)), ) } @@ -55,8 +55,8 @@ export function DialogModel(props: { providerID?: string }) { title: model.name ?? item.modelID, 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 === "devora" && model.id.includes("-nano"), + footer: model.cost?.input === 0 && provider.id === "devora" ? "Free" : undefined, onSelect: () => { onSelect(provider.id, model.id) }, @@ -76,7 +76,7 @@ export function DialogModel(props: { providerID?: string }) { const providerOptions = pipe( sync.data.provider, sortBy( - (provider) => provider.id !== "opencode", + (provider) => provider.id !== "devora", (provider) => provider.name, ), flatMap((provider) => { @@ -92,8 +92,8 @@ export function DialogModel(props: { providerID?: string }) { ? "(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 === "devora" && model.includes("-nano"), + footer: info.cost?.input === 0 && provider.id === "devora" ? "Free" : undefined, onSelect() { onSelect(provider.id, model) }, diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-provider.tsx similarity index 95% rename from packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-provider.tsx index c9c94a45..db13b660 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-provider.tsx @@ -8,7 +8,7 @@ import { DialogPrompt } from "../ui/dialog-prompt" import { Link } from "../ui/link" import { useTheme } from "../context/theme" import { TextAttributes } from "@opentui/core" -import type { ProviderAuthAuthorization, ProviderAuthMethod } from "@mimo-ai/sdk/v2" +import type { ProviderAuthAuthorization, ProviderAuthMethod } from "@devora-ai/sdk/v2" import { DialogModel } from "./dialog-model" import { useKeyboard } from "@opentui/solid" import * as Clipboard from "@tui/util/clipboard" @@ -16,8 +16,8 @@ import { useToast, type ToastContext } from "../ui/toast" import { isConsoleManagedProvider } from "@tui/util/provider-origin" const PROVIDER_PRIORITY: Record = { - opencode: 0, - "opencode-go": 1, + devora: 0, + "devora-go": 1, openai: 2, "github-copilot": 3, anthropic: 4, @@ -42,10 +42,10 @@ export function createDialogProviderOptions() { title: provider.name, value: provider.id, description: { - opencode: "(Recommended)", + devora: "(Recommended)", anthropic: "(API key)", openai: "(ChatGPT Plus/Pro or API key)", - "opencode-go": "Low cost subscription for everyone", + "devora-go": "Low cost subscription for everyone", }[provider.id], footer: consoleManaged ? sync.data.console_state.activeOrgName : undefined, category: provider.id in PROVIDER_PRIORITY ? "Popular" : "Other", @@ -174,12 +174,12 @@ export async function runCustomProviderWizard(opts: { return DialogPrompt.show(dialog, `${title} (${n}/${total})`, { placeholder, value }) } - const providerIDRaw = await step(1, 6, "Provider id", "e.g. mimorouter") + const providerIDRaw = await step(1, 6, "Provider id", "e.g. devorarouter") if (providerIDRaw === null) return const providerID = providerIDRaw.trim() if (!providerID) return - const nameRaw = await step(2, 6, "Display name", "e.g. MiMo Router", providerID) + const nameRaw = await step(2, 6, "Display name", "e.g. Devora Router", providerID) if (nameRaw === null) return const name = nameRaw.trim() || providerID @@ -361,25 +361,25 @@ function ApiMethod(props: ApiMethodProps) { placeholder="API key" description={ { - opencode: ( + devora: ( - OpenCode Zen gives you access to all the best coding models at the cheapest prices with a single API + Devora 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 + Go to https://devora.ai/zen to get a key ), - "opencode-go": ( + "devora-go": ( - OpenCode Go is a $10 per month subscription that provides reliable access to popular open coding models + Devora 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 + Go to https://devora.ai/zen and enable Devora Go ), diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-session-list.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-session-list.tsx index fd06b7ad..2bc8e126 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-session-list.tsx @@ -130,7 +130,7 @@ export function DialogSessionList() { } let footer = "" - if (Flag.MIMOCODE_EXPERIMENTAL_WORKSPACES) { + if (Flag.DEVORA_EXPERIMENTAL_WORKSPACES) { if (x.workspaceID) { let desc = "unknown" if (workspace) { @@ -258,7 +258,7 @@ export function DialogSessionList() { keybind: Keybind.parse("ctrl+w")[0], title: "new workspace", side: "right", - disabled: !Flag.MIMOCODE_EXPERIMENTAL_WORKSPACES, + disabled: !Flag.DEVORA_EXPERIMENTAL_WORKSPACES, onTrigger: () => { createWorkspace() }, diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-session-rename.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-session-rename.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-skill.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-skill.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-skill.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-skill.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-stash.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-stash.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-stash.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-stash.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-status.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-status.tsx index 72019298..8d9f1ffb 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-status.tsx @@ -82,7 +82,7 @@ export function DialogStatus() { Pending approval Disabled in configuration - Needs authentication (run: opencode mcp auth {key}) + Needs authentication (run: devora mcp auth {key}) {(val) => (val() as { error: string }).error} diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-tag.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-tag.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-tag.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-tag.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-theme-list.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-theme-list.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-theme-list.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-theme-list.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-variant.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-variant.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-variant.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-variant.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-workflows.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-workflows.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-workflows.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-workflows.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-workspace-create.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-workspace-create.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/component/dialog-workspace-create.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-workspace-create.tsx index db1905ce..852936ae 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-workspace-create.tsx +++ b/packages/devora/src/cli/cmd/tui/component/dialog-workspace-create.tsx @@ -1,4 +1,4 @@ -import { createOpencodeClient } from "@mimo-ai/sdk/v2" +import { createDevoraClient } from "@devora-ai/sdk/v2" import { useDialog } from "@tui/ui/dialog" import { DialogSelect } from "@tui/ui/dialog-select" import { useRoute } from "@tui/context/route" @@ -20,7 +20,7 @@ type Adaptor = { const log = Log.Default.clone().tag("service", "tui-workspace") function scoped(sdk: ReturnType, sync: ReturnType, workspaceID: string) { - return createOpencodeClient({ + return createDevoraClient({ baseUrl: sdk.url, fetch: sdk.fetch, directory: sync.path.directory || sdk.directory, diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-worktree.tsx b/packages/devora/src/cli/cmd/tui/component/dialog-worktree.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/dialog-worktree.tsx rename to packages/devora/src/cli/cmd/tui/component/dialog-worktree.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/error-component.tsx b/packages/devora/src/cli/cmd/tui/component/error-component.tsx similarity index 94% rename from packages/opencode/src/cli/cmd/tui/component/error-component.tsx rename to packages/devora/src/cli/cmd/tui/component/error-component.tsx index c74d3bbc..d037ad8e 100644 --- a/packages/opencode/src/cli/cmd/tui/component/error-component.tsx +++ b/packages/devora/src/cli/cmd/tui/component/error-component.tsx @@ -31,7 +31,7 @@ export function ErrorComponent(props: { }) const [copied, setCopied] = createSignal(false) - const issueURL = new URL("https://github.com/anomalyco/opencode/issues/new?template=bug-report.yml") + const issueURL = new URL("https://github.com/SheriAkhtamov/Devora/issues/new?template=bug-report.yml") // Choose safe fallback colors per mode since theme context may not be available const isLight = props.mode === "light" @@ -53,7 +53,7 @@ export function ErrorComponent(props: { ) } - issueURL.searchParams.set("opencode-version", InstallationVersion) + issueURL.searchParams.set("devora-version", InstallationVersion) const copyIssueURL = () => { void Clipboard.copy(issueURL.toString()).then(() => { diff --git a/packages/opencode/src/cli/cmd/tui/component/logo.tsx b/packages/devora/src/cli/cmd/tui/component/logo.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/component/logo.tsx rename to packages/devora/src/cli/cmd/tui/component/logo.tsx index ca8a29b6..3e783f64 100644 --- a/packages/opencode/src/cli/cmd/tui/component/logo.tsx +++ b/packages/devora/src/cli/cmd/tui/component/logo.tsx @@ -904,8 +904,8 @@ export function Logo(props: { shape?: LogoShape; ink?: RGBA; idle?: boolean; swe } } - const MIMO_ORANGE = RGBA.fromInts(251, 129, 71) - const MIMO_GRAY = RGBA.fromInts(160, 160, 160) + const DEVORA_ORANGE = RGBA.fromInts(251, 129, 71) + const DEVORA_GRAY = RGBA.fromInts(160, 160, 160) return ( (box = item)}> @@ -924,21 +924,21 @@ export function Logo(props: { shape?: LogoShape; ink?: RGBA; idle?: boolean; swe if (labelRow) { return ( - {line} - {ctx.shape.right[index()]} + {line} + {ctx.shape.right[index()]} ) } return ( - {renderLine(line, index(), props.ink ?? MIMO_ORANGE, true, 0, frame(), dusk(), idleState())} + {renderLine(line, index(), props.ink ?? DEVORA_ORANGE, true, 0, frame(), dusk(), idleState())} {renderLine( ctx.shape.right[index()], index(), - props.ink ?? MIMO_GRAY, + props.ink ?? DEVORA_GRAY, true, ctx.LEFT + GAP, frame(), diff --git a/packages/opencode/src/cli/cmd/tui/component/plugin-route-missing.tsx b/packages/devora/src/cli/cmd/tui/component/plugin-route-missing.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/plugin-route-missing.tsx rename to packages/devora/src/cli/cmd/tui/component/plugin-route-missing.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx b/packages/devora/src/cli/cmd/tui/component/prompt/autocomplete.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx rename to packages/devora/src/cli/cmd/tui/component/prompt/autocomplete.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/cwd.ts b/packages/devora/src/cli/cmd/tui/component/prompt/cwd.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/prompt/cwd.ts rename to packages/devora/src/cli/cmd/tui/component/prompt/cwd.ts diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx b/packages/devora/src/cli/cmd/tui/component/prompt/frecency.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/prompt/frecency.tsx rename to packages/devora/src/cli/cmd/tui/component/prompt/frecency.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx b/packages/devora/src/cli/cmd/tui/component/prompt/history.tsx similarity index 97% rename from packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx rename to packages/devora/src/cli/cmd/tui/component/prompt/history.tsx index 6426beeb..358023e4 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx +++ b/packages/devora/src/cli/cmd/tui/component/prompt/history.tsx @@ -5,7 +5,7 @@ import { onMount } from "solid-js" import { createStore, produce, unwrap } from "solid-js/store" import { createSimpleContext } from "../../context/helper" import { appendFile, writeFile } from "fs/promises" -import type { AgentPart, FilePart, TextPart } from "@mimo-ai/sdk/v2" +import type { AgentPart, FilePart, TextPart } from "@devora-ai/sdk/v2" export type PromptInfo = { input: string diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/devora/src/cli/cmd/tui/component/prompt/index.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx rename to packages/devora/src/cli/cmd/tui/component/prompt/index.tsx index d04725fa..c0213446 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/devora/src/cli/cmd/tui/component/prompt/index.tsx @@ -27,7 +27,7 @@ import * as Editor from "@tui/util/editor" import * as Voice from "@tui/util/voice" import { useExit } from "../../context/exit" import * as Clipboard from "../../util/clipboard" -import type { AssistantMessage, FilePart, UserMessage } from "@mimo-ai/sdk/v2" +import type { AssistantMessage, FilePart, UserMessage } from "@devora-ai/sdk/v2" import { TuiEvent } from "../../event" import { iife } from "@/util/iife" import { Locale } from "@/util" @@ -227,8 +227,8 @@ export function Prompt(props: PromptProps) { } if (state === "finishing") return // Start streaming - const xiaomi = sync.data.provider.find((p) => p.id === "xiaomi") - if (!xiaomi?.key) { + const devora = sync.data.provider.find((p) => p.id === "devora") + if (!devora?.key) { toast.show({ message: t("tui.voice.error.no_auth"), variant: "error" }) return } @@ -236,8 +236,8 @@ export function Prompt(props: PromptProps) { toast.show({ message: t("tui.voice.error.no_recorder"), variant: "error" }) return } - const apiKey = xiaomi.key - const baseUrl = (xiaomi.options?.baseURL as string) || "https://api.xiaomimimo.com/v1" + const apiKey = devora.key + const baseUrl = (devora.options?.baseURL as string) || "https://api.devora.com/v1" const av: NonNullable = { handle: undefined!, diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/part.ts b/packages/devora/src/cli/cmd/tui/component/prompt/part.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/prompt/part.ts rename to packages/devora/src/cli/cmd/tui/component/prompt/part.ts diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx b/packages/devora/src/cli/cmd/tui/component/prompt/stash.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/prompt/stash.tsx rename to packages/devora/src/cli/cmd/tui/component/prompt/stash.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/spinner.tsx b/packages/devora/src/cli/cmd/tui/component/spinner.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/spinner.tsx rename to packages/devora/src/cli/cmd/tui/component/spinner.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/starry-background.tsx b/packages/devora/src/cli/cmd/tui/component/starry-background.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/starry-background.tsx rename to packages/devora/src/cli/cmd/tui/component/starry-background.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/startup-loading.tsx b/packages/devora/src/cli/cmd/tui/component/startup-loading.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/startup-loading.tsx rename to packages/devora/src/cli/cmd/tui/component/startup-loading.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/task-item.tsx b/packages/devora/src/cli/cmd/tui/component/task-item.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/task-item.tsx rename to packages/devora/src/cli/cmd/tui/component/task-item.tsx diff --git a/packages/opencode/src/cli/cmd/tui/component/textarea-keybindings.ts b/packages/devora/src/cli/cmd/tui/component/textarea-keybindings.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/textarea-keybindings.ts rename to packages/devora/src/cli/cmd/tui/component/textarea-keybindings.ts diff --git a/packages/opencode/src/cli/cmd/tui/component/todo-item.tsx b/packages/devora/src/cli/cmd/tui/component/todo-item.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/component/todo-item.tsx rename to packages/devora/src/cli/cmd/tui/component/todo-item.tsx diff --git a/packages/opencode/src/cli/cmd/tui/config/cwd.ts b/packages/devora/src/cli/cmd/tui/config/cwd.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/config/cwd.ts rename to packages/devora/src/cli/cmd/tui/config/cwd.ts diff --git a/packages/opencode/src/cli/cmd/tui/config/tui-migrate.ts b/packages/devora/src/cli/cmd/tui/config/tui-migrate.ts similarity index 88% rename from packages/opencode/src/cli/cmd/tui/config/tui-migrate.ts rename to packages/devora/src/cli/cmd/tui/config/tui-migrate.ts index 44b14e17..9a175088 100644 --- a/packages/opencode/src/cli/cmd/tui/config/tui-migrate.ts +++ b/packages/devora/src/cli/cmd/tui/config/tui-migrate.ts @@ -10,7 +10,7 @@ import * as ConfigPaths from "@/config/paths" const log = Log.create({ service: "tui.migrate" }) -const TUI_SCHEMA_URL = "https://opencode.ai/tui.json" +const TUI_SCHEMA_URL = "https://devora.ai/tui.json" const LegacyTheme = TuiInfo.shape.theme.optional() const LegacyRecord = z.record(z.string(), z.unknown()).optional() @@ -29,13 +29,13 @@ interface MigrateInput { } /** - * Migrates tui-specific keys (theme, keybinds, tui) from mimocode.json files + * Migrates tui-specific keys (theme, keybinds, tui) from devora.json files * into dedicated tui.json files. Migration is performed per-directory and * skips only locations where a tui.json already exists. */ export async function migrateTuiConfig(input: MigrateInput) { - const mimocode = await mimocodeFiles(input) - for (const file of mimocode) { + const devora = await devoraFiles(input) + for (const file of devora) { const source = await Filesystem.readText(file).catch((error) => { log.warn("failed to read config for tui migration", { path: file, error }) return undefined @@ -131,15 +131,15 @@ async function backupAndStripLegacy(file: string, source: string) { }) } -async function mimocodeFiles(input: { directories: string[]; cwd: string }) { +async function devoraFiles(input: { directories: string[]; cwd: string }) { const files = [ - ...ConfigPaths.fileInDirectory(Global.Path.config, "mimocode"), - ...(await Filesystem.findUp(["mimocode.json", "mimocode.jsonc"], input.cwd, undefined, { rootFirst: true })), + ...ConfigPaths.fileInDirectory(Global.Path.config, "devora"), + ...(await Filesystem.findUp(["devora.json", "devora.jsonc"], input.cwd, undefined, { rootFirst: true })), ] for (const dir of unique(input.directories)) { - files.push(...ConfigPaths.fileInDirectory(dir, "mimocode")) + files.push(...ConfigPaths.fileInDirectory(dir, "devora")) } - if (Flag.MIMOCODE_CONFIG) files.push(Flag.MIMOCODE_CONFIG) + if (Flag.DEVORA_CONFIG) files.push(Flag.DEVORA_CONFIG) const existing = await Promise.all( unique(files).map(async (file) => { diff --git a/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts b/packages/devora/src/cli/cmd/tui/config/tui-schema.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/config/tui-schema.ts rename to packages/devora/src/cli/cmd/tui/config/tui-schema.ts diff --git a/packages/opencode/src/cli/cmd/tui/config/tui.ts b/packages/devora/src/cli/cmd/tui/config/tui.ts similarity index 90% rename from packages/opencode/src/cli/cmd/tui/config/tui.ts rename to packages/devora/src/cli/cmd/tui/config/tui.ts index cb18ed6a..a598b9ab 100644 --- a/packages/opencode/src/cli/cmd/tui/config/tui.ts +++ b/packages/devora/src/cli/cmd/tui/config/tui.ts @@ -10,7 +10,7 @@ import { TuiInfo } from "./tui-schema" import { Flag } from "@/flag/flag" import { isRecord } from "@/util/record" import { Global } from "@/global" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" import { CurrentWorkingDirectory } from "./cwd" import { ConfigPlugin } from "@/config/plugin" import { ConfigKeybinds } from "@/config/keybinds" @@ -43,7 +43,7 @@ export interface Interface { readonly waitForDependencies: () => Effect.Effect } -export class Service extends Context.Service()("@opencode/TuiConfig") {} +export class Service extends Context.Service()("@devora/TuiConfig") {} function pluginScope(file: string, ctx: { directory: string }): ConfigPlugin.Scope { if (Filesystem.contains(ctx.directory, file)) return "local" @@ -90,12 +90,12 @@ async function mergeFile(acc: Acc, file: string, ctx: { directory: string }) { } const loadState = Effect.fn("TuiConfig.loadState")(function* (ctx: { directory: string }) { - // Every config dir we may read from: global config dir, any `.mimocode` - // folders between cwd and home, and MIMOCODE_CONFIG_DIR. + // Every config dir we may read from: global config dir, any `.devora` + // folders between cwd and home, and DEVORA_CONFIG_DIR. const directories = yield* ConfigPaths.directories(ctx.directory) yield* Effect.promise(() => migrateTuiConfig({ directories, cwd: ctx.directory })) - const projectFiles = Flag.MIMOCODE_DISABLE_PROJECT_CONFIG ? [] : yield* ConfigPaths.files("tui", ctx.directory) + const projectFiles = Flag.DEVORA_DISABLE_PROJECT_CONFIG ? [] : yield* ConfigPaths.files("tui", ctx.directory) const acc: Acc = { result: {}, @@ -106,9 +106,9 @@ const loadState = Effect.fn("TuiConfig.loadState")(function* (ctx: { directory: yield* Effect.promise(() => mergeFile(acc, file, ctx)).pipe(Effect.orDie) } - // 2. Explicit MIMOCODE_TUI_CONFIG override, if set. - if (Flag.MIMOCODE_TUI_CONFIG) { - const configFile = Flag.MIMOCODE_TUI_CONFIG + // 2. Explicit DEVORA_TUI_CONFIG override, if set. + if (Flag.DEVORA_TUI_CONFIG) { + const configFile = Flag.DEVORA_TUI_CONFIG yield* Effect.promise(() => mergeFile(acc, configFile, ctx)).pipe(Effect.orDie) log.debug("loaded custom tui config", { path: configFile }) } @@ -118,13 +118,13 @@ const loadState = Effect.fn("TuiConfig.loadState")(function* (ctx: { directory: yield* Effect.promise(() => mergeFile(acc, file, ctx)).pipe(Effect.orDie) } - // 4. `.mimocode` directories (and MIMOCODE_CONFIG_DIR) discovered while + // 4. `.devora` directories (and DEVORA_CONFIG_DIR) discovered while // walking up the tree. Also returned below so callers can install plugin // dependencies from each location. - const dirs = unique(directories).filter((dir) => dir.endsWith(".mimocode") || dir === Flag.MIMOCODE_CONFIG_DIR) + const dirs = unique(directories).filter((dir) => dir.endsWith(".devora") || dir === Flag.DEVORA_CONFIG_DIR) for (const dir of dirs) { - if (!dir.endsWith(".mimocode") && dir !== Flag.MIMOCODE_CONFIG_DIR) continue + if (!dir.endsWith(".devora") && dir !== Flag.DEVORA_CONFIG_DIR) continue for (const file of ConfigPaths.fileInDirectory(dir, "tui")) { yield* Effect.promise(() => mergeFile(acc, file, ctx)).pipe(Effect.orDie) } @@ -160,7 +160,7 @@ export const layer = Layer.effect( .install(dir, { add: [ { - name: "@mimo-ai/plugin", + name: "@devora-ai/plugin", version: InstallationLocal ? undefined : InstallationVersion, }, ], @@ -208,7 +208,7 @@ async function load(text: string, configFilepath: string): Promise { if (!isRecord(data)) return {} // Flatten a nested "tui" key so users who wrote `{ "tui": { ... } }` inside tui.json - // (mirroring the old mimocode.json shape) still get their settings applied. + // (mirroring the old devora.json shape) still get their settings applied. return ConfigParse.schema(Info, normalize(data), configFilepath) }) .then((data) => resolvePlugins(data, configFilepath)) diff --git a/packages/opencode/src/cli/cmd/tui/context/args.tsx b/packages/devora/src/cli/cmd/tui/context/args.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/context/args.tsx rename to packages/devora/src/cli/cmd/tui/context/args.tsx diff --git a/packages/opencode/src/cli/cmd/tui/context/directory.ts b/packages/devora/src/cli/cmd/tui/context/directory.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/context/directory.ts rename to packages/devora/src/cli/cmd/tui/context/directory.ts diff --git a/packages/opencode/src/cli/cmd/tui/context/event.ts b/packages/devora/src/cli/cmd/tui/context/event.ts similarity index 95% rename from packages/opencode/src/cli/cmd/tui/context/event.ts rename to packages/devora/src/cli/cmd/tui/context/event.ts index 48ba5143..ea7223db 100644 --- a/packages/opencode/src/cli/cmd/tui/context/event.ts +++ b/packages/devora/src/cli/cmd/tui/context/event.ts @@ -1,4 +1,4 @@ -import type { Event } from "@mimo-ai/sdk/v2" +import type { Event } from "@devora-ai/sdk/v2" import { useProject } from "./project" import { useSDK } from "./sdk" diff --git a/packages/opencode/src/cli/cmd/tui/context/exit.tsx b/packages/devora/src/cli/cmd/tui/context/exit.tsx similarity index 96% rename from packages/opencode/src/cli/cmd/tui/context/exit.tsx rename to packages/devora/src/cli/cmd/tui/context/exit.tsx index 9724726f..07c5a61b 100644 --- a/packages/opencode/src/cli/cmd/tui/context/exit.tsx +++ b/packages/devora/src/cli/cmd/tui/context/exit.tsx @@ -38,7 +38,7 @@ export const { use: useExit, provider: ExitProvider } = createSimpleContext({ renderer.setTerminalTitle("") renderer.destroy() // SGR reset + show cursor + OSC 110/111/112 reset terminal fg/bg/cursor color. - // Without the OSC resets, whatever fg/bg the active mimocode theme pushed + // Without the OSC resets, whatever fg/bg the active devora theme pushed // via OSC 10/11/12 would persist in the terminal session, leaving the // shell prompt unreadable (e.g. white-on-white). process.stdout.write("\x1b[0m\x1b[?25h\x1b]110\x07\x1b]111\x07\x1b]112\x07") diff --git a/packages/opencode/src/cli/cmd/tui/context/helper.tsx b/packages/devora/src/cli/cmd/tui/context/helper.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/context/helper.tsx rename to packages/devora/src/cli/cmd/tui/context/helper.tsx diff --git a/packages/opencode/src/cli/cmd/tui/context/keybind.tsx b/packages/devora/src/cli/cmd/tui/context/keybind.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/context/keybind.tsx rename to packages/devora/src/cli/cmd/tui/context/keybind.tsx diff --git a/packages/opencode/src/cli/cmd/tui/context/kv.tsx b/packages/devora/src/cli/cmd/tui/context/kv.tsx similarity index 97% rename from packages/opencode/src/cli/cmd/tui/context/kv.tsx rename to packages/devora/src/cli/cmd/tui/context/kv.tsx index 6af82f91..b5565dd5 100644 --- a/packages/opencode/src/cli/cmd/tui/context/kv.tsx +++ b/packages/devora/src/cli/cmd/tui/context/kv.tsx @@ -1,6 +1,6 @@ import { Global } from "@/global" import { Filesystem } from "@/util" -import { Flock } from "@mimo-ai/shared/util/flock" +import { Flock } from "@devora-ai/shared/util/flock" import { rename, rm } from "fs/promises" import { createSignal, type Setter } from "solid-js" import { createStore, unwrap } from "solid-js/store" diff --git a/packages/opencode/src/cli/cmd/tui/context/language.tsx b/packages/devora/src/cli/cmd/tui/context/language.tsx similarity index 69% rename from packages/opencode/src/cli/cmd/tui/context/language.tsx rename to packages/devora/src/cli/cmd/tui/context/language.tsx index 13c4a35e..8b13ea94 100644 --- a/packages/opencode/src/cli/cmd/tui/context/language.tsx +++ b/packages/devora/src/cli/cmd/tui/context/language.tsx @@ -1,8 +1,8 @@ import * as i18n from "@solid-primitives/i18n" import { createMemo, createResource, type ParentProps } from "solid-js" -import { I18nProvider } from "@mimo-ai/ui/context/i18n" +import { I18nProvider } from "@devora-ai/ui/context/i18n" import { dict as tuiEn } from "../i18n/en" -import { dict as uiEn } from "@mimo-ai/ui/i18n/en" +import { dict as uiEn } from "@devora-ai/ui/i18n/en" import { LOCALES, INTL, LABEL_KEY, normalizeLocale, type Locale } from "../i18n/locales" import { useKV } from "./kv" import { detectSystemLocale } from "../util/system-locale" @@ -19,22 +19,22 @@ const merge = async (ui: Promise, tui?: Promise) => { } const loaders: Record, () => Promise> = { - zh: () => merge(import("@mimo-ai/ui/i18n/zh"), import("../i18n/zh")), - zht: () => merge(import("@mimo-ai/ui/i18n/zht"), import("../i18n/zht")), - ko: () => merge(import("@mimo-ai/ui/i18n/ko")), - de: () => merge(import("@mimo-ai/ui/i18n/de")), - es: () => merge(import("@mimo-ai/ui/i18n/es"), import("../i18n/es")), - fr: () => merge(import("@mimo-ai/ui/i18n/fr"), import("../i18n/fr")), - da: () => merge(import("@mimo-ai/ui/i18n/da")), - ja: () => merge(import("@mimo-ai/ui/i18n/ja"), import("../i18n/ja")), - pl: () => merge(import("@mimo-ai/ui/i18n/pl")), - ru: () => merge(import("@mimo-ai/ui/i18n/ru"), import("../i18n/ru")), - ar: () => merge(import("@mimo-ai/ui/i18n/ar")), - no: () => merge(import("@mimo-ai/ui/i18n/no")), - br: () => merge(import("@mimo-ai/ui/i18n/br")), - th: () => merge(import("@mimo-ai/ui/i18n/th")), - bs: () => merge(import("@mimo-ai/ui/i18n/bs")), - tr: () => merge(import("@mimo-ai/ui/i18n/tr")), + zh: () => merge(import("@devora-ai/ui/i18n/zh"), import("../i18n/zh")), + zht: () => merge(import("@devora-ai/ui/i18n/zht"), import("../i18n/zht")), + ko: () => merge(import("@devora-ai/ui/i18n/ko")), + de: () => merge(import("@devora-ai/ui/i18n/de")), + es: () => merge(import("@devora-ai/ui/i18n/es"), import("../i18n/es")), + fr: () => merge(import("@devora-ai/ui/i18n/fr"), import("../i18n/fr")), + da: () => merge(import("@devora-ai/ui/i18n/da")), + ja: () => merge(import("@devora-ai/ui/i18n/ja"), import("../i18n/ja")), + pl: () => merge(import("@devora-ai/ui/i18n/pl")), + ru: () => merge(import("@devora-ai/ui/i18n/ru"), import("../i18n/ru")), + ar: () => merge(import("@devora-ai/ui/i18n/ar")), + no: () => merge(import("@devora-ai/ui/i18n/no")), + br: () => merge(import("@devora-ai/ui/i18n/br")), + th: () => merge(import("@devora-ai/ui/i18n/th")), + bs: () => merge(import("@devora-ai/ui/i18n/bs")), + tr: () => merge(import("@devora-ai/ui/i18n/tr")), } const cache = new Map([["en", base]]) diff --git a/packages/opencode/src/cli/cmd/tui/context/local.tsx b/packages/devora/src/cli/cmd/tui/context/local.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/local.tsx rename to packages/devora/src/cli/cmd/tui/context/local.tsx index edc5608b..7d5a8b60 100644 --- a/packages/opencode/src/cli/cmd/tui/context/local.tsx +++ b/packages/devora/src/cli/cmd/tui/context/local.tsx @@ -232,7 +232,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ const info = provider?.models[value.modelID] return { provider: provider?.name ?? value.providerID, - model: value.modelID === "mimo-auto" ? "MiMo Auto(MiMo-V2.5 限免中)" : (info?.name ?? value.modelID), + model: value.modelID === "devora-auto" ? "Devora Auto(Devora-V2.5 限免中)" : (info?.name ?? value.modelID), reasoning: info?.capabilities?.reasoning ?? false, } }), diff --git a/packages/opencode/src/cli/cmd/tui/context/plugin-keybinds.ts b/packages/devora/src/cli/cmd/tui/context/plugin-keybinds.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/context/plugin-keybinds.ts rename to packages/devora/src/cli/cmd/tui/context/plugin-keybinds.ts diff --git a/packages/opencode/src/cli/cmd/tui/context/project.tsx b/packages/devora/src/cli/cmd/tui/context/project.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/project.tsx rename to packages/devora/src/cli/cmd/tui/context/project.tsx index 9e98eaba..a65cb925 100644 --- a/packages/opencode/src/cli/cmd/tui/context/project.tsx +++ b/packages/devora/src/cli/cmd/tui/context/project.tsx @@ -1,5 +1,5 @@ import { batch } from "solid-js" -import type { Path, Workspace } from "@mimo-ai/sdk/v2" +import type { Path, Workspace } from "@devora-ai/sdk/v2" import { createStore, reconcile } from "solid-js/store" import { createSimpleContext } from "./helper" import { useSDK } from "./sdk" diff --git a/packages/opencode/src/cli/cmd/tui/context/prompt.tsx b/packages/devora/src/cli/cmd/tui/context/prompt.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/context/prompt.tsx rename to packages/devora/src/cli/cmd/tui/context/prompt.tsx diff --git a/packages/opencode/src/cli/cmd/tui/context/route.tsx b/packages/devora/src/cli/cmd/tui/context/route.tsx similarity index 93% rename from packages/opencode/src/cli/cmd/tui/context/route.tsx rename to packages/devora/src/cli/cmd/tui/context/route.tsx index 9c42ad8c..ec7e56ba 100644 --- a/packages/opencode/src/cli/cmd/tui/context/route.tsx +++ b/packages/devora/src/cli/cmd/tui/context/route.tsx @@ -28,8 +28,8 @@ export const { use: useRoute, provider: RouteProvider } = createSimpleContext({ init: (props: { initialRoute?: Route }) => { const [store, setStore] = createStore( props.initialRoute ?? - (process.env["MIMOCODE_ROUTE"] - ? JSON.parse(process.env["MIMOCODE_ROUTE"]) + (process.env["DEVORA_ROUTE"] + ? JSON.parse(process.env["DEVORA_ROUTE"]) : { type: "home", }), diff --git a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx b/packages/devora/src/cli/cmd/tui/context/sdk.tsx similarity index 93% rename from packages/opencode/src/cli/cmd/tui/context/sdk.tsx rename to packages/devora/src/cli/cmd/tui/context/sdk.tsx index 22561844..02fa06bd 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx +++ b/packages/devora/src/cli/cmd/tui/context/sdk.tsx @@ -1,5 +1,5 @@ -import { createOpencodeClient } from "@mimo-ai/sdk/v2" -import type { GlobalEvent } from "@mimo-ai/sdk/v2" +import { createDevoraClient } from "@devora-ai/sdk/v2" +import type { GlobalEvent } from "@devora-ai/sdk/v2" import { createSimpleContext } from "./helper" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { Flag } from "@/flag/flag" @@ -24,7 +24,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ let currentDirectory = props.directory function createSDK(directory?: string) { - return createOpencodeClient({ + return createDevoraClient({ baseUrl: props.url, signal: abort.signal, directory, @@ -87,7 +87,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ sseMaxRetryAttempts: 0, }) - if (Flag.MIMOCODE_EXPERIMENTAL_WORKSPACES) { + if (Flag.DEVORA_EXPERIMENTAL_WORKSPACES) { // Start syncing workspaces, it's important to do this after // we've started listening to events await sdk.sync.start().catch(() => {}) @@ -115,7 +115,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ const unsub = await props.events.subscribe(handleEvent) onCleanup(unsub) - if (Flag.MIMOCODE_EXPERIMENTAL_WORKSPACES) { + if (Flag.DEVORA_EXPERIMENTAL_WORKSPACES) { // Start syncing workspaces, it's important to do this after // we've started listening to events await sdk.sync.start().catch(() => {}) diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/devora/src/cli/cmd/tui/context/sync.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/sync.tsx rename to packages/devora/src/cli/cmd/tui/context/sync.tsx index 4e6beb8c..f57f2095 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/devora/src/cli/cmd/tui/context/sync.tsx @@ -18,12 +18,12 @@ import type { ProviderListResponse, ProviderAuthMethod, VcsInfo, -} from "@mimo-ai/sdk/v2" +} from "@devora-ai/sdk/v2" import { createStore, produce, reconcile } from "solid-js/store" import { useProject } from "@tui/context/project" import { useEvent } from "@tui/context/event" import { useSDK } from "@tui/context/sdk" -import { Binary } from "@mimo-ai/shared/util/binary" +import { Binary } from "@devora-ai/shared/util/binary" import { createSimpleContext } from "./helper" import type { Snapshot } from "@/snapshot" import { useExit } from "./exit" @@ -743,7 +743,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ return store.status }, get ready() { - if (process.env.MIMOCODE_FAST_BOOT) return true + if (process.env.DEVORA_FAST_BOOT) return true return store.status !== "loading" }, get path() { diff --git a/packages/opencode/src/cli/cmd/tui/context/theme.tsx b/packages/devora/src/cli/cmd/tui/context/theme.tsx similarity index 97% rename from packages/opencode/src/cli/cmd/tui/context/theme.tsx rename to packages/devora/src/cli/cmd/tui/context/theme.tsx index 966982db..0a5caf9e 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme.tsx +++ b/packages/devora/src/cli/cmd/tui/context/theme.tsx @@ -2,7 +2,7 @@ import { CliRenderEvents, SyntaxStyle, RGBA, type TerminalColors } from "@opentu import path from "path" import { createEffect, createMemo, onCleanup, onMount } from "solid-js" import { createSimpleContext } from "./helper" -import { Glob } from "@mimo-ai/shared/util/glob" +import { Glob } from "@devora-ai/shared/util/glob" import aura from "./theme/aura.json" with { type: "json" } import ayu from "./theme/ayu.json" with { type: "json" } import catppuccin from "./theme/catppuccin.json" with { type: "json" } @@ -24,7 +24,7 @@ import nightowl from "./theme/nightowl.json" with { type: "json" } import nord from "./theme/nord.json" with { type: "json" } import osakaJade from "./theme/osaka-jade.json" with { type: "json" } import onedark from "./theme/one-dark.json" with { type: "json" } -import mimocode from "./theme/mimocode.json" with { type: "json" } +import devora from "./theme/devora.json" with { type: "json" } import orng from "./theme/orng.json" with { type: "json" } import lucentOrng from "./theme/lucent-orng.json" with { type: "json" } import palenight from "./theme/palenight.json" with { type: "json" } @@ -43,7 +43,7 @@ import { Global } from "@/global" import { Filesystem } from "@/util" import { useTuiConfig } from "./tui-config" import { isRecord } from "@/util/record" -import type { TuiThemeCurrent } from "@mimo-ai/plugin/tui" +import type { TuiThemeCurrent } from "@devora-ai/plugin/tui" type Theme = TuiThemeCurrent & { _hasSelectedListItemText: boolean @@ -86,9 +86,9 @@ export type ThemeJson = { } const PLAIN_TERMINAL_THEME: ThemeJson = { - ...mimocode, + ...devora, theme: { - ...mimocode.theme, + ...devora.theme, text: { dark: "darkStep12", light: "lightStep12", @@ -142,7 +142,7 @@ export const DEFAULT_THEMES: Record = { nord, ["one-dark"]: onedark, ["osaka-jade"]: osakaJade, - mimocode, + devora, orng, ["lucent-orng"]: lucentOrng, palenight, @@ -190,7 +190,7 @@ const [store, setStore] = createStore({ themes: listThemes(), mode: "dark", lock: undefined, - active: "mimocode", + active: "devora", ready: false, }) @@ -355,8 +355,8 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({ } draft.mode = mode draft.lock = lock - const active = props.plain ? "system" : config.theme ?? kv.get("theme", "mimocode") - draft.active = typeof active === "string" ? active : "mimocode" + const active = props.plain ? "system" : config.theme ?? kv.get("theme", "devora") + draft.active = typeof active === "string" ? active : "devora" draft.ready = false }), ) @@ -376,7 +376,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({ syncThemes() }) .catch(() => { - setStore("active", "mimocode") + setStore("active", "devora") }), ]).finally(() => { setStore("ready", true) @@ -395,7 +395,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({ systemTheme = undefined syncThemes() if (store.active === "system") { - setStore("active", "mimocode") + setStore("active", "devora") } return } @@ -406,7 +406,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({ systemTheme = undefined syncThemes() if (store.active === "system") { - setStore("active", "mimocode") + setStore("active", "devora") } }) } @@ -477,7 +477,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({ if (theme) return resolveTheme(theme, store.mode) } - return resolveTheme(store.themes.mimocode, store.mode) + return resolveTheme(store.themes.devora, store.mode) }) createEffect(() => { @@ -539,7 +539,7 @@ async function getCustomThemes() { Global.Path.config, ...(await Array.fromAsync( Filesystem.up({ - targets: [".mimocode"], + targets: [".devora"], start: process.cwd(), }), )), @@ -605,20 +605,20 @@ function generateSystem(colors: TerminalColors, mode: "dark" | "light"): ThemeJs const diffRemovedLineNumberBg = tint(diffContextBg, ansiColors.red, diffAlpha) const diffLineNumber = textMuted - const xiaomiOrange = RGBA.fromInts(255, 103, 0) + const devoraOrange = RGBA.fromInts(255, 103, 0) return { theme: { - // Primary colors using Xiaomi Orange - primary: xiaomiOrange, - secondary: xiaomiOrange, - accent: xiaomiOrange, + // Primary colors using Devora Orange + primary: devoraOrange, + secondary: devoraOrange, + accent: devoraOrange, // Status colors using ANSI error: ansiColors.red, warning: ansiColors.yellow, - success: xiaomiOrange, - info: xiaomiOrange, + success: devoraOrange, + info: devoraOrange, // Text colors text: fg, diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/aura.json b/packages/devora/src/cli/cmd/tui/context/theme/aura.json similarity index 97% rename from packages/opencode/src/cli/cmd/tui/context/theme/aura.json rename to packages/devora/src/cli/cmd/tui/context/theme/aura.json index ebd829f4..b42ecd16 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/aura.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/aura.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkBg": "#0f0f0f", "darkBgPanel": "#15141b", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/ayu.json b/packages/devora/src/cli/cmd/tui/context/theme/ayu.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/ayu.json rename to packages/devora/src/cli/cmd/tui/context/theme/ayu.json index 92957ac8..a4a63687 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/ayu.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/ayu.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkBg": "#0B0E14", "darkBgAlt": "#0D1017", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/carbonfox.json b/packages/devora/src/cli/cmd/tui/context/theme/carbonfox.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/carbonfox.json rename to packages/devora/src/cli/cmd/tui/context/theme/carbonfox.json index a9b7dc46..abff5238 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/carbonfox.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/carbonfox.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "bg0": "#0d0d0d", "bg1": "#161616", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/catppuccin-frappe.json b/packages/devora/src/cli/cmd/tui/context/theme/catppuccin-frappe.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/catppuccin-frappe.json rename to packages/devora/src/cli/cmd/tui/context/theme/catppuccin-frappe.json index b5fdc9ac..570999c7 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/catppuccin-frappe.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "frappeRosewater": "#f2d5cf", "frappeFlamingo": "#eebebe", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json b/packages/devora/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json rename to packages/devora/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json index 363faa62..6b6bc537 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "macRosewater": "#f4dbd6", "macFlamingo": "#f0c6c6", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/catppuccin.json b/packages/devora/src/cli/cmd/tui/context/theme/catppuccin.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/catppuccin.json rename to packages/devora/src/cli/cmd/tui/context/theme/catppuccin.json index 4f00bad1..b2625f73 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/catppuccin.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/catppuccin.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "lightRosewater": "#dc8a78", "lightFlamingo": "#dd7878", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/cobalt2.json b/packages/devora/src/cli/cmd/tui/context/theme/cobalt2.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/cobalt2.json rename to packages/devora/src/cli/cmd/tui/context/theme/cobalt2.json index 509ae086..f122ceb4 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/cobalt2.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/cobalt2.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "background": "#193549", "backgroundAlt": "#122738", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/cursor.json b/packages/devora/src/cli/cmd/tui/context/theme/cursor.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/cursor.json rename to packages/devora/src/cli/cmd/tui/context/theme/cursor.json index 39c37112..bf337e92 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/cursor.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/cursor.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkBg": "#181818", "darkPanel": "#141414", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/mimocode.json b/packages/devora/src/cli/cmd/tui/context/theme/devora.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/mimocode.json rename to packages/devora/src/cli/cmd/tui/context/theme/devora.json index 07925481..5f777401 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/mimocode.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/devora.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkStep1": "#0a0a0a", "darkStep2": "#141414", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/dracula.json b/packages/devora/src/cli/cmd/tui/context/theme/dracula.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/dracula.json rename to packages/devora/src/cli/cmd/tui/context/theme/dracula.json index 0e493194..c38a514a 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/dracula.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/dracula.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "background": "#282a36", "currentLine": "#44475a", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/everforest.json b/packages/devora/src/cli/cmd/tui/context/theme/everforest.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/everforest.json rename to packages/devora/src/cli/cmd/tui/context/theme/everforest.json index 29924b5e..98a71621 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/everforest.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/everforest.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkStep1": "#2d353b", "darkStep2": "#333c43", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/flexoki.json b/packages/devora/src/cli/cmd/tui/context/theme/flexoki.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/flexoki.json rename to packages/devora/src/cli/cmd/tui/context/theme/flexoki.json index c8cc0744..8d025bb7 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/flexoki.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/flexoki.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "black": "#100F0F", "base950": "#1C1B1A", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/github.json b/packages/devora/src/cli/cmd/tui/context/theme/github.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/github.json rename to packages/devora/src/cli/cmd/tui/context/theme/github.json index 1136c818..4c2eb55b 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/github.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/github.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkBg": "#0d1117", "darkBgAlt": "#010409", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/gruvbox.json b/packages/devora/src/cli/cmd/tui/context/theme/gruvbox.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/gruvbox.json rename to packages/devora/src/cli/cmd/tui/context/theme/gruvbox.json index 50c83575..061fd9ed 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/gruvbox.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/gruvbox.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkBg0": "#282828", "darkBg1": "#3c3836", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/kanagawa.json b/packages/devora/src/cli/cmd/tui/context/theme/kanagawa.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/kanagawa.json rename to packages/devora/src/cli/cmd/tui/context/theme/kanagawa.json index 0efe548d..90578878 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/kanagawa.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/kanagawa.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "sumiInk0": "#1F1F28", "sumiInk1": "#2A2A37", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/lucent-orng.json b/packages/devora/src/cli/cmd/tui/context/theme/lucent-orng.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/lucent-orng.json rename to packages/devora/src/cli/cmd/tui/context/theme/lucent-orng.json index c1b814cf..f86394cb 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/lucent-orng.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/lucent-orng.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkStep6": "#3c3c3c", "darkStep11": "#808080", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/material.json b/packages/devora/src/cli/cmd/tui/context/theme/material.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/material.json rename to packages/devora/src/cli/cmd/tui/context/theme/material.json index c9e694b2..0ced3503 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/material.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/material.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkBg": "#263238", "darkBgAlt": "#1e272c", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/matrix.json b/packages/devora/src/cli/cmd/tui/context/theme/matrix.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/matrix.json rename to packages/devora/src/cli/cmd/tui/context/theme/matrix.json index a9cb3a77..83ffa2d4 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/matrix.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/matrix.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "matrixInk0": "#0a0e0a", "matrixInk1": "#0e130d", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/mercury.json b/packages/devora/src/cli/cmd/tui/context/theme/mercury.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/mercury.json rename to packages/devora/src/cli/cmd/tui/context/theme/mercury.json index dfd4f352..6a8a4ed7 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/mercury.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/mercury.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "purple-800": "#3442a6", "purple-700": "#465bd1", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/monokai.json b/packages/devora/src/cli/cmd/tui/context/theme/monokai.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/monokai.json rename to packages/devora/src/cli/cmd/tui/context/theme/monokai.json index 7cc1066c..9de62454 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/monokai.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/monokai.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "background": "#272822", "backgroundAlt": "#1e1f1c", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/nightowl.json b/packages/devora/src/cli/cmd/tui/context/theme/nightowl.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/nightowl.json rename to packages/devora/src/cli/cmd/tui/context/theme/nightowl.json index d123396d..ed8a120b 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/nightowl.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/nightowl.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "nightOwlBg": "#011627", "nightOwlFg": "#d6deeb", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/nord.json b/packages/devora/src/cli/cmd/tui/context/theme/nord.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/nord.json rename to packages/devora/src/cli/cmd/tui/context/theme/nord.json index a235cfe4..bbf44442 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/nord.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/nord.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "nord0": "#2E3440", "nord1": "#3B4252", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/one-dark.json b/packages/devora/src/cli/cmd/tui/context/theme/one-dark.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/one-dark.json rename to packages/devora/src/cli/cmd/tui/context/theme/one-dark.json index 9776f3b1..09aae3ee 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/one-dark.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/one-dark.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkBg": "#282c34", "darkBgAlt": "#21252b", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/orng.json b/packages/devora/src/cli/cmd/tui/context/theme/orng.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/orng.json rename to packages/devora/src/cli/cmd/tui/context/theme/orng.json index 5811da06..bebba50c 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/orng.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/orng.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkStep1": "#0a0a0a", "darkStep2": "#141414", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/osaka-jade.json b/packages/devora/src/cli/cmd/tui/context/theme/osaka-jade.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/osaka-jade.json rename to packages/devora/src/cli/cmd/tui/context/theme/osaka-jade.json index 5c39d927..b684d38e 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/osaka-jade.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/osaka-jade.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkBg0": "#111c18", "darkBg1": "#1a2520", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/palenight.json b/packages/devora/src/cli/cmd/tui/context/theme/palenight.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/palenight.json rename to packages/devora/src/cli/cmd/tui/context/theme/palenight.json index 803ac7c2..8fa566f0 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/palenight.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/palenight.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "background": "#292d3e", "backgroundAlt": "#1e2132", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/rosepine.json b/packages/devora/src/cli/cmd/tui/context/theme/rosepine.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/rosepine.json rename to packages/devora/src/cli/cmd/tui/context/theme/rosepine.json index 7e1db376..0afed193 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/rosepine.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/rosepine.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "base": "#191724", "surface": "#1f1d2e", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/solarized.json b/packages/devora/src/cli/cmd/tui/context/theme/solarized.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/solarized.json rename to packages/devora/src/cli/cmd/tui/context/theme/solarized.json index ddf5d3ae..8e4baa8e 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/solarized.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/solarized.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "base03": "#002b36", "base02": "#073642", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/synthwave84.json b/packages/devora/src/cli/cmd/tui/context/theme/synthwave84.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/synthwave84.json rename to packages/devora/src/cli/cmd/tui/context/theme/synthwave84.json index 6ed47fe0..253d23d3 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/synthwave84.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/synthwave84.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "background": "#262335", "backgroundAlt": "#1e1a29", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/tokyonight.json b/packages/devora/src/cli/cmd/tui/context/theme/tokyonight.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/tokyonight.json rename to packages/devora/src/cli/cmd/tui/context/theme/tokyonight.json index a69d4b98..d0292601 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/tokyonight.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/tokyonight.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "darkStep1": "#1a1b26", "darkStep2": "#1e2030", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/vercel.json b/packages/devora/src/cli/cmd/tui/context/theme/vercel.json similarity index 99% rename from packages/opencode/src/cli/cmd/tui/context/theme/vercel.json rename to packages/devora/src/cli/cmd/tui/context/theme/vercel.json index 119e5621..9948f072 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/vercel.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/vercel.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "background100": "#0A0A0A", "background200": "#000000", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/vesper.json b/packages/devora/src/cli/cmd/tui/context/theme/vesper.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/vesper.json rename to packages/devora/src/cli/cmd/tui/context/theme/vesper.json index 2f113587..16837589 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/vesper.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/vesper.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "vesperBg": "#101010", "vesperFg": "#FFF", diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/zenburn.json b/packages/devora/src/cli/cmd/tui/context/theme/zenburn.json similarity index 98% rename from packages/opencode/src/cli/cmd/tui/context/theme/zenburn.json rename to packages/devora/src/cli/cmd/tui/context/theme/zenburn.json index 9407d2b1..7aaca035 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/zenburn.json +++ b/packages/devora/src/cli/cmd/tui/context/theme/zenburn.json @@ -1,5 +1,5 @@ { - "$schema": "https://opencode.ai/theme.json", + "$schema": "https://devora.ai/theme.json", "defs": { "bg": "#3f3f3f", "bgAlt": "#4f4f4f", diff --git a/packages/opencode/src/cli/cmd/tui/context/thinking.ts b/packages/devora/src/cli/cmd/tui/context/thinking.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/context/thinking.ts rename to packages/devora/src/cli/cmd/tui/context/thinking.ts diff --git a/packages/opencode/src/cli/cmd/tui/context/tui-config.tsx b/packages/devora/src/cli/cmd/tui/context/tui-config.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/context/tui-config.tsx rename to packages/devora/src/cli/cmd/tui/context/tui-config.tsx diff --git a/packages/opencode/src/cli/cmd/tui/event.ts b/packages/devora/src/cli/cmd/tui/event.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/event.ts rename to packages/devora/src/cli/cmd/tui/event.ts diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/home/footer.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/home/footer.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/home/footer.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/home/footer.tsx index fdcbfcfe..0d21b570 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/home/footer.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/home/footer.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, Match, Show, Switch } from "solid-js" import { Global } from "@/global" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/home/tips.tsx similarity index 95% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/home/tips.tsx index 65c5f67f..eec76e25 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/home/tips.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, Show } from "solid-js" import { Tips } from "./tips-view" import { useLanguage } from "@tui/context/language" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx similarity index 97% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx index 561d67a6..4bc14a29 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx @@ -1,5 +1,5 @@ -import type { AssistantMessage } from "@mimo-ai/sdk/v2" -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { AssistantMessage } from "@devora-ai/sdk/v2" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { Show, createEffect, createMemo, createSignal, onCleanup } from "solid-js" import { completedTPS, formatTPS, streamingTPS } from "./tps" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx index a35b3423..e9470b38 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo } from "solid-js" import { Global } from "@/global" import { useLanguage } from "@tui/context/language" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx index 5ea84e64..4d13bf15 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, For, Show, createSignal } from "solid-js" const id = "internal:sidebar-files" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx similarity index 89% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx index 833e2db3..299424a4 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, Show } from "solid-js" import { Global } from "@/global" @@ -8,7 +8,7 @@ function View(props: { api: TuiPluginApi }) { const theme = () => props.api.theme.current const has = createMemo(() => props.api.state.provider.some( - (item) => item.id !== "opencode" || Object.values(item.models).some((model) => model.cost?.input !== 0), + (item) => item.id !== "devora" || Object.values(item.models).some((model) => model.cost?.input !== 0), ), ) const done = createMemo(() => props.api.kv.get("dismissed_getting_started", false)) @@ -48,7 +48,7 @@ function View(props: { api: TuiPluginApi }) { ✕ - MiMoCode includes free models so you can start immediately. + Devora includes free models so you can start immediately. Connect from 75+ providers to use other models, including Claude, GPT, Gemini etc @@ -64,7 +64,7 @@ function View(props: { api: TuiPluginApi }) { {path().name} - MiMo + Devora Code {" "} diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx index c2e6ec76..00d59cff 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, Show } from "solid-js" const id = "internal:sidebar-goal" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx index 90dab6fb..85499a58 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, For, Show } from "solid-js" import { useLanguage } from "@tui/context/language" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx index 412db0c5..87e5aeb2 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, For, Show, createSignal } from "solid-js" const id = "internal:sidebar-lsp" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx index 665ffb2c..d31828c3 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, For, Match, Show, Switch, createSignal } from "solid-js" const id = "internal:sidebar-mcp" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx index d8715b33..d5e93a94 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, Index, Show, createSignal } from "solid-js" import { TaskItem } from "../../component/task-item" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx index d1fd05e1..ab673f2c 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx @@ -1,4 +1,4 @@ -import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@devora-ai/plugin/tui" import { createMemo, For, Show, createSignal } from "solid-js" import { TodoItem } from "../../component/todo-item" diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts b/packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts rename to packages/devora/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/system/plugins.tsx b/packages/devora/src/cli/cmd/tui/feature-plugins/system/plugins.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/feature-plugins/system/plugins.tsx rename to packages/devora/src/cli/cmd/tui/feature-plugins/system/plugins.tsx index b40b0f51..e15a8b79 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +++ b/packages/devora/src/cli/cmd/tui/feature-plugins/system/plugins.tsx @@ -1,5 +1,5 @@ import { Keybind } from "@/util" -import type { TuiPlugin, TuiPluginApi, TuiPluginModule, TuiPluginStatus } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginApi, TuiPluginModule, TuiPluginStatus } from "@devora-ai/plugin/tui" import { useKeyboard, useTerminalDimensions } from "@opentui/solid" import { fileURLToPath } from "url" import { DialogSelect, type DialogSelectOption } from "@tui/ui/dialog-select" diff --git a/packages/opencode/src/cli/cmd/tui/i18n/en.ts b/packages/devora/src/cli/cmd/tui/i18n/en.ts similarity index 85% rename from packages/opencode/src/cli/cmd/tui/i18n/en.ts rename to packages/devora/src/cli/cmd/tui/i18n/en.ts index 81c4b679..f0ac8591 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/en.ts +++ b/packages/devora/src/cli/cmd/tui/i18n/en.ts @@ -49,7 +49,7 @@ export const dict: Record = { "Run {highlight}/background{/highlight} to set a custom image as your home background", "tui.tips.undo": "Use {highlight}/undo{/highlight} to revert the last message and file changes", "tui.tips.redo": "Use {highlight}/redo{/highlight} to restore previously undone messages and file changes", - "tui.tips.share": "Run {highlight}/share{/highlight} to create a public link to your conversation at opencode.ai", + "tui.tips.share": "Run {highlight}/share{/highlight} to create a public link to your conversation at devora.ai", "tui.tips.drag_drop": "Drag and drop images or PDFs into the terminal to add them as context", "tui.tips.paste_image": "Press {highlight}Ctrl+V{/highlight} to paste images from your clipboard into the prompt", "tui.tips.editor": @@ -86,51 +86,51 @@ export const dict: Record = { "tui.tips.subagent": "Use {highlight}@agent-name{/highlight} in prompts to invoke specialized subagents", "tui.tips.cycle_sessions": "Press {highlight}Ctrl+X Right/Left{/highlight} to cycle through parent and child sessions", "tui.tips.config_files": - "Create {highlight}mimocode.json{/highlight} for server settings and {highlight}tui.json{/highlight} for TUI settings", - "tui.tips.global_config": "Place TUI settings in {highlight}~/.config/mimocode/tui.json{/highlight} for global config", + "Create {highlight}devora.json{/highlight} for server settings and {highlight}tui.json{/highlight} for TUI settings", + "tui.tips.global_config": "Place TUI settings in {highlight}~/.config/devora/tui.json{/highlight} for global config", "tui.tips.schema": "Add {highlight}$schema{/highlight} to your config for autocomplete in your editor", "tui.tips.default_model": "Configure {highlight}model{/highlight} in config to set your default model", "tui.tips.keybinds": "Override any keybind in {highlight}tui.json{/highlight} via the {highlight}keybinds{/highlight} section", "tui.tips.disable_keybind": "Set any keybind to {highlight}none{/highlight} to disable it completely", "tui.tips.mcp_config": "Configure local or remote MCP servers in the {highlight}mcp{/highlight} config section", - "tui.tips.mcp_oauth": "MiMoCode auto-handles OAuth for remote MCP servers requiring auth", + "tui.tips.mcp_oauth": "Devora auto-handles OAuth for remote MCP servers requiring auth", "tui.tips.custom_command": - "Add {highlight}.md{/highlight} files to {highlight}.mimocode/command/{/highlight} to define reusable custom prompts", + "Add {highlight}.md{/highlight} files to {highlight}.devora/command/{/highlight} to define reusable custom prompts", "tui.tips.command_args": "Use {highlight}$ARGUMENTS{/highlight}, {highlight}$1{/highlight}, {highlight}$2{/highlight} in custom commands for dynamic input", "tui.tips.command_backticks": "Use backticks in commands to inject shell output (e.g., {highlight}`git status`{/highlight})", "tui.tips.custom_agent": - "Add {highlight}.md{/highlight} files to {highlight}.mimocode/agent/{/highlight} for specialized AI personas", + "Add {highlight}.md{/highlight} files to {highlight}.devora/agent/{/highlight} for specialized AI personas", "tui.tips.agent_perms": "Configure per-agent permissions for {highlight}edit{/highlight}, {highlight}bash{/highlight}, and {highlight}webfetch{/highlight} tools", "tui.tips.bash_allow": 'Use patterns like {highlight}"git *": "allow"{/highlight} for granular bash permissions', "tui.tips.bash_deny": 'Set {highlight}"rm -rf *": "deny"{/highlight} to block destructive commands', "tui.tips.bash_ask": 'Configure {highlight}"git push": "ask"{/highlight} to require approval before pushing', - "tui.tips.formatter": "MiMoCode auto-formats files using prettier, gofmt, ruff, and more", + "tui.tips.formatter": "Devora auto-formats files using prettier, gofmt, ruff, and more", "tui.tips.disable_formatter": 'Set {highlight}"formatter": false{/highlight} in config to disable all auto-formatting', "tui.tips.custom_formatter": "Define custom formatter commands with file extensions in config", - "tui.tips.lsp": "MiMoCode uses LSP servers for intelligent code analysis", + "tui.tips.lsp": "Devora uses LSP servers for intelligent code analysis", "tui.tips.custom_tool": - "Create {highlight}.ts{/highlight} files in {highlight}.mimocode/tools/{/highlight} to define new LLM tools", + "Create {highlight}.ts{/highlight} files in {highlight}.devora/tools/{/highlight} to define new LLM tools", "tui.tips.tool_scripts": "Tool definitions can invoke scripts written in Python, Go, etc", "tui.tips.plugins": - "Add {highlight}.ts{/highlight} files to {highlight}.mimocode/plugin/{/highlight} for event hooks", + "Add {highlight}.ts{/highlight} files to {highlight}.devora/plugin/{/highlight} for event hooks", "tui.tips.plugin_notify": "Use plugins to send OS notifications when sessions complete", - "tui.tips.plugin_protect": "Create a plugin to prevent MiMoCode from reading sensitive files", - "tui.tips.run": "Use {highlight}mimo run{/highlight} for non-interactive scripting", - "tui.tips.continue": "Use {highlight}mimo --continue{/highlight} to resume the last session", - "tui.tips.attach_cli": "Use {highlight}mimo run -f file.ts{/highlight} to attach files via CLI", + "tui.tips.plugin_protect": "Create a plugin to prevent Devora from reading sensitive files", + "tui.tips.run": "Use {highlight}devora run{/highlight} for non-interactive scripting", + "tui.tips.continue": "Use {highlight}devora --continue{/highlight} to resume the last session", + "tui.tips.attach_cli": "Use {highlight}devora run -f file.ts{/highlight} to attach files via CLI", "tui.tips.format_json": "Use {highlight}--format json{/highlight} for machine-readable output in scripts", - "tui.tips.serve": "Run {highlight}mimo serve{/highlight} for headless API access to MiMoCode", - "tui.tips.attach_server": "Use {highlight}mimo run --attach{/highlight} to connect to a running server", - "tui.tips.upgrade": "Run {highlight}mimo upgrade{/highlight} to update to the latest version", - "tui.tips.auth_list": "Run {highlight}mimo auth list{/highlight} to see all configured providers", - "tui.tips.agent_create": "Run {highlight}mimo agent create{/highlight} for guided agent creation", - "tui.tips.github_trigger": "Use {highlight}/opencode{/highlight} in GitHub issues/PRs to trigger AI actions", - "tui.tips.github_install": "Run {highlight}mimo github install{/highlight} to set up the GitHub workflow", + "tui.tips.serve": "Run {highlight}devora serve{/highlight} for headless API access to Devora", + "tui.tips.attach_server": "Use {highlight}devora run --attach{/highlight} to connect to a running server", + "tui.tips.upgrade": "Run {highlight}devora upgrade{/highlight} to update to the latest version", + "tui.tips.auth_list": "Run {highlight}devora auth list{/highlight} to see all configured providers", + "tui.tips.agent_create": "Run {highlight}devora agent create{/highlight} for guided agent creation", + "tui.tips.github_trigger": "Use {highlight}/devora{/highlight} in GitHub issues/PRs to trigger AI actions", + "tui.tips.github_install": "Run {highlight}devora github install{/highlight} to set up the GitHub workflow", "tui.tips.github_oc": "Comment {highlight}/oc{/highlight} on PR code lines for targeted code reviews", "tui.tips.theme_system": 'Use {highlight}"theme": "system"{/highlight} to match your terminal\'s colors', - "tui.tips.theme_files": "Create JSON theme files in {highlight}.mimocode/themes/{/highlight} directory", + "tui.tips.theme_files": "Create JSON theme files in {highlight}.devora/themes/{/highlight} directory", "tui.tips.theme_variants": "Themes support dark/light variants for both modes", "tui.tips.theme_ansi": "Reference ANSI colors 0-255 in custom themes", "tui.tips.env_var": "Use {highlight}{env:VAR_NAME}{/highlight} syntax to reference environment variables in config", @@ -146,7 +146,7 @@ export const dict: Record = { "tui.tips.unshare": "Run {highlight}/unshare{/highlight} to remove a session from public access", "tui.tips.doom_loop": "Permission {highlight}doom_loop{/highlight} prevents infinite tool call loops", "tui.tips.external_dir": "Permission {highlight}external_directory{/highlight} protects files outside project", - "tui.tips.debug_config": "Run {highlight}mimo debug config{/highlight} to troubleshoot configuration", + "tui.tips.debug_config": "Run {highlight}devora debug config{/highlight} to troubleshoot configuration", "tui.tips.print_logs": "Use {highlight}--print-logs{/highlight} flag to see detailed logs in stderr", "tui.tips.timeline": "Press {highlight}Ctrl+X G{/highlight} or {highlight}/timeline{/highlight} to jump to specific messages", @@ -156,8 +156,8 @@ export const dict: Record = { "tui.tips.scroll_accel": "Enable {highlight}scroll_acceleration{/highlight} in {highlight}tui.json{/highlight} for smooth macOS-style scrolling", "tui.tips.username_toggle": "Toggle username display in chat via command palette ({highlight}Ctrl+P{/highlight})", - "tui.tips.docker": "Run {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} for containerized use", - "tui.tips.zen": "Use {highlight}/connect{/highlight} with MiMo Code for curated, tested models", + "tui.tips.docker": "Run {highlight}docker run -it --rm ghcr.io/SheriAkhtamov/Devora{/highlight} for containerized use", + "tui.tips.zen": "Use {highlight}/connect{/highlight} with Devora for curated, tested models", "tui.tips.agents_md": "Commit your project's {highlight}AGENTS.md{/highlight} file to Git for team sharing", "tui.tips.review": "Use {highlight}/review{/highlight} to review uncommitted changes, branches, or PRs", "tui.tips.help": "Run {highlight}/help{/highlight} or {highlight}Ctrl+X H{/highlight} to show the help dialog", @@ -209,7 +209,7 @@ export const dict: Record = { "tui.command.provider.connect.title": "Connect provider", "tui.command.provider.logout.title": "Logout", "tui.command.console.org.switch.title": "Switch org", - "tui.command.opencode.status.title": "View status", + "tui.command.devora.status.title": "View status", "tui.command.worktree.list.title": "Worktrees", "tui.command.theme.switch.title": "Switch theme", "tui.command.image.switch.title": "Switch background image", @@ -338,7 +338,7 @@ export const dict: Record = { "tui.command.voice.control.title": "Toggle voice control (multimodal)", "tui.command.voice.control.title_on": "Voice control: ON (multimodal) — click to turn off", "tui.command.voice.control.title_off": "Voice control: OFF (fast ASR) — click to turn on", - "tui.voice.error.no_auth": "Please log in to MiMo first", + "tui.voice.error.no_auth": "Please log in to Devora first", "tui.voice.error.no_recorder": "No recording tool found, please install sox", "tui.voice.error.too_short": "Recording too short", "tui.voice.error.network": "Transcription failed, please check your network", @@ -354,30 +354,30 @@ export const dict: Record = { "tui.command.plugins.list.title": "Plugins", "tui.command.plugins.install.title": "Install plugin", "tui.dialog.login.title": "Select provider", - "tui.dialog.login.xiaomi": "Xiaomi", - "tui.dialog.login.xiaomi.desc": "(Recommended)", - "tui.dialog.login.mimo_free": "MiMo Auto (free)", - "tui.dialog.login.mimo_free.desc": "Anonymous free channel — no login required", - "tui.dialog.login.mimo_free.success": "MiMo Auto (free) is ready — default model set to mimo/mimo-auto", - "tui.dialog.login.mimo_free.unavailable": "MiMo Auto (free) provider not loaded", + "tui.dialog.login.devora": "Devora", + "tui.dialog.login.devora.desc": "(Recommended)", + "tui.dialog.login.devora_free": "Devora Auto (free)", + "tui.dialog.login.devora_free.desc": "Anonymous free channel — no login required", + "tui.dialog.login.devora_free.success": "Devora Auto (free) is ready — default model set to devora/devora-auto", + "tui.dialog.login.devora_free.unavailable": "Devora Auto (free) provider not loaded", "cli.providers.select": "Select provider", "cli.providers.other": "Other provider", - "cli.providers.mimo.recommended_hint": "recommended", - "cli.providers.mimo_free.hint": "Anonymous free channel / mimo-auto", - "cli.providers.mimo_free.verifying": "Verifying MiMo Auto (free) channel...", - "cli.providers.mimo_free.ready": "MiMo Auto (free) channel ready", - "cli.providers.mimo_free.failed": "MiMo Auto (free) verification failed", - "cli.providers.mimo_free.default_set": "Default model set to mimo/mimo-auto (1M context, free)", - "cli.providers.mimo_free.usage_hint": "No login required — just run mimo. For paid/premium models, choose MiMo browser login instead.", - "cli.providers.mimo_login.decrypt_retry": "Decryption failed, please retry ({remaining} attempts left)", - "cli.providers.mimo_login.decrypt_exhausted": "Decryption failed, max retries reached", + "cli.providers.devora.recommended_hint": "recommended", + "cli.providers.devora_free.hint": "Anonymous free channel / devora-auto", + "cli.providers.devora_free.verifying": "Verifying Devora Auto (free) channel...", + "cli.providers.devora_free.ready": "Devora Auto (free) channel ready", + "cli.providers.devora_free.failed": "Devora Auto (free) verification failed", + "cli.providers.devora_free.default_set": "Default model set to devora/devora-auto (1M context, free)", + "cli.providers.devora_free.usage_hint": "No login required — just run devora. For paid/premium models, choose Devora browser login instead.", + "cli.providers.devora_login.decrypt_retry": "Decryption failed, please retry ({remaining} attempts left)", + "cli.providers.devora_login.decrypt_exhausted": "Decryption failed, max retries reached", "tui.dialog.login.import_claude": "Import from Claude Code", "tui.dialog.login.other": "Other Provider", "tui.dialog.login.import_claude.no_key": "Claude Code API Key not found", "tui.dialog.login.import_claude.read_failed": "Failed to read ~/.claude/settings.json", "tui.dialog.login.import_claude.success": "Imported from Claude Code", "tui.dialog.login.start_failed": "Failed to start login", - "tui.dialog.login.flow.title": "MiMo Login", + "tui.dialog.login.flow.title": "Devora Login", "tui.dialog.login.flow.placeholder": "Paste Code (or wait for browser callback)", "tui.dialog.login.flow.busy": "Logging in...", "tui.dialog.login.flow.manual_hint": "Browser didn't open? Visit manually:", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/es.ts b/packages/devora/src/cli/cmd/tui/i18n/es.ts similarity index 90% rename from packages/opencode/src/cli/cmd/tui/i18n/es.ts rename to packages/devora/src/cli/cmd/tui/i18n/es.ts index bd7a1f54..93d61b60 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/es.ts +++ b/packages/devora/src/cli/cmd/tui/i18n/es.ts @@ -57,7 +57,7 @@ export const dict = { "tui.tips.redo": "Usa {highlight}/redo{/highlight} para restaurar mensajes y cambios deshechos previamente", "tui.tips.share": - "Ejecuta {highlight}/share{/highlight} para crear un enlace público a tu conversación en opencode.ai", + "Ejecuta {highlight}/share{/highlight} para crear un enlace público a tu conversación en devora.ai", "tui.tips.drag_drop": "Arrastra y suelta imágenes o PDF en el terminal para añadirlos como contexto", "tui.tips.paste_image": "Pulsa {highlight}Ctrl+V{/highlight} para pegar imágenes desde el portapapeles en la entrada", @@ -107,9 +107,9 @@ export const dict = { "tui.tips.cycle_sessions": "Pulsa {highlight}Ctrl+X Right/Left{/highlight} para alternar entre sesiones padre e hija", "tui.tips.config_files": - "Crea {highlight}mimocode.json{/highlight} para la configuración del servidor y {highlight}tui.json{/highlight} para la TUI", + "Crea {highlight}devora.json{/highlight} para la configuración del servidor y {highlight}tui.json{/highlight} para la TUI", "tui.tips.global_config": - "Coloca la configuración de TUI en {highlight}~/.config/mimocode/tui.json{/highlight} como configuración global", + "Coloca la configuración de TUI en {highlight}~/.config/devora/tui.json{/highlight} como configuración global", "tui.tips.schema": "Añade {highlight}$schema{/highlight} a tu configuración para autocompletado en el editor", "tui.tips.default_model": @@ -121,15 +121,15 @@ export const dict = { "tui.tips.mcp_config": "Configura servidores MCP locales o remotos en la sección {highlight}mcp{/highlight}", "tui.tips.mcp_oauth": - "MiMoCode gestiona automáticamente OAuth para servidores MCP remotos que requieran autenticación", + "Devora gestiona automáticamente OAuth para servidores MCP remotos que requieran autenticación", "tui.tips.custom_command": - "Añade archivos {highlight}.md{/highlight} en {highlight}.mimocode/command/{/highlight} para definir indicaciones personalizadas reutilizables", + "Añade archivos {highlight}.md{/highlight} en {highlight}.devora/command/{/highlight} para definir indicaciones personalizadas reutilizables", "tui.tips.command_args": "Usa {highlight}$ARGUMENTS{/highlight}, {highlight}$1{/highlight}, {highlight}$2{/highlight} en comandos personalizados para entradas dinámicas", "tui.tips.command_backticks": "Usa comillas invertidas en los comandos para inyectar la salida del shell (p. ej. {highlight}`git status`{/highlight})", "tui.tips.custom_agent": - "Añade archivos {highlight}.md{/highlight} en {highlight}.mimocode/agent/{/highlight} para personajes de IA especializados", + "Añade archivos {highlight}.md{/highlight} en {highlight}.devora/agent/{/highlight} para personajes de IA especializados", "tui.tips.agent_perms": "Configura por agente los permisos de las herramientas {highlight}edit{/highlight}, {highlight}bash{/highlight} y {highlight}webfetch{/highlight}", "tui.tips.bash_allow": @@ -138,50 +138,50 @@ export const dict = { 'Define {highlight}"rm -rf *": "deny"{/highlight} para bloquear comandos destructivos', "tui.tips.bash_ask": 'Configura {highlight}"git push": "ask"{/highlight} para exigir confirmación antes de hacer push', - "tui.tips.formatter": "MiMoCode formatea archivos automáticamente con prettier, gofmt, ruff y más", + "tui.tips.formatter": "Devora formatea archivos automáticamente con prettier, gofmt, ruff y más", "tui.tips.disable_formatter": 'Define {highlight}"formatter": false{/highlight} en la config para desactivar el formato automático', "tui.tips.custom_formatter": "Define comandos de formateo personalizados por extensión de archivo en la configuración", - "tui.tips.lsp": "MiMoCode usa servidores LSP para análisis inteligente de código", + "tui.tips.lsp": "Devora usa servidores LSP para análisis inteligente de código", "tui.tips.custom_tool": - "Crea archivos {highlight}.ts{/highlight} en {highlight}.mimocode/tools/{/highlight} para definir nuevas herramientas LLM", + "Crea archivos {highlight}.ts{/highlight} en {highlight}.devora/tools/{/highlight} para definir nuevas herramientas LLM", "tui.tips.tool_scripts": "Las definiciones de herramientas pueden invocar scripts en Python, Go, etc.", "tui.tips.plugins": - "Añade archivos {highlight}.ts{/highlight} en {highlight}.mimocode/plugin/{/highlight} para enganchar eventos", + "Añade archivos {highlight}.ts{/highlight} en {highlight}.devora/plugin/{/highlight} para enganchar eventos", "tui.tips.plugin_notify": "Usa plugins para enviar notificaciones del sistema cuando termine una sesión", "tui.tips.plugin_protect": - "Crea un plugin que impida a MiMoCode leer archivos sensibles", + "Crea un plugin que impida a Devora leer archivos sensibles", "tui.tips.run": - "Usa {highlight}mimo run{/highlight} para scripting no interactivo", + "Usa {highlight}devora run{/highlight} para scripting no interactivo", "tui.tips.continue": - "Usa {highlight}mimo --continue{/highlight} para retomar la última sesión", + "Usa {highlight}devora --continue{/highlight} para retomar la última sesión", "tui.tips.attach_cli": - "Usa {highlight}mimo run -f file.ts{/highlight} para adjuntar archivos vía CLI", + "Usa {highlight}devora run -f file.ts{/highlight} para adjuntar archivos vía CLI", "tui.tips.format_json": "Usa {highlight}--format json{/highlight} para obtener salida legible por máquina en scripts", "tui.tips.serve": - "Ejecuta {highlight}mimo serve{/highlight} para acceso headless a la API de MiMoCode", + "Ejecuta {highlight}devora serve{/highlight} para acceso headless a la API de Devora", "tui.tips.attach_server": - "Usa {highlight}mimo run --attach{/highlight} para conectarte a un servidor en ejecución", + "Usa {highlight}devora run --attach{/highlight} para conectarte a un servidor en ejecución", "tui.tips.upgrade": - "Ejecuta {highlight}mimo upgrade{/highlight} para actualizar a la última versión", + "Ejecuta {highlight}devora upgrade{/highlight} para actualizar a la última versión", "tui.tips.auth_list": - "Ejecuta {highlight}mimo auth list{/highlight} para ver todos los proveedores configurados", + "Ejecuta {highlight}devora auth list{/highlight} para ver todos los proveedores configurados", "tui.tips.agent_create": - "Ejecuta {highlight}mimo agent create{/highlight} para crear un agente con asistente guiado", + "Ejecuta {highlight}devora agent create{/highlight} para crear un agente con asistente guiado", "tui.tips.github_trigger": - "Usa {highlight}/opencode{/highlight} en issues/PR de GitHub para disparar acciones de IA", + "Usa {highlight}/devora{/highlight} en issues/PR de GitHub para disparar acciones de IA", "tui.tips.github_install": - "Ejecuta {highlight}mimo github install{/highlight} para configurar el workflow de GitHub", + "Ejecuta {highlight}devora github install{/highlight} para configurar el workflow de GitHub", "tui.tips.github_oc": "Comenta {highlight}/oc{/highlight} en líneas de código de un PR para revisiones puntuales", "tui.tips.theme_system": 'Usa {highlight}"theme": "system"{/highlight} para seguir los colores de tu terminal', "tui.tips.theme_files": - "Crea archivos JSON de tema en el directorio {highlight}.mimocode/themes/{/highlight}", + "Crea archivos JSON de tema en el directorio {highlight}.devora/themes/{/highlight}", "tui.tips.theme_variants": "Los temas admiten variantes claras/oscuras para ambos modos", "tui.tips.theme_ansi": "Referencia colores ANSI 0-255 en temas personalizados", "tui.tips.env_var": @@ -211,7 +211,7 @@ export const dict = { "tui.tips.external_dir": "El permiso {highlight}external_directory{/highlight} protege archivos fuera del proyecto", "tui.tips.debug_config": - "Ejecuta {highlight}mimo debug config{/highlight} para diagnosticar problemas de configuración", + "Ejecuta {highlight}devora debug config{/highlight} para diagnosticar problemas de configuración", "tui.tips.print_logs": "Usa la opción {highlight}--print-logs{/highlight} para ver logs detallados en stderr", "tui.tips.timeline": @@ -225,9 +225,9 @@ export const dict = { "tui.tips.username_toggle": "Activa/desactiva la visualización del nombre de usuario desde la paleta de comandos ({highlight}Ctrl+P{/highlight})", "tui.tips.docker": - "Ejecuta {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} para uso en contenedor", + "Ejecuta {highlight}docker run -it --rm ghcr.io/SheriAkhtamov/Devora{/highlight} para uso en contenedor", "tui.tips.zen": - "Usa {highlight}/connect{/highlight} con MiMo Code para modelos seleccionados y probados", + "Usa {highlight}/connect{/highlight} con Devora para modelos seleccionados y probados", "tui.tips.agents_md": "Sube el {highlight}AGENTS.md{/highlight} de tu proyecto a Git para compartirlo con el equipo", "tui.tips.review": @@ -285,7 +285,7 @@ export const dict = { "tui.command.provider.connect.title": "Conectar proveedor", "tui.command.provider.logout.title": "Cerrar sesión", "tui.command.console.org.switch.title": "Cambiar de organización", - "tui.command.opencode.status.title": "Ver estado", + "tui.command.devora.status.title": "Ver estado", "tui.command.theme.switch.title": "Cambiar tema", "tui.command.logo.switch.title": "Cambiar diseño de logo", "tui.dialog.logo.title": "Diseño de logo", @@ -404,7 +404,7 @@ export const dict = { "tui.command.voice.control.title": "Alternar control de voz (multimodal)", "tui.command.voice.control.title_on": "Control de voz: activado (multimodal) — clic para desactivar", "tui.command.voice.control.title_off": "Control de voz: desactivado (ASR rápido) — clic para activar", - "tui.voice.error.no_auth": "Inicia sesión en MiMo primero", + "tui.voice.error.no_auth": "Inicia sesión en Devora primero", "tui.voice.error.no_recorder": "No se encontró herramienta de grabación, instala sox", "tui.voice.error.too_short": "Grabación demasiado corta", "tui.voice.error.network": "La transcripción falló, verifica tu red", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/fr.ts b/packages/devora/src/cli/cmd/tui/i18n/fr.ts similarity index 86% rename from packages/opencode/src/cli/cmd/tui/i18n/fr.ts rename to packages/devora/src/cli/cmd/tui/i18n/fr.ts index 5d75579f..b22b7579 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/fr.ts +++ b/packages/devora/src/cli/cmd/tui/i18n/fr.ts @@ -55,7 +55,7 @@ export const dict = { "tui.tips.undo": "Utilisez {highlight}/undo{/highlight} pour annuler le dernier message et ses modifications", "tui.tips.redo": "Utilisez {highlight}/redo{/highlight} pour rétablir des messages et modifications précédemment annulés", "tui.tips.share": - "Exécutez {highlight}/share{/highlight} pour créer un lien public vers votre conversation sur opencode.ai", + "Exécutez {highlight}/share{/highlight} pour créer un lien public vers votre conversation sur devora.ai", "tui.tips.drag_drop": "Glissez-déposez des images ou PDF dans le terminal pour les ajouter au contexte", "tui.tips.paste_image": "Appuyez sur {highlight}Ctrl+V{/highlight} pour coller des images du presse-papiers dans l'invite", @@ -104,9 +104,9 @@ export const dict = { "tui.tips.cycle_sessions": "Appuyez sur {highlight}Ctrl+X Right/Left{/highlight} pour parcourir les sessions parent et enfant", "tui.tips.config_files": - "Créez {highlight}mimocode.json{/highlight} pour la configuration serveur et {highlight}tui.json{/highlight} pour le TUI", + "Créez {highlight}devora.json{/highlight} pour la configuration serveur et {highlight}tui.json{/highlight} pour le TUI", "tui.tips.global_config": - "Placez les paramètres TUI dans {highlight}~/.config/mimocode/tui.json{/highlight} comme configuration globale", + "Placez les paramètres TUI dans {highlight}~/.config/devora/tui.json{/highlight} comme configuration globale", "tui.tips.schema": "Ajoutez {highlight}$schema{/highlight} à votre config pour l'auto-complétion dans l'éditeur", "tui.tips.default_model": "Configurez {highlight}model{/highlight} dans la config pour définir le modèle par défaut", "tui.tips.keybinds": @@ -116,15 +116,15 @@ export const dict = { "tui.tips.mcp_config": "Configurez les serveurs MCP locaux ou distants dans la section {highlight}mcp{/highlight}", "tui.tips.mcp_oauth": - "MiMoCode gère automatiquement OAuth pour les serveurs MCP distants nécessitant une authentification", + "Devora gère automatiquement OAuth pour les serveurs MCP distants nécessitant une authentification", "tui.tips.custom_command": - "Ajoutez des fichiers {highlight}.md{/highlight} dans {highlight}.mimocode/command/{/highlight} pour définir des invites personnalisées réutilisables", + "Ajoutez des fichiers {highlight}.md{/highlight} dans {highlight}.devora/command/{/highlight} pour définir des invites personnalisées réutilisables", "tui.tips.command_args": "Utilisez {highlight}$ARGUMENTS{/highlight}, {highlight}$1{/highlight}, {highlight}$2{/highlight} dans les commandes pour des entrées dynamiques", "tui.tips.command_backticks": "Utilisez des backticks dans les commandes pour injecter la sortie shell (ex. {highlight}`git status`{/highlight})", "tui.tips.custom_agent": - "Ajoutez des fichiers {highlight}.md{/highlight} dans {highlight}.mimocode/agent/{/highlight} pour des personas IA spécialisés", + "Ajoutez des fichiers {highlight}.md{/highlight} dans {highlight}.devora/agent/{/highlight} pour des personas IA spécialisés", "tui.tips.agent_perms": "Configurez par agent les permissions des outils {highlight}edit{/highlight}, {highlight}bash{/highlight} et {highlight}webfetch{/highlight}", "tui.tips.bash_allow": @@ -133,45 +133,45 @@ export const dict = { 'Définissez {highlight}"rm -rf *": "deny"{/highlight} pour bloquer les commandes destructrices', "tui.tips.bash_ask": 'Configurez {highlight}"git push": "ask"{/highlight} pour exiger une confirmation avant le push', - "tui.tips.formatter": "MiMoCode formate automatiquement les fichiers avec prettier, gofmt, ruff, etc.", + "tui.tips.formatter": "Devora formate automatiquement les fichiers avec prettier, gofmt, ruff, etc.", "tui.tips.disable_formatter": 'Définissez {highlight}"formatter": false{/highlight} dans la config pour désactiver le formatage automatique', "tui.tips.custom_formatter": "Définissez des commandes de formatage personnalisées par extension de fichier dans la config", - "tui.tips.lsp": "MiMoCode utilise des serveurs LSP pour une analyse de code intelligente", + "tui.tips.lsp": "Devora utilise des serveurs LSP pour une analyse de code intelligente", "tui.tips.custom_tool": - "Créez des fichiers {highlight}.ts{/highlight} dans {highlight}.mimocode/tools/{/highlight} pour définir de nouveaux outils LLM", + "Créez des fichiers {highlight}.ts{/highlight} dans {highlight}.devora/tools/{/highlight} pour définir de nouveaux outils LLM", "tui.tips.tool_scripts": "Les définitions d'outils peuvent invoquer des scripts en Python, Go, etc.", "tui.tips.plugins": - "Ajoutez des fichiers {highlight}.ts{/highlight} dans {highlight}.mimocode/plugin/{/highlight} pour des hooks d'événements", + "Ajoutez des fichiers {highlight}.ts{/highlight} dans {highlight}.devora/plugin/{/highlight} pour des hooks d'événements", "tui.tips.plugin_notify": "Utilisez des plugins pour envoyer des notifications système à la fin des sessions", "tui.tips.plugin_protect": - "Créez un plugin pour empêcher MiMoCode de lire des fichiers sensibles", - "tui.tips.run": "Utilisez {highlight}mimo run{/highlight} pour des scripts non interactifs", - "tui.tips.continue": "Utilisez {highlight}mimo --continue{/highlight} pour reprendre la dernière session", + "Créez un plugin pour empêcher Devora de lire des fichiers sensibles", + "tui.tips.run": "Utilisez {highlight}devora run{/highlight} pour des scripts non interactifs", + "tui.tips.continue": "Utilisez {highlight}devora --continue{/highlight} pour reprendre la dernière session", "tui.tips.attach_cli": - "Utilisez {highlight}mimo run -f file.ts{/highlight} pour joindre des fichiers via la CLI", + "Utilisez {highlight}devora run -f file.ts{/highlight} pour joindre des fichiers via la CLI", "tui.tips.format_json": "Utilisez {highlight}--format json{/highlight} pour une sortie lisible par machine dans les scripts", - "tui.tips.serve": "Exécutez {highlight}mimo serve{/highlight} pour exposer l'API MiMoCode en mode headless", + "tui.tips.serve": "Exécutez {highlight}devora serve{/highlight} pour exposer l'API Devora en mode headless", "tui.tips.attach_server": - "Utilisez {highlight}mimo run --attach{/highlight} pour vous connecter à un serveur en cours", - "tui.tips.upgrade": "Exécutez {highlight}mimo upgrade{/highlight} pour passer à la dernière version", + "Utilisez {highlight}devora run --attach{/highlight} pour vous connecter à un serveur en cours", + "tui.tips.upgrade": "Exécutez {highlight}devora upgrade{/highlight} pour passer à la dernière version", "tui.tips.auth_list": - "Exécutez {highlight}mimo auth list{/highlight} pour voir tous les fournisseurs configurés", + "Exécutez {highlight}devora auth list{/highlight} pour voir tous les fournisseurs configurés", "tui.tips.agent_create": - "Exécutez {highlight}mimo agent create{/highlight} pour créer un agent en mode guidé", + "Exécutez {highlight}devora agent create{/highlight} pour créer un agent en mode guidé", "tui.tips.github_trigger": - "Utilisez {highlight}/opencode{/highlight} dans les issues/PR GitHub pour déclencher des actions IA", + "Utilisez {highlight}/devora{/highlight} dans les issues/PR GitHub pour déclencher des actions IA", "tui.tips.github_install": - "Exécutez {highlight}mimo github install{/highlight} pour configurer le workflow GitHub", + "Exécutez {highlight}devora github install{/highlight} pour configurer le workflow GitHub", "tui.tips.github_oc": "Commentez {highlight}/oc{/highlight} sur une ligne de PR pour une revue ciblée", "tui.tips.theme_system": 'Utilisez {highlight}"theme": "system"{/highlight} pour suivre les couleurs du terminal', "tui.tips.theme_files": - "Créez des fichiers de thème JSON dans le dossier {highlight}.mimocode/themes/{/highlight}", + "Créez des fichiers de thème JSON dans le dossier {highlight}.devora/themes/{/highlight}", "tui.tips.theme_variants": "Les thèmes prennent en charge des variantes claires/sombres pour les deux modes", "tui.tips.theme_ansi": "Référencez les couleurs ANSI 0-255 dans des thèmes personnalisés", "tui.tips.env_var": @@ -201,7 +201,7 @@ export const dict = { "tui.tips.external_dir": "La permission {highlight}external_directory{/highlight} protège les fichiers en dehors du projet", "tui.tips.debug_config": - "Exécutez {highlight}mimo debug config{/highlight} pour diagnostiquer la configuration", + "Exécutez {highlight}devora debug config{/highlight} pour diagnostiquer la configuration", "tui.tips.print_logs": "Utilisez l'option {highlight}--print-logs{/highlight} pour afficher des journaux détaillés sur stderr", "tui.tips.timeline": @@ -215,9 +215,9 @@ export const dict = { "tui.tips.username_toggle": "Activez/désactivez l'affichage du nom d'utilisateur via la palette de commandes ({highlight}Ctrl+P{/highlight})", "tui.tips.docker": - "Exécutez {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} pour une utilisation conteneurisée", + "Exécutez {highlight}docker run -it --rm ghcr.io/SheriAkhtamov/Devora{/highlight} pour une utilisation conteneurisée", "tui.tips.zen": - "Utilisez {highlight}/connect{/highlight} avec MiMo Code pour des modèles testés et sélectionnés", + "Utilisez {highlight}/connect{/highlight} avec Devora pour des modèles testés et sélectionnés", "tui.tips.agents_md": "Versionnez le fichier {highlight}AGENTS.md{/highlight} de votre projet sur Git pour le partager avec l'équipe", "tui.tips.review": @@ -273,7 +273,7 @@ export const dict = { "tui.command.provider.connect.title": "Connecter un fournisseur", "tui.command.provider.logout.title": "Déconnexion", "tui.command.console.org.switch.title": "Changer d'organisation", - "tui.command.opencode.status.title": "Voir l'état", + "tui.command.devora.status.title": "Voir l'état", "tui.command.theme.switch.title": "Changer de thème", "tui.command.logo.switch.title": "Changer le design du logo", "tui.dialog.logo.title": "Design du logo", @@ -393,7 +393,7 @@ export const dict = { "tui.command.voice.control.title": "Basculer le contrôle vocal (multimodal)", "tui.command.voice.control.title_on": "Contrôle vocal : activé (multimodal) — cliquer pour désactiver", "tui.command.voice.control.title_off": "Contrôle vocal : désactivé (ASR rapide) — cliquer pour activer", - "tui.voice.error.no_auth": "Veuillez d'abord vous connecter à MiMo", + "tui.voice.error.no_auth": "Veuillez d'abord vous connecter à Devora", "tui.voice.error.no_recorder": "Aucun outil d'enregistrement trouvé, installez sox", "tui.voice.error.too_short": "Enregistrement trop court", "tui.voice.error.network": "La transcription a échoué, vérifiez votre réseau", @@ -407,25 +407,25 @@ export const dict = { "tui.command.plugins.list.title": "Plugins", "tui.command.plugins.install.title": "Installer un plugin", - // MiMo Auto (free) — TUI login dialog - "tui.dialog.login.mimo_free": "MiMo Auto (free)", - "tui.dialog.login.mimo_free.desc": "Canal anonyme gratuit — aucune connexion requise", - "tui.dialog.login.mimo_free.success": "MiMo Auto (free) est prêt — modèle par défaut défini sur mimo/mimo-auto", - "tui.dialog.login.mimo_free.unavailable": "Fournisseur MiMo Auto (free) non chargé", + // Devora Auto (free) — TUI login dialog + "tui.dialog.login.devora_free": "Devora Auto (free)", + "tui.dialog.login.devora_free.desc": "Canal anonyme gratuit — aucune connexion requise", + "tui.dialog.login.devora_free.success": "Devora Auto (free) est prêt — modèle par défaut défini sur devora/devora-auto", + "tui.dialog.login.devora_free.unavailable": "Fournisseur Devora Auto (free) non chargé", // CLI: providers command (auth login) "cli.providers.select": "Sélectionner un fournisseur", "cli.providers.other": "Autre fournisseur", - "cli.providers.mimo.recommended_hint": "recommandé", - "cli.providers.mimo_free.hint": "Canal anonyme gratuit / mimo-auto", - "cli.providers.mimo_free.verifying": "Vérification du canal MiMo Auto (free)...", - "cli.providers.mimo_free.ready": "Canal MiMo Auto (free) prêt", - "cli.providers.mimo_free.failed": "Échec de la vérification de MiMo Auto (free)", - "cli.providers.mimo_free.default_set": "Modèle par défaut défini sur mimo/mimo-auto (contexte 1M, gratuit)", - "cli.providers.mimo_free.usage_hint": - "Aucune connexion requise — exécutez simplement mimo. Pour les modèles payants/premium, choisissez plutôt la connexion navigateur MiMo.", - "cli.providers.mimo_login.decrypt_retry": "Échec du déchiffrement, veuillez réessayer ({remaining} tentatives restantes)", - "cli.providers.mimo_login.decrypt_exhausted": "Échec du déchiffrement, nombre maximal de tentatives atteint", + "cli.providers.devora.recommended_hint": "recommandé", + "cli.providers.devora_free.hint": "Canal anonyme gratuit / devora-auto", + "cli.providers.devora_free.verifying": "Vérification du canal Devora Auto (free)...", + "cli.providers.devora_free.ready": "Canal Devora Auto (free) prêt", + "cli.providers.devora_free.failed": "Échec de la vérification de Devora Auto (free)", + "cli.providers.devora_free.default_set": "Modèle par défaut défini sur devora/devora-auto (contexte 1M, gratuit)", + "cli.providers.devora_free.usage_hint": + "Aucune connexion requise — exécutez simplement devora. Pour les modèles payants/premium, choisissez plutôt la connexion navigateur Devora.", + "cli.providers.devora_login.decrypt_retry": "Échec du déchiffrement, veuillez réessayer ({remaining} tentatives restantes)", + "cli.providers.devora_login.decrypt_exhausted": "Échec du déchiffrement, nombre maximal de tentatives atteint", // Question i18n — plan_exit "tui.question.plan_exit.question": "Le plan {{plan}} est terminé. Voulez-vous basculer vers l'agent build pour commencer l'implémentation ?", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/ja.ts b/packages/devora/src/cli/cmd/tui/i18n/ja.ts similarity index 84% rename from packages/opencode/src/cli/cmd/tui/i18n/ja.ts rename to packages/devora/src/cli/cmd/tui/i18n/ja.ts index 72289f3e..5035affe 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/ja.ts +++ b/packages/devora/src/cli/cmd/tui/i18n/ja.ts @@ -52,7 +52,7 @@ export const dict = { "tui.tips.background": "{highlight}/background{/highlight} を実行してホーム背景にお好みの画像を設定できます", "tui.tips.undo": "{highlight}/undo{/highlight} で直前のメッセージとファイル変更を取り消します", "tui.tips.redo": "{highlight}/redo{/highlight} で取り消したメッセージとファイル変更を復元します", - "tui.tips.share": "{highlight}/share{/highlight} を実行すると opencode.ai に会話の公開リンクを作成します", + "tui.tips.share": "{highlight}/share{/highlight} を実行すると devora.ai に会話の公開リンクを作成します", "tui.tips.drag_drop": "画像や PDF をターミナルにドラッグ&ドロップしてコンテキストに追加できます", "tui.tips.paste_image": "{highlight}Ctrl+V{/highlight} でクリップボードの画像をプロンプトに貼り付けます", "tui.tips.editor": @@ -91,56 +91,56 @@ export const dict = { "tui.tips.subagent": "プロンプト内で {highlight}@agent-name{/highlight} を使うと専用サブエージェントを呼び出します", "tui.tips.cycle_sessions": "{highlight}Ctrl+X Right/Left{/highlight} で親子セッション間を移動します", "tui.tips.config_files": - "サーバ設定は {highlight}mimocode.json{/highlight}、TUI 設定は {highlight}tui.json{/highlight} を作成します", + "サーバ設定は {highlight}devora.json{/highlight}、TUI 設定は {highlight}tui.json{/highlight} を作成します", "tui.tips.global_config": - "TUI 設定をグローバルに置くなら {highlight}~/.config/mimocode/tui.json{/highlight} を使います", + "TUI 設定をグローバルに置くなら {highlight}~/.config/devora/tui.json{/highlight} を使います", "tui.tips.schema": "設定に {highlight}$schema{/highlight} を加えるとエディタで自動補完されます", "tui.tips.default_model": "設定の {highlight}model{/highlight} でデフォルトモデルを指定します", "tui.tips.keybinds": "{highlight}tui.json{/highlight} の {highlight}keybinds{/highlight} セクションで任意のキーバインドを上書きできます", "tui.tips.disable_keybind": "任意のキーバインドを {highlight}none{/highlight} にすると完全に無効化できます", "tui.tips.mcp_config": "{highlight}mcp{/highlight} 設定セクションでローカル/リモート MCP サーバを設定します", - "tui.tips.mcp_oauth": "MiMoCode は認証が必要なリモート MCP サーバの OAuth を自動処理します", + "tui.tips.mcp_oauth": "Devora は認証が必要なリモート MCP サーバの OAuth を自動処理します", "tui.tips.custom_command": - "{highlight}.mimocode/command/{/highlight} に {highlight}.md{/highlight} ファイルを追加すると再利用可能なカスタムプロンプトを定義できます", + "{highlight}.devora/command/{/highlight} に {highlight}.md{/highlight} ファイルを追加すると再利用可能なカスタムプロンプトを定義できます", "tui.tips.command_args": "カスタムコマンドで {highlight}$ARGUMENTS{/highlight}、{highlight}$1{/highlight}、{highlight}$2{/highlight} を使うと動的な入力を受け取れます", "tui.tips.command_backticks": "コマンド内でバッククォートを使うとシェル出力を埋め込めます(例:{highlight}`git status`{/highlight})", "tui.tips.custom_agent": - "{highlight}.mimocode/agent/{/highlight} に {highlight}.md{/highlight} ファイルを追加して専用 AI ペルソナを作れます", + "{highlight}.devora/agent/{/highlight} に {highlight}.md{/highlight} ファイルを追加して専用 AI ペルソナを作れます", "tui.tips.agent_perms": "エージェントごとに {highlight}edit{/highlight}、{highlight}bash{/highlight}、{highlight}webfetch{/highlight} ツールの権限を設定できます", "tui.tips.bash_allow": '{highlight}"git *": "allow"{/highlight} のようなパターンで bash 権限を細かく制御できます', "tui.tips.bash_deny": '{highlight}"rm -rf *": "deny"{/highlight} を設定して破壊的なコマンドをブロックします', "tui.tips.bash_ask": '{highlight}"git push": "ask"{/highlight} を設定すると push 前に承認を求めます', - "tui.tips.formatter": "MiMoCode は prettier、gofmt、ruff などでファイルを自動整形します", + "tui.tips.formatter": "Devora は prettier、gofmt、ruff などでファイルを自動整形します", "tui.tips.disable_formatter": '設定で {highlight}"formatter": false{/highlight} にするとすべての自動整形を無効化できます', "tui.tips.custom_formatter": "拡張子ごとのカスタム整形コマンドを設定で定義できます", - "tui.tips.lsp": "MiMoCode はインテリジェントなコード解析に LSP サーバを使います", + "tui.tips.lsp": "Devora はインテリジェントなコード解析に LSP サーバを使います", "tui.tips.custom_tool": - "{highlight}.mimocode/tools/{/highlight} に {highlight}.ts{/highlight} ファイルを作って新しい LLM ツールを定義します", + "{highlight}.devora/tools/{/highlight} に {highlight}.ts{/highlight} ファイルを作って新しい LLM ツールを定義します", "tui.tips.tool_scripts": "ツール定義から Python、Go などのスクリプトを呼び出せます", "tui.tips.plugins": - "{highlight}.mimocode/plugin/{/highlight} に {highlight}.ts{/highlight} ファイルを追加してイベントフックを実装できます", + "{highlight}.devora/plugin/{/highlight} に {highlight}.ts{/highlight} ファイルを追加してイベントフックを実装できます", "tui.tips.plugin_notify": "プラグインでセッション完了時に OS 通知を送れます", - "tui.tips.plugin_protect": "プラグインを書いて MiMoCode が機密ファイルを読まないようにできます", - "tui.tips.run": "{highlight}mimo run{/highlight} で非対話的なスクリプト実行ができます", - "tui.tips.continue": "{highlight}mimo --continue{/highlight} で前回のセッションを再開します", - "tui.tips.attach_cli": "{highlight}mimo run -f file.ts{/highlight} で CLI からファイルを添付できます", + "tui.tips.plugin_protect": "プラグインを書いて Devora が機密ファイルを読まないようにできます", + "tui.tips.run": "{highlight}devora run{/highlight} で非対話的なスクリプト実行ができます", + "tui.tips.continue": "{highlight}devora --continue{/highlight} で前回のセッションを再開します", + "tui.tips.attach_cli": "{highlight}devora run -f file.ts{/highlight} で CLI からファイルを添付できます", "tui.tips.format_json": "{highlight}--format json{/highlight} を使うとスクリプトで機械可読な出力を得られます", - "tui.tips.serve": "{highlight}mimo serve{/highlight} を実行するとヘッドレスで MiMoCode API にアクセスできます", - "tui.tips.attach_server": "{highlight}mimo run --attach{/highlight} で起動中のサーバに接続します", - "tui.tips.upgrade": "{highlight}mimo upgrade{/highlight} で最新バージョンに更新します", - "tui.tips.auth_list": "{highlight}mimo auth list{/highlight} で設定済みプロバイダを確認します", - "tui.tips.agent_create": "{highlight}mimo agent create{/highlight} でガイド付きエージェント作成を行います", - "tui.tips.github_trigger": "GitHub の issue/PR で {highlight}/opencode{/highlight} を入力すると AI を起動します", - "tui.tips.github_install": "{highlight}mimo github install{/highlight} で GitHub workflow を設定します", + "tui.tips.serve": "{highlight}devora serve{/highlight} を実行するとヘッドレスで Devora API にアクセスできます", + "tui.tips.attach_server": "{highlight}devora run --attach{/highlight} で起動中のサーバに接続します", + "tui.tips.upgrade": "{highlight}devora upgrade{/highlight} で最新バージョンに更新します", + "tui.tips.auth_list": "{highlight}devora auth list{/highlight} で設定済みプロバイダを確認します", + "tui.tips.agent_create": "{highlight}devora agent create{/highlight} でガイド付きエージェント作成を行います", + "tui.tips.github_trigger": "GitHub の issue/PR で {highlight}/devora{/highlight} を入力すると AI を起動します", + "tui.tips.github_install": "{highlight}devora github install{/highlight} で GitHub workflow を設定します", "tui.tips.github_oc": "PR のコード行に {highlight}/oc{/highlight} とコメントすると的を絞ったレビューが行われます", "tui.tips.theme_system": '{highlight}"theme": "system"{/highlight} でターミナルの配色に合わせます', - "tui.tips.theme_files": "{highlight}.mimocode/themes/{/highlight} ディレクトリに JSON テーマファイルを作成します", + "tui.tips.theme_files": "{highlight}.devora/themes/{/highlight} ディレクトリに JSON テーマファイルを作成します", "tui.tips.theme_variants": "テーマはダーク/ライトのバリアントをサポートします", "tui.tips.theme_ansi": "カスタムテーマで ANSI カラー 0-255 を参照できます", "tui.tips.env_var": @@ -161,7 +161,7 @@ export const dict = { "tui.tips.doom_loop": "権限 {highlight}doom_loop{/highlight} がツール呼び出しの無限ループを防ぎます", "tui.tips.external_dir": "権限 {highlight}external_directory{/highlight} がプロジェクト外のファイルを保護します", - "tui.tips.debug_config": "{highlight}mimo debug config{/highlight} で設定の問題を調査します", + "tui.tips.debug_config": "{highlight}devora debug config{/highlight} で設定の問題を調査します", "tui.tips.print_logs": "{highlight}--print-logs{/highlight} フラグで stderr に詳細ログを出力します", "tui.tips.timeline": "{highlight}Ctrl+X G{/highlight} または {highlight}/timeline{/highlight} で特定のメッセージにジャンプします", @@ -173,8 +173,8 @@ export const dict = { "tui.tips.username_toggle": "コマンドパレット({highlight}Ctrl+P{/highlight})でチャット内のユーザー名表示を切り替えます", "tui.tips.docker": - "{highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} でコンテナ版を実行できます", - "tui.tips.zen": "MiMo Code と組み合わせて {highlight}/connect{/highlight} で厳選されたモデルを使えます", + "{highlight}docker run -it --rm ghcr.io/SheriAkhtamov/Devora{/highlight} でコンテナ版を実行できます", + "tui.tips.zen": "Devora と組み合わせて {highlight}/connect{/highlight} で厳選されたモデルを使えます", "tui.tips.agents_md": "プロジェクトの {highlight}AGENTS.md{/highlight} を Git にコミットしてチームで共有します", "tui.tips.review": "{highlight}/review{/highlight} で未コミット変更、ブランチ、PR をレビューします", "tui.tips.help": "{highlight}/help{/highlight} または {highlight}Ctrl+X H{/highlight} でヘルプを表示します", @@ -226,7 +226,7 @@ export const dict = { "tui.command.provider.connect.title": "プロバイダに接続", "tui.command.provider.logout.title": "ログアウト", "tui.command.console.org.switch.title": "組織を切り替え", - "tui.command.opencode.status.title": "ステータスを表示", + "tui.command.devora.status.title": "ステータスを表示", "tui.command.theme.switch.title": "テーマを切り替え", "tui.command.logo.switch.title": "ロゴデザインを切り替え", "tui.dialog.logo.title": "ロゴデザイン", @@ -345,7 +345,7 @@ export const dict = { "tui.command.voice.control.title": "音声制御を切り替え(マルチモーダル)", "tui.command.voice.control.title_on": "音声制御:有効(マルチモーダル) — クリックで無効化", "tui.command.voice.control.title_off": "音声制御:無効(高速ASR) — クリックで有効化", - "tui.voice.error.no_auth": "まず MiMo アカウントにログインしてください", + "tui.voice.error.no_auth": "まず Devora アカウントにログインしてください", "tui.voice.error.no_recorder": "録音ツールが見つかりません。sox をインストールしてください", "tui.voice.error.too_short": "録音時間が短すぎます", "tui.voice.error.network": "文字起こしに失敗しました。ネットワークを確認してください", @@ -359,25 +359,25 @@ export const dict = { "tui.command.plugins.list.title": "プラグイン", "tui.command.plugins.install.title": "プラグインをインストール", - // MiMo Auto (free) — TUI login dialog - "tui.dialog.login.mimo_free": "MiMo Auto (free)", - "tui.dialog.login.mimo_free.desc": "ログイン不要の匿名無料チャネル", - "tui.dialog.login.mimo_free.success": "MiMo Auto (free) の準備完了 — デフォルトモデルを mimo/mimo-auto に設定しました", - "tui.dialog.login.mimo_free.unavailable": "MiMo Auto (free) プロバイダーが読み込まれていません", + // Devora Auto (free) — TUI login dialog + "tui.dialog.login.devora_free": "Devora Auto (free)", + "tui.dialog.login.devora_free.desc": "ログイン不要の匿名無料チャネル", + "tui.dialog.login.devora_free.success": "Devora Auto (free) の準備完了 — デフォルトモデルを devora/devora-auto に設定しました", + "tui.dialog.login.devora_free.unavailable": "Devora Auto (free) プロバイダーが読み込まれていません", // CLI: providers command (auth login) "cli.providers.select": "プロバイダーを選択", "cli.providers.other": "その他のプロバイダー", - "cli.providers.mimo.recommended_hint": "推奨", - "cli.providers.mimo_free.hint": "匿名無料チャネル / mimo-auto", - "cli.providers.mimo_free.verifying": "MiMo Auto (free) チャネルを検証中...", - "cli.providers.mimo_free.ready": "MiMo Auto (free) チャネル準備完了", - "cli.providers.mimo_free.failed": "MiMo Auto (free) の自己診断に失敗", - "cli.providers.mimo_free.default_set": "デフォルトモデルを mimo/mimo-auto に設定(1M コンテキスト、無料)", - "cli.providers.mimo_free.usage_hint": - "ログイン不要 — そのまま mimo を実行できます。有料/上位モデルを利用する場合は MiMo ブラウザログインを選択してください。", - "cli.providers.mimo_login.decrypt_retry": "復号に失敗しました、再試行してください(残り {remaining} 回)", - "cli.providers.mimo_login.decrypt_exhausted": "復号に失敗しました、最大再試行回数に達しました", + "cli.providers.devora.recommended_hint": "推奨", + "cli.providers.devora_free.hint": "匿名無料チャネル / devora-auto", + "cli.providers.devora_free.verifying": "Devora Auto (free) チャネルを検証中...", + "cli.providers.devora_free.ready": "Devora Auto (free) チャネル準備完了", + "cli.providers.devora_free.failed": "Devora Auto (free) の自己診断に失敗", + "cli.providers.devora_free.default_set": "デフォルトモデルを devora/devora-auto に設定(1M コンテキスト、無料)", + "cli.providers.devora_free.usage_hint": + "ログイン不要 — そのまま devora を実行できます。有料/上位モデルを利用する場合は Devora ブラウザログインを選択してください。", + "cli.providers.devora_login.decrypt_retry": "復号に失敗しました、再試行してください(残り {remaining} 回)", + "cli.providers.devora_login.decrypt_exhausted": "復号に失敗しました、最大再試行回数に達しました", // Question i18n — plan_exit "tui.question.plan_exit.question": "{{plan}} の計画が完了しました。build エージェントに切り替えて実装を開始しますか?", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/locales.ts b/packages/devora/src/cli/cmd/tui/i18n/locales.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/i18n/locales.ts rename to packages/devora/src/cli/cmd/tui/i18n/locales.ts diff --git a/packages/opencode/src/cli/cmd/tui/i18n/ru.ts b/packages/devora/src/cli/cmd/tui/i18n/ru.ts similarity index 87% rename from packages/opencode/src/cli/cmd/tui/i18n/ru.ts rename to packages/devora/src/cli/cmd/tui/i18n/ru.ts index 822731de..c2541dbe 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/ru.ts +++ b/packages/devora/src/cli/cmd/tui/i18n/ru.ts @@ -57,7 +57,7 @@ export const dict = { "tui.tips.redo": "Используйте {highlight}/redo{/highlight}, чтобы вернуть ранее отменённые сообщения и изменения", "tui.tips.share": - "Выполните {highlight}/share{/highlight}, чтобы получить публичную ссылку на диалог на opencode.ai", + "Выполните {highlight}/share{/highlight}, чтобы получить публичную ссылку на диалог на devora.ai", "tui.tips.drag_drop": "Перетащите изображения или PDF в терминал, чтобы добавить их в контекст", "tui.tips.paste_image": "Нажмите {highlight}Ctrl+V{/highlight}, чтобы вставить изображение из буфера обмена в строку ввода", @@ -108,9 +108,9 @@ export const dict = { "tui.tips.cycle_sessions": "Нажимайте {highlight}Ctrl+X Right/Left{/highlight}, чтобы переключаться между родительской и дочерними сессиями", "tui.tips.config_files": - "Создайте {highlight}mimocode.json{/highlight} для серверных настроек и {highlight}tui.json{/highlight} для настроек TUI", + "Создайте {highlight}devora.json{/highlight} для серверных настроек и {highlight}tui.json{/highlight} для настроек TUI", "tui.tips.global_config": - "Поместите настройки TUI в {highlight}~/.config/mimocode/tui.json{/highlight} как глобальные", + "Поместите настройки TUI в {highlight}~/.config/devora/tui.json{/highlight} как глобальные", "tui.tips.schema": "Добавьте {highlight}$schema{/highlight} в конфиг для автодополнения в редакторе", "tui.tips.default_model": @@ -122,15 +122,15 @@ export const dict = { "tui.tips.mcp_config": "Настройте локальные или удалённые MCP-серверы в разделе {highlight}mcp{/highlight} конфига", "tui.tips.mcp_oauth": - "MiMoCode автоматически обрабатывает OAuth для удалённых MCP-серверов с авторизацией", + "Devora автоматически обрабатывает OAuth для удалённых MCP-серверов с авторизацией", "tui.tips.custom_command": - "Добавляйте файлы {highlight}.md{/highlight} в {highlight}.mimocode/command/{/highlight} для повторно используемых пользовательских команд", + "Добавляйте файлы {highlight}.md{/highlight} в {highlight}.devora/command/{/highlight} для повторно используемых пользовательских команд", "tui.tips.command_args": "Используйте {highlight}$ARGUMENTS{/highlight}, {highlight}$1{/highlight}, {highlight}$2{/highlight} в командах для динамического ввода", "tui.tips.command_backticks": "Используйте обратные кавычки в командах, чтобы вставить вывод shell (например, {highlight}`git status`{/highlight})", "tui.tips.custom_agent": - "Добавляйте файлы {highlight}.md{/highlight} в {highlight}.mimocode/agent/{/highlight} для специализированных AI-персон", + "Добавляйте файлы {highlight}.md{/highlight} в {highlight}.devora/agent/{/highlight} для специализированных AI-персон", "tui.tips.agent_perms": "Настройте для каждого агента отдельные права на инструменты {highlight}edit{/highlight}, {highlight}bash{/highlight} и {highlight}webfetch{/highlight}", "tui.tips.bash_allow": @@ -140,50 +140,50 @@ export const dict = { "tui.tips.bash_ask": 'Настройте {highlight}"git push": "ask"{/highlight}, чтобы запрашивать подтверждение перед push', "tui.tips.formatter": - "MiMoCode автоматически форматирует файлы с помощью prettier, gofmt, ruff и других инструментов", + "Devora автоматически форматирует файлы с помощью prettier, gofmt, ruff и других инструментов", "tui.tips.disable_formatter": 'Установите {highlight}"formatter": false{/highlight}, чтобы отключить всё авто-форматирование', "tui.tips.custom_formatter": "Определяйте собственные команды форматирования по расширениям файлов в конфиге", - "tui.tips.lsp": "MiMoCode использует LSP-серверы для интеллектуального анализа кода", + "tui.tips.lsp": "Devora использует LSP-серверы для интеллектуального анализа кода", "tui.tips.custom_tool": - "Создавайте файлы {highlight}.ts{/highlight} в {highlight}.mimocode/tools/{/highlight}, чтобы определить новые LLM-инструменты", + "Создавайте файлы {highlight}.ts{/highlight} в {highlight}.devora/tools/{/highlight}, чтобы определить новые LLM-инструменты", "tui.tips.tool_scripts": "Определения инструментов могут вызывать скрипты на Python, Go и других языках", "tui.tips.plugins": - "Добавляйте файлы {highlight}.ts{/highlight} в {highlight}.mimocode/plugin/{/highlight} для подключения хуков событий", + "Добавляйте файлы {highlight}.ts{/highlight} в {highlight}.devora/plugin/{/highlight} для подключения хуков событий", "tui.tips.plugin_notify": "Используйте плагины, чтобы отправлять системные уведомления при завершении сессий", "tui.tips.plugin_protect": - "Создайте плагин, который запретит MiMoCode читать чувствительные файлы", + "Создайте плагин, который запретит Devora читать чувствительные файлы", "tui.tips.run": - "Используйте {highlight}mimo run{/highlight} для неинтерактивных скриптов", + "Используйте {highlight}devora run{/highlight} для неинтерактивных скриптов", "tui.tips.continue": - "Используйте {highlight}mimo --continue{/highlight}, чтобы продолжить последнюю сессию", + "Используйте {highlight}devora --continue{/highlight}, чтобы продолжить последнюю сессию", "tui.tips.attach_cli": - "Используйте {highlight}mimo run -f file.ts{/highlight}, чтобы прикрепить файлы из командной строки", + "Используйте {highlight}devora run -f file.ts{/highlight}, чтобы прикрепить файлы из командной строки", "tui.tips.format_json": "Используйте {highlight}--format json{/highlight} для машинно-читаемого вывода в скриптах", "tui.tips.serve": - "Запустите {highlight}mimo serve{/highlight} для headless-доступа к API MiMoCode", + "Запустите {highlight}devora serve{/highlight} для headless-доступа к API Devora", "tui.tips.attach_server": - "Используйте {highlight}mimo run --attach{/highlight}, чтобы подключиться к запущенному серверу", + "Используйте {highlight}devora run --attach{/highlight}, чтобы подключиться к запущенному серверу", "tui.tips.upgrade": - "Выполните {highlight}mimo upgrade{/highlight}, чтобы обновиться до последней версии", + "Выполните {highlight}devora upgrade{/highlight}, чтобы обновиться до последней версии", "tui.tips.auth_list": - "Выполните {highlight}mimo auth list{/highlight}, чтобы увидеть всех настроенных провайдеров", + "Выполните {highlight}devora auth list{/highlight}, чтобы увидеть всех настроенных провайдеров", "tui.tips.agent_create": - "Выполните {highlight}mimo agent create{/highlight}, чтобы создать агента в пошаговом режиме", + "Выполните {highlight}devora agent create{/highlight}, чтобы создать агента в пошаговом режиме", "tui.tips.github_trigger": - "Используйте {highlight}/opencode{/highlight} в issue/PR на GitHub, чтобы запускать AI-действия", + "Используйте {highlight}/devora{/highlight} в issue/PR на GitHub, чтобы запускать AI-действия", "tui.tips.github_install": - "Выполните {highlight}mimo github install{/highlight}, чтобы настроить GitHub-workflow", + "Выполните {highlight}devora github install{/highlight}, чтобы настроить GitHub-workflow", "tui.tips.github_oc": "Оставьте {highlight}/oc{/highlight} в комментарии к строке PR для точечного код-ревью", "tui.tips.theme_system": 'Используйте {highlight}"theme": "system"{/highlight}, чтобы соответствовать цветам терминала', "tui.tips.theme_files": - "Создавайте JSON-файлы тем в каталоге {highlight}.mimocode/themes/{/highlight}", + "Создавайте JSON-файлы тем в каталоге {highlight}.devora/themes/{/highlight}", "tui.tips.theme_variants": "Темы поддерживают тёмные и светлые варианты для обоих режимов", "tui.tips.theme_ansi": "Ссылайтесь на ANSI-цвета 0-255 в собственных темах", @@ -214,7 +214,7 @@ export const dict = { "tui.tips.external_dir": "Разрешение {highlight}external_directory{/highlight} защищает файлы вне проекта", "tui.tips.debug_config": - "Выполните {highlight}mimo debug config{/highlight}, чтобы диагностировать проблемы конфигурации", + "Выполните {highlight}devora debug config{/highlight}, чтобы диагностировать проблемы конфигурации", "tui.tips.print_logs": "Используйте флаг {highlight}--print-logs{/highlight}, чтобы видеть подробные логи в stderr", "tui.tips.timeline": @@ -228,9 +228,9 @@ export const dict = { "tui.tips.username_toggle": "Переключайте отображение имени пользователя через палитру команд ({highlight}Ctrl+P{/highlight})", "tui.tips.docker": - "Выполните {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} для контейнерного запуска", + "Выполните {highlight}docker run -it --rm ghcr.io/SheriAkhtamov/Devora{/highlight} для контейнерного запуска", "tui.tips.zen": - "Используйте {highlight}/connect{/highlight} с MiMo Code для подобранных и протестированных моделей", + "Используйте {highlight}/connect{/highlight} с Devora для подобранных и протестированных моделей", "tui.tips.agents_md": "Закоммитьте {highlight}AGENTS.md{/highlight} вашего проекта в Git для общего доступа в команде", "tui.tips.review": @@ -288,7 +288,7 @@ export const dict = { "tui.command.provider.connect.title": "Подключить провайдера", "tui.command.provider.logout.title": "Выйти", "tui.command.console.org.switch.title": "Сменить организацию", - "tui.command.opencode.status.title": "Посмотреть статус", + "tui.command.devora.status.title": "Посмотреть статус", "tui.command.theme.switch.title": "Сменить тему", "tui.command.logo.switch.title": "Сменить дизайн логотипа", "tui.dialog.logo.title": "Дизайн логотипа", @@ -405,7 +405,7 @@ export const dict = { "tui.command.voice.control.title": "Переключить голосовое управление (мультимодальное)", "tui.command.voice.control.title_on": "Голосовое управление: включено (мультимодальное) — нажмите для отключения", "tui.command.voice.control.title_off": "Голосовое управление: отключено (быстрый ASR) — нажмите для включения", - "tui.voice.error.no_auth": "Сначала войдите в аккаунт MiMo", + "tui.voice.error.no_auth": "Сначала войдите в аккаунт Devora", "tui.voice.error.no_recorder": "Инструмент записи не найден, установите sox", "tui.voice.error.too_short": "Запись слишком короткая", "tui.voice.error.network": "Ошибка транскрипции, проверьте сеть", @@ -419,25 +419,25 @@ export const dict = { "tui.command.plugins.list.title": "Плагины", "tui.command.plugins.install.title": "Установить плагин", - // MiMo Auto (free) — TUI login dialog - "tui.dialog.login.mimo_free": "MiMo Auto (free)", - "tui.dialog.login.mimo_free.desc": "Анонимный бесплатный канал — вход не требуется", - "tui.dialog.login.mimo_free.success": "MiMo Auto (free) готов — модель по умолчанию: mimo/mimo-auto", - "tui.dialog.login.mimo_free.unavailable": "Провайдер MiMo Auto (free) не загружен", + // Devora Auto (free) — TUI login dialog + "tui.dialog.login.devora_free": "Devora Auto (free)", + "tui.dialog.login.devora_free.desc": "Анонимный бесплатный канал — вход не требуется", + "tui.dialog.login.devora_free.success": "Devora Auto (free) готов — модель по умолчанию: devora/devora-auto", + "tui.dialog.login.devora_free.unavailable": "Провайдер Devora Auto (free) не загружен", // CLI: providers command (auth login) "cli.providers.select": "Выберите провайдера", "cli.providers.other": "Другой провайдер", - "cli.providers.mimo.recommended_hint": "рекомендуется", - "cli.providers.mimo_free.hint": "Анонимный бесплатный канал / mimo-auto", - "cli.providers.mimo_free.verifying": "Проверка канала MiMo Auto (free)...", - "cli.providers.mimo_free.ready": "Канал MiMo Auto (free) готов", - "cli.providers.mimo_free.failed": "Не удалось проверить MiMo Auto (free)", - "cli.providers.mimo_free.default_set": "Модель по умолчанию: mimo/mimo-auto (контекст 1M, бесплатно)", - "cli.providers.mimo_free.usage_hint": - "Вход не требуется — просто запустите mimo. Для платных/премиум-моделей выберите вход через браузер MiMo.", - "cli.providers.mimo_login.decrypt_retry": "Ошибка расшифровки, повторите попытку (осталось попыток: {remaining})", - "cli.providers.mimo_login.decrypt_exhausted": "Ошибка расшифровки, превышено максимальное число попыток", + "cli.providers.devora.recommended_hint": "рекомендуется", + "cli.providers.devora_free.hint": "Анонимный бесплатный канал / devora-auto", + "cli.providers.devora_free.verifying": "Проверка канала Devora Auto (free)...", + "cli.providers.devora_free.ready": "Канал Devora Auto (free) готов", + "cli.providers.devora_free.failed": "Не удалось проверить Devora Auto (free)", + "cli.providers.devora_free.default_set": "Модель по умолчанию: devora/devora-auto (контекст 1M, бесплатно)", + "cli.providers.devora_free.usage_hint": + "Вход не требуется — просто запустите devora. Для платных/премиум-моделей выберите вход через браузер Devora.", + "cli.providers.devora_login.decrypt_retry": "Ошибка расшифровки, повторите попытку (осталось попыток: {remaining})", + "cli.providers.devora_login.decrypt_exhausted": "Ошибка расшифровки, превышено максимальное число попыток", // Question i18n — plan_exit "tui.question.plan_exit.question": "План {{plan}} завершён. Переключиться на агента build и начать реализацию?", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/zh.ts b/packages/devora/src/cli/cmd/tui/i18n/zh.ts similarity index 85% rename from packages/opencode/src/cli/cmd/tui/i18n/zh.ts rename to packages/devora/src/cli/cmd/tui/i18n/zh.ts index 68b3f151..83ead211 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/zh.ts +++ b/packages/devora/src/cli/cmd/tui/i18n/zh.ts @@ -51,7 +51,7 @@ export const dict = { "tui.tips.background": "运行 {highlight}/background{/highlight} 设置自定义图片作为主页背景", "tui.tips.undo": "使用 {highlight}/undo{/highlight} 撤销最后一条消息及其文件改动", "tui.tips.redo": "使用 {highlight}/redo{/highlight} 恢复之前撤销的消息和文件改动", - "tui.tips.share": "运行 {highlight}/share{/highlight} 在 opencode.ai 上为你的对话生成公开链接", + "tui.tips.share": "运行 {highlight}/share{/highlight} 在 devora.ai 上为你的对话生成公开链接", "tui.tips.drag_drop": "把图片或 PDF 拖入终端可作为上下文添加", "tui.tips.paste_image": "按 {highlight}Ctrl+V{/highlight} 把剪贴板中的图片粘贴到提示框", "tui.tips.editor": "按 {highlight}Ctrl+X E{/highlight} 或 {highlight}/editor{/highlight} 在外部编辑器中编辑消息", @@ -79,51 +79,51 @@ export const dict = { "tui.tips.subagent": "在提示词中使用 {highlight}@agent-name{/highlight} 调用专用子智能体", "tui.tips.cycle_sessions": "按 {highlight}Ctrl+X Right/Left{/highlight} 在父子会话之间切换", "tui.tips.config_files": - "创建 {highlight}mimocode.json{/highlight} 用于服务端配置,{highlight}tui.json{/highlight} 用于 TUI 配置", - "tui.tips.global_config": "把 TUI 配置放在 {highlight}~/.config/mimocode/tui.json{/highlight} 作为全局配置", + "创建 {highlight}devora.json{/highlight} 用于服务端配置,{highlight}tui.json{/highlight} 用于 TUI 配置", + "tui.tips.global_config": "把 TUI 配置放在 {highlight}~/.config/devora/tui.json{/highlight} 作为全局配置", "tui.tips.schema": "在配置中加入 {highlight}$schema{/highlight} 以便编辑器自动补全", "tui.tips.default_model": "在配置里设置 {highlight}model{/highlight} 来指定默认模型", "tui.tips.keybinds": "通过 {highlight}tui.json{/highlight} 的 {highlight}keybinds{/highlight} 部分覆盖任意按键", "tui.tips.disable_keybind": "把任意按键设为 {highlight}none{/highlight} 即可完全禁用它", "tui.tips.mcp_config": "在 {highlight}mcp{/highlight} 配置项中配置本地或远程 MCP 服务器", - "tui.tips.mcp_oauth": "MiMoCode 自动处理需要鉴权的远程 MCP 服务器的 OAuth", + "tui.tips.mcp_oauth": "Devora 自动处理需要鉴权的远程 MCP 服务器的 OAuth", "tui.tips.custom_command": - "在 {highlight}.mimocode/command/{/highlight} 添加 {highlight}.md{/highlight} 文件以定义可复用自定义提示", + "在 {highlight}.devora/command/{/highlight} 添加 {highlight}.md{/highlight} 文件以定义可复用自定义提示", "tui.tips.command_args": "在自定义命令中使用 {highlight}$ARGUMENTS{/highlight}、{highlight}$1{/highlight}、{highlight}$2{/highlight} 接收动态参数", "tui.tips.command_backticks": "在命令中使用反引号注入 shell 输出(例如 {highlight}`git status`{/highlight})", "tui.tips.custom_agent": - "在 {highlight}.mimocode/agent/{/highlight} 添加 {highlight}.md{/highlight} 文件来创建专用 AI 角色", + "在 {highlight}.devora/agent/{/highlight} 添加 {highlight}.md{/highlight} 文件来创建专用 AI 角色", "tui.tips.agent_perms": "为每个智能体单独配置 {highlight}edit{/highlight}、{highlight}bash{/highlight}、{highlight}webfetch{/highlight} 工具权限", "tui.tips.bash_allow": '使用 {highlight}"git *": "allow"{/highlight} 这类模式做精细 bash 权限', "tui.tips.bash_deny": '设置 {highlight}"rm -rf *": "deny"{/highlight} 阻止破坏性命令', "tui.tips.bash_ask": '配置 {highlight}"git push": "ask"{/highlight} 在推送前要求确认', - "tui.tips.formatter": "MiMoCode 自动使用 prettier、gofmt、ruff 等格式化文件", + "tui.tips.formatter": "Devora 自动使用 prettier、gofmt、ruff 等格式化文件", "tui.tips.disable_formatter": '在配置中设置 {highlight}"formatter": false{/highlight} 关闭所有自动格式化', "tui.tips.custom_formatter": "在配置中按文件后缀定义自定义格式化命令", - "tui.tips.lsp": "MiMoCode 使用 LSP 服务器进行智能代码分析", + "tui.tips.lsp": "Devora 使用 LSP 服务器进行智能代码分析", "tui.tips.custom_tool": - "在 {highlight}.mimocode/tools/{/highlight} 创建 {highlight}.ts{/highlight} 文件定义新的 LLM 工具", + "在 {highlight}.devora/tools/{/highlight} 创建 {highlight}.ts{/highlight} 文件定义新的 LLM 工具", "tui.tips.tool_scripts": "工具定义可以调用 Python、Go 等脚本", "tui.tips.plugins": - "在 {highlight}.mimocode/plugin/{/highlight} 添加 {highlight}.ts{/highlight} 文件挂接事件钩子", + "在 {highlight}.devora/plugin/{/highlight} 添加 {highlight}.ts{/highlight} 文件挂接事件钩子", "tui.tips.plugin_notify": "用插件在会话完成时发送系统通知", - "tui.tips.plugin_protect": "写一个插件阻止 MiMoCode 读取敏感文件", - "tui.tips.run": "用 {highlight}mimo run{/highlight} 进行非交互式脚本调用", - "tui.tips.continue": "用 {highlight}mimo --continue{/highlight} 继续上一个会话", - "tui.tips.attach_cli": "用 {highlight}mimo run -f file.ts{/highlight} 通过命令行附加文件", + "tui.tips.plugin_protect": "写一个插件阻止 Devora 读取敏感文件", + "tui.tips.run": "用 {highlight}devora run{/highlight} 进行非交互式脚本调用", + "tui.tips.continue": "用 {highlight}devora --continue{/highlight} 继续上一个会话", + "tui.tips.attach_cli": "用 {highlight}devora run -f file.ts{/highlight} 通过命令行附加文件", "tui.tips.format_json": "用 {highlight}--format json{/highlight} 在脚本中获得机器可读输出", - "tui.tips.serve": "运行 {highlight}mimo serve{/highlight} 以无头模式提供 MiMoCode API", - "tui.tips.attach_server": "用 {highlight}mimo run --attach{/highlight} 接入正在运行的服务", - "tui.tips.upgrade": "运行 {highlight}mimo upgrade{/highlight} 升级到最新版本", - "tui.tips.auth_list": "运行 {highlight}mimo auth list{/highlight} 查看所有已配置的 provider", - "tui.tips.agent_create": "运行 {highlight}mimo agent create{/highlight} 引导式创建智能体", - "tui.tips.github_trigger": "在 GitHub issue/PR 中输入 {highlight}/opencode{/highlight} 触发 AI 操作", - "tui.tips.github_install": "运行 {highlight}mimo github install{/highlight} 配置 GitHub workflow", + "tui.tips.serve": "运行 {highlight}devora serve{/highlight} 以无头模式提供 Devora API", + "tui.tips.attach_server": "用 {highlight}devora run --attach{/highlight} 接入正在运行的服务", + "tui.tips.upgrade": "运行 {highlight}devora upgrade{/highlight} 升级到最新版本", + "tui.tips.auth_list": "运行 {highlight}devora auth list{/highlight} 查看所有已配置的 provider", + "tui.tips.agent_create": "运行 {highlight}devora agent create{/highlight} 引导式创建智能体", + "tui.tips.github_trigger": "在 GitHub issue/PR 中输入 {highlight}/devora{/highlight} 触发 AI 操作", + "tui.tips.github_install": "运行 {highlight}devora github install{/highlight} 配置 GitHub workflow", "tui.tips.github_oc": "在 PR 代码行上评论 {highlight}/oc{/highlight} 进行针对性代码审查", "tui.tips.theme_system": '使用 {highlight}"theme": "system"{/highlight} 跟随终端配色', - "tui.tips.theme_files": "在 {highlight}.mimocode/themes/{/highlight} 目录下创建 JSON 主题文件", + "tui.tips.theme_files": "在 {highlight}.devora/themes/{/highlight} 目录下创建 JSON 主题文件", "tui.tips.theme_variants": "主题支持深色/浅色双模式变体", "tui.tips.theme_ansi": "自定义主题中可引用 ANSI 0-255 色号", "tui.tips.env_var": "在配置中用 {highlight}{env:VAR_NAME}{/highlight} 语法引用环境变量", @@ -139,7 +139,7 @@ export const dict = { "tui.tips.unshare": "运行 {highlight}/unshare{/highlight} 把会话从公开访问中移除", "tui.tips.doom_loop": "权限 {highlight}doom_loop{/highlight} 防止工具调用陷入死循环", "tui.tips.external_dir": "权限 {highlight}external_directory{/highlight} 保护项目外部的文件", - "tui.tips.debug_config": "运行 {highlight}mimo debug config{/highlight} 排查配置问题", + "tui.tips.debug_config": "运行 {highlight}devora debug config{/highlight} 排查配置问题", "tui.tips.print_logs": "使用 {highlight}--print-logs{/highlight} 标志在 stderr 输出详细日志", "tui.tips.timeline": "按 {highlight}Ctrl+X G{/highlight} 或 {highlight}/timeline{/highlight} 跳到指定消息", @@ -149,8 +149,8 @@ export const dict = { "tui.tips.scroll_accel": "在 {highlight}tui.json{/highlight} 中开启 {highlight}scroll_acceleration{/highlight} 享受平滑滚动", "tui.tips.username_toggle": "通过命令面板({highlight}Ctrl+P{/highlight})切换聊天中用户名的显示", - "tui.tips.docker": "运行 {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} 使用容器化版本", - "tui.tips.zen": "搭配 MiMo Code 使用 {highlight}/connect{/highlight} 选用经过测试的精选模型", + "tui.tips.docker": "运行 {highlight}docker run -it --rm ghcr.io/SheriAkhtamov/Devora{/highlight} 使用容器化版本", + "tui.tips.zen": "搭配 Devora 使用 {highlight}/connect{/highlight} 选用经过测试的精选模型", "tui.tips.agents_md": "把项目里的 {highlight}AGENTS.md{/highlight} 提交到 Git 与团队共享", "tui.tips.review": "用 {highlight}/review{/highlight} 审阅未提交改动、分支或 PR", "tui.tips.help": "运行 {highlight}/help{/highlight} 或 {highlight}Ctrl+X H{/highlight} 显示帮助对话框", @@ -202,7 +202,7 @@ export const dict = { "tui.command.provider.connect.title": "连接服务商", "tui.command.provider.logout.title": "登出", "tui.command.console.org.switch.title": "切换组织", - "tui.command.opencode.status.title": "查看状态", + "tui.command.devora.status.title": "查看状态", "tui.command.worktree.list.title": "工作树", "tui.command.theme.switch.title": "切换主题", "tui.command.image.switch.title": "切换背景图片", @@ -331,7 +331,7 @@ export const dict = { "tui.command.voice.control.title": "切换语音控制(多模态)", "tui.command.voice.control.title_on": "语音控制:已开启(多模态) — 点击关闭", "tui.command.voice.control.title_off": "语音控制:已关闭(快速 ASR) — 点击开启", - "tui.voice.error.no_auth": "请先登录 MiMo 账号", + "tui.voice.error.no_auth": "请先登录 Devora 账号", "tui.voice.error.no_recorder": "未检测到录音工具,请安装 sox", "tui.voice.error.too_short": "录音时间过短", "tui.voice.error.network": "转写失败,请检查网络", @@ -347,30 +347,30 @@ export const dict = { "tui.command.plugins.list.title": "插件", "tui.command.plugins.install.title": "安装插件", "tui.dialog.login.title": "选择服务商", - "tui.dialog.login.xiaomi": "小米", - "tui.dialog.login.xiaomi.desc": "(推荐)", - "tui.dialog.login.mimo_free": "MiMo Auto (free)", - "tui.dialog.login.mimo_free.desc": "免费匿名通道,无需登录", - "tui.dialog.login.mimo_free.success": "MiMo Auto (free) 已就绪 - 默认模型设为 mimo/mimo-auto", - "tui.dialog.login.mimo_free.unavailable": "MiMo Auto (free) 通道未加载", + "tui.dialog.login.devora": "Devora", + "tui.dialog.login.devora.desc": "(推荐)", + "tui.dialog.login.devora_free": "Devora Auto (free)", + "tui.dialog.login.devora_free.desc": "免费匿名通道,无需登录", + "tui.dialog.login.devora_free.success": "Devora Auto (free) 已就绪 - 默认模型设为 devora/devora-auto", + "tui.dialog.login.devora_free.unavailable": "Devora Auto (free) 通道未加载", "cli.providers.select": "选择服务商", "cli.providers.other": "其他 Provider", - "cli.providers.mimo.recommended_hint": "推荐", - "cli.providers.mimo_free.hint": "免费匿名通道 / mimo-auto", - "cli.providers.mimo_free.verifying": "正在验证 MiMo Auto (free) 通道...", - "cli.providers.mimo_free.ready": "MiMo Auto (free) 通道已就绪", - "cli.providers.mimo_free.failed": "MiMo Auto (free) 自检失败", - "cli.providers.mimo_free.default_set": "默认模型已切换为 mimo/mimo-auto(1M 上下文,免费)", - "cli.providers.mimo_free.usage_hint": "无需登录,直接 mimo run 即可使用。如需付费/更高级模型,可重新选择 MiMo 浏览器登录。", - "cli.providers.mimo_login.decrypt_retry": "解密失败,请重试 (剩余 {remaining} 次)", - "cli.providers.mimo_login.decrypt_exhausted": "解密失败,已达最大重试次数", + "cli.providers.devora.recommended_hint": "推荐", + "cli.providers.devora_free.hint": "免费匿名通道 / devora-auto", + "cli.providers.devora_free.verifying": "正在验证 Devora Auto (free) 通道...", + "cli.providers.devora_free.ready": "Devora Auto (free) 通道已就绪", + "cli.providers.devora_free.failed": "Devora Auto (free) 自检失败", + "cli.providers.devora_free.default_set": "默认模型已切换为 devora/devora-auto(1M 上下文,免费)", + "cli.providers.devora_free.usage_hint": "无需登录,直接 devora run 即可使用。如需付费/更高级模型,可重新选择 Devora 浏览器登录。", + "cli.providers.devora_login.decrypt_retry": "解密失败,请重试 (剩余 {remaining} 次)", + "cli.providers.devora_login.decrypt_exhausted": "解密失败,已达最大重试次数", "tui.dialog.login.import_claude": "从 Claude Code 导入", "tui.dialog.login.other": "其他服务商", "tui.dialog.login.import_claude.no_key": "未找到 Claude Code API Key", "tui.dialog.login.import_claude.read_failed": "读取 ~/.claude/settings.json 失败", "tui.dialog.login.import_claude.success": "已从 Claude Code 导入配置", "tui.dialog.login.start_failed": "启动登录失败", - "tui.dialog.login.flow.title": "MiMo 登录", + "tui.dialog.login.flow.title": "Devora 登录", "tui.dialog.login.flow.placeholder": "粘贴 Code(或等待浏览器回调)", "tui.dialog.login.flow.busy": "登录中...", "tui.dialog.login.flow.manual_hint": "浏览器未打开?手动访问:", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/zht.ts b/packages/devora/src/cli/cmd/tui/i18n/zht.ts similarity index 89% rename from packages/opencode/src/cli/cmd/tui/i18n/zht.ts rename to packages/devora/src/cli/cmd/tui/i18n/zht.ts index 0535d88f..4ed71eda 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/zht.ts +++ b/packages/devora/src/cli/cmd/tui/i18n/zht.ts @@ -51,7 +51,7 @@ export const dict = { "tui.tips.background": "執行 {highlight}/background{/highlight} 設定自訂圖片作為主頁背景", "tui.tips.undo": "使用 {highlight}/undo{/highlight} 復原最後一條訊息及其檔案變更", "tui.tips.redo": "使用 {highlight}/redo{/highlight} 還原先前復原的訊息與檔案變更", - "tui.tips.share": "執行 {highlight}/share{/highlight} 在 opencode.ai 上為你的對話產生公開連結", + "tui.tips.share": "執行 {highlight}/share{/highlight} 在 devora.ai 上為你的對話產生公開連結", "tui.tips.drag_drop": "把圖片或 PDF 拖入終端機可作為上下文加入", "tui.tips.paste_image": "按 {highlight}Ctrl+V{/highlight} 把剪貼簿中的圖片貼到輸入框", "tui.tips.editor": "按 {highlight}Ctrl+X E{/highlight} 或 {highlight}/editor{/highlight} 在外部編輯器中編輯訊息", @@ -79,51 +79,51 @@ export const dict = { "tui.tips.subagent": "在提示詞中使用 {highlight}@agent-name{/highlight} 呼叫專用子代理", "tui.tips.cycle_sessions": "按 {highlight}Ctrl+X Right/Left{/highlight} 在父子工作階段之間切換", "tui.tips.config_files": - "建立 {highlight}mimocode.json{/highlight} 用於伺服器端設定,{highlight}tui.json{/highlight} 用於 TUI 設定", - "tui.tips.global_config": "把 TUI 設定放在 {highlight}~/.config/mimocode/tui.json{/highlight} 作為全域設定", + "建立 {highlight}devora.json{/highlight} 用於伺服器端設定,{highlight}tui.json{/highlight} 用於 TUI 設定", + "tui.tips.global_config": "把 TUI 設定放在 {highlight}~/.config/devora/tui.json{/highlight} 作為全域設定", "tui.tips.schema": "在設定中加入 {highlight}$schema{/highlight} 以便編輯器自動完成", "tui.tips.default_model": "在設定中設定 {highlight}model{/highlight} 來指定預設模型", "tui.tips.keybinds": "透過 {highlight}tui.json{/highlight} 的 {highlight}keybinds{/highlight} 區段覆寫任意按鍵", "tui.tips.disable_keybind": "把任意按鍵設為 {highlight}none{/highlight} 即可完全停用它", "tui.tips.mcp_config": "在 {highlight}mcp{/highlight} 設定項中設定本機或遠端 MCP 伺服器", - "tui.tips.mcp_oauth": "MiMoCode 自動處理需要驗證的遠端 MCP 伺服器的 OAuth", + "tui.tips.mcp_oauth": "Devora 自動處理需要驗證的遠端 MCP 伺服器的 OAuth", "tui.tips.custom_command": - "在 {highlight}.mimocode/command/{/highlight} 加入 {highlight}.md{/highlight} 檔案以定義可重用自訂提示", + "在 {highlight}.devora/command/{/highlight} 加入 {highlight}.md{/highlight} 檔案以定義可重用自訂提示", "tui.tips.command_args": "在自訂指令中使用 {highlight}$ARGUMENTS{/highlight}、{highlight}$1{/highlight}、{highlight}$2{/highlight} 接收動態參數", "tui.tips.command_backticks": "在指令中使用反引號注入 shell 輸出(例如 {highlight}`git status`{/highlight})", "tui.tips.custom_agent": - "在 {highlight}.mimocode/agent/{/highlight} 加入 {highlight}.md{/highlight} 檔案來建立專用 AI 角色", + "在 {highlight}.devora/agent/{/highlight} 加入 {highlight}.md{/highlight} 檔案來建立專用 AI 角色", "tui.tips.agent_perms": "為每個智慧代理單獨設定 {highlight}edit{/highlight}、{highlight}bash{/highlight}、{highlight}webfetch{/highlight} 工具權限", "tui.tips.bash_allow": '使用 {highlight}"git *": "allow"{/highlight} 這類模式做精細 bash 權限', "tui.tips.bash_deny": '設定 {highlight}"rm -rf *": "deny"{/highlight} 阻擋破壞性指令', "tui.tips.bash_ask": '設定 {highlight}"git push": "ask"{/highlight} 在推送前要求確認', - "tui.tips.formatter": "MiMoCode 自動使用 prettier、gofmt、ruff 等格式化檔案", + "tui.tips.formatter": "Devora 自動使用 prettier、gofmt、ruff 等格式化檔案", "tui.tips.disable_formatter": '在設定中設定 {highlight}"formatter": false{/highlight} 關閉所有自動格式化', "tui.tips.custom_formatter": "在設定中依檔案副檔名定義自訂格式化指令", - "tui.tips.lsp": "MiMoCode 使用 LSP 伺服器進行智慧程式碼分析", + "tui.tips.lsp": "Devora 使用 LSP 伺服器進行智慧程式碼分析", "tui.tips.custom_tool": - "在 {highlight}.mimocode/tools/{/highlight} 建立 {highlight}.ts{/highlight} 檔案定義新的 LLM 工具", + "在 {highlight}.devora/tools/{/highlight} 建立 {highlight}.ts{/highlight} 檔案定義新的 LLM 工具", "tui.tips.tool_scripts": "工具定義可呼叫 Python、Go 等指令稿", "tui.tips.plugins": - "在 {highlight}.mimocode/plugin/{/highlight} 加入 {highlight}.ts{/highlight} 檔案掛載事件勾點", + "在 {highlight}.devora/plugin/{/highlight} 加入 {highlight}.ts{/highlight} 檔案掛載事件勾點", "tui.tips.plugin_notify": "用外掛在工作階段完成時傳送系統通知", - "tui.tips.plugin_protect": "撰寫一個外掛阻止 MiMoCode 讀取敏感檔案", - "tui.tips.run": "用 {highlight}mimo run{/highlight} 進行非互動式指令稿呼叫", - "tui.tips.continue": "用 {highlight}mimo --continue{/highlight} 繼續上一個工作階段", - "tui.tips.attach_cli": "用 {highlight}mimo run -f file.ts{/highlight} 透過命令列附加檔案", + "tui.tips.plugin_protect": "撰寫一個外掛阻止 Devora 讀取敏感檔案", + "tui.tips.run": "用 {highlight}devora run{/highlight} 進行非互動式指令稿呼叫", + "tui.tips.continue": "用 {highlight}devora --continue{/highlight} 繼續上一個工作階段", + "tui.tips.attach_cli": "用 {highlight}devora run -f file.ts{/highlight} 透過命令列附加檔案", "tui.tips.format_json": "用 {highlight}--format json{/highlight} 在指令稿中取得機器可讀輸出", - "tui.tips.serve": "執行 {highlight}mimo serve{/highlight} 以無介面模式提供 MiMoCode API", - "tui.tips.attach_server": "用 {highlight}mimo run --attach{/highlight} 連線到正在執行的服務", - "tui.tips.upgrade": "執行 {highlight}mimo upgrade{/highlight} 升級到最新版本", - "tui.tips.auth_list": "執行 {highlight}mimo auth list{/highlight} 檢視所有已設定的供應商", - "tui.tips.agent_create": "執行 {highlight}mimo agent create{/highlight} 引導式建立智慧代理", - "tui.tips.github_trigger": "在 GitHub issue/PR 中輸入 {highlight}/opencode{/highlight} 觸發 AI 操作", - "tui.tips.github_install": "執行 {highlight}mimo github install{/highlight} 設定 GitHub workflow", + "tui.tips.serve": "執行 {highlight}devora serve{/highlight} 以無介面模式提供 Devora API", + "tui.tips.attach_server": "用 {highlight}devora run --attach{/highlight} 連線到正在執行的服務", + "tui.tips.upgrade": "執行 {highlight}devora upgrade{/highlight} 升級到最新版本", + "tui.tips.auth_list": "執行 {highlight}devora auth list{/highlight} 檢視所有已設定的供應商", + "tui.tips.agent_create": "執行 {highlight}devora agent create{/highlight} 引導式建立智慧代理", + "tui.tips.github_trigger": "在 GitHub issue/PR 中輸入 {highlight}/devora{/highlight} 觸發 AI 操作", + "tui.tips.github_install": "執行 {highlight}devora github install{/highlight} 設定 GitHub workflow", "tui.tips.github_oc": "在 PR 程式碼行上留言 {highlight}/oc{/highlight} 進行針對性程式碼審查", "tui.tips.theme_system": '使用 {highlight}"theme": "system"{/highlight} 跟隨終端機配色', - "tui.tips.theme_files": "在 {highlight}.mimocode/themes/{/highlight} 目錄下建立 JSON 主題檔案", + "tui.tips.theme_files": "在 {highlight}.devora/themes/{/highlight} 目錄下建立 JSON 主題檔案", "tui.tips.theme_variants": "主題支援深色/淺色雙模式變體", "tui.tips.theme_ansi": "自訂主題中可參照 ANSI 0-255 色號", "tui.tips.env_var": "在設定中用 {highlight}{env:VAR_NAME}{/highlight} 語法參照環境變數", @@ -139,7 +139,7 @@ export const dict = { "tui.tips.unshare": "執行 {highlight}/unshare{/highlight} 把工作階段從公開存取中移除", "tui.tips.doom_loop": "權限 {highlight}doom_loop{/highlight} 防止工具呼叫陷入無窮迴圈", "tui.tips.external_dir": "權限 {highlight}external_directory{/highlight} 保護專案外部的檔案", - "tui.tips.debug_config": "執行 {highlight}mimo debug config{/highlight} 排查設定問題", + "tui.tips.debug_config": "執行 {highlight}devora debug config{/highlight} 排查設定問題", "tui.tips.print_logs": "使用 {highlight}--print-logs{/highlight} 旗標在 stderr 輸出詳細記錄", "tui.tips.timeline": "按 {highlight}Ctrl+X G{/highlight} 或 {highlight}/timeline{/highlight} 跳到指定訊息", @@ -149,8 +149,8 @@ export const dict = { "tui.tips.scroll_accel": "在 {highlight}tui.json{/highlight} 中啟用 {highlight}scroll_acceleration{/highlight} 享受平滑捲動", "tui.tips.username_toggle": "透過指令面板({highlight}Ctrl+P{/highlight})切換對話中使用者名稱的顯示", - "tui.tips.docker": "執行 {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} 使用容器化版本", - "tui.tips.zen": "搭配 MiMo Code 使用 {highlight}/connect{/highlight} 選用經過測試的精選模型", + "tui.tips.docker": "執行 {highlight}docker run -it --rm ghcr.io/SheriAkhtamov/Devora{/highlight} 使用容器化版本", + "tui.tips.zen": "搭配 Devora 使用 {highlight}/connect{/highlight} 選用經過測試的精選模型", "tui.tips.agents_md": "把專案中的 {highlight}AGENTS.md{/highlight} 提交到 Git 與團隊共享", "tui.tips.review": "用 {highlight}/review{/highlight} 審閱未提交變更、分支或 PR", "tui.tips.help": "執行 {highlight}/help{/highlight} 或 {highlight}Ctrl+X H{/highlight} 顯示說明對話框", @@ -202,7 +202,7 @@ export const dict = { "tui.command.provider.connect.title": "連線供應商", "tui.command.provider.logout.title": "登出", "tui.command.console.org.switch.title": "切換組織", - "tui.command.opencode.status.title": "檢視狀態", + "tui.command.devora.status.title": "檢視狀態", "tui.command.worktree.list.title": "工作樹", "tui.command.theme.switch.title": "切換主題", "tui.command.image.switch.title": "切換背景圖片", @@ -331,7 +331,7 @@ export const dict = { "tui.command.voice.control.title": "切換語音控制(多模態)", "tui.command.voice.control.title_on": "語音控制:已開啟(多模態) — 點擊關閉", "tui.command.voice.control.title_off": "語音控制:已關閉(快速 ASR) — 點擊開啟", - "tui.voice.error.no_auth": "請先登入 MiMo 帳號", + "tui.voice.error.no_auth": "請先登入 Devora 帳號", "tui.voice.error.no_recorder": "未偵測到錄音工具,請安裝 sox", "tui.voice.error.too_short": "錄音時間過短", "tui.voice.error.network": "轉寫失敗,請檢查網路", diff --git a/packages/opencode/src/cli/cmd/tui/layer.ts b/packages/devora/src/cli/cmd/tui/layer.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/layer.ts rename to packages/devora/src/cli/cmd/tui/layer.ts diff --git a/packages/opencode/src/cli/cmd/tui/plugin/api.tsx b/packages/devora/src/cli/cmd/tui/plugin/api.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/plugin/api.tsx rename to packages/devora/src/cli/cmd/tui/plugin/api.tsx index 90a90c99..ffa629f3 100644 --- a/packages/opencode/src/cli/cmd/tui/plugin/api.tsx +++ b/packages/devora/src/cli/cmd/tui/plugin/api.tsx @@ -1,5 +1,5 @@ import type { ParsedKey } from "@opentui/core" -import type { TuiDialogSelectOption, TuiPluginApi, TuiRouteDefinition, TuiSlotProps } from "@mimo-ai/plugin/tui" +import type { TuiDialogSelectOption, TuiPluginApi, TuiRouteDefinition, TuiSlotProps } from "@devora-ai/plugin/tui" import type { useCommandDialog } from "@tui/component/dialog-command" import type { useEvent } from "@tui/context/event" import type { useKeybind } from "@tui/context/keybind" diff --git a/packages/opencode/src/cli/cmd/tui/plugin/index.ts b/packages/devora/src/cli/cmd/tui/plugin/index.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/plugin/index.ts rename to packages/devora/src/cli/cmd/tui/plugin/index.ts diff --git a/packages/opencode/src/cli/cmd/tui/plugin/internal.ts b/packages/devora/src/cli/cmd/tui/plugin/internal.ts similarity index 93% rename from packages/opencode/src/cli/cmd/tui/plugin/internal.ts rename to packages/devora/src/cli/cmd/tui/plugin/internal.ts index 1b6cd996..689b9a19 100644 --- a/packages/opencode/src/cli/cmd/tui/plugin/internal.ts +++ b/packages/devora/src/cli/cmd/tui/plugin/internal.ts @@ -11,7 +11,7 @@ import SidebarTodo from "../feature-plugins/sidebar/todo" import SidebarFiles from "../feature-plugins/sidebar/files" import SidebarFooter from "../feature-plugins/sidebar/footer" import PluginManager from "../feature-plugins/system/plugins" -import type { TuiPlugin, TuiPluginModule } from "@mimo-ai/plugin/tui" +import type { TuiPlugin, TuiPluginModule } from "@devora-ai/plugin/tui" export type InternalTuiPlugin = TuiPluginModule & { id: string diff --git a/packages/opencode/src/cli/cmd/tui/plugin/runtime.ts b/packages/devora/src/cli/cmd/tui/plugin/runtime.ts similarity index 98% rename from packages/opencode/src/cli/cmd/tui/plugin/runtime.ts rename to packages/devora/src/cli/cmd/tui/plugin/runtime.ts index 5ffec5c7..b9cea16d 100644 --- a/packages/opencode/src/cli/cmd/tui/plugin/runtime.ts +++ b/packages/devora/src/cli/cmd/tui/plugin/runtime.ts @@ -9,7 +9,7 @@ import { type TuiPluginStatus, type TuiSlotPlugin, type TuiTheme, -} from "@mimo-ai/plugin/tui" +} from "@devora-ai/plugin/tui" import path from "path" import { fileURLToPath } from "url" import { TuiConfig } from "@/cli/cmd/tui/config/tui" @@ -32,7 +32,7 @@ import { hasTheme, upsertTheme } from "../context/theme" import { Global } from "@/global" import { Filesystem } from "@/util" import { Process } from "@/util" -import { Flock } from "@mimo-ai/shared/util/flock" +import { Flock } from "@devora-ai/shared/util/flock" import { Flag } from "@/flag/flag" import { INTERNAL_TUI_PLUGINS, type InternalTuiPlugin } from "./internal" import { setupSlots, Slot as View } from "./slots" @@ -157,9 +157,9 @@ function createThemeInstaller( const name = path.basename(src, path.extname(src)) const source_dir = path.dirname(meta.source) const local_dir = - path.basename(source_dir) === ".mimocode" + path.basename(source_dir) === ".devora" ? path.join(source_dir, "themes") - : path.join(source_dir, ".mimocode", "themes") + : path.join(source_dir, ".devora", "themes") const dest_dir = meta.scope === "local" ? local_dir : path.join(Global.Path.config, "themes") const dest = path.join(dest_dir, `${name}.json`) const stat = await Filesystem.statAsync(src) @@ -748,7 +748,7 @@ function defaultPluginOrigin(state: RuntimeState, spec: string): ConfigPlugin.Or return { spec, scope: "local", - source: state.api.state.path.config || path.join(state.directory, ".mimocode", "tui.json"), + source: state.api.state.path.config || path.join(state.directory, ".devora", "tui.json"), } } @@ -989,8 +989,8 @@ async function load(input: { api: Api; config: TuiConfig.Info }) { await Instance.provide({ directory: cwd, fn: async () => { - const records = Flag.MIMOCODE_PURE ? [] : (config.plugin_origins ?? []) - if (Flag.MIMOCODE_PURE && config.plugin_origins?.length) { + const records = Flag.DEVORA_PURE ? [] : (config.plugin_origins ?? []) + if (Flag.DEVORA_PURE && config.plugin_origins?.length) { log.info("skipping external tui plugins in pure mode", { count: config.plugin_origins.length }) } diff --git a/packages/opencode/src/cli/cmd/tui/plugin/slots.tsx b/packages/devora/src/cli/cmd/tui/plugin/slots.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/plugin/slots.tsx rename to packages/devora/src/cli/cmd/tui/plugin/slots.tsx index 2c0159f8..87f29e36 100644 --- a/packages/opencode/src/cli/cmd/tui/plugin/slots.tsx +++ b/packages/devora/src/cli/cmd/tui/plugin/slots.tsx @@ -1,4 +1,4 @@ -import type { TuiPluginApi, TuiSlotContext, TuiSlotMap, TuiSlotProps } from "@mimo-ai/plugin/tui" +import type { TuiPluginApi, TuiSlotContext, TuiSlotMap, TuiSlotProps } from "@devora-ai/plugin/tui" import { createSlot, createSolidSlotRegistry, type JSX, type SolidPlugin } from "@opentui/solid" import { isRecord } from "@/util/record" diff --git a/packages/opencode/src/cli/cmd/tui/routes/home.tsx b/packages/devora/src/cli/cmd/tui/routes/home.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/routes/home.tsx rename to packages/devora/src/cli/cmd/tui/routes/home.tsx diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx b/packages/devora/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx similarity index 98% rename from packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx rename to packages/devora/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx index e4f7eefb..69616e64 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +++ b/packages/devora/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx @@ -1,7 +1,7 @@ import { createMemo, onMount } from "solid-js" import { useSync } from "@tui/context/sync" import { DialogSelect, type DialogSelectOption } from "@tui/ui/dialog-select" -import type { TextPart } from "@mimo-ai/sdk/v2" +import type { TextPart } from "@devora-ai/sdk/v2" import { Locale } from "@/util" import { useSDK } from "@tui/context/sdk" import { useRoute } from "@tui/context/route" diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx b/packages/devora/src/cli/cmd/tui/routes/session/dialog-message.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx rename to packages/devora/src/cli/cmd/tui/routes/session/dialog-message.tsx diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-subagent.tsx b/packages/devora/src/cli/cmd/tui/routes/session/dialog-subagent.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/routes/session/dialog-subagent.tsx rename to packages/devora/src/cli/cmd/tui/routes/session/dialog-subagent.tsx diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx b/packages/devora/src/cli/cmd/tui/routes/session/dialog-timeline.tsx similarity index 96% rename from packages/opencode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx rename to packages/devora/src/cli/cmd/tui/routes/session/dialog-timeline.tsx index d37deeaf..cff52d37 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +++ b/packages/devora/src/cli/cmd/tui/routes/session/dialog-timeline.tsx @@ -1,7 +1,7 @@ import { createMemo, onMount } from "solid-js" import { useSync } from "@tui/context/sync" import { DialogSelect, type DialogSelectOption } from "@tui/ui/dialog-select" -import type { TextPart } from "@mimo-ai/sdk/v2" +import type { TextPart } from "@devora-ai/sdk/v2" import { Locale } from "@/util" import { DialogMessage } from "./dialog-message" import { useDialog } from "../../ui/dialog" diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx b/packages/devora/src/cli/cmd/tui/routes/session/footer.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx rename to packages/devora/src/cli/cmd/tui/routes/session/footer.tsx diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/devora/src/cli/cmd/tui/routes/session/index.tsx similarity index 99% rename from packages/opencode/src/cli/cmd/tui/routes/session/index.tsx rename to packages/devora/src/cli/cmd/tui/routes/session/index.tsx index c2a6f525..2c07c743 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/devora/src/cli/cmd/tui/routes/session/index.tsx @@ -32,7 +32,7 @@ import type { UserMessage, TextPart, ReasoningPart, -} from "@mimo-ai/sdk/v2" +} from "@devora-ai/sdk/v2" import { useLocal } from "@tui/context/local" import { Locale } from "@/util" import type { Tool } from "@/tool" @@ -284,7 +284,7 @@ export function Session() { ...logo, ``, ` ${weak("Session")}${UI.Style.TEXT_NORMAL_BOLD}${title}${UI.Style.TEXT_NORMAL}`, - ` ${weak("Continue")}${UI.Style.TEXT_NORMAL_BOLD}mimo -s ${session()?.id}${UI.Style.TEXT_NORMAL}`, + ` ${weak("Continue")}${UI.Style.TEXT_NORMAL_BOLD}devora -s ${session()?.id}${UI.Style.TEXT_NORMAL}`, ``, ].join("\n"), ) @@ -1595,7 +1595,7 @@ function TextPart(props: { last: boolean; part: TextPart; message: AssistantMess - + - + - + - This will allow the following patterns until MiMoCode is restarted + This will allow the following patterns until Devora is restarted {(pattern) => ( @@ -504,7 +504,7 @@ function RejectPrompt(props: { onConfirm: (message: string) => void; onCancel: ( Reject permission - Tell MiMoCode what to do differently + Tell Devora what to do differently > @@ -52,7 +52,7 @@ function createEventSource(client: RpcClient): EventSource { } async function target() { - if (typeof OPENCODE_WORKER_PATH !== "undefined") return OPENCODE_WORKER_PATH + if (typeof DEVORA_WORKER_PATH !== "undefined") return DEVORA_WORKER_PATH const dist = new URL("./cli/cmd/tui/worker.js", import.meta.url) if (await Filesystem.exists(fileURLToPath(dist))) return dist return new URL("./worker.ts", import.meta.url) @@ -67,12 +67,12 @@ async function input(value?: string) { export const TuiThreadCommand = cmd({ command: "$0 [project]", - describe: "start mimocode tui", + describe: "start devora tui", builder: (yargs) => withNetworkOptions(yargs) .positional("project", { type: "string", - describe: "path to start mimocode in", + describe: "path to start devora in", }) .option("model", { type: "string", @@ -137,8 +137,8 @@ export const TuiThreadCommand = cmd({ } const cwd = Filesystem.resolve(process.cwd()) const env = sanitizedProcessEnv({ - [MIMOCODE_PROCESS_ROLE]: "worker", - [MIMOCODE_RUN_ID]: ensureRunID(), + [DEVORA_PROCESS_ROLE]: "worker", + [DEVORA_RUN_ID]: ensureRunID(), }) const worker = new Worker(file, { @@ -203,7 +203,7 @@ export const TuiThreadCommand = cmd({ events: undefined, } : { - url: "http://opencode.internal", + url: "http://devora.internal", fetch: createWorkerFetch(client), events: createEventSource(client), } diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-alert.tsx b/packages/devora/src/cli/cmd/tui/ui/dialog-alert.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/dialog-alert.tsx rename to packages/devora/src/cli/cmd/tui/ui/dialog-alert.tsx diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx b/packages/devora/src/cli/cmd/tui/ui/dialog-confirm.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx rename to packages/devora/src/cli/cmd/tui/ui/dialog-confirm.tsx diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-export-options.tsx b/packages/devora/src/cli/cmd/tui/ui/dialog-export-options.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/dialog-export-options.tsx rename to packages/devora/src/cli/cmd/tui/ui/dialog-export-options.tsx diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-help.tsx b/packages/devora/src/cli/cmd/tui/ui/dialog-help.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/dialog-help.tsx rename to packages/devora/src/cli/cmd/tui/ui/dialog-help.tsx diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-prompt.tsx b/packages/devora/src/cli/cmd/tui/ui/dialog-prompt.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/dialog-prompt.tsx rename to packages/devora/src/cli/cmd/tui/ui/dialog-prompt.tsx diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx b/packages/devora/src/cli/cmd/tui/ui/dialog-select.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx rename to packages/devora/src/cli/cmd/tui/ui/dialog-select.tsx diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx b/packages/devora/src/cli/cmd/tui/ui/dialog.tsx similarity index 96% rename from packages/opencode/src/cli/cmd/tui/ui/dialog.tsx rename to packages/devora/src/cli/cmd/tui/ui/dialog.tsx index 2bc8c942..010e1f1b 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx +++ b/packages/devora/src/cli/cmd/tui/ui/dialog.tsx @@ -53,7 +53,7 @@ export function Dialog( { dismiss = false - if (!Flag.MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT) { + if (!Flag.DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT) { const text = renderer.getSelection()?.getSelectedText() if (text) { Clipboard.copy(text) @@ -175,7 +175,7 @@ export function DialogProvider(props: ParentProps) { position="absolute" zIndex={3000} onMouseDown={(evt) => { - if (!Flag.MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT) return + if (!Flag.DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT) return if (evt.button !== MouseButton.RIGHT) return if (!Selection.copy(renderer, toast, t("tui.toast.copied_to_clipboard"))) return @@ -183,7 +183,7 @@ export function DialogProvider(props: ParentProps) { evt.stopPropagation() }} onMouseUp={ - !Flag.MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT + !Flag.DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT ? () => Selection.copy(renderer, toast, t("tui.toast.copied_to_clipboard")) : undefined } diff --git a/packages/opencode/src/cli/cmd/tui/ui/link.tsx b/packages/devora/src/cli/cmd/tui/ui/link.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/link.tsx rename to packages/devora/src/cli/cmd/tui/ui/link.tsx diff --git a/packages/opencode/src/cli/cmd/tui/ui/spinner.ts b/packages/devora/src/cli/cmd/tui/ui/spinner.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/spinner.ts rename to packages/devora/src/cli/cmd/tui/ui/spinner.ts diff --git a/packages/opencode/src/cli/cmd/tui/ui/toast.tsx b/packages/devora/src/cli/cmd/tui/ui/toast.tsx similarity index 100% rename from packages/opencode/src/cli/cmd/tui/ui/toast.tsx rename to packages/devora/src/cli/cmd/tui/ui/toast.tsx diff --git a/packages/opencode/src/cli/cmd/tui/util/clipboard.ts b/packages/devora/src/cli/cmd/tui/util/clipboard.ts similarity index 99% rename from packages/opencode/src/cli/cmd/tui/util/clipboard.ts rename to packages/devora/src/cli/cmd/tui/util/clipboard.ts index 8c535833..8263f800 100644 --- a/packages/opencode/src/cli/cmd/tui/util/clipboard.ts +++ b/packages/devora/src/cli/cmd/tui/util/clipboard.ts @@ -48,7 +48,7 @@ export async function read(): Promise { const os = platform() if (os === "darwin") { - const tmpfile = path.join(tmpdir(), "opencode-clipboard.png") + const tmpfile = path.join(tmpdir(), "devora-clipboard.png") try { await Process.run( [ diff --git a/packages/opencode/src/cli/cmd/tui/util/editor.ts b/packages/devora/src/cli/cmd/tui/util/editor.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/editor.ts rename to packages/devora/src/cli/cmd/tui/util/editor.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/image-protocol.ts b/packages/devora/src/cli/cmd/tui/util/image-protocol.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/image-protocol.ts rename to packages/devora/src/cli/cmd/tui/util/image-protocol.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/index.ts b/packages/devora/src/cli/cmd/tui/util/index.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/index.ts rename to packages/devora/src/cli/cmd/tui/util/index.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/model.ts b/packages/devora/src/cli/cmd/tui/util/model.ts similarity index 92% rename from packages/opencode/src/cli/cmd/tui/util/model.ts rename to packages/devora/src/cli/cmd/tui/util/model.ts index cc39b772..6c3c7597 100644 --- a/packages/opencode/src/cli/cmd/tui/util/model.ts +++ b/packages/devora/src/cli/cmd/tui/util/model.ts @@ -1,4 +1,4 @@ -import type { Provider } from "@mimo-ai/sdk/v2" +import type { Provider } from "@devora-ai/sdk/v2" export function index(list: Provider[] | undefined) { return new Map((list ?? []).map((item) => [item.id, item] as const)) diff --git a/packages/opencode/src/cli/cmd/tui/util/provider-origin.ts b/packages/devora/src/cli/cmd/tui/util/provider-origin.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/provider-origin.ts rename to packages/devora/src/cli/cmd/tui/util/provider-origin.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/revert-diff.ts b/packages/devora/src/cli/cmd/tui/util/revert-diff.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/revert-diff.ts rename to packages/devora/src/cli/cmd/tui/util/revert-diff.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/scroll.ts b/packages/devora/src/cli/cmd/tui/util/scroll.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/scroll.ts rename to packages/devora/src/cli/cmd/tui/util/scroll.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/selection.ts b/packages/devora/src/cli/cmd/tui/util/selection.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/selection.ts rename to packages/devora/src/cli/cmd/tui/util/selection.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/signal.ts b/packages/devora/src/cli/cmd/tui/util/signal.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/signal.ts rename to packages/devora/src/cli/cmd/tui/util/signal.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/sound.ts b/packages/devora/src/cli/cmd/tui/util/sound.ts similarity index 98% rename from packages/opencode/src/cli/cmd/tui/util/sound.ts rename to packages/devora/src/cli/cmd/tui/util/sound.ts index e0a15c1a..cbbad97d 100644 --- a/packages/opencode/src/cli/cmd/tui/util/sound.ts +++ b/packages/devora/src/cli/cmd/tui/util/sound.ts @@ -12,7 +12,7 @@ import charge from "../asset/charge.wav" with { type: "file" } const FILE = [pulseA, pulseB, pulseC] const HUM = charge -const DIR = join(tmpdir(), "opencode-sfx") +const DIR = join(tmpdir(), "devora-sfx") const LIST = [ "ffplay", diff --git a/packages/opencode/src/cli/cmd/tui/util/system-locale.ts b/packages/devora/src/cli/cmd/tui/util/system-locale.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/system-locale.ts rename to packages/devora/src/cli/cmd/tui/util/system-locale.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/terminal.ts b/packages/devora/src/cli/cmd/tui/util/terminal.ts similarity index 98% rename from packages/opencode/src/cli/cmd/tui/util/terminal.ts rename to packages/devora/src/cli/cmd/tui/util/terminal.ts index 504e4202..3e935a06 100644 --- a/packages/opencode/src/cli/cmd/tui/util/terminal.ts +++ b/packages/devora/src/cli/cmd/tui/util/terminal.ts @@ -10,7 +10,7 @@ export function isMacNativeTerminal(input?: { platform?: NodeJS.Platform; termPr } export function isPlainTerminal(input?: { platform?: NodeJS.Platform; termProgram?: string; plain?: string }) { - const plain = input?.plain ?? process.env.MIMOCODE_TUI_PLAIN + const plain = input?.plain ?? process.env.DEVORA_TUI_PLAIN if (plain === "false" || plain === "0") return false if (plain === "true" || plain === "1") return true return isMacNativeTerminal(input) diff --git a/packages/opencode/src/cli/cmd/tui/util/transcript.ts b/packages/devora/src/cli/cmd/tui/util/transcript.ts similarity index 99% rename from packages/opencode/src/cli/cmd/tui/util/transcript.ts rename to packages/devora/src/cli/cmd/tui/util/transcript.ts index 5b5c3f13..c06f401f 100644 --- a/packages/opencode/src/cli/cmd/tui/util/transcript.ts +++ b/packages/devora/src/cli/cmd/tui/util/transcript.ts @@ -1,4 +1,4 @@ -import type { AssistantMessage, Part, Provider, UserMessage } from "@mimo-ai/sdk/v2" +import type { AssistantMessage, Part, Provider, UserMessage } from "@devora-ai/sdk/v2" import { Locale } from "@/util" import * as Model from "./model" diff --git a/packages/opencode/src/cli/cmd/tui/util/vad.ts b/packages/devora/src/cli/cmd/tui/util/vad.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/util/vad.ts rename to packages/devora/src/cli/cmd/tui/util/vad.ts diff --git a/packages/opencode/src/cli/cmd/tui/util/voice.ts b/packages/devora/src/cli/cmd/tui/util/voice.ts similarity index 97% rename from packages/opencode/src/cli/cmd/tui/util/voice.ts rename to packages/devora/src/cli/cmd/tui/util/voice.ts index 5cc9cae8..db224d8a 100644 --- a/packages/opencode/src/cli/cmd/tui/util/voice.ts +++ b/packages/devora/src/cli/cmd/tui/util/voice.ts @@ -138,10 +138,10 @@ export async function transcribeAudio(opts: { headers: { "Content-Type": "application/json", "api-key": opts.apiKey, - "X-Mimo-Source": "mimocode-cli", + "X-Devora-Source": "devora-cli", }, body: JSON.stringify({ - model: "mimo-v2.5-asr", + model: "devora-v2.5-asr", messages: [{ role: "user", content: [{ type: "input_audio", input_audio: { data: dataUrl } }] }], asr_options: { language: "auto" }, }), @@ -211,7 +211,7 @@ const VoiceControlSchema = z.object({ export type VoiceAction = z.infer export type VoiceControlResult = z.infer -const VOICE_CONTROL_SYSTEM_PROMPT = `你是 MiMoCode(AI 编程助手)的语音输入助手。用户通过语音向输入框口述消息,这些消息将发送给 Code Agent 执行编程任务。用户可能使用中文或英文。 +const VOICE_CONTROL_SYSTEM_PROMPT = `你是 Devora(AI 编程助手)的语音输入助手。用户通过语音向输入框口述消息,这些消息将发送给 Code Agent 执行编程任务。用户可能使用中文或英文。 ## 核心原则 用户说的绝大多数内容是**给 Code Agent 的指令或描述**,必须原样转录为输入框内容。只有以下三种情况属于语音控制指令: @@ -328,10 +328,10 @@ export async function processVoiceControl(opts: { headers: { "Content-Type": "application/json", "api-key": opts.apiKey, - "X-Mimo-Source": "mimocode-cli", + "X-Devora-Source": "devora-cli", }, body: JSON.stringify({ - model: "mimo-v2.5", + model: "devora-v2.5", messages: [ { role: "system", content: VOICE_CONTROL_SYSTEM_PROMPT }, { diff --git a/packages/opencode/src/cli/cmd/tui/win32.ts b/packages/devora/src/cli/cmd/tui/win32.ts similarity index 100% rename from packages/opencode/src/cli/cmd/tui/win32.ts rename to packages/devora/src/cli/cmd/tui/win32.ts diff --git a/packages/opencode/src/cli/cmd/tui/worker.ts b/packages/devora/src/cli/cmd/tui/worker.ts similarity index 94% rename from packages/opencode/src/cli/cmd/tui/worker.ts rename to packages/devora/src/cli/cmd/tui/worker.ts index 5fda4636..7435675b 100644 --- a/packages/opencode/src/cli/cmd/tui/worker.ts +++ b/packages/devora/src/cli/cmd/tui/worker.ts @@ -11,7 +11,7 @@ import { Flag } from "@/flag/flag" import { writeHeapSnapshot } from "node:v8" import { Heap } from "@/cli/heap" import { AppRuntime } from "@/effect/app-runtime" -import { ensureProcessMetadata } from "@/util/mimo-process" +import { ensureProcessMetadata } from "@/util/devora-process" ensureProcessMetadata("worker") @@ -97,8 +97,8 @@ export const rpc = { Rpc.listen(rpc) function getAuthorizationHeader(): string | undefined { - const password = Flag.MIMOCODE_SERVER_PASSWORD + const password = Flag.DEVORA_SERVER_PASSWORD if (!password) return undefined - const username = Flag.MIMOCODE_SERVER_USERNAME ?? "mimocode" + const username = Flag.DEVORA_SERVER_USERNAME ?? "devora" return `Basic ${btoa(`${username}:${password}`)}` } diff --git a/packages/opencode/src/cli/cmd/uninstall.ts b/packages/devora/src/cli/cmd/uninstall.ts similarity index 88% rename from packages/opencode/src/cli/cmd/uninstall.ts rename to packages/devora/src/cli/cmd/uninstall.ts index ab8984c6..f5e31927 100644 --- a/packages/opencode/src/cli/cmd/uninstall.ts +++ b/packages/devora/src/cli/cmd/uninstall.ts @@ -25,7 +25,7 @@ interface RemovalTargets { export const UninstallCommand = { command: "uninstall", - describe: "uninstall mimocode and remove all related files", + describe: "uninstall devora and remove all related files", builder: (yargs: Argv) => yargs .option("keep-config", { @@ -56,7 +56,7 @@ export const UninstallCommand = { UI.empty() UI.println(UI.logo(" ")) UI.empty() - prompts.intro("Uninstall MiMoCode") + prompts.intro("Uninstall Devora") const method = await AppRuntime.runPromise(Installation.Service.use((svc) => svc.method())) prompts.log.info(`Installation method: ${method}`) @@ -130,13 +130,13 @@ async function showRemovalSummary(targets: RemovalTargets, method: Installation. if (method !== "curl" && method !== "unknown") { const cmds: Record = { - npm: "npm uninstall -g @mimo-ai/cli", - pnpm: "pnpm uninstall -g @mimo-ai/cli", - bun: "bun remove -g @mimo-ai/cli", - // TODO(mimocode): uncomment when published to these channels - // brew: "brew uninstall mimocode", - // choco: "choco uninstall mimocode", - // scoop: "scoop uninstall mimocode", + npm: "npm uninstall -g @devora-ai/cli", + pnpm: "pnpm uninstall -g @devora-ai/cli", + bun: "bun remove -g @devora-ai/cli", + // TODO(devora): uncomment when published to these channels + // brew: "brew uninstall devora", + // choco: "choco uninstall devora", + // scoop: "scoop uninstall devora", } prompts.log.info(` ✓ Package: ${cmds[method] || method}`) } @@ -181,13 +181,13 @@ async function executeUninstall(method: Installation.Method, targets: RemovalTar if (method !== "curl" && method !== "unknown") { const cmds: Record = { - npm: ["npm", "uninstall", "-g", "@mimo-ai/cli"], - pnpm: ["pnpm", "uninstall", "-g", "@mimo-ai/cli"], - bun: ["bun", "remove", "-g", "@mimo-ai/cli"], - // TODO(mimocode): uncomment when published to these channels - // brew: ["brew", "uninstall", "mimocode"], - // choco: ["choco", "uninstall", "mimocode"], - // scoop: ["scoop", "uninstall", "mimocode"], + npm: ["npm", "uninstall", "-g", "@devora-ai/cli"], + pnpm: ["pnpm", "uninstall", "-g", "@devora-ai/cli"], + bun: ["bun", "remove", "-g", "@devora-ai/cli"], + // TODO(devora): uncomment when published to these channels + // brew: ["brew", "uninstall", "devora"], + // choco: ["choco", "uninstall", "devora"], + // scoop: ["scoop", "uninstall", "devora"], } const cmd = cmds[method] @@ -213,7 +213,7 @@ async function executeUninstall(method: Installation.Method, targets: RemovalTar prompts.log.info(` rm "${targets.binary}"`) const binDir = path.dirname(targets.binary) - if (binDir.includes(".mimocode")) { + if (binDir.includes(".devora")) { prompts.log.info(` rmdir "${binDir}" 2>/dev/null`) } } @@ -227,7 +227,7 @@ async function executeUninstall(method: Installation.Method, targets: RemovalTar } UI.empty() - prompts.log.success("Thank you for using MiMoCode!") + prompts.log.success("Thank you for using Devora!") } async function getShellConfigFile(): Promise { @@ -264,7 +264,7 @@ async function getShellConfigFile(): Promise { if (!exists) continue const content = await Filesystem.readText(file).catch(() => "") - if (content.includes("# mimocode") || content.includes(".mimocode/bin")) { + if (content.includes("# devora") || content.includes(".devora/bin")) { return file } } @@ -282,21 +282,21 @@ async function cleanShellConfig(file: string) { for (const line of lines) { const trimmed = line.trim() - if (trimmed === "# mimocode") { + if (trimmed === "# devora") { skip = true continue } if (skip) { skip = false - if (trimmed.includes(".mimocode/bin") || trimmed.includes("fish_add_path")) { + if (trimmed.includes(".devora/bin") || trimmed.includes("fish_add_path")) { continue } } if ( - (trimmed.startsWith("export PATH=") && trimmed.includes(".mimocode/bin")) || - (trimmed.startsWith("fish_add_path") && trimmed.includes(".mimocode")) + (trimmed.startsWith("export PATH=") && trimmed.includes(".devora/bin")) || + (trimmed.startsWith("fish_add_path") && trimmed.includes(".devora")) ) { continue } diff --git a/packages/opencode/src/cli/cmd/upgrade.ts b/packages/devora/src/cli/cmd/upgrade.ts similarity index 90% rename from packages/opencode/src/cli/cmd/upgrade.ts rename to packages/devora/src/cli/cmd/upgrade.ts index abeb6307..cf2fe934 100644 --- a/packages/opencode/src/cli/cmd/upgrade.ts +++ b/packages/devora/src/cli/cmd/upgrade.ts @@ -7,7 +7,7 @@ import { InstallationVersion } from "../../installation/version" export const UpgradeCommand = { command: "upgrade [target]", - describe: "upgrade mimocode to the latest or a specific version", + describe: "upgrade devora to the latest or a specific version", builder: (yargs: Argv) => { return yargs .positional("target", { @@ -29,7 +29,7 @@ export const UpgradeCommand = { const detectedMethod = await AppRuntime.runPromise(Installation.Service.use((svc) => svc.method())) const method = (args.method as Installation.Method) ?? detectedMethod if (method === "unknown") { - prompts.log.error(`opencode is installed to ${process.execPath} and may be managed by a package manager`) + prompts.log.error(`devora is installed to ${process.execPath} and may be managed by a package manager`) const install = await prompts.select({ message: "Install anyways?", options: [ @@ -49,7 +49,7 @@ export const UpgradeCommand = { : await AppRuntime.runPromise(Installation.Service.use((svc) => svc.latest())) if (InstallationVersion === target) { - prompts.log.warn(`opencode upgrade skipped: ${target} is already installed`) + prompts.log.warn(`devora upgrade skipped: ${target} is already installed`) prompts.outro("Done") return } diff --git a/packages/opencode/src/cli/cmd/web.ts b/packages/devora/src/cli/cmd/web.ts similarity index 91% rename from packages/opencode/src/cli/cmd/web.ts rename to packages/devora/src/cli/cmd/web.ts index 7daa8b53..16da2b28 100644 --- a/packages/opencode/src/cli/cmd/web.ts +++ b/packages/devora/src/cli/cmd/web.ts @@ -31,10 +31,10 @@ function getNetworkIPs() { export const WebCommand = cmd({ command: "web", builder: (yargs) => withNetworkOptions(yargs), - describe: "start mimocode server and open web interface", + describe: "start devora server and open web interface", handler: async (args) => { - if (!Flag.MIMOCODE_SERVER_PASSWORD) { - UI.println(UI.Style.TEXT_WARNING_BOLD + "! MIMOCODE_SERVER_PASSWORD is not set; server is unsecured.") + if (!Flag.DEVORA_SERVER_PASSWORD) { + UI.println(UI.Style.TEXT_WARNING_BOLD + "! DEVORA_SERVER_PASSWORD is not set; server is unsecured.") } const opts = await resolveNetworkOptions(args) const server = await Server.listen(opts) diff --git a/packages/opencode/src/cli/effect/prompt.ts b/packages/devora/src/cli/effect/prompt.ts similarity index 100% rename from packages/opencode/src/cli/effect/prompt.ts rename to packages/devora/src/cli/effect/prompt.ts diff --git a/packages/opencode/src/cli/error.ts b/packages/devora/src/cli/error.ts similarity index 92% rename from packages/opencode/src/cli/error.ts rename to packages/devora/src/cli/error.ts index 5fdb63e6..be96cd49 100644 --- a/packages/opencode/src/cli/error.ts +++ b/packages/devora/src/cli/error.ts @@ -1,4 +1,4 @@ -import { NamedError } from "@mimo-ai/shared/util/error" +import { NamedError } from "@devora-ai/shared/util/error" import { errorFormat } from "@/util/error" interface ErrorLike { @@ -17,7 +17,7 @@ function isTaggedError(error: unknown, tag: string): boolean { export function FormatError(input: unknown) { // MCPFailed: { name: string } if (NamedError.hasName(input, "MCPFailed")) { - return `MCP server "${(input as ErrorLike).data?.name}" failed. Note, opencode does not support MCP authentication yet.` + return `MCP server "${(input as ErrorLike).data?.name}" failed. Note, devora does not support MCP authentication yet.` } // AccountServiceError, AccountTransportError: TaggedErrorClass @@ -32,8 +32,8 @@ export function FormatError(input: unknown) { return [ `Model not found: ${data?.providerID}/${data?.modelID}`, ...(suggestions.length ? ["Did you mean: " + suggestions.join(", ")] : []), - `Try: \`mimo models\` to list available models`, - `Or check your config (mimocode.json) provider/model names`, + `Try: \`devora models\` to list available models`, + `Or check your config (devora.json) provider/model names`, ].join("\n") } diff --git a/packages/opencode/src/cli/heap.ts b/packages/devora/src/cli/heap.ts similarity index 96% rename from packages/opencode/src/cli/heap.ts rename to packages/devora/src/cli/heap.ts index cefae5e7..71466fab 100644 --- a/packages/opencode/src/cli/heap.ts +++ b/packages/devora/src/cli/heap.ts @@ -13,7 +13,7 @@ let lock = false let armed = true export function start() { - if (!Flag.MIMOCODE_AUTO_HEAP_SNAPSHOT) return + if (!Flag.DEVORA_AUTO_HEAP_SNAPSHOT) return if (timer) return const run = async () => { diff --git a/packages/opencode/src/cli/i18n.ts b/packages/devora/src/cli/i18n.ts similarity index 100% rename from packages/opencode/src/cli/i18n.ts rename to packages/devora/src/cli/i18n.ts diff --git a/packages/opencode/src/cli/logo.ts b/packages/devora/src/cli/logo.ts similarity index 96% rename from packages/opencode/src/cli/logo.ts rename to packages/devora/src/cli/logo.ts index caec702b..34b0f2f4 100644 --- a/packages/opencode/src/cli/logo.ts +++ b/packages/devora/src/cli/logo.ts @@ -10,7 +10,7 @@ export const logo = { " ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ", ], right: [ - " Xiaomi", + " Devora", " ", " ██████╗ ██████╗ ██████╗ ███████╗", "██╔════╝ ██╔═══██╗ ██╔══██╗ ██╔════╝", @@ -30,7 +30,7 @@ export const logoThin = { "▀ ▀ ▀ ▀ ▀ ▀▀▀▀", ], right: [ - " Xiaomi", + " Devora", " ", " █▀▀ █▀▀█ █▀▀▄ █▀▀▀", " █ █ █ █ █ █▀▀ ", diff --git a/packages/opencode/src/cli/network.ts b/packages/devora/src/cli/network.ts similarity index 95% rename from packages/opencode/src/cli/network.ts rename to packages/devora/src/cli/network.ts index 482f1481..1f6eccd6 100644 --- a/packages/opencode/src/cli/network.ts +++ b/packages/devora/src/cli/network.ts @@ -20,8 +20,8 @@ const options = { }, "mdns-domain": { type: "string" as const, - describe: "custom domain name for mDNS service (default: mimocode.local)", - default: "mimocode.local", + describe: "custom domain name for mDNS service (default: devora.local)", + default: "devora.local", }, cors: { type: "string" as const, diff --git a/packages/opencode/src/cli/ui.ts b/packages/devora/src/cli/ui.ts similarity index 98% rename from packages/opencode/src/cli/ui.ts rename to packages/devora/src/cli/ui.ts index 1c8607d8..6bab9727 100644 --- a/packages/opencode/src/cli/ui.ts +++ b/packages/devora/src/cli/ui.ts @@ -1,6 +1,6 @@ import z from "zod" import { EOL } from "os" -import { NamedError } from "@mimo-ai/shared/util/error" +import { NamedError } from "@devora-ai/shared/util/error" import { logo as glyphs } from "./logo" const wordmark = [ diff --git a/packages/opencode/src/cli/upgrade.ts b/packages/devora/src/cli/upgrade.ts similarity index 92% rename from packages/opencode/src/cli/upgrade.ts rename to packages/devora/src/cli/upgrade.ts index 2653a249..fdd33e33 100644 --- a/packages/opencode/src/cli/upgrade.ts +++ b/packages/devora/src/cli/upgrade.ts @@ -17,13 +17,13 @@ export async function upgrade() { }) if (!latest) return - if (Flag.MIMOCODE_ALWAYS_NOTIFY_UPDATE) { + if (Flag.DEVORA_ALWAYS_NOTIFY_UPDATE) { await Bus.publish(Installation.Event.UpdateAvailable, { version: latest }) return } if (InstallationVersion === latest) return - if (config.autoupdate === false || Flag.MIMOCODE_DISABLE_AUTOUPDATE) return + if (config.autoupdate === false || Flag.DEVORA_DISABLE_AUTOUPDATE) return const kind = Installation.getReleaseType(InstallationVersion, latest) diff --git a/packages/opencode/src/command/index.ts b/packages/devora/src/command/index.ts similarity index 97% rename from packages/opencode/src/command/index.ts rename to packages/devora/src/command/index.ts index 2c44e47c..172d5f63 100644 --- a/packages/opencode/src/command/index.ts +++ b/packages/devora/src/command/index.ts @@ -90,7 +90,7 @@ export interface Interface { readonly list: () => Effect.Effect } -export class Service extends Context.Service()("@opencode/Command") {} +export class Service extends Context.Service()("@devora/Command") {} export const layer = Layer.effect( Service, @@ -136,7 +136,7 @@ export const layer = Layer.effect( "User focus or constraints:", "$ARGUMENTS", "", - "Use the memory files as the working index and the raw mimocode trajectory database as the source of truth.", + "Use the memory files as the working index and the raw devora trajectory database as the source of truth.", "Use bash for read-only SQLite and filesystem inspection. Do not modify the database.", "Consolidate only durable, verified information into project memory.", ].join("\n") @@ -157,7 +157,7 @@ export const layer = Layer.effect( "$ARGUMENTS", "", "Look back over recent work and identify repeated manual workflows worth packaging.", - "Use the raw mimocode trajectory database as the source of truth and memory files to spot cross-session patterns.", + "Use the raw devora trajectory database as the source of truth and memory files to spot cross-session patterns.", "Inventory existing skills, agents, and commands first so you reuse or extend instead of duplicating.", "Use bash for read-only SQLite and filesystem inspection. Do not modify the database.", "Produce a compact shortlist, then create only the high-confidence missing assets.", @@ -176,7 +176,7 @@ export const layer = Layer.effect( hints: ["$ARGUMENTS"], } - if (Flag.MIMOCODE_EXPERIMENTAL_WORKFLOW_TOOL) { + if (Flag.DEVORA_EXPERIMENTAL_WORKFLOW_TOOL) { commands[Default.DEEP_RESEARCH] = { name: Default.DEEP_RESEARCH, description: "deep multi-source, fact-checked research report (runs the deep-research workflow)", diff --git a/packages/opencode/src/command/template/initialize.txt b/packages/devora/src/command/template/initialize.txt similarity index 90% rename from packages/opencode/src/command/template/initialize.txt rename to packages/devora/src/command/template/initialize.txt index 90751e3d..c8cae317 100644 --- a/packages/opencode/src/command/template/initialize.txt +++ b/packages/devora/src/command/template/initialize.txt @@ -1,6 +1,6 @@ Create or update `AGENTS.md` for this repository. -The goal is a compact instruction file that helps future OpenCode sessions avoid mistakes and ramp up quickly. Every line should answer: "Would an agent likely miss this without help?" If not, leave it out. +The goal is a compact instruction file that helps future Devora sessions avoid mistakes and ramp up quickly. Every line should answer: "Would an agent likely miss this without help?" If not, leave it out. User-provided focus or constraints (honor these): $ARGUMENTS @@ -12,7 +12,7 @@ Read the highest-value sources first: - build, test, lint, formatter, typecheck, and codegen config - CI workflows and pre-commit / task runner config - existing instruction files (`AGENTS.md`, `CLAUDE.md`, `.cursor/rules/`, `.cursorrules`, `.github/copilot-instructions.md`) -- repo-local OpenCode config such as `opencode.json` +- repo-local Devora config such as `devora.json` If architecture is still unclear after reading config and docs, inspect a small number of representative code files to find the real entrypoints, package boundaries, and execution flow. Prefer reading the files that explain how the system is wired together over random leaf files. @@ -57,7 +57,7 @@ Exclude: - long tutorials or exhaustive file trees - obvious language conventions - speculative claims or anything you could not verify -- content better stored in another file referenced via `opencode.json` `instructions` +- content better stored in another file referenced via `devora.json` `instructions` When in doubt, omit. diff --git a/packages/opencode/src/command/template/review.txt b/packages/devora/src/command/template/review.txt similarity index 100% rename from packages/opencode/src/command/template/review.txt rename to packages/devora/src/command/template/review.txt diff --git a/packages/opencode/src/config/agent.ts b/packages/devora/src/config/agent.ts similarity index 97% rename from packages/opencode/src/config/agent.ts rename to packages/devora/src/config/agent.ts index 0b991b05..6b3c9c7d 100644 --- a/packages/opencode/src/config/agent.ts +++ b/packages/devora/src/config/agent.ts @@ -5,8 +5,8 @@ import z from "zod" import { Bus } from "@/bus" import { zod, ZodOverride } from "@/util/effect-zod" import { Log } from "../util" -import { NamedError } from "@mimo-ai/shared/util/error" -import { Glob } from "@mimo-ai/shared/util/glob" +import { NamedError } from "@devora-ai/shared/util/error" +import { Glob } from "@devora-ai/shared/util/glob" import { configEntryNameFromPath } from "./entry-name" import { InvalidError } from "./error" import * as ConfigMarkdown from "./markdown" @@ -143,7 +143,7 @@ export async function load(dir: string) { }) if (!md) continue - const patterns = ["/.mimocode/agent/", "/.mimocode/agents/", "/agent/", "/agents/"] + const patterns = ["/.devora/agent/", "/.devora/agents/", "/agent/", "/agents/"] const name = configEntryNameFromPath(item, patterns) const config = { diff --git a/packages/opencode/src/config/command.ts b/packages/devora/src/config/command.ts similarity index 92% rename from packages/opencode/src/config/command.ts rename to packages/devora/src/config/command.ts index 4f9bbeab..a08fc849 100644 --- a/packages/opencode/src/config/command.ts +++ b/packages/devora/src/config/command.ts @@ -2,8 +2,8 @@ export * as ConfigCommand from "./command" import { Log } from "../util" import { Schema } from "effect" -import { NamedError } from "@mimo-ai/shared/util/error" -import { Glob } from "@mimo-ai/shared/util/glob" +import { NamedError } from "@devora-ai/shared/util/error" +import { Glob } from "@devora-ai/shared/util/glob" import { Bus } from "@/bus" import { zod } from "@/util/effect-zod" import { withStatics } from "@/util/schema" @@ -44,8 +44,8 @@ export async function load(dir: string) { if (!md) continue const patterns = [ - "/.mimocode/command/", - "/.mimocode/commands/", + "/.devora/command/", + "/.devora/commands/", "/.claude/command/", "/.claude/commands/", "/command/", diff --git a/packages/opencode/src/config/config.ts b/packages/devora/src/config/config.ts similarity index 92% rename from packages/opencode/src/config/config.ts rename to packages/devora/src/config/config.ts index 2f917320..ab7e8fa0 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/devora/src/config/config.ts @@ -6,7 +6,7 @@ import z from "zod" import { mergeDeep, pipe } from "remeda" import { Global } from "../global" import fsNode from "fs/promises" -import { NamedError } from "@mimo-ai/shared/util/error" +import { NamedError } from "@devora-ai/shared/util/error" import { Flag } from "../flag/flag" import { Auth } from "../auth" import { Env } from "../env" @@ -19,10 +19,10 @@ import { Event } from "../server/event" import { Account } from "@/account/account" import { isRecord } from "@/util/record" import type { ConsoleState } from "./console-state" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" import { InstanceState } from "@/effect" import { Context, Duration, Effect, Exit, Fiber, Layer, Option, Schema } from "effect" -import { EffectFlock } from "@mimo-ai/shared/util/effect-flock" +import { EffectFlock } from "@devora-ai/shared/util/effect-flock" import { InstanceRef } from "@/effect/instance-ref" import { zod, ZodOverride } from "@/util/effect-zod" import { ConfigAgent } from "./agent" @@ -63,7 +63,7 @@ function normalizeLoadedConfig(data: unknown, source: string) { delete copy.theme delete copy.keybinds delete copy.tui - log.warn("tui keys in mimocode config are deprecated; move them to tui.json", { path: source }) + log.warn("tui keys in devora config are deprecated; move them to tui.json", { path: source }) return copy } @@ -98,10 +98,10 @@ const InfoSchema = Schema.Struct({ }), logLevel: Schema.optional(LogLevelRef).annotate({ description: "Log level" }), server: Schema.optional(ConfigServer.Server).annotate({ - description: "Server configuration for mimo serve and web commands", + description: "Server configuration for devora serve and web commands", }), command: Schema.optional(Schema.Record(Schema.String, ConfigCommand.Info)).annotate({ - description: "Command configuration, see https://opencode.ai/docs/commands", + description: "Command configuration, see https://devora.ai/docs/commands", }), skills: Schema.optional(ConfigSkills.Info).annotate({ description: "Additional skill folder paths" }), watcher: Schema.optional( @@ -186,7 +186,7 @@ const InfoSchema = Schema.Struct({ }), [Schema.Record(Schema.String, AgentRef)], ), - ).annotate({ description: "Agent configuration, see https://opencode.ai/docs/agents" }), + ).annotate({ description: "Agent configuration, see https://devora.ai/docs/agents" }), provider: Schema.optional(Schema.Record(Schema.String, ConfigProvider.Info)).annotate({ description: "Custom provider configurations and model overrides", }), @@ -324,7 +324,7 @@ const InfoSchema = Schema.Struct({ Schema.Struct({ cc_index: Schema.optional(Schema.Boolean).annotate({ description: - "Index Claude Code memory (~/.claude/projects//memory) and expose under scope='cc'. Default: false. Note: when enabled, every mimocode agent (build/explore/subagents) can search these memories via the builtin `memory` tool — including CC's `type: user` (your role/preferences) and `type: feedback` (your guidance) categories. CC originally writes them for future CC sessions; flipping this on widens the consumer set to mimocode agents on the same machine. Leave disabled (default) if you don't want personal context recallable from a prompt-injection-vulnerable agent.", + "Index Claude Code memory (~/.claude/projects//memory) and expose under scope='cc'. Default: false. Note: when enabled, every devora agent (build/explore/subagents) can search these memories via the builtin `memory` tool — including CC's `type: user` (your role/preferences) and `type: feedback` (your guidance) categories. CC originally writes them for future CC sessions; flipping this on widens the consumer set to devora agents on the same machine. Leave disabled (default) if you don't want personal context recallable from a prompt-injection-vulnerable agent.", }), }), ), @@ -459,10 +459,10 @@ export interface Interface { readonly waitForDependencies: () => Effect.Effect } -export class Service extends Context.Service()("@opencode/Config") {} +export class Service extends Context.Service()("@devora/Config") {} function globalConfigFile() { - const candidates = ["mimocode.jsonc", "mimocode.json", "config.json"].map((file) => + const candidates = ["devora.jsonc", "devora.json", "config.json"].map((file) => path.join(Global.Path.config, file), ) for (const file of candidates) { @@ -537,8 +537,8 @@ export const layer = Layer.effect( yield* Effect.promise(() => resolveLoadedPlugins(data, options.path)) if (!data.$schema) { - data.$schema = "https://opencode.ai/config.json" - const updated = text.replace(/^\s*\{/, '{\n "$schema": "https://opencode.ai/config.json",') + data.$schema = "https://devora.ai/config.json" + const updated = text.replace(/^\s*\{/, '{\n "$schema": "https://devora.ai/config.json",') yield* fs.writeFileString(options.path, updated).pipe(Effect.catch(() => Effect.void)) } return data @@ -555,8 +555,8 @@ export const layer = Layer.effect( let result: Info = pipe( {}, mergeDeep(yield* loadFile(path.join(Global.Path.config, "config.json"))), - mergeDeep(yield* loadFile(path.join(Global.Path.config, "mimocode.json"))), - mergeDeep(yield* loadFile(path.join(Global.Path.config, "mimocode.jsonc"))), + mergeDeep(yield* loadFile(path.join(Global.Path.config, "devora.json"))), + mergeDeep(yield* loadFile(path.join(Global.Path.config, "devora.jsonc"))), ) const legacy = path.join(Global.Path.config, "config") @@ -566,7 +566,7 @@ export const layer = Layer.effect( .then(async (mod) => { const { provider, model, ...rest } = mod.default if (provider && model) result.model = `${provider}/${model}` - result["$schema"] = "https://opencode.ai/config.json" + result["$schema"] = "https://devora.ai/config.json" result = mergeDeep(result, rest) await fsNode.writeFile(path.join(Global.Path.config, "config.json"), JSON.stringify(result, null, 2)) await fsNode.unlink(legacy) @@ -620,7 +620,7 @@ export const layer = Layer.effect( const pluginScopeForSource = Effect.fnUntraced(function* (source: string) { if (source.startsWith("http://") || source.startsWith("https://")) return "global" - if (source === "MIMOCODE_CONFIG_CONTENT") return "local" + if (source === "DEVORA_CONFIG_CONTENT") return "local" if (yield* InstanceRef.use((ctx) => Effect.succeed(Instance.containsPath(source, ctx)))) return "local" return "global" }) @@ -656,7 +656,7 @@ export const layer = Layer.effect( const merge = (source: string, next: Info, kind?: ConfigPlugin.Scope) => { result = mergeConfigConcatArrays(result, next) - mergeMcpOrigins(source, next, "opencode") + mergeMcpOrigins(source, next, "devora") return mergePluginOrigins(source, next.plugin, kind) } @@ -681,7 +681,7 @@ export const layer = Layer.effect( for (const [name, server] of Object.entries(data.mcpServers)) { const existing = result.mcp?.[name] if (existing && result.mcp_origins?.[name]?.type !== "claude") { - log.info(`skipped Claude Code MCP server "${name}"; native opencode MCP with same name already exists.`) + log.info(`skipped Claude Code MCP server "${name}"; native devora MCP with same name already exists.`) continue } @@ -707,17 +707,17 @@ export const layer = Layer.effect( if (value.type === "wellknown") { const url = key.replace(/\/+$/, "") process.env[value.key] = value.token - log.debug("fetching remote config", { url: `${url}/.well-known/opencode` }) + log.debug("fetching remote config", { url: `${url}/.well-known/devora` }) const response = yield* Effect.promise(() => - fetch(`${url}/.well-known/opencode`, { signal: AbortSignal.timeout(1000) }), + fetch(`${url}/.well-known/devora`, { signal: AbortSignal.timeout(1000) }), ) if (!response.ok) { throw new Error(`failed to fetch remote config from ${url}: ${response.status}`) } const wellknown = (yield* Effect.promise(() => response.json())) as { config?: Record } const remoteConfig = wellknown.config ?? {} - if (!remoteConfig.$schema) remoteConfig.$schema = "https://opencode.ai/config.json" - const source = `${url}/.well-known/opencode` + if (!remoteConfig.$schema) remoteConfig.$schema = "https://devora.ai/config.json" + const source = `${url}/.well-known/devora` const next = yield* loadConfig(JSON.stringify(remoteConfig), { dir: path.dirname(source), source, @@ -730,13 +730,13 @@ export const layer = Layer.effect( const global = yield* getGlobal() yield* merge(Global.Path.config, global, "global") - if (Flag.MIMOCODE_CONFIG) { - yield* merge(Flag.MIMOCODE_CONFIG, yield* loadFile(Flag.MIMOCODE_CONFIG)) - log.debug("loaded custom config", { path: Flag.MIMOCODE_CONFIG }) + if (Flag.DEVORA_CONFIG) { + yield* merge(Flag.DEVORA_CONFIG, yield* loadFile(Flag.DEVORA_CONFIG)) + log.debug("loaded custom config", { path: Flag.DEVORA_CONFIG }) } - if (!Flag.MIMOCODE_DISABLE_PROJECT_CONFIG) { - for (const file of yield* ConfigPaths.files("mimocode", ctx.directory, ctx.worktree).pipe(Effect.orDie)) { + if (!Flag.DEVORA_DISABLE_PROJECT_CONFIG) { + for (const file of yield* ConfigPaths.files("devora", ctx.directory, ctx.worktree).pipe(Effect.orDie)) { yield* merge(file, yield* loadFile(file), "local") } } @@ -747,20 +747,20 @@ export const layer = Layer.effect( const directories = yield* ConfigPaths.directories(ctx.directory, ctx.worktree) - if (Flag.MIMOCODE_CONFIG_DIR) { - log.debug("loading config from MIMOCODE_CONFIG_DIR", { path: Flag.MIMOCODE_CONFIG_DIR }) + if (Flag.DEVORA_CONFIG_DIR) { + log.debug("loading config from DEVORA_CONFIG_DIR", { path: Flag.DEVORA_CONFIG_DIR }) } const deps: Fiber.Fiber[] = [] - // Load Claude Code commands first so .mimocode commands override on name collision. + // Load Claude Code commands first so .devora commands override on name collision. for (const dir of yield* ConfigPaths.claudeCommandDirectories(ctx.directory, ctx.worktree)) { result.command = mergeDeep(result.command ?? {}, yield* Effect.promise(() => ConfigCommand.load(dir))) } for (const dir of directories) { - if (dir.endsWith(".mimocode") || dir === Flag.MIMOCODE_CONFIG_DIR) { - for (const file of ["mimocode.json", "mimocode.jsonc"]) { + if (dir.endsWith(".devora") || dir === Flag.DEVORA_CONFIG_DIR) { + for (const file of ["devora.json", "devora.jsonc"]) { const source = path.join(dir, file) log.debug(`loading config from ${source}`) yield* merge(source, yield* loadFile(source)) @@ -776,7 +776,7 @@ export const layer = Layer.effect( .install(dir, { add: [ { - name: "@mimo-ai/plugin", + name: "@devora-ai/plugin", version: InstallationLocal ? undefined : InstallationVersion, }, ], @@ -786,7 +786,9 @@ export const layer = Layer.effect( Effect.tap((exit) => Exit.isFailure(exit) ? Effect.sync(() => { - log.warn("background dependency install failed", { dir, error: String(exit.cause) }) + const payload = { dir, error: String(exit.cause) } + if (Flag.DEVORA_STRICT_CONFIG_DEPS) log.warn("background dependency install failed", payload) + else log.debug("background dependency install failed", payload) }) : Effect.void, ), @@ -798,20 +800,20 @@ export const layer = Layer.effect( result.command = mergeDeep(result.command ?? {}, yield* Effect.promise(() => ConfigCommand.load(dir))) result.agent = mergeDeep(result.agent ?? {}, yield* Effect.promise(() => ConfigAgent.load(dir))) result.agent = mergeDeep(result.agent ?? {}, yield* Effect.promise(() => ConfigAgent.loadMode(dir))) - // Auto-discovered plugins under `.mimocode/plugin(s)` are already local files, so ConfigPlugin.load + // Auto-discovered plugins under `.devora/plugin(s)` are already local files, so ConfigPlugin.load // returns normalized Specs and we only need to attach origin metadata here. const list = yield* Effect.promise(() => ConfigPlugin.load(dir)) yield* mergePluginOrigins(dir, list) } - if (process.env.MIMOCODE_CONFIG_CONTENT) { - const source = "MIMOCODE_CONFIG_CONTENT" - const next = yield* loadConfig(process.env.MIMOCODE_CONFIG_CONTENT, { + if (process.env.DEVORA_CONFIG_CONTENT) { + const source = "DEVORA_CONFIG_CONTENT" + const next = yield* loadConfig(process.env.DEVORA_CONFIG_CONTENT, { dir: ctx.directory, source, }) yield* merge(source, next, "local") - log.debug("loaded custom config from MIMOCODE_CONFIG_CONTENT") + log.debug("loaded custom config from DEVORA_CONFIG_CONTENT") } const activeAccount = Option.getOrUndefined( @@ -827,8 +829,8 @@ export const layer = Layer.effect( { concurrency: 2 }, ) if (Option.isSome(tokenOpt)) { - process.env["MIMOCODE_CONSOLE_TOKEN"] = tokenOpt.value - yield* env.set("MIMOCODE_CONSOLE_TOKEN", tokenOpt.value) + process.env["DEVORA_CONSOLE_TOKEN"] = tokenOpt.value + yield* env.set("DEVORA_CONSOLE_TOKEN", tokenOpt.value) } if (Option.isSome(configOpt)) { @@ -855,7 +857,7 @@ export const layer = Layer.effect( const managedDir = ConfigManaged.managedConfigDir() if (existsSync(managedDir)) { - for (const file of ["mimocode.json", "mimocode.jsonc"]) { + for (const file of ["devora.json", "devora.jsonc"]) { const source = path.join(managedDir, file) yield* merge(source, yield* loadFile(source), "global") } @@ -869,10 +871,10 @@ export const layer = Layer.effect( source: managed.source, }) result = mergeConfigConcatArrays(result, next) - mergeMcpOrigins(managed.source, next, "opencode") + mergeMcpOrigins(managed.source, next, "devora") } - if (!Flag.MIMOCODE_DISABLE_CLAUDE_CODE_MCP) { + if (!Flag.DEVORA_DISABLE_CLAUDE_CODE_MCP) { yield* mergeClaudeMcp(path.join(Global.Path.home, ".claude.json")) yield* mergeClaudeMcp(path.join(ctx.directory, ".claude.json")) } @@ -886,8 +888,8 @@ export const layer = Layer.effect( }) } - if (Flag.MIMOCODE_PERMISSION) { - result.permission = mergeDeep(result.permission ?? {}, JSON.parse(Flag.MIMOCODE_PERMISSION)) + if (Flag.DEVORA_PERMISSION) { + result.permission = mergeDeep(result.permission ?? {}, JSON.parse(Flag.DEVORA_PERMISSION)) } if (result.tools) { @@ -909,10 +911,10 @@ export const layer = Layer.effect( result.share = "auto" } - if (Flag.MIMOCODE_DISABLE_AUTOCOMPACT) { + if (Flag.DEVORA_DISABLE_AUTOCOMPACT) { result.compaction = { ...result.compaction, auto: false } } - if (Flag.MIMOCODE_DISABLE_PRUNE) { + if (Flag.DEVORA_DISABLE_PRUNE) { result.compaction = { ...result.compaction, prune: false } } diff --git a/packages/opencode/src/config/console-state.ts b/packages/devora/src/config/console-state.ts similarity index 100% rename from packages/opencode/src/config/console-state.ts rename to packages/devora/src/config/console-state.ts diff --git a/packages/opencode/src/config/entry-name.ts b/packages/devora/src/config/entry-name.ts similarity index 100% rename from packages/opencode/src/config/entry-name.ts rename to packages/devora/src/config/entry-name.ts diff --git a/packages/opencode/src/config/error.ts b/packages/devora/src/config/error.ts similarity index 87% rename from packages/opencode/src/config/error.ts rename to packages/devora/src/config/error.ts index cf6a2285..2d6547b1 100644 --- a/packages/opencode/src/config/error.ts +++ b/packages/devora/src/config/error.ts @@ -1,7 +1,7 @@ export * as ConfigError from "./error" import z from "zod" -import { NamedError } from "@mimo-ai/shared/util/error" +import { NamedError } from "@devora-ai/shared/util/error" export const JsonError = NamedError.create( "ConfigJsonError", diff --git a/packages/opencode/src/config/formatter.ts b/packages/devora/src/config/formatter.ts similarity index 100% rename from packages/opencode/src/config/formatter.ts rename to packages/devora/src/config/formatter.ts diff --git a/packages/opencode/src/config/history.ts b/packages/devora/src/config/history.ts similarity index 100% rename from packages/opencode/src/config/history.ts rename to packages/devora/src/config/history.ts diff --git a/packages/opencode/src/config/index.ts b/packages/devora/src/config/index.ts similarity index 100% rename from packages/opencode/src/config/index.ts rename to packages/devora/src/config/index.ts diff --git a/packages/opencode/src/config/keybinds.ts b/packages/devora/src/config/keybinds.ts similarity index 100% rename from packages/opencode/src/config/keybinds.ts rename to packages/devora/src/config/keybinds.ts diff --git a/packages/opencode/src/config/layout.ts b/packages/devora/src/config/layout.ts similarity index 100% rename from packages/opencode/src/config/layout.ts rename to packages/devora/src/config/layout.ts diff --git a/packages/opencode/src/config/lsp.ts b/packages/devora/src/config/lsp.ts similarity index 100% rename from packages/opencode/src/config/lsp.ts rename to packages/devora/src/config/lsp.ts diff --git a/packages/opencode/src/config/managed.ts b/packages/devora/src/config/managed.ts similarity index 87% rename from packages/opencode/src/config/managed.ts rename to packages/devora/src/config/managed.ts index f850b830..5ba695dd 100644 --- a/packages/opencode/src/config/managed.ts +++ b/packages/devora/src/config/managed.ts @@ -8,9 +8,9 @@ import { warn } from "console" const log = Log.create({ service: "config" }) -const MANAGED_PLIST_DOMAIN = "ai.opencode.managed" +const MANAGED_PLIST_DOMAIN = "ai.devora.managed" -// Keys injected by macOS/MDM into the managed plist that are not OpenCode config +// Keys injected by macOS/MDM into the managed plist that are not Devora config const PLIST_META = new Set([ "PayloadDisplayName", "PayloadIdentifier", @@ -23,16 +23,16 @@ const PLIST_META = new Set([ function systemManagedConfigDir(): string { switch (process.platform) { case "darwin": - return "/Library/Application Support/opencode" + return "/Library/Application Support/devora" case "win32": - return path.join(process.env.ProgramData || "C:\\ProgramData", "opencode") + return path.join(process.env.ProgramData || "C:\\ProgramData", "devora") default: - return "/etc/opencode" + return "/etc/devora" } } export function managedConfigDir() { - return process.env.MIMOCODE_TEST_MANAGED_CONFIG_DIR || systemManagedConfigDir() + return process.env.DEVORA_TEST_MANAGED_CONFIG_DIR || systemManagedConfigDir() } export function parseManagedPlist(json: string): string { diff --git a/packages/opencode/src/config/markdown.ts b/packages/devora/src/config/markdown.ts similarity index 97% rename from packages/opencode/src/config/markdown.ts rename to packages/devora/src/config/markdown.ts index 5552dd95..da81af35 100644 --- a/packages/opencode/src/config/markdown.ts +++ b/packages/devora/src/config/markdown.ts @@ -1,4 +1,4 @@ -import { NamedError } from "@mimo-ai/shared/util/error" +import { NamedError } from "@devora-ai/shared/util/error" import matter from "gray-matter" import { z } from "zod" import { Filesystem } from "../util" diff --git a/packages/opencode/src/config/mcp.ts b/packages/devora/src/config/mcp.ts similarity index 99% rename from packages/opencode/src/config/mcp.ts rename to packages/devora/src/config/mcp.ts index 1a28bbc5..bb453589 100644 --- a/packages/opencode/src/config/mcp.ts +++ b/packages/devora/src/config/mcp.ts @@ -61,7 +61,7 @@ export const Info = Schema.Union([Local, Remote]) export type Info = Schema.Schema.Type export type Origin = { - type: "opencode" | "claude" + type: "devora" | "claude" source: string } diff --git a/packages/opencode/src/config/model-id.ts b/packages/devora/src/config/model-id.ts similarity index 100% rename from packages/opencode/src/config/model-id.ts rename to packages/devora/src/config/model-id.ts diff --git a/packages/opencode/src/config/parse.ts b/packages/devora/src/config/parse.ts similarity index 100% rename from packages/opencode/src/config/parse.ts rename to packages/devora/src/config/parse.ts diff --git a/packages/opencode/src/config/paths.ts b/packages/devora/src/config/paths.ts similarity index 84% rename from packages/opencode/src/config/paths.ts rename to packages/devora/src/config/paths.ts index d10736bd..4cd92397 100644 --- a/packages/opencode/src/config/paths.ts +++ b/packages/devora/src/config/paths.ts @@ -7,7 +7,7 @@ import { Global } from "@/global" import { unique } from "remeda" import { JsonError } from "./error" import * as Effect from "effect/Effect" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" export const files = Effect.fn("ConfigPaths.projectFiles")(function* ( name: string, @@ -26,19 +26,19 @@ export const directories = Effect.fn("ConfigPaths.directories")(function* (direc const afs = yield* AppFileSystem.Service return unique([ Global.Path.config, - ...(!Flag.MIMOCODE_DISABLE_PROJECT_CONFIG + ...(!Flag.DEVORA_DISABLE_PROJECT_CONFIG ? yield* afs.up({ - targets: [".mimocode"], + targets: [".devora"], start: directory, stop: worktree, }) : []), ...(yield* afs.up({ - targets: [".mimocode"], + targets: [".devora"], start: Global.Path.home, stop: Global.Path.home, })), - ...(Flag.MIMOCODE_CONFIG_DIR ? [Flag.MIMOCODE_CONFIG_DIR] : []), + ...(Flag.DEVORA_CONFIG_DIR ? [Flag.DEVORA_CONFIG_DIR] : []), ]) }) @@ -46,11 +46,11 @@ export const claudeCommandDirectories = Effect.fn("ConfigPaths.claudeCommandDire directory: string, worktree?: string, ) { - if (Flag.MIMOCODE_DISABLE_CLAUDE_CODE_COMMANDS) return [] + if (Flag.DEVORA_DISABLE_CLAUDE_CODE_COMMANDS) return [] const afs = yield* AppFileSystem.Service return unique([ path.join(Global.Path.home, ".claude"), - ...(!Flag.MIMOCODE_DISABLE_PROJECT_CONFIG + ...(!Flag.DEVORA_DISABLE_PROJECT_CONFIG ? yield* afs.up({ targets: [".claude"], start: directory, diff --git a/packages/opencode/src/config/permission.ts b/packages/devora/src/config/permission.ts similarity index 100% rename from packages/opencode/src/config/permission.ts rename to packages/devora/src/config/permission.ts diff --git a/packages/opencode/src/config/plugin.ts b/packages/devora/src/config/plugin.ts similarity index 98% rename from packages/opencode/src/config/plugin.ts rename to packages/devora/src/config/plugin.ts index 2529ff31..eb6dfc97 100644 --- a/packages/opencode/src/config/plugin.ts +++ b/packages/devora/src/config/plugin.ts @@ -1,4 +1,4 @@ -import { Glob } from "@mimo-ai/shared/util/glob" +import { Glob } from "@devora-ai/shared/util/glob" import { Schema } from "effect" import { pathToFileURL } from "url" import { isPathPluginSpec, parsePluginSpecifier, resolvePathPluginTarget } from "@/plugin/shared" diff --git a/packages/opencode/src/config/provider.ts b/packages/devora/src/config/provider.ts similarity index 100% rename from packages/opencode/src/config/provider.ts rename to packages/devora/src/config/provider.ts diff --git a/packages/opencode/src/config/server.ts b/packages/devora/src/config/server.ts similarity index 97% rename from packages/opencode/src/config/server.ts rename to packages/devora/src/config/server.ts index 969a7996..9dab5b97 100644 --- a/packages/opencode/src/config/server.ts +++ b/packages/devora/src/config/server.ts @@ -8,7 +8,7 @@ export class Server extends Schema.Class("ServerConfig")({ hostname: Schema.optional(Schema.String).annotate({ description: "Hostname to listen on" }), mdns: Schema.optional(Schema.Boolean).annotate({ description: "Enable mDNS service discovery" }), mdnsDomain: Schema.optional(Schema.String).annotate({ - description: "Custom domain name for mDNS service (default: opencode.local)", + description: "Custom domain name for mDNS service (default: devora.local)", }), cors: Schema.optional(Schema.mutable(Schema.Array(Schema.String))).annotate({ description: "Additional domains to allow for CORS", diff --git a/packages/opencode/src/config/skills.ts b/packages/devora/src/config/skills.ts similarity index 100% rename from packages/opencode/src/config/skills.ts rename to packages/devora/src/config/skills.ts diff --git a/packages/opencode/src/config/variable.ts b/packages/devora/src/config/variable.ts similarity index 100% rename from packages/opencode/src/config/variable.ts rename to packages/devora/src/config/variable.ts diff --git a/packages/opencode/src/control-plane/adaptors/index.ts b/packages/devora/src/control-plane/adaptors/index.ts similarity index 100% rename from packages/opencode/src/control-plane/adaptors/index.ts rename to packages/devora/src/control-plane/adaptors/index.ts diff --git a/packages/opencode/src/control-plane/adaptors/worktree.ts b/packages/devora/src/control-plane/adaptors/worktree.ts similarity index 100% rename from packages/opencode/src/control-plane/adaptors/worktree.ts rename to packages/devora/src/control-plane/adaptors/worktree.ts diff --git a/packages/opencode/src/control-plane/dev/debug-workspace-plugin.ts b/packages/devora/src/control-plane/dev/debug-workspace-plugin.ts similarity index 93% rename from packages/opencode/src/control-plane/dev/debug-workspace-plugin.ts rename to packages/devora/src/control-plane/dev/debug-workspace-plugin.ts index 29eb1439..148b3c42 100644 --- a/packages/opencode/src/control-plane/dev/debug-workspace-plugin.ts +++ b/packages/devora/src/control-plane/dev/debug-workspace-plugin.ts @@ -1,9 +1,9 @@ -import type { Plugin } from "@mimo-ai/plugin" +import type { Plugin } from "@devora-ai/plugin" import { rename, writeFile } from "node:fs/promises" import { randomInt } from "node:crypto" import { setTimeout as sleep } from "node:timers/promises" -const DEV_DATA_FILE = "/tmp/opencode-workspace-dev-data.json" +const DEV_DATA_FILE = "/tmp/devora-workspace-dev-data.json" const DEV_DATA_TEMP_FILE = `${DEV_DATA_FILE}.tmp` async function waitForHealth(port: number) { diff --git a/packages/opencode/src/control-plane/schema.ts b/packages/devora/src/control-plane/schema.ts similarity index 100% rename from packages/opencode/src/control-plane/schema.ts rename to packages/devora/src/control-plane/schema.ts diff --git a/packages/opencode/src/control-plane/sse.ts b/packages/devora/src/control-plane/sse.ts similarity index 100% rename from packages/opencode/src/control-plane/sse.ts rename to packages/devora/src/control-plane/sse.ts diff --git a/packages/opencode/src/control-plane/types.ts b/packages/devora/src/control-plane/types.ts similarity index 100% rename from packages/opencode/src/control-plane/types.ts rename to packages/devora/src/control-plane/types.ts diff --git a/packages/opencode/src/control-plane/util.ts b/packages/devora/src/control-plane/util.ts similarity index 100% rename from packages/opencode/src/control-plane/util.ts rename to packages/devora/src/control-plane/util.ts diff --git a/packages/opencode/src/control-plane/workspace-context.ts b/packages/devora/src/control-plane/workspace-context.ts similarity index 100% rename from packages/opencode/src/control-plane/workspace-context.ts rename to packages/devora/src/control-plane/workspace-context.ts diff --git a/packages/opencode/src/control-plane/workspace.sql.ts b/packages/devora/src/control-plane/workspace.sql.ts similarity index 100% rename from packages/opencode/src/control-plane/workspace.sql.ts rename to packages/devora/src/control-plane/workspace.sql.ts diff --git a/packages/opencode/src/control-plane/workspace.ts b/packages/devora/src/control-plane/workspace.ts similarity index 98% rename from packages/opencode/src/control-plane/workspace.ts rename to packages/devora/src/control-plane/workspace.ts index b4d99a2e..bfea0ab3 100644 --- a/packages/opencode/src/control-plane/workspace.ts +++ b/packages/devora/src/control-plane/workspace.ts @@ -12,7 +12,7 @@ import { Flag } from "@/flag/flag" import { Log } from "@/util" import { Filesystem } from "@/util" import { ProjectID } from "@/project/schema" -import { Slug } from "@mimo-ai/shared/util/slug" +import { Slug } from "@devora-ai/shared/util/slug" import { WorkspaceTable } from "./workspace.sql" import { getAdaptor } from "./adaptors" import { WorkspaceInfo } from "./types" @@ -112,9 +112,9 @@ export const create = fn(CreateInput, async (input) => { }) const env = { - MIMOCODE_AUTH_CONTENT: JSON.stringify(await AppRuntime.runPromise(Auth.Service.use((auth) => auth.all()))), - MIMOCODE_WORKSPACE_ID: config.id, - MIMOCODE_EXPERIMENTAL_WORKSPACES: "true", + DEVORA_AUTH_CONTENT: JSON.stringify(await AppRuntime.runPromise(Auth.Service.use((auth) => auth.all()))), + DEVORA_WORKSPACE_ID: config.id, + DEVORA_EXPERIMENTAL_WORKSPACES: "true", OTEL_EXPORTER_OTLP_HEADERS: process.env.OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_ENDPOINT: process.env.OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_RESOURCE_ATTRIBUTES: process.env.OTEL_RESOURCE_ATTRIBUTES, @@ -561,7 +561,7 @@ async function syncWorkspaceLoop(space: Info, signal: AbortSignal) { } async function startSync(space: Info) { - if (!Flag.MIMOCODE_EXPERIMENTAL_WORKSPACES) return + if (!Flag.DEVORA_EXPERIMENTAL_WORKSPACES) return const adaptor = await getAdaptor(space.projectID, space.type) const target = await adaptor.target(space) diff --git a/packages/opencode/src/effect/app-runtime.ts b/packages/devora/src/effect/app-runtime.ts similarity index 98% rename from packages/opencode/src/effect/app-runtime.ts rename to packages/devora/src/effect/app-runtime.ts index 143909a5..f7e8c8ba 100644 --- a/packages/opencode/src/effect/app-runtime.ts +++ b/packages/devora/src/effect/app-runtime.ts @@ -2,7 +2,7 @@ import { Layer, ManagedRuntime } from "effect" import { attach } from "./run-service" import * as Observability from "./observability" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" import { Bus } from "@/bus" import { Auth } from "@/auth" import { Account } from "@/account/account" diff --git a/packages/opencode/src/effect/bootstrap-runtime.ts b/packages/devora/src/effect/bootstrap-runtime.ts similarity index 100% rename from packages/opencode/src/effect/bootstrap-runtime.ts rename to packages/devora/src/effect/bootstrap-runtime.ts diff --git a/packages/opencode/src/effect/bridge.ts b/packages/devora/src/effect/bridge.ts similarity index 100% rename from packages/opencode/src/effect/bridge.ts rename to packages/devora/src/effect/bridge.ts diff --git a/packages/opencode/src/effect/cross-spawn-spawner.ts b/packages/devora/src/effect/cross-spawn-spawner.ts similarity index 100% rename from packages/opencode/src/effect/cross-spawn-spawner.ts rename to packages/devora/src/effect/cross-spawn-spawner.ts diff --git a/packages/opencode/src/effect/index.ts b/packages/devora/src/effect/index.ts similarity index 100% rename from packages/opencode/src/effect/index.ts rename to packages/devora/src/effect/index.ts diff --git a/packages/opencode/src/effect/instance-ref.ts b/packages/devora/src/effect/instance-ref.ts similarity index 82% rename from packages/opencode/src/effect/instance-ref.ts rename to packages/devora/src/effect/instance-ref.ts index effc560c..1d8fafbd 100644 --- a/packages/opencode/src/effect/instance-ref.ts +++ b/packages/devora/src/effect/instance-ref.ts @@ -2,10 +2,10 @@ import { Context } from "effect" import type { InstanceContext } from "@/project/instance" import type { WorkspaceID } from "@/control-plane/schema" -export const InstanceRef = Context.Reference("~opencode/InstanceRef", { +export const InstanceRef = Context.Reference("~devora/InstanceRef", { defaultValue: () => undefined, }) -export const WorkspaceRef = Context.Reference("~opencode/WorkspaceRef", { +export const WorkspaceRef = Context.Reference("~devora/WorkspaceRef", { defaultValue: () => undefined, }) diff --git a/packages/opencode/src/effect/instance-registry.ts b/packages/devora/src/effect/instance-registry.ts similarity index 100% rename from packages/opencode/src/effect/instance-registry.ts rename to packages/devora/src/effect/instance-registry.ts diff --git a/packages/opencode/src/effect/instance-state.ts b/packages/devora/src/effect/instance-state.ts similarity index 98% rename from packages/opencode/src/effect/instance-state.ts rename to packages/devora/src/effect/instance-state.ts index 7095657f..a104566b 100644 --- a/packages/opencode/src/effect/instance-state.ts +++ b/packages/devora/src/effect/instance-state.ts @@ -6,7 +6,7 @@ import { InstanceRef, WorkspaceRef } from "./instance-ref" import { registerDisposer } from "./instance-registry" import { WorkspaceContext } from "@/control-plane/workspace-context" -const TypeId = "~opencode/InstanceState" +const TypeId = "~devora/InstanceState" export interface InstanceState { readonly [TypeId]: typeof TypeId diff --git a/packages/opencode/src/effect/logger.ts b/packages/devora/src/effect/logger.ts similarity index 100% rename from packages/opencode/src/effect/logger.ts rename to packages/devora/src/effect/logger.ts diff --git a/packages/opencode/src/effect/memo-map.ts b/packages/devora/src/effect/memo-map.ts similarity index 100% rename from packages/opencode/src/effect/memo-map.ts rename to packages/devora/src/effect/memo-map.ts diff --git a/packages/opencode/src/effect/observability.ts b/packages/devora/src/effect/observability.ts similarity index 93% rename from packages/opencode/src/effect/observability.ts rename to packages/devora/src/effect/observability.ts index d31c6a6f..cd4b15ba 100644 --- a/packages/opencode/src/effect/observability.ts +++ b/packages/devora/src/effect/observability.ts @@ -4,7 +4,7 @@ import { OtlpLogger, OtlpSerialization } from "effect/unstable/observability" import * as EffectLogger from "./logger" import { Flag } from "@/flag/flag" import { InstallationChannel, InstallationVersion } from "@/installation/version" -import { ensureProcessMetadata } from "@/util/mimo-process" +import { ensureProcessMetadata } from "@/util/devora-process" const base = Flag.OTEL_EXPORTER_OTLP_ENDPOINT export const enabled = !!base @@ -40,14 +40,14 @@ export function resource(): { serviceName: string; serviceVersion: string; attri })() return { - serviceName: "opencode", + serviceName: "devora", serviceVersion: InstallationVersion, attributes: { ...attributes, "deployment.environment.name": InstallationChannel, - "opencode.client": Flag.MIMOCODE_CLIENT, - "opencode.process_role": processMetadata.processRole, - "opencode.run_id": processMetadata.runID, + "devora.client": Flag.DEVORA_CLIENT, + "devora.process_role": processMetadata.processRole, + "devora.run_id": processMetadata.runID, "service.instance.id": processID, }, } diff --git a/packages/opencode/src/effect/run-service.ts b/packages/devora/src/effect/run-service.ts similarity index 100% rename from packages/opencode/src/effect/run-service.ts rename to packages/devora/src/effect/run-service.ts diff --git a/packages/opencode/src/effect/runner.ts b/packages/devora/src/effect/runner.ts similarity index 100% rename from packages/opencode/src/effect/runner.ts rename to packages/devora/src/effect/runner.ts diff --git a/packages/opencode/src/effect/runtime.ts b/packages/devora/src/effect/runtime.ts similarity index 100% rename from packages/opencode/src/effect/runtime.ts rename to packages/devora/src/effect/runtime.ts diff --git a/packages/opencode/src/env/index.ts b/packages/devora/src/env/index.ts similarity index 98% rename from packages/opencode/src/env/index.ts rename to packages/devora/src/env/index.ts index a53d96de..d89a312a 100644 --- a/packages/opencode/src/env/index.ts +++ b/packages/devora/src/env/index.ts @@ -10,7 +10,7 @@ export interface Interface { readonly remove: (key: string) => Effect.Effect } -export class Service extends Context.Service()("@opencode/Env") {} +export class Service extends Context.Service()("@devora/Env") {} export const layer = Layer.effect( Service, diff --git a/packages/opencode/src/file/ignore.ts b/packages/devora/src/file/ignore.ts similarity index 96% rename from packages/opencode/src/file/ignore.ts rename to packages/devora/src/file/ignore.ts index a8f4ba55..5f35feb3 100644 --- a/packages/opencode/src/file/ignore.ts +++ b/packages/devora/src/file/ignore.ts @@ -1,4 +1,4 @@ -import { Glob } from "@mimo-ai/shared/util/glob" +import { Glob } from "@devora-ai/shared/util/glob" const FOLDERS = new Set([ "node_modules", diff --git a/packages/opencode/src/file/index.ts b/packages/devora/src/file/index.ts similarity index 99% rename from packages/opencode/src/file/index.ts rename to packages/devora/src/file/index.ts index 469bf043..26f75357 100644 --- a/packages/opencode/src/file/index.ts +++ b/packages/devora/src/file/index.ts @@ -1,7 +1,7 @@ import { BusEvent } from "@/bus/bus-event" import { InstanceState } from "@/effect" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" import { Git } from "@/git" import { Effect, Layer, Context, Scope } from "effect" import * as Stream from "effect/Stream" @@ -337,7 +337,7 @@ export interface Interface { }) => Effect.Effect } -export class Service extends Context.Service()("@opencode/File") {} +export class Service extends Context.Service()("@devora/File") {} export const layer = Layer.effect( Service, diff --git a/packages/opencode/src/file/protected.ts b/packages/devora/src/file/protected.ts similarity index 100% rename from packages/opencode/src/file/protected.ts rename to packages/devora/src/file/protected.ts diff --git a/packages/opencode/src/file/ripgrep.ts b/packages/devora/src/file/ripgrep.ts similarity index 98% rename from packages/opencode/src/file/ripgrep.ts rename to packages/devora/src/file/ripgrep.ts index 2a22a988..fa2c51a8 100644 --- a/packages/opencode/src/file/ripgrep.ts +++ b/packages/devora/src/file/ripgrep.ts @@ -1,6 +1,6 @@ import path from "path" import z from "zod" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" import { Cause, Context, Effect, Fiber, Layer, Queue, Stream } from "effect" import type { PlatformError } from "effect/PlatformError" import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http" @@ -10,7 +10,7 @@ import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner" import { Global } from "@/global" import { Log } from "@/util" -import { sanitizedProcessEnv } from "@/util/mimo-process" +import { sanitizedProcessEnv } from "@/util/devora-process" import { which } from "@/util/which" const log = Log.create({ service: "ripgrep" }) @@ -140,7 +140,7 @@ export interface Interface { readonly search: (input: SearchInput) => Effect.Effect } -export class Service extends Context.Service()("@opencode/Ripgrep") {} +export class Service extends Context.Service()("@devora/Ripgrep") {} function env() { const env = sanitizedProcessEnv() @@ -440,7 +440,7 @@ export const layer: Layer.Layer { try { const binding = require( - `@parcel/watcher-${process.platform}-${process.arch}${process.platform === "linux" ? `-${OPENCODE_LIBC || "glibc"}` : ""}`, + `@parcel/watcher-${process.platform}-${process.arch}${process.platform === "linux" ? `-${DEVORA_LIBC || "glibc"}` : ""}`, ) return createWrapper(binding) as typeof import("@parcel/watcher") } catch (error) { @@ -63,7 +63,7 @@ export interface Interface { readonly init: () => Effect.Effect } -export class Service extends Context.Service()("@opencode/FileWatcher") {} +export class Service extends Context.Service()("@devora/FileWatcher") {} export const layer = Layer.effect( Service, @@ -74,7 +74,7 @@ export const layer = Layer.effect( const state = yield* InstanceState.make( Effect.fn("FileWatcher.state")( function* () { - if (yield* Flag.MIMOCODE_EXPERIMENTAL_DISABLE_FILEWATCHER) return + if (yield* Flag.DEVORA_EXPERIMENTAL_DISABLE_FILEWATCHER) return log.info("init", { directory: Instance.directory }) @@ -121,7 +121,7 @@ export const layer = Layer.effect( const cfg = yield* config.get() const cfgIgnores = cfg.watcher?.ignore ?? [] - if (yield* Flag.MIMOCODE_EXPERIMENTAL_FILEWATCHER) { + if (yield* Flag.DEVORA_EXPERIMENTAL_FILEWATCHER) { yield* subscribe(Instance.directory, [ ...FileIgnore.PATTERNS, ...cfgIgnores, diff --git a/packages/devora/src/flag/flag.ts b/packages/devora/src/flag/flag.ts new file mode 100644 index 00000000..6fcfddd0 --- /dev/null +++ b/packages/devora/src/flag/flag.ts @@ -0,0 +1,164 @@ +import { Config } from "effect" + +function truthy(key: string) { + const value = process.env[key]?.toLowerCase() + return value === "true" || value === "1" +} + +function falsy(key: string) { + const value = process.env[key]?.toLowerCase() + return value === "false" || value === "0" +} + +function number(key: string) { + const value = process.env[key] + if (!value) return undefined + const parsed = Number(value) + return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined +} + +const DEVORA_EXPERIMENTAL = truthy("DEVORA_EXPERIMENTAL") + +// Defaults to false. When enabled, devora runs in pure-devora mode: +// — does NOT inherit Claude Code's settings (CLAUDE.md, ~/.claude/skills, etc.) +// — does NOT pick up provider API keys from environment variables +// — falls back to the devora-auto model as the default +// Set DEVORA_DEVORA_ONLY=true to disable .claude inheritance and env-based +// provider auto-detection. +const DEVORA_DEVORA_ONLY = truthy("DEVORA_DEVORA_ONLY") +const DEVORA_DISABLE_CLAUDE_CODE_ENV = truthy("DEVORA_DISABLE_CLAUDE_CODE") +const DEVORA_DISABLE_CLAUDE_CODE = DEVORA_DEVORA_ONLY || DEVORA_DISABLE_CLAUDE_CODE_ENV + +const DEVORA_DISABLE_EXTERNAL_SKILLS = truthy("DEVORA_DISABLE_EXTERNAL_SKILLS") +const DEVORA_DISABLE_CLAUDE_CODE_SKILLS = + DEVORA_DISABLE_EXTERNAL_SKILLS || DEVORA_DISABLE_CLAUDE_CODE || truthy("DEVORA_DISABLE_CLAUDE_CODE_SKILLS") +const copy = process.env["DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"] + +export const Flag = { + OTEL_EXPORTER_OTLP_ENDPOINT: process.env["OTEL_EXPORTER_OTLP_ENDPOINT"], + OTEL_EXPORTER_OTLP_HEADERS: process.env["OTEL_EXPORTER_OTLP_HEADERS"], + + DEVORA_AUTO_SHARE: truthy("DEVORA_AUTO_SHARE"), + DEVORA_AUTO_HEAP_SNAPSHOT: truthy("DEVORA_AUTO_HEAP_SNAPSHOT"), + DEVORA_GIT_BASH_PATH: process.env["DEVORA_GIT_BASH_PATH"], + DEVORA_CONFIG: process.env["DEVORA_CONFIG"], + DEVORA_CONFIG_CONTENT: process.env["DEVORA_CONFIG_CONTENT"], + + DEVORA_DISABLE_AUTOUPDATE: truthy("DEVORA_DISABLE_AUTOUPDATE"), + + // Defaults to true (analytics enabled). Set DEVORA_ENABLE_ANALYSIS=false + // to opt out of POSTing model_call/tool_call/agent_request metrics. + DEVORA_ENABLE_ANALYSIS: !falsy("DEVORA_ENABLE_ANALYSIS"), + DEVORA_ALWAYS_NOTIFY_UPDATE: truthy("DEVORA_ALWAYS_NOTIFY_UPDATE"), + DEVORA_DISABLE_PRUNE: truthy("DEVORA_DISABLE_PRUNE"), + DEVORA_DISABLE_TERMINAL_TITLE: truthy("DEVORA_DISABLE_TERMINAL_TITLE"), + DEVORA_SHOW_TTFD: truthy("DEVORA_SHOW_TTFD"), + DEVORA_PERMISSION: process.env["DEVORA_PERMISSION"], + DEVORA_DISABLE_DEFAULT_PLUGINS: truthy("DEVORA_DISABLE_DEFAULT_PLUGINS"), + DEVORA_DISABLE_LSP_DOWNLOAD: truthy("DEVORA_DISABLE_LSP_DOWNLOAD"), + DEVORA_ENABLE_EXPERIMENTAL_MODELS: truthy("DEVORA_ENABLE_EXPERIMENTAL_MODELS"), + DEVORA_DISABLE_AUTOCOMPACT: truthy("DEVORA_DISABLE_AUTOCOMPACT"), + DEVORA_DISABLE_MODELS_FETCH: truthy("DEVORA_DISABLE_MODELS_FETCH"), + DEVORA_DISABLE_MOUSE: truthy("DEVORA_DISABLE_MOUSE"), + DEVORA_OUTPUT_LENGTH_CONTINUATION_LIMIT: number("DEVORA_OUTPUT_LENGTH_CONTINUATION_LIMIT") ?? 3, + DEVORA_INVALID_OUTPUT_CONTINUATION_LIMIT: number("DEVORA_INVALID_OUTPUT_CONTINUATION_LIMIT") ?? 2, + + // Caps applied to image attachments before a prompt is sent. Both default to + // undefined (no limit). DEVORA_MAX_PROMPT_IMAGES bounds how many images may + // be sent per request (oldest excess images are dropped); DEVORA_MAX_PROMPT_IMAGE_SIZE + // bounds the decoded byte size of a single image. Values must be positive integers. + DEVORA_MAX_PROMPT_IMAGES: number("DEVORA_MAX_PROMPT_IMAGES"), + DEVORA_MAX_PROMPT_IMAGE_SIZE: number("DEVORA_MAX_PROMPT_IMAGE_SIZE"), + DEVORA_DEVORA_ONLY, + DEVORA_DISABLE_PROVIDER_ENV: DEVORA_DEVORA_ONLY || truthy("DEVORA_DISABLE_PROVIDER_ENV"), + DEVORA_DISABLE_CLAUDE_CODE, + get DEVORA_DISABLE_CLAUDE_CODE_MCP() { + // MCP compatibility stays on in devora-only mode so users can reuse Claude Code + // MCP servers without inheriting prompts, skills, or provider env keys. + return DEVORA_DISABLE_CLAUDE_CODE_ENV || truthy("DEVORA_DISABLE_CLAUDE_CODE_MCP") + }, + DEVORA_DISABLE_CLAUDE_CODE_PROMPT: DEVORA_DISABLE_CLAUDE_CODE || truthy("DEVORA_DISABLE_CLAUDE_CODE_PROMPT"), + // Defaults to false (enabled): markdown commands under ~/.claude/commands and + // {project}/.claude/commands load as slash commands. Independent of the + // devora-only master switch. Set DEVORA_DISABLE_CLAUDE_CODE_COMMANDS=true to disable. + DEVORA_DISABLE_CLAUDE_CODE_COMMANDS: truthy("DEVORA_DISABLE_CLAUDE_CODE_COMMANDS"), + DEVORA_DISABLE_CLAUDE_CODE_SKILLS, + DEVORA_DISABLE_EXTERNAL_SKILLS, + DEVORA_DISABLE_CODEX_SKILLS: DEVORA_DISABLE_EXTERNAL_SKILLS || truthy("DEVORA_DISABLE_CODEX_SKILLS"), + DEVORA_DISABLE_DEVORA_SKILLS: DEVORA_DISABLE_EXTERNAL_SKILLS || truthy("DEVORA_DISABLE_DEVORA_SKILLS"), + DEVORA_FAKE_VCS: process.env["DEVORA_FAKE_VCS"], + + // When enabled, skips all git subprocess calls during project discovery + // (which git, rev-parse --git-common-dir, rev-parse --show-toplevel) and + // branch detection. The project is treated as a non-git directory rooted at + // the working directory. Use to avoid touching git in restricted/sandboxed + // environments or where git startup probing is undesirable. + DEVORA_DISABLE_GIT: truthy("DEVORA_DISABLE_GIT"), + DEVORA_SERVER_PASSWORD: process.env["DEVORA_SERVER_PASSWORD"], + DEVORA_SERVER_USERNAME: process.env["DEVORA_SERVER_USERNAME"], + DEVORA_ENABLE_QUESTION_TOOL: truthy("DEVORA_ENABLE_QUESTION_TOOL"), + + // Experimental + DEVORA_EXPERIMENTAL, + DEVORA_EXPERIMENTAL_FILEWATCHER: Config.boolean("DEVORA_EXPERIMENTAL_FILEWATCHER").pipe( + Config.withDefault(false), + ), + DEVORA_EXPERIMENTAL_DISABLE_FILEWATCHER: Config.boolean("DEVORA_EXPERIMENTAL_DISABLE_FILEWATCHER").pipe( + Config.withDefault(false), + ), + DEVORA_EXPERIMENTAL_ICON_DISCOVERY: DEVORA_EXPERIMENTAL || truthy("DEVORA_EXPERIMENTAL_ICON_DISCOVERY"), + DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT: + copy === undefined ? process.platform === "win32" : truthy("DEVORA_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"), + DEVORA_ENABLE_EXA: truthy("DEVORA_ENABLE_EXA") || DEVORA_EXPERIMENTAL || truthy("DEVORA_EXPERIMENTAL_EXA"), + DEVORA_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS: number("DEVORA_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS"), + DEVORA_EXPERIMENTAL_OUTPUT_TOKEN_MAX: number("DEVORA_EXPERIMENTAL_OUTPUT_TOKEN_MAX"), + DEVORA_EXPERIMENTAL_OXFMT: DEVORA_EXPERIMENTAL || truthy("DEVORA_EXPERIMENTAL_OXFMT"), + DEVORA_EXPERIMENTAL_LSP_TY: truthy("DEVORA_EXPERIMENTAL_LSP_TY"), + DEVORA_EXPERIMENTAL_LSP_TOOL: DEVORA_EXPERIMENTAL || truthy("DEVORA_EXPERIMENTAL_LSP_TOOL"), + DEVORA_EXPERIMENTAL_WORKFLOW_TOOL: DEVORA_EXPERIMENTAL || truthy("DEVORA_EXPERIMENTAL_WORKFLOW_TOOL"), + DEVORA_EXPERIMENTAL_MARKDOWN: !falsy("DEVORA_EXPERIMENTAL_MARKDOWN"), + DEVORA_MODELS_URL: process.env["DEVORA_MODELS_URL"], + DEVORA_MODELS_PATH: process.env["DEVORA_MODELS_PATH"], + DEVORA_DISABLE_EMBEDDED_WEB_UI: truthy("DEVORA_DISABLE_EMBEDDED_WEB_UI"), + DEVORA_DB: process.env["DEVORA_DB"], + + // Defaults to true — all channels share a single devora.db. The per-channel + // DB isolation (devora-{channel}.db) is unnecessary for devora since we + // don't ship multiple release channels yet. Use DEVORA_HOME to isolate dev + // environments instead. Set DEVORA_DISABLE_CHANNEL_DB=false to restore + // per-channel isolation. + DEVORA_DISABLE_CHANNEL_DB: !falsy("DEVORA_DISABLE_CHANNEL_DB"), + DEVORA_SKIP_MIGRATIONS: truthy("DEVORA_SKIP_MIGRATIONS"), + DEVORA_STRICT_CONFIG_DEPS: truthy("DEVORA_STRICT_CONFIG_DEPS"), + + DEVORA_WORKSPACE_ID: process.env["DEVORA_WORKSPACE_ID"], + DEVORA_EXPERIMENTAL_HTTPAPI: truthy("DEVORA_EXPERIMENTAL_HTTPAPI"), + DEVORA_EXPERIMENTAL_WORKSPACES: DEVORA_EXPERIMENTAL || truthy("DEVORA_EXPERIMENTAL_WORKSPACES"), + + // Evaluated at access time (not module load) because tests, the CLI, and + // external tooling set these env vars at runtime. + get DEVORA_DISABLE_COMPOSE_SKILLS() { + return truthy("DEVORA_DISABLE_COMPOSE_SKILLS") + }, + get DEVORA_DISABLE_PROJECT_CONFIG() { + return truthy("DEVORA_DISABLE_PROJECT_CONFIG") + }, + get DEVORA_TUI_CONFIG() { + return process.env["DEVORA_TUI_CONFIG"] + }, + get DEVORA_CONFIG_DIR() { + return process.env["DEVORA_CONFIG_DIR"] + }, + get DEVORA_HOME() { + return process.env["DEVORA_HOME"] + }, + get DEVORA_PURE() { + return truthy("DEVORA_PURE") + }, + get DEVORA_PLUGIN_META_FILE() { + return process.env["DEVORA_PLUGIN_META_FILE"] + }, + get DEVORA_CLIENT() { + return process.env["DEVORA_CLIENT"] ?? "cli" + }, +} diff --git a/packages/opencode/src/format/formatter.ts b/packages/devora/src/format/formatter.ts similarity index 99% rename from packages/opencode/src/format/formatter.ts rename to packages/devora/src/format/formatter.ts index 363246d9..bbd98eec 100644 --- a/packages/opencode/src/format/formatter.ts +++ b/packages/devora/src/format/formatter.ts @@ -90,7 +90,7 @@ export const oxfmt: Info = { }, extensions: [".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx", ".mts", ".cts"], async enabled(context) { - if (!Flag.MIMOCODE_EXPERIMENTAL_OXFMT) return false + if (!Flag.DEVORA_EXPERIMENTAL_OXFMT) return false const items = await Filesystem.findUp("package.json", context.directory, context.worktree) for (const item of items) { const json = await Filesystem.readJson<{ diff --git a/packages/opencode/src/format/index.ts b/packages/devora/src/format/index.ts similarity index 99% rename from packages/opencode/src/format/index.ts rename to packages/devora/src/format/index.ts index 85934ce9..4f343c2d 100644 --- a/packages/opencode/src/format/index.ts +++ b/packages/devora/src/format/index.ts @@ -28,7 +28,7 @@ export interface Interface { readonly file: (filepath: string) => Effect.Effect } -export class Service extends Context.Service()("@opencode/Format") {} +export class Service extends Context.Service()("@devora/Format") {} export const layer = Layer.effect( Service, diff --git a/packages/opencode/src/git/index.ts b/packages/devora/src/git/index.ts similarity index 99% rename from packages/opencode/src/git/index.ts rename to packages/devora/src/git/index.ts index 719b5607..7949b030 100644 --- a/packages/opencode/src/git/index.ts +++ b/packages/devora/src/git/index.ts @@ -78,7 +78,7 @@ const kind = (code: string): Kind => { return "modified" } -export class Service extends Context.Service()("@opencode/Git") {} +export class Service extends Context.Service()("@devora/Git") {} export const layer = Layer.effect( Service, diff --git a/packages/opencode/src/global/index.ts b/packages/devora/src/global/index.ts similarity index 88% rename from packages/opencode/src/global/index.ts rename to packages/devora/src/global/index.ts index 10a6772e..43ea5534 100644 --- a/packages/opencode/src/global/index.ts +++ b/packages/devora/src/global/index.ts @@ -2,10 +2,10 @@ import fs from "fs/promises" import path from "path" import os from "os" import { Filesystem } from "../util" -import { Flock } from "@mimo-ai/shared/util/flock" -import { resolveMimocodeHome } from "@mimo-ai/shared/global" +import { Flock } from "@devora-ai/shared/util/flock" +import { resolveDevoraHome } from "@devora-ai/shared/global" -const { data, cache, config, state } = resolveMimocodeHome() +const { data, cache, config, state } = resolveDevoraHome() export const Path = { // HOME/USERPROFILE read directly because Bun caches os.homedir() at startup. diff --git a/packages/opencode/src/history/backfill.ts b/packages/devora/src/history/backfill.ts similarity index 99% rename from packages/opencode/src/history/backfill.ts rename to packages/devora/src/history/backfill.ts index f7314ece..fc76df07 100644 --- a/packages/opencode/src/history/backfill.ts +++ b/packages/devora/src/history/backfill.ts @@ -138,7 +138,7 @@ export interface Interface { readonly init: () => Effect.Effect } -export class Service extends Context.Service()("@opencode/History.Backfill") {} +export class Service extends Context.Service()("@devora/History.Backfill") {} export const layer: Layer.Layer = Layer.effect( Service, diff --git a/packages/opencode/src/history/extract.ts b/packages/devora/src/history/extract.ts similarity index 100% rename from packages/opencode/src/history/extract.ts rename to packages/devora/src/history/extract.ts diff --git a/packages/opencode/src/history/fts-query.ts b/packages/devora/src/history/fts-query.ts similarity index 100% rename from packages/opencode/src/history/fts-query.ts rename to packages/devora/src/history/fts-query.ts diff --git a/packages/opencode/src/history/fts.sql.ts b/packages/devora/src/history/fts.sql.ts similarity index 100% rename from packages/opencode/src/history/fts.sql.ts rename to packages/devora/src/history/fts.sql.ts diff --git a/packages/opencode/src/history/index.ts b/packages/devora/src/history/index.ts similarity index 85% rename from packages/opencode/src/history/index.ts rename to packages/devora/src/history/index.ts index 27d898ef..99f1050a 100644 --- a/packages/opencode/src/history/index.ts +++ b/packages/devora/src/history/index.ts @@ -3,7 +3,7 @@ // `History.defaultLayer` provides three services: History (search/around), // HistoryWriter (Bus subscriber), and HistoryBackfill (startup scan). // HistoryWriter and HistoryBackfill must be activated by calling `init()` at -// bootstrap time — see `packages/opencode/src/project/bootstrap.ts`. Layer-merge +// bootstrap time — see `packages/devora/src/project/bootstrap.ts`. Layer-merge // alone does NOT start them (mirrors the ShareNext / Vcs / FileWatcher pattern). export * as History from "./service" export { Service as WriterService } from "./writer" diff --git a/packages/opencode/src/history/resolve.ts b/packages/devora/src/history/resolve.ts similarity index 100% rename from packages/opencode/src/history/resolve.ts rename to packages/devora/src/history/resolve.ts diff --git a/packages/opencode/src/history/service.ts b/packages/devora/src/history/service.ts similarity index 99% rename from packages/opencode/src/history/service.ts rename to packages/devora/src/history/service.ts index 3be40cb7..4906b757 100644 --- a/packages/opencode/src/history/service.ts +++ b/packages/devora/src/history/service.ts @@ -57,7 +57,7 @@ export interface Interface { }) => Effect.Effect<{ session_id: string; messages: MessageContext[] }> } -export class Service extends Context.Service()("@opencode/History") {} +export class Service extends Context.Service()("@devora/History") {} const HARD_CAP = 50 diff --git a/packages/opencode/src/history/writer.ts b/packages/devora/src/history/writer.ts similarity index 99% rename from packages/opencode/src/history/writer.ts rename to packages/devora/src/history/writer.ts index 149329b8..ff826d06 100644 --- a/packages/opencode/src/history/writer.ts +++ b/packages/devora/src/history/writer.ts @@ -19,7 +19,7 @@ export interface Interface { readonly init: () => Effect.Effect } -export class Service extends Context.Service()("@opencode/History.Writer") {} +export class Service extends Context.Service()("@devora/History.Writer") {} export const layer: Layer.Layer = Layer.effect( Service, diff --git a/packages/opencode/src/id/id.ts b/packages/devora/src/id/id.ts similarity index 100% rename from packages/opencode/src/id/id.ts rename to packages/devora/src/id/id.ts diff --git a/packages/opencode/src/ide/index.ts b/packages/devora/src/ide/index.ts similarity index 90% rename from packages/opencode/src/ide/index.ts rename to packages/devora/src/ide/index.ts index a4ca4807..7e19b0ee 100644 --- a/packages/opencode/src/ide/index.ts +++ b/packages/devora/src/ide/index.ts @@ -1,6 +1,6 @@ import { BusEvent } from "@/bus/bus-event" import z from "zod" -import { NamedError } from "@mimo-ai/shared/util/error" +import { NamedError } from "@devora-ai/shared/util/error" import { Log } from "../util" import { Process } from "@/util" @@ -43,14 +43,14 @@ export function ide() { } export function alreadyInstalled() { - return process.env["OPENCODE_CALLER"] === "vscode" || process.env["OPENCODE_CALLER"] === "vscode-insiders" + return process.env["DEVORA_CALLER"] === "vscode" || process.env["DEVORA_CALLER"] === "vscode-insiders" } export async function install(ide: (typeof SUPPORTED_IDES)[number]["name"]) { const cmd = SUPPORTED_IDES.find((i) => i.name === ide)?.cmd if (!cmd) throw new Error(`Unknown IDE: ${ide}`) - const p = await Process.run([cmd, "--install-extension", "sst-dev.opencode"], { + const p = await Process.run([cmd, "--install-extension", "sst-dev.devora"], { nothrow: true, }) const stdout = p.stdout.toString() diff --git a/packages/opencode/src/inbox/inbox-ref.ts b/packages/devora/src/inbox/inbox-ref.ts similarity index 100% rename from packages/opencode/src/inbox/inbox-ref.ts rename to packages/devora/src/inbox/inbox-ref.ts diff --git a/packages/opencode/src/inbox/inbox.sql.ts b/packages/devora/src/inbox/inbox.sql.ts similarity index 100% rename from packages/opencode/src/inbox/inbox.sql.ts rename to packages/devora/src/inbox/inbox.sql.ts diff --git a/packages/opencode/src/inbox/inbox.ts b/packages/devora/src/inbox/inbox.ts similarity index 99% rename from packages/opencode/src/inbox/inbox.ts rename to packages/devora/src/inbox/inbox.ts index 1e1ab750..7e268969 100644 --- a/packages/opencode/src/inbox/inbox.ts +++ b/packages/devora/src/inbox/inbox.ts @@ -50,7 +50,7 @@ export interface Interface { readonly drain: (sessionID: SessionID, actorID: string) => Effect.Effect } -export class Service extends Context.Service()("@opencode/Inbox") {} +export class Service extends Context.Service()("@devora/Inbox") {} export const layer: Layer.Layer< Service, diff --git a/packages/opencode/src/inbox/index.ts b/packages/devora/src/inbox/index.ts similarity index 100% rename from packages/opencode/src/inbox/index.ts rename to packages/devora/src/inbox/index.ts diff --git a/packages/opencode/src/inbox/render.ts b/packages/devora/src/inbox/render.ts similarity index 100% rename from packages/opencode/src/inbox/render.ts rename to packages/devora/src/inbox/render.ts diff --git a/packages/opencode/src/index.ts b/packages/devora/src/index.ts similarity index 93% rename from packages/opencode/src/index.ts rename to packages/devora/src/index.ts index 4d183d01..90998689 100644 --- a/packages/opencode/src/index.ts +++ b/packages/devora/src/index.ts @@ -12,7 +12,7 @@ import { ModelsCommand } from "./cli/cmd/models" import { UI } from "./cli/ui" import { Installation } from "./installation" import { InstallationVersion } from "./installation/version" -import { NamedError } from "@mimo-ai/shared/util/error" +import { NamedError } from "@devora-ai/shared/util/error" import { FormatError } from "./cli/error" import { ServeCommand } from "./cli/cmd/serve" import { Filesystem } from "./util" @@ -39,7 +39,7 @@ import { errorMessage } from "./util/error" import { PluginCommand } from "./cli/cmd/plug" import { Heap } from "./cli/heap" import { drizzle } from "drizzle-orm/bun-sqlite" -import { ensureProcessMetadata } from "./util/mimo-process" +import { ensureProcessMetadata } from "./util/devora-process" const processMetadata = ensureProcessMetadata("main") @@ -59,7 +59,7 @@ const args = hideBin(process.argv) function show(out: string) { const text = out.trimStart() - if (!text.startsWith("mimo ")) { + if (!text.startsWith("devora ")) { process.stderr.write(UI.logo() + EOL + EOL) process.stderr.write(text) return @@ -69,7 +69,7 @@ function show(out: string) { const cli = yargs(args) .parserConfiguration({ "populate--": true }) - .scriptName("mimo") + .scriptName("devora") .wrap(100) .help("help", "show help") .alias("help", "h") @@ -90,7 +90,7 @@ const cli = yargs(args) }) .middleware(async (opts) => { if (opts.pure) { - process.env.MIMOCODE_PURE = "1" + process.env.DEVORA_PURE = "1" } await Log.init({ @@ -106,17 +106,17 @@ const cli = yargs(args) Heap.start() process.env.AGENT = "1" - process.env.MIMOCODE = "1" - process.env.MIMOCODE_PID = String(process.pid) + process.env.DEVORA = "1" + process.env.DEVORA_PID = String(process.pid) - Log.Default.info("mimocode", { + Log.Default.info("devora", { version: InstallationVersion, args: process.argv.slice(2), process_role: processMetadata.processRole, run_id: processMetadata.runID, }) - const marker = path.join(Global.Path.data, "mimocode.db") + const marker = path.join(Global.Path.data, "devora.db") if (!(await Filesystem.exists(marker))) { const tty = process.stderr.isTTY process.stderr.write("Performing one time database migration, may take a few minutes..." + EOL) @@ -156,8 +156,8 @@ const cli = yargs(args) // Idempotently import Claude Code sessions into SQLite. Runs once per process // tree (the env guard is inherited by spawned children) and is best-effort: // a failure here must never block command startup. - if (!process.env.MIMOCODE_DISABLE_CLAUDE_IMPORT && !process.env.MIMOCODE_CLAUDE_IMPORTED) { - process.env.MIMOCODE_CLAUDE_IMPORTED = "1" + if (!process.env.DEVORA_DISABLE_CLAUDE_IMPORT && !process.env.DEVORA_CLAUDE_IMPORTED) { + process.env.DEVORA_CLAUDE_IMPORTED = "1" try { await ClaudeImport.run() } catch (e) { diff --git a/packages/opencode/src/installation/index.ts b/packages/devora/src/installation/index.ts similarity index 86% rename from packages/opencode/src/installation/index.ts rename to packages/devora/src/installation/index.ts index 76c00127..29a51dd3 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/devora/src/installation/index.ts @@ -13,7 +13,7 @@ import { InstallationChannel, InstallationVersion } from "./version" const log = Log.create({ service: "installation" }) -const PACKAGE_NAME = "@mimo-ai/cli" +const PACKAGE_NAME = "@devora-ai/cli" export type Method = "curl" | "npm" | "pnpm" | "bun" | "brew" | "scoop" | "choco" | "unknown" @@ -55,7 +55,7 @@ export const Info = z }) export type Info = z.infer -export const USER_AGENT = `mimocode/${InstallationChannel}/${InstallationVersion}/${Flag.MIMOCODE_CLIENT}` +export const USER_AGENT = `devora/${InstallationChannel}/${InstallationVersion}/${Flag.DEVORA_CLIENT}` export function isPreview() { return InstallationChannel !== "latest" @@ -69,7 +69,7 @@ export class UpgradeFailedError extends Schema.TaggedErrorClass Effect.Effect } -export class Service extends Context.Service()("@opencode/Installation") {} +export class Service extends Context.Service()("@devora/Installation") {} export const layer: Layer.Layer = Layer.effect( @@ -133,18 +133,18 @@ export const layer: Layer.Layer Effect.succeed({ code: ChildProcessSpawner.ExitCode(1), stdout: "", stderr: "" })), ) - // TODO(mimocode): uncomment when mimocode is published to homebrew + // TODO(devora): uncomment when devora is published to homebrew // const getBrewFormula = Effect.fnUntraced(function* () { - // const tapFormula = yield* text(["brew", "list", "--formula", "anomalyco/tap/opencode"]) - // if (tapFormula.includes("opencode")) return "anomalyco/tap/opencode" - // const coreFormula = yield* text(["brew", "list", "--formula", "opencode"]) - // if (coreFormula.includes("opencode")) return "opencode" - // return "opencode" + // const tapFormula = yield* text(["brew", "list", "--formula", "sheriakhtamov/tap/devora"]) + // if (tapFormula.includes("devora")) return "sheriakhtamov/tap/devora" + // const coreFormula = yield* text(["brew", "list", "--formula", "devora"]) + // if (coreFormula.includes("devora")) return "devora" + // return "devora" // }) const upgradeCurl = Effect.fnUntraced( function* (target: string) { - const response = yield* httpOk.execute(HttpClientRequest.get("https://mimo.xiaomi.com/install")) + const response = yield* httpOk.execute(HttpClientRequest.get("https://raw.githubusercontent.com/SheriAkhtamov/Devora/dev/install")) const body = yield* response.text const bodyBytes = new TextEncoder().encode(body) const proc = ChildProcess.make("bash", [], { @@ -165,7 +165,7 @@ export const layer: Layer.Layer text(["npm", "list", "-g", "--depth=0"]) }, { name: "pnpm", command: () => text(["pnpm", "list", "-g", "--depth=0"]) }, { name: "bun", command: () => text(["bun", "pm", "ls", "-g"]) }, - // TODO(mimocode): uncomment when mimocode is published to these channels - // { name: "brew", command: () => text(["brew", "list", "--formula", "opencode"]) }, - // { name: "scoop", command: () => text(["scoop", "list", "opencode"]) }, - // { name: "choco", command: () => text(["choco", "list", "--limit-output", "opencode"]) }, + // TODO(devora): uncomment when devora is published to these channels + // { name: "brew", command: () => text(["brew", "list", "--formula", "devora"]) }, + // { name: "scoop", command: () => text(["scoop", "list", "devora"]) }, + // { name: "choco", command: () => text(["choco", "list", "--limit-output", "devora"]) }, ] checks.sort((a, b) => { @@ -200,7 +200,7 @@ export const layer: Layer.Layer) => { - if (Flag.MIMOCODE_EXPERIMENTAL_LSP_TY) { + if (Flag.DEVORA_EXPERIMENTAL_LSP_TY) { if (servers["pyright"]) { - log.info("LSP server pyright is disabled because MIMOCODE_EXPERIMENTAL_LSP_TY is enabled") + log.info("LSP server pyright is disabled because DEVORA_EXPERIMENTAL_LSP_TY is enabled") delete servers["pyright"] } } else { @@ -154,7 +154,7 @@ export interface Interface { readonly outgoingCalls: (input: LocInput) => Effect.Effect } -export class Service extends Context.Service()("@opencode/LSP") {} +export class Service extends Context.Service()("@devora/LSP") {} export const layer = Layer.effect( Service, diff --git a/packages/opencode/src/lsp/server.ts b/packages/devora/src/lsp/server.ts similarity index 97% rename from packages/opencode/src/lsp/server.ts rename to packages/devora/src/lsp/server.ts index 1370fe8b..6750eda0 100644 --- a/packages/opencode/src/lsp/server.ts +++ b/packages/devora/src/lsp/server.ts @@ -11,7 +11,7 @@ import { Flag } from "../flag/flag" import { Archive } from "../util" import { Process } from "../util" import { which } from "../util/which" -import { Module } from "@mimo-ai/shared/util/module" +import { Module } from "@devora-ai/shared/util/module" import { spawn } from "./launch" import { Npm } from "../npm" @@ -129,7 +129,7 @@ export const Vue: Info = { let binary = which("vue-language-server") const args: string[] = [] if (!binary) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return const resolved = await Npm.which("@vue/language-server") if (!resolved) return binary = resolved @@ -160,7 +160,7 @@ export const ESLint: Info = { log.info("spawning eslint server") const serverPath = path.join(Global.Path.bin, "vscode-eslint", "server", "out", "eslintServer.js") if (!(await Filesystem.exists(serverPath))) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("downloading and building VS Code ESLint server") const response = await fetch("https://github.com/microsoft/vscode-eslint/archive/refs/heads/main.zip") if (!response.ok) return @@ -354,7 +354,7 @@ export const Gopls: Info = { let bin = which("gopls") if (!bin) { if (!which("go")) return - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("installing gopls") const proc = Process.spawn(["go", "install", "golang.org/x/tools/gopls@latest"], { @@ -394,7 +394,7 @@ export const Rubocop: Info = { log.info("Ruby not found, please install Ruby first") return } - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("installing rubocop") const proc = Process.spawn(["gem", "install", "rubocop", "--bindir", Global.Path.bin], { stdout: "pipe", @@ -432,7 +432,7 @@ export const Ty: Info = { "pyrightconfig.json", ]), async spawn(root) { - if (!Flag.MIMOCODE_EXPERIMENTAL_LSP_TY) { + if (!Flag.DEVORA_EXPERIMENTAL_LSP_TY) { return undefined } @@ -489,7 +489,7 @@ export const Pyright: Info = { let binary = which("pyright-langserver") const args = [] if (!binary) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return const resolved = await Npm.which("pyright") if (!resolved) return binary = resolved @@ -547,7 +547,7 @@ export const ElixirLS: Info = { return } - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("downloading elixir-ls from GitHub releases") const response = await fetch("https://github.com/elixir-lsp/elixir-ls/archive/refs/heads/master.zip") @@ -602,7 +602,7 @@ export const Zls: Info = { return } - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("downloading zls from GitHub releases") const releaseResponse = await fetch("https://api.github.com/repos/zigtools/zls/releases/latest") @@ -712,7 +712,7 @@ export const CSharp: Info = { return } - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("installing csharp-ls via dotnet tool") const proc = Process.spawn(["dotnet", "tool", "install", "csharp-ls", "--tool-path", Global.Path.bin], { stdout: "pipe", @@ -749,7 +749,7 @@ export const FSharp: Info = { return } - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("installing fsautocomplete via dotnet tool") const proc = Process.spawn(["dotnet", "tool", "install", "fsautocomplete", "--tool-path", Global.Path.bin], { stdout: "pipe", @@ -893,7 +893,7 @@ export const Clangd: Info = { } } - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("downloading clangd from GitHub releases") const releaseResponse = await fetch("https://api.github.com/repos/clangd/clangd/releases/latest") @@ -1008,7 +1008,7 @@ export const Svelte: Info = { let binary = which("svelteserver") const args: string[] = [] if (!binary) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return const resolved = await Npm.which("svelte-language-server") if (!resolved) return binary = resolved @@ -1042,7 +1042,7 @@ export const Astro: Info = { let binary = which("astro-ls") const args: string[] = [] if (!binary) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return const resolved = await Npm.which("@astrojs/language-server") if (!resolved) return binary = resolved @@ -1110,7 +1110,7 @@ export const JDTLS: Info = { const launcherDir = path.join(distPath, "plugins") const installed = await pathExists(launcherDir) if (!installed) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("Downloading JDTLS LSP server.") await fs.mkdir(distPath, { recursive: true }) const releaseURL = @@ -1159,7 +1159,7 @@ export const JDTLS: Info = { } })(), ) - const dataDir = await fs.mkdtemp(path.join(os.tmpdir(), "opencode-jdtls-data")) + const dataDir = await fs.mkdtemp(path.join(os.tmpdir(), "devora-jdtls-data")) return { process: spawn( java, @@ -1208,7 +1208,7 @@ export const KotlinLS: Info = { process.platform === "win32" ? path.join(distPath, "kotlin-lsp.cmd") : path.join(distPath, "kotlin-lsp.sh") const installed = await Filesystem.exists(launcherScript) if (!installed) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("Downloading Kotlin Language Server from GitHub.") const releaseResponse = await fetch("https://api.github.com/repos/Kotlin/kotlin-lsp/releases/latest") @@ -1293,7 +1293,7 @@ export const YamlLS: Info = { let binary = which("yaml-language-server") const args: string[] = [] if (!binary) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return const resolved = await Npm.which("yaml-language-server") if (!resolved) return binary = resolved @@ -1327,7 +1327,7 @@ export const LuaLS: Info = { let bin = which("lua-language-server") if (!bin) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("downloading lua-language-server from GitHub releases") const releaseResponse = await fetch("https://api.github.com/repos/LuaLS/lua-language-server/releases/latest") @@ -1460,7 +1460,7 @@ export const PHPIntelephense: Info = { let binary = which("intelephense") const args: string[] = [] if (!binary) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return const resolved = await Npm.which("intelephense") if (!resolved) return binary = resolved @@ -1544,7 +1544,7 @@ export const BashLS: Info = { let binary = which("bash-language-server") const args: string[] = [] if (!binary) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return const resolved = await Npm.which("bash-language-server") if (!resolved) return binary = resolved @@ -1570,7 +1570,7 @@ export const TerraformLS: Info = { let bin = which("terraform-ls") if (!bin) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("downloading terraform-ls from HashiCorp releases") const releaseResponse = await fetch("https://api.releases.hashicorp.com/v1/releases/terraform-ls/latest") @@ -1651,7 +1651,7 @@ export const TexLab: Info = { let bin = which("texlab") if (!bin) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("downloading texlab from GitHub releases") const response = await fetch("https://api.github.com/repos/latex-lsp/texlab/releases/latest") @@ -1739,7 +1739,7 @@ export const DockerfileLS: Info = { let binary = which("docker-langserver") const args: string[] = [] if (!binary) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return const resolved = await Npm.which("dockerfile-language-server-nodejs") if (!resolved) return binary = resolved @@ -1835,7 +1835,7 @@ export const Tinymist: Info = { let bin = which("tinymist") if (!bin) { - if (Flag.MIMOCODE_DISABLE_LSP_DOWNLOAD) return + if (Flag.DEVORA_DISABLE_LSP_DOWNLOAD) return log.info("downloading tinymist from GitHub releases") const response = await fetch("https://api.github.com/repos/Myriad-Dreamin/tinymist/releases/latest") diff --git a/packages/opencode/src/mcp/auth.ts b/packages/devora/src/mcp/auth.ts similarity index 98% rename from packages/opencode/src/mcp/auth.ts rename to packages/devora/src/mcp/auth.ts index 4981b7f9..73fcf172 100644 --- a/packages/opencode/src/mcp/auth.ts +++ b/packages/devora/src/mcp/auth.ts @@ -2,7 +2,7 @@ import path from "path" import z from "zod" import { Global } from "../global" import { Effect, Layer, Context } from "effect" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" export const Tokens = z.object({ accessToken: z.string(), @@ -47,7 +47,7 @@ export interface Interface { readonly isTokenExpired: (mcpName: string) => Effect.Effect } -export class Service extends Context.Service()("@opencode/McpAuth") {} +export class Service extends Context.Service()("@devora/McpAuth") {} export const layer = Layer.effect( Service, diff --git a/packages/opencode/src/mcp/index.ts b/packages/devora/src/mcp/index.ts similarity index 98% rename from packages/opencode/src/mcp/index.ts rename to packages/devora/src/mcp/index.ts index 68e4d6e3..ed2d357e 100644 --- a/packages/opencode/src/mcp/index.ts +++ b/packages/devora/src/mcp/index.ts @@ -12,12 +12,12 @@ import { import { Config } from "../config" import { ConfigMCP } from "../config/mcp" import { Log } from "../util" -import { NamedError } from "@mimo-ai/shared/util/error" +import { NamedError } from "@devora-ai/shared/util/error" import z from "zod/v4" import { Installation } from "../installation" import { InstallationVersion } from "../installation/version" import { withTimeout } from "@/util/timeout" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" import { McpOAuthProvider } from "./oauth-provider" import { McpOAuthCallback } from "./oauth-callback" import { McpAuth } from "./auth" @@ -252,7 +252,7 @@ export interface Interface { readonly getAuthStatus: (mcpName: string) => Effect.Effect } -export class Service extends Context.Service()("@opencode/MCP") {} +export class Service extends Context.Service()("@devora/MCP") {} export const layer = Layer.effect( Service, @@ -273,7 +273,7 @@ export const layer = Layer.effect( (t) => Effect.tryPromise({ try: () => { - const client = new Client({ name: "mimocode", version: InstallationVersion }) + const client = new Client({ name: "devora", version: InstallationVersion }) return withTimeout(client.connect(t), timeout).then(() => client) }, catch: (e) => (e instanceof Error ? e : new Error(String(e))), @@ -360,7 +360,7 @@ export const layer = Layer.effect( return bus .publish(TuiEvent.ToastShow, { title: "MCP Authentication Required", - message: `Server "${key}" requires authentication. Run: opencode mcp auth ${key}`, + message: `Server "${key}" requires authentication. Run: devora mcp auth ${key}`, variant: "warning", duration: 8000, }) @@ -405,7 +405,7 @@ export const layer = Layer.effect( cwd, env: { ...process.env, - ...(cmd === "opencode" ? { BUN_BE_BUN: "1" } : {}), + ...(cmd === "devora" ? { BUN_BE_BUN: "1" } : {}), ...mcp.environment, }, }) @@ -782,7 +782,7 @@ export const layer = Layer.effect( return yield* Effect.tryPromise({ try: () => { - const client = new Client({ name: "mimocode", version: InstallationVersion }) + const client = new Client({ name: "devora", version: InstallationVersion }) return client .connect(transport) .then(() => ({ authorizationUrl: "", oauthState, client }) satisfies AuthResult) diff --git a/packages/opencode/src/mcp/oauth-callback.ts b/packages/devora/src/mcp/oauth-callback.ts similarity index 97% rename from packages/opencode/src/mcp/oauth-callback.ts rename to packages/devora/src/mcp/oauth-callback.ts index fbb43d39..9c544d9e 100644 --- a/packages/opencode/src/mcp/oauth-callback.ts +++ b/packages/devora/src/mcp/oauth-callback.ts @@ -12,7 +12,7 @@ let currentPath = OAUTH_CALLBACK_PATH const HTML_SUCCESS = ` - OpenCode - Authorization Successful + Devora - Authorization Successful \ No newline at end of file + + + + + + + + + + + + diff --git a/packages/opencode/src/flag/flag.ts b/packages/opencode/src/flag/flag.ts deleted file mode 100644 index db6748af..00000000 --- a/packages/opencode/src/flag/flag.ts +++ /dev/null @@ -1,164 +0,0 @@ -import { Config } from "effect" - -function truthy(key: string) { - const value = process.env[key]?.toLowerCase() - return value === "true" || value === "1" -} - -function falsy(key: string) { - const value = process.env[key]?.toLowerCase() - return value === "false" || value === "0" -} - -function number(key: string) { - const value = process.env[key] - if (!value) return undefined - const parsed = Number(value) - return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined -} - -const MIMOCODE_EXPERIMENTAL = truthy("MIMOCODE_EXPERIMENTAL") - -// Defaults to false. When enabled, mimocode runs in pure-mimo mode: -// — does NOT inherit Claude Code's settings (CLAUDE.md, ~/.claude/skills, etc.) -// — does NOT pick up provider API keys from environment variables -// — falls back to the mimo-auto model as the default -// Set MIMOCODE_MIMO_ONLY=true to disable .claude inheritance and env-based -// provider auto-detection. -const MIMOCODE_MIMO_ONLY = truthy("MIMOCODE_MIMO_ONLY") -const MIMOCODE_DISABLE_CLAUDE_CODE_ENV = truthy("MIMOCODE_DISABLE_CLAUDE_CODE") -const MIMOCODE_DISABLE_CLAUDE_CODE = MIMOCODE_MIMO_ONLY || MIMOCODE_DISABLE_CLAUDE_CODE_ENV - -const MIMOCODE_DISABLE_EXTERNAL_SKILLS = truthy("MIMOCODE_DISABLE_EXTERNAL_SKILLS") -const MIMOCODE_DISABLE_CLAUDE_CODE_SKILLS = - MIMOCODE_DISABLE_EXTERNAL_SKILLS || MIMOCODE_DISABLE_CLAUDE_CODE || truthy("MIMOCODE_DISABLE_CLAUDE_CODE_SKILLS") -const copy = process.env["MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"] - -export const Flag = { - OTEL_EXPORTER_OTLP_ENDPOINT: process.env["OTEL_EXPORTER_OTLP_ENDPOINT"], - OTEL_EXPORTER_OTLP_HEADERS: process.env["OTEL_EXPORTER_OTLP_HEADERS"], - - MIMOCODE_AUTO_SHARE: truthy("MIMOCODE_AUTO_SHARE"), - MIMOCODE_AUTO_HEAP_SNAPSHOT: truthy("MIMOCODE_AUTO_HEAP_SNAPSHOT"), - MIMOCODE_GIT_BASH_PATH: process.env["MIMOCODE_GIT_BASH_PATH"], - MIMOCODE_CONFIG: process.env["MIMOCODE_CONFIG"], - MIMOCODE_CONFIG_CONTENT: process.env["MIMOCODE_CONFIG_CONTENT"], - - MIMOCODE_DISABLE_AUTOUPDATE: truthy("MIMOCODE_DISABLE_AUTOUPDATE"), - - // Defaults to true (analytics enabled). Set MIMOCODE_ENABLE_ANALYSIS=false - // to opt out of POSTing model_call/tool_call/agent_request metrics. - MIMOCODE_ENABLE_ANALYSIS: !falsy("MIMOCODE_ENABLE_ANALYSIS"), - MIMOCODE_ALWAYS_NOTIFY_UPDATE: truthy("MIMOCODE_ALWAYS_NOTIFY_UPDATE"), - MIMOCODE_DISABLE_PRUNE: truthy("MIMOCODE_DISABLE_PRUNE"), - MIMOCODE_DISABLE_TERMINAL_TITLE: truthy("MIMOCODE_DISABLE_TERMINAL_TITLE"), - MIMOCODE_SHOW_TTFD: truthy("MIMOCODE_SHOW_TTFD"), - MIMOCODE_PERMISSION: process.env["MIMOCODE_PERMISSION"], - MIMOCODE_DISABLE_DEFAULT_PLUGINS: truthy("MIMOCODE_DISABLE_DEFAULT_PLUGINS"), - MIMOCODE_DISABLE_LSP_DOWNLOAD: truthy("MIMOCODE_DISABLE_LSP_DOWNLOAD"), - MIMOCODE_ENABLE_EXPERIMENTAL_MODELS: truthy("MIMOCODE_ENABLE_EXPERIMENTAL_MODELS"), - MIMOCODE_DISABLE_AUTOCOMPACT: truthy("MIMOCODE_DISABLE_AUTOCOMPACT"), - MIMOCODE_DISABLE_MODELS_FETCH: truthy("MIMOCODE_DISABLE_MODELS_FETCH"), - MIMOCODE_DISABLE_MOUSE: truthy("MIMOCODE_DISABLE_MOUSE"), - MIMOCODE_OUTPUT_LENGTH_CONTINUATION_LIMIT: number("MIMOCODE_OUTPUT_LENGTH_CONTINUATION_LIMIT") ?? 3, - MIMOCODE_INVALID_OUTPUT_CONTINUATION_LIMIT: number("MIMOCODE_INVALID_OUTPUT_CONTINUATION_LIMIT") ?? 2, - - // Caps applied to image attachments before a prompt is sent. Both default to - // undefined (no limit). MIMOCODE_MAX_PROMPT_IMAGES bounds how many images may - // be sent per request (oldest excess images are dropped); MIMOCODE_MAX_PROMPT_IMAGE_SIZE - // bounds the decoded byte size of a single image. Values must be positive integers. - MIMOCODE_MAX_PROMPT_IMAGES: number("MIMOCODE_MAX_PROMPT_IMAGES"), - MIMOCODE_MAX_PROMPT_IMAGE_SIZE: number("MIMOCODE_MAX_PROMPT_IMAGE_SIZE"), - MIMOCODE_MIMO_ONLY, - MIMOCODE_DISABLE_PROVIDER_ENV: MIMOCODE_MIMO_ONLY || truthy("MIMOCODE_DISABLE_PROVIDER_ENV"), - MIMOCODE_DISABLE_CLAUDE_CODE, - get MIMOCODE_DISABLE_CLAUDE_CODE_MCP() { - // MCP compatibility stays on in mimo-only mode so users can reuse Claude Code - // MCP servers without inheriting prompts, skills, or provider env keys. - return MIMOCODE_DISABLE_CLAUDE_CODE_ENV || truthy("MIMOCODE_DISABLE_CLAUDE_CODE_MCP") - }, - MIMOCODE_DISABLE_CLAUDE_CODE_PROMPT: MIMOCODE_DISABLE_CLAUDE_CODE || truthy("MIMOCODE_DISABLE_CLAUDE_CODE_PROMPT"), - // Defaults to false (enabled): markdown commands under ~/.claude/commands and - // {project}/.claude/commands load as slash commands. Independent of the - // mimo-only master switch. Set MIMOCODE_DISABLE_CLAUDE_CODE_COMMANDS=true to disable. - MIMOCODE_DISABLE_CLAUDE_CODE_COMMANDS: truthy("MIMOCODE_DISABLE_CLAUDE_CODE_COMMANDS"), - MIMOCODE_DISABLE_CLAUDE_CODE_SKILLS, - MIMOCODE_DISABLE_EXTERNAL_SKILLS, - MIMOCODE_DISABLE_CODEX_SKILLS: MIMOCODE_DISABLE_EXTERNAL_SKILLS || truthy("MIMOCODE_DISABLE_CODEX_SKILLS"), - MIMOCODE_DISABLE_OPENCODE_SKILLS: MIMOCODE_DISABLE_EXTERNAL_SKILLS || truthy("MIMOCODE_DISABLE_OPENCODE_SKILLS"), - MIMOCODE_FAKE_VCS: process.env["MIMOCODE_FAKE_VCS"], - - // When enabled, skips all git subprocess calls during project discovery - // (which git, rev-parse --git-common-dir, rev-parse --show-toplevel) and - // branch detection. The project is treated as a non-git directory rooted at - // the working directory. Use to avoid touching git in restricted/sandboxed - // environments or where git startup probing is undesirable. - MIMOCODE_DISABLE_GIT: truthy("MIMOCODE_DISABLE_GIT"), - MIMOCODE_SERVER_PASSWORD: process.env["MIMOCODE_SERVER_PASSWORD"], - MIMOCODE_SERVER_USERNAME: process.env["MIMOCODE_SERVER_USERNAME"], - MIMOCODE_ENABLE_QUESTION_TOOL: truthy("MIMOCODE_ENABLE_QUESTION_TOOL"), - - // Experimental - MIMOCODE_EXPERIMENTAL, - MIMOCODE_EXPERIMENTAL_FILEWATCHER: Config.boolean("MIMOCODE_EXPERIMENTAL_FILEWATCHER").pipe( - Config.withDefault(false), - ), - MIMOCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: Config.boolean("MIMOCODE_EXPERIMENTAL_DISABLE_FILEWATCHER").pipe( - Config.withDefault(false), - ), - MIMOCODE_EXPERIMENTAL_ICON_DISCOVERY: MIMOCODE_EXPERIMENTAL || truthy("MIMOCODE_EXPERIMENTAL_ICON_DISCOVERY"), - MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT: - copy === undefined ? process.platform === "win32" : truthy("MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"), - MIMOCODE_ENABLE_EXA: truthy("MIMOCODE_ENABLE_EXA") || MIMOCODE_EXPERIMENTAL || truthy("MIMOCODE_EXPERIMENTAL_EXA"), - MIMOCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS: number("MIMOCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS"), - MIMOCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX: number("MIMOCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"), - MIMOCODE_EXPERIMENTAL_OXFMT: MIMOCODE_EXPERIMENTAL || truthy("MIMOCODE_EXPERIMENTAL_OXFMT"), - MIMOCODE_EXPERIMENTAL_LSP_TY: truthy("MIMOCODE_EXPERIMENTAL_LSP_TY"), - MIMOCODE_EXPERIMENTAL_LSP_TOOL: MIMOCODE_EXPERIMENTAL || truthy("MIMOCODE_EXPERIMENTAL_LSP_TOOL"), - MIMOCODE_EXPERIMENTAL_WORKFLOW_TOOL: MIMOCODE_EXPERIMENTAL || truthy("MIMOCODE_EXPERIMENTAL_WORKFLOW_TOOL"), - MIMOCODE_EXPERIMENTAL_MARKDOWN: !falsy("MIMOCODE_EXPERIMENTAL_MARKDOWN"), - MIMOCODE_MODELS_URL: process.env["MIMOCODE_MODELS_URL"], - MIMOCODE_MODELS_PATH: process.env["MIMOCODE_MODELS_PATH"], - MIMOCODE_DISABLE_EMBEDDED_WEB_UI: truthy("MIMOCODE_DISABLE_EMBEDDED_WEB_UI"), - MIMOCODE_DB: process.env["MIMOCODE_DB"], - - // Defaults to true — all channels share a single mimocode.db. The per-channel - // DB isolation (mimocode-{channel}.db) is unnecessary for mimocode since we - // don't ship multiple release channels yet. Use MIMOCODE_HOME to isolate dev - // environments instead. Set MIMOCODE_DISABLE_CHANNEL_DB=false to restore - // per-channel isolation. - MIMOCODE_DISABLE_CHANNEL_DB: !falsy("MIMOCODE_DISABLE_CHANNEL_DB"), - MIMOCODE_SKIP_MIGRATIONS: truthy("MIMOCODE_SKIP_MIGRATIONS"), - MIMOCODE_STRICT_CONFIG_DEPS: truthy("MIMOCODE_STRICT_CONFIG_DEPS"), - - MIMOCODE_WORKSPACE_ID: process.env["MIMOCODE_WORKSPACE_ID"], - MIMOCODE_EXPERIMENTAL_HTTPAPI: truthy("MIMOCODE_EXPERIMENTAL_HTTPAPI"), - MIMOCODE_EXPERIMENTAL_WORKSPACES: MIMOCODE_EXPERIMENTAL || truthy("MIMOCODE_EXPERIMENTAL_WORKSPACES"), - - // Evaluated at access time (not module load) because tests, the CLI, and - // external tooling set these env vars at runtime. - get MIMOCODE_DISABLE_COMPOSE_SKILLS() { - return truthy("MIMOCODE_DISABLE_COMPOSE_SKILLS") - }, - get MIMOCODE_DISABLE_PROJECT_CONFIG() { - return truthy("MIMOCODE_DISABLE_PROJECT_CONFIG") - }, - get MIMOCODE_TUI_CONFIG() { - return process.env["MIMOCODE_TUI_CONFIG"] - }, - get MIMOCODE_CONFIG_DIR() { - return process.env["MIMOCODE_CONFIG_DIR"] - }, - get MIMOCODE_HOME() { - return process.env["MIMOCODE_HOME"] - }, - get MIMOCODE_PURE() { - return truthy("MIMOCODE_PURE") - }, - get MIMOCODE_PLUGIN_META_FILE() { - return process.env["MIMOCODE_PLUGIN_META_FILE"] - }, - get MIMOCODE_CLIENT() { - return process.env["MIMOCODE_CLIENT"] ?? "cli" - }, -} diff --git a/packages/opencode/src/installation/version.ts b/packages/opencode/src/installation/version.ts deleted file mode 100644 index 25d9cd99..00000000 --- a/packages/opencode/src/installation/version.ts +++ /dev/null @@ -1,8 +0,0 @@ -declare global { - const OPENCODE_VERSION: string - const OPENCODE_CHANNEL: string -} - -export const InstallationVersion = typeof OPENCODE_VERSION === "string" ? OPENCODE_VERSION : "local" -export const InstallationChannel = typeof OPENCODE_CHANNEL === "string" ? OPENCODE_CHANNEL : "local" -export const InstallationLocal = InstallationChannel === "local" diff --git a/packages/plugin/package.json b/packages/plugin/package.json index af5f8058..05f3456b 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@mimo-ai/plugin", + "name": "@devora-ai/plugin", "version": "0.1.0", "type": "module", "license": "MIT", @@ -20,7 +20,7 @@ "dist" ], "dependencies": { - "@mimo-ai/sdk": "workspace:*", + "@devora-ai/sdk": "workspace:*", "effect": "catalog:", "zod": "catalog:" }, diff --git a/packages/plugin/script/publish.ts b/packages/plugin/script/publish.ts index a6e4fbac..a4bfb119 100755 --- a/packages/plugin/script/publish.ts +++ b/packages/plugin/script/publish.ts @@ -1,5 +1,5 @@ #!/usr/bin/env bun -import { Script } from "@mimo-ai/script" +import { Script } from "@devora-ai/script" import { $ } from "bun" import { fileURLToPath } from "url" diff --git a/packages/plugin/src/example-workspace.ts b/packages/plugin/src/example-workspace.ts index 1c217167..722fa272 100644 --- a/packages/plugin/src/example-workspace.ts +++ b/packages/plugin/src/example-workspace.ts @@ -1,4 +1,4 @@ -import type { Plugin } from "@mimo-ai/plugin" +import type { Plugin } from "@devora-ai/plugin" import { mkdir, rm } from "node:fs/promises" export const FolderWorkspacePlugin: Plugin = async ({ experimental_workspace }) => { diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index 463fcf46..7acd4aaf 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -1,6 +1,6 @@ import type { Event, - createOpencodeClient, + createDevoraClient, Project, Model, Provider, @@ -10,8 +10,8 @@ import type { Part, Auth, Config as SDKConfig, -} from "@mimo-ai/sdk" -import type { Provider as ProviderV2, Model as ModelV2 } from "@mimo-ai/sdk/v2" +} from "@devora-ai/sdk" +import type { Provider as ProviderV2, Model as ModelV2 } from "@devora-ai/sdk/v2" import type { BunShell } from "./shell.js" import { type ToolDefinition } from "./tool.js" @@ -55,7 +55,7 @@ export type WorkspaceAdaptor = { } export type PluginInput = { - client: ReturnType + client: ReturnType project: Project directory: string worktree: string diff --git a/packages/plugin/src/tui.ts b/packages/plugin/src/tui.ts index a7c4b551..cb91e787 100644 --- a/packages/plugin/src/tui.ts +++ b/packages/plugin/src/tui.ts @@ -1,6 +1,6 @@ import type { AgentPart, - OpencodeClient, + DevoraClient, Event, FilePart, LspStatus, @@ -15,7 +15,7 @@ import type { SessionStatus, TextPart, Config as SdkConfig, -} from "@mimo-ai/sdk/v2" +} from "@devora-ai/sdk/v2" import type { CliRenderer, ParsedKey, RGBA, SlotMode } from "@opentui/core" import type { JSX, SolidPlugin } from "@opentui/solid" import type { Config as PluginConfig, PluginOptions } from "./index.js" @@ -503,7 +503,7 @@ export type TuiPluginApi = { kv: TuiKV state: TuiState theme: TuiTheme - client: OpencodeClient + client: DevoraClient event: TuiEventBus renderer: CliRenderer slots: TuiSlots diff --git a/packages/script/package.json b/packages/script/package.json index 38c93524..dab8b506 100644 --- a/packages/script/package.json +++ b/packages/script/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package", - "name": "@mimo-ai/script", + "name": "@devora-ai/script", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/script/src/index.ts b/packages/script/src/index.ts index 1b048c61..6ecc9b54 100644 --- a/packages/script/src/index.ts +++ b/packages/script/src/index.ts @@ -18,26 +18,26 @@ if (!semver.satisfies(process.versions.bun, expectedBunVersionRange)) { } const env = { - OPENCODE_CHANNEL: process.env["OPENCODE_CHANNEL"], - OPENCODE_BUMP: process.env["OPENCODE_BUMP"], - OPENCODE_VERSION: process.env["OPENCODE_VERSION"], - OPENCODE_RELEASE: process.env["OPENCODE_RELEASE"], + DEVORA_CHANNEL: process.env["DEVORA_CHANNEL"], + DEVORA_BUMP: process.env["DEVORA_BUMP"], + DEVORA_VERSION: process.env["DEVORA_VERSION"], + DEVORA_RELEASE: process.env["DEVORA_RELEASE"], } const CHANNEL = await (async () => { - if (env.OPENCODE_CHANNEL) return env.OPENCODE_CHANNEL - if (env.OPENCODE_BUMP) return "latest" - if (env.OPENCODE_VERSION && !env.OPENCODE_VERSION.startsWith("0.0.0-")) return "latest" + if (env.DEVORA_CHANNEL) return env.DEVORA_CHANNEL + if (env.DEVORA_BUMP) return "latest" + if (env.DEVORA_VERSION && !env.DEVORA_VERSION.startsWith("0.0.0-")) return "latest" return await $`git branch --show-current`.text().then((x) => x.trim()) || "latest" })() const IS_PREVIEW = CHANNEL !== "latest" const VERSION = await (async () => { - if (env.OPENCODE_VERSION) return env.OPENCODE_VERSION + if (env.DEVORA_VERSION) return env.DEVORA_VERSION if (IS_PREVIEW) return `0.0.0-${CHANNEL}-${new Date().toISOString().slice(0, 16).replace(/[-:T]/g, "")}` - const version = await Bun.file(path.resolve(import.meta.dir, "../../opencode/package.json")) + const version = await Bun.file(path.resolve(import.meta.dir, "../../devora/package.json")) .json() .then((data: any) => data.version) - const t = env.OPENCODE_BUMP?.toLowerCase() + const t = env.DEVORA_BUMP?.toLowerCase() if (!t) return version const [major, minor, patch] = version.split(".").map((x: string) => Number(x) || 0) if (t === "major") return `${major + 1}.0.0` @@ -56,7 +56,7 @@ export const Script = { return IS_PREVIEW }, get release(): boolean { - return !!env.OPENCODE_RELEASE + return !!env.DEVORA_RELEASE }, } -console.log(`opencode script`, JSON.stringify(Script, null, 2)) +console.log(`devora script`, JSON.stringify(Script, null, 2)) diff --git a/packages/sdk/js/example/example.ts b/packages/sdk/js/example/example.ts index 4f6bbc9f..a8db7665 100644 --- a/packages/sdk/js/example/example.ts +++ b/packages/sdk/js/example/example.ts @@ -1,8 +1,8 @@ -import { createOpencodeClient, createOpencodeServer } from "@mimo-ai/sdk" +import { createDevoraClient, createDevoraServer } from "@devora-ai/sdk" import { pathToFileURL } from "bun" -const server = await createOpencodeServer() -const client = createOpencodeClient({ baseUrl: server.url }) +const server = await createDevoraServer() +const client = createDevoraClient({ baseUrl: server.url }) const input = await Array.fromAsync(new Bun.Glob("packages/core/*.ts").scan()) diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index d2b983fd..afbd67a1 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@mimo-ai/sdk", + "name": "@devora-ai/sdk", "version": "1.14.19", "type": "module", "license": "MIT", diff --git a/packages/sdk/js/script/build.ts b/packages/sdk/js/script/build.ts index 268233a0..d9fe67c5 100755 --- a/packages/sdk/js/script/build.ts +++ b/packages/sdk/js/script/build.ts @@ -9,7 +9,7 @@ import path from "path" import { createClient } from "@hey-api/openapi-ts" -await $`bun dev generate > ${dir}/openapi.json`.cwd(path.resolve(dir, "../../opencode")) +await $`bun dev generate > ${dir}/openapi.json`.cwd(path.resolve(dir, "../../devora")) await createClient({ input: "./openapi.json", @@ -25,7 +25,7 @@ await createClient({ }, { name: "@hey-api/sdk", - instance: "OpencodeClient", + instance: "DevoraClient", exportFromIndex: false, auth: false, paramsStructure: "flat", diff --git a/packages/sdk/js/script/publish.ts b/packages/sdk/js/script/publish.ts index 391dbbbc..5c8fe6ba 100755 --- a/packages/sdk/js/script/publish.ts +++ b/packages/sdk/js/script/publish.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun -import { Script } from "@mimo-ai/script" +import { Script } from "@devora-ai/script" import { $ } from "bun" import { fileURLToPath } from "url" diff --git a/packages/sdk/js/src/client.ts b/packages/sdk/js/src/client.ts index 81e02de3..beb3b7bb 100644 --- a/packages/sdk/js/src/client.ts +++ b/packages/sdk/js/src/client.ts @@ -2,8 +2,8 @@ export * from "./gen/types.gen.js" import { createClient } from "./gen/client/client.gen.js" import { type Config } from "./gen/client/types.gen.js" -import { OpencodeClient } from "./gen/sdk.gen.js" -export { type Config as OpencodeClientConfig, OpencodeClient } +import { DevoraClient } from "./gen/sdk.gen.js" +export { type Config as DevoraClientConfig, DevoraClient } function pick(value: string | null, fallback?: string) { if (!value) return @@ -16,7 +16,7 @@ function pick(value: string | null, fallback?: string) { function rewrite(request: Request, directory?: string) { if (request.method !== "GET" && request.method !== "HEAD") return request - const value = pick(request.headers.get("x-mimocode-directory"), directory) + const value = pick(request.headers.get("x-devora-directory"), directory) if (!value) return request const url = new URL(request.url) @@ -25,11 +25,11 @@ function rewrite(request: Request, directory?: string) { } const next = new Request(url, request) - next.headers.delete("x-mimocode-directory") + next.headers.delete("x-devora-directory") return next } -export function createOpencodeClient(config?: Config & { directory?: string }) { +export function createDevoraClient(config?: Config & { directory?: string }) { if (!config?.fetch) { const customFetch: any = (req: any) => { // @ts-ignore @@ -45,11 +45,11 @@ export function createOpencodeClient(config?: Config & { directory?: string }) { if (config?.directory) { config.headers = { ...config.headers, - "x-mimocode-directory": encodeURIComponent(config.directory), + "x-devora-directory": encodeURIComponent(config.directory), } } const client = createClient(config) client.interceptors.request.use((request) => rewrite(request, config?.directory)) - return new OpencodeClient({ client }) + return new DevoraClient({ client }) } diff --git a/packages/sdk/js/src/gen/sdk.gen.ts b/packages/sdk/js/src/gen/sdk.gen.ts index 5e3e67e1..a562d641 100644 --- a/packages/sdk/js/src/gen/sdk.gen.ts +++ b/packages/sdk/js/src/gen/sdk.gen.ts @@ -1154,7 +1154,7 @@ class Event extends _HeyApiClient { } } -export class OpencodeClient extends _HeyApiClient { +export class DevoraClient extends _HeyApiClient { /** * Respond to a permission request */ diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts index 5dff0412..7d864446 100644 --- a/packages/sdk/js/src/gen/types.gen.ts +++ b/packages/sdk/js/src/gen/types.gen.ts @@ -1202,7 +1202,7 @@ export type Config = { diff_style?: "auto" | "stacked" } /** - * Command configuration, see https://opencode.ai/docs/commands + * Command configuration, see https://devora.ai/docs/commands */ command?: { [key: string]: { @@ -1259,7 +1259,7 @@ export type Config = { [key: string]: AgentConfig | undefined } /** - * Agent configuration, see https://opencode.ai/docs/agent + * Agent configuration, see https://devora.ai/docs/agent */ agent?: { plan?: AgentConfig diff --git a/packages/sdk/js/src/index.ts b/packages/sdk/js/src/index.ts index d044f5ad..49bc6e18 100644 --- a/packages/sdk/js/src/index.ts +++ b/packages/sdk/js/src/index.ts @@ -1,16 +1,16 @@ export * from "./client.js" export * from "./server.js" -import { createOpencodeClient } from "./client.js" -import { createOpencodeServer } from "./server.js" +import { createDevoraClient } from "./client.js" +import { createDevoraServer } from "./server.js" import type { ServerOptions } from "./server.js" -export async function createOpencode(options?: ServerOptions) { - const server = await createOpencodeServer({ +export async function createDevora(options?: ServerOptions) { + const server = await createDevoraServer({ ...options, }) - const client = createOpencodeClient({ + const client = createDevoraClient({ baseUrl: server.url, }) diff --git a/packages/sdk/js/src/process.ts b/packages/sdk/js/src/process.ts index 302533d1..c8f98d72 100644 --- a/packages/sdk/js/src/process.ts +++ b/packages/sdk/js/src/process.ts @@ -1,7 +1,7 @@ import { type ChildProcess, spawnSync } from "node:child_process" -// Duplicated from `packages/opencode/src/util/process.ts` because the SDK cannot -// import `opencode` without creating a cycle (`opencode` depends on `@mimo-ai/sdk`). +// Duplicated from `packages/devora/src/util/process.ts` because the SDK cannot +// import `devora` without creating a cycle (`devora` depends on `@devora-ai/sdk`). export function stop(proc: ChildProcess) { if (proc.exitCode !== null || proc.signalCode !== null) return if (process.platform === "win32" && proc.pid) { diff --git a/packages/sdk/js/src/server.ts b/packages/sdk/js/src/server.ts index 2d1ab29f..6b4c2a4b 100644 --- a/packages/sdk/js/src/server.ts +++ b/packages/sdk/js/src/server.ts @@ -19,7 +19,7 @@ export type TuiOptions = { config?: Config } -export async function createOpencodeServer(options?: ServerOptions) { +export async function createDevoraServer(options?: ServerOptions) { options = Object.assign( { hostname: "127.0.0.1", @@ -32,10 +32,10 @@ export async function createOpencodeServer(options?: ServerOptions) { const args = [`serve`, `--hostname=${options.hostname}`, `--port=${options.port}`] if (options.config?.logLevel) args.push(`--log-level=${options.config.logLevel}`) - const proc = launch(`opencode`, args, { + const proc = launch(`devora`, args, { env: { ...process.env, - OPENCODE_CONFIG_CONTENT: JSON.stringify(options.config ?? {}), + DEVORA_CONFIG_CONTENT: JSON.stringify(options.config ?? {}), }, }) let clear = () => {} @@ -53,7 +53,7 @@ export async function createOpencodeServer(options?: ServerOptions) { output += chunk.toString() const lines = output.split("\n") for (const line of lines) { - if (line.startsWith("opencode server listening")) { + if (line.startsWith("devora server listening")) { const match = line.match(/on\s+(https?:\/\/[^\s]+)/) if (!match) { clear() @@ -99,7 +99,7 @@ export async function createOpencodeServer(options?: ServerOptions) { } } -export function createOpencodeTui(options?: TuiOptions) { +export function createDevoraTui(options?: TuiOptions) { const args = [] if (options?.project) { @@ -115,11 +115,11 @@ export function createOpencodeTui(options?: TuiOptions) { args.push(`--agent=${options.agent}`) } - const proc = launch(`opencode`, args, { + const proc = launch(`devora`, args, { stdio: "inherit", env: { ...process.env, - OPENCODE_CONFIG_CONTENT: JSON.stringify(options?.config ?? {}), + DEVORA_CONFIG_CONTENT: JSON.stringify(options?.config ?? {}), }, }) diff --git a/packages/sdk/js/src/v2/client.ts b/packages/sdk/js/src/v2/client.ts index a9b5df2e..9adf13bf 100644 --- a/packages/sdk/js/src/v2/client.ts +++ b/packages/sdk/js/src/v2/client.ts @@ -2,8 +2,8 @@ export * from "./gen/types.gen.js" import { createClient } from "./gen/client/client.gen.js" import { type Config } from "./gen/client/types.gen.js" -import { OpencodeClient } from "./gen/sdk.gen.js" -export { type Config as OpencodeClientConfig, OpencodeClient } +import { DevoraClient } from "./gen/sdk.gen.js" +export { type Config as DevoraClientConfig, DevoraClient } function pick(value: string | null, fallback?: string, encode?: (value: string) => string) { if (!value) return @@ -20,8 +20,8 @@ function rewrite(request: Request, values: { directory?: string; workspace?: str let changed = false for (const [name, key] of [ - ["x-mimocode-directory", "directory"], - ["x-mimocode-workspace", "workspace"], + ["x-devora-directory", "directory"], + ["x-devora-workspace", "workspace"], ] as const) { const value = pick( request.headers.get(name), @@ -38,12 +38,12 @@ function rewrite(request: Request, values: { directory?: string; workspace?: str if (!changed) return request const next = new Request(url, request) - next.headers.delete("x-mimocode-directory") - next.headers.delete("x-mimocode-workspace") + next.headers.delete("x-devora-directory") + next.headers.delete("x-devora-workspace") return next } -export function createOpencodeClient(config?: Config & { directory?: string; experimental_workspaceID?: string }) { +export function createDevoraClient(config?: Config & { directory?: string; experimental_workspaceID?: string }) { if (!config?.fetch) { const customFetch: any = (req: any) => { // @ts-ignore @@ -59,14 +59,14 @@ export function createOpencodeClient(config?: Config & { directory?: string; exp if (config?.directory) { config.headers = { ...config.headers, - "x-mimocode-directory": encodeURIComponent(config.directory), + "x-devora-directory": encodeURIComponent(config.directory), } } if (config?.experimental_workspaceID) { config.headers = { ...config.headers, - "x-mimocode-workspace": config.experimental_workspaceID, + "x-devora-workspace": config.experimental_workspaceID, } } @@ -80,9 +80,9 @@ export function createOpencodeClient(config?: Config & { directory?: string; exp client.interceptors.response.use((response) => { const contentType = response.headers.get("content-type") if (contentType === "text/html") - throw new Error("Request is not supported by this version of OpenCode Server (Server responded with text/html)") + throw new Error("Request is not supported by this version of Devora Server (Server responded with text/html)") return response }) - return new OpencodeClient({ client }) + return new DevoraClient({ client }) } diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index ab766252..6984e4b5 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -249,7 +249,7 @@ class HeyApiRegistry { get(key?: string): T { const instance = this.instances.get(key ?? this.defaultKey) if (!instance) { - throw new Error(`No SDK client found. Create one with "new OpencodeClient()" to fix this error.`) + throw new Error(`No SDK client found. Create one with "new DevoraClient()" to fix this error.`) } return instance } @@ -263,7 +263,7 @@ export class Config extends HeyApiClient { /** * Get global configuration * - * Retrieve the current global OpenCode configuration settings and preferences. + * Retrieve the current global Devora configuration settings and preferences. */ public get(options?: Options) { return (options?.client ?? this.client).get({ @@ -275,7 +275,7 @@ export class Config extends HeyApiClient { /** * Update global configuration * - * Update global OpenCode configuration settings and preferences. + * Update global Devora configuration settings and preferences. */ public update( parameters?: { @@ -301,7 +301,7 @@ export class Global extends HeyApiClient { /** * Get health * - * Get health information about the OpenCode server. + * Get health information about the Devora server. */ public health(options?: Options) { return (options?.client ?? this.client).get({ @@ -313,7 +313,7 @@ export class Global extends HeyApiClient { /** * Get global events * - * Subscribe to global events from the OpenCode system using server-sent events. + * Subscribe to global events from the Devora system using server-sent events. */ public event(options?: Options) { return (options?.client ?? this.client).sse.get({ @@ -325,7 +325,7 @@ export class Global extends HeyApiClient { /** * Dispose instance * - * Clean up and dispose all OpenCode instances, releasing all resources. + * Clean up and dispose all Devora instances, releasing all resources. */ public dispose(options?: Options) { return (options?.client ?? this.client).post({ @@ -335,9 +335,9 @@ export class Global extends HeyApiClient { } /** - * Upgrade opencode + * Upgrade devora * - * Upgrade opencode to the specified version or latest if not specified. + * Upgrade devora to the specified version or latest if not specified. */ public upgrade( parameters?: { @@ -469,7 +469,7 @@ export class App extends HeyApiClient { /** * List agents * - * Get a list of all available AI agents in the OpenCode system. + * Get a list of all available AI agents in the Devora system. */ public agents( parameters?: { @@ -499,7 +499,7 @@ export class App extends HeyApiClient { /** * List skills * - * Get a list of all available skills in the OpenCode system. + * Get a list of all available skills in the Devora system. */ public skills( parameters?: { @@ -816,7 +816,7 @@ export class Console extends HeyApiClient { /** * Switch active Console org * - * Persist a new active Console account/org selection for the current local OpenCode state. + * Persist a new active Console account/org selection for the current local Devora state. */ public switchOrg( parameters?: { @@ -857,7 +857,7 @@ export class Session extends HeyApiClient { /** * List sessions * - * Get a list of all OpenCode sessions across projects, sorted by most recently updated. Archived sessions are excluded by default. + * Get a list of all Devora sessions across projects, sorted by most recently updated. Archived sessions are excluded by default. */ public list( parameters?: { @@ -955,7 +955,7 @@ export class Project extends HeyApiClient { /** * List all projects * - * Get a list of projects that have been opened with OpenCode. + * Get a list of projects that have been opened with Devora. */ public list( parameters?: { @@ -985,7 +985,7 @@ export class Project extends HeyApiClient { /** * Get current project * - * Retrieve the currently active project that OpenCode is working with. + * Retrieve the currently active project that Devora is working with. */ public current( parameters?: { @@ -1099,7 +1099,7 @@ export class Pty extends HeyApiClient { /** * List PTY sessions * - * Get a list of all active pseudo-terminal (PTY) sessions managed by OpenCode. + * Get a list of all active pseudo-terminal (PTY) sessions managed by Devora. */ public list( parameters?: { @@ -1318,7 +1318,7 @@ export class Config2 extends HeyApiClient { /** * Get configuration * - * Retrieve the current OpenCode configuration settings and preferences. + * Retrieve the current Devora configuration settings and preferences. */ public get( parameters?: { @@ -1348,7 +1348,7 @@ export class Config2 extends HeyApiClient { /** * Update configuration * - * Update OpenCode configuration settings and preferences. + * Update Devora configuration settings and preferences. */ public update( parameters?: { @@ -1626,7 +1626,7 @@ export class Session2 extends HeyApiClient { /** * List sessions * - * Get a list of all OpenCode sessions, sorted by most recently updated. + * Get a list of all Devora sessions, sorted by most recently updated. */ public list( parameters?: { @@ -1664,7 +1664,7 @@ export class Session2 extends HeyApiClient { /** * Create session * - * Create a new OpenCode session for interacting with AI assistants and managing conversations. + * Create a new Devora session for interacting with AI assistants and managing conversations. */ public create( parameters?: { @@ -1773,7 +1773,7 @@ export class Session2 extends HeyApiClient { /** * Get session * - * Retrieve detailed information about a specific OpenCode session. + * Retrieve detailed information about a specific Devora session. */ public get( parameters: { @@ -4466,7 +4466,7 @@ export class Instance extends HeyApiClient { /** * Dispose instance * - * Clean up and dispose the current OpenCode instance, releasing all resources. + * Clean up and dispose the current Devora instance, releasing all resources. */ public dispose( parameters?: { @@ -4498,7 +4498,7 @@ export class Path extends HeyApiClient { /** * Get paths * - * Retrieve the current working directory and related path information for the OpenCode instance. + * Retrieve the current working directory and related path information for the Devora instance. */ public get( parameters?: { @@ -4594,7 +4594,7 @@ export class Command extends HeyApiClient { /** * List commands * - * Get a list of all available commands in the OpenCode system. + * Get a list of all available commands in the Devora system. */ public list( parameters?: { @@ -4686,12 +4686,12 @@ export class Formatter extends HeyApiClient { } } -export class OpencodeClient extends HeyApiClient { - public static readonly __registry = new HeyApiRegistry() +export class DevoraClient extends HeyApiClient { + public static readonly __registry = new HeyApiRegistry() constructor(args?: { client?: Client; key?: string }) { super(args) - OpencodeClient.__registry.set(this, args?.key) + DevoraClient.__registry.set(this, args?.key) } private _global?: Global diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index c9357161..2def76b5 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -4,6 +4,308 @@ export type ClientOptions = { baseUrl: `${string}://${string}` | (string & {}) } +export type EventServerConnected = { + type: "server.connected" + properties: { + [key: string]: unknown + } +} + +export type EventGlobalDisposed = { + type: "global.disposed" + properties: { + [key: string]: unknown + } +} + +export type EventActorRegistered = { + type: "actor.registered" + properties: { + sessionID: string + actorID: string + mode: "peer" | "subagent" | "main" + parentActorID?: string + description: string + agent: string + background: boolean + } +} + +export type EventActorStatus = { + type: "actor.status" + properties: { + sessionID: string + actorID: string + status: "pending" | "running" | "idle" + lastOutcome?: "success" | "failure" | "cancelled" + turnCount: number + lastTurnTime: number + error?: string + } +} + +export type EventActorStuck = { + type: "actor.stuck" + properties: { + sessionID: string + actorID: string + description: string + lastTurnTime: number + stuckDuration: number + } +} + +export type EventWriterCachePerf = { + type: "writer.cache_perf" + properties: { + sessionID: string + writerActorID: string + status: "completed" | "failed" + total_input_tokens: number + cache_read_tokens: number + cache_write_tokens: number + cache_hit_rate: number + num_llm_calls: number + } +} + +export type EventInboxArrived = { + type: "inbox.arrived" + properties: { + receiverSessionID: string + receiverActorID: string + senderSessionID?: string + senderActorID?: string + inboxID: string + type: string + } +} + +export type EventTaskCreated = { + type: "task.created" + properties: { + sessionID: string + task: { + id: string + session_id: string + parent_task_id?: string + status: "open" | "in_progress" | "blocked" | "done" | "abandoned" + summary: string + owner?: string + created_at: number + last_event_at: number + ended_at?: number + cleanup_after?: number + } + } +} + +export type EventTaskUpdated = { + type: "task.updated" + properties: { + sessionID: string + task: { + id: string + session_id: string + parent_task_id?: string + status: "open" | "in_progress" | "blocked" | "done" | "abandoned" + summary: string + owner?: string + created_at: number + last_event_at: number + ended_at?: number + cleanup_after?: number + } + kind: "started" | "unstarted" | "blocked" | "unblocked" | "done" | "abandoned" | "renamed" + } +} + +export type EventTeamCreated = { + type: "team.created" + properties: { + teamID: string + creatorSessionID: string + } +} + +export type EventTeamMemberJoined = { + type: "team.member.joined" + properties: { + teamID: string + sessionID: string + agent: string + role: string + } +} + +export type EventMetricsModelCall = { + type: "metrics.model_call" + properties: { + sessionID: string + finish_reason: string + ttft_ms?: number + latency_ms: number + cached_read_tokens: number + model_id: string + provider: string + total_tokens_in: number + total_tokens_out: number + } +} + +export type EventMetricsToolCall = { + type: "metrics.tool_call" + properties: { + sessionID: string + tool_name: string + input_bytes: number + output_bytes: number + tool_call_id: string + tool_call_status: "success" | "error" + } +} + +export type EventMetricsAgentRequest = { + type: "metrics.agent_request" + properties: { + sessionID: string + phase: string + task_type: string + surface: string + total_tokens_in: number + total_tokens_out: number + files_changed: number + validation_status: string + } +} + +export type EventTuiPromptAppend = { + type: "tui.prompt.append" + properties: { + text: string + } +} + +export type EventTuiCommandExecute = { + type: "tui.command.execute" + properties: { + command: + | "session.list" + | "session.new" + | "session.share" + | "session.interrupt" + | "session.compact" + | "session.page.up" + | "session.page.down" + | "session.line.up" + | "session.line.down" + | "session.half.page.up" + | "session.half.page.down" + | "session.first" + | "session.last" + | "prompt.clear" + | "prompt.submit" + | "agent.cycle" + | string + } +} + +export type EventTuiToastShow = { + type: "tui.toast.show" + properties: { + title?: string + message: string + variant: "info" | "success" | "warning" | "error" + /** + * Duration in milliseconds + */ + duration?: number + } +} + +export type EventTuiSessionSelect = { + type: "tui.session.select" + properties: { + /** + * Session ID to navigate to + */ + sessionID: string + } +} + +export type EventTuiInstructionsLoaded = { + type: "tui.instructions.loaded" + properties: { + /** + * Display labels of loaded instruction files: worktree-relative path, ~-path, or absolute + */ + files: Array + } +} + +export type EventWorkflowPhase = { + type: "workflow.phase" + properties: { + sessionID: string + runID: string + title: string + } +} + +export type EventWorkflowLog = { + type: "workflow.log" + properties: { + sessionID: string + runID: string + message: string + } +} + +export type EventWorkflowStarted = { + type: "workflow.started" + properties: { + sessionID: string + runID: string + name: string + } +} + +export type EventWorkflowFinished = { + type: "workflow.finished" + properties: { + sessionID: string + runID: string + status: "completed" | "failed" | "cancelled" + error?: string + } +} + +export type EventWorkflowAgentFailed = { + type: "workflow.agent_failed" + properties: { + sessionID: string + runID: string + actorID?: string + agentType: string + label?: string + phase?: string + reason: "over-cap" | "spawn-reject" | "timeout" | "actor-error" | "no-deliverable" + errorMessage?: string + } +} + +export type EventWorkflowChildFailed = { + type: "workflow.child_failed" + properties: { + sessionID: string + runID: string + childRunID: string + name: string + status: "failed" | "cancelled" + error?: string + } +} + export type Project = { id: string worktree: string @@ -40,20 +342,6 @@ export type EventServerInstanceDisposed = { } } -export type EventServerConnected = { - type: "server.connected" - properties: { - [key: string]: unknown - } -} - -export type EventGlobalDisposed = { - type: "global.disposed" - properties: { - [key: string]: unknown - } -} - export type EventFileEdited = { type: "file.edited" properties: { @@ -138,69 +426,6 @@ export type EventPermissionReplied = { } } -export type EventActorRegistered = { - type: "actor.registered" - properties: { - sessionID: string - actorID: string - mode: "peer" | "subagent" | "main" - parentActorID?: string - description: string - agent: string - background: boolean - } -} - -export type EventActorStatus = { - type: "actor.status" - properties: { - sessionID: string - actorID: string - status: "pending" | "running" | "idle" - lastOutcome?: "success" | "failure" | "cancelled" - turnCount: number - lastTurnTime: number - error?: string - } -} - -export type EventActorStuck = { - type: "actor.stuck" - properties: { - sessionID: string - actorID: string - description: string - lastTurnTime: number - stuckDuration: number - } -} - -export type EventWriterCachePerf = { - type: "writer.cache_perf" - properties: { - sessionID: string - writerActorID: string - status: "completed" | "failed" - total_input_tokens: number - cache_read_tokens: number - cache_write_tokens: number - cache_hit_rate: number - num_llm_calls: number - } -} - -export type EventInboxArrived = { - type: "inbox.arrived" - properties: { - receiverSessionID: string - receiverActorID: string - senderSessionID?: string - senderActorID?: string - inboxID: string - type: string - } -} - export type SnapshotFileDiff = { file: string patch: string @@ -402,7 +627,7 @@ export type QuestionInfo = { */ key?: string /** - * Template parameters for i18n interpolation (e.g. { plan: '.mimocode/plans/...' }) + * Template parameters for i18n interpolation (e.g. { plan: '.devora/plans/...' }) */ params?: { [key: string]: string @@ -477,244 +702,82 @@ export type EventBashInteractiveReplied = { type: "bash.interactive.replied" properties: { id: string - output: string - exitCode: number - } -} - -export type EventTeamCreated = { - type: "team.created" - properties: { - teamID: string - creatorSessionID: string - } -} - -export type EventTeamMemberJoined = { - type: "team.member.joined" - properties: { - teamID: string - sessionID: string - agent: string - role: string - } -} - -export type EventTaskCreated = { - type: "task.created" - properties: { - sessionID: string - task: { - id: string - session_id: string - parent_task_id?: string - status: "open" | "in_progress" | "blocked" | "done" | "abandoned" - summary: string - owner?: string - created_at: number - last_event_at: number - ended_at?: number - cleanup_after?: number - } - } -} - -export type EventTaskUpdated = { - type: "task.updated" - properties: { - sessionID: string - task: { - id: string - session_id: string - parent_task_id?: string - status: "open" | "in_progress" | "blocked" | "done" | "abandoned" - summary: string - owner?: string - created_at: number - last_event_at: number - ended_at?: number - cleanup_after?: number - } - kind: "started" | "unstarted" | "blocked" | "unblocked" | "done" | "abandoned" | "renamed" - } -} - -export type Todo = { - /** - * Brief description of the task - */ - content: string - /** - * Current status of the task: pending, in_progress, completed, cancelled - */ - status: string -} - -export type EventTodoUpdated = { - type: "todo.updated" - properties: { - sessionID: string - todos: Array - } -} - -export type SessionStatus = - | { - type: "idle" - } - | { - type: "retry" - attempt: number - message: string - next: number - } - | { - type: "busy" - message?: string - } - -export type EventSessionStatus = { - type: "session.status" - properties: { - sessionID: string - status: SessionStatus - } -} - -export type EventSessionIdle = { - type: "session.idle" - properties: { - sessionID: string - } -} - -export type EventSessionGoal = { - type: "session.goal" - properties: { - sessionID: string - goal?: { - condition: string - } - lastVerdict?: { - ok: boolean - impossible?: boolean - reason: string - attempt: number - messageID?: string - error?: boolean - } - } -} - -export type EventMetricsModelCall = { - type: "metrics.model_call" - properties: { - sessionID: string - finish_reason: string - ttft_ms?: number - latency_ms: number - cached_read_tokens: number - model_id: string - provider: string - total_tokens_in: number - total_tokens_out: number - } -} - -export type EventMetricsToolCall = { - type: "metrics.tool_call" - properties: { - sessionID: string - tool_name: string - input_bytes: number - output_bytes: number - tool_call_id: string - tool_call_status: "success" | "error" - } -} - -export type EventMetricsAgentRequest = { - type: "metrics.agent_request" - properties: { - sessionID: string - phase: string - task_type: string - surface: string - total_tokens_in: number - total_tokens_out: number - files_changed: number - validation_status: string + output: string + exitCode: number } } -export type EventSessionCompacted = { - type: "session.compacted" - properties: { - sessionID: string - } +export type Todo = { + /** + * Brief description of the task + */ + content: string + /** + * Current status of the task: pending, in_progress, completed, cancelled + */ + status: string } -export type EventTuiPromptAppend = { - type: "tui.prompt.append" +export type EventTodoUpdated = { + type: "todo.updated" properties: { - text: string + sessionID: string + todos: Array } } -export type EventTuiCommandExecute = { - type: "tui.command.execute" +export type SessionStatus = + | { + type: "idle" + } + | { + type: "retry" + attempt: number + message: string + next: number + } + | { + type: "busy" + message?: string + } + +export type EventSessionStatus = { + type: "session.status" properties: { - command: - | "session.list" - | "session.new" - | "session.share" - | "session.interrupt" - | "session.compact" - | "session.page.up" - | "session.page.down" - | "session.line.up" - | "session.line.down" - | "session.half.page.up" - | "session.half.page.down" - | "session.first" - | "session.last" - | "prompt.clear" - | "prompt.submit" - | "agent.cycle" - | string + sessionID: string + status: SessionStatus } } -export type EventTuiToastShow = { - type: "tui.toast.show" +export type EventSessionIdle = { + type: "session.idle" properties: { - title?: string - message: string - variant: "info" | "success" | "warning" | "error" - /** - * Duration in milliseconds - */ - duration?: number + sessionID: string } } -export type EventTuiSessionSelect = { - type: "tui.session.select" +export type EventSessionGoal = { + type: "session.goal" properties: { - /** - * Session ID to navigate to - */ sessionID: string + goal?: { + condition: string + } + lastVerdict?: { + ok: boolean + impossible?: boolean + reason: string + attempt: number + messageID?: string + error?: boolean + } } } -export type EventTuiInstructionsLoaded = { - type: "tui.instructions.loaded" +export type EventSessionCompacted = { + type: "session.compacted" properties: { - /** - * Display labels of loaded instruction files: worktree-relative path, ~-path, or absolute - */ - files: Array + sessionID: string } } @@ -804,43 +867,6 @@ export type EventPtyDeleted = { } } -export type EventWorkflowPhase = { - type: "workflow.phase" - properties: { - sessionID: string - runID: string - title: string - } -} - -export type EventWorkflowLog = { - type: "workflow.log" - properties: { - sessionID: string - runID: string - message: string - } -} - -export type EventWorkflowStarted = { - type: "workflow.started" - properties: { - sessionID: string - runID: string - name: string - } -} - -export type EventWorkflowFinished = { - type: "workflow.finished" - properties: { - sessionID: string - runID: string - status: "completed" | "failed" | "cancelled" - error?: string - } -} - export type EventWorkspaceReady = { type: "workspace.ready" properties: { @@ -1472,10 +1498,33 @@ export type GlobalEvent = { project?: string workspace?: string payload: - | EventProjectUpdated - | EventServerInstanceDisposed | EventServerConnected | EventGlobalDisposed + | EventActorRegistered + | EventActorStatus + | EventActorStuck + | EventWriterCachePerf + | EventInboxArrived + | EventTaskCreated + | EventTaskUpdated + | EventTeamCreated + | EventTeamMemberJoined + | EventMetricsModelCall + | EventMetricsToolCall + | EventMetricsAgentRequest + | EventTuiPromptAppend + | EventTuiCommandExecute + | EventTuiToastShow + | EventTuiSessionSelect + | EventTuiInstructionsLoaded + | EventWorkflowPhase + | EventWorkflowLog + | EventWorkflowStarted + | EventWorkflowFinished + | EventWorkflowAgentFailed + | EventWorkflowChildFailed + | EventProjectUpdated + | EventServerInstanceDisposed | EventFileEdited | EventFileWatcherUpdated | EventLspClientDiagnostics @@ -1485,11 +1534,6 @@ export type GlobalEvent = { | EventMessagePartDelta | EventPermissionAsked | EventPermissionReplied - | EventActorRegistered - | EventActorStatus - | EventActorStuck - | EventWriterCachePerf - | EventInboxArrived | EventSessionDiff | EventSessionError | EventSessionRetryAttempt @@ -1502,23 +1546,11 @@ export type GlobalEvent = { | EventSessionCwd | EventBashInteractiveAsked | EventBashInteractiveReplied - | EventTeamCreated - | EventTeamMemberJoined - | EventTaskCreated - | EventTaskUpdated | EventTodoUpdated | EventSessionStatus | EventSessionIdle | EventSessionGoal - | EventMetricsModelCall - | EventMetricsToolCall - | EventMetricsAgentRequest | EventSessionCompacted - | EventTuiPromptAppend - | EventTuiCommandExecute - | EventTuiToastShow - | EventTuiSessionSelect - | EventTuiInstructionsLoaded | EventMcpToolsChanged | EventMcpBrowserOpenFailed | EventCommandExecuted @@ -1529,10 +1561,6 @@ export type GlobalEvent = { | EventPtyUpdated | EventPtyExited | EventPtyDeleted - | EventWorkflowPhase - | EventWorkflowLog - | EventWorkflowStarted - | EventWorkflowFinished | EventWorkspaceReady | EventWorkspaceFailed | EventWorkspaceRestore @@ -1559,7 +1587,7 @@ export type GlobalEvent = { export type LogLevel = "DEBUG" | "INFO" | "WARN" | "ERROR" /** - * Server configuration for mimo serve and web commands + * Server configuration for devora serve and web commands */ export type ServerConfig = { /** @@ -1575,7 +1603,7 @@ export type ServerConfig = { */ mdns?: boolean /** - * Custom domain name for mDNS service (default: opencode.local) + * Custom domain name for mDNS service (default: devora.local) */ mdnsDomain?: string /** @@ -1874,7 +1902,7 @@ export type Config = { logLevel?: LogLevel server?: ServerConfig /** - * Command configuration, see https://opencode.ai/docs/commands + * Command configuration, see https://devora.ai/docs/commands */ command?: { [key: string]: { @@ -1970,7 +1998,7 @@ export type Config = { [key: string]: AgentConfig | undefined } /** - * Agent configuration, see https://opencode.ai/docs/agents + * Agent configuration, see https://devora.ai/docs/agents */ agent?: { plan?: AgentConfig @@ -2156,6 +2184,45 @@ export type Config = { * Whether to reconcile memory state on search operations. Default: true. */ memory_reconcile_on_search?: boolean + /** + * Relative BM25 floor for memory.search (OR-joined query): keep results scoring >= this fraction of the top hit, dropping common-word-only noise. The #1 result is always kept. Default: 0.15. Set 0 to keep all matches. + */ + memory_search_score_floor?: number + } + memory?: { + /** + * Index Claude Code memory (~/.claude/projects//memory) and expose under scope='cc'. Default: false. Note: when enabled, every devora agent (build/explore/subagents) can search these memories via the builtin `memory` tool — including CC's `type: user` (your role/preferences) and `type: feedback` (your guidance) categories. CC originally writes them for future CC sessions; flipping this on widens the consumer set to devora agents on the same machine. Leave disabled (default) if you don't want personal context recallable from a prompt-injection-vulnerable agent. + */ + cc_index?: boolean + } + /** + * Trajectory (conversation history) FTS index configuration. + */ + history?: { + /** + * Which part kinds the history FTS index should cover. Defaults to text (user/assistant) + tool input + tool errors. Add 'reasoning' or 'tool_output' to grow recall at the cost of database size. Note: enabling 'tool_output' reclassifies completed tools from kind='tool_input' to kind='tool_output' (input remains searchable in the body, but kind:['tool_input'] filter will then only match pending/error tools). + */ + kinds?: Array<"user_text" | "assistant_text" | "tool_input" | "tool_error" | "reasoning" | "tool_output"> + } + dream?: { + /** + * Auto-trigger dream memory consolidation on new session start. Default: true. + */ + auto?: boolean + /** + * Minimum days between automatic dream runs. Set to 0 to trigger on every new session. Default: 7. + */ + interval_days?: number + } + distill?: { + /** + * Auto-trigger distill workflow packaging on new session start. Default: true. + */ + auto?: boolean + /** + * Minimum days between automatic distill runs. Default: 30. + */ + interval_days?: number } experimental?: { disable_paste_summary?: boolean @@ -2198,9 +2265,17 @@ export type Config = { */ workflow?: { /** - * Max subagents running concurrently in one workflow run. Default min(16, 2x CPU cores). Hard-capped at 2x cores. + * Process-wide ceiling on subagents running concurrently across ALL workflow runs (including nested children). Default min(16, 2x CPU cores). No upper clamp: the previous 2x-cores hard cap was removed so an operator can match real provider capacity — but that also means a misconfigured value (e.g. an extra zero) can exhaust provider rate limits or host memory. This is the only concurrency ceiling, so set it deliberately. */ maxConcurrentAgents?: number + /** + * Max nesting depth for workflow()-calls-workflow. Default 8. Exceeding it fails the run. + */ + maxDepth?: number + /** + * Hard ceiling on total agents a single workflow run may spawn over its life. Default 1000. Over-cap agent() calls return null (graceful degradation). PER-RUN, not tree-wide: each child workflow has its own independent budget, so a deep nesting can spawn maxDepth × this over the whole tree (concurrent in-flight is still bounded by maxConcurrentAgents). + */ + maxLifecycleAgents?: number /** * Wall-clock budget for a whole workflow script, in milliseconds. Default 12h. The sandbox interrupt handler enforces this as a hard kill-switch. */ @@ -2574,10 +2649,33 @@ export type File = { } export type Event = - | EventProjectUpdated - | EventServerInstanceDisposed | EventServerConnected | EventGlobalDisposed + | EventActorRegistered + | EventActorStatus + | EventActorStuck + | EventWriterCachePerf + | EventInboxArrived + | EventTaskCreated + | EventTaskUpdated + | EventTeamCreated + | EventTeamMemberJoined + | EventMetricsModelCall + | EventMetricsToolCall + | EventMetricsAgentRequest + | EventTuiPromptAppend + | EventTuiCommandExecute + | EventTuiToastShow + | EventTuiSessionSelect + | EventTuiInstructionsLoaded + | EventWorkflowPhase + | EventWorkflowLog + | EventWorkflowStarted + | EventWorkflowFinished + | EventWorkflowAgentFailed + | EventWorkflowChildFailed + | EventProjectUpdated + | EventServerInstanceDisposed | EventFileEdited | EventFileWatcherUpdated | EventLspClientDiagnostics @@ -2587,11 +2685,6 @@ export type Event = | EventMessagePartDelta | EventPermissionAsked | EventPermissionReplied - | EventActorRegistered - | EventActorStatus - | EventActorStuck - | EventWriterCachePerf - | EventInboxArrived | EventSessionDiff | EventSessionError | EventSessionRetryAttempt @@ -2604,23 +2697,11 @@ export type Event = | EventSessionCwd | EventBashInteractiveAsked | EventBashInteractiveReplied - | EventTeamCreated - | EventTeamMemberJoined - | EventTaskCreated - | EventTaskUpdated | EventTodoUpdated | EventSessionStatus | EventSessionIdle | EventSessionGoal - | EventMetricsModelCall - | EventMetricsToolCall - | EventMetricsAgentRequest | EventSessionCompacted - | EventTuiPromptAppend - | EventTuiCommandExecute - | EventTuiToastShow - | EventTuiSessionSelect - | EventTuiInstructionsLoaded | EventMcpToolsChanged | EventMcpBrowserOpenFailed | EventCommandExecuted @@ -2631,10 +2712,6 @@ export type Event = | EventPtyUpdated | EventPtyExited | EventPtyDeleted - | EventWorkflowPhase - | EventWorkflowLog - | EventWorkflowStarted - | EventWorkflowFinished | EventWorkspaceReady | EventWorkspaceFailed | EventWorkspaceRestore diff --git a/packages/sdk/js/src/v2/index.ts b/packages/sdk/js/src/v2/index.ts index 9615eacc..3f98f3a0 100644 --- a/packages/sdk/js/src/v2/index.ts +++ b/packages/sdk/js/src/v2/index.ts @@ -1,18 +1,18 @@ export * from "./client.js" export * from "./server.js" -import { createOpencodeClient } from "./client.js" -import { createOpencodeServer } from "./server.js" +import { createDevoraClient } from "./client.js" +import { createDevoraServer } from "./server.js" import type { ServerOptions } from "./server.js" export * as data from "./data.js" -export async function createOpencode(options?: ServerOptions) { - const server = await createOpencodeServer({ +export async function createDevora(options?: ServerOptions) { + const server = await createDevoraServer({ ...options, }) - const client = createOpencodeClient({ + const client = createDevoraClient({ baseUrl: server.url, }) diff --git a/packages/sdk/js/src/v2/server.ts b/packages/sdk/js/src/v2/server.ts index 48f1a253..dbc3f17d 100644 --- a/packages/sdk/js/src/v2/server.ts +++ b/packages/sdk/js/src/v2/server.ts @@ -19,7 +19,7 @@ export type TuiOptions = { config?: Config } -export async function createOpencodeServer(options?: ServerOptions) { +export async function createDevoraServer(options?: ServerOptions) { options = Object.assign( { hostname: "127.0.0.1", @@ -32,10 +32,10 @@ export async function createOpencodeServer(options?: ServerOptions) { const args = [`serve`, `--hostname=${options.hostname}`, `--port=${options.port}`] if (options.config?.logLevel) args.push(`--log-level=${options.config.logLevel}`) - const proc = launch(`opencode`, args, { + const proc = launch(`devora`, args, { env: { ...process.env, - OPENCODE_CONFIG_CONTENT: JSON.stringify(options.config ?? {}), + DEVORA_CONFIG_CONTENT: JSON.stringify(options.config ?? {}), }, }) let clear = () => {} @@ -53,7 +53,7 @@ export async function createOpencodeServer(options?: ServerOptions) { output += chunk.toString() const lines = output.split("\n") for (const line of lines) { - if (line.startsWith("opencode server listening")) { + if (line.startsWith("devora server listening")) { const match = line.match(/on\s+(https?:\/\/[^\s]+)/) if (!match) { clear() @@ -99,7 +99,7 @@ export async function createOpencodeServer(options?: ServerOptions) { } } -export function createOpencodeTui(options?: TuiOptions) { +export function createDevoraTui(options?: TuiOptions) { const args = [] if (options?.project) { @@ -115,11 +115,11 @@ export function createOpencodeTui(options?: TuiOptions) { args.push(`--agent=${options.agent}`) } - const proc = launch(`opencode`, args, { + const proc = launch(`devora`, args, { stdio: "inherit", env: { ...process.env, - OPENCODE_CONFIG_CONTENT: JSON.stringify(options?.config ?? {}), + DEVORA_CONFIG_CONTENT: JSON.stringify(options?.config ?? {}), }, }) diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 662eef8c..f4ffb231 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -1,8 +1,8 @@ { "openapi": "3.1.1", "info": { - "title": "opencode", - "description": "opencode api", + "title": "devora", + "description": "devora api", "version": "1.0.0" }, "paths": { @@ -10,7 +10,7 @@ "get": { "operationId": "global.health", "summary": "Get health", - "description": "Get health information about the OpenCode server.", + "description": "Get health information about the Devora server.", "responses": { "200": { "description": "Health information", @@ -36,7 +36,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.health({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.global.health({\n ...\n})" } ] } @@ -45,7 +45,7 @@ "get": { "operationId": "global.event", "summary": "Get global events", - "description": "Subscribe to global events from the OpenCode system using server-sent events.", + "description": "Subscribe to global events from the Devora system using server-sent events.", "responses": { "200": { "description": "Event stream", @@ -61,7 +61,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.event({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.global.event({\n ...\n})" } ] } @@ -70,7 +70,7 @@ "get": { "operationId": "global.config.get", "summary": "Get global configuration", - "description": "Retrieve the current global OpenCode configuration settings and preferences.", + "description": "Retrieve the current global Devora configuration settings and preferences.", "responses": { "200": { "description": "Get global config info", @@ -86,14 +86,14 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.config.get({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.global.config.get({\n ...\n})" } ] }, "patch": { "operationId": "global.config.update", "summary": "Update global configuration", - "description": "Update global OpenCode configuration settings and preferences.", + "description": "Update global Devora configuration settings and preferences.", "responses": { "200": { "description": "Successfully updated global config", @@ -128,7 +128,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.config.update({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.global.config.update({\n ...\n})" } ] } @@ -137,7 +137,7 @@ "post": { "operationId": "global.dispose", "summary": "Dispose instance", - "description": "Clean up and dispose all OpenCode instances, releasing all resources.", + "description": "Clean up and dispose all Devora instances, releasing all resources.", "responses": { "200": { "description": "Global disposed", @@ -153,7 +153,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.dispose({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.global.dispose({\n ...\n})" } ] } @@ -161,8 +161,8 @@ "/global/upgrade": { "post": { "operationId": "global.upgrade", - "summary": "Upgrade opencode", - "description": "Upgrade opencode to the specified version or latest if not specified.", + "summary": "Upgrade devora", + "description": "Upgrade devora to the specified version or latest if not specified.", "responses": { "200": { "description": "Upgrade result", @@ -229,7 +229,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.upgrade({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.global.upgrade({\n ...\n})" } ] } @@ -283,7 +283,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.set({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.auth.set({\n ...\n})" } ] }, @@ -326,7 +326,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.remove({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.auth.remove({\n ...\n})" } ] } @@ -410,7 +410,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.log({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.app.log({\n ...\n})" } ] } @@ -466,7 +466,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.workspace.adaptor.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.workspace.adaptor.list({\n ...\n})" } ] } @@ -554,7 +554,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.workspace.create({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.workspace.create({\n ...\n})" } ] }, @@ -596,7 +596,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.workspace.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.workspace.list({\n ...\n})" } ] } @@ -651,7 +651,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.workspace.status({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.workspace.status({\n ...\n})" } ] } @@ -711,7 +711,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.workspace.remove({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.workspace.remove({\n ...\n})" } ] } @@ -795,7 +795,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.workspace.sessionRestore({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.workspace.sessionRestore({\n ...\n})" } ] } @@ -820,7 +820,7 @@ } ], "summary": "List all projects", - "description": "Get a list of projects that have been opened with OpenCode.", + "description": "Get a list of projects that have been opened with Devora.", "responses": { "200": { "description": "List of projects", @@ -839,7 +839,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.project.list({\n ...\n})" } ] } @@ -864,7 +864,7 @@ } ], "summary": "Get current project", - "description": "Retrieve the currently active project that OpenCode is working with.", + "description": "Retrieve the currently active project that Devora is working with.", "responses": { "200": { "description": "Current project information", @@ -880,7 +880,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.current({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.project.current({\n ...\n})" } ] } @@ -921,7 +921,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.initGit({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.project.initGit({\n ...\n})" } ] } @@ -1027,7 +1027,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.update({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.project.update({\n ...\n})" } ] } @@ -1052,7 +1052,7 @@ } ], "summary": "List PTY sessions", - "description": "Get a list of all active pseudo-terminal (PTY) sessions managed by OpenCode.", + "description": "Get a list of all active pseudo-terminal (PTY) sessions managed by Devora.", "responses": { "200": { "description": "List of sessions", @@ -1071,7 +1071,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.pty.list({\n ...\n})" } ] }, @@ -1155,7 +1155,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.create({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.pty.create({\n ...\n})" } ] } @@ -1215,7 +1215,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.get({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.pty.get({\n ...\n})" } ] }, @@ -1299,7 +1299,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.update({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.pty.update({\n ...\n})" } ] }, @@ -1357,7 +1357,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.remove({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.pty.remove({\n ...\n})" } ] } @@ -1417,7 +1417,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.connect({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.pty.connect({\n ...\n})" } ] } @@ -1442,7 +1442,7 @@ } ], "summary": "Get configuration", - "description": "Retrieve the current OpenCode configuration settings and preferences.", + "description": "Retrieve the current Devora configuration settings and preferences.", "responses": { "200": { "description": "Get config info", @@ -1458,7 +1458,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.get({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.config.get({\n ...\n})" } ] }, @@ -1481,7 +1481,7 @@ } ], "summary": "Update configuration", - "description": "Update OpenCode configuration settings and preferences.", + "description": "Update Devora configuration settings and preferences.", "responses": { "200": { "description": "Successfully updated config", @@ -1516,7 +1516,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.update({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.config.update({\n ...\n})" } ] } @@ -1575,7 +1575,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.providers({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.config.providers({\n ...\n})" } ] } @@ -1616,7 +1616,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.console.get({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.console.get({\n ...\n})" } ] } @@ -1687,7 +1687,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.console.listOrgs({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.console.listOrgs({\n ...\n})" } ] } @@ -1712,7 +1712,7 @@ } ], "summary": "Switch active Console org", - "description": "Persist a new active Console account/org selection for the current local OpenCode state.", + "description": "Persist a new active Console account/org selection for the current local Devora state.", "responses": { "200": { "description": "Switch success", @@ -1746,7 +1746,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.console.switchOrg({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.console.switchOrg({\n ...\n})" } ] } @@ -1797,7 +1797,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tool.ids({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tool.ids({\n ...\n})" } ] } @@ -1864,7 +1864,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tool.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tool.list({\n ...\n})" } ] } @@ -1924,7 +1924,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.create({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.worktree.create({\n ...\n})" } ] }, @@ -1966,7 +1966,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.worktree.list({\n ...\n})" } ] }, @@ -2024,7 +2024,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.remove({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.worktree.remove({\n ...\n})" } ] } @@ -2084,7 +2084,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.reset({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.worktree.reset({\n ...\n})" } ] } @@ -2158,7 +2158,7 @@ } ], "summary": "List sessions", - "description": "Get a list of all OpenCode sessions across projects, sorted by most recently updated. Archived sessions are excluded by default.", + "description": "Get a list of all Devora sessions across projects, sorted by most recently updated. Archived sessions are excluded by default.", "responses": { "200": { "description": "List of sessions", @@ -2177,7 +2177,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.session.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.session.list({\n ...\n})" } ] } @@ -2224,7 +2224,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.resource.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.experimental.resource.list({\n ...\n})" } ] } @@ -2282,7 +2282,7 @@ } ], "summary": "List sessions", - "description": "Get a list of all OpenCode sessions, sorted by most recently updated.", + "description": "Get a list of all Devora sessions, sorted by most recently updated.", "responses": { "200": { "description": "List of sessions", @@ -2301,7 +2301,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.list({\n ...\n})" } ] }, @@ -2324,7 +2324,7 @@ } ], "summary": "Create session", - "description": "Create a new OpenCode session for interacting with AI assistants and managing conversations.", + "description": "Create a new Devora session for interacting with AI assistants and managing conversations.", "responses": { "200": { "description": "Successfully created session", @@ -2383,7 +2383,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.create({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.create({\n ...\n})" } ] } @@ -2440,7 +2440,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.status({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.status({\n ...\n})" } ] } @@ -2474,7 +2474,7 @@ } ], "summary": "Get session", - "description": "Retrieve detailed information about a specific OpenCode session.", + "description": "Retrieve detailed information about a specific Devora session.", "tags": ["Session"], "responses": { "200": { @@ -2511,7 +2511,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.get({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.get({\n ...\n})" } ] }, @@ -2579,7 +2579,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.delete({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.delete({\n ...\n})" } ] }, @@ -2672,7 +2672,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.update({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.update({\n ...\n})" } ] } @@ -2746,7 +2746,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.children({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.children({\n ...\n})" } ] } @@ -2819,7 +2819,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.todo({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.todo({\n ...\n})" } ] } @@ -2929,7 +2929,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.task({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.task({\n ...\n})" } ] } @@ -3021,7 +3021,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.init({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.init({\n ...\n})" } ] } @@ -3086,7 +3086,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.fork({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.fork({\n ...\n})" } ] } @@ -3156,7 +3156,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.abort({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.abort({\n ...\n})" } ] } @@ -3226,7 +3226,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.share({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.share({\n ...\n})" } ] }, @@ -3294,7 +3294,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.unshare({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.unshare({\n ...\n})" } ] } @@ -3355,7 +3355,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.diff({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.diff({\n ...\n})" } ] } @@ -3447,7 +3447,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.summarize({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.summarize({\n ...\n})" } ] } @@ -3557,7 +3557,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.messages({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.messages({\n ...\n})" } ] }, @@ -3737,7 +3737,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.prompt({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.prompt({\n ...\n})" } ] } @@ -3828,7 +3828,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.message({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.message({\n ...\n})" } ] }, @@ -3905,7 +3905,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.deleteMessage({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.deleteMessage({\n ...\n})" } ] } @@ -3992,7 +3992,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.part.delete({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.part.delete({\n ...\n})" } ] }, @@ -4086,7 +4086,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.part.update({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.part.update({\n ...\n})" } ] } @@ -4239,7 +4239,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.prompt_async({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.prompt_async({\n ...\n})" } ] } @@ -4385,7 +4385,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.command({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.command({\n ...\n})" } ] } @@ -4461,7 +4461,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.predict({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.predict({\n ...\n})" } ] } @@ -4581,7 +4581,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.shell({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.shell({\n ...\n})" } ] } @@ -4671,7 +4671,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.revert({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.revert({\n ...\n})" } ] } @@ -4741,7 +4741,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.unrevert({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.unrevert({\n ...\n})" } ] } @@ -4837,7 +4837,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.respond({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.permission.respond({\n ...\n})" } ] } @@ -4900,7 +4900,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.actors({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.session.actors({\n ...\n})" } ] } @@ -4989,7 +4989,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.reply({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.permission.reply({\n ...\n})" } ] } @@ -5033,7 +5033,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.permission.list({\n ...\n})" } ] } @@ -5084,7 +5084,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.workflow.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.workflow.list({\n ...\n})" } ] } @@ -5143,7 +5143,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.workflow.resume({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.workflow.resume({\n ...\n})" } ] } @@ -5187,7 +5187,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.question.list({\n ...\n})" } ] } @@ -5228,7 +5228,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.neverAsk({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.question.neverAsk({\n ...\n})" } ] }, @@ -5293,7 +5293,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.setNeverAsk({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.question.setNeverAsk({\n ...\n})" } ] } @@ -5382,7 +5382,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.reply({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.question.reply({\n ...\n})" } ] } @@ -5452,7 +5452,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.reject({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.question.reject({\n ...\n})" } ] } @@ -5511,7 +5511,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.bash.interactive.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.bash.interactive.list({\n ...\n})" } ] } @@ -5600,7 +5600,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.bash.interactive.reply({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.bash.interactive.reply({\n ...\n})" } ] } @@ -5665,7 +5665,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.provider.list({\n ...\n})" } ] } @@ -5715,7 +5715,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.auth({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.provider.auth({\n ...\n})" } ] } @@ -5801,7 +5801,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.oauth.authorize({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.provider.oauth.authorize({\n ...\n})" } ] } @@ -5881,7 +5881,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.oauth.callback({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.provider.oauth.callback({\n ...\n})" } ] } @@ -5922,7 +5922,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.sync.start({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.sync.start({\n ...\n})" } ] } @@ -6025,7 +6025,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.sync.replay({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.sync.replay({\n ...\n})" } ] } @@ -6118,7 +6118,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.sync.history.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.sync.history.list({\n ...\n})" } ] } @@ -6221,7 +6221,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.text({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.find.text({\n ...\n})" } ] } @@ -6298,7 +6298,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.files({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.find.files({\n ...\n})" } ] } @@ -6350,7 +6350,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.symbols({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.find.symbols({\n ...\n})" } ] } @@ -6402,7 +6402,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.file.list({\n ...\n})" } ] } @@ -6451,7 +6451,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.read({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.file.read({\n ...\n})" } ] } @@ -6495,7 +6495,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.status({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.file.status({\n ...\n})" } ] } @@ -6536,7 +6536,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.event.subscribe({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.event.subscribe({\n ...\n})" } ] } @@ -6583,7 +6583,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.status({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.mcp.status({\n ...\n})" } ] }, @@ -6663,7 +6663,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.add({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.mcp.add({\n ...\n})" } ] } @@ -6739,7 +6739,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.start({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.mcp.auth.start({\n ...\n})" } ] }, @@ -6803,7 +6803,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.remove({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.mcp.auth.remove({\n ...\n})" } ] } @@ -6888,7 +6888,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.callback({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.mcp.auth.callback({\n ...\n})" } ] } @@ -6957,7 +6957,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.authenticate({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.mcp.auth.authenticate({\n ...\n})" } ] } @@ -7005,7 +7005,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.connect({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.mcp.connect({\n ...\n})" } ] } @@ -7053,7 +7053,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.disconnect({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.mcp.disconnect({\n ...\n})" } ] } @@ -7119,7 +7119,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.appendPrompt({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.appendPrompt({\n ...\n})" } ] } @@ -7160,7 +7160,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openHelp({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.openHelp({\n ...\n})" } ] } @@ -7201,7 +7201,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openSessions({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.openSessions({\n ...\n})" } ] } @@ -7242,7 +7242,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openThemes({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.openThemes({\n ...\n})" } ] } @@ -7283,7 +7283,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openModels({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.openModels({\n ...\n})" } ] } @@ -7324,7 +7324,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.submitPrompt({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.submitPrompt({\n ...\n})" } ] } @@ -7365,7 +7365,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.clearPrompt({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.clearPrompt({\n ...\n})" } ] } @@ -7431,7 +7431,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.executeCommand({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.executeCommand({\n ...\n})" } ] } @@ -7499,7 +7499,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.showToast({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.showToast({\n ...\n})" } ] } @@ -7575,7 +7575,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.publish({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.publish({\n ...\n})" } ] } @@ -7653,7 +7653,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.selectSession({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.selectSession({\n ...\n})" } ] } @@ -7701,7 +7701,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.control.next({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.control.next({\n ...\n})" } ] } @@ -7749,7 +7749,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.control.response({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.tui.control.response({\n ...\n})" } ] } @@ -7774,7 +7774,7 @@ } ], "summary": "Dispose instance", - "description": "Clean up and dispose the current OpenCode instance, releasing all resources.", + "description": "Clean up and dispose the current Devora instance, releasing all resources.", "responses": { "200": { "description": "Instance disposed", @@ -7790,7 +7790,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.instance.dispose({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.instance.dispose({\n ...\n})" } ] } @@ -7815,7 +7815,7 @@ } ], "summary": "Get paths", - "description": "Retrieve the current working directory and related path information for the OpenCode instance.", + "description": "Retrieve the current working directory and related path information for the Devora instance.", "responses": { "200": { "description": "Path", @@ -7831,7 +7831,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.path.get({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.path.get({\n ...\n})" } ] } @@ -7872,7 +7872,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.vcs.get({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.vcs.get({\n ...\n})" } ] } @@ -7925,7 +7925,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.vcs.diff({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.vcs.diff({\n ...\n})" } ] } @@ -7950,7 +7950,7 @@ } ], "summary": "List commands", - "description": "Get a list of all available commands in the OpenCode system.", + "description": "Get a list of all available commands in the Devora system.", "responses": { "200": { "description": "List of commands", @@ -7969,7 +7969,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.command.list({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.command.list({\n ...\n})" } ] } @@ -7994,7 +7994,7 @@ } ], "summary": "List agents", - "description": "Get a list of all available AI agents in the OpenCode system.", + "description": "Get a list of all available AI agents in the Devora system.", "responses": { "200": { "description": "List of agents", @@ -8013,7 +8013,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.agents({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.app.agents({\n ...\n})" } ] } @@ -8038,7 +8038,7 @@ } ], "summary": "List skills", - "description": "Get a list of all available skills in the OpenCode system.", + "description": "Get a list of all available skills in the Devora system.", "responses": { "200": { "description": "List of skills", @@ -8075,7 +8075,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.skills({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.app.skills({\n ...\n})" } ] } @@ -8119,7 +8119,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.lsp.status({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.lsp.status({\n ...\n})" } ] } @@ -8163,7 +8163,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@mimo-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.formatter.status({\n ...\n})" + "source": "import { createDevoraClient } from \"@devora-ai/sdk\n\nconst client = createDevoraClient()\nawait client.formatter.status({\n ...\n})" } ] } @@ -9271,7 +9271,7 @@ "type": "string" }, "params": { - "description": "Template parameters for i18n interpolation (e.g. { plan: '.mimocode/plans/...' })", + "description": "Template parameters for i18n interpolation (e.g. { plan: '.devora/plans/...' })", "type": "object", "propertyNames": { "type": "string" @@ -12815,7 +12815,7 @@ "enum": ["DEBUG", "INFO", "WARN", "ERROR"] }, "ServerConfig": { - "description": "Server configuration for mimo serve and web commands", + "description": "Server configuration for devora serve and web commands", "type": "object", "properties": { "port": { @@ -12833,7 +12833,7 @@ "type": "boolean" }, "mdnsDomain": { - "description": "Custom domain name for mDNS service (default: opencode.local)", + "description": "Custom domain name for mDNS service (default: devora.local)", "type": "string" }, "cors": { @@ -13403,7 +13403,7 @@ "$ref": "#/components/schemas/ServerConfig" }, "command": { - "description": "Command configuration, see https://opencode.ai/docs/commands", + "description": "Command configuration, see https://devora.ai/docs/commands", "type": "object", "propertyNames": { "type": "string" @@ -13586,7 +13586,7 @@ } }, "agent": { - "description": "Agent configuration, see https://opencode.ai/docs/agents", + "description": "Agent configuration, see https://devora.ai/docs/agents", "type": "object", "properties": { "plan": { diff --git a/packages/shared/package.json b/packages/shared/package.json index 08b109be..fc575bdb 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "version": "0.1.0", - "name": "@mimo-ai/shared", + "name": "@devora-ai/shared", "type": "module", "license": "MIT", "publishConfig": { @@ -13,7 +13,7 @@ "typecheck": "tsgo --noEmit" }, "bin": { - "opencode": "./bin/opencode" + "devora": "./bin/devora" }, "exports": { "./*": "./src/*.ts" diff --git a/packages/shared/src/filesystem.ts b/packages/shared/src/filesystem.ts index 44346be8..5b985f8f 100644 --- a/packages/shared/src/filesystem.ts +++ b/packages/shared/src/filesystem.ts @@ -36,7 +36,7 @@ export namespace AppFileSystem { readonly globMatch: (pattern: string, filepath: string) => boolean } - export class Service extends Context.Service()("@opencode/FileSystem") {} + export class Service extends Context.Service()("@devora/FileSystem") {} export const layer = Layer.effect( Service, diff --git a/packages/shared/src/global.ts b/packages/shared/src/global.ts index 46b51a37..31c1c3a3 100644 --- a/packages/shared/src/global.ts +++ b/packages/shared/src/global.ts @@ -3,10 +3,10 @@ import { xdgData, xdgCache, xdgConfig, xdgState } from "xdg-basedir" import os from "os" import { Context, Effect, Layer } from "effect" -const APP = "mimocode" +const APP = "devora" export type ResolvedPaths = { - mode: "mimocode_home" | "xdg" + mode: "devora_home" | "xdg" root?: string data: string cache: string @@ -15,24 +15,24 @@ export type ResolvedPaths = { } /** - * Resolve mimocode's four base directories (config/data/state/cache) + * Resolve devora's four base directories (config/data/state/cache) * from environment variables. * - * If MIMOCODE_HOME is set and non-empty, the four paths are subdirectories + * If DEVORA_HOME is set and non-empty, the four paths are subdirectories * of it. Otherwise, falls through to XDG Base Directory defaults. * - * @throws if MIMOCODE_HOME is set but not an absolute path + * @throws if DEVORA_HOME is set but not an absolute path */ -export function resolveMimocodeHome(env: NodeJS.ProcessEnv = process.env): ResolvedPaths { - const home = env.MIMOCODE_HOME +export function resolveDevoraHome(env: NodeJS.ProcessEnv = process.env): ResolvedPaths { + const home = env.DEVORA_HOME if (home) { if (!path.isAbsolute(home)) { throw new Error( - `MIMOCODE_HOME must be an absolute path, got: ${JSON.stringify(home)}`, + `DEVORA_HOME must be an absolute path, got: ${JSON.stringify(home)}`, ) } return { - mode: "mimocode_home", + mode: "devora_home", root: home, data: path.join(home, "data"), cache: path.join(home, "cache"), @@ -50,7 +50,7 @@ export function resolveMimocodeHome(env: NodeJS.ProcessEnv = process.env): Resol } export namespace Global { - export class Service extends Context.Service()("@opencode/Global") {} + export class Service extends Context.Service()("@devora/Global") {} export interface Interface { readonly home: string @@ -66,7 +66,7 @@ export namespace Global { Service, Effect.gen(function* () { const home = process.env.HOME || process.env.USERPROFILE || os.homedir() - const { data, cache, config, state } = yield* Effect.sync(() => resolveMimocodeHome()) + const { data, cache, config, state } = yield* Effect.sync(() => resolveDevoraHome()) const bin = path.join(cache, "bin") const log = path.join(data, "log") diff --git a/packages/shared/test/filesystem/filesystem.test.ts b/packages/shared/test/filesystem/filesystem.test.ts index c5fca58c..a616b3bd 100644 --- a/packages/shared/test/filesystem/filesystem.test.ts +++ b/packages/shared/test/filesystem/filesystem.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect } from "bun:test" import { Effect, Layer, FileSystem } from "effect" import { NodeFileSystem } from "@effect/platform-node" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" +import { AppFileSystem } from "@devora-ai/shared/filesystem" import { testEffect } from "../lib/effect" import path from "path" diff --git a/packages/shared/test/fixture/effect-flock-worker.ts b/packages/shared/test/fixture/effect-flock-worker.ts index 601a1fa6..6d8c5cd4 100644 --- a/packages/shared/test/fixture/effect-flock-worker.ts +++ b/packages/shared/test/fixture/effect-flock-worker.ts @@ -1,9 +1,9 @@ import fs from "fs/promises" import os from "os" import { Effect, Layer } from "effect" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" -import { EffectFlock } from "@mimo-ai/shared/util/effect-flock" -import { Global } from "@mimo-ai/shared/global" +import { AppFileSystem } from "@devora-ai/shared/filesystem" +import { EffectFlock } from "@devora-ai/shared/util/effect-flock" +import { Global } from "@devora-ai/shared/global" type Msg = { key: string diff --git a/packages/shared/test/fixture/flock-worker.ts b/packages/shared/test/fixture/flock-worker.ts index 7dadd365..1ee5e766 100644 --- a/packages/shared/test/fixture/flock-worker.ts +++ b/packages/shared/test/fixture/flock-worker.ts @@ -1,5 +1,5 @@ import fs from "fs/promises" -import { Flock } from "@mimo-ai/shared/util/flock" +import { Flock } from "@devora-ai/shared/util/flock" type Msg = { key: string diff --git a/packages/shared/test/global.test.ts b/packages/shared/test/global.test.ts index 6e3df2b0..00413511 100644 --- a/packages/shared/test/global.test.ts +++ b/packages/shared/test/global.test.ts @@ -1,13 +1,13 @@ import { describe, expect, test } from "bun:test" import path from "path" -import { resolveMimocodeHome } from "@mimo-ai/shared/global" +import { resolveDevoraHome } from "@devora-ai/shared/global" -describe("resolveMimocodeHome", () => { - test("with MIMOCODE_HOME set, resolves 4 subdirs under root", () => { - const result = resolveMimocodeHome({ - MIMOCODE_HOME: "/tmp/profile-a", +describe("resolveDevoraHome", () => { + test("with DEVORA_HOME set, resolves 4 subdirs under root", () => { + const result = resolveDevoraHome({ + DEVORA_HOME: "/tmp/profile-a", }) - expect(result.mode).toBe("mimocode_home") + expect(result.mode).toBe("devora_home") expect(result.root).toBe("/tmp/profile-a") expect(result.config).toBe(path.join("/tmp/profile-a", "config")) expect(result.data).toBe(path.join("/tmp/profile-a", "data")) @@ -15,39 +15,39 @@ describe("resolveMimocodeHome", () => { expect(result.cache).toBe(path.join("/tmp/profile-a", "cache")) }) - test("without MIMOCODE_HOME, falls through to xdg mode", () => { - const result = resolveMimocodeHome({}) + test("without DEVORA_HOME, falls through to xdg mode", () => { + const result = resolveDevoraHome({}) expect(result.mode).toBe("xdg") expect(result.root).toBeUndefined() - // xdg paths end with "/mimocode" - expect(result.config.endsWith(path.join("", "mimocode"))).toBe(true) - expect(result.data.endsWith(path.join("", "mimocode"))).toBe(true) - expect(result.state.endsWith(path.join("", "mimocode"))).toBe(true) - expect(result.cache.endsWith(path.join("", "mimocode"))).toBe(true) + // xdg paths end with "/devora" + expect(result.config.endsWith(path.join("", "devora"))).toBe(true) + expect(result.data.endsWith(path.join("", "devora"))).toBe(true) + expect(result.state.endsWith(path.join("", "devora"))).toBe(true) + expect(result.cache.endsWith(path.join("", "devora"))).toBe(true) }) - test("empty MIMOCODE_HOME string is treated as unset (xdg mode)", () => { - const result = resolveMimocodeHome({ MIMOCODE_HOME: "" }) + test("empty DEVORA_HOME string is treated as unset (xdg mode)", () => { + const result = resolveDevoraHome({ DEVORA_HOME: "" }) expect(result.mode).toBe("xdg") }) - test("relative MIMOCODE_HOME path throws with clear error", () => { - expect(() => resolveMimocodeHome({ MIMOCODE_HOME: "./foo" })).toThrow( - /MIMOCODE_HOME must be an absolute path/, + test("relative DEVORA_HOME path throws with clear error", () => { + expect(() => resolveDevoraHome({ DEVORA_HOME: "./foo" })).toThrow( + /DEVORA_HOME must be an absolute path/, ) - expect(() => resolveMimocodeHome({ MIMOCODE_HOME: "foo/bar" })).toThrow( - /MIMOCODE_HOME must be an absolute path/, + expect(() => resolveDevoraHome({ DEVORA_HOME: "foo/bar" })).toThrow( + /DEVORA_HOME must be an absolute path/, ) }) - test("tilde-prefixed MIMOCODE_HOME throws (not treated as absolute)", () => { - expect(() => resolveMimocodeHome({ MIMOCODE_HOME: "~/profiles/a" })).toThrow( - /MIMOCODE_HOME must be an absolute path/, + test("tilde-prefixed DEVORA_HOME throws (not treated as absolute)", () => { + expect(() => resolveDevoraHome({ DEVORA_HOME: "~/profiles/a" })).toThrow( + /DEVORA_HOME must be an absolute path/, ) }) test("error message includes the offending value", () => { - expect(() => resolveMimocodeHome({ MIMOCODE_HOME: "./relative" })).toThrow( + expect(() => resolveDevoraHome({ DEVORA_HOME: "./relative" })).toThrow( /\.\/relative/, ) }) diff --git a/packages/shared/test/util/effect-flock.test.ts b/packages/shared/test/util/effect-flock.test.ts index 22975bc6..862a2c50 100644 --- a/packages/shared/test/util/effect-flock.test.ts +++ b/packages/shared/test/util/effect-flock.test.ts @@ -5,10 +5,10 @@ import path from "path" import os from "os" import { Cause, Effect, Exit, Layer } from "effect" import { testEffect } from "../lib/effect" -import { AppFileSystem } from "@mimo-ai/shared/filesystem" -import { EffectFlock } from "@mimo-ai/shared/util/effect-flock" -import { Global } from "@mimo-ai/shared/global" -import { Hash } from "@mimo-ai/shared/util/hash" +import { AppFileSystem } from "@devora-ai/shared/filesystem" +import { EffectFlock } from "@devora-ai/shared/util/effect-flock" +import { Global } from "@devora-ai/shared/global" +import { Hash } from "@devora-ai/shared/util/hash" function lock(dir: string, key: string) { return path.join(dir, Hash.fast(key) + ".lock") diff --git a/packages/shared/test/util/flock.test.ts b/packages/shared/test/util/flock.test.ts index 1c8fc4c0..ae17f019 100644 --- a/packages/shared/test/util/flock.test.ts +++ b/packages/shared/test/util/flock.test.ts @@ -3,8 +3,8 @@ import fs from "fs/promises" import { spawn } from "child_process" import path from "path" import os from "os" -import { Flock } from "@mimo-ai/shared/util/flock" -import { Hash } from "@mimo-ai/shared/util/hash" +import { Flock } from "@devora-ai/shared/util/flock" +import { Hash } from "@devora-ai/shared/util/hash" type Msg = { key: string diff --git a/packages/slack/README.md b/packages/slack/README.md index 49610107..942d1ca2 100644 --- a/packages/slack/README.md +++ b/packages/slack/README.md @@ -1,6 +1,6 @@ -# @mimo-ai/slack +# @devora-ai/slack -Slack bot integration for opencode that creates threaded conversations. +Slack bot integration for devora that creates threaded conversations. ## Setup @@ -24,4 +24,4 @@ Slack bot integration for opencode that creates threaded conversations. bun dev ``` -The bot will respond to messages in channels where it's added, creating separate opencode sessions for each thread. +The bot will respond to messages in channels where it's added, creating separate devora sessions for each thread. diff --git a/packages/slack/package.json b/packages/slack/package.json index 7335cb61..f7f018d1 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,5 +1,5 @@ { - "name": "@mimo-ai/slack", + "name": "@devora-ai/slack", "version": "0.1.0", "type": "module", "license": "MIT", @@ -8,7 +8,7 @@ "typecheck": "tsgo --noEmit" }, "dependencies": { - "@mimo-ai/sdk": "workspace:*", + "@devora-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1" }, "devDependencies": { diff --git a/packages/slack/src/index.ts b/packages/slack/src/index.ts index 29be2000..9495253b 100644 --- a/packages/slack/src/index.ts +++ b/packages/slack/src/index.ts @@ -1,5 +1,5 @@ import { App } from "@slack/bolt" -import { createOpencode, type ToolPart } from "@mimo-ai/sdk" +import { createDevora, type ToolPart } from "@devora-ai/sdk" const app = new App({ token: process.env.SLACK_BOT_TOKEN, @@ -13,15 +13,15 @@ console.log("- Bot token present:", !!process.env.SLACK_BOT_TOKEN) console.log("- Signing secret present:", !!process.env.SLACK_SIGNING_SECRET) console.log("- App token present:", !!process.env.SLACK_APP_TOKEN) -console.log("🚀 Starting opencode server...") -const opencode = await createOpencode({ +console.log("🚀 Starting devora server...") +const devora = await createDevora({ port: 0, }) -console.log("✅ Opencode server ready") +console.log("✅ Devora server ready") const sessions = new Map() void (async () => { - const events = await opencode.client.event.subscribe() + const events = await devora.client.event.subscribe() for await (const event of events.stream) { if (event.type === "message.part.updated") { const part = event.properties.part @@ -72,8 +72,8 @@ app.message(async ({ message, say }) => { let session = sessions.get(sessionKey) if (!session) { - console.log("🆕 Creating new opencode session...") - const { client, server } = opencode + console.log("🆕 Creating new devora session...") + const { client, server } = devora const createResult = await client.session.create({ body: { title: `Slack thread ${thread}` }, @@ -88,7 +88,7 @@ app.message(async ({ message, say }) => { return } - console.log("✅ Created opencode session:", createResult.data.id) + console.log("✅ Created devora session:", createResult.data.id) session = { client, server, sessionId: createResult.data.id, channel, thread } sessions.set(sessionKey, session) @@ -101,13 +101,13 @@ app.message(async ({ message, say }) => { } } - console.log("📝 Sending to opencode:", message.text) + console.log("📝 Sending to devora:", message.text) const result = await session.client.session.prompt({ path: { id: session.sessionId }, body: { parts: [{ type: "text", text: message.text }] }, }) - console.log("📤 Opencode response:", JSON.stringify(result, null, 2)) + console.log("📤 Devora response:", JSON.stringify(result, null, 2)) if (result.error) { console.error("❌ Failed to send message:", result.error) diff --git a/packages/storybook/.storybook/manager.ts b/packages/storybook/.storybook/manager.ts index 9af9ba0a..1de964ef 100644 --- a/packages/storybook/.storybook/manager.ts +++ b/packages/storybook/.storybook/manager.ts @@ -1,8 +1,8 @@ import { addons, types } from "storybook/manager-api" import { ThemeTool } from "./theme-tool" -addons.register("opencode/theme-toggle", () => { - addons.add("opencode/theme-toggle/tool", { +addons.register("devora/theme-toggle", () => { + addons.add("devora/theme-toggle/tool", { type: types.TOOL, title: "Theme", match: ({ viewMode }) => viewMode === "story" || viewMode === "docs", diff --git a/packages/storybook/.storybook/preview.tsx b/packages/storybook/.storybook/preview.tsx index 914ac6c1..817c0420 100644 --- a/packages/storybook/.storybook/preview.tsx +++ b/packages/storybook/.storybook/preview.tsx @@ -1,4 +1,4 @@ -import "@mimo-ai/ui/styles/tailwind" +import "@devora-ai/ui/styles/tailwind" import { createEffect, onCleanup, onMount } from "solid-js" import addonA11y from "@storybook/addon-a11y" @@ -7,10 +7,10 @@ import { MetaProvider } from "@solidjs/meta" import { addons } from "storybook/preview-api" import { GLOBALS_UPDATED } from "storybook/internal/core-events" import { createJSXDecorator, definePreview } from "storybook-solidjs-vite" -import { DialogProvider } from "@mimo-ai/ui/context/dialog" -import { MarkedProvider } from "@mimo-ai/ui/context/marked" -import { ThemeProvider, useTheme, type ColorScheme } from "@mimo-ai/ui/theme" -import { Font } from "@mimo-ai/ui/font" +import { DialogProvider } from "@devora-ai/ui/context/dialog" +import { MarkedProvider } from "@devora-ai/ui/context/marked" +import { ThemeProvider, useTheme, type ColorScheme } from "@devora-ai/ui/theme" +import { Font } from "@devora-ai/ui/font" function resolveScheme(value: unknown): ColorScheme { if (value === "light" || value === "dark" || value === "system") return value diff --git a/packages/storybook/debug-storybook.log b/packages/storybook/debug-storybook.log index e13d40c8..52051c7d 100644 --- a/packages/storybook/debug-storybook.log +++ b/packages/storybook/debug-storybook.log @@ -1,307 +1,307 @@ [14:25:48.462] [INFO] storybook v10.2.10 -[14:25:48.749] [DEBUG] Getting package.json info for /Users/davidhill/Documents/Local/opencode/packages/storybook/package.json... +[14:25:48.749] [DEBUG] Getting package.json info for /Users/davidhill/Documents/Local/devora/packages/storybook/package.json... [14:25:48.997] [INFO] Starting... [14:25:49.095] [DEBUG] Starting preview.. [14:25:49.098] [WARN] 🚨 Unable to index files: -- ./../ui/src/components/accordion.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/accordion.stories.tsx (line 6, col 0) +- ./../ui/src/components/accordion.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/accordion.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/app-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/app-icon.stories.tsx (line 6, col 0) +- ./../ui/src/components/app-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/app-icon.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/avatar.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/avatar.stories.tsx (line 6, col 0) +- ./../ui/src/components/avatar.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/avatar.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/basic-tool.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/basic-tool.stories.tsx (line 6, col 0) +- ./../ui/src/components/basic-tool.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/basic-tool.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/checkbox.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/checkbox.stories.tsx (line 6, col 0) +- ./../ui/src/components/checkbox.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/checkbox.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/code.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/code.stories.tsx (line 6, col 0) +- ./../ui/src/components/code.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/code.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/collapsible.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/collapsible.stories.tsx (line 6, col 0) +- ./../ui/src/components/collapsible.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/collapsible.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/context-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/context-menu.stories.tsx (line 6, col 0) +- ./../ui/src/components/context-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/context-menu.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/dialog.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dialog.stories.tsx (line 10, col 0) +- ./../ui/src/components/dialog.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/dialog.stories.tsx (line 10, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/diff-changes.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff-changes.stories.tsx (line 6, col 0) +- ./../ui/src/components/diff-changes.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/diff-changes.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/diff-ssr.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff-ssr.stories.tsx (line 6, col 0) +- ./../ui/src/components/diff-ssr.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/diff-ssr.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/diff.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff.stories.tsx (line 6, col 0) +- ./../ui/src/components/diff.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/diff.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/dock-prompt.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dock-prompt.stories.tsx (line 15, col 0) +- ./../ui/src/components/dock-prompt.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/dock-prompt.stories.tsx (line 15, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/dropdown-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dropdown-menu.stories.tsx (line 6, col 0) +- ./../ui/src/components/dropdown-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/dropdown-menu.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/favicon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/favicon.stories.tsx (line 6, col 0) +- ./../ui/src/components/favicon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/favicon.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/file-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/file-icon.stories.tsx (line 13, col 0) +- ./../ui/src/components/file-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/file-icon.stories.tsx (line 13, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/font.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/font.stories.tsx (line 6, col 0) +- ./../ui/src/components/font.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/font.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/hover-card.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/hover-card.stories.tsx (line 13, col 0) +- ./../ui/src/components/hover-card.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/hover-card.stories.tsx (line 13, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/icon-button.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/icon-button.stories.tsx (line 6, col 0) +- ./../ui/src/components/icon-button.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/icon-button.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/icon.stories.tsx (line 6, col 0) +- ./../ui/src/components/icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/icon.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/image-preview.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/image-preview.stories.tsx (line 13, col 0) +- ./../ui/src/components/image-preview.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/image-preview.stories.tsx (line 13, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/inline-input.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/inline-input.stories.tsx (line 6, col 0) +- ./../ui/src/components/inline-input.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/inline-input.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/keybind.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/keybind.stories.tsx (line 6, col 0) +- ./../ui/src/components/keybind.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/keybind.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/line-comment.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/line-comment.stories.tsx (line 6, col 0) +- ./../ui/src/components/line-comment.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/line-comment.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/list.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/list.stories.tsx (line 15, col 0) +- ./../ui/src/components/list.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/list.stories.tsx (line 15, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/logo.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/logo.stories.tsx (line 6, col 0) +- ./../ui/src/components/logo.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/logo.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/markdown.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/markdown.stories.tsx (line 12, col 0) +- ./../ui/src/components/markdown.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/markdown.stories.tsx (line 12, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/message-nav.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/message-nav.stories.tsx (line 6, col 0) +- ./../ui/src/components/message-nav.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/message-nav.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/message-part.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/message-part.stories.tsx (line 6, col 0) +- ./../ui/src/components/message-part.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/message-part.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/popover.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/popover.stories.tsx (line 16, col 0) +- ./../ui/src/components/popover.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/popover.stories.tsx (line 16, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/progress-circle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/progress-circle.stories.tsx (line 6, col 0) +- ./../ui/src/components/progress-circle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/progress-circle.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/progress.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/progress.stories.tsx (line 15, col 0) +- ./../ui/src/components/progress.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/progress.stories.tsx (line 15, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/provider-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/provider-icon.stories.tsx (line 6, col 0) +- ./../ui/src/components/provider-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/provider-icon.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/radio-group.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/radio-group.stories.tsx (line 13, col 0) +- ./../ui/src/components/radio-group.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/radio-group.stories.tsx (line 13, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/resize-handle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/resize-handle.stories.tsx (line 17, col 0) +- ./../ui/src/components/resize-handle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/resize-handle.stories.tsx (line 17, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/select.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/select.stories.tsx (line 16, col 0) +- ./../ui/src/components/select.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/select.stories.tsx (line 16, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/session-review.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/session-review.stories.tsx (line 6, col 0) +- ./../ui/src/components/session-review.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/session-review.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/session-turn.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/session-turn.stories.tsx (line 6, col 0) +- ./../ui/src/components/session-turn.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/session-turn.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/spinner.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/spinner.stories.tsx (line 6, col 0) +- ./../ui/src/components/spinner.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/spinner.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/sticky-accordion-header.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/sticky-accordion-header.stories.tsx (line 6, col 0) +- ./../ui/src/components/sticky-accordion-header.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/sticky-accordion-header.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/switch.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/switch.stories.tsx (line 6, col 0) +- ./../ui/src/components/switch.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/switch.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/tabs.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tabs.stories.tsx (line 6, col 0) +- ./../ui/src/components/tabs.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/tabs.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/tag.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tag.stories.tsx (line 6, col 0) +- ./../ui/src/components/tag.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/tag.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/text-field.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/text-field.stories.tsx (line 14, col 0) +- ./../ui/src/components/text-field.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/text-field.stories.tsx (line 14, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/text-shimmer.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/text-shimmer.stories.tsx (line 6, col 0) +- ./../ui/src/components/text-shimmer.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/text-shimmer.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/toast.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/toast.stories.tsx (line 6, col 0) +- ./../ui/src/components/toast.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/toast.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/tooltip.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tooltip.stories.tsx (line 6, col 0) +- ./../ui/src/components/tooltip.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/tooltip.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/typewriter.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/typewriter.stories.tsx (line 6, col 0) +- ./../ui/src/components/typewriter.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/typewriter.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export [14:25:49.109] [ERROR] Failed to build the preview [14:25:49.110] [ERROR] Error: Unable to index files: -- ./../ui/src/components/accordion.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/accordion.stories.tsx (line 6, col 0) +- ./../ui/src/components/accordion.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/accordion.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/app-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/app-icon.stories.tsx (line 6, col 0) +- ./../ui/src/components/app-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/app-icon.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/avatar.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/avatar.stories.tsx (line 6, col 0) +- ./../ui/src/components/avatar.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/avatar.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/basic-tool.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/basic-tool.stories.tsx (line 6, col 0) +- ./../ui/src/components/basic-tool.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/basic-tool.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/checkbox.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/checkbox.stories.tsx (line 6, col 0) +- ./../ui/src/components/checkbox.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/checkbox.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/code.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/code.stories.tsx (line 6, col 0) +- ./../ui/src/components/code.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/code.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/collapsible.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/collapsible.stories.tsx (line 6, col 0) +- ./../ui/src/components/collapsible.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/collapsible.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/context-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/context-menu.stories.tsx (line 6, col 0) +- ./../ui/src/components/context-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/context-menu.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/dialog.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dialog.stories.tsx (line 10, col 0) +- ./../ui/src/components/dialog.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/dialog.stories.tsx (line 10, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/diff-changes.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff-changes.stories.tsx (line 6, col 0) +- ./../ui/src/components/diff-changes.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/diff-changes.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/diff-ssr.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff-ssr.stories.tsx (line 6, col 0) +- ./../ui/src/components/diff-ssr.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/diff-ssr.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/diff.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff.stories.tsx (line 6, col 0) +- ./../ui/src/components/diff.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/diff.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/dock-prompt.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dock-prompt.stories.tsx (line 15, col 0) +- ./../ui/src/components/dock-prompt.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/dock-prompt.stories.tsx (line 15, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/dropdown-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dropdown-menu.stories.tsx (line 6, col 0) +- ./../ui/src/components/dropdown-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/dropdown-menu.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/favicon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/favicon.stories.tsx (line 6, col 0) +- ./../ui/src/components/favicon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/favicon.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/file-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/file-icon.stories.tsx (line 13, col 0) +- ./../ui/src/components/file-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/file-icon.stories.tsx (line 13, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/font.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/font.stories.tsx (line 6, col 0) +- ./../ui/src/components/font.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/font.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/hover-card.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/hover-card.stories.tsx (line 13, col 0) +- ./../ui/src/components/hover-card.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/hover-card.stories.tsx (line 13, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/icon-button.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/icon-button.stories.tsx (line 6, col 0) +- ./../ui/src/components/icon-button.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/icon-button.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/icon.stories.tsx (line 6, col 0) +- ./../ui/src/components/icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/icon.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/image-preview.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/image-preview.stories.tsx (line 13, col 0) +- ./../ui/src/components/image-preview.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/image-preview.stories.tsx (line 13, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/inline-input.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/inline-input.stories.tsx (line 6, col 0) +- ./../ui/src/components/inline-input.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/inline-input.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/keybind.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/keybind.stories.tsx (line 6, col 0) +- ./../ui/src/components/keybind.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/keybind.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/line-comment.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/line-comment.stories.tsx (line 6, col 0) +- ./../ui/src/components/line-comment.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/line-comment.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/list.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/list.stories.tsx (line 15, col 0) +- ./../ui/src/components/list.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/list.stories.tsx (line 15, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/logo.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/logo.stories.tsx (line 6, col 0) +- ./../ui/src/components/logo.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/logo.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/markdown.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/markdown.stories.tsx (line 12, col 0) +- ./../ui/src/components/markdown.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/markdown.stories.tsx (line 12, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/message-nav.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/message-nav.stories.tsx (line 6, col 0) +- ./../ui/src/components/message-nav.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/message-nav.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/message-part.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/message-part.stories.tsx (line 6, col 0) +- ./../ui/src/components/message-part.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/message-part.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/popover.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/popover.stories.tsx (line 16, col 0) +- ./../ui/src/components/popover.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/popover.stories.tsx (line 16, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/progress-circle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/progress-circle.stories.tsx (line 6, col 0) +- ./../ui/src/components/progress-circle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/progress-circle.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/progress.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/progress.stories.tsx (line 15, col 0) +- ./../ui/src/components/progress.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/progress.stories.tsx (line 15, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/provider-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/provider-icon.stories.tsx (line 6, col 0) +- ./../ui/src/components/provider-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/provider-icon.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/radio-group.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/radio-group.stories.tsx (line 13, col 0) +- ./../ui/src/components/radio-group.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/radio-group.stories.tsx (line 13, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/resize-handle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/resize-handle.stories.tsx (line 17, col 0) +- ./../ui/src/components/resize-handle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/resize-handle.stories.tsx (line 17, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/select.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/select.stories.tsx (line 16, col 0) +- ./../ui/src/components/select.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/select.stories.tsx (line 16, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/session-review.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/session-review.stories.tsx (line 6, col 0) +- ./../ui/src/components/session-review.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/session-review.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/session-turn.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/session-turn.stories.tsx (line 6, col 0) +- ./../ui/src/components/session-turn.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/session-turn.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/spinner.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/spinner.stories.tsx (line 6, col 0) +- ./../ui/src/components/spinner.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/spinner.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/sticky-accordion-header.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/sticky-accordion-header.stories.tsx (line 6, col 0) +- ./../ui/src/components/sticky-accordion-header.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/sticky-accordion-header.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/switch.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/switch.stories.tsx (line 6, col 0) +- ./../ui/src/components/switch.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/switch.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/tabs.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tabs.stories.tsx (line 6, col 0) +- ./../ui/src/components/tabs.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/tabs.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/tag.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tag.stories.tsx (line 6, col 0) +- ./../ui/src/components/tag.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/tag.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/text-field.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/text-field.stories.tsx (line 14, col 0) +- ./../ui/src/components/text-field.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/text-field.stories.tsx (line 14, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/text-shimmer.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/text-shimmer.stories.tsx (line 6, col 0) +- ./../ui/src/components/text-shimmer.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/text-shimmer.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/toast.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/toast.stories.tsx (line 6, col 0) +- ./../ui/src/components/toast.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/toast.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/tooltip.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tooltip.stories.tsx (line 6, col 0) +- ./../ui/src/components/tooltip.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/tooltip.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export -- ./../ui/src/components/typewriter.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/typewriter.stories.tsx (line 6, col 0) +- ./../ui/src/components/typewriter.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/devora/packages/ui/src/components/typewriter.stories.tsx (line 6, col 0) More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export - at _StoryIndexGenerator.getIndexAndStats (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:6085:15) - at async _StoryIndexGenerator.getIndex (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:6074:13) - at async getOptimizeDeps (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1862:15) - at async createViteServer (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1888:19) - at async Module.start (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1923:17) - at async storybookDevServer (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:7241:83) - at async buildOrThrow (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:4504:12) - at async buildDevStandalone (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:7611:66) - at async withTelemetry (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/_node-chunks/chunk-S3MWHNYJ.js:218:12) - at async dev (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/bin/core.js:2734:3) + at _StoryIndexGenerator.getIndexAndStats (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:6085:15) + at async _StoryIndexGenerator.getIndex (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:6074:13) + at async getOptimizeDeps (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1862:15) + at async createViteServer (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1888:19) + at async Module.start (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1923:17) + at async storybookDevServer (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:7241:83) + at async buildOrThrow (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:4504:12) + at async buildDevStandalone (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:7611:66) + at async withTelemetry (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/_node-chunks/chunk-S3MWHNYJ.js:218:12) + at async dev (file:///Users/davidhill/Documents/Local/devora/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/bin/core.js:2734:3) [14:25:49.118] [WARN] Broken build, fix the error above. You may need to refresh the browser. \ No newline at end of file diff --git a/packages/storybook/package.json b/packages/storybook/package.json index 1bdaf8e8..326bae55 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@mimo-ai/storybook", + "name": "@devora-ai/storybook", "private": true, "type": "module", "scripts": { @@ -9,7 +9,7 @@ }, "devDependencies": { "@tailwindcss/vite": "catalog:", - "@mimo-ai/ui": "workspace:*", + "@devora-ai/ui": "workspace:*", "@solidjs/meta": "catalog:", "@storybook/addon-a11y": "^10.2.13", "@storybook/addon-docs": "^10.2.13", diff --git a/packages/ui/package.json b/packages/ui/package.json index c10cedd8..701fc778 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,5 +1,5 @@ { - "name": "@mimo-ai/ui", + "name": "@devora-ai/ui", "version": "0.1.0", "type": "module", "license": "MIT", @@ -43,8 +43,8 @@ }, "dependencies": { "@kobalte/core": "catalog:", - "@mimo-ai/sdk": "workspace:*", - "@mimo-ai/shared": "workspace:*", + "@devora-ai/sdk": "workspace:*", + "@devora-ai/shared": "workspace:*", "@pierre/diffs": "catalog:", "@shikijs/transformers": "3.9.2", "@solid-primitives/bounds": "0.1.3", diff --git a/packages/ui/src/assets/favicon/apple-touch-icon-v3.png b/packages/ui/src/assets/favicon/apple-touch-icon-v3.png index 70fd01b0..0e83c6a7 100644 Binary files a/packages/ui/src/assets/favicon/apple-touch-icon-v3.png and b/packages/ui/src/assets/favicon/apple-touch-icon-v3.png differ diff --git a/packages/ui/src/assets/favicon/apple-touch-icon.png b/packages/ui/src/assets/favicon/apple-touch-icon.png index 70fd01b0..0e83c6a7 100644 Binary files a/packages/ui/src/assets/favicon/apple-touch-icon.png and b/packages/ui/src/assets/favicon/apple-touch-icon.png differ diff --git a/packages/ui/src/assets/favicon/favicon-96x96-v3.png b/packages/ui/src/assets/favicon/favicon-96x96-v3.png index 15266d28..70a24622 100644 Binary files a/packages/ui/src/assets/favicon/favicon-96x96-v3.png and b/packages/ui/src/assets/favicon/favicon-96x96-v3.png differ diff --git a/packages/ui/src/assets/favicon/favicon-96x96.png b/packages/ui/src/assets/favicon/favicon-96x96.png index 15266d28..70a24622 100644 Binary files a/packages/ui/src/assets/favicon/favicon-96x96.png and b/packages/ui/src/assets/favicon/favicon-96x96.png differ diff --git a/packages/ui/src/assets/favicon/favicon-v3.ico b/packages/ui/src/assets/favicon/favicon-v3.ico index 34ca0b9c..5c0a6ca4 100644 Binary files a/packages/ui/src/assets/favicon/favicon-v3.ico and b/packages/ui/src/assets/favicon/favicon-v3.ico differ diff --git a/packages/ui/src/assets/favicon/favicon-v3.svg b/packages/ui/src/assets/favicon/favicon-v3.svg index 157edc4d..fd11b637 100644 --- a/packages/ui/src/assets/favicon/favicon-v3.svg +++ b/packages/ui/src/assets/favicon/favicon-v3.svg @@ -1,7 +1,12 @@ - - - - - \ No newline at end of file + + + + + + + + + + + + diff --git a/packages/ui/src/assets/favicon/favicon.ico b/packages/ui/src/assets/favicon/favicon.ico index 34ca0b9c..5c0a6ca4 100644 Binary files a/packages/ui/src/assets/favicon/favicon.ico and b/packages/ui/src/assets/favicon/favicon.ico differ diff --git a/packages/ui/src/assets/favicon/favicon.svg b/packages/ui/src/assets/favicon/favicon.svg index 157edc4d..fd11b637 100644 --- a/packages/ui/src/assets/favicon/favicon.svg +++ b/packages/ui/src/assets/favicon/favicon.svg @@ -1,7 +1,12 @@ - - - - - \ No newline at end of file + + + + + + + + + + + + diff --git a/packages/ui/src/assets/favicon/site.webmanifest b/packages/ui/src/assets/favicon/site.webmanifest index 41290e84..48ff6181 100644 --- a/packages/ui/src/assets/favicon/site.webmanifest +++ b/packages/ui/src/assets/favicon/site.webmanifest @@ -1,6 +1,6 @@ { - "name": "OpenCode", - "short_name": "OpenCode", + "name": "Devora", + "short_name": "Devora", "icons": [ { "src": "/web-app-manifest-192x192.png", diff --git a/packages/ui/src/assets/favicon/web-app-manifest-192x192.png b/packages/ui/src/assets/favicon/web-app-manifest-192x192.png index e6377554..09fdbdb6 100644 Binary files a/packages/ui/src/assets/favicon/web-app-manifest-192x192.png and b/packages/ui/src/assets/favicon/web-app-manifest-192x192.png differ diff --git a/packages/ui/src/assets/favicon/web-app-manifest-512x512.png b/packages/ui/src/assets/favicon/web-app-manifest-512x512.png index f6f0cf51..ea4389b5 100644 Binary files a/packages/ui/src/assets/favicon/web-app-manifest-512x512.png and b/packages/ui/src/assets/favicon/web-app-manifest-512x512.png differ diff --git a/packages/ui/src/assets/icons/provider/devora-go.svg b/packages/ui/src/assets/icons/provider/devora-go.svg new file mode 100644 index 00000000..c98e3844 --- /dev/null +++ b/packages/ui/src/assets/icons/provider/devora-go.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/ui/src/assets/icons/provider/devora.svg b/packages/ui/src/assets/icons/provider/devora.svg new file mode 100644 index 00000000..c98e3844 --- /dev/null +++ b/packages/ui/src/assets/icons/provider/devora.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/ui/src/assets/icons/provider/opencode-go.svg b/packages/ui/src/assets/icons/provider/opencode-go.svg deleted file mode 100644 index e0833b92..00000000 --- a/packages/ui/src/assets/icons/provider/opencode-go.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/ui/src/assets/icons/provider/opencode.svg b/packages/ui/src/assets/icons/provider/opencode.svg deleted file mode 100644 index 95084658..00000000 --- a/packages/ui/src/assets/icons/provider/opencode.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/ui/src/assets/icons/provider/xiaomi.svg b/packages/ui/src/assets/icons/provider/xiaomi.svg deleted file mode 100644 index 4a893919..00000000 --- a/packages/ui/src/assets/icons/provider/xiaomi.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/ui/src/components/favicon.tsx b/packages/ui/src/components/favicon.tsx index 94cc8248..cc6b1f81 100644 --- a/packages/ui/src/components/favicon.tsx +++ b/packages/ui/src/components/favicon.tsx @@ -7,7 +7,7 @@ export const Favicon = () => { - + ) } diff --git a/packages/ui/src/components/file-media.tsx b/packages/ui/src/components/file-media.tsx index 76f1f84a..0eadbcc1 100644 --- a/packages/ui/src/components/file-media.tsx +++ b/packages/ui/src/components/file-media.tsx @@ -1,4 +1,4 @@ -import type { FileContent } from "@mimo-ai/sdk/v2" +import type { FileContent } from "@devora-ai/sdk/v2" import { createEffect, createMemo, createResource, Match, on, Show, Switch, type JSX } from "solid-js" import { useI18n } from "../context/i18n" import { diff --git a/packages/ui/src/components/file.tsx b/packages/ui/src/components/file.tsx index c6559484..3d07f249 100644 --- a/packages/ui/src/components/file.tsx +++ b/packages/ui/src/components/file.tsx @@ -1,4 +1,4 @@ -import { sampledChecksum } from "@mimo-ai/shared/util/encode" +import { sampledChecksum } from "@devora-ai/shared/util/encode" import { DEFAULT_VIRTUAL_FILE_METRICS, type DiffLineAnnotation, diff --git a/packages/ui/src/components/font.stories.tsx b/packages/ui/src/components/font.stories.tsx index f4e90bde..7935d21b 100644 --- a/packages/ui/src/components/font.stories.tsx +++ b/packages/ui/src/components/font.stories.tsx @@ -41,8 +41,8 @@ export const Basic = { render: () => (
    -
    OpenCode Sans Sample
    -
    OpenCode Mono Sample
    +
    Devora Sans Sample
    +
    Devora Mono Sample
    ), } diff --git a/packages/ui/src/components/icon.stories.tsx b/packages/ui/src/components/icon.stories.tsx index 1986d747..5cdd2527 100644 --- a/packages/ui/src/components/icon.stories.tsx +++ b/packages/ui/src/components/icon.stories.tsx @@ -3,7 +3,7 @@ import * as mod from "./icon" import { create } from "../storybook/scaffold" const docs = `### Overview -Inline icon renderer using the built-in OpenCode icon set. +Inline icon renderer using the built-in Devora icon set. Use with \`Button\`, \`IconButton\`, and menu items. diff --git a/packages/ui/src/components/line-comment-styles.ts b/packages/ui/src/components/line-comment-styles.ts index 59af6604..27cf4aa7 100644 --- a/packages/ui/src/components/line-comment-styles.ts +++ b/packages/ui/src/components/line-comment-styles.ts @@ -278,7 +278,7 @@ export function installLineCommentStyles() { if (installed) return if (typeof document === "undefined") return - const id = "opencode-line-comment-styles" + const id = "devora-line-comment-styles" if (document.getElementById(id)) { installed = true return diff --git a/packages/ui/src/components/line-comment.tsx b/packages/ui/src/components/line-comment.tsx index fd16f3df..936e4baa 100644 --- a/packages/ui/src/components/line-comment.tsx +++ b/packages/ui/src/components/line-comment.tsx @@ -1,5 +1,5 @@ -import { useFilteredList } from "@mimo-ai/ui/hooks" -import { getDirectory, getFilename } from "@mimo-ai/shared/util/path" +import { useFilteredList } from "@devora-ai/ui/hooks" +import { getDirectory, getFilename } from "@devora-ai/shared/util/path" import { createSignal, For, onMount, Show, splitProps, type JSX } from "solid-js" import { Button } from "./button" import { FileIcon } from "./file-icon" diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index 47d5b07a..4a882c5d 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -1,4 +1,4 @@ -import { type FilteredListProps, useFilteredList } from "@mimo-ai/ui/hooks" +import { type FilteredListProps, useFilteredList } from "@devora-ai/ui/hooks" import { createEffect, For, type JSX, on, Show } from "solid-js" import { createStore } from "solid-js/store" import { makeEventListener } from "@solid-primitives/event-listener" diff --git a/packages/ui/src/components/logo.stories.tsx b/packages/ui/src/components/logo.stories.tsx index 3f5dd9ce..9c66d8fc 100644 --- a/packages/ui/src/components/logo.stories.tsx +++ b/packages/ui/src/components/logo.stories.tsx @@ -2,7 +2,7 @@ import * as mod from "./logo" const docs = `### Overview -OpenCode logo assets: mark, splash, and wordmark. +Devora logo assets: mark, splash, and wordmark. Use Mark for compact spaces, Logo for headers, Splash for hero sections. diff --git a/packages/ui/src/components/logo.tsx b/packages/ui/src/components/logo.tsx index 20c2f3fb..e69948be 100644 --- a/packages/ui/src/components/logo.tsx +++ b/packages/ui/src/components/logo.tsx @@ -5,12 +5,39 @@ export const Mark = (props: { class?: string }) => { - - + + + + + + + + + ) } @@ -21,12 +48,31 @@ export const Splash = (props: Pick, "ref" | "class">) => { ref={props.ref} data-component="logo-splash" classList={{ [props.class ?? ""]: !!props.class }} - viewBox="0 0 80 100" + viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg" > - - + + + + + + + + + ) } @@ -35,28 +81,42 @@ export const Logo = (props: { class?: string }) => { return ( - - - - - - - - - - - - - - - - - - + + + + + + + + + + + Devora + ) } diff --git a/packages/ui/src/components/markdown.tsx b/packages/ui/src/components/markdown.tsx index e4fbe7f9..9e30d8a2 100644 --- a/packages/ui/src/components/markdown.tsx +++ b/packages/ui/src/components/markdown.tsx @@ -2,7 +2,7 @@ import { useMarked } from "../context/marked" import { useI18n } from "../context/i18n" import DOMPurify from "dompurify" import morphdom from "morphdom" -import { checksum } from "@mimo-ai/shared/util/encode" +import { checksum } from "@devora-ai/shared/util/encode" import { ComponentProps, createEffect, createResource, createSignal, onCleanup, splitProps } from "solid-js" import { isServer } from "solid-js/web" import { stream } from "./markdown-stream" diff --git a/packages/ui/src/components/message-file.test.ts b/packages/ui/src/components/message-file.test.ts index 8a4553bc..603efb39 100644 --- a/packages/ui/src/components/message-file.test.ts +++ b/packages/ui/src/components/message-file.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { FilePart } from "@mimo-ai/sdk/v2" +import type { FilePart } from "@devora-ai/sdk/v2" import { attached, inline, kind } from "./message-file" function file(part: Partial = {}): FilePart { diff --git a/packages/ui/src/components/message-file.ts b/packages/ui/src/components/message-file.ts index d733558d..365eb1c4 100644 --- a/packages/ui/src/components/message-file.ts +++ b/packages/ui/src/components/message-file.ts @@ -1,4 +1,4 @@ -import type { FilePart } from "@mimo-ai/sdk/v2" +import type { FilePart } from "@devora-ai/sdk/v2" export function attached(part: FilePart) { return part.url.startsWith("data:") diff --git a/packages/ui/src/components/message-nav.tsx b/packages/ui/src/components/message-nav.tsx index 37367fc5..7487e9a3 100644 --- a/packages/ui/src/components/message-nav.tsx +++ b/packages/ui/src/components/message-nav.tsx @@ -1,4 +1,4 @@ -import { UserMessage } from "@mimo-ai/sdk/v2" +import { UserMessage } from "@devora-ai/sdk/v2" import { ComponentProps, For, Match, Show, splitProps, Switch } from "solid-js" import { DiffChanges } from "./diff-changes" import { Tooltip } from "./tooltip" diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 21b00955..09fd1c0c 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -28,7 +28,7 @@ import { Todo, QuestionAnswer, QuestionInfo, -} from "@mimo-ai/sdk/v2" +} from "@devora-ai/sdk/v2" import { useData } from "../context" import { useFileComponent } from "../context/file" import { useDialog } from "../context/dialog" @@ -44,8 +44,8 @@ import { Checkbox } from "./checkbox" import { DiffChanges } from "./diff-changes" import { Markdown } from "./markdown" import { ImagePreview } from "./image-preview" -import { getDirectory as _getDirectory, getFilename } from "@mimo-ai/shared/util/path" -import { checksum } from "@mimo-ai/shared/util/encode" +import { getDirectory as _getDirectory, getFilename } from "@devora-ai/shared/util/path" +import { checksum } from "@devora-ai/shared/util/encode" import { Tooltip } from "./tooltip" import { IconButton } from "./icon-button" import { Spinner } from "./spinner" diff --git a/packages/ui/src/components/provider-icons/sprite.svg b/packages/ui/src/components/provider-icons/sprite.svg index a0214b40..2068a30c 100644 --- a/packages/ui/src/components/provider-icons/sprite.svg +++ b/packages/ui/src/components/provider-icons/sprite.svg @@ -33,7 +33,7 @@ fill="currentColor" > - + - + - + Import session
    - Replaces the current timeline with an `opencode export` JSON file + Replaces the current timeline with an `devora export` JSON file