Commit Graph
257 Commits
Author SHA1 Message Date
evandro 0a6a8ff4bb test: raise the timeout of the OAuth client suite
The suite re-imports GoogleAPIService after vi.resetModules() in every test;
under the parallel full run the first import exceeded 5 s and failed
(passes alone in about 1 s).
2026-10-10 04:29:40 -03:00
evandro 8e20c32117 feat(a11y): label icon-only buttons
Add accessible names (and aria-pressed for toggles) to the layout switcher,
overflow menu, selection clear, API key reveal/copy and pricing buttons,
reusing existing i18n keys. Replace the hard-coded English 'Menu' sr-only
text on the account cards with common.openMenu.
2026-10-10 04:29:03 -03:00
evandro 2e8657d7a0 perf: bound the OpenAI response cache in ProxyService
responseCache was a plain Map keyed by the JSON of the whole request. Entries
were only removed when the same key was read again after expiring, so every
distinct prompt stayed in memory for the lifetime of the gateway. Replace it
with a TtlCache that prunes expired entries on write and caps the size at 100
entries (TTL unchanged at 60 s).
2026-10-10 04:27:06 -03:00
evandro 1ad15d6e3a fix(security): keep OAuth tokens out of renderer IPC and compare API keys in constant time
The cloud ORPC routes (addGoogleAccount, listCloudAccounts, refreshAccountQuota,
syncLocalAccount) returned the full account including access and refresh
tokens, but the renderer never reads them. Blank the two secrets in those
responses; token metadata (expiry, project id) is kept so the schema holds.
Also compare the presented gateway API key with timingSafeEqual.
2026-10-10 04:25:50 -03:00
evandro 291b8ac91f chore: remove unused modules and dependencies
Delete files with no importers (src/actions/{account,database,window}.ts,
drag-window-region, navigation-menu, ui/navigation-menu, ui/toggle,
ui/toggle-group) and the packages only they or nothing used
(@icons-pack/react-simple-icons, @radix-ui/react-icons,
@sentry/integrations, @radix-ui/react-{navigation-menu,toggle,toggle-group}).
Drop the duplicated Playwright block in .gitignore.
2026-10-10 04:23:12 -03:00
evandro 880b799535 refactor: reduce cyclomatic complexity of request mapping and rate-limit parsing
Pin the current behavior with characterization tests (claude-request-mapper,
model-mapping, rate-limit-reason; 91 cases, all green before the refactor),
then split buildContents, buildGenerationConfig, transformClaudeRequestIn,
resolveModelRoute, detectRateLimitReason and computeRetryAfterSeconds into
small helpers. Also declare the emitted toolConfig on GeminiRequest.
2026-10-10 04:20:22 -03:00
semantic-release-bot cf5b669133 chore(release): 0.15.5
## [0.15.5](https://github.com/evandrodevbr/GeminiNexus/compare/v0.15.4...v0.15.5) (2026-10-01)

### 🐛 Bug Fixes

* parse complete retry durations and preserve local IDE configuration ([b193bee](https://github.com/evandrodevbr/GeminiNexus/commit/b193bee03f1aaea5f7173e53ec6cdb787717067c))

### ✅ Tests

* mock OS exports consistently and verify LAN discovery ([fa39fb3](https://github.com/evandrodevbr/GeminiNexus/commit/fa39fb34fef662c11cd8780b562fa8008b982823))
v0.15.5
2026-10-01 02:03:18 +00:00
Evandro Fonseca Junior 4b3f193bd0 Merge pull request #11 from evandrodevbr/codex/review-2026-09-30-049051
fix: correct retry timing and preserve local IDE configuration
2026-09-30 23:02:43 -03:00
Evandro Fonseca Junior fa39fb34fe test: mock OS exports consistently and verify LAN discovery 2026-09-30 17:43:09 -03:00
Evandro Fonseca Junior b193bee03f fix: parse complete retry durations and preserve local IDE configuration 2026-09-30 17:36:01 -03:00
semantic-release-bot e8eaa049d8 chore(release): 0.15.4
## [0.15.4](https://github.com/evandrodevbr/GeminiNexus/compare/v0.15.3...v0.15.4) (2026-09-14)

### 📝 Documentation

* establish dual license (CC-BY-NC-SA + MIT) and correct attribution ([42466c2](https://github.com/evandrodevbr/GeminiNexus/commit/42466c274b36b5dde2d7d33c9016b2fab05cf551))
* refine READMEs and highlight Windows SmartScreen warning ([0dbae81](https://github.com/evandrodevbr/GeminiNexus/commit/0dbae81353c162b0b95d566493164ea6c02e2fa2))
* rewrite the README with verified behavior and honest limitations ([acb8508](https://github.com/evandrodevbr/GeminiNexus/commit/acb8508bff2f6e32691f394d21d7c8193608cd5e))

### 💄 Styles

* clear the lint and prettier findings so the gates pass ([8ad3eef](https://github.com/evandrodevbr/GeminiNexus/commit/8ad3eef53d88d049a3a25cb54df590073a67b75b))

### 🔧 Continuous Integration

* upload release assets sequentially with retry ([b13f06c](https://github.com/evandrodevbr/GeminiNexus/commit/b13f06c0a3538ff962eae2f6fc07cfc81281bf02))
v0.15.4
2026-09-14 11:52:31 +00:00
Evandro Fonseca Junior acb8508bff docs: rewrite the README with verified behavior and honest limitations
- README.md rebuilt from the code: account pool, proxy endpoints, settings paths, verified commands, build/make steps and limitations
- translations get a pointer to the canonical README
2026-09-14 08:51:55 -03:00
Evandro Fonseca Junior 43aa538932 chore(ci): drop trailing whitespace in the publish workflow 2026-09-14 08:51:55 -03:00
Evandro Fonseca Junior 8ad3eef53d style: clear the lint and prettier findings so the gates pass
- prettier formatting across routes, components and tests (no behavior change)
- unused imports and ternary-as-statement replaced with explicit branches
- eslint: scripts/**/*.js are CommonJS, allow require() there; prettier ignores pnpm-lock.yaml
2026-09-14 08:51:55 -03:00
Gemini Nexus Bot 42466c274b docs: establish dual license (CC-BY-NC-SA + MIT) and correct attribution
Tests / Unit Tests (push) Canceled after 0s
Tests / Type Check (push) Canceled after 0s
Release / Semantic Release (push) Successful in 10m18s
- Add LICENSE-MIT for all new code written by evandrodevbr
- Rewrite License section: dual structure (original code CC-BY-NC-SA, new code MIT)
- Add migration notice: project is transitioning to fully open-source MIT
- Rewrite Credits section: accurately attribute what Draculabo created vs what evandrodevbr rewrote
- Remove outdated 'commercial use prohibited' disclaimer
- Applied across all 4 languages (EN, PT-BR, ES, ZH-CN)
2026-05-02 03:14:15 -03:00
Gemini Nexus Bot 0dbae81353 docs: refine READMEs and highlight Windows SmartScreen warning
- Move Windows SmartScreen workaround instructions to a highly visible warning block at the top of the files
- Add SmartScreen instructions to the Installation / Downloads sections
- Standardize headings, hierarchy, and formatting across all 4 languages (EN, PT-BR, ES, ZH-CN)
- Polish text for better flow and clarity in 'Why Gemini Nexus?' and Tech Stack sections
2026-05-02 02:46:14 -03:00
Gemini Nexus Bot a4727713d2 Merge branch 'main' of https://github.com/evandrodevbr/GeminiNexus 2026-05-02 02:28:43 -03:00
Gemini Nexus Bot b13f06c0a3 ci: upload release assets sequentially with retry
Prevents 'HTTP 404: Not Found' and '502 Bad Gateway' errors from GitHub API
when attempting to upload many assets simultaneously using the gh cli.
2026-05-02 02:28:38 -03:00
semantic-release-bot 7a6587cb8b chore(release): 0.15.3
## [0.15.3](https://github.com/evandrodevbr/GeminiNexus/compare/v0.15.2...v0.15.3) (2026-05-02)

### 👷 Build System

* allow fs-xattr and appdmg to build in pnpm v10 ([1c26a9e](https://github.com/evandrodevbr/GeminiNexus/commit/1c26a9e542f3fa5a05b370b8a332ffe5a727ea92))
v0.15.3
2026-05-02 05:13:21 +00:00
Gemini Nexus Bot e1c9a9e34a Merge branch 'main' of https://github.com/evandrodevbr/GeminiNexus 2026-05-02 02:12:25 -03:00
Gemini Nexus Bot 1c26a9e542 build: allow fs-xattr and appdmg to build in pnpm v10 2026-05-02 02:09:53 -03:00
semantic-release-bot 5026be12d2 chore(release): 0.15.2
## [0.15.2](https://github.com/evandrodevbr/GeminiNexus/compare/v0.15.1...v0.15.2) (2026-05-02)

### 👷 Build System

* allow macos-alias and other native modules to build in pnpm v10 ([2e3a65b](https://github.com/evandrodevbr/GeminiNexus/commit/2e3a65b76b91012638c422f6223b79399775c635))
v0.15.2
2026-05-02 04:57:50 +00:00
Gemini Nexus Bot c05daba98b Merge branch 'main' of https://github.com/evandrodevbr/GeminiNexus 2026-05-02 01:57:07 -03:00
Gemini Nexus Bot 2e3a65b76b build: allow macos-alias and other native modules to build in pnpm v10
- Fixes MakerDMG failure (Cannot find module '../build/Release/volume.node')
- Add macos-alias, better-sqlite3, keytar, and electron to trustedDependencies and pnpm.onlyBuiltDependencies
- Also updated pnpm-workspace.yaml allowBuilds directive
2026-05-02 01:48:15 -03:00
semantic-release-bot 62634b5511 chore(release): 0.15.1
## [0.15.1](https://github.com/evandrodevbr/GeminiNexus/compare/v0.15.0...v0.15.1) (2026-05-02)

### ✅ Tests

* add universal electron mock to fix headless CI test runs ([1d35801](https://github.com/evandrodevbr/GeminiNexus/commit/1d35801980e3e54cec1d3e52ed75850eb7eec350))
* fix test environments failing due to missing IS_DEV_ENVIRONMENT mock export ([269ad18](https://github.com/evandrodevbr/GeminiNexus/commit/269ad18ed6c09585e881d0d916558b1bcc7ad940))
* update proxy-advanced-handler tests to reflect optional service registration ([f4daaa8](https://github.com/evandrodevbr/GeminiNexus/commit/f4daaa8ca13bc75c7e5090905176c06b61ecfedc))

### 👷 Build System

* replace MakerSquirrel with MakerZIP for Windows ([27223f5](https://github.com/evandrodevbr/GeminiNexus/commit/27223f587d7facf25beef77aa6984cd248f2703d))
v0.15.1
2026-05-02 04:46:37 +00:00
Gemini Nexus Bot 27223f587d build: replace MakerSquirrel with MakerZIP for Windows
- Remove @electron-forge/maker-squirrel dependency
- Squirrel.Windows fails on modern Windows GitHub Actions runners with Win32Exception during zip creation
- We already use MakerWix which produces a much better .msi installer for Windows users
- Add MakerZIP support for win32 to provide a portable alternative alongside the MSI
2026-05-02 01:42:46 -03:00
Gemini Nexus Bot 1d35801980 test: add universal electron mock to fix headless CI test runs
Vitest workers throw 'Electron failed to install correctly' when backend unit tests indirectly import electron via path/util modules. This mock provides stubs for ipc, app, and BrowserWindow interfaces so happy-dom environments don't crash expecting native binaries.
2026-05-02 01:27:57 -03:00
Gemini Nexus Bot 269ad18ed6 test: fix test environments failing due to missing IS_DEV_ENVIRONMENT mock export 2026-05-02 01:18:12 -03:00
Gemini Nexus Bot 9b9b977ae6 Merge branch 'main' of https://github.com/evandrodevbr/GeminiNexus 2026-05-02 01:09:55 -03:00
Gemini Nexus Bot f4daaa8ca1 test: update proxy-advanced-handler tests to reflect optional service registration
- Mock service-registry correctly exposing getServiceOptional
- Update tests to expect successful fallback resolutions when services are not yet registered
- Remove obsolete error test that is now correctly handled via ConfigManager fallback
2026-05-02 01:05:06 -03:00
semantic-release-bot e221ad14cd chore(release): 0.15.0
## [0.15.0](https://github.com/evandrodevbr/GeminiNexus/compare/v0.14.0...v0.15.0) (2026-05-02)

### ✨ Features

* bump version to 0.14.0 ([a905877](https://github.com/evandrodevbr/GeminiNexus/commit/a905877c76869a9b31b5b079d7afd86e4c905b59))
* **core:** isolate dev and production environments ([5c44a62](https://github.com/evandrodevbr/GeminiNexus/commit/5c44a622a8b4fa81246d4ca77073be50b4ddc1c9))
* **proxy:** add OpenCode IDE config and fix service availability ([713c449](https://github.com/evandrodevbr/GeminiNexus/commit/713c4497c623b0519847ed2afcc7da04997dae55))
* **proxy:** enrich traffic logs with model and token metadata ([641c739](https://github.com/evandrodevbr/GeminiNexus/commit/641c739b64150d1df77fd1a81a028b8cb4a4884d))
* **ui:** replace sidebar with compact top header navigation ([7d2977b](https://github.com/evandrodevbr/GeminiNexus/commit/7d2977b665a1a2fb0d5d8844a8e519471cdef8d8))
* **usage:** add cost reporting with custom model pricing and OpenRouter ([bc69a2e](https://github.com/evandrodevbr/GeminiNexus/commit/bc69a2e8b52e5019c45faae12771af7e40d3f26b))
* **usage:** move Monitor to Usage tab with per-request token tracking ([99e458f](https://github.com/evandrodevbr/GeminiNexus/commit/99e458f69bd5564d27f94c72c719ba49efd72abe))
* **usage:** redesign Usage Analytics with accurate token averages ([20785a8](https://github.com/evandrodevbr/GeminiNexus/commit/20785a8414bb0e364085a4a64f6a958c178d1df8))

### 🐛 Bug Fixes

* **ci:** remove explicit pnpm version from workflows ([080bf30](https://github.com/evandrodevbr/GeminiNexus/commit/080bf30e38379db5cb3c8d124f76a39aef897ccc))
* **ci:** resolve release pipeline conflicts and clean repo structure ([71bf812](https://github.com/evandrodevbr/GeminiNexus/commit/71bf8122d1a3d5bd74e3450f61d24747b50ed9d7))
* **ci:** use Node 22 for semantic-release (requires ^22.14.0) ([268428a](https://github.com/evandrodevbr/GeminiNexus/commit/268428a1193fd0bfd0559472fd50b3293d9c8ccb))
* install notice showing in Chinese and not recognizing MSI install path ([0753bbd](https://github.com/evandrodevbr/GeminiNexus/commit/0753bbdce63cffcd40fa13643e1082a67335c9c4))

### ♻️ Code Refactoring

* **accounts:** decompose CloudAccountList into focused components ([bf5a42c](https://github.com/evandrodevbr/GeminiNexus/commit/bf5a42c03e706d19033ceff332ee3609afded7ed))
v0.15.0
2026-05-02 03:56:01 +00:00
Gemini Nexus Bot 268428a119 fix(ci): use Node 22 for semantic-release (requires ^22.14.0) 2026-05-02 00:53:33 -03:00
Gemini Nexus Bot 080bf30e38 fix(ci): remove explicit pnpm version from workflows
pnpm/action-setup@v4 reads the version from package.json packageManager
field automatically. Having both causes ERR_PNPM_BAD_PM_VERSION.
2026-05-02 00:50:12 -03:00
Gemini Nexus Bot c134a072df Merge branch 'main' of https://github.com/evandrodevbr/GeminiNexus 2026-05-02 00:37:01 -03:00
Gemini Nexus Bot a905877c76 feat: bump version to 0.14.0
Includes all changes from this release cycle:
- Top header navigation (sidebar removed)
- Accounts screen decomposition and visual redesign
- Dev/prod environment isolation
- Usage Analytics with accurate averages, cost reporting, OpenRouter pricing
- Monitor moved to Usage with per-request token/cost tracking
- Clickable traffic logs with expandable JSON body viewer
- OpenCode IDE config in Quick Setup
- API Proxy reorganization (flattened tabs)
- CI/CD pipeline fixes (release config, Node version, pnpm alignment)
- Repository cleanup (~80MB of binaries removed)
2026-05-02 00:32:21 -03:00
Gemini Nexus Bot 3752dfda91 chore: remove ~80MB of obsolete files and binaries from tracking
- Remove WiX Toolset binaries (tools/wix314/, wix314-binaries.zip) - CI installs via choco
- Remove one-shot scripts (fix-ts.js, patch-proxy.js, patch-settings.js, rename-deep.js)
- Remove AI session data (thoughts/, .impeccable.md, CLAUDE.md)
- Remove legacy launchers (agm.bat, run_cli.bat)
- Remove unused Nix config (flake.nix, flake.lock)
- Remove test-process.ts from root
- Update .gitignore to prevent re-tracking
2026-05-02 00:31:10 -03:00
Gemini Nexus Bot 71bf8122d1 fix(ci): resolve release pipeline conflicts and clean repo structure
- Delete conflicting .releaserc.json (keep release.config.cjs as single source)
- Fix repo URL from Draculabo/AntigravityManager to evandrodevbr/GeminiNexus
- Fix @semantic-release/git to commit pnpm-lock.yaml (not package-lock.json)
- Normalize Node.js version to 20 across all workflows
- Add packageManager field to package.json for pnpm consistency
- Update AGENTS.md: npm -> pnpm (18 references)
- Update .gitignore: add tools/, thoughts/, binaries, one-shot scripts
2026-05-02 00:30:44 -03:00
Gemini Nexus Bot 713c4497c6 feat(proxy): add OpenCode IDE config and fix service availability
- Add opencode to SupportedIde with JSON providers.json output
- Add defaultModel parameter for IDE config generation
- Add model selector dropdown in ToolsTab for IDE configurations
- Use getServiceOptional for graceful degradation when proxy is stopped
- Add fallback IDE config generation using ConfigManager when NestJS is offline
- Update IPC router schema to accept defaultModel parameter
2026-05-02 00:30:18 -03:00
Gemini Nexus Bot 641c739b64 feat(proxy): enrich traffic logs with model and token metadata
- Add model to logInbound metadata
- Add model, tokensPrompt, tokensCompletion, tokensTotal to logOutbound metadata
- Enrich SSE streaming with token metadata from final usage chunk
- Add metadata parameter to logOutbound method signature
- Data persisted in traffic_logs.metadata_json for per-request cost calculation
2026-05-02 00:29:55 -03:00
Gemini Nexus Bot 99e458f69b feat(usage): move Monitor to Usage tab with per-request token tracking
- Move MonitorTab and TrafficLogTable from proxy/advanced to usage/
- Add Analytics and Monitor tabs to Usage page
- Remove Monitor tab from API Proxy (flatten to 4 tabs)
- Add Model, Input/Output tokens, and Cost columns to traffic log table
- Make log rows clickable with expandable detail panel (JSON body viewer)
- Fix req/min calculation using actual request time span (MIN/MAX timestamps)
- Add word-wrap for large message bodies in expanded view
2026-05-02 00:29:32 -03:00
Gemini Nexus Bot bc69a2e8b5 feat(usage): add cost reporting with custom model pricing and OpenRouter
- Create CostReportCard with per-model input/output cost breakdown table
- Create ModelPricingDialog for custom pricing configuration
- Add 'Fetch from OpenRouter' button to auto-populate pricing from API
- Add custom_model_pricing to AppConfig (persisted in gui_config.json)
- Refactor calculateCost to accept optional custom pricing overrides
- Support Manual, OpenRouter, and Default pricing sources
2026-05-02 00:29:08 -03:00
Gemini Nexus Bot 20785a8414 feat(usage): redesign Usage Analytics with accurate token averages
- Fix token averaging: calculate over active hours/days only (not full period)
- Enable hourlyData query for all time ranges (not just 24h)
- Rename 'Usage Forecast' to 'Usage Averages' (real data, not projections)
- Add avg/request metric and active hours/days context
- Update terminology: Input/Output Tokens with info tooltips
- Add Estimated Cost stat card with per-model calculation
- Add quota warning alert banner when models exceed 80%
- Add ModelQuotaBar component with color thresholds
2026-05-02 00:28:45 -03:00
Gemini Nexus Bot 5c44a622a8 feat(core): isolate dev and production environments
- Add IS_DEV_ENVIRONMENT flag to paths.ts for automatic detection
- Dev uses 'Gemini Nexus Dev' app data dir and '.geminiNexus-agent-dev' agent dir
- Dev proxy defaults to port 8046, production stays on 8045
- Move app.setName() before packetLogPath to ensure correct userData path
- Config, DB, logs, and ORPC packets fully isolated between dev and prod
2026-05-02 00:28:22 -03:00
Gemini Nexus Bot bf5a42c03e refactor(accounts): decompose CloudAccountList into focused components
- Extract AccountsHeader, AccountsToolbar, AddAccountDialog, ExportImportDialogs, BatchActionBar, AccountsGrid
- Slim CloudAccountList from 1159 to 164 lines (orchestrator pattern)
- Improve visual hierarchy: stat cards with color-tinted borders, toolbar separators, better empty state
- All existing functionality preserved
2026-05-02 00:27:59 -03:00
Gemini Nexus Bot 7d2977b665 feat(ui): replace sidebar with compact top header navigation
- Rewrite MainLayout from vertical sidebar to horizontal header bar
- Brand left, nav tabs center, status indicator right
- Simplify StatusBar to single inline layout (remove collapsed variant)
- Widen content area from max-w-4xl to max-w-6xl
- Remove sidebar-collapsed localStorage persistence
2026-05-02 00:27:36 -03:00
Gemini Nexus Bot 0753bbdce6 fix: install notice showing in Chinese and not recognizing MSI install path
- Use app.getPreferredSystemLanguages() for reliable OS language detection
  instead of relying solely on app.getLocale() which returns Chromium's
  internal locale (was returning zh-CN on pt-BR systems)
- Support both Squirrel (%LOCALAPPDATA%) and WiX/MSI (Program Files)
  install directories when checking if app runs from expected location
- Extract matchLocaleTag helper for cleaner language resolution logic
- Add getAllExpectedInstallRoots to enumerate all valid install paths
2026-04-29 12:04:32 -03:00
semantic-release-bot a631887cd1 chore(release): 0.14.0 [skip ci]
## [0.14.0](https://github.com/evandrodevbr/GeminiNexus/compare/v0.13.1...v0.14.0) (2026-04-29)

### 🚀 Features

* **proxy:** add OpenAI Responses API compatibility for Open CoDesign ([68474b5](https://github.com/evandrodevbr/GeminiNexus/commit/68474b56dca9c9bcd7b06eaae04c521f475e8e2c))
v0.14.0
2026-04-29 14:34:04 +00:00
Gemini Nexus Bot 4ce8d266ab Merge branch 'main' of https://github.com/evandrodevbr/GeminiNexus 2026-04-29 11:32:58 -03:00
Gemini Nexus Bot 68474b56dc feat(proxy): add OpenAI Responses API compatibility for Open CoDesign
- Normalize Responses API tool format ({name, parameters} at top level)
  to Chat Completions format ({function: {name, parameters}})
- Handle 'developer' role as system prompt (OpenAI's newer equivalent)
- Add null/non-array guards to convertOpenAIPartsToAnthropicContent and
  extractOpenAITextContent to prevent 'content is not iterable' crashes
- Support input_text, output_text, and reasoning item types in Responses
  API input parsing
- Forward reasoning.effort to Claude adaptive thinking config
- Extend JSON schema sanitization blacklist with draft-2020 keywords
  (patternProperties, , unevaluatedProperties, etc.)
- Add fallback for untyped items with role/content in Responses API input
- Add diagnostic logging for /v1/responses input conversion
2026-04-29 04:39:15 -03:00
semantic-release-bot 48faa0d4b1 chore(release): 0.13.1 [skip ci]
## [0.13.1](https://github.com/evandrodevbr/GeminiNexus/compare/v0.13.0...v0.13.1) (2026-04-29)

### 🐛 Bug Fixes

* lazy-initialize api-logger to prevent EACCES in CI environments ([9bf7c46](https://github.com/evandrodevbr/GeminiNexus/commit/9bf7c46ff6320f49cba80923c9e11eac35a7d4f0))
v0.13.1
2026-04-29 06:40:20 +00:00