mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-04 22:32:12 +03:00
* fix(electron): bump electron 42→43 + build better-sqlite3 from source (ABI 148) (#6605) fix(electron): bump electron 42→43 + rebuild better-sqlite3 from source against the Electron ABI (148). Electron 43 raises NODE_MODULE_VERSION to 148; better-sqlite3@12.11.1 has no electron-v148 prebuild, so the packaged app died with 'Nenhum driver SQLite disponível'. prepare-electron-standalone now compiles better-sqlite3 from source against the electron headers into build/Release (where 'bindings' resolves it). Validated by Electron Package Smoke (green) + local (node_register_module_v148). Supersedes #6378. (--admin: the only reds are SonarQube/SonarCloud failing on a coverage-report artifact digest-mismatch — a GitHub Actions infra flake, not this diff; Sonar is green on main and the diff touches only the electron build.) * deps: bump the development group across 1 directory with 6 updates (#6588) deps: bump the development group (6 updates). Rebased onto current main; all checks green after the electron-smoke fix (#6605). * fix(proxy): force CONNECT tunnel for HTTP proxied requests (undici 8.7) + production deps bump (#6620) fix(proxy): force CONNECT tunnel for HTTP proxied requests (undici 8.7) + production deps bump. undici 8.6+ changed ProxyAgent to forward plain-HTTP via request-proxy instead of CONNECT, breaking OAuth refresh through a connection proxy (501). proxyDispatcher now passes proxyTunnel:true. Validated: Unit Tests 3/8 (the OAuth-proxy test) green, new regression test green (fails without the fix on undici 8.7), SonarQube green. Supersedes #6380. (--admin: the only red is Electron Package Smoke failing on a next-build artifact 'digest-mismatch' — a GitHub Actions infra flake corrupting the asar ('file data stream has unexpected number of bytes'); the better-sqlite3 rebuild itself succeeded (gyp ok) and the electron path is unchanged from #6605 which passed the smoke. Not this diff.) * feat(db): add provider param filter config store (key_value namespace) Add paramFilters.ts module for CRUD against provider_param_filters namespace in the key_value table, with in-memory cache + generation counter invalidation. Supports denylist/allowlist per provider and per model, plus auto-learn flag. Migration 118 documents the namespace (no schema change). Issue: #6625 * feat(proxy): add detectUnsupportedParam regex for auto-learning Add UNSUPPORTED_PARAM_RE and detectUnsupportedParam() to extract the offending parameter name from upstream 400 error messages like 'Unsupported parameter(s): thinking'. Issue: #6625 * feat(proxy): extend stripUnsupportedParams with config-driven denylist/allowlist Add applyConfigFilters() called after hardcoded STRIP_RULES in stripUnsupportedParams(). Config-driven rules (DB-backed via paramFilters.ts) support provider-level and model-level: 1. Provider denylist (delete body[key]) 2. Model denylist (delete body[key]) 3. Provider allowlist (restore from pre-strip snapshot) 4. Model allowlist (restore from pre-strip snapshot) Allowlist only restores keys the client actually sent — never introduces new params. Issue: #6625 * feat(proxy): wire auto-learn of unsupported params into 400-downgrade loop When a provider returns 400 with 'Unsupported parameter: X' and the provider config has autoLearn enabled, auto-detect the param name via detectUnsupportedParam(), persist it to the provider's block list via addParamToBlocklist(), then strip and retry. Issue: #6625 * test: add tests for provider param filter denylist/allowlist/auto-learn Three new test files: - param-filters-apply.test.ts — hardcoded rules regression + direct applyConfigFilters tests (no DB dependency) - param-filters-db.test.ts — CRUD against key_value, cache invalidation, full filter pipeline (DB-backed config → stripUnsupportedParams), 16 tests in isolated temp DB - param-filters-auto-learn.test.ts — UNSUPPORTED_PARAM_RE regex matching and detectUnsupportedParam edge cases All existing tests unchanged and passing. Issue: #6625 * feat(proxy): add global auto-learn flag for unsupported params Add isAutoLearnGloballyEnabled() and setGlobalAutoLearnEnabled() to paramFilters.ts. The global flag (stored as key __global__ in the provider_param_filters namespace) acts as a master switch: when enabled, ALL providers auto-learn unsupported params from 400 errors. In base.ts, the auto-learn check now evaluates: shouldAutoLearn = isAutoLearnGloballyEnabled() || perProviderConfig?.autoLearn Global flag defaults to false (opt-in). Tests cover enable/disable/ default/no-interference-with-per-provider-config. Issue: #6625 * fix: apply PR#6649 review feedback — model-scoped auto-learn and precedence order Fixes from gemini-code-assist[bot] review: - HIGH: Auto-learn now scoped to the specific model that triggered the 400 (addParamToBlocklist(this.provider, autoLearned, model)) instead of adding to the provider-level blocklist globally - HIGH: Reordered applyConfigFilters so model-level operations run AFTER provider-level operations (model denylist → model allowlist override provider allowlist → provider denylist) - MEDIUM: Include model name in auto-learn log message Adds regression test verifying model-level denylist beats provider-level allowlist. Issue: #6625 PR: #6649 * feat(ui): add provider-level param filter section to detail page Add ProviderParamFilterSection component rendered on each provider detail page, backed by GET|PUT|DELETE /api/providers/[id]/param-filters. UI allows operators to configure: - Blocked params (comma-separated, stripped from outgoing requests) - Allowed params (comma-separated, re-added after denylist stripping) - Auto-learn toggle (per-provider, enables auto-learning from 400 errors) Wired into ProviderDetailPageClient.tsx between the Playground panel and the Modals section. Issue: #6625 PR: #6649 * feat(ui): add model-level param filter fields in compat popover Extend ModelCompatPopover with Blocked params and Allowed params text inputs for model-level denylist/allowlist overrides. Model-specific block/allow data is persisted via the param-filters API endpoint (PUT /api/providers/:id/param-filters) with the model scope under the models key. Both ModelRow and PassthroughModelRow now pass providerId and modelId to the popover. Issue: #6625 PR: #6649 * chore: gitignore .claude-flow/ * fix(param-filters): review follow-ups — auth gate, error sanitization, Zod body validation, typecheck, file-size, i18n keys Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> * chore(param-filters): drop unrelated main-drift from the fork branch (deps/electron/proxy files belong to #6620/#6605/#6588, not this PR) * refactor(param-filters): split oversized functions — keep complexity gate at baseline Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> * refactor(param-filters): decompose config parser helpers — keep cognitive-complexity gate at baseline Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> * fix(changelog): restore sibling #6648 bullet eaten by merge auto-resolve + re-insert #6649 entry Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> --------- Co-authored-by: Diego Rodrigues de Sa e Souza <8016841+diegosouzapw@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Diego Rodrigues de Sa e Souza <diegosouza.pw@gmail.com>
237 lines
5.1 KiB
Plaintext
237 lines
5.1 KiB
Plaintext
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
|
|
# project-specific directories
|
|
.omnivscodeagent/
|
|
omnirouteCloud/
|
|
omnirouteSite/
|
|
_cache/
|
|
_ideia/
|
|
_mono_repo/
|
|
_references/
|
|
_tasks/
|
|
.agents/**
|
|
.claude/**
|
|
.gemini/**
|
|
.config/**
|
|
.data/**
|
|
.logs/**
|
|
.tests/**
|
|
.coverage/**
|
|
coverage/
|
|
.dist/**
|
|
.next/**
|
|
.build/**
|
|
.out/**
|
|
|
|
# Stryker mutation testing — ephemeral sandbox + generated reports (never commit)
|
|
.stryker-tmp/
|
|
reports/mutation/
|
|
stryker-output-*.json
|
|
|
|
|
|
# Memory Bank and Cursor rules (local-only AI agent context)
|
|
memory-bank/
|
|
.cursor/rules/core.mdc
|
|
.cursor/rules/memory-bank.mdc
|
|
|
|
# Claude Code local state — runtime files only; shared commands at .claude/commands/ are tracked
|
|
.claude/scheduled_tasks.lock
|
|
.claude/scheduled_tasks/
|
|
.claude/sessions/
|
|
.claude/state.json
|
|
.claude/settings.local.json
|
|
|
|
# Root-level underscore-prefixed directories (private/draft — never commit)
|
|
/_*/
|
|
|
|
# Draft features documentation (internal only)
|
|
docs/new-features/
|
|
|
|
# dependencies
|
|
node_modules/
|
|
# Also ignore a root node_modules SYMLINK (worktree setups symlink it from the main
|
|
# checkout). The trailing-slash pattern above only matches a directory, so without this
|
|
# a symlink named node_modules could be staged by `git add -A` and committed.
|
|
/node_modules
|
|
*.map
|
|
.DS_Store
|
|
|
|
# Obsidian sync plugin — committed for community distribution
|
|
!obsidian-plugin/
|
|
obsidian-plugin/node_modules/
|
|
|
|
# Serena AI assistant config (local-only tool, not project code)
|
|
.serena/
|
|
|
|
# debug
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
.pnpm-debug.log*
|
|
|
|
# env files (can opt-in for committing if needed)
|
|
.env*
|
|
!.env.example
|
|
# Provider API keys (never commit)
|
|
*.api-key
|
|
.nvidia-api-key
|
|
|
|
# vercel
|
|
.vercel
|
|
|
|
# typescript
|
|
*.tsbuildinfo
|
|
next-env.d.ts
|
|
|
|
# data and logs
|
|
data/
|
|
.data/
|
|
logs/*
|
|
test_output.log
|
|
|
|
# analysis directories (generated, not tracked)
|
|
.analysis/
|
|
antigravity-manager-analysis/
|
|
.sisyphus/
|
|
.plans/
|
|
|
|
# open-sse tests
|
|
open-sse/test/*
|
|
|
|
# Ignore vscode AI rules
|
|
.github/instructions/codacy.instructions.md
|
|
|
|
# Playwright
|
|
.playwright-mcp/
|
|
test-results/
|
|
playwright-report/
|
|
blob-report/
|
|
cloud/
|
|
.tmp/
|
|
|
|
# Security Analysis (standalone project with own git)
|
|
security-analysis/
|
|
|
|
# Deploy workflow (contains sensitive VPS credentials)
|
|
clipr/
|
|
app.log
|
|
*.tgz
|
|
.gh-discussions.json
|
|
deploy.sh
|
|
docker-compose.minimal.yml
|
|
|
|
|
|
# Backup directories
|
|
app.__qa_backup/
|
|
.app-build-backup-*/
|
|
backup/
|
|
|
|
# Build intermediates (.build/) and shippable standalone (dist/).
|
|
# These are fully reproducible from source; never committed.
|
|
# Layer 1: Next.js now writes to .build/next (was .next); assembled bundle → dist/
|
|
# (Previously /app/ was the standalone output; renamed to /dist/ in Layer 1.)
|
|
/.build/
|
|
/dist/
|
|
/.next/
|
|
|
|
# Electron
|
|
electron/dist-electron/
|
|
electron/node_modules/
|
|
icon.iconset/
|
|
|
|
# VS Code Extension (independent Git repo)
|
|
vscode-extension/
|
|
|
|
# SQLite residual files
|
|
*.sqlite-shm
|
|
*.sqlite-wal
|
|
*.sqlite-journal
|
|
|
|
# IDEA
|
|
.idea/
|
|
|
|
# Local OpenCode agent config
|
|
.config/
|
|
|
|
# Empty/dangling files
|
|
typescript
|
|
|
|
# Gemini Antigravity agent data
|
|
.gemini/
|
|
|
|
# Superpowers plans/specs (internal tooling, not project code)
|
|
docs/superpowers/
|
|
# Superpowers visual-companion brainstorm mockups (ephemeral)
|
|
.superpowers/
|
|
|
|
# TIA test-impact map — generated at runtime in CI (build-test-impact-map.mjs), never committed (~21MB)
|
|
config/quality/test-impact-map.json
|
|
|
|
# GitNexus local index
|
|
.gitnexus
|
|
.worktrees
|
|
bin/omniroute.mjs
|
|
|
|
# Consistent with .dockerignore / .npmignore
|
|
.omc/
|
|
audit-report.json
|
|
bun.lock
|
|
|
|
# Private environment variables for .http-client
|
|
http-client.private.env.json
|
|
|
|
# Note: _ideia/ (feature-triage drafts) is fully covered by the /_*/ rule above
|
|
# and kept as a separate local-only git repo. Never committed to OmniRoute.
|
|
|
|
# i18n audit artifact (generated by scripts/i18n/audit-dashboard-pages.mjs)
|
|
scripts/i18n/_audit.json
|
|
scripts/i18n/_pending-keys.json
|
|
|
|
# Private workflow / skill / command implementations
|
|
# These contain proprietary multi-phase logic and should not be committed
|
|
.agents/workflows/implement-features-ag.md
|
|
.agents/workflows/port-upstream-features-ag.md
|
|
.agents/workflows/port-upstream-issues-ag.md
|
|
.agents/skills/implement-features/
|
|
.claude/commands/implement-features-cc.md
|
|
.claude/commands/port-upstream-features-cc.md
|
|
.claude/commands/port-upstream-issues-cc.md
|
|
.claude/worktrees/
|
|
.codegraph/
|
|
|
|
# Fumadocs generated source
|
|
.source/
|
|
|
|
# AI agent local settings and configs
|
|
.agents/
|
|
.antigravitycli/
|
|
.claude/
|
|
|
|
# PR Reviews and local feedback files
|
|
pr_reviews*.json
|
|
|
|
#hidden local data directories (never commit)
|
|
.local-data/
|
|
.data-dev/
|
|
/.junie/
|
|
|
|
# internal setup prompts with personal credentials — never commit
|
|
CODEX-SETUP-PROMPT.md
|
|
# Quality ratchet — métricas efêmeras (baseline commitado em config/quality/; métricas não)
|
|
config/quality/quality-metrics.json
|
|
|
|
# Runtime logs (diretório local, nunca versionado)
|
|
/logs/
|
|
-home-diegosouzapw-dev-automações-bots-yt-downloader-20260504 .txt
|
|
-home-diegosouzapw-dev-automações-bots-yt-downloader-20260410 .txt
|
|
docs/prompts/AGENT-OWNERSHIP-PROTOCOL.omniroute.md
|
|
docs/prompts/AGENT-OWNERSHIP-PROTOCOL.md
|
|
docs/prompts/AGENT-OWNERSHIP-PROTOCOL.omniroute-mim.md
|
|
docs/prompts/AGENT-OWNERSHIP-PROTOCOL.omniroute-mid.md
|
|
omniroute.md
|
|
|
|
# mise configuration
|
|
mise.toml
|
|
_artifacts/
|
|
.claude-flow/
|