Kai (Tam Nhu) Tran and GitHub
769ebbd43b
Merge pull request #1150 from kaitranntt/kai/refactor/1135-structural-maintainability
...
refactor: Phase 2 structural maintainability (#1135 )
2026-04-30 16:20:30 -04:00
Tam Nhu Tran
1e5580a30a
fix(config-facade): mtime-based staleness detection for cache
...
getCachedConfig() now checks config file mtime on each call.
If external code writes via unified-config-loader directly,
the facade detects the file change and re-reads from disk
automatically. Resolves PR-Agent "Stale Cache" finding.
2026-04-30 15:56:50 -04:00
Tam Nhu Tran
2290a1dc5a
docs(config-facade): clarify cache coherence contract
...
Document that uncached reads (loadOrCreateUnifiedConfig)
bypass the cache and callers should use
invalidateConfigCache() if they mix uncached reads
with cached writes outside the facade. Resolves
remaining PR-Agent concern from #1150 comment.
2026-04-30 15:44:34 -04:00
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