Tam Nhu Tran
6d266fc7e8
fix: remove raw write re-exports from facade (cache bypass)
...
PR-Agent #1150 review flagged that re-exporting
saveUnifiedConfig/mutateUnifiedConfig/updateUnifiedConfig
allows callers to bypass the cache. Only export the
cache-coherent wrappers (saveConfig/mutateConfig/updateConfig).
Raw functions still available via direct import from
unified-config-loader if needed.
- Remove raw write re-exports from facade
- Add test verifying raw writes are NOT exported
- Add test verifying cache-coherent wrappers ARE exported
2026-04-30 15:37:17 -04:00
Tam Nhu Tran
b8ed36e370
fix: round 3 red-team — test false-positive, dead code,
...
edge-case coverage
- Fix false-positive test: use CCSError with recoverable=false
instead of plain Error (never exercised recoverable check)
- Remove redundant retryableCheck ?? defaultRetryableCheck
(destructuring already defaults)
- Add test: retryAfter > maxDelayMs (server directive wins)
- Add test: baseDelayMs=0 produces immediate retries
- Add test: onRetry not called when maxRetries=0
2026-04-30 15:16:07 -04:00
Tam Nhu Tran
18e865ea36
fix: round 2 red-team fixes — onRetry safety, validation, barrel
...
- retry-strategy: wrap onRetry in try/catch to prevent
callback errors from aborting retries
- retry-strategy: validate baseDelayMs >= 0
- retry-strategy: update JSDoc to clarify
retryAfter/maxDelayMs interaction
- errors/index.ts: add ValidationError to barrel
- Tests: onRetry throw test, negative baseDelayMs test
2026-04-30 14:59:44 -04:00
Tam Nhu Tran
9bb1bdbad9
fix: address red-team review findings — cache aliasing, jitter cap, cause shadowing
...
- config-loader-facade: use structuredClone() to prevent cache aliasing
- retry-strategy: re-cap delay after jitter to enforce maxDelayMs boundary
- retry-strategy: wire retryAfter from RetryableError into delay computation
- retry-strategy: guard against negative maxRetries
- error-types: rename RetryableError.cause to originalError to avoid shadowing Error.cause
- Tests updated for all fixes
2026-04-30 14:37:28 -04:00
Tam Nhu Tran
cb8b34b36d
Merge branch 'kai/refactor/1135-item2-config-loader-facade' into kai/refactor/1135-structural-maintainability
2026-04-30 14:10:42 -04:00
Tam Nhu Tran
b5fae5e8c9
Merge branch 'kai/refactor/1135-item9-error-hierarchy-retry' into kai/refactor/1135-structural-maintainability
2026-04-30 14:10:30 -04:00
Tam Nhu Tran
b7aea78512
Revert "Revert "refactor(config): reorganize unified-config-types into schemas directory""
...
This reverts commit 06bce198eb .
2026-04-30 14:07:32 -04:00
Tam Nhu Tran
0868e92bb1
Revert "Revert "refactor(config): reorganize unified-config-types into schemas directory""
...
This reverts commit 06bce198eb .
2026-04-30 14:05:33 -04:00
Tam Nhu Tran
1e9a7f3fa0
refactor(config): add config-loader-facade with memoization
...
Single import path for all config loading. Re-exports all 26 functions
from unified-config-loader and 4 from config-manager. Adds memoization
for loadOrCreateUnifiedConfig via getCachedConfig() with automatic cache
invalidation on write operations (mutateConfig, updateConfig). Pure
structural refactor -- no existing imports modified.
2026-04-30 14:03:48 -04:00
Tam Nhu Tran
06bce198eb
Revert "refactor(config): reorganize unified-config-types into schemas directory"
...
This reverts commit 51df0ee55b .
2026-04-30 13:57:08 -04:00
Tam Nhu Tran
51df0ee55b
refactor(config): reorganize unified-config-types into schemas directory
...
Split the 1,128-line unified-config-types.ts into focused schema modules
under src/config/schemas/ for maintainability. Each file is under 200 LOC.
New schema files:
- version.ts: UNIFIED_CONFIG_VERSION constant
- auth.ts: AccountConfig, ProfileConfig, OAuthAccounts, CLIProxyAuthConfig, etc.
- cliproxy.ts: CLIProxyConfig, CompositeTierConfig, routing/safety types
- copilot-cursor.ts: CopilotConfig, CursorConfig + defaults
- proxy-server.ts: CliproxyServerConfig, GlobalEnvConfig, ImageAnalysisConfig
- quota.ts: QuotaManagementConfig + all quota types and defaults
- thinking.ts: ThinkingConfig + tier defaults
- channels.ts: OfficialChannelsConfig (Telegram, Discord, iMessage)
- websearch.ts: All WebSearch backend types (DuckDuckGo, Brave, Exa, etc.)
- browser.ts: BrowserConfig, BrowserClaudeConfig, BrowserCodexConfig
- logging.ts: LoggingConfig, PreferencesConfig
- unified-config.ts: UnifiedConfig interface, factory, type guard
- index.ts: Barrel re-export of all schema modules
unified-config-types.ts is now a thin backward-compatible barrel that
re-exports everything from schemas/index. All 67 existing imports across
the codebase continue to resolve unchanged.
2026-04-30 13:54:40 -04:00
Tam Nhu Tran
d089ab06c2
refactor(errors): add RetryableError and retry-strategy utility
...
Extract retryable error class and reusable withRetry wrapper from
scattered retry logic in glmt-proxy and binary/downloader.
2026-04-30 13:46:33 -04:00
github-actions[bot]
a68a3aee66
chore(release): 7.75.0-dev.8
2026-04-30 13:04:09 -04:00
Kai (Tam Nhu) Tran and GitHub
9ed6107c8f
Merge pull request #1144 from kaitranntt/kai/fix/1135-colocated-test-bucket
...
test: include colocated cliproxy tests in buckets
2026-04-30 12:59:45 -04:00
Tam Nhu Tran
33a1553431
test: include colocated cliproxy tests in buckets
2026-04-30 12:49:57 -04:00
github-actions[bot]
de6bdde66b
chore(release): 7.75.0-dev.7
2026-04-30 12:48:31 -04:00
Kai (Tam Nhu) Tran and GitHub
c9dcca887d
Merge pull request #1143 from kaitranntt/kai/fix/1132-openai-reasoning-chat-payload
...
fix(proxy): shape direct OpenAI reasoning chat payloads
2026-04-30 12:44:58 -04:00
Tam Nhu Tran
d9ace607e5
fix(proxy): shape direct OpenAI reasoning chat payloads
2026-04-30 12:33:02 -04:00
github-actions[bot]
65e10b3473
chore(release): 7.75.0-dev.6
2026-04-30 11:01:45 -04:00
Kai (Tam Nhu) Tran and GitHub
54e15c430e
Merge pull request #1140 from kaitranntt/kai/feat/1139-claude-quota-bars
...
feat(ui): clarify Claude quota bars
2026-04-30 10:58:11 -04:00
Tam Nhu Tran
476c6d827f
fix(ui): improve split quota bar readability
2026-04-30 10:32:43 -04:00
github-actions[bot]
e43f84575a
chore(release): 7.75.0-dev.5
2026-04-30 10:09:31 -04:00
Tam Nhu Tran
a8b686d643
feat(ui): show split Claude quota bars
2026-04-30 10:05:19 -04:00
Kai (Tam Nhu) Tran and GitHub
fc6bf24510
Merge pull request #1137 from kaitranntt/kai/refactor/1135-structural-maintainability
...
refactor(cliproxy): flatten module structure and colocate tests
2026-04-30 10:05:05 -04:00
Tam Nhu Tran
20c2005df9
fix(cliproxy): clear stale cleanup timer and fix session/tunnel edge cases
...
- Stop cleanup interval when all auth sessions are removed (unregister,
cancel, cancelAll) so the Node event loop isn't held alive.
- getActiveSessionForProvider now returns the most recent session by
startedAt instead of the first map entry.
- HTTPS tunnel includes port in Host header when non-443.
2026-04-29 18:13:15 -04:00
Tam Nhu Tran
6633bf456b
fix(cliproxy): handle all invalid prefixes and reverse-order collisions
...
forceValidChars() now ensures leading char is letter or underscore
(catches dot, hyphen, colon, slash — not just digits). registerTools()
always registers in mapping so collisions are detected regardless of
tool registration order.
2026-04-29 18:04:19 -04:00
Tam Nhu Tran
218d0cf6c6
fix(cliproxy): sanitize invalid tool name chars and disambiguate collisions
...
sanitizeToolName() fallback now forces valid characters (replaces
unsupported chars with underscores, ensures leading letter/underscore)
instead of only truncating. registerTools() disambiguates colliding
sanitized names with numeric suffixes so restoreToolUse() always maps
back to the correct original.
2026-04-29 17:57:11 -04:00
Tam Nhu Tran
31dc18657c
fix(cliproxy): fix base-config-loader __dirname path and stale mock.module paths
...
- base-config-loader.ts moved from src/cliproxy/ to src/cliproxy/config/,
so __dirname relative path needs one more .. to reach config/ dir
- Update mock.module paths for proxy-detector and routing-strategy
in non-colocated test files
2026-04-29 17:40:33 -04:00
Tam Nhu Tran
2c817fae48
fix(cliproxy): update remaining stale imports in non-colocated tests
...
Fix auth-token-manager, quota-response-cache, stats-fetcher,
and proxy-detector import paths in tests/ outside cliproxy.
2026-04-29 17:26:51 -04:00
Tam Nhu Tran
9ad7529bb3
chore: gitignore UI and test build artifacts
...
Prevents tsc -b output from pre-commit hooks being accidentally staged.
2026-04-29 17:21:06 -04:00
Tam Nhu Tran
804b1e80b4
chore: remove build artifacts accidentally committed
2026-04-29 17:20:11 -04:00
Tam Nhu Tran
c3c8cb7a82
fix(cliproxy): exclude colocated tests from tsconfig and eslint
...
- Add src/**/__tests__/** to tsconfig.json exclude list
- Add ignores pattern for __tests__ in eslint.config.mjs
- Fix ui/src/lib/api-client.ts import path for provider-entitlement-types
- Remove stale build artifacts from ui/src/lib/ and tests/mocks/
2026-04-29 17:18:23 -04:00
Tam Nhu Tran
273214d166
fix(cliproxy): correct relative import paths in colocated tests
2026-04-29 17:10:05 -04:00
Tam Nhu Tran
1c72b4b8d5
refactor(cliproxy): flatten module structure and colocate tests ( #1135 )
...
- Split types.ts (331 LOC) into 4 concern-based files under types/:
platform-types, binary-types, provider-types, config-types
- Preserve backward compat via barrel re-export (types.ts → types/index)
- Reorganize 53 root-level files into 8 subdirectories:
accounts/, ai-providers/, auth/, binary/, config/, executor/,
management/, proxy/, quota/, routing/, services/, sync/
- Reduce src/cliproxy/ root from 65 to 8 files (target: ≤10)
- Colocate 87 unit tests from tests/unit/cliproxy/ into
src/cliproxy/*/__tests__/ (13 colocated test directories)
- Update import paths across 40+ consumer files
- Add TDD backward-compat test for types split
Refs #1135
2026-04-29 17:06:39 -04:00
Kai (Tam Nhu) Tran and GitHub
561189efe6
Merge pull request #1136 from kaitranntt/kai/refactor/1135-plugin-path-normalizer
...
refactor: extract plugin path normalizer
2026-04-29 15:02:51 -04:00
github-actions[bot]
5f298f9b4b
chore(release): 7.75.0-dev.4
2026-04-29 14:54:45 -04:00
Kai (Tam Nhu) Tran and GitHub
a35824f28d
Merge pull request #1133 from seilk/fix/tool-result-image-placeholders
...
fix(proxy): stringify tool_result images for OpenAI upstreams
2026-04-29 14:48:57 -04:00
Tam Nhu Tran
3330229686
refactor: extract plugin path normalizer
2026-04-29 14:42:39 -04:00
seilk
2c0f9c41ff
test(proxy): assert tool_result image URLs stay redacted
2026-04-30 02:22:49 +09:00
seilk
83c16e216a
fix(proxy): avoid leaking tool_result image URLs
2026-04-30 02:18:22 +09:00
seilk
f6bb31c956
fix(proxy): stringify tool_result images for OpenAI upstreams
2026-04-30 00:55:45 +09:00
github-actions[bot]
7569c6ce2d
chore(release): 7.75.0-dev.3
2026-04-28 23:38:53 -04:00
Kai (Tam Nhu) Tran and GitHub
1e064b9e93
Merge pull request #1130 from kaitranntt/kai/fix/stable-release-runner-parity
...
fix(ci): align stable release runner
2026-04-28 23:35:11 -04:00
Tam Nhu Tran
4458774d5c
fix(ci): align stable release runner
2026-04-28 23:30:33 -04:00
github-actions[bot]
ae4603c50c
chore(release): 7.75.0-dev.2
2026-04-28 23:23:22 -04:00
Kai (Tam Nhu) Tran and GitHub
74535d7021
Merge pull request #1129 from kaitranntt/kai/fix/release-sync-runner-parity
...
fix(ci): align release sync with protected dev checks
2026-04-28 23:18:59 -04:00
Tam Nhu Tran
0381fa9b52
fix(ci): align release sync with protected dev checks
2026-04-28 23:14:25 -04:00
github-actions[bot]
7d3cdd8ceb
chore(release): 7.75.0-dev.1
2026-04-28 23:02:39 -04:00
Kai (Tam Nhu) Tran and GitHub
a4b84c5b69
Merge pull request #1128 from kaitranntt/kai/chore/sync-main-into-dev-260429
...
chore(sync): merge main release into dev
2026-04-28 22:57:55 -04:00
Tam Nhu Tran
01150cfa66
chore(sync): merge main release into dev
2026-04-28 22:53:09 -04:00