diegosouzapw
968159a85d
Merge PR #582 : feat(proxy) — add model name prefix stripping option (by @jay77721, closes #568 )
2026-03-24 13:27:59 -03:00
jay77721
18a3741fc2
feat(proxy): add model name prefix stripping option ( #568 )
...
Add stripModelPrefix boolean setting that, when enabled, strips
provider prefixes (e.g. openai/, anthropic/) from incoming model
names and re-resolves the bare model name using existing heuristics.
This allows tools to send prefixed model names while OmniRoute
handles provider routing at the proxy layer.
- Add stripModelPrefix to settings validation schema (Zod)
- Check setting in getModelInfo() after custom node matching fails
- Falls through to normal resolution on error or when disabled
- Backward compatible: opt-in, default behavior unchanged
2026-03-24 21:52:43 +08:00
jay77721
f1be3e6bb0
fix(npm): link electron-release to npm-publish via workflow_call
...
- Add workflow_call trigger to npm-publish.yml for direct cross-workflow invocation
- Add publish-npm job to electron-release.yml that calls npm-publish after release
- Add dist-tag support: prerelease versions auto-get 'next' tag, stable gets 'latest'
- Add v-prefix stripping for robust version handling
- Fixes issue where GitHub releases created by bots don't reliably trigger npm-publish
- Refs #579
2026-03-24 21:52:34 +08:00
diegosouzapw
b717a02394
chore: remove PR documentation and unnecessary markdown files
2026-03-24 10:33:25 -03:00
diegosouzapw
d68143e63d
Merge PR #575 : feat(dashboard,sse,api) — per-model upstream headers, compat PATCH, chat alignment (by @zhangqiang8vip)
2026-03-24 09:46:59 -03:00
diegosouzapw
0d306b8b1c
Merge PR #578 : feat — add configurable context length to model metadata (by @hijak)
2026-03-24 09:46:32 -03:00
diegosouzapw
a655863855
feat(media): increase transcription file limit to 4GB with validation
...
- Added MAX_TRANSCRIPTION_FILE_SIZE constant (4GB)
- Added formatFileSize() helper for human-readable display (KB/MB/GB)
- Frontend validation rejects files > 4GB with error message
- Changed label from 'Audio File' to 'Audio / Video File'
- Shows 'Supports audio and video files up to 4 GB' hint
2026-03-24 09:42:36 -03:00
Jack Cowey
58264c80dd
feat: add configurable context length to model metadata
...
- Add contextLength field to RegistryModel interface for per-model overrides
- Add defaultContextLength to RegistryEntry for provider-level defaults
- Set context lengths for major providers:
- Claude: 200k
- Codex: 400k (fixes combo context display)
- Gemini: 1M
- OpenAI: 128k
- GitHub Copilot: 128k
- Kiro/Cursor: 200k
- OpenCode: 200k
- Include context_length in /v1/models API response
- Add context_length field to combo schema for custom combo context
- Update contextManager to use registry defaults and support env overrides
- CONTEXT_LENGTH_<PROVIDER> for per-provider override
- CONTEXT_LENGTH_DEFAULT for global override
This allows clients like OpenClaw to display accurate context windows
for combo models instead of guessing based on model name patterns.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-24 12:29:34 +00:00
diegosouzapw
6f9f1aec65
chore(release): v3.0.0-rc.15 — CHANGELOG + openapi version sync
...
Updated CHANGELOG with sprint results:
- i18n: 2,788 keys synced across 30 languages
- 16 provider icons + SVG fallback in ProviderIcon
- Agents fingerprint synced (14 providers)
- dompurify XSS vulnerability fixed (0 npm vulns)
- openapi.yaml version synced
v3.0.0-rc.15
2026-03-24 09:22:02 -03:00
diegosouzapw
97b1ee5b02
fix: sync CLI agents fingerprinting + fix dompurify XSS vulnerability
...
- Agents page: Added droid, openclaw, copilot, opencode to fingerprinting list
(synced with CLI Tools — now 14 providers total)
- Fixed dompurify XSS vulnerability (GHSA-v2wj-7wpq-c8vv) via npm overrides
forcing dompurify ^3.3.2 across all transitive deps (monaco-editor)
- npm audit now reports 0 vulnerabilities
2026-03-24 08:14:24 -03:00
diegosouzapw
fe033cd0b3
fix: add SVG fallback to ProviderIcon component
...
ProviderIcon now tries: Lobehub → PNG → SVG → GenericIcon.
This resolves 11 providers that only have SVG icons
(comfyui, sdwebui, vertex, cartesia, zai, synthetic,
opencode-go/zen, puter, apikey, oauth).
2026-03-24 07:52:07 -03:00
diegosouzapw
afbd07c62a
fix: sync i18n keys across 30 languages + add 16 missing provider icons
...
Task 01 - i18n:
- Synced 2,788 missing keys across 30 language files (all now at 100%)
- Added 6 new agents namespace keys for OpenCode Integration
- i18n-ified agents page OpenCode section (was hardcoded English)
- Added scanning progress text during agents page loading
Task 02 - Provider Icons:
- Added 16 missing provider icons:
- 3 copied from existing (alibaba, kimi-coding-apikey, bailian-coding-plan)
- 2 downloaded (huggingface, deepgram)
- 11 created as SVG (comfyui, sdwebui, vertex, cartesia, zai,
synthetic, opencode-go/zen, puter, apikey, oauth)
- Total: 86 icon files covering all 69 providers
2026-03-24 07:34:07 -03:00
diegosouzapw
9b15996545
fix: prevent login lockout when skipping wizard password setup ( #574 )
...
When users skip password setup during onboarding (either via 'Skip Password'
checkbox or 'Skip Wizard' button), the app now explicitly sets requireLogin=false.
Previously, requireLogin defaulted to true with no password hash stored,
leaving users permanently stuck on the login page.
Two code paths fixed in onboarding/page.tsx:
- handleSetPassword() with skipSecurity=true
- handleFinish() when no password was configured
2026-03-24 07:06:54 -03:00
zhang-qiang
1dbbd7241d
fix(mcp-server): type list-models locals for typecheck:core
...
Annotate rawModels as unknown[] and warning as string | undefined (avoid never[] / undefined-only inference)
Made-with: Cursor
2026-03-24 17:50:13 +08:00
zhang-qiang
6c0ef48d45
docs(zws_docs): archive PR memory and CI notes in README
...
Upstream PR context: #575 , T06/T11/keytar, commit hygiene, links to V8 and PR draft
Made-with: Cursor
2026-03-24 17:45:34 +08:00
zhang-qiang
8b57f88ca3
fix(open-sse): satisfy T11 explicit-any budget (regex counts word any)
...
- Reword comments that contained the token any; replace any types with typed shapes
- stream.ts: passthrough tool-call flag via local boolean (state is null in passthrough)
- Document T11 in zws_docs/ZWS_README_V8.md
Made-with: Cursor
2026-03-24 17:42:52 +08:00
zhang-qiang
3e9fdc777e
fix(api,zed): T06 validateBody on JSON routes; lazy-load keytar for CI build
...
- Add validateBody() alongside request.json() on 5 routes (t06:route-validation)
- Dynamic import keytar in zed keychain-reader to avoid libsecret/keytar load during next build
- Document in zws_docs/ZWS_README_V8.md section 9
Made-with: Cursor
2026-03-24 17:36:55 +08:00
zhang-qiang
a8ca88797a
feat(dashboard,sse,api): per-model upstream headers, compat PATCH, chat alignment
...
- Store/sanitize upstreamHeaders; shared forbidden header names (upstreamHeaders.ts)
- chatCore: buildUpstreamHeadersForExecute; T5 recomputes; 401 retry uses translatedBody.model
- Dashboard compat popover + i18n; Zod partialRecord + header value newline guard
- Executors merge upstreamExtraHeaders; sanitize unit tests
- Dev: bootstrap env in run-next, instrumentation-node import, credentialLoader dedupe
Made-with: Cursor
2026-03-24 17:24:11 +08:00
zhang-qiang
71540b5dc0
merge: sync upstream/main (diegosouzapw/OmniRoute)
2026-03-24 13:01:08 +08:00
diegosouzapw
b5a145d7b3
Merge branch 'pr-565' into 3.0.0-rc.14
...
# Conflicts:
# docs/i18n/cs/API_REFERENCE.md
# docs/i18n/cs/CODEBASE_DOCUMENTATION.md
# docs/i18n/cs/README.md
# src/i18n/messages/cs.json
v3.0.0-rc.14
2026-03-24 00:19:01 -03:00
diegosouzapw
21d6a0a2dd
fix: replace custom YAML parser with js-yaml for correct OpenAPI spec parsing
2026-03-23 22:18:04 -03:00
diegosouzapw
80cc7340ac
feat: API Endpoints dashboard — interactive catalog, webhooks, OpenAPI viewer
...
Phase 1: Interactive REST API Catalog
- GET /api/openapi/spec: serves parsed openapi.yaml as JSON catalog
- POST /api/openapi/try: Try It proxy for inline endpoint testing
- Endpoint catalog with tag grouping, search, method badges
- Expand: schemas, auth, curl examples, Try It panel
Phase 2: OpenAPI Spec Viewer
- Spec info header with version, download YAML/JSON, schema browser
Phase 3: Webhooks & Event Subscriptions
- Migration 011: webhooks table
- src/lib/db/webhooks.ts: CRUD + delivery tracking + auto-disable
- src/lib/webhookDispatcher.ts: HMAC-SHA256, retries
- API: CRUD /api/webhooks + test delivery
- Dashboard: add/edit/toggle/test/delete webhook UI
923 tests pass, tsc clean
2026-03-23 22:07:10 -03:00
diegosouzapw
45b272ee2f
chore: bump version to 3.0.0-rc.15
...
- CHANGELOG: add rc.14 (PRs #562 , #561 ) and rc.15 (#563 per-model combo routing)
- package.json: 3.0.0-rc.13 → 3.0.0-rc.15
- openapi.yaml: version sync to 3.0.0-rc.15
2026-03-23 21:05:44 -03:00
zenobit
f765664580
Update docs/i18n/cs/CLI-TOOLS.md
...
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-24 00:47:41 +01:00
zenobit
10b44f036d
Update docs/i18n/cs/USER_GUIDE.md
...
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-24 00:47:25 +01:00
zenobit
1bf4ee3a3c
Update docs/i18n/cs/CODEBASE_DOCUMENTATION.md
...
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-24 00:46:58 +01:00
zenobit
5d82ffa503
fix(i18n): Improve Czech translation and variables
2026-03-24 00:43:47 +01:00
diegosouzapw
5dc3fd2ec0
feat: per-model combo routing support ( #563 )
...
Add model-pattern → combo mapping feature that automatically routes requests
to specific combos based on model name patterns (glob matching).
Implementation:
- New migration 010: model_combo_mappings table with pattern, combo_id, priority
- DB module with CRUD + resolveComboForModel() using glob-to-regex matching
- getComboForModel() in model.ts: augments getCombo() with pattern fallback
- chat.ts: replaced getCombo() → getComboForModel() at routing decision point
- API endpoints: GET/POST /api/model-combo-mappings, GET/PUT/DELETE by [id]
- ModelRoutingSection.tsx: dashboard UI with inline add/edit/toggle/delete
- Integrated into Combos page
- 15 new unit tests (glob matching, priority ordering, disabled filtering)
- Full test suite: 923/923 pass
Examples:
claude-sonnet* → code-combo
claude-*-opus* → frontier-combo
gpt-4o* → openai-combo
gemini-* → google-combo
Resolves : #563
2026-03-23 20:36:00 -03:00
diegosouzapw
4562fdda92
fix(i18n): improve Czech translation — correct HTTP methods and documentation text
...
Squash-merge from PR #561 by @zen0bit:
- Replace machine-translated HTTP method names (ZÍSKAT→GET, ZVEŘEJNIT→POST, VLOŽIT→PUT, SMAZAT→DELETE)
- Fix Czech documentation text in API_REFERENCE.md and CODEBASE_DOCUMENTATION.md
- Clean up cs.json translation entries
PR: #561
2026-03-23 19:55:42 -03:00
diegosouzapw
18258b9b0d
fix: merge PR #562 — MCP session management, Claude passthrough, OAuth modal, detectFormat fixes
...
Cherry-pick from codex/omniroute-fixes-20260324:
- Replace MCP singleton transport with per-session architecture for Streamable HTTP
- Fix Claude passthrough via OpenAI round-trip normalization
- Add detectFormatFromEndpoint() for endpoint-aware format detection
- Support raw code#state in OAuth modal for Claude Code remote auth
- Expose cloudConfigured/cloudUrl/machineId in settings API
- Switch docker-compose.prod.yml target to runner-cli
- Add 3 new tests for round-trip and detectFormat
PR: #562
2026-03-23 19:53:02 -03:00
diegosouzapw
92e0f242c7
fix(build): resolve all TypeScript compilation errors and Next.js 15 dynamic route slug conflicts
...
- Fix Next.js 15 async params in 4 API route handlers (accounts, providers, registered-keys)
- Move providers/[id]/limits → providers/[provider]/limits to resolve slug name conflict
- Add keytar to serverExternalPackages and KNOWN_EXTERNALS in next.config.mjs
- Fix Zod z.record() arity across a2a.ts and issues/report/route.ts
- Fix SearchResponse interface (optional answer property) in SearchTools and ResultsPanel
- Fix ProviderLimits implicit any types in index.tsx and utils.tsx
- Fix better-sqlite3 prepare<T> generic usage in secrets.ts
- Remove duplicate pricing keys (gemini-3-flash-preview)
- Cast analytics result, ApiErrorType import, TaskRoutingConfig type
- Remove rogue app/ duplicate directory from project root
Resolves : #560
2026-03-23 18:23:08 -03:00
diegosouzapw
428fa9404c
Merge branch 'main' into 3.0.0-rc
2026-03-23 17:10:35 -03:00
diegosouzapw
3cccc480fb
feat: add update notification banner to dashboard homepage ( resolves #552 )
2026-03-23 16:00:03 -03:00
diegosouzapw
acb94216c8
fix(providers): secure Zed import route and add dashboard UI component
2026-03-23 15:58:18 -03:00
Abhinav
5fa97841b2
fix: Address all 4 bot review warnings
...
- FIX #1 : Add null check for cred.password (prevent undefined access)
- FIX #2 : Prioritize actual credentials over hardcoded account patterns
- FIX #3 : Convert CommonJS require() to ES imports for consistency
- FIX #4 : Move to App Router, add credential metadata response, document maintainer integration
Additional improvements:
- Better TypeScript error typing with optional chaining
- Improved error messages for missing dependencies
- Added maintainer TODO for provider system integration
- Proper Next.js App Router format (route.ts)
All bot warnings resolved. Ready for maintainer review.
2026-03-23 15:58:18 -03:00
Abhinav
4ad66bf7b9
feat: Add Zed IDE OAuth credential import support
...
- Implement keychain-based credential extractor for Zed IDE
- Support macOS (Keychain), Windows (Credential Manager), Linux (libsecret)
- Add API endpoint: POST /api/providers/zed/import
- Auto-discover OAuth tokens for OpenAI, Anthropic, Google, Mistral, xAI, etc.
- Cross-platform support via keytar library
- Complete documentation with security considerations
Closes community request from OmniRoute Telegram group.
Follows proven pattern used by VS Code, GitHub Copilot CLI, Claude Code.
2026-03-23 15:58:18 -03:00
Diego Rodrigues de Sa e Souza
64860ed5e5
Merge pull request #557 from diegosouzapw/dependabot/npm_and_yarn/production-834ce0f99d
...
deps: bump the production group with 4 updates
2026-03-23 15:47:48 -03:00
dependabot[bot]
b17faf6e1e
deps: bump the production group with 4 updates
...
Bumps the production group with 4 updates: [jose](https://github.com/panva/jose ), [next](https://github.com/vercel/next.js ), [undici](https://github.com/nodejs/undici ) and [wreq-js](https://github.com/sqdshguy/wreq-js ).
Updates `jose` from 6.2.1 to 6.2.2
- [Release notes](https://github.com/panva/jose/releases )
- [Changelog](https://github.com/panva/jose/blob/main/CHANGELOG.md )
- [Commits](https://github.com/panva/jose/compare/v6.2.1...v6.2.2 )
Updates `next` from 16.1.7 to 16.2.1
- [Release notes](https://github.com/vercel/next.js/releases )
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js )
- [Commits](https://github.com/vercel/next.js/compare/v16.1.7...v16.2.1 )
Updates `undici` from 7.24.4 to 7.24.5
- [Release notes](https://github.com/nodejs/undici/releases )
- [Commits](https://github.com/nodejs/undici/compare/v7.24.4...v7.24.5 )
Updates `wreq-js` from 2.2.0 to 2.2.2
- [Release notes](https://github.com/sqdshguy/wreq-js/releases )
- [Commits](https://github.com/sqdshguy/wreq-js/compare/v2.2.0...v2.2.2 )
---
updated-dependencies:
- dependency-name: jose
dependency-version: 6.2.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production
- dependency-name: next
dependency-version: 16.2.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production
- dependency-name: undici
dependency-version: 7.24.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production
- dependency-name: wreq-js
dependency-version: 2.2.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-03-23 18:45:59 +00:00
diegosouzapw
0ea73bd527
chore(release): bump version to 3.0.0-rc.13
v3.0.0-rc.13
2026-03-23 15:39:11 -03:00
diegosouzapw
b2f0820560
fix( #549 ): resolve real API key from keyId in codex/droid/kilo settings
...
CLI settings routes (codex-settings, droid-settings, kilo-settings) were
writing the masked API key string directly to config files when the
dashboard sent a keyId. Now resolves the real key from the database via
getApiKeyById() before writing, matching the pattern already implemented
in claude-settings, openclaw-settings, and cline-settings.
Closes #549
2026-03-23 15:31:34 -03:00
diegosouzapw
7ad5d42982
release: v3.0.0-rc.12 — merge PRs #542 , #544 , #546 , #555 + TDZ fix + build fixes
...
Community PRs:
- #546 : fix(cli): --version returning unknown on Windows
- #555 : fix(sse): centralized resolveDataDir() for path resolution
- #544 : fix(cli): secure CLI tool detection via known installation paths
- #542 : fix(ui): light mode contrast — missing CSS theme variables
Additional:
- Fix TDZ error in cliRuntime.ts (validateEnvPath before getExpectedParentPaths)
- Add pino/pino-pretty to serverExternalPackages for build stability
- 905 tests passing
v3.0.0-rc.12
2026-03-23 15:11:18 -03:00
diegosouzapw
3912734498
fix: cherry-pick PR #542 (light mode contrast) + fix TDZ in cliRuntime.ts
...
- Add missing CSS theme variables (bg-primary, bg-subtle, text-primary)
- Fix hardcoded dark-mode-only colors with proper dark: variants
- Fix ReferenceError: move validateEnvPath before getExpectedParentPaths
2026-03-23 15:10:19 -03:00
k0valik
0fa3f9a057
fix: (cli) secure CLI tool detection via known installation paths (Win… ( #544 )
...
fix(cli): secure CLI tool detection via known installation paths with security hardening — symlink validation, file-type checks, size bounds, minimal env in healthcheck for 8 CLI tools
2026-03-23 15:04:14 -03:00
k0valik
0fbabdcf25
fix(sse): use centralized resolveDataDir() for path resolution ( #555 )
...
fix(sse): use centralized resolveDataDir() for path resolution in credentialLoader, autoCombo persistence, responsesTransformer, and requestLogger
2026-03-23 15:04:03 -03:00
k0valik
67b7ae98a6
fix(cli): resolve --version returning 'unknown' on Windows ( #546 )
...
fix(cli): resolve --version returning 'unknown' on Windows by using JSON.parse(readFileSync) instead of ESM import with { type: 'json' }
2026-03-23 15:03:51 -03:00
diegosouzapw
0f703c95dd
fix(build): add pino and pino-pretty to serverExternalPackages
2026-03-23 11:19:53 -03:00
diegosouzapw
c34b3f41bd
feat: Add requested model to logs, enhance background task detection, and introduce AI SDK compatibility utilities.
v3.0.0-rc.11
2026-03-23 11:08:14 -03:00
diegosouzapw
e003b17280
fix(build): add webpack IgnorePlugin for thread-stream test files; exclude compiled app/ dir from git
...
- thread-stream test fixtures (intentionally malformed) were being picked
up by Turbopack during production build, causing 111 compile errors
- IgnorePlugin excludes /test/ within thread-stream context
- thread-stream added to serverExternalPackages to prevent bundling
- /app removed: it is a stale npm-package prebuild artifact, not source code
2026-03-23 09:50:21 -03:00
diegosouzapw
e003d58c60
fix(types): cast providerSpecificData.validationModelId to string in EditConnectionModal
2026-03-23 09:23:34 -03:00
diegosouzapw
0546d06c0a
fix(types): cast extracted usage to Record<string,number> in stream.ts to resolve TS property errors
...
Also fix syntax error in openai-to-claude-strip-empty.test.mjs (tool/assistant messages were incorrectly nested)
v3.0.0-rc.9
2026-03-23 09:21:03 -03:00