feat(web): migrate launcher to modular web frontend/backend and improve management UX (#1275)
* refactor: remove the legacy picoclaw-launcher
* feat: create initial web frontend and backend structure
* feat(packaging): add desktop entry for PicoClaw Launcher (#1062)
- Add .desktop file with Terminal=true, named "PicoClaw Launcher"
- Install to /usr/share/applications/ for app menu visibility
- Add 512x512 PNG icon to /usr/share/icons/hicolor/
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* `make dev`: If you haven't built it before, you need to run `build` first.
* feat(web): comprehensive web UI and backend refactoring
This commit introduces a major overhaul of both the frontend web UI and the Go backend API, transitioning to a highly modular architecture and integrating new core features.
Backend:
- Refactored monolithic API endpoints into domain-specific modules (config, gateway, log, models, pico, session).
- Cleaned up obsolete files (`server.go`, `status.go`, WebSocket handlers) and outdated tests.
- Implemented Gateway process lifecycle management (start/stop/restart) and real-time log streaming.
Frontend:
- Integrated Shadcn UI components to establish a modern, consistent design system.
- Introduced a new application layout featuring a responsive sidebar (`app-sidebar`) and header.
- Implemented internationalization (i18n) with initial support for English and Chinese.
- Restructured API clients, hooks, and Zustand stores into logical domains.
- Added new management pages for Settings, Logs, Models, Providers, and Credentials.
- Upgraded the Pico chat interface with session history management and dynamic model selection.
Build & Config:
- Updated frontend dependencies, Vite configuration, and lockfiles.
- Refined routing setup and overarching application stylesheets.
* feat(web): enhance model management, sorting, and deletion logic
- Implement model sorting in UI (default > configured > unconfigured)
- Prevent deletion of default models in the frontend
- Update backend to clear default settings when a model is deleted
- Add existence validation when setting a default model via API
- Group models in chat UI by type (API Key, OAuth, Local)
- Conditionally display model selector in chat based on configuration status
* refactor(web): refactor chat page into modular components/hooks and update i18n
- split chat route into dedicated chat components (page, composer, empty state, messages, history, model selector)
- extract model/session logic into use-chat-models and use-session-history hooks
- update chat locale keys in en/zh and add empty-state/history-related translations
* refactor(models): refactor models page into modular components and improve UX
- split /models route into dedicated components (page, provider section, card, add/edit sheets, delete dialog)
- add provider grouping/sorting, provider labels/icons, and a no-default hint in the models page
- add "Set as default model" toggle to add/edit flows with safer defaults
- introduce shared form helpers and new UI primitives (field, label, switch)
- update i18n strings (en/zh) for models and gateway header text usage
- apply minor UI polish (models nav icon, separator client directive)
* fix(web): add SPA index fallback for embedded frontend routes
Serve existing static assets as-is, keep /api/* and missing asset paths returning 404, and add tests for SPA fallback behavior on refresh.
* fix(frontend/chat): normalize message timestamp units to prevent invalid far-future dates
* chore: delete TestSPARouteFallsBackToIndex
* feat: update build for web-based launcher (#1186)
- Makefile: add build-launcher target (builds frontend + Go backend)
- GoReleaser: point picoclaw-launcher build to web/backend, add frontend
build hook, restore winres hook with updated paths
- Restore icon.ico and winres config from main for Windows builds
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(credentials): add multi-provider OAuth credential management
- add backend `/api/oauth/*` endpoints for provider status, browser/device-code/token login, flow query/polling, and logout
- extend API handler with OAuth flow/state tracking and route registration, plus OAuth unit tests
- implement frontend credentials page/components for OpenAI, Anthropic, and Google Antigravity login/logout
- add OAuth API client and `useCredentialsPage` hook, with new EN/ZH i18n strings
* chore: remove placeholder index.html from dist (#1188)
The .gitkeep is sufficient for go:embed to find the dist directory.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): polish model and credential UX; remove Providers nav
- remove the Providers item from sidebar navigation and locale keys
- simplify chat composer by dropping attach/voice action buttons
- support ReactNode titles in credential cards and add provider brand icons
- refine sheet header/footer styling and device-code footer button hierarchy
- disable “Set default” when a model is unconfigured or already default
* feat(web): Update config page (#1173)
* feat(web): Update config page
* fix(web): useEffect resets editorValue whenever config changes
* fix(web): react-hooks/set-state-in-effect error & pnpm lint #1173
* feat(web): add channel management page for web console (#1190)
* feat(web): add channel management page for web console
Add a complete channel management UI that allows users to configure
messaging channels (Telegram, Discord, Slack, Feishu, etc.) directly
from the web console instead of manually editing config.json.
Backend: GET/PUT/PATCH API endpoints for listing, updating, and
toggling channels with secret field masking.
Frontend: Channel cards grid with enable/disable toggles, per-channel
configuration sheets with dedicated forms for major platforms and a
generic fallback for others.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web/channels): move channels to own sidebar group and fix sheet padding
- Channels now has its own navigation group instead of being under Services
- Fix edit sheet form content padding (px-1 -> px-4) to match header/footer
- Fix naked return lint error in extractChannelInfo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web): harden channel config updates and resolve frontend lint issues
- validate channel PUT/PATCH updates before saving and return structured validation errors
- require `enabled` in toggle requests to avoid silent false defaults
- support editing `allow_origins` in the generic channel form and parse string/array inputs on backend
- replace channel form `any` usage with `ChannelConfig` (`Record<string, unknown>`) and add safe value helpers
- add i18n strings for allow-origins fields and apply related frontend formatting cleanups
* fix(frontend): prevent false "Invalid JSON" errors in config editor
* feat: add startup readiness checks and propagate start availability to UI
- add gateway precondition validation for default model and credentials
- auto-start gateway on backend boot when conditions are met
- include gateway_start_allowed and gateway_start_reason in status updates
- prevent frontend start actions when gateway cannot be started
* feat(web): revamp channel config UX with catalog-based routing
- replace legacy channel management endpoints with a backend channel catalog API
- switch frontend channel updates to PATCH /api/config and per-channel config pages
- add dynamic channel items in the sidebar with support for expand/collapse
- migrate /channels to nested routes (/channels/$name) and remove old card/sheet flow
- improve channel forms with clearer hints, required/error states, and reusable switch cards
- fix Discord mention-only toggle to read/write group_trigger.mention_only
* refactor(frontend): move shared-form to components and unify default-model switch with SwitchCardField
* fix(frontend): improve model form validation and unify secret placeholder handling
- block duplicate model aliases when adding a model (with localized error messages)
- share masked secret placeholder logic across model and channel forms
- refresh gateway state after setting the default model
- apply minor UI cleanup to provider icon rendering
* feat(web): add visual system config and launcher/autostart controls
- add launcher config model and persistence (`launcher-config.json`) for port/public/CIDR settings
- add system APIs for launch-at-login and launcher parameters
- apply CIDR-based access-control middleware to backend HTTP routes
- split config routing into visual config and raw JSON config pages
- add frontend system API client and visual config sections for runtime/devices/launcher
- expand i18n strings (en/zh) for new config UI
- improve sidebar active matching and session ID generation fallback
* refactor(frontend): remove i18n fallback strings and drop providers route
- Replace `t(key, defaultValue)` calls with key-only translations across UI pages
- Clean up locale files by pruning unused keys and adding missing shared keys
- Remove the obsolete `/providers` page and update generated route tree
* fix(backend): correct gateway status detection on Windows
* fix(repo): keep web backend dist placeholder tracked
---------
Co-authored-by: Guoguo <16666742+imguoguo@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Dihubopen <dihubcn@gmail.com>
Co-authored-by: Dihubopen <130813726+Dihubopen@users.noreply.github.com>
2026-03-09 11:42:03 +00:00
|
|
|
{
|
|
|
|
|
"navigation": {
|
|
|
|
|
"chat": "Chat",
|
|
|
|
|
"model_group": "Models",
|
|
|
|
|
"models": "Models",
|
|
|
|
|
"credentials": "Credentials",
|
feat(web): add agent management UI and improve launcher integration (#1358)
* Improve the web launcher and gateway integration across backend and frontend.
- add runtime model availability checks for local and OAuth-backed models
- support launcher-driven gateway host overrides and websocket URL resolution
- add gateway log clearing and keep incremental log sync consistent after resets
- migrate session history APIs to JSONL metadata-backed storage with legacy fallback
- expose session titles and improve chat history loading and error handling
- move shared backend runtime helpers into the web utils package
- avoid blocking web startup when automatic onboard initialization fails
- add backend tests covering gateway readiness, host resolution, models, logs, and sessions
* feat(agent): add skills and tools management APIs and UI
- add backend APIs to list, view, import, and delete skills
- add tool status and toggle endpoints with dependency-aware config updates
- add agent skills/tools pages, routes, sidebar entries, and i18n strings
- add backend tests for the new skills and tools flows
* chore(frontend): upgrade shadcn to 4.0.5 and refresh lockfile
* chore(web): keep backend dist placeholder tracked
2026-03-11 10:37:00 +00:00
|
|
|
"agent_group": "Agent",
|
|
|
|
|
"skills": "Skills",
|
|
|
|
|
"tools": "Tools",
|
feat(web): migrate launcher to modular web frontend/backend and improve management UX (#1275)
* refactor: remove the legacy picoclaw-launcher
* feat: create initial web frontend and backend structure
* feat(packaging): add desktop entry for PicoClaw Launcher (#1062)
- Add .desktop file with Terminal=true, named "PicoClaw Launcher"
- Install to /usr/share/applications/ for app menu visibility
- Add 512x512 PNG icon to /usr/share/icons/hicolor/
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* `make dev`: If you haven't built it before, you need to run `build` first.
* feat(web): comprehensive web UI and backend refactoring
This commit introduces a major overhaul of both the frontend web UI and the Go backend API, transitioning to a highly modular architecture and integrating new core features.
Backend:
- Refactored monolithic API endpoints into domain-specific modules (config, gateway, log, models, pico, session).
- Cleaned up obsolete files (`server.go`, `status.go`, WebSocket handlers) and outdated tests.
- Implemented Gateway process lifecycle management (start/stop/restart) and real-time log streaming.
Frontend:
- Integrated Shadcn UI components to establish a modern, consistent design system.
- Introduced a new application layout featuring a responsive sidebar (`app-sidebar`) and header.
- Implemented internationalization (i18n) with initial support for English and Chinese.
- Restructured API clients, hooks, and Zustand stores into logical domains.
- Added new management pages for Settings, Logs, Models, Providers, and Credentials.
- Upgraded the Pico chat interface with session history management and dynamic model selection.
Build & Config:
- Updated frontend dependencies, Vite configuration, and lockfiles.
- Refined routing setup and overarching application stylesheets.
* feat(web): enhance model management, sorting, and deletion logic
- Implement model sorting in UI (default > configured > unconfigured)
- Prevent deletion of default models in the frontend
- Update backend to clear default settings when a model is deleted
- Add existence validation when setting a default model via API
- Group models in chat UI by type (API Key, OAuth, Local)
- Conditionally display model selector in chat based on configuration status
* refactor(web): refactor chat page into modular components/hooks and update i18n
- split chat route into dedicated chat components (page, composer, empty state, messages, history, model selector)
- extract model/session logic into use-chat-models and use-session-history hooks
- update chat locale keys in en/zh and add empty-state/history-related translations
* refactor(models): refactor models page into modular components and improve UX
- split /models route into dedicated components (page, provider section, card, add/edit sheets, delete dialog)
- add provider grouping/sorting, provider labels/icons, and a no-default hint in the models page
- add "Set as default model" toggle to add/edit flows with safer defaults
- introduce shared form helpers and new UI primitives (field, label, switch)
- update i18n strings (en/zh) for models and gateway header text usage
- apply minor UI polish (models nav icon, separator client directive)
* fix(web): add SPA index fallback for embedded frontend routes
Serve existing static assets as-is, keep /api/* and missing asset paths returning 404, and add tests for SPA fallback behavior on refresh.
* fix(frontend/chat): normalize message timestamp units to prevent invalid far-future dates
* chore: delete TestSPARouteFallsBackToIndex
* feat: update build for web-based launcher (#1186)
- Makefile: add build-launcher target (builds frontend + Go backend)
- GoReleaser: point picoclaw-launcher build to web/backend, add frontend
build hook, restore winres hook with updated paths
- Restore icon.ico and winres config from main for Windows builds
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(credentials): add multi-provider OAuth credential management
- add backend `/api/oauth/*` endpoints for provider status, browser/device-code/token login, flow query/polling, and logout
- extend API handler with OAuth flow/state tracking and route registration, plus OAuth unit tests
- implement frontend credentials page/components for OpenAI, Anthropic, and Google Antigravity login/logout
- add OAuth API client and `useCredentialsPage` hook, with new EN/ZH i18n strings
* chore: remove placeholder index.html from dist (#1188)
The .gitkeep is sufficient for go:embed to find the dist directory.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): polish model and credential UX; remove Providers nav
- remove the Providers item from sidebar navigation and locale keys
- simplify chat composer by dropping attach/voice action buttons
- support ReactNode titles in credential cards and add provider brand icons
- refine sheet header/footer styling and device-code footer button hierarchy
- disable “Set default” when a model is unconfigured or already default
* feat(web): Update config page (#1173)
* feat(web): Update config page
* fix(web): useEffect resets editorValue whenever config changes
* fix(web): react-hooks/set-state-in-effect error & pnpm lint #1173
* feat(web): add channel management page for web console (#1190)
* feat(web): add channel management page for web console
Add a complete channel management UI that allows users to configure
messaging channels (Telegram, Discord, Slack, Feishu, etc.) directly
from the web console instead of manually editing config.json.
Backend: GET/PUT/PATCH API endpoints for listing, updating, and
toggling channels with secret field masking.
Frontend: Channel cards grid with enable/disable toggles, per-channel
configuration sheets with dedicated forms for major platforms and a
generic fallback for others.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web/channels): move channels to own sidebar group and fix sheet padding
- Channels now has its own navigation group instead of being under Services
- Fix edit sheet form content padding (px-1 -> px-4) to match header/footer
- Fix naked return lint error in extractChannelInfo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web): harden channel config updates and resolve frontend lint issues
- validate channel PUT/PATCH updates before saving and return structured validation errors
- require `enabled` in toggle requests to avoid silent false defaults
- support editing `allow_origins` in the generic channel form and parse string/array inputs on backend
- replace channel form `any` usage with `ChannelConfig` (`Record<string, unknown>`) and add safe value helpers
- add i18n strings for allow-origins fields and apply related frontend formatting cleanups
* fix(frontend): prevent false "Invalid JSON" errors in config editor
* feat: add startup readiness checks and propagate start availability to UI
- add gateway precondition validation for default model and credentials
- auto-start gateway on backend boot when conditions are met
- include gateway_start_allowed and gateway_start_reason in status updates
- prevent frontend start actions when gateway cannot be started
* feat(web): revamp channel config UX with catalog-based routing
- replace legacy channel management endpoints with a backend channel catalog API
- switch frontend channel updates to PATCH /api/config and per-channel config pages
- add dynamic channel items in the sidebar with support for expand/collapse
- migrate /channels to nested routes (/channels/$name) and remove old card/sheet flow
- improve channel forms with clearer hints, required/error states, and reusable switch cards
- fix Discord mention-only toggle to read/write group_trigger.mention_only
* refactor(frontend): move shared-form to components and unify default-model switch with SwitchCardField
* fix(frontend): improve model form validation and unify secret placeholder handling
- block duplicate model aliases when adding a model (with localized error messages)
- share masked secret placeholder logic across model and channel forms
- refresh gateway state after setting the default model
- apply minor UI cleanup to provider icon rendering
* feat(web): add visual system config and launcher/autostart controls
- add launcher config model and persistence (`launcher-config.json`) for port/public/CIDR settings
- add system APIs for launch-at-login and launcher parameters
- apply CIDR-based access-control middleware to backend HTTP routes
- split config routing into visual config and raw JSON config pages
- add frontend system API client and visual config sections for runtime/devices/launcher
- expand i18n strings (en/zh) for new config UI
- improve sidebar active matching and session ID generation fallback
* refactor(frontend): remove i18n fallback strings and drop providers route
- Replace `t(key, defaultValue)` calls with key-only translations across UI pages
- Clean up locale files by pruning unused keys and adding missing shared keys
- Remove the obsolete `/providers` page and update generated route tree
* fix(backend): correct gateway status detection on Windows
* fix(repo): keep web backend dist placeholder tracked
---------
Co-authored-by: Guoguo <16666742+imguoguo@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Dihubopen <dihubcn@gmail.com>
Co-authored-by: Dihubopen <130813726+Dihubopen@users.noreply.github.com>
2026-03-09 11:42:03 +00:00
|
|
|
"services": "Services",
|
|
|
|
|
"channels_group": "Channels",
|
|
|
|
|
"show_more_channels": "More",
|
|
|
|
|
"show_less_channels": "Less",
|
|
|
|
|
"config": "Config",
|
|
|
|
|
"logs": "Logs"
|
|
|
|
|
},
|
|
|
|
|
"chat": {
|
|
|
|
|
"welcome": "How can I help you today?",
|
|
|
|
|
"welcomeDesc": "Ask me about weather, settings, or any other tasks. I'm here to assist you.",
|
|
|
|
|
"placeholder": "Start a new message...",
|
|
|
|
|
"newChat": "New Chat",
|
|
|
|
|
"notConnected": "Gateway is not running. Start it to chat.",
|
|
|
|
|
"thinking": {
|
|
|
|
|
"step1": "Thinking...",
|
|
|
|
|
"step2": "Analyzing your request...",
|
|
|
|
|
"step3": "Preparing response...",
|
|
|
|
|
"step4": "Almost there..."
|
|
|
|
|
},
|
|
|
|
|
"history": "History",
|
|
|
|
|
"noHistory": "No chat history yet",
|
feat(web): add agent management UI and improve launcher integration (#1358)
* Improve the web launcher and gateway integration across backend and frontend.
- add runtime model availability checks for local and OAuth-backed models
- support launcher-driven gateway host overrides and websocket URL resolution
- add gateway log clearing and keep incremental log sync consistent after resets
- migrate session history APIs to JSONL metadata-backed storage with legacy fallback
- expose session titles and improve chat history loading and error handling
- move shared backend runtime helpers into the web utils package
- avoid blocking web startup when automatic onboard initialization fails
- add backend tests covering gateway readiness, host resolution, models, logs, and sessions
* feat(agent): add skills and tools management APIs and UI
- add backend APIs to list, view, import, and delete skills
- add tool status and toggle endpoints with dependency-aware config updates
- add agent skills/tools pages, routes, sidebar entries, and i18n strings
- add backend tests for the new skills and tools flows
* chore(frontend): upgrade shadcn to 4.0.5 and refresh lockfile
* chore(web): keep backend dist placeholder tracked
2026-03-11 10:37:00 +00:00
|
|
|
"historyLoadFailed": "Failed to load chat history",
|
|
|
|
|
"historyOpenFailed": "Failed to open this chat history",
|
feat(web): migrate launcher to modular web frontend/backend and improve management UX (#1275)
* refactor: remove the legacy picoclaw-launcher
* feat: create initial web frontend and backend structure
* feat(packaging): add desktop entry for PicoClaw Launcher (#1062)
- Add .desktop file with Terminal=true, named "PicoClaw Launcher"
- Install to /usr/share/applications/ for app menu visibility
- Add 512x512 PNG icon to /usr/share/icons/hicolor/
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* `make dev`: If you haven't built it before, you need to run `build` first.
* feat(web): comprehensive web UI and backend refactoring
This commit introduces a major overhaul of both the frontend web UI and the Go backend API, transitioning to a highly modular architecture and integrating new core features.
Backend:
- Refactored monolithic API endpoints into domain-specific modules (config, gateway, log, models, pico, session).
- Cleaned up obsolete files (`server.go`, `status.go`, WebSocket handlers) and outdated tests.
- Implemented Gateway process lifecycle management (start/stop/restart) and real-time log streaming.
Frontend:
- Integrated Shadcn UI components to establish a modern, consistent design system.
- Introduced a new application layout featuring a responsive sidebar (`app-sidebar`) and header.
- Implemented internationalization (i18n) with initial support for English and Chinese.
- Restructured API clients, hooks, and Zustand stores into logical domains.
- Added new management pages for Settings, Logs, Models, Providers, and Credentials.
- Upgraded the Pico chat interface with session history management and dynamic model selection.
Build & Config:
- Updated frontend dependencies, Vite configuration, and lockfiles.
- Refined routing setup and overarching application stylesheets.
* feat(web): enhance model management, sorting, and deletion logic
- Implement model sorting in UI (default > configured > unconfigured)
- Prevent deletion of default models in the frontend
- Update backend to clear default settings when a model is deleted
- Add existence validation when setting a default model via API
- Group models in chat UI by type (API Key, OAuth, Local)
- Conditionally display model selector in chat based on configuration status
* refactor(web): refactor chat page into modular components/hooks and update i18n
- split chat route into dedicated chat components (page, composer, empty state, messages, history, model selector)
- extract model/session logic into use-chat-models and use-session-history hooks
- update chat locale keys in en/zh and add empty-state/history-related translations
* refactor(models): refactor models page into modular components and improve UX
- split /models route into dedicated components (page, provider section, card, add/edit sheets, delete dialog)
- add provider grouping/sorting, provider labels/icons, and a no-default hint in the models page
- add "Set as default model" toggle to add/edit flows with safer defaults
- introduce shared form helpers and new UI primitives (field, label, switch)
- update i18n strings (en/zh) for models and gateway header text usage
- apply minor UI polish (models nav icon, separator client directive)
* fix(web): add SPA index fallback for embedded frontend routes
Serve existing static assets as-is, keep /api/* and missing asset paths returning 404, and add tests for SPA fallback behavior on refresh.
* fix(frontend/chat): normalize message timestamp units to prevent invalid far-future dates
* chore: delete TestSPARouteFallsBackToIndex
* feat: update build for web-based launcher (#1186)
- Makefile: add build-launcher target (builds frontend + Go backend)
- GoReleaser: point picoclaw-launcher build to web/backend, add frontend
build hook, restore winres hook with updated paths
- Restore icon.ico and winres config from main for Windows builds
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(credentials): add multi-provider OAuth credential management
- add backend `/api/oauth/*` endpoints for provider status, browser/device-code/token login, flow query/polling, and logout
- extend API handler with OAuth flow/state tracking and route registration, plus OAuth unit tests
- implement frontend credentials page/components for OpenAI, Anthropic, and Google Antigravity login/logout
- add OAuth API client and `useCredentialsPage` hook, with new EN/ZH i18n strings
* chore: remove placeholder index.html from dist (#1188)
The .gitkeep is sufficient for go:embed to find the dist directory.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): polish model and credential UX; remove Providers nav
- remove the Providers item from sidebar navigation and locale keys
- simplify chat composer by dropping attach/voice action buttons
- support ReactNode titles in credential cards and add provider brand icons
- refine sheet header/footer styling and device-code footer button hierarchy
- disable “Set default” when a model is unconfigured or already default
* feat(web): Update config page (#1173)
* feat(web): Update config page
* fix(web): useEffect resets editorValue whenever config changes
* fix(web): react-hooks/set-state-in-effect error & pnpm lint #1173
* feat(web): add channel management page for web console (#1190)
* feat(web): add channel management page for web console
Add a complete channel management UI that allows users to configure
messaging channels (Telegram, Discord, Slack, Feishu, etc.) directly
from the web console instead of manually editing config.json.
Backend: GET/PUT/PATCH API endpoints for listing, updating, and
toggling channels with secret field masking.
Frontend: Channel cards grid with enable/disable toggles, per-channel
configuration sheets with dedicated forms for major platforms and a
generic fallback for others.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web/channels): move channels to own sidebar group and fix sheet padding
- Channels now has its own navigation group instead of being under Services
- Fix edit sheet form content padding (px-1 -> px-4) to match header/footer
- Fix naked return lint error in extractChannelInfo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web): harden channel config updates and resolve frontend lint issues
- validate channel PUT/PATCH updates before saving and return structured validation errors
- require `enabled` in toggle requests to avoid silent false defaults
- support editing `allow_origins` in the generic channel form and parse string/array inputs on backend
- replace channel form `any` usage with `ChannelConfig` (`Record<string, unknown>`) and add safe value helpers
- add i18n strings for allow-origins fields and apply related frontend formatting cleanups
* fix(frontend): prevent false "Invalid JSON" errors in config editor
* feat: add startup readiness checks and propagate start availability to UI
- add gateway precondition validation for default model and credentials
- auto-start gateway on backend boot when conditions are met
- include gateway_start_allowed and gateway_start_reason in status updates
- prevent frontend start actions when gateway cannot be started
* feat(web): revamp channel config UX with catalog-based routing
- replace legacy channel management endpoints with a backend channel catalog API
- switch frontend channel updates to PATCH /api/config and per-channel config pages
- add dynamic channel items in the sidebar with support for expand/collapse
- migrate /channels to nested routes (/channels/$name) and remove old card/sheet flow
- improve channel forms with clearer hints, required/error states, and reusable switch cards
- fix Discord mention-only toggle to read/write group_trigger.mention_only
* refactor(frontend): move shared-form to components and unify default-model switch with SwitchCardField
* fix(frontend): improve model form validation and unify secret placeholder handling
- block duplicate model aliases when adding a model (with localized error messages)
- share masked secret placeholder logic across model and channel forms
- refresh gateway state after setting the default model
- apply minor UI cleanup to provider icon rendering
* feat(web): add visual system config and launcher/autostart controls
- add launcher config model and persistence (`launcher-config.json`) for port/public/CIDR settings
- add system APIs for launch-at-login and launcher parameters
- apply CIDR-based access-control middleware to backend HTTP routes
- split config routing into visual config and raw JSON config pages
- add frontend system API client and visual config sections for runtime/devices/launcher
- expand i18n strings (en/zh) for new config UI
- improve sidebar active matching and session ID generation fallback
* refactor(frontend): remove i18n fallback strings and drop providers route
- Replace `t(key, defaultValue)` calls with key-only translations across UI pages
- Clean up locale files by pruning unused keys and adding missing shared keys
- Remove the obsolete `/providers` page and update generated route tree
* fix(backend): correct gateway status detection on Windows
* fix(repo): keep web backend dist placeholder tracked
---------
Co-authored-by: Guoguo <16666742+imguoguo@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Dihubopen <dihubcn@gmail.com>
Co-authored-by: Dihubopen <130813726+Dihubopen@users.noreply.github.com>
2026-03-09 11:42:03 +00:00
|
|
|
"loadingMore": "Loading more...",
|
|
|
|
|
"deleteSession": "Delete session",
|
|
|
|
|
"messagesCount": "{{count}} messages",
|
|
|
|
|
"noModel": "Select model",
|
|
|
|
|
"empty": {
|
|
|
|
|
"noConfiguredModel": "No Model Configured",
|
|
|
|
|
"noConfiguredModelDescription": "You need to configure at least one AI model with an API key before you can start chatting.",
|
|
|
|
|
"goToModels": "Go to Models",
|
|
|
|
|
"noSelectedModel": "No Model Selected",
|
|
|
|
|
"noSelectedModelDescription": "You have configured models, but none is set as default. Select a model before starting chat.",
|
|
|
|
|
"notRunning": "Gateway Not Running",
|
|
|
|
|
"notRunningDescription": "Start the gateway service to begin chatting. Use the Start Gateway button in the top bar."
|
|
|
|
|
},
|
|
|
|
|
"modelGroup": {
|
|
|
|
|
"apikey": "API Key",
|
|
|
|
|
"oauth": "OAuth",
|
|
|
|
|
"local": "Local"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"header": {
|
|
|
|
|
"gateway": {
|
|
|
|
|
"stopDialog": {
|
|
|
|
|
"title": "Stop Gateway Service?",
|
|
|
|
|
"description": "Are you sure you want to stop the gateway? This will disconnect your active chat sessions and halt inference.",
|
|
|
|
|
"confirm": "Stop Gateway"
|
|
|
|
|
},
|
|
|
|
|
"action": {
|
|
|
|
|
"start": "Start Gateway",
|
|
|
|
|
"stop": "Stop Gateway"
|
|
|
|
|
},
|
|
|
|
|
"status": {
|
|
|
|
|
"starting": "Starting Gateway..."
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"common": {
|
|
|
|
|
"cancel": "Cancel",
|
|
|
|
|
"save": "Save",
|
|
|
|
|
"saving": "Saving...",
|
|
|
|
|
"reset": "Reset",
|
|
|
|
|
"confirm": "Confirm"
|
|
|
|
|
},
|
|
|
|
|
"labels": {
|
|
|
|
|
"loading": "Loading..."
|
|
|
|
|
},
|
|
|
|
|
"credentials": {
|
|
|
|
|
"description": "Manage OAuth and token-based credentials for supported providers.",
|
|
|
|
|
"loading": "Loading credentials...",
|
|
|
|
|
"providers": {
|
|
|
|
|
"openai": {
|
|
|
|
|
"description": "Supports browser OAuth, device code, and token login."
|
|
|
|
|
},
|
|
|
|
|
"anthropic": {
|
|
|
|
|
"description": "Uses token login for Claude access."
|
|
|
|
|
},
|
|
|
|
|
"antigravity": {
|
|
|
|
|
"description": "Uses browser OAuth for Google Cloud Code Assist."
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"status": {
|
|
|
|
|
"connected": "Connected",
|
|
|
|
|
"needsRefresh": "Needs refresh",
|
|
|
|
|
"expired": "Expired",
|
|
|
|
|
"notLoggedIn": "Not logged in"
|
|
|
|
|
},
|
|
|
|
|
"actions": {
|
|
|
|
|
"browser": "Browser OAuth",
|
|
|
|
|
"deviceCode": "Device Code",
|
|
|
|
|
"stopLoading": "Stop Loading",
|
|
|
|
|
"saveToken": "Save",
|
|
|
|
|
"logout": "Logout"
|
|
|
|
|
},
|
|
|
|
|
"logoutDialog": {
|
|
|
|
|
"title": "Logout provider?",
|
|
|
|
|
"description": "This will remove your saved credential for {{provider}}."
|
|
|
|
|
},
|
|
|
|
|
"fields": {
|
|
|
|
|
"openaiToken": "OpenAI token",
|
|
|
|
|
"anthropicToken": "Anthropic token"
|
|
|
|
|
},
|
|
|
|
|
"labels": {
|
|
|
|
|
"account": "Account",
|
|
|
|
|
"email": "Email",
|
|
|
|
|
"project": "Project"
|
|
|
|
|
},
|
|
|
|
|
"errors": {
|
|
|
|
|
"loadFailed": "Failed to load credentials",
|
|
|
|
|
"flowFailed": "Failed to check authentication flow",
|
|
|
|
|
"loginFailed": "Login failed",
|
|
|
|
|
"logoutFailed": "Logout failed",
|
|
|
|
|
"invalidBrowserResponse": "Invalid browser login response",
|
|
|
|
|
"invalidDeviceResponse": "Invalid device code response",
|
|
|
|
|
"popupBlocked": "Unable to open a new tab. Please allow popups and try again."
|
|
|
|
|
},
|
|
|
|
|
"flow": {
|
|
|
|
|
"current": "Current authentication status",
|
|
|
|
|
"pending": "Waiting for authorization...",
|
|
|
|
|
"success": "Authentication successful",
|
|
|
|
|
"error": "Authentication failed",
|
|
|
|
|
"expired": "Authentication session expired"
|
|
|
|
|
},
|
|
|
|
|
"device": {
|
|
|
|
|
"title": "OpenAI Device Login",
|
|
|
|
|
"description": "Open the verification page and enter the code below. This page will refresh automatically.",
|
|
|
|
|
"code": "User Code",
|
|
|
|
|
"url": "Verification URL",
|
|
|
|
|
"polling": "Polling login status...",
|
|
|
|
|
"open": "Open Verification Page"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"models": {
|
|
|
|
|
"description": "Configure API keys for AI providers. Only configured models are available for chat.",
|
|
|
|
|
"loadError": "Failed to load models",
|
|
|
|
|
"noDefaultHintPrefix": "No default model set yet. Click",
|
|
|
|
|
"noDefaultHintSuffix": "to set one.",
|
|
|
|
|
"status": {
|
|
|
|
|
"configured": "Configured",
|
|
|
|
|
"unconfigured": "Not configured"
|
|
|
|
|
},
|
|
|
|
|
"badge": {
|
|
|
|
|
"default": "Default"
|
|
|
|
|
},
|
|
|
|
|
"action": {
|
|
|
|
|
"edit": "Edit API key",
|
|
|
|
|
"setDefault": "Set as default",
|
|
|
|
|
"delete": "Delete model"
|
|
|
|
|
},
|
|
|
|
|
"defaultOnSave": {
|
|
|
|
|
"label": "Default Model",
|
|
|
|
|
"description": "Automatically set this model as default after saving."
|
|
|
|
|
},
|
|
|
|
|
"add": {
|
|
|
|
|
"button": "Add Model",
|
|
|
|
|
"title": "Add Custom Model",
|
|
|
|
|
"description": "Add an OpenAI-compatible or native model endpoint.",
|
|
|
|
|
"modelName": "Model Alias",
|
|
|
|
|
"modelNamePlaceholder": "e.g. my-gpt4",
|
|
|
|
|
"modelNameHint": "A short name used to identify this model in conversations.",
|
|
|
|
|
"modelId": "Model Identifier",
|
|
|
|
|
"modelIdPlaceholder": "e.g. openai/gpt-4o",
|
|
|
|
|
"modelIdHint": "Format: protocol/model-id. Supported: openai, anthropic, gemini, groq, …",
|
|
|
|
|
"errorRequired": "This field is required.",
|
|
|
|
|
"errorDuplicateModelName": "Model alias already exists. Please use a different name.",
|
|
|
|
|
"saveError": "Failed to add model",
|
|
|
|
|
"confirm": "Add Model"
|
|
|
|
|
},
|
|
|
|
|
"delete": {
|
|
|
|
|
"title": "Delete Model?",
|
|
|
|
|
"description": "\"{{name}}\" will be permanently removed from your model list. This cannot be undone.",
|
|
|
|
|
"confirm": "Delete"
|
|
|
|
|
},
|
|
|
|
|
"advanced": {
|
|
|
|
|
"toggle": "Advanced options"
|
|
|
|
|
},
|
|
|
|
|
"field": {
|
|
|
|
|
"apiBase": "API Base URL",
|
|
|
|
|
"apiKey": "API Key",
|
|
|
|
|
"apiKeyPlaceholder": "Enter your API key",
|
|
|
|
|
"apiKeyPlaceholderSet": "Leave blank to keep existing key",
|
|
|
|
|
"proxy": "HTTP Proxy",
|
|
|
|
|
"proxyHint": "Optional. e.g. http://127.0.0.1:7890",
|
|
|
|
|
"authMethod": "Auth Method",
|
|
|
|
|
"authMethodHint": "Authentication method: oauth, token. Leave blank for API key auth.",
|
|
|
|
|
"connectMode": "Connect Mode",
|
|
|
|
|
"connectModeHint": "Connection mode for CLI-based providers: stdio or grpc.",
|
|
|
|
|
"workspace": "Workspace Path",
|
|
|
|
|
"workspaceHint": "Working directory for CLI-based providers (e.g. GitHub Copilot).",
|
|
|
|
|
"requestTimeout": "Request Timeout (s)",
|
|
|
|
|
"requestTimeoutHint": "Maximum seconds to wait for a response. 0 = use default.",
|
|
|
|
|
"rpm": "Rate Limit (RPM)",
|
|
|
|
|
"rpmHint": "Maximum requests per minute. 0 = no limit.",
|
|
|
|
|
"thinkingLevel": "Thinking Level",
|
|
|
|
|
"thinkingLevelHint": "Extended thinking budget: off, low, medium, high, xhigh, adaptive.",
|
|
|
|
|
"maxTokensField": "Max Tokens Field",
|
|
|
|
|
"maxTokensFieldHint": "Override the request field name for max tokens, e.g. max_completion_tokens."
|
|
|
|
|
},
|
|
|
|
|
"edit": {
|
|
|
|
|
"title": "Configure {{name}}",
|
|
|
|
|
"apiKeyHint": "A key is already set. Leave blank to keep it unchanged.",
|
|
|
|
|
"oauthNote": "This provider uses OAuth — no API key required.",
|
|
|
|
|
"saveError": "Failed to save"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"channels": {
|
|
|
|
|
"loadError": "Failed to load channels",
|
|
|
|
|
"edit": "Configure {{name}}",
|
|
|
|
|
"status": {
|
|
|
|
|
"configured": "Configured"
|
|
|
|
|
},
|
|
|
|
|
"name": {
|
|
|
|
|
"telegram": "Telegram",
|
|
|
|
|
"discord": "Discord",
|
|
|
|
|
"slack": "Slack",
|
|
|
|
|
"feishu": "Feishu",
|
|
|
|
|
"dingtalk": "DingTalk",
|
|
|
|
|
"line": "LINE",
|
|
|
|
|
"qq": "QQ",
|
|
|
|
|
"onebot": "OneBot",
|
|
|
|
|
"wecom": "WeCom",
|
|
|
|
|
"wecom_app": "WeCom App",
|
|
|
|
|
"wecom_aibot": "WeCom AI Bot",
|
|
|
|
|
"whatsapp": "WhatsApp",
|
|
|
|
|
"whatsapp_native": "WhatsApp Native",
|
|
|
|
|
"pico": "Web",
|
|
|
|
|
"maixcam": "MaixCam",
|
|
|
|
|
"matrix": "Matrix",
|
|
|
|
|
"irc": "IRC"
|
|
|
|
|
},
|
|
|
|
|
"field": {
|
|
|
|
|
"token": "Bot Token",
|
|
|
|
|
"tokenPlaceholder": "Enter bot token",
|
|
|
|
|
"botToken": "Bot Token",
|
|
|
|
|
"appToken": "App Token",
|
|
|
|
|
"appId": "App ID",
|
|
|
|
|
"appSecret": "App Secret",
|
|
|
|
|
"verificationToken": "Verification Token",
|
|
|
|
|
"encryptKey": "Encrypt Key",
|
|
|
|
|
"baseUrl": "API Base URL",
|
|
|
|
|
"proxy": "HTTP Proxy",
|
|
|
|
|
"mentionOnly": "Mention Only",
|
|
|
|
|
"typingEnabled": "Typing Indicator",
|
|
|
|
|
"placeholderEnabled": "Placeholder Message",
|
|
|
|
|
"placeholderText": "Placeholder Text",
|
|
|
|
|
"groupTriggerMentionOnly": "Group Mention Only",
|
|
|
|
|
"groupTriggerPrefixes": "Group Trigger Prefixes",
|
|
|
|
|
"allowFrom": "Allow From",
|
|
|
|
|
"allowFromPlaceholder": "e.g. 123456, 789012",
|
|
|
|
|
"allowOrigins": "Allow Origins",
|
|
|
|
|
"allowOriginsPlaceholder": "e.g. https://example.com, http://localhost:5173",
|
|
|
|
|
"secretPlaceholder": "Enter secret",
|
|
|
|
|
"secretHintSet": "A value is already set. Leave blank to keep it unchanged."
|
|
|
|
|
},
|
|
|
|
|
"page": {
|
|
|
|
|
"notFound": "Channel \"{{name}}\" is not supported.",
|
|
|
|
|
"saveSuccess": "Channel configuration saved.",
|
|
|
|
|
"saveError": "Failed to save channel configuration",
|
|
|
|
|
"enabled": "enabled",
|
|
|
|
|
"docLink": "Documentation",
|
|
|
|
|
"enableLabel": "Enable channel"
|
|
|
|
|
},
|
|
|
|
|
"form": {
|
|
|
|
|
"desc": {
|
|
|
|
|
"token": "Bot access token used to connect to the platform API.",
|
|
|
|
|
"botToken": "Bot token used to send and receive messages.",
|
|
|
|
|
"appToken": "App token used for Socket Mode connections.",
|
|
|
|
|
"appId": "Unique application ID used for authentication.",
|
|
|
|
|
"appSecret": "Application secret used for signing and authentication.",
|
|
|
|
|
"verificationToken": "Verification token for event callbacks.",
|
|
|
|
|
"encryptKey": "Encryption key used to decrypt callback payloads.",
|
|
|
|
|
"baseUrl": "Platform API base URL. Official endpoint is used by default.",
|
|
|
|
|
"proxy": "HTTP proxy address for outbound network access.",
|
|
|
|
|
"mentionOnly": "Only respond when the bot is explicitly mentioned in group chats.",
|
|
|
|
|
"typingEnabled": "Display typing status while the assistant is generating a response.",
|
|
|
|
|
"placeholderEnabled": "Enable temporary placeholder messages before the final reply is sent.",
|
|
|
|
|
"groupTriggerMentionOnly": "In group chats, respond only when the bot is mentioned.",
|
|
|
|
|
"groupTriggerPrefixes": "Custom group-chat trigger prefixes, separated by commas.",
|
|
|
|
|
"allowFrom": "Allowed user or group IDs, separated by commas.",
|
|
|
|
|
"allowOrigins": "Allowed origin domains, separated by commas.",
|
|
|
|
|
"wsUrl": "WebSocket service URL.",
|
|
|
|
|
"reconnectInterval": "Reconnect interval after disconnection (seconds).",
|
|
|
|
|
"bridgeUrl": "Bridge service URL.",
|
|
|
|
|
"sessionStorePath": "Local path for session storage.",
|
|
|
|
|
"useNative": "Whether to use native client mode.",
|
|
|
|
|
"host": "Service host address.",
|
|
|
|
|
"port": "Service port.",
|
|
|
|
|
"homeserver": "Matrix homeserver URL.",
|
|
|
|
|
"userId": "Account user ID.",
|
|
|
|
|
"deviceId": "Device ID.",
|
|
|
|
|
"joinOnInvite": "Automatically join rooms when invited.",
|
|
|
|
|
"clientId": "Client ID used for platform authentication.",
|
|
|
|
|
"corpId": "Enterprise Corp ID.",
|
|
|
|
|
"agentId": "Enterprise application Agent ID.",
|
|
|
|
|
"webhookUrl": "Full webhook URL.",
|
|
|
|
|
"webhookHost": "Webhook listening host.",
|
|
|
|
|
"webhookPort": "Webhook listening port.",
|
|
|
|
|
"webhookPath": "Webhook route path.",
|
|
|
|
|
"replyTimeout": "Reply timeout in seconds.",
|
|
|
|
|
"maxSteps": "Maximum number of processing steps.",
|
|
|
|
|
"welcomeMessage": "Welcome message content for new sessions.",
|
|
|
|
|
"allowTokenQuery": "Allow token in URL query parameters.",
|
|
|
|
|
"pingInterval": "Connection heartbeat interval in seconds.",
|
|
|
|
|
"readTimeout": "Read timeout in seconds.",
|
|
|
|
|
"writeTimeout": "Write timeout in seconds.",
|
|
|
|
|
"maxConnections": "Maximum number of concurrent connections.",
|
|
|
|
|
"server": "IRC server address.",
|
|
|
|
|
"tls": "Whether to enable TLS.",
|
|
|
|
|
"nick": "Bot nickname.",
|
|
|
|
|
"user": "IRC username.",
|
|
|
|
|
"realName": "Displayed real name.",
|
|
|
|
|
"channels": "IRC channels to join.",
|
|
|
|
|
"requestCaps": "IRC capability list requested on connect.",
|
|
|
|
|
"genericField": "Used to configure {{field}}."
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"validation": {
|
|
|
|
|
"requiredField": "This field is required."
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"pages": {
|
feat(web): add agent management UI and improve launcher integration (#1358)
* Improve the web launcher and gateway integration across backend and frontend.
- add runtime model availability checks for local and OAuth-backed models
- support launcher-driven gateway host overrides and websocket URL resolution
- add gateway log clearing and keep incremental log sync consistent after resets
- migrate session history APIs to JSONL metadata-backed storage with legacy fallback
- expose session titles and improve chat history loading and error handling
- move shared backend runtime helpers into the web utils package
- avoid blocking web startup when automatic onboard initialization fails
- add backend tests covering gateway readiness, host resolution, models, logs, and sessions
* feat(agent): add skills and tools management APIs and UI
- add backend APIs to list, view, import, and delete skills
- add tool status and toggle endpoints with dependency-aware config updates
- add agent skills/tools pages, routes, sidebar entries, and i18n strings
- add backend tests for the new skills and tools flows
* chore(frontend): upgrade shadcn to 4.0.5 and refresh lockfile
* chore(web): keep backend dist placeholder tracked
2026-03-11 10:37:00 +00:00
|
|
|
"agent": {
|
|
|
|
|
"load_error": "Failed to load agent support information.",
|
|
|
|
|
"stats": {
|
|
|
|
|
"workspace": "Workspace",
|
|
|
|
|
"workspace_hint": "The default agent workspace used for runtime files and workspace skills.",
|
|
|
|
|
"skills": "Available Skills",
|
|
|
|
|
"skills_hint": "Skills discovered from workspace, global, and builtin roots.",
|
|
|
|
|
"tools": "Enabled Tools",
|
|
|
|
|
"tools_hint": "{{blocked}} blocked by missing dependencies."
|
|
|
|
|
},
|
|
|
|
|
"skills": {
|
|
|
|
|
"title": "Skills",
|
|
|
|
|
"description": "Skills are loaded from the workspace, global PicoClaw home, and builtin directories.",
|
|
|
|
|
"hero_title": "Skill Library",
|
|
|
|
|
"hero_description": "Browse every capability package the agent can load, then drill straight into the effective SKILL.md without leaving the page.",
|
|
|
|
|
"stats": {
|
|
|
|
|
"total": "Total Skills",
|
|
|
|
|
"workspace": "Workspace",
|
|
|
|
|
"shared": "Shared"
|
|
|
|
|
},
|
|
|
|
|
"empty": "No skills are currently available.",
|
|
|
|
|
"import": "Import Skill",
|
|
|
|
|
"import_title": "Import Skill",
|
|
|
|
|
"import_description": "Create a workspace skill by uploading a markdown file as the new SKILL.md.",
|
|
|
|
|
"import_name": "Skill Name",
|
|
|
|
|
"import_name_placeholder": "e.g. my-workflow",
|
|
|
|
|
"import_file": "Markdown File",
|
|
|
|
|
"import_file_hint": "Upload a .md file. The backend stores it as workspace/skills/<name>/SKILL.md.",
|
|
|
|
|
"import_confirm": "Import Skill",
|
|
|
|
|
"import_success": "Skill imported.",
|
|
|
|
|
"import_error": "Failed to import skill.",
|
|
|
|
|
"view": "View",
|
|
|
|
|
"delete": "Delete",
|
|
|
|
|
"delete_title": "Delete Skill?",
|
|
|
|
|
"delete_description": "\"{{name}}\" will be removed from workspace skills.",
|
|
|
|
|
"delete_confirm": "Delete",
|
|
|
|
|
"delete_success": "Skill deleted.",
|
|
|
|
|
"delete_error": "Failed to delete skill.",
|
|
|
|
|
"viewer_title": "Skill Content",
|
|
|
|
|
"viewer_description": "Read the current effective SKILL.md content here.",
|
|
|
|
|
"loading_detail": "Loading skill content...",
|
|
|
|
|
"load_detail_error": "Failed to load skill content.",
|
|
|
|
|
"source": "Source",
|
|
|
|
|
"path": "Skill Path",
|
|
|
|
|
"no_description": "No description provided.",
|
|
|
|
|
"sources": {
|
|
|
|
|
"workspace": "Workspace",
|
|
|
|
|
"global": "Global",
|
|
|
|
|
"builtin": "Builtin"
|
|
|
|
|
},
|
|
|
|
|
"errors": {
|
|
|
|
|
"file_required": "Please choose a markdown file to import."
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"tools": {
|
|
|
|
|
"title": "Tools",
|
|
|
|
|
"description": "This view reflects whether each agent tool is enabled, disabled, or blocked by a missing prerequisite.",
|
|
|
|
|
"hero_title": "Tool Surface",
|
|
|
|
|
"hero_description": "Inspect what the agent can actually call right now, which capabilities are blocked, and where each tool is controlled in config.",
|
|
|
|
|
"stats": {
|
|
|
|
|
"enabled": "Enabled",
|
|
|
|
|
"blocked": "Blocked",
|
|
|
|
|
"categories": "Categories"
|
|
|
|
|
},
|
|
|
|
|
"empty": "No tools are available.",
|
|
|
|
|
"enable": "Enable",
|
|
|
|
|
"disable": "Disable",
|
|
|
|
|
"enable_success": "Tool enabled.",
|
|
|
|
|
"disable_success": "Tool disabled.",
|
|
|
|
|
"toggle_error": "Failed to update tool state.",
|
|
|
|
|
"config_key": "Controlled by tools.{{key}}",
|
|
|
|
|
"status": {
|
|
|
|
|
"enabled": "Enabled",
|
|
|
|
|
"disabled": "Disabled",
|
|
|
|
|
"blocked": "Blocked"
|
|
|
|
|
},
|
|
|
|
|
"categories": {
|
|
|
|
|
"automation": "Automation",
|
|
|
|
|
"filesystem": "Filesystem",
|
|
|
|
|
"web": "Web",
|
|
|
|
|
"communication": "Communication",
|
|
|
|
|
"skills": "Skills",
|
|
|
|
|
"agents": "Agents",
|
|
|
|
|
"hardware": "Hardware",
|
|
|
|
|
"discovery": "Discovery"
|
|
|
|
|
},
|
|
|
|
|
"reasons": {
|
|
|
|
|
"requires_linux": "This tool only works on Linux hosts with the required device files exposed.",
|
|
|
|
|
"requires_skills": "Enable `tools.skills` before this skill-registry tool can be used.",
|
|
|
|
|
"requires_subagent": "Enable `tools.subagent` before the spawn tool can delegate work.",
|
|
|
|
|
"requires_mcp_discovery": "Enable `tools.mcp.discovery` before MCP discovery tools become available."
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
feat(web): migrate launcher to modular web frontend/backend and improve management UX (#1275)
* refactor: remove the legacy picoclaw-launcher
* feat: create initial web frontend and backend structure
* feat(packaging): add desktop entry for PicoClaw Launcher (#1062)
- Add .desktop file with Terminal=true, named "PicoClaw Launcher"
- Install to /usr/share/applications/ for app menu visibility
- Add 512x512 PNG icon to /usr/share/icons/hicolor/
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* `make dev`: If you haven't built it before, you need to run `build` first.
* feat(web): comprehensive web UI and backend refactoring
This commit introduces a major overhaul of both the frontend web UI and the Go backend API, transitioning to a highly modular architecture and integrating new core features.
Backend:
- Refactored monolithic API endpoints into domain-specific modules (config, gateway, log, models, pico, session).
- Cleaned up obsolete files (`server.go`, `status.go`, WebSocket handlers) and outdated tests.
- Implemented Gateway process lifecycle management (start/stop/restart) and real-time log streaming.
Frontend:
- Integrated Shadcn UI components to establish a modern, consistent design system.
- Introduced a new application layout featuring a responsive sidebar (`app-sidebar`) and header.
- Implemented internationalization (i18n) with initial support for English and Chinese.
- Restructured API clients, hooks, and Zustand stores into logical domains.
- Added new management pages for Settings, Logs, Models, Providers, and Credentials.
- Upgraded the Pico chat interface with session history management and dynamic model selection.
Build & Config:
- Updated frontend dependencies, Vite configuration, and lockfiles.
- Refined routing setup and overarching application stylesheets.
* feat(web): enhance model management, sorting, and deletion logic
- Implement model sorting in UI (default > configured > unconfigured)
- Prevent deletion of default models in the frontend
- Update backend to clear default settings when a model is deleted
- Add existence validation when setting a default model via API
- Group models in chat UI by type (API Key, OAuth, Local)
- Conditionally display model selector in chat based on configuration status
* refactor(web): refactor chat page into modular components/hooks and update i18n
- split chat route into dedicated chat components (page, composer, empty state, messages, history, model selector)
- extract model/session logic into use-chat-models and use-session-history hooks
- update chat locale keys in en/zh and add empty-state/history-related translations
* refactor(models): refactor models page into modular components and improve UX
- split /models route into dedicated components (page, provider section, card, add/edit sheets, delete dialog)
- add provider grouping/sorting, provider labels/icons, and a no-default hint in the models page
- add "Set as default model" toggle to add/edit flows with safer defaults
- introduce shared form helpers and new UI primitives (field, label, switch)
- update i18n strings (en/zh) for models and gateway header text usage
- apply minor UI polish (models nav icon, separator client directive)
* fix(web): add SPA index fallback for embedded frontend routes
Serve existing static assets as-is, keep /api/* and missing asset paths returning 404, and add tests for SPA fallback behavior on refresh.
* fix(frontend/chat): normalize message timestamp units to prevent invalid far-future dates
* chore: delete TestSPARouteFallsBackToIndex
* feat: update build for web-based launcher (#1186)
- Makefile: add build-launcher target (builds frontend + Go backend)
- GoReleaser: point picoclaw-launcher build to web/backend, add frontend
build hook, restore winres hook with updated paths
- Restore icon.ico and winres config from main for Windows builds
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(credentials): add multi-provider OAuth credential management
- add backend `/api/oauth/*` endpoints for provider status, browser/device-code/token login, flow query/polling, and logout
- extend API handler with OAuth flow/state tracking and route registration, plus OAuth unit tests
- implement frontend credentials page/components for OpenAI, Anthropic, and Google Antigravity login/logout
- add OAuth API client and `useCredentialsPage` hook, with new EN/ZH i18n strings
* chore: remove placeholder index.html from dist (#1188)
The .gitkeep is sufficient for go:embed to find the dist directory.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): polish model and credential UX; remove Providers nav
- remove the Providers item from sidebar navigation and locale keys
- simplify chat composer by dropping attach/voice action buttons
- support ReactNode titles in credential cards and add provider brand icons
- refine sheet header/footer styling and device-code footer button hierarchy
- disable “Set default” when a model is unconfigured or already default
* feat(web): Update config page (#1173)
* feat(web): Update config page
* fix(web): useEffect resets editorValue whenever config changes
* fix(web): react-hooks/set-state-in-effect error & pnpm lint #1173
* feat(web): add channel management page for web console (#1190)
* feat(web): add channel management page for web console
Add a complete channel management UI that allows users to configure
messaging channels (Telegram, Discord, Slack, Feishu, etc.) directly
from the web console instead of manually editing config.json.
Backend: GET/PUT/PATCH API endpoints for listing, updating, and
toggling channels with secret field masking.
Frontend: Channel cards grid with enable/disable toggles, per-channel
configuration sheets with dedicated forms for major platforms and a
generic fallback for others.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web/channels): move channels to own sidebar group and fix sheet padding
- Channels now has its own navigation group instead of being under Services
- Fix edit sheet form content padding (px-1 -> px-4) to match header/footer
- Fix naked return lint error in extractChannelInfo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web): harden channel config updates and resolve frontend lint issues
- validate channel PUT/PATCH updates before saving and return structured validation errors
- require `enabled` in toggle requests to avoid silent false defaults
- support editing `allow_origins` in the generic channel form and parse string/array inputs on backend
- replace channel form `any` usage with `ChannelConfig` (`Record<string, unknown>`) and add safe value helpers
- add i18n strings for allow-origins fields and apply related frontend formatting cleanups
* fix(frontend): prevent false "Invalid JSON" errors in config editor
* feat: add startup readiness checks and propagate start availability to UI
- add gateway precondition validation for default model and credentials
- auto-start gateway on backend boot when conditions are met
- include gateway_start_allowed and gateway_start_reason in status updates
- prevent frontend start actions when gateway cannot be started
* feat(web): revamp channel config UX with catalog-based routing
- replace legacy channel management endpoints with a backend channel catalog API
- switch frontend channel updates to PATCH /api/config and per-channel config pages
- add dynamic channel items in the sidebar with support for expand/collapse
- migrate /channels to nested routes (/channels/$name) and remove old card/sheet flow
- improve channel forms with clearer hints, required/error states, and reusable switch cards
- fix Discord mention-only toggle to read/write group_trigger.mention_only
* refactor(frontend): move shared-form to components and unify default-model switch with SwitchCardField
* fix(frontend): improve model form validation and unify secret placeholder handling
- block duplicate model aliases when adding a model (with localized error messages)
- share masked secret placeholder logic across model and channel forms
- refresh gateway state after setting the default model
- apply minor UI cleanup to provider icon rendering
* feat(web): add visual system config and launcher/autostart controls
- add launcher config model and persistence (`launcher-config.json`) for port/public/CIDR settings
- add system APIs for launch-at-login and launcher parameters
- apply CIDR-based access-control middleware to backend HTTP routes
- split config routing into visual config and raw JSON config pages
- add frontend system API client and visual config sections for runtime/devices/launcher
- expand i18n strings (en/zh) for new config UI
- improve sidebar active matching and session ID generation fallback
* refactor(frontend): remove i18n fallback strings and drop providers route
- Replace `t(key, defaultValue)` calls with key-only translations across UI pages
- Clean up locale files by pruning unused keys and adding missing shared keys
- Remove the obsolete `/providers` page and update generated route tree
* fix(backend): correct gateway status detection on Windows
* fix(repo): keep web backend dist placeholder tracked
---------
Co-authored-by: Guoguo <16666742+imguoguo@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Dihubopen <dihubcn@gmail.com>
Co-authored-by: Dihubopen <130813726+Dihubopen@users.noreply.github.com>
2026-03-09 11:42:03 +00:00
|
|
|
"config": {
|
|
|
|
|
"load_error": "Failed to load configuration. Please refresh and try again.",
|
|
|
|
|
"workspace": "Workspace Directory",
|
|
|
|
|
"workspace_hint": "Base directory for agent file operations.",
|
|
|
|
|
"restrict_workspace": "Restrict to Workspace",
|
|
|
|
|
"restrict_workspace_hint": "Only allow file operations inside workspace.",
|
|
|
|
|
"max_tokens": "Max Tokens",
|
|
|
|
|
"max_tokens_hint": "Upper token limit per model response.",
|
|
|
|
|
"max_tool_iterations": "Max Tool Iterations",
|
|
|
|
|
"max_tool_iterations_hint": "Maximum tool-call loops in a single task.",
|
|
|
|
|
"summarize_threshold": "Summarize Message Threshold",
|
|
|
|
|
"summarize_threshold_hint": "Start summarization after this many messages.",
|
|
|
|
|
"summarize_token_percent": "Summarize Token Percent",
|
|
|
|
|
"summarize_token_percent_hint": "Used when conversation summary is triggered.",
|
|
|
|
|
"session_scope": "Session Scope",
|
|
|
|
|
"session_scope_hint": "How chat context is isolated across peers/channels.",
|
|
|
|
|
"session_scope_per_channel_peer": "Per Channel + Peer",
|
|
|
|
|
"session_scope_per_channel_peer_desc": "Separate context for each user in each channel.",
|
|
|
|
|
"session_scope_per_channel": "Per Channel",
|
|
|
|
|
"session_scope_per_channel_desc": "One shared context per channel.",
|
|
|
|
|
"session_scope_per_peer": "Per Peer",
|
|
|
|
|
"session_scope_per_peer_desc": "One context per user across channels.",
|
|
|
|
|
"session_scope_global": "Global",
|
|
|
|
|
"session_scope_global_desc": "All messages share one global context.",
|
|
|
|
|
"heartbeat_enabled": "Heartbeat",
|
|
|
|
|
"heartbeat_enabled_hint": "Send periodic heartbeat messages.",
|
|
|
|
|
"heartbeat_interval": "Heartbeat Interval (minutes)",
|
|
|
|
|
"heartbeat_interval_hint": "Interval in minutes between heartbeat signals.",
|
|
|
|
|
"devices_enabled": "Enable Devices",
|
|
|
|
|
"devices_enabled_hint": "Enable hardware-device integrations.",
|
|
|
|
|
"monitor_usb": "Monitor USB",
|
|
|
|
|
"monitor_usb_hint": "Watch USB plug/unplug events when devices are enabled.",
|
|
|
|
|
"autostart_label": "Launch at Login",
|
|
|
|
|
"autostart_hint": "Start PicoClaw Web automatically when you log in.",
|
|
|
|
|
"autostart_unsupported": "Launch at login is not supported on this platform.",
|
|
|
|
|
"autostart_load_error": "Failed to load launch-at-login status.",
|
|
|
|
|
"server_port": "Service Port",
|
|
|
|
|
"server_port_hint": "HTTP port used by PicoClaw Web.",
|
|
|
|
|
"lan_access": "Enable LAN Access",
|
|
|
|
|
"lan_access_hint": "Allow access from other devices on your local network.",
|
|
|
|
|
"allowed_cidrs": "Allowed Network CIDRs",
|
|
|
|
|
"allowed_cidrs_hint": "Only clients from these CIDR ranges can access the service. One per line or comma-separated. Leave empty to allow all.",
|
|
|
|
|
"allowed_cidrs_placeholder": "192.168.1.0/24\n10.0.0.0/8",
|
|
|
|
|
"launcher_load_error": "Failed to load service parameters.",
|
|
|
|
|
"launcher_restart_hint": "Service parameter changes apply after restarting PicoClaw Web.",
|
|
|
|
|
"advanced_desc": "Open the raw JSON page to edit every field directly.",
|
|
|
|
|
"open_raw": "Raw Config",
|
|
|
|
|
"back_to_visual": "Visual Config",
|
|
|
|
|
"raw_json_title": "Raw JSON Configuration",
|
|
|
|
|
"raw_json_desc": "Advanced users can directly edit the raw JSON configuration below.",
|
|
|
|
|
"json_placeholder": "Enter valid JSON configuration...",
|
|
|
|
|
"save_success": "Configuration saved successfully.",
|
|
|
|
|
"save_error": "Failed to save configuration.",
|
|
|
|
|
"reset_confirm_title": "Reset Changes",
|
|
|
|
|
"reset_confirm_desc": "Are you sure you want to reset your unsaved changes back to the last saved state?",
|
|
|
|
|
"reset_success": "Changes have been reset to the last saved state.",
|
|
|
|
|
"invalid_json": "Invalid JSON format.",
|
|
|
|
|
"format_success": "JSON formatted successfully.",
|
|
|
|
|
"format_error": "Invalid JSON format.",
|
|
|
|
|
"format": "Format",
|
|
|
|
|
"unsaved_changes": "You have unsaved changes."
|
|
|
|
|
},
|
|
|
|
|
"logs": {
|
feat(web): add agent management UI and improve launcher integration (#1358)
* Improve the web launcher and gateway integration across backend and frontend.
- add runtime model availability checks for local and OAuth-backed models
- support launcher-driven gateway host overrides and websocket URL resolution
- add gateway log clearing and keep incremental log sync consistent after resets
- migrate session history APIs to JSONL metadata-backed storage with legacy fallback
- expose session titles and improve chat history loading and error handling
- move shared backend runtime helpers into the web utils package
- avoid blocking web startup when automatic onboard initialization fails
- add backend tests covering gateway readiness, host resolution, models, logs, and sessions
* feat(agent): add skills and tools management APIs and UI
- add backend APIs to list, view, import, and delete skills
- add tool status and toggle endpoints with dependency-aware config updates
- add agent skills/tools pages, routes, sidebar entries, and i18n strings
- add backend tests for the new skills and tools flows
* chore(frontend): upgrade shadcn to 4.0.5 and refresh lockfile
* chore(web): keep backend dist placeholder tracked
2026-03-11 10:37:00 +00:00
|
|
|
"description": "System logs and monitoring.",
|
|
|
|
|
"clear": "Clear logs",
|
|
|
|
|
"empty": "Waiting for logs..."
|
feat(web): migrate launcher to modular web frontend/backend and improve management UX (#1275)
* refactor: remove the legacy picoclaw-launcher
* feat: create initial web frontend and backend structure
* feat(packaging): add desktop entry for PicoClaw Launcher (#1062)
- Add .desktop file with Terminal=true, named "PicoClaw Launcher"
- Install to /usr/share/applications/ for app menu visibility
- Add 512x512 PNG icon to /usr/share/icons/hicolor/
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* `make dev`: If you haven't built it before, you need to run `build` first.
* feat(web): comprehensive web UI and backend refactoring
This commit introduces a major overhaul of both the frontend web UI and the Go backend API, transitioning to a highly modular architecture and integrating new core features.
Backend:
- Refactored monolithic API endpoints into domain-specific modules (config, gateway, log, models, pico, session).
- Cleaned up obsolete files (`server.go`, `status.go`, WebSocket handlers) and outdated tests.
- Implemented Gateway process lifecycle management (start/stop/restart) and real-time log streaming.
Frontend:
- Integrated Shadcn UI components to establish a modern, consistent design system.
- Introduced a new application layout featuring a responsive sidebar (`app-sidebar`) and header.
- Implemented internationalization (i18n) with initial support for English and Chinese.
- Restructured API clients, hooks, and Zustand stores into logical domains.
- Added new management pages for Settings, Logs, Models, Providers, and Credentials.
- Upgraded the Pico chat interface with session history management and dynamic model selection.
Build & Config:
- Updated frontend dependencies, Vite configuration, and lockfiles.
- Refined routing setup and overarching application stylesheets.
* feat(web): enhance model management, sorting, and deletion logic
- Implement model sorting in UI (default > configured > unconfigured)
- Prevent deletion of default models in the frontend
- Update backend to clear default settings when a model is deleted
- Add existence validation when setting a default model via API
- Group models in chat UI by type (API Key, OAuth, Local)
- Conditionally display model selector in chat based on configuration status
* refactor(web): refactor chat page into modular components/hooks and update i18n
- split chat route into dedicated chat components (page, composer, empty state, messages, history, model selector)
- extract model/session logic into use-chat-models and use-session-history hooks
- update chat locale keys in en/zh and add empty-state/history-related translations
* refactor(models): refactor models page into modular components and improve UX
- split /models route into dedicated components (page, provider section, card, add/edit sheets, delete dialog)
- add provider grouping/sorting, provider labels/icons, and a no-default hint in the models page
- add "Set as default model" toggle to add/edit flows with safer defaults
- introduce shared form helpers and new UI primitives (field, label, switch)
- update i18n strings (en/zh) for models and gateway header text usage
- apply minor UI polish (models nav icon, separator client directive)
* fix(web): add SPA index fallback for embedded frontend routes
Serve existing static assets as-is, keep /api/* and missing asset paths returning 404, and add tests for SPA fallback behavior on refresh.
* fix(frontend/chat): normalize message timestamp units to prevent invalid far-future dates
* chore: delete TestSPARouteFallsBackToIndex
* feat: update build for web-based launcher (#1186)
- Makefile: add build-launcher target (builds frontend + Go backend)
- GoReleaser: point picoclaw-launcher build to web/backend, add frontend
build hook, restore winres hook with updated paths
- Restore icon.ico and winres config from main for Windows builds
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(credentials): add multi-provider OAuth credential management
- add backend `/api/oauth/*` endpoints for provider status, browser/device-code/token login, flow query/polling, and logout
- extend API handler with OAuth flow/state tracking and route registration, plus OAuth unit tests
- implement frontend credentials page/components for OpenAI, Anthropic, and Google Antigravity login/logout
- add OAuth API client and `useCredentialsPage` hook, with new EN/ZH i18n strings
* chore: remove placeholder index.html from dist (#1188)
The .gitkeep is sufficient for go:embed to find the dist directory.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): polish model and credential UX; remove Providers nav
- remove the Providers item from sidebar navigation and locale keys
- simplify chat composer by dropping attach/voice action buttons
- support ReactNode titles in credential cards and add provider brand icons
- refine sheet header/footer styling and device-code footer button hierarchy
- disable “Set default” when a model is unconfigured or already default
* feat(web): Update config page (#1173)
* feat(web): Update config page
* fix(web): useEffect resets editorValue whenever config changes
* fix(web): react-hooks/set-state-in-effect error & pnpm lint #1173
* feat(web): add channel management page for web console (#1190)
* feat(web): add channel management page for web console
Add a complete channel management UI that allows users to configure
messaging channels (Telegram, Discord, Slack, Feishu, etc.) directly
from the web console instead of manually editing config.json.
Backend: GET/PUT/PATCH API endpoints for listing, updating, and
toggling channels with secret field masking.
Frontend: Channel cards grid with enable/disable toggles, per-channel
configuration sheets with dedicated forms for major platforms and a
generic fallback for others.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web/channels): move channels to own sidebar group and fix sheet padding
- Channels now has its own navigation group instead of being under Services
- Fix edit sheet form content padding (px-1 -> px-4) to match header/footer
- Fix naked return lint error in extractChannelInfo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(web): harden channel config updates and resolve frontend lint issues
- validate channel PUT/PATCH updates before saving and return structured validation errors
- require `enabled` in toggle requests to avoid silent false defaults
- support editing `allow_origins` in the generic channel form and parse string/array inputs on backend
- replace channel form `any` usage with `ChannelConfig` (`Record<string, unknown>`) and add safe value helpers
- add i18n strings for allow-origins fields and apply related frontend formatting cleanups
* fix(frontend): prevent false "Invalid JSON" errors in config editor
* feat: add startup readiness checks and propagate start availability to UI
- add gateway precondition validation for default model and credentials
- auto-start gateway on backend boot when conditions are met
- include gateway_start_allowed and gateway_start_reason in status updates
- prevent frontend start actions when gateway cannot be started
* feat(web): revamp channel config UX with catalog-based routing
- replace legacy channel management endpoints with a backend channel catalog API
- switch frontend channel updates to PATCH /api/config and per-channel config pages
- add dynamic channel items in the sidebar with support for expand/collapse
- migrate /channels to nested routes (/channels/$name) and remove old card/sheet flow
- improve channel forms with clearer hints, required/error states, and reusable switch cards
- fix Discord mention-only toggle to read/write group_trigger.mention_only
* refactor(frontend): move shared-form to components and unify default-model switch with SwitchCardField
* fix(frontend): improve model form validation and unify secret placeholder handling
- block duplicate model aliases when adding a model (with localized error messages)
- share masked secret placeholder logic across model and channel forms
- refresh gateway state after setting the default model
- apply minor UI cleanup to provider icon rendering
* feat(web): add visual system config and launcher/autostart controls
- add launcher config model and persistence (`launcher-config.json`) for port/public/CIDR settings
- add system APIs for launch-at-login and launcher parameters
- apply CIDR-based access-control middleware to backend HTTP routes
- split config routing into visual config and raw JSON config pages
- add frontend system API client and visual config sections for runtime/devices/launcher
- expand i18n strings (en/zh) for new config UI
- improve sidebar active matching and session ID generation fallback
* refactor(frontend): remove i18n fallback strings and drop providers route
- Replace `t(key, defaultValue)` calls with key-only translations across UI pages
- Clean up locale files by pruning unused keys and adding missing shared keys
- Remove the obsolete `/providers` page and update generated route tree
* fix(backend): correct gateway status detection on Windows
* fix(repo): keep web backend dist placeholder tracked
---------
Co-authored-by: Guoguo <16666742+imguoguo@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Dihubopen <dihubcn@gmail.com>
Co-authored-by: Dihubopen <130813726+Dihubopen@users.noreply.github.com>
2026-03-09 11:42:03 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|