mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-05-23 04:28:06 +00:00
10 lines
32 KiB
JSON
10 lines
32 KiB
JSON
{"author":{"id":"MDQ6VXNlcjE0OTIxOTgz","is_bot":false,"login":"oyi77","name":"Paijo"},"body":"# Comprehensive Documentation Site Overhaul\n\n## 🎯 Objective\nTransform OmniRoute's scattered documentation into a comprehensive, structured documentation site with interactive features, advanced search, and professional organization inspired by industry best practices.\n\n## 📋 Problem Statement\nCurrent documentation system limitations:\n- **Scattered Organization**: Markdown files spread across repository with limited navigation\n- **No Dedicated Site**: Lack of professional documentation portal\n- **Limited Discoverability**: Poor search and feature discovery\n- **Static Content**: No interactive elements or API testing\n- **Inconsistent Quality**: Varied formatting and structure\n\n## ✨ Proposed Solution\n\n### New Documentation Structure\n\n\n### Key Features\n- **Interactive API Documentation**: Swagger/OpenAPI with try-it-now functionality\n- **Advanced Search**: Algolia/DocSearch with autocomplete and filtering\n- **Versioned Content**: Clear version tags and migration guides\n- **Code Examples**: Runnable examples with copy-to-clipboard\n- **Visual Aids**: Interactive Mermaid diagrams and architecture visualizations\n- **Responsive Design**: Mobile-friendly with dark mode support\n- **Analytics**: Usage tracking and feedback system\n\n### Technology Stack\n- **Framework**: Next.js (consistent with OmniRoute dashboard)\n- **Content**: MDX (Markdown + React components)\n- **Styling**: Tailwind CSS (matches OmniRoute UI)\n- **Search**: Algolia DocSearch or Fuse.js\n- **Deployment**: Vercel with preview deployments\n\n## 📈 Expected Benefits\n- **50% increase** in documentation page views\n- **30% reduction** in support requests for basic questions\n- **40% increase** in time spent on documentation pages\n- **90% positive** feedback on documentation quality\n- **25% increase** in community contributions\n\n## 🔧 Implementation Plan\n\n### Phase 1: Foundation (2 weeks)\n- Set up Next.js documentation framework\n- Design component library with OmniRoute theme\n- Implement MDX processing pipeline\n- Set up CI/CD pipeline with preview deployments\n\n### Phase 2: Content Migration (4 weeks)\n- Audit and categorize existing documentation\n- Create automated migration tools\n- Migrate core content with quality validation\n- Implement redirects from old URLs\n\n### Phase 3: Advanced Features (3 weeks)\n- Implement search functionality with Algolia\n- Add interactive API documentation\n- Create versioning system\n- Implement analytics and feedback\n\n### Phase 4: Testing & Launch (2 weeks)\n- Comprehensive testing (unit, integration, E2E)\n- Performance optimization\n- Accessibility validation\n- Final review and official launch\n\n## 📊 Success Metrics\n- All content successfully migrated and validated\n- Search functionality achieves ≥90% relevance in test queries\n- Accessibility compliance (WCAG 2.1 AA) verified\n- Performance metrics meet targets (Lighthouse ≥90)\n- 50% increase in documentation engagement\n\n## 🎯 Definition of Done\n- Complete content migration with validation\n- All interactive features fully functional\n- Search system operational with ≥90% relevance\n- Accessibility compliance verified\n- Performance targets achieved\n- Analytics and feedback system implemented\n- Comprehensive documentation completed\n\n## 📝 Additional Context\nThis overhaul will create a professional documentation portal that improves user onboarding, feature discovery, and overall satisfaction while maintaining consistency with OmniRoute's brand and technical stack. The new site will serve as the primary resource for users, developers, and contributors.","comments":[],"createdAt":"2026-05-04T20:54:55Z","labels":[],"number":1958,"title":"feat: Comprehensive Documentation Site Overhaul"}
|
||
{"author":{"id":"MDQ6VXNlcjE0OTIxOTgz","is_bot":false,"login":"oyi77","name":"Paijo"},"body":"# Manifest Routing Integration - Tier Resolution & Specificity Detection\n\n## 🎯 Objective\nEnhance OmniRoute's combo routing system by integrating Manifest's sophisticated tier resolution and specificity detection logic to create a more intelligent, context-aware routing engine that optimizes for both performance and cost.\n\n## 📋 Problem Statement\nThe current combo routing system, while functional with 13 strategies, lacks:\n- **Tier Resolution**: Provider classification based on performance, cost, and capabilities\n- **Specificity Detection**: Content complexity analysis for optimal route selection\n- **Adaptive Strategies**: Dynamic adjustment based on real-time metrics and query requirements\n\n## ✨ Proposed Solution\n\n### Core Components\n1. **Tier Resolution System**\n - 3-level classification: static rules → heuristics → specificity-based\n - Dynamic tier assignment based on real-time provider metrics\n - Integration with existing provider health monitoring\n\n2. **Specificity Detection**\n - Query complexity scoring (0-100 scale)\n - Content-type analysis for optimal provider matching\n - Historical performance data integration\n\n3. **Adaptive Combo Strategies**\n - New auto-optimized strategy with dynamic adjustment\n - Tier-aware fallback logic\n - Cost-performance balancing algorithms\n\n### Integration Points\n- **PR #1918 Auto-Assessment**: Leverage existing health monitoring and performance data\n- **Existing Combo System**: Maintain backward compatibility with current strategies\n- **Metrics Pipeline**: Feed routing decisions into analytics for continuous improvement\n\n## 📈 Expected Benefits\n- **15-25%** improvement in routing success rates for complex queries\n- **10-20%** reduction in API costs through optimal provider utilization\n- **30% faster** routing decisions via optimized tier selection\n- **Enhanced reliability** with smarter, context-aware fallback logic\n\n## 🔧 Implementation Plan\n\n### Phase 1: Foundation (2-3 weeks)\n- Research Manifest's tier resolution algorithms\n- Design system architecture with integration points\n- Implement basic tier classification framework\n- Set up test infrastructure and benchmarks\n\n### Phase 2: Core Implementation (4-5 weeks)\n- Implement 3-tier resolution system (static/heuristic/specificity)\n- Develop specificity scoring algorithm\n- Create adaptive combo strategies\n- Integrate with PR #1918 auto-assessment system\n\n### Phase 3: Optimization & Testing (3 weeks)\n- Performance tuning and benchmarking\n- Comprehensive test suite (unit, integration, e2e)\n- Documentation and examples\n- Gradual rollout and monitoring\n\n## 📊 Success Metrics\n- Routing success rate improvement (A/B testing)\n- Cost reduction verified through usage analytics\n- Performance benchmarks showing latency improvements\n- User satisfaction surveys on routing reliability\n\n## 🔍 Related Work\n- PR #1918: Auto-Assessment and Self-Healing Combo Engine\n- Manifest routing engine analysis\n- Current combo strategies documentation\n\n## 🎯 Definition of Done\n- Tier resolution achieves ≥95% accuracy in classification\n- Specificity detection shows ≥90% correlation with manual scoring\n- Adaptive strategies demonstrate ≥15% improvement in benchmarks\n- Integration with auto-assessment system verified\n- All performance benchmarks meet targets\n- Comprehensive documentation completed\n\n## 📝 Additional Context\nThis enhancement builds upon PR #1918's auto-assessment capabilities, adding intelligent tier-based routing and query-specific optimization to create a sophisticated, cost-effective routing system that maintains OmniRoute's commitment to performance and reliability.","comments":[],"createdAt":"2026-05-04T20:54:10Z","labels":[],"number":1957,"title":"feat: Manifest Routing Integration - Tier Resolution & Specificity Detection"}
|
||
{"author":{"id":"U_kgDODmAPNQ","is_bot":false,"login":"akatylutir","name":""},"body":"### OmniRoute Version\n\n3.7.8\n\n### Installation Method\n\nnpm (global)\n\n### Operating System\n\nWindows\n\n### OS Version\n\nwindows 11 pro, 24H2\n\n### Node.js Version\n\nv22.22.2\n\n### Provider(s) Involved\n\n_No response_\n\n### Model(s) Involved\n\n_No response_\n\n### Client Tool\n\n_No response_\n\n### Description\n\nHi! I want to use OmniRoute, but red button not working. What can I do? Thi is log: https://pastebin.com/jKcS8CSy , and this is video: https://youtu.be/DB40dkfnGf4\n\n### Steps to Reproduce\n\nHi! I want to use OmniRoute, but red button not working. What can I do? Thi is log: https://pastebin.com/jKcS8CSy , and this is video: https://youtu.be/DB40dkfnGf4\n\n### Expected Behavior\n\nHi! I want to use OmniRoute, but red button not working. What can I do? Thi is log: https://pastebin.com/jKcS8CSy , and this is video: https://youtu.be/DB40dkfnGf4\n\n### Actual Behavior\n\nHi! I want to use OmniRoute, but red button not working. What can I do? Thi is log: https://pastebin.com/jKcS8CSy , and this is video: https://youtu.be/DB40dkfnGf4\n\n### Test Impact\n\nNeeds a new unit test\n\n### Error Logs / Output\n\n```shell\nHi! I want to use OmniRoute, but red button not working. What can I do? Thi is log: https://pastebin.com/jKcS8CSy , and this is video: https://youtu.be/DB40dkfnGf4\n```\n\n### Screenshots\n\nHi! I want to use OmniRoute, but red button not working. What can I do? Thi is log: https://pastebin.com/jKcS8CSy , and this is video: https://youtu.be/DB40dkfnGf4\n\n### Additional Context\n\nHi! I want to use OmniRoute, but red button not working. What can I do? Thi is log: https://pastebin.com/jKcS8CSy , and this is video: https://youtu.be/DB40dkfnGf4\n\n### Validation Plan\n\nHi! I want to use OmniRoute, but red button not working. What can I do? Thi is log: https://pastebin.com/jKcS8CSy , and this is video: https://youtu.be/DB40dkfnGf4","comments":[{"id":"IC_kwDORPf6ys8AAAABBKraWA","author":{"login":"kilo-code-bot"},"authorAssociation":"NONE","body":"This issue appears to be a duplicate of https://github.com/diegosouzapw/OmniRoute/issues/1883.\n\n> **\\[BUG\\] Onboarding button unresponsive after upgrade from 2.x to 3.x — CSP blocks eval** (#1883)\n\nSimilarity score: 90%\n\n*This comment was generated by Kilo Auto-Triage.*","createdAt":"2026-05-04T18:00:58Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/diegosouzapw/OmniRoute/issues/1955#issuecomment-4373273176","viewerDidAuthor":false},{"id":"IC_kwDORPf6ys8AAAABBK1BzA","author":{"login":"vladislavsartakov90-svg"},"authorAssociation":"NONE","body":"I solved the problem, install version 3.7.5","createdAt":"2026-05-04T18:24:23Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/diegosouzapw/OmniRoute/issues/1955#issuecomment-4373430732","viewerDidAuthor":false}],"createdAt":"2026-05-04T18:00:51Z","labels":[{"id":"LA_kwDORPf6ys8AAAACYAlrFQ","name":"bug","description":"Something isn't working","color":"d73a4a"},{"id":"LA_kwDORPf6ys8AAAACZXajUw","name":"kilo-triaged","description":"Auto-generated label by Kilo","color":"faf74f"},{"id":"LA_kwDORPf6ys8AAAACZ7FLsw","name":"kilo-duplicate","description":"Auto-generated label by Kilo","color":"faf74f"}],"number":1955,"title":"[BUG] Button Start Onboarding not working"}
|
||
{"author":{"id":"U_kgDOEMaoiA","is_bot":false,"login":"vladislavsartakov90-svg","name":""},"body":"### OmniRoute Version\n\n3.7.8\n\n### Installation Method\n\nnpm (global)\n\n### Operating System\n\nWindows\n\n### OS Version\n\nwindows 10 \n\n### Node.js Version\n\nv24.15.0\n\n### Provider(s) Involved\n\nall\n\n### Model(s) Involved\n\nall\n\n### Client Tool\n\nall\n\n### Description\n\nI launched omniroute in cmd, the website opens, but the button doesn't work. I tried changing ports, but that didn't help. I also tried using AI, but that didn't help either.\n\n### Steps to Reproduce\n\na\n\n### Expected Behavior\n\na\n\n### Actual Behavior\n\na\n\n### Test Impact\n\nNeeds a new unit test\n\n### Error Logs / Output\n\n```shell\na\n```\n\n### Screenshots\n\n<img width=\"978\" height=\"506\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/440cdbfb-1a2e-42bf-a95e-9dc25b9fcb00\" />\n\n<img width=\"983\" height=\"436\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/50ea65d5-67ca-4b65-9849-c49f5ee1a526\" />\n\n<img width=\"535\" height=\"188\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/b8a74f6b-63f6-4973-9812-2e2146a793a0\" />\n\n### Additional Context\n\na\n\n### Validation Plan\n\na","comments":[{"id":"IC_kwDORPf6ys8AAAABBKpIzA","author":{"login":"kilo-code-bot"},"authorAssociation":"NONE","body":"This issue appears to be a duplicate of https://github.com/diegosouzapw/OmniRoute/issues/1703.\n\n> **\\[BUG\\]** (#1703)\n\nSimilarity score: 93%\n\n*This comment was generated by Kilo Auto-Triage.*","createdAt":"2026-05-04T17:54:38Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/diegosouzapw/OmniRoute/issues/1954#issuecomment-4373235916","viewerDidAuthor":false},{"id":"IC_kwDORPf6ys8AAAABBKtw3g","author":{"login":"vladislavsartakov90-svg"},"authorAssociation":"NONE","body":"node 22.22.2 not work\n","createdAt":"2026-05-04T18:06:24Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/diegosouzapw/OmniRoute/issues/1954#issuecomment-4373311710","viewerDidAuthor":false}],"createdAt":"2026-05-04T17:54:31Z","labels":[{"id":"LA_kwDORPf6ys8AAAACYAlrFQ","name":"bug","description":"Something isn't working","color":"d73a4a"},{"id":"LA_kwDORPf6ys8AAAACZXajUw","name":"kilo-triaged","description":"Auto-generated label by Kilo","color":"faf74f"},{"id":"LA_kwDORPf6ys8AAAACZ7FLsw","name":"kilo-duplicate","description":"Auto-generated label by Kilo","color":"faf74f"}],"number":1954,"title":"[BUG]"}
|
||
{"author":{"id":"MDQ6VXNlcjM3Nzc3MjYx","is_bot":false,"login":"uwuclxdy","name":"cloudy"},"body":"### Problem / Use Case\n\nOmniRoute currently tries all accounts from lets say Codex provider, even though some of them have no more usage available.\n\n### Proposed Solution\n\nMake the already existing buttons \"track 5-hour quota\" and \"track weekly quota\" on `/dashboard/providers/codex` page would make OmniRoute check the quota of the account before attempting to send a query and skip it if on 0%. This could work for other providers like Claude Code in the same way.\n\n### Alternatives Considered\n\n_No response_\n\n### Acceptance Criteria\n\nHave accounts without any usage left skipped automatically when quota tracking is turned on.\n\n### Area\n\nProxy / Routing\n\n### Related Provider(s)\n\nCodex, Claude Code...\n\n### Additional Context\n\n_No response_\n\n### Expected Test Plan\n\n_No response_","comments":[],"createdAt":"2026-05-04T17:21:30Z","labels":[{"id":"LA_kwDORPf6ys8AAAACYAlrLw","name":"enhancement","description":"New feature or request","color":"a2eeef"}],"number":1952,"title":"[Feature] Skip (Codex) accounts that have the weekly or 5h quota exhausted"}
|
||
{"author":{"id":"MDQ6VXNlcjU5MzM0MTUz","is_bot":false,"login":"hoangchung0701","name":""},"body":"### Problem / Use Case\n\nCould please show how much quota on model like:\n- Sesssion: x/y request remain\n- Weekly: x/y request remain\n\n### Proposed Solution\n\nNo\n\n### Alternatives Considered\n\n_No response_\n\n### Acceptance Criteria\n\nno\n\n### Area\n\nAnalytics / Usage Tracking\n\n### Related Provider(s)\n\n_No response_\n\n### Additional Context\n\n_No response_\n\n### Expected Test Plan\n\n_No response_","comments":[],"createdAt":"2026-05-04T17:12:44Z","labels":[{"id":"LA_kwDORPf6ys8AAAACYAlrLw","name":"enhancement","description":"New feature or request","color":"a2eeef"}],"number":1951,"title":"[Feature] Show more detail about quota"}
|
||
{"author":{"id":"U_kgDODGQfGw","is_bot":false,"login":"Destruction13","name":""},"body":"### Problem / Use Case\n\nOmniRoute supports a very large provider ecosystem, but Devin AI is not currently available as a built-in provider.\n\nThis matters because Devin is a strong coding-focused agent for longer-running engineering tasks, and OmniRoute already positions itself as a universal gateway for coding agents and model providers. Right now, users who want to evaluate or route work to Devin cannot do that from the same OmniRoute endpoint or include Devin in combos/fallback chains.\n\n## Why the current custom-provider path is not enough\n\nAs far as I understand, OmniRoute's generic custom provider support is for OpenAI-compatible and Anthropic-compatible endpoints.\n\nDevin does expose an official API, but it is session-based and organization-scoped rather than a drop-in `/chat/completions`-compatible endpoint. Because of that, Devin likely needs a first-class provider adapter instead of a generic custom endpoint configuration.\n\n## Use cases\n\n- Route repo-level coding, debugging, and refactor tasks to Devin from the same OmniRoute setup used for Codex, Claude Code, Gemini CLI, etc.\n- Use Devin as a higher-latency but higher-capability fallback for complex implementation tasks.\n- Compare Devin against other coding-oriented providers inside the same OmniRoute combo/routing policy.\n- Evaluate Devin inside OmniRoute without reconfiguring clients every time.\n\n### Proposed Solution\n\n## Proposed solution\n\nAdd Devin as a built-in provider with a custom executor.\n\nHigh-level implementation sketch:\n\n1. Register a new `devin` provider in `src/shared/constants/providers.ts`.\n2. Add Devin provider/model metadata in `open-sse/config/providerRegistry.ts`.\n3. Implement a custom executor in `open-sse/executors/` that:\n - authenticates with Devin service-user credentials\n - targets the organization API under `https://api.devin.ai/v3/organizations/{org_id}`\n - creates a new Devin session for a fresh OmniRoute request\n - sends follow-up messages to an existing Devin session when conversation continuity is available\n - polls session state and/or session messages until a stable assistant result is available\n - maps the final Devin output back into OmniRoute's OpenAI-compatible response shape\n4. Add dashboard/provider settings for:\n - `DEVIN_API_KEY` (service-user credential)\n - `DEVIN_ORG_ID`\n - optional defaults such as session tags, repo selection, or ACU limits\n5. Make the provider eligible for direct selection and combo routing.\n\n### Alternatives Considered\n\n_No response_\n\n### Acceptance Criteria\n\n## Acceptance criteria\n\n- Devin appears in the Providers UI as a connectable provider.\n- A user can store Devin credentials and validate the connection.\n- OmniRoute can send a basic text request to Devin and return a usable assistant response through `/v1/chat/completions` and/or `/v1/responses`.\n- Follow-up prompts can either reuse a Devin session or the limitation is explicitly documented for MVP behavior.\n- Devin can be targeted directly in combos.\n- Common Devin session states/errors (for example approval-needed, quota/usage exhaustion, or suspended sessions) are surfaced as clear OmniRoute errors.\n- Documentation explains setup, limitations, and expected latency/behavior differences versus normal token-streaming LLM providers.\n\n## Suggested MVP scope\n\nMVP can be text-only and non-streaming/polling-based if needed.\n\nNot required for the first version:\n- embeddings\n- image/audio endpoints\n- tool-calling parity\n- full real-time streaming parity with standard LLM providers\n\n### Area\n\nProvider Support\n\n### Related Provider(s)\n\n_No response_\n\n### Additional Context\n\n## Additional context\n\nThis would also be useful for users who want to evaluate Devin during onboarding or trial access without changing their entire client setup.\n\n### Expected Test Plan\n\n_No response_","comments":[],"createdAt":"2026-05-04T17:00:59Z","labels":[{"id":"LA_kwDORPf6ys8AAAACYAlrLw","name":"enhancement","description":"New feature or request","color":"a2eeef"}],"number":1950,"title":"[Feature] devin.ai"}
|
||
{"author":{"id":"MDQ6VXNlcjc1MzQ1NDc=","is_bot":false,"login":"chbndrhnns","name":"Johannes Rueschel"},"body":"### OmniRoute Version\n\n3.7.8\n\n### Installation Method\n\nnpm (global)\n\n### Operating System\n\nmacOS\n\n### OS Version\n\n26.4.1\n\n### Node.js Version\n\n24.15.0\n\n### Provider(s) Involved\n\n-\n\n### Model(s) Involved\n\n-\n\n### Client Tool\n\n-\n\n### Description\n\n\n```\n❯ pnpm upgrade -g omniroute\nDownloading @ngrok/ngrok-darwin-universal@1.7.0: 7.97 MB/7.97 MB, done\nDownloading @swc/core-darwin-arm64@1.15.33: 9.16 MB/9.16 MB, done\n WARN 2 deprecated subdependencies found: intersection-observer@0.12.2, prebuild-install@7.1.3\nDownloading omniroute@3.7.8: 50.87 MB/50.87 MB, done\nPackages: +29 -25\n+++++++++++++++++++++++++++++-------------------------\nProgress: resolved 988, reused 873, downloaded 27, added 29, done\n WARN Issues with peer dependencies found\n.\n└─┬ @lobehub/ui 5.10.0\n └─┬ @emoji-mart/react 1.1.1\n └── ✕ unmet peer react@\"^16.8 || ^17 || ^18\": found 19.2.5\n\n/Users/jo/Library/pnpm/global/5:\n- omniroute 3.7.4\n+ omniroute 3.7.8\n\n╭ Warning ──────────────────────────────────────────────────────────────────────────────────────╮\n│ │\n│ Ignored build scripts: @swc/core@1.15.33, omniroute@3.7.8. │\n│ Run \"pnpm approve-builds -g\" to pick which dependencies should be allowed to run scripts. │\n│ │\n╰───────────────────────────────────────────────────────────────────────────────────────────────╯\nDone in 58.1s using pnpm v10.33.0\n❯ pnpm approve-builds -g\n✔ Choose which packages to build (Press <space> to select, <a> to toggle all, <i> to invert selection) · @swc/core, omniroute\n✔ The next packages will now be built: @swc/core, omniroute.\nDo you approve? (y/N) · true\n.pnpm/@swc+core@1.15.33_@swc+helpers@0.5.21/node_modules/@swc/core: Running postinstall script, done in 45ms\n.pnpm/omniroute@3.7.8_@lobehub+ui@5.10.0_@types+react@19.2.14_antd@6.3.7_react-dom@19.2.5_rea_81be994467029f641d72db51e6e26349/node_modules/omniroute: Running postinstall script...\n.pnpm/omniroute@3.7.8_@lobehub+ui@5.10.0_@types+react@19.2.14_antd@6.3.7_react-dom@19.2.5_rea_81be994467029f641d72db51e6e26349/node_modules/omniroute: Running postinstall script, done in 772ms\n❯\n❯ omniroute\n\n ____ _ ____ _\n / __ \\\\ (_) __ \\\\ | |\n | | | |_ __ ___ _ __ _| |__) |___ _ _| |_ ___\n | | | | '_ ` _ \\\\| '_ \\\\ | _ // _ \\\\| | | | __/ _ \\\\\n | |__| | | | | | | | | | | | \\\\ \\\\ (_) | |_| | || __/\n \\\\____/|_| |_| |_|_| |_|_|_| \\\\_\\\\___/ \\\\__,_|\\\\__\\\\___|\n\n ⏳ Starting server...\n\n▲ Next.js 16.2.4\n- Local: http://localhost:20128\n- Network: http://0.0.0.0:20128\n✓ Ready in 0ms\n\n ✔ OmniRoute is running!\n\n Dashboard: http://localhost:20128\n API Base: http://localhost:20128/v1\n\n Point your CLI tool (Cursor, Cline, Codex) to:\n http://localhost:20128/v1\n\n Press Ctrl+C to stop\n\n[CREDENTIALS] No external credentials file found, using defaults.\n[DB] Could not preserve critical DB state before recreation: Could not locate the bindings file. Tried:\n → /Users/jo/Library/pnpm/global/5/.pnpm/omniroute@3.7.8_@lobehub+ui@5.10.0_@types+react@19.2.14_antd@6.3.7_react-dom@19.2.5_rea_81be994467029f641d72db51e6e26349/node_modules/omniroute/app/node_modules/better-sqlite3/build/better_sqlite3.node\n```\n\n### Steps to Reproduce\n\n1. `pnpm upgrade -g omniroute`\n2. `pnpm approve-builds -g`\n3. `omniroute`\n\n### Expected Behavior\n\nCan upgrade without manual installation procedure\n\n### Actual Behavior\n\nNeed to go to /Users/jo/Library/pnpm/global/5/.pnpm/omniroute@3.7.8_@lobehub+ui@5.10.0_@types+react@19.2.14_antd@6.3.7_react-dom@19.2.5_rea_81be994467029f641d72db51e6e26349/node_modules/omniroute/app\n\nNeed to run `npm install wreq-js@2.3.0 better-sqlite3@12.6.2 --no-save`\n\n### Test Impact\n\nNeeds a new e2e test\n\n### Error Logs / Output\n\n```shell\n\n```\n\n### Screenshots\n\n_No response_\n\n### Additional Context\n\n_No response_\n\n### Validation Plan\n\n_No response_","comments":[],"createdAt":"2026-05-04T11:52:34Z","labels":[{"id":"LA_kwDORPf6ys8AAAACYAlrFQ","name":"bug","description":"Something isn't working","color":"d73a4a"}],"number":1943,"title":"[BUG] pnpm install still requires manual better-sqlite3 installation"}
|
||
{"author":{"id":"MDQ6VXNlcjE0OTIxOTgz","is_bot":false,"login":"oyi77","name":"Paijo"},"body":"## Summary\n\nOmniRoute v3.7.8 contains **two different encryption key derivation implementations** in the same package that produce incompatible ciphertexts. The health-check/token-refresh thread uses the old dynamic-salt derivation while the main API uses the new static-salt derivation, causing:\n\n1. **Persistent decrypt failures** — tokens encrypted by the health-check thread cannot be decrypted by the main API\n2. **Re-encryption loop** — the health-check thread continuously re-encrypts tokens with a dynamic salt, undoing any fix applied with the static salt\n3. **CPU spike during crash-loop** — when tokens are encrypted with dynamic salt, the main API fails to decrypt them, causing a cascade of errors and 50% CPU usage\n\n## Root Cause\n\nTwo different key derivation functions exist in the built package:\n\n### Old code (chunk 42476) — Dynamic Salt\n```javascript\nfunction k() {\n if (null !== i) return i;\n let a = process.env.STORAGE_ENCRYPTION_KEY;\n let b = (0, f.createHash)(\"sha256\").update(a).digest().slice(0, 16);\n // ^^^^^^^^^^^^^ DYNAMIC — derived from the key itself\n try { i = (0, f.scryptSync)(a, b, 32); }\n // ...\n}\n```\n\n### New code (chunk 56197) — Static Salt\n```javascript\nfunction l() {\n if (null !== j) return j;\n let a = process.env.STORAGE_ENCRYPTION_KEY;\n let b = \"omniroute-field-encryption-v1\";\n // ^^^^^^^^^^^^^^^^^^^^^^^^^^^ STATIC — hardcoded string\n try { j = (0, g.scryptSync)(a, b, 32); }\n // ...\n}\n```\n\nThese produce **different derived keys** from the same `STORAGE_ENCRYPTION_KEY`, making ciphertexts from one undecryptable by the other.\n\nThe decrypt function in `42476.js` has a fallback that tries the static-salt key when the dynamic-salt key fails, but the **encrypt function** only uses the dynamic-salt key. So the health-check thread encrypts with dynamic salt, the main API tries to decrypt with the dynamic-salt key (different derivation → fails), then falls back to static salt (also fails for newly-encrypted tokens).\n\n## Impact\n\n- **Severity: HIGH** — Causes production outages when tokens become undecryptable\n- **CPU**: 50% CPU usage during crash-loop (from repeated decrypt failures triggering health-check)\n- **Data**: All encrypted tokens become unreadable until manually fixed\n- **Recovery**: Requires manual database fix script to re-encrypt all tokens with static salt\n\n## Reproduction\n\n1. Set `STORAGE_ENCRYPTION_KEY` in server.env\n2. Add OAuth providers — tokens get encrypted with static salt\n3. Health-check thread runs — re-encrypts tokens with dynamic salt\n4. Main API attempts to decrypt — fails (dynamic-salt ciphertext produces different derived key)\n5. Error cascade: decrypt failures → health-check triggers → re-encrypts with dynamic salt → more failures\n6. CPU spikes to 50%, API responses fail for encrypted fields\n\n## Evidence\n\n```bash\n# Check encryption status of active tokens\nnode -e \"\nconst db = require('better-sqlite3')('/home/openclaw/.omniroute/storage.sqlite');\nconst rows = db.prepare('SELECT id, access_token, refresh_token FROM provider_connections WHERE is_active = 1').all();\nlet static = 0, dynamic = 0;\nfor (const row of rows) {\n for (const col of ['access_token', 'refresh_token']) {\n const val = row[col];\n if (!val || val === 'revoked') continue;\n try {\n const buf = Buffer.from(val, 'base64');\n const saltLen = buf.readUInt8(0);\n const salt = buf.slice(1, 1 + saltLen).toString('utf8');\n if (salt === 'omniroute-field-encryption-v1') static++;\n else dynamic++;\n } catch(e) {}\n }\n}\nconsole.log('Static salt:', static, '| Dynamic salt:', dynamic);\ndb.close();\n\"\n\n# Output after health-check thread runs:\n# Static: 0 | Dynamic: 205 (= ALL tokens re-encrypted with dynamic salt)\n\n# Output after running fix-encryption-static.cjs:\n# Static: 539 | Dynamic: 0 (= ALL tokens fixed back to static salt)\n```\n\n## Workaround\n\nWe created a script (`fix-encryption-static.cjs`) that:\n1. Reads all encrypted tokens from the database\n2. Decrypts them using the static-salt key (falling back to dynamic-salt key if static fails)\n3. Re-encrypts them with the static-salt key\n4. Writes the updated tokens back to the database\n\nThis script runs via cron every 5 minutes to counteract the health-check thread re-encryption.\n\n## Suggested Fix\n\n1. **Unify key derivation**: Remove the old dynamic-salt code path and use only the static-salt derivation (`\"omniroute-field-encryption-v1\"`) everywhere\n2. **Add migration**: On startup, scan for tokens encrypted with the dynamic salt and re-encrypt them with the static salt\n3. **Remove the fallback**: The current fallback in the decrypt function (try dynamic, then try static) masks the issue. After migration, only the static salt key should exist.\n\n## Environment\n\n- OmniRoute v3.7.8\n- Node v22.22.1\n- Ubuntu 22.04\n- 1,239 models configured\n- 306 active provider connections\n- STORAGE_ENCRYPTION_KEY set via server.env","comments":[{"id":"IC_kwDORPf6ys8AAAABBLxsAA","author":{"login":"soyelmismo"},"authorAssociation":"NONE","body":"how can i disable the encryption its so annoying.\n","createdAt":"2026-05-04T20:56:21Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/diegosouzapw/OmniRoute/issues/1941#issuecomment-4374424576","viewerDidAuthor":false}],"createdAt":"2026-05-04T11:47:27Z","labels":[],"number":1941,"title":"[BUG] Dual encryption key derivation (dynamic vs static salt) causes persistent decrypt failures and 50% CPU"}
|
||
{"author":{"id":"MDQ6VXNlcjEwODk3NDc4","is_bot":false,"login":"JxnLexn","name":"Jan Leon"},"body":"### OmniRoute Version\n\n3.7.8\n\n### Installation Method\n\nDocker / Docker Compose\n\n### Operating System\n\nLinux\n\n### OS Version\n\n_No response_\n\n### Node.js Version\n\n_No response_\n\n### Provider(s) Involved\n\nCodex\n\n### Model(s) Involved\n\nGPT-5.5\n\n### Client Tool\n\nVisual Studio Code (Github Copilot Chat)\n\n### Description\n\nThe costs and the analytics page show costs of $0.00 even though many tokens are being used and the prices per token are set. It was working before, but for the past few days it has stopped working. I am using a combo, but it has worked before using a combo. \nOn the costs page it also shows a fallback rate of 100%, even tough there was never a fallback to another model.\n\n### Steps to Reproduce\n\n1. Use a model/tokens\n2. Go to cost or analytics\n3. See $0.00 altough prices are set\n\n### Expected Behavior\n\nShow estimated costs\n\n### Actual Behavior\n\nDid not show estimated costs, instead $0.00\n\n### Test Impact\n\nUnsure\n\n### Error Logs / Output\n\n```shell\n\n```\n\n### Screenshots\n\n**Costs:**\n<img width=\"1336\" height=\"770\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/1c58e896-5bec-4c01-af33-2071cf3196dc\" />\n\n**Analytics:**\n<img width=\"1333\" height=\"647\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/441a5ebb-3b1f-44af-af1b-de7b2dfa2ba1\" />\n\n**Fallback Rate:**\n<img width=\"1314\" height=\"215\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/67109ec7-496f-4add-980f-a65e8582ffe2\" />\n\n**Provider Breakdown:**\n<img width=\"1313\" height=\"217\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/08ce8268-0dfd-4885-b9af-eb4b48f0319b\" />\n\n**Model Breakdown:**\n<img width=\"1319\" height=\"216\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/d6d02c11-0d1e-4482-8346-3ac13a30d107\" />\n\n**Costs Pricing:**\n<img width=\"1310\" height=\"773\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/f1e05848-c196-4816-a6b8-0dcd57444bd4\" />\n\n\n### Additional Context\n\n_No response_\n\n### Validation Plan\n\n_No response_","comments":[],"createdAt":"2026-05-04T09:57:53Z","labels":[{"id":"LA_kwDORPf6ys8AAAACYAlrFQ","name":"bug","description":"Something isn't working","color":"d73a4a"}],"number":1934,"title":"[BUG] Est. Cost $0.00"}
|