@jonnyhoo/ccs 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/ccs/continue.md +15 -0
- package/.claude/commands/ccs.md +17 -0
- package/.claude/skills/ccs-delegation/CLAUDE.md.template +17 -0
- package/.claude/skills/ccs-delegation/SKILL.md +195 -0
- package/.claude/skills/ccs-delegation/references/troubleshooting.md +201 -0
- package/LICENSE +21 -0
- package/README.md +383 -0
- package/config/base-agy.settings.json +10 -0
- package/config/base-claude.settings.json +10 -0
- package/config/base-codex.settings.json +10 -0
- package/config/base-gemini.settings.json +10 -0
- package/config/base-ghcp.settings.json +10 -0
- package/config/base-glm.settings.json +10 -0
- package/config/base-glmt.settings.json +17 -0
- package/config/base-iflow.settings.json +10 -0
- package/config/base-kimi.settings.json +11 -0
- package/config/base-kiro.settings.json +10 -0
- package/config/base-mm.settings.json +10 -0
- package/config/base-ollama-cloud.settings.json +10 -0
- package/config/base-ollama.settings.json +10 -0
- package/config/base-qwen.settings.json +10 -0
- package/config/config.example.json +6 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +24 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/services/index.d.ts +13 -0
- package/dist/api/services/index.d.ts.map +1 -0
- package/dist/api/services/index.js +39 -0
- package/dist/api/services/index.js.map +1 -0
- package/dist/api/services/openrouter-catalog.d.ts +30 -0
- package/dist/api/services/openrouter-catalog.d.ts.map +1 -0
- package/dist/api/services/openrouter-catalog.js +130 -0
- package/dist/api/services/openrouter-catalog.js.map +1 -0
- package/dist/api/services/openrouter-picker.d.ts +15 -0
- package/dist/api/services/openrouter-picker.d.ts.map +1 -0
- package/dist/api/services/openrouter-picker.js +113 -0
- package/dist/api/services/openrouter-picker.js.map +1 -0
- package/dist/api/services/profile-reader.d.ts +31 -0
- package/dist/api/services/profile-reader.d.ts.map +1 -0
- package/dist/api/services/profile-reader.js +153 -0
- package/dist/api/services/profile-reader.js.map +1 -0
- package/dist/api/services/profile-types.d.ts +42 -0
- package/dist/api/services/profile-types.d.ts.map +1 -0
- package/dist/api/services/profile-types.js +8 -0
- package/dist/api/services/profile-types.js.map +1 -0
- package/dist/api/services/profile-writer.d.ts +6 -0
- package/dist/api/services/profile-writer.d.ts.map +1 -0
- package/dist/api/services/profile-writer.js +187 -0
- package/dist/api/services/profile-writer.js.map +1 -0
- package/dist/api/services/provider-presets.d.ts +38 -0
- package/dist/api/services/provider-presets.d.ts.map +1 -0
- package/dist/api/services/provider-presets.js +165 -0
- package/dist/api/services/provider-presets.js.map +1 -0
- package/dist/api/services/validation-service.d.ts +26 -0
- package/dist/api/services/validation-service.d.ts.map +1 -0
- package/dist/api/services/validation-service.js +80 -0
- package/dist/api/services/validation-service.js.map +1 -0
- package/dist/auth/auth-commands.d.ts +62 -0
- package/dist/auth/auth-commands.d.ts.map +1 -0
- package/dist/auth/auth-commands.js +191 -0
- package/dist/auth/auth-commands.js.map +1 -0
- package/dist/auth/commands/create-command.d.ts +11 -0
- package/dist/auth/commands/create-command.d.ts.map +1 -0
- package/dist/auth/commands/create-command.js +137 -0
- package/dist/auth/commands/create-command.js.map +1 -0
- package/dist/auth/commands/default-command.d.ts +15 -0
- package/dist/auth/commands/default-command.d.ts.map +1 -0
- package/dist/auth/commands/default-command.js +71 -0
- package/dist/auth/commands/default-command.js.map +1 -0
- package/dist/auth/commands/index.d.ts +12 -0
- package/dist/auth/commands/index.d.ts.map +1 -0
- package/dist/auth/commands/index.js +25 -0
- package/dist/auth/commands/index.js.map +1 -0
- package/dist/auth/commands/list-command.d.ts +11 -0
- package/dist/auth/commands/list-command.d.ts.map +1 -0
- package/dist/auth/commands/list-command.js +124 -0
- package/dist/auth/commands/list-command.js.map +1 -0
- package/dist/auth/commands/remove-command.d.ts +11 -0
- package/dist/auth/commands/remove-command.d.ts.map +1 -0
- package/dist/auth/commands/remove-command.js +102 -0
- package/dist/auth/commands/remove-command.js.map +1 -0
- package/dist/auth/commands/show-command.d.ts +11 -0
- package/dist/auth/commands/show-command.d.ts.map +1 -0
- package/dist/auth/commands/show-command.js +103 -0
- package/dist/auth/commands/show-command.js.map +1 -0
- package/dist/auth/commands/types.d.ts +50 -0
- package/dist/auth/commands/types.d.ts.map +1 -0
- package/dist/auth/commands/types.js +26 -0
- package/dist/auth/commands/types.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +16 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/profile-detector.d.ts +106 -0
- package/dist/auth/profile-detector.d.ts.map +1 -0
- package/dist/auth/profile-detector.js +431 -0
- package/dist/auth/profile-detector.js.map +1 -0
- package/dist/auth/profile-registry.d.ts +110 -0
- package/dist/auth/profile-registry.d.ts.map +1 -0
- package/dist/auth/profile-registry.js +318 -0
- package/dist/auth/profile-registry.js.map +1 -0
- package/dist/ccs.d.ts +2 -0
- package/dist/ccs.d.ts.map +1 -0
- package/dist/ccs.js +642 -0
- package/dist/ccs.js.map +1 -0
- package/dist/cliproxy/account-manager.d.ts +218 -0
- package/dist/cliproxy/account-manager.d.ts.map +1 -0
- package/dist/cliproxy/account-manager.js +808 -0
- package/dist/cliproxy/account-manager.js.map +1 -0
- package/dist/cliproxy/auth/auth-types.d.ts +106 -0
- package/dist/cliproxy/auth/auth-types.d.ts.map +1 -0
- package/dist/cliproxy/auth/auth-types.js +164 -0
- package/dist/cliproxy/auth/auth-types.js.map +1 -0
- package/dist/cliproxy/auth/environment-detector.d.ts +30 -0
- package/dist/cliproxy/auth/environment-detector.d.ts.map +1 -0
- package/dist/cliproxy/auth/environment-detector.js +129 -0
- package/dist/cliproxy/auth/environment-detector.js.map +1 -0
- package/dist/cliproxy/auth/gemini-token-refresh.d.ts +38 -0
- package/dist/cliproxy/auth/gemini-token-refresh.d.ts.map +1 -0
- package/dist/cliproxy/auth/gemini-token-refresh.js +327 -0
- package/dist/cliproxy/auth/gemini-token-refresh.js.map +1 -0
- package/dist/cliproxy/auth/index.d.ts +11 -0
- package/dist/cliproxy/auth/index.d.ts.map +1 -0
- package/dist/cliproxy/auth/index.js +35 -0
- package/dist/cliproxy/auth/index.js.map +1 -0
- package/dist/cliproxy/auth/kiro-import.d.ts +23 -0
- package/dist/cliproxy/auth/kiro-import.d.ts.map +1 -0
- package/dist/cliproxy/auth/kiro-import.js +140 -0
- package/dist/cliproxy/auth/kiro-import.js.map +1 -0
- package/dist/cliproxy/auth/oauth-handler.d.ts +31 -0
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-handler.js +422 -0
- package/dist/cliproxy/auth/oauth-handler.js.map +1 -0
- package/dist/cliproxy/auth/oauth-process.d.ts +27 -0
- package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-process.js +386 -0
- package/dist/cliproxy/auth/oauth-process.js.map +1 -0
- package/dist/cliproxy/auth/provider-refreshers/index.d.ts +21 -0
- package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -0
- package/dist/cliproxy/auth/provider-refreshers/index.js +57 -0
- package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -0
- package/dist/cliproxy/auth/token-expiry-checker.d.ts +37 -0
- package/dist/cliproxy/auth/token-expiry-checker.d.ts.map +1 -0
- package/dist/cliproxy/auth/token-expiry-checker.js +115 -0
- package/dist/cliproxy/auth/token-expiry-checker.js.map +1 -0
- package/dist/cliproxy/auth/token-manager.d.ts +66 -0
- package/dist/cliproxy/auth/token-manager.d.ts.map +1 -0
- package/dist/cliproxy/auth/token-manager.js +309 -0
- package/dist/cliproxy/auth/token-manager.js.map +1 -0
- package/dist/cliproxy/auth/token-refresh-config.d.ts +13 -0
- package/dist/cliproxy/auth/token-refresh-config.d.ts.map +1 -0
- package/dist/cliproxy/auth/token-refresh-config.js +31 -0
- package/dist/cliproxy/auth/token-refresh-config.js.map +1 -0
- package/dist/cliproxy/auth/token-refresh-worker.d.ts +83 -0
- package/dist/cliproxy/auth/token-refresh-worker.d.ts.map +1 -0
- package/dist/cliproxy/auth/token-refresh-worker.js +214 -0
- package/dist/cliproxy/auth/token-refresh-worker.js.map +1 -0
- package/dist/cliproxy/auth-handler.d.ts +31 -0
- package/dist/cliproxy/auth-handler.d.ts.map +1 -0
- package/dist/cliproxy/auth-handler.js +60 -0
- package/dist/cliproxy/auth-handler.js.map +1 -0
- package/dist/cliproxy/auth-session-manager.d.ts +51 -0
- package/dist/cliproxy/auth-session-manager.d.ts.map +1 -0
- package/dist/cliproxy/auth-session-manager.js +134 -0
- package/dist/cliproxy/auth-session-manager.js.map +1 -0
- package/dist/cliproxy/auth-token-manager.d.ts +82 -0
- package/dist/cliproxy/auth-token-manager.d.ts.map +1 -0
- package/dist/cliproxy/auth-token-manager.js +187 -0
- package/dist/cliproxy/auth-token-manager.js.map +1 -0
- package/dist/cliproxy/auth-utils.d.ts +16 -0
- package/dist/cliproxy/auth-utils.d.ts.map +1 -0
- package/dist/cliproxy/auth-utils.js +33 -0
- package/dist/cliproxy/auth-utils.js.map +1 -0
- package/dist/cliproxy/base-config-loader.d.ts +42 -0
- package/dist/cliproxy/base-config-loader.d.ts.map +1 -0
- package/dist/cliproxy/base-config-loader.js +123 -0
- package/dist/cliproxy/base-config-loader.js.map +1 -0
- package/dist/cliproxy/binary/downloader.d.ts +42 -0
- package/dist/cliproxy/binary/downloader.d.ts.map +1 -0
- package/dist/cliproxy/binary/downloader.js +407 -0
- package/dist/cliproxy/binary/downloader.js.map +1 -0
- package/dist/cliproxy/binary/extractor.d.ts +12 -0
- package/dist/cliproxy/binary/extractor.d.ts.map +1 -0
- package/dist/cliproxy/binary/extractor.js +28 -0
- package/dist/cliproxy/binary/extractor.js.map +1 -0
- package/dist/cliproxy/binary/index.d.ts +13 -0
- package/dist/cliproxy/binary/index.d.ts.map +1 -0
- package/dist/cliproxy/binary/index.js +54 -0
- package/dist/cliproxy/binary/index.js.map +1 -0
- package/dist/cliproxy/binary/installer.d.ts +25 -0
- package/dist/cliproxy/binary/installer.d.ts.map +1 -0
- package/dist/cliproxy/binary/installer.js +129 -0
- package/dist/cliproxy/binary/installer.js.map +1 -0
- package/dist/cliproxy/binary/lifecycle.d.ts +11 -0
- package/dist/cliproxy/binary/lifecycle.d.ts.map +1 -0
- package/dist/cliproxy/binary/lifecycle.js +150 -0
- package/dist/cliproxy/binary/lifecycle.js.map +1 -0
- package/dist/cliproxy/binary/tar-extractor.d.ts +10 -0
- package/dist/cliproxy/binary/tar-extractor.d.ts.map +1 -0
- package/dist/cliproxy/binary/tar-extractor.js +118 -0
- package/dist/cliproxy/binary/tar-extractor.js.map +1 -0
- package/dist/cliproxy/binary/types.d.ts +49 -0
- package/dist/cliproxy/binary/types.d.ts.map +1 -0
- package/dist/cliproxy/binary/types.js +32 -0
- package/dist/cliproxy/binary/types.js.map +1 -0
- package/dist/cliproxy/binary/updater.d.ts +7 -0
- package/dist/cliproxy/binary/updater.d.ts.map +1 -0
- package/dist/cliproxy/binary/updater.js +18 -0
- package/dist/cliproxy/binary/updater.js.map +1 -0
- package/dist/cliproxy/binary/verifier.d.ts +18 -0
- package/dist/cliproxy/binary/verifier.d.ts.map +1 -0
- package/dist/cliproxy/binary/verifier.js +82 -0
- package/dist/cliproxy/binary/verifier.js.map +1 -0
- package/dist/cliproxy/binary/version-cache.d.ts +64 -0
- package/dist/cliproxy/binary/version-cache.d.ts.map +1 -0
- package/dist/cliproxy/binary/version-cache.js +239 -0
- package/dist/cliproxy/binary/version-cache.js.map +1 -0
- package/dist/cliproxy/binary/version-checker.d.ts +36 -0
- package/dist/cliproxy/binary/version-checker.d.ts.map +1 -0
- package/dist/cliproxy/binary/version-checker.js +135 -0
- package/dist/cliproxy/binary/version-checker.js.map +1 -0
- package/dist/cliproxy/binary/zip-extractor.d.ts +10 -0
- package/dist/cliproxy/binary/zip-extractor.d.ts.map +1 -0
- package/dist/cliproxy/binary/zip-extractor.js +110 -0
- package/dist/cliproxy/binary/zip-extractor.js.map +1 -0
- package/dist/cliproxy/binary-manager.d.ts +59 -0
- package/dist/cliproxy/binary-manager.d.ts.map +1 -0
- package/dist/cliproxy/binary-manager.js +211 -0
- package/dist/cliproxy/binary-manager.js.map +1 -0
- package/dist/cliproxy/cliproxy-executor.d.ts +33 -0
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -0
- package/dist/cliproxy/cliproxy-executor.js +1025 -0
- package/dist/cliproxy/cliproxy-executor.js.map +1 -0
- package/dist/cliproxy/codex-reasoning-proxy.d.ts +49 -0
- package/dist/cliproxy/codex-reasoning-proxy.d.ts.map +1 -0
- package/dist/cliproxy/codex-reasoning-proxy.js +367 -0
- package/dist/cliproxy/codex-reasoning-proxy.js.map +1 -0
- package/dist/cliproxy/config-generator.d.ts +227 -0
- package/dist/cliproxy/config-generator.d.ts.map +1 -0
- package/dist/cliproxy/config-generator.js +876 -0
- package/dist/cliproxy/config-generator.js.map +1 -0
- package/dist/cliproxy/device-code-handler.d.ts +28 -0
- package/dist/cliproxy/device-code-handler.d.ts.map +1 -0
- package/dist/cliproxy/device-code-handler.js +22 -0
- package/dist/cliproxy/device-code-handler.js.map +1 -0
- package/dist/cliproxy/https-tunnel-proxy.d.ts +44 -0
- package/dist/cliproxy/https-tunnel-proxy.d.ts.map +1 -0
- package/dist/cliproxy/https-tunnel-proxy.js +224 -0
- package/dist/cliproxy/https-tunnel-proxy.js.map +1 -0
- package/dist/cliproxy/index.d.ts +41 -0
- package/dist/cliproxy/index.d.ts.map +1 -0
- package/dist/cliproxy/index.js +151 -0
- package/dist/cliproxy/index.js.map +1 -0
- package/dist/cliproxy/management-api-client.d.ts +67 -0
- package/dist/cliproxy/management-api-client.d.ts.map +1 -0
- package/dist/cliproxy/management-api-client.js +347 -0
- package/dist/cliproxy/management-api-client.js.map +1 -0
- package/dist/cliproxy/management-api-types.d.ts +107 -0
- package/dist/cliproxy/management-api-types.d.ts.map +1 -0
- package/dist/cliproxy/management-api-types.js +9 -0
- package/dist/cliproxy/management-api-types.js.map +1 -0
- package/dist/cliproxy/model-catalog.d.ts +108 -0
- package/dist/cliproxy/model-catalog.d.ts.map +1 -0
- package/dist/cliproxy/model-catalog.js +247 -0
- package/dist/cliproxy/model-catalog.js.map +1 -0
- package/dist/cliproxy/model-config.d.ts +31 -0
- package/dist/cliproxy/model-config.d.ts.map +1 -0
- package/dist/cliproxy/model-config.js +250 -0
- package/dist/cliproxy/model-config.js.map +1 -0
- package/dist/cliproxy/openai-compat-manager.d.ts +46 -0
- package/dist/cliproxy/openai-compat-manager.d.ts.map +1 -0
- package/dist/cliproxy/openai-compat-manager.js +191 -0
- package/dist/cliproxy/openai-compat-manager.js.map +1 -0
- package/dist/cliproxy/platform-detector.d.ts +99 -0
- package/dist/cliproxy/platform-detector.d.ts.map +1 -0
- package/dist/cliproxy/platform-detector.js +174 -0
- package/dist/cliproxy/platform-detector.js.map +1 -0
- package/dist/cliproxy/project-selection-handler.d.ts +105 -0
- package/dist/cliproxy/project-selection-handler.d.ts.map +1 -0
- package/dist/cliproxy/project-selection-handler.js +167 -0
- package/dist/cliproxy/project-selection-handler.js.map +1 -0
- package/dist/cliproxy/proxy-config-resolver.d.ts +86 -0
- package/dist/cliproxy/proxy-config-resolver.d.ts.map +1 -0
- package/dist/cliproxy/proxy-config-resolver.js +253 -0
- package/dist/cliproxy/proxy-config-resolver.js.map +1 -0
- package/dist/cliproxy/proxy-detector.d.ts +72 -0
- package/dist/cliproxy/proxy-detector.d.ts.map +1 -0
- package/dist/cliproxy/proxy-detector.js +196 -0
- package/dist/cliproxy/proxy-detector.js.map +1 -0
- package/dist/cliproxy/proxy-target-resolver.d.ts +50 -0
- package/dist/cliproxy/proxy-target-resolver.d.ts.map +1 -0
- package/dist/cliproxy/proxy-target-resolver.js +105 -0
- package/dist/cliproxy/proxy-target-resolver.js.map +1 -0
- package/dist/cliproxy/quota-fetcher-codex.d.ts +66 -0
- package/dist/cliproxy/quota-fetcher-codex.d.ts.map +1 -0
- package/dist/cliproxy/quota-fetcher-codex.js +315 -0
- package/dist/cliproxy/quota-fetcher-codex.js.map +1 -0
- package/dist/cliproxy/quota-fetcher-gemini-cli.d.ts +51 -0
- package/dist/cliproxy/quota-fetcher-gemini-cli.d.ts.map +1 -0
- package/dist/cliproxy/quota-fetcher-gemini-cli.js +492 -0
- package/dist/cliproxy/quota-fetcher-gemini-cli.js.map +1 -0
- package/dist/cliproxy/quota-fetcher.d.ts +95 -0
- package/dist/cliproxy/quota-fetcher.d.ts.map +1 -0
- package/dist/cliproxy/quota-fetcher.js +589 -0
- package/dist/cliproxy/quota-fetcher.js.map +1 -0
- package/dist/cliproxy/quota-manager.d.ts +88 -0
- package/dist/cliproxy/quota-manager.d.ts.map +1 -0
- package/dist/cliproxy/quota-manager.js +278 -0
- package/dist/cliproxy/quota-manager.js.map +1 -0
- package/dist/cliproxy/quota-response-cache.d.ts +46 -0
- package/dist/cliproxy/quota-response-cache.d.ts.map +1 -0
- package/dist/cliproxy/quota-response-cache.js +98 -0
- package/dist/cliproxy/quota-response-cache.js.map +1 -0
- package/dist/cliproxy/quota-types.d.ts +84 -0
- package/dist/cliproxy/quota-types.d.ts.map +1 -0
- package/dist/cliproxy/quota-types.js +9 -0
- package/dist/cliproxy/quota-types.js.map +1 -0
- package/dist/cliproxy/remote-auth-fetcher.d.ts +28 -0
- package/dist/cliproxy/remote-auth-fetcher.d.ts.map +1 -0
- package/dist/cliproxy/remote-auth-fetcher.js +117 -0
- package/dist/cliproxy/remote-auth-fetcher.js.map +1 -0
- package/dist/cliproxy/remote-proxy-client.d.ts +59 -0
- package/dist/cliproxy/remote-proxy-client.d.ts.map +1 -0
- package/dist/cliproxy/remote-proxy-client.js +278 -0
- package/dist/cliproxy/remote-proxy-client.js.map +1 -0
- package/dist/cliproxy/remote-token-uploader.d.ts +28 -0
- package/dist/cliproxy/remote-token-uploader.d.ts.map +1 -0
- package/dist/cliproxy/remote-token-uploader.js +178 -0
- package/dist/cliproxy/remote-token-uploader.js.map +1 -0
- package/dist/cliproxy/service-manager.d.ts +55 -0
- package/dist/cliproxy/service-manager.d.ts.map +1 -0
- package/dist/cliproxy/service-manager.js +327 -0
- package/dist/cliproxy/service-manager.js.map +1 -0
- package/dist/cliproxy/services/binary-service.d.ts +67 -0
- package/dist/cliproxy/services/binary-service.d.ts.map +1 -0
- package/dist/cliproxy/services/binary-service.js +176 -0
- package/dist/cliproxy/services/binary-service.js.map +1 -0
- package/dist/cliproxy/services/index.d.ts +8 -0
- package/dist/cliproxy/services/index.d.ts.map +1 -0
- package/dist/cliproxy/services/index.js +31 -0
- package/dist/cliproxy/services/index.js.map +1 -0
- package/dist/cliproxy/services/proxy-lifecycle-service.d.ts +38 -0
- package/dist/cliproxy/services/proxy-lifecycle-service.d.ts.map +1 -0
- package/dist/cliproxy/services/proxy-lifecycle-service.js +41 -0
- package/dist/cliproxy/services/proxy-lifecycle-service.js.map +1 -0
- package/dist/cliproxy/services/variant-config-adapter.d.ts +48 -0
- package/dist/cliproxy/services/variant-config-adapter.d.ts.map +1 -0
- package/dist/cliproxy/services/variant-config-adapter.js +215 -0
- package/dist/cliproxy/services/variant-config-adapter.js.map +1 -0
- package/dist/cliproxy/services/variant-service.d.ts +52 -0
- package/dist/cliproxy/services/variant-service.d.ts.map +1 -0
- package/dist/cliproxy/services/variant-service.js +218 -0
- package/dist/cliproxy/services/variant-service.js.map +1 -0
- package/dist/cliproxy/services/variant-settings.d.ts +37 -0
- package/dist/cliproxy/services/variant-settings.d.ts.map +1 -0
- package/dist/cliproxy/services/variant-settings.js +168 -0
- package/dist/cliproxy/services/variant-settings.js.map +1 -0
- package/dist/cliproxy/session-tracker.d.ts +100 -0
- package/dist/cliproxy/session-tracker.d.ts.map +1 -0
- package/dist/cliproxy/session-tracker.js +420 -0
- package/dist/cliproxy/session-tracker.js.map +1 -0
- package/dist/cliproxy/startup-lock.d.ts +57 -0
- package/dist/cliproxy/startup-lock.d.ts.map +1 -0
- package/dist/cliproxy/startup-lock.js +216 -0
- package/dist/cliproxy/startup-lock.js.map +1 -0
- package/dist/cliproxy/stats-fetcher.d.ts +106 -0
- package/dist/cliproxy/stats-fetcher.d.ts.map +1 -0
- package/dist/cliproxy/stats-fetcher.js +267 -0
- package/dist/cliproxy/stats-fetcher.js.map +1 -0
- package/dist/cliproxy/sync/auto-sync-watcher.d.ts +37 -0
- package/dist/cliproxy/sync/auto-sync-watcher.d.ts.map +1 -0
- package/dist/cliproxy/sync/auto-sync-watcher.js +211 -0
- package/dist/cliproxy/sync/auto-sync-watcher.js.map +1 -0
- package/dist/cliproxy/sync/index.d.ts +10 -0
- package/dist/cliproxy/sync/index.d.ts.map +1 -0
- package/dist/cliproxy/sync/index.js +27 -0
- package/dist/cliproxy/sync/index.js.map +1 -0
- package/dist/cliproxy/sync/local-config-sync.d.ts +28 -0
- package/dist/cliproxy/sync/local-config-sync.d.ts.map +1 -0
- package/dist/cliproxy/sync/local-config-sync.js +223 -0
- package/dist/cliproxy/sync/local-config-sync.js.map +1 -0
- package/dist/cliproxy/sync/profile-mapper.d.ts +55 -0
- package/dist/cliproxy/sync/profile-mapper.d.ts.map +1 -0
- package/dist/cliproxy/sync/profile-mapper.js +173 -0
- package/dist/cliproxy/sync/profile-mapper.js.map +1 -0
- package/dist/cliproxy/thinking-validator.d.ts +67 -0
- package/dist/cliproxy/thinking-validator.d.ts.map +1 -0
- package/dist/cliproxy/thinking-validator.js +327 -0
- package/dist/cliproxy/thinking-validator.js.map +1 -0
- package/dist/cliproxy/tool-name-mapper.d.ts +103 -0
- package/dist/cliproxy/tool-name-mapper.d.ts.map +1 -0
- package/dist/cliproxy/tool-name-mapper.js +149 -0
- package/dist/cliproxy/tool-name-mapper.js.map +1 -0
- package/dist/cliproxy/tool-name-sanitizer.d.ts +65 -0
- package/dist/cliproxy/tool-name-sanitizer.d.ts.map +1 -0
- package/dist/cliproxy/tool-name-sanitizer.js +118 -0
- package/dist/cliproxy/tool-name-sanitizer.js.map +1 -0
- package/dist/cliproxy/tool-sanitization-proxy.d.ts +70 -0
- package/dist/cliproxy/tool-sanitization-proxy.d.ts.map +1 -0
- package/dist/cliproxy/tool-sanitization-proxy.js +453 -0
- package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -0
- package/dist/cliproxy/types.d.ts +218 -0
- package/dist/cliproxy/types.d.ts.map +1 -0
- package/dist/cliproxy/types.js +12 -0
- package/dist/cliproxy/types.js.map +1 -0
- package/dist/commands/api-command.d.ts +12 -0
- package/dist/commands/api-command.d.ts.map +1 -0
- package/dist/commands/api-command.js +423 -0
- package/dist/commands/api-command.js.map +1 -0
- package/dist/commands/cleanup-command.d.ts +12 -0
- package/dist/commands/cleanup-command.d.ts.map +1 -0
- package/dist/commands/cleanup-command.js +350 -0
- package/dist/commands/cleanup-command.js.map +1 -0
- package/dist/commands/cliproxy-command.d.ts +21 -0
- package/dist/commands/cliproxy-command.d.ts.map +1 -0
- package/dist/commands/cliproxy-command.js +1099 -0
- package/dist/commands/cliproxy-command.js.map +1 -0
- package/dist/commands/cliproxy-sync-handler.d.ts +19 -0
- package/dist/commands/cliproxy-sync-handler.d.ts.map +1 -0
- package/dist/commands/cliproxy-sync-handler.js +99 -0
- package/dist/commands/cliproxy-sync-handler.js.map +1 -0
- package/dist/commands/config-auth/disable-command.d.ts +10 -0
- package/dist/commands/config-auth/disable-command.d.ts.map +1 -0
- package/dist/commands/config-auth/disable-command.js +64 -0
- package/dist/commands/config-auth/disable-command.js.map +1 -0
- package/dist/commands/config-auth/index.d.ts +14 -0
- package/dist/commands/config-auth/index.d.ts.map +1 -0
- package/dist/commands/config-auth/index.js +84 -0
- package/dist/commands/config-auth/index.js.map +1 -0
- package/dist/commands/config-auth/setup-command.d.ts +13 -0
- package/dist/commands/config-auth/setup-command.d.ts.map +1 -0
- package/dist/commands/config-auth/setup-command.js +121 -0
- package/dist/commands/config-auth/setup-command.js.map +1 -0
- package/dist/commands/config-auth/show-command.d.ts +10 -0
- package/dist/commands/config-auth/show-command.d.ts.map +1 -0
- package/dist/commands/config-auth/show-command.js +79 -0
- package/dist/commands/config-auth/show-command.js.map +1 -0
- package/dist/commands/config-auth/types.d.ts +25 -0
- package/dist/commands/config-auth/types.d.ts.map +1 -0
- package/dist/commands/config-auth/types.js +8 -0
- package/dist/commands/config-auth/types.js.map +1 -0
- package/dist/commands/config-command.d.ts +12 -0
- package/dist/commands/config-command.d.ts.map +1 -0
- package/dist/commands/config-command.js +184 -0
- package/dist/commands/config-command.js.map +1 -0
- package/dist/commands/config-image-analysis-command.d.ts +8 -0
- package/dist/commands/config-image-analysis-command.d.ts.map +1 -0
- package/dist/commands/config-image-analysis-command.js +174 -0
- package/dist/commands/config-image-analysis-command.js.map +1 -0
- package/dist/commands/copilot-command.d.ts +10 -0
- package/dist/commands/copilot-command.d.ts.map +1 -0
- package/dist/commands/copilot-command.js +228 -0
- package/dist/commands/copilot-command.js.map +1 -0
- package/dist/commands/doctor-command.d.ts +11 -0
- package/dist/commands/doctor-command.d.ts.map +1 -0
- package/dist/commands/doctor-command.js +92 -0
- package/dist/commands/doctor-command.js.map +1 -0
- package/dist/commands/help-command.d.ts +5 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +346 -0
- package/dist/commands/help-command.js.map +1 -0
- package/dist/commands/index.d.ts +18 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +35 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/install-command.d.ts +14 -0
- package/dist/commands/install-command.d.ts.map +1 -0
- package/dist/commands/install-command.js +62 -0
- package/dist/commands/install-command.js.map +1 -0
- package/dist/commands/migrate-command.d.ts +17 -0
- package/dist/commands/migrate-command.d.ts.map +1 -0
- package/dist/commands/migrate-command.js +139 -0
- package/dist/commands/migrate-command.js.map +1 -0
- package/dist/commands/persist-command.d.ts +12 -0
- package/dist/commands/persist-command.d.ts.map +1 -0
- package/dist/commands/persist-command.js +565 -0
- package/dist/commands/persist-command.js.map +1 -0
- package/dist/commands/setup-command.d.ts +29 -0
- package/dist/commands/setup-command.d.ts.map +1 -0
- package/dist/commands/setup-command.js +426 -0
- package/dist/commands/setup-command.js.map +1 -0
- package/dist/commands/shell-completion-command.d.ts +10 -0
- package/dist/commands/shell-completion-command.d.ts.map +1 -0
- package/dist/commands/shell-completion-command.js +90 -0
- package/dist/commands/shell-completion-command.js.map +1 -0
- package/dist/commands/sync-command.d.ts +10 -0
- package/dist/commands/sync-command.d.ts.map +1 -0
- package/dist/commands/sync-command.js +67 -0
- package/dist/commands/sync-command.js.map +1 -0
- package/dist/commands/tokens-command.d.ts +19 -0
- package/dist/commands/tokens-command.d.ts.map +1 -0
- package/dist/commands/tokens-command.js +173 -0
- package/dist/commands/tokens-command.js.map +1 -0
- package/dist/commands/update-command.d.ts +19 -0
- package/dist/commands/update-command.d.ts.map +1 -0
- package/dist/commands/update-command.js +290 -0
- package/dist/commands/update-command.js.map +1 -0
- package/dist/commands/version-command.d.ts +10 -0
- package/dist/commands/version-command.d.ts.map +1 -0
- package/dist/commands/version-command.js +100 -0
- package/dist/commands/version-command.js.map +1 -0
- package/dist/config/feature-flags.d.ts +19 -0
- package/dist/config/feature-flags.d.ts.map +1 -0
- package/dist/config/feature-flags.js +31 -0
- package/dist/config/feature-flags.js.map +1 -0
- package/dist/config/index.d.ts +11 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +32 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/migration-manager.d.ts +75 -0
- package/dist/config/migration-manager.d.ts.map +1 -0
- package/dist/config/migration-manager.js +446 -0
- package/dist/config/migration-manager.js.map +1 -0
- package/dist/config/reserved-names.d.ts +31 -0
- package/dist/config/reserved-names.d.ts.map +1 -0
- package/dist/config/reserved-names.js +80 -0
- package/dist/config/reserved-names.js.map +1 -0
- package/dist/config/unified-config-loader.d.ts +117 -0
- package/dist/config/unified-config-loader.d.ts.map +1 -0
- package/dist/config/unified-config-loader.js +756 -0
- package/dist/config/unified-config-loader.js.map +1 -0
- package/dist/config/unified-config-types.d.ts +519 -0
- package/dist/config/unified-config-types.d.ts.map +1 -0
- package/dist/config/unified-config-types.js +211 -0
- package/dist/config/unified-config-types.js.map +1 -0
- package/dist/copilot/copilot-auth.d.ts +52 -0
- package/dist/copilot/copilot-auth.d.ts.map +1 -0
- package/dist/copilot/copilot-auth.js +201 -0
- package/dist/copilot/copilot-auth.js.map +1 -0
- package/dist/copilot/copilot-daemon.d.ts +36 -0
- package/dist/copilot/copilot-daemon.d.ts.map +1 -0
- package/dist/copilot/copilot-daemon.js +237 -0
- package/dist/copilot/copilot-daemon.js.map +1 -0
- package/dist/copilot/copilot-executor.d.ts +26 -0
- package/dist/copilot/copilot-executor.d.ts.map +1 -0
- package/dist/copilot/copilot-executor.js +150 -0
- package/dist/copilot/copilot-executor.js.map +1 -0
- package/dist/copilot/copilot-models.d.ts +34 -0
- package/dist/copilot/copilot-models.d.ts.map +1 -0
- package/dist/copilot/copilot-models.js +261 -0
- package/dist/copilot/copilot-models.js.map +1 -0
- package/dist/copilot/copilot-package-manager.d.ts +93 -0
- package/dist/copilot/copilot-package-manager.d.ts.map +1 -0
- package/dist/copilot/copilot-package-manager.js +488 -0
- package/dist/copilot/copilot-package-manager.js.map +1 -0
- package/dist/copilot/index.d.ts +13 -0
- package/dist/copilot/index.d.ts.map +1 -0
- package/dist/copilot/index.js +63 -0
- package/dist/copilot/index.js.map +1 -0
- package/dist/copilot/types.d.ts +65 -0
- package/dist/copilot/types.d.ts.map +1 -0
- package/dist/copilot/types.js +8 -0
- package/dist/copilot/types.js.map +1 -0
- package/dist/delegation/delegation-handler.d.ts +66 -0
- package/dist/delegation/delegation-handler.d.ts.map +1 -0
- package/dist/delegation/delegation-handler.js +290 -0
- package/dist/delegation/delegation-handler.js.map +1 -0
- package/dist/delegation/executor/index.d.ts +7 -0
- package/dist/delegation/executor/index.d.ts.map +1 -0
- package/dist/delegation/executor/index.js +28 -0
- package/dist/delegation/executor/index.js.map +1 -0
- package/dist/delegation/executor/result-aggregator.d.ts +30 -0
- package/dist/delegation/executor/result-aggregator.d.ts.map +1 -0
- package/dist/delegation/executor/result-aggregator.js +66 -0
- package/dist/delegation/executor/result-aggregator.js.map +1 -0
- package/dist/delegation/executor/stream-parser.d.ts +28 -0
- package/dist/delegation/executor/stream-parser.d.ts.map +1 -0
- package/dist/delegation/executor/stream-parser.js +140 -0
- package/dist/delegation/executor/stream-parser.js.map +1 -0
- package/dist/delegation/executor/types.d.ts +129 -0
- package/dist/delegation/executor/types.d.ts.map +1 -0
- package/dist/delegation/executor/types.js +6 -0
- package/dist/delegation/executor/types.js.map +1 -0
- package/dist/delegation/headless-executor.d.ts +42 -0
- package/dist/delegation/headless-executor.d.ts.map +1 -0
- package/dist/delegation/headless-executor.js +480 -0
- package/dist/delegation/headless-executor.js.map +1 -0
- package/dist/delegation/index.d.ts +11 -0
- package/dist/delegation/index.d.ts.map +1 -0
- package/dist/delegation/index.js +33 -0
- package/dist/delegation/index.js.map +1 -0
- package/dist/delegation/result-formatter.d.ts +56 -0
- package/dist/delegation/result-formatter.d.ts.map +1 -0
- package/dist/delegation/result-formatter.js +341 -0
- package/dist/delegation/result-formatter.js.map +1 -0
- package/dist/delegation/session-manager.d.ts +58 -0
- package/dist/delegation/session-manager.d.ts.map +1 -0
- package/dist/delegation/session-manager.js +153 -0
- package/dist/delegation/session-manager.js.map +1 -0
- package/dist/delegation/settings-parser.d.ts +31 -0
- package/dist/delegation/settings-parser.d.ts.map +1 -0
- package/dist/delegation/settings-parser.js +107 -0
- package/dist/delegation/settings-parser.js.map +1 -0
- package/dist/errors/cleanup-registry.d.ts +64 -0
- package/dist/errors/cleanup-registry.d.ts.map +1 -0
- package/dist/errors/cleanup-registry.js +141 -0
- package/dist/errors/cleanup-registry.js.map +1 -0
- package/dist/errors/error-handler.d.ts +45 -0
- package/dist/errors/error-handler.d.ts.map +1 -0
- package/dist/errors/error-handler.js +150 -0
- package/dist/errors/error-handler.js.map +1 -0
- package/dist/errors/error-types.d.ts +102 -0
- package/dist/errors/error-types.d.ts.map +1 -0
- package/dist/errors/error-types.js +158 -0
- package/dist/errors/error-types.js.map +1 -0
- package/dist/errors/exit-codes.d.ts +49 -0
- package/dist/errors/exit-codes.d.ts.map +1 -0
- package/dist/errors/exit-codes.js +72 -0
- package/dist/errors/exit-codes.js.map +1 -0
- package/dist/errors/index.d.ts +29 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +62 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/glmt/delta-accumulator.d.ts +210 -0
- package/dist/glmt/delta-accumulator.d.ts.map +1 -0
- package/dist/glmt/delta-accumulator.js +351 -0
- package/dist/glmt/delta-accumulator.js.map +1 -0
- package/dist/glmt/glmt-proxy.d.ts +107 -0
- package/dist/glmt/glmt-proxy.d.ts.map +1 -0
- package/dist/glmt/glmt-proxy.js +665 -0
- package/dist/glmt/glmt-proxy.js.map +1 -0
- package/dist/glmt/glmt-transformer.d.ts +46 -0
- package/dist/glmt/glmt-transformer.d.ts.map +1 -0
- package/dist/glmt/glmt-transformer.js +177 -0
- package/dist/glmt/glmt-transformer.js.map +1 -0
- package/dist/glmt/index.d.ts +14 -0
- package/dist/glmt/index.d.ts.map +1 -0
- package/dist/glmt/index.js +41 -0
- package/dist/glmt/index.js.map +1 -0
- package/dist/glmt/locale-enforcer.d.ts +38 -0
- package/dist/glmt/locale-enforcer.d.ts.map +1 -0
- package/dist/glmt/locale-enforcer.js +69 -0
- package/dist/glmt/locale-enforcer.js.map +1 -0
- package/dist/glmt/pipeline/content-transformer.d.ts +39 -0
- package/dist/glmt/pipeline/content-transformer.d.ts.map +1 -0
- package/dist/glmt/pipeline/content-transformer.js +162 -0
- package/dist/glmt/pipeline/content-transformer.js.map +1 -0
- package/dist/glmt/pipeline/index.d.ts +12 -0
- package/dist/glmt/pipeline/index.d.ts.map +1 -0
- package/dist/glmt/pipeline/index.js +20 -0
- package/dist/glmt/pipeline/index.js.map +1 -0
- package/dist/glmt/pipeline/request-transformer.d.ts +31 -0
- package/dist/glmt/pipeline/request-transformer.d.ts.map +1 -0
- package/dist/glmt/pipeline/request-transformer.js +116 -0
- package/dist/glmt/pipeline/request-transformer.js.map +1 -0
- package/dist/glmt/pipeline/response-builder.d.ts +52 -0
- package/dist/glmt/pipeline/response-builder.d.ts.map +1 -0
- package/dist/glmt/pipeline/response-builder.js +205 -0
- package/dist/glmt/pipeline/response-builder.js.map +1 -0
- package/dist/glmt/pipeline/stream-parser.d.ts +59 -0
- package/dist/glmt/pipeline/stream-parser.d.ts.map +1 -0
- package/dist/glmt/pipeline/stream-parser.js +241 -0
- package/dist/glmt/pipeline/stream-parser.js.map +1 -0
- package/dist/glmt/pipeline/tool-call-handler.d.ts +22 -0
- package/dist/glmt/pipeline/tool-call-handler.d.ts.map +1 -0
- package/dist/glmt/pipeline/tool-call-handler.js +87 -0
- package/dist/glmt/pipeline/tool-call-handler.js.map +1 -0
- package/dist/glmt/pipeline/types.d.ts +159 -0
- package/dist/glmt/pipeline/types.d.ts.map +1 -0
- package/dist/glmt/pipeline/types.js +6 -0
- package/dist/glmt/pipeline/types.js.map +1 -0
- package/dist/glmt/reasoning-enforcer.d.ts +52 -0
- package/dist/glmt/reasoning-enforcer.d.ts.map +1 -0
- package/dist/glmt/reasoning-enforcer.js +151 -0
- package/dist/glmt/reasoning-enforcer.js.map +1 -0
- package/dist/glmt/sse-parser.d.ts +47 -0
- package/dist/glmt/sse-parser.d.ts.map +1 -0
- package/dist/glmt/sse-parser.js +93 -0
- package/dist/glmt/sse-parser.js.map +1 -0
- package/dist/management/checks/cliproxy-check.d.ts +37 -0
- package/dist/management/checks/cliproxy-check.d.ts.map +1 -0
- package/dist/management/checks/cliproxy-check.js +187 -0
- package/dist/management/checks/cliproxy-check.js.map +1 -0
- package/dist/management/checks/config-check.d.ts +38 -0
- package/dist/management/checks/config-check.d.ts.map +1 -0
- package/dist/management/checks/config-check.js +215 -0
- package/dist/management/checks/config-check.js.map +1 -0
- package/dist/management/checks/env-check.d.ts +17 -0
- package/dist/management/checks/env-check.d.ts.map +1 -0
- package/dist/management/checks/env-check.js +71 -0
- package/dist/management/checks/env-check.js.map +1 -0
- package/dist/management/checks/image-analysis-check.d.ts +16 -0
- package/dist/management/checks/image-analysis-check.d.ts.map +1 -0
- package/dist/management/checks/image-analysis-check.js +140 -0
- package/dist/management/checks/image-analysis-check.js.map +1 -0
- package/dist/management/checks/index.d.ts +13 -0
- package/dist/management/checks/index.d.ts.map +1 -0
- package/dist/management/checks/index.js +52 -0
- package/dist/management/checks/index.js.map +1 -0
- package/dist/management/checks/oauth-check.d.ts +16 -0
- package/dist/management/checks/oauth-check.d.ts.map +1 -0
- package/dist/management/checks/oauth-check.js +68 -0
- package/dist/management/checks/oauth-check.js.map +1 -0
- package/dist/management/checks/profile-check.d.ts +40 -0
- package/dist/management/checks/profile-check.d.ts.map +1 -0
- package/dist/management/checks/profile-check.js +190 -0
- package/dist/management/checks/profile-check.js.map +1 -0
- package/dist/management/checks/symlink-check.d.ts +30 -0
- package/dist/management/checks/symlink-check.d.ts.map +1 -0
- package/dist/management/checks/symlink-check.js +214 -0
- package/dist/management/checks/symlink-check.js.map +1 -0
- package/dist/management/checks/system-check.d.ts +25 -0
- package/dist/management/checks/system-check.d.ts.map +1 -0
- package/dist/management/checks/system-check.js +135 -0
- package/dist/management/checks/system-check.js.map +1 -0
- package/dist/management/checks/types.d.ts +64 -0
- package/dist/management/checks/types.d.ts.map +1 -0
- package/dist/management/checks/types.js +64 -0
- package/dist/management/checks/types.js.map +1 -0
- package/dist/management/doctor.d.ts +34 -0
- package/dist/management/doctor.d.ts.map +1 -0
- package/dist/management/doctor.js +154 -0
- package/dist/management/doctor.js.map +1 -0
- package/dist/management/environment-diagnostics.d.ts +69 -0
- package/dist/management/environment-diagnostics.d.ts.map +1 -0
- package/dist/management/environment-diagnostics.js +229 -0
- package/dist/management/environment-diagnostics.js.map +1 -0
- package/dist/management/index.d.ts +15 -0
- package/dist/management/index.d.ts.map +1 -0
- package/dist/management/index.js +56 -0
- package/dist/management/index.js.map +1 -0
- package/dist/management/instance-manager.d.ts +57 -0
- package/dist/management/instance-manager.d.ts.map +1 -0
- package/dist/management/instance-manager.js +195 -0
- package/dist/management/instance-manager.js.map +1 -0
- package/dist/management/oauth-port-diagnostics.d.ts +115 -0
- package/dist/management/oauth-port-diagnostics.d.ts.map +1 -0
- package/dist/management/oauth-port-diagnostics.js +291 -0
- package/dist/management/oauth-port-diagnostics.js.map +1 -0
- package/dist/management/recovery-manager.d.ts +56 -0
- package/dist/management/recovery-manager.d.ts.map +1 -0
- package/dist/management/recovery-manager.js +239 -0
- package/dist/management/recovery-manager.js.map +1 -0
- package/dist/management/repair/auto-repair.d.ts +13 -0
- package/dist/management/repair/auto-repair.d.ts.map +1 -0
- package/dist/management/repair/auto-repair.js +186 -0
- package/dist/management/repair/auto-repair.js.map +1 -0
- package/dist/management/repair/index.d.ts +5 -0
- package/dist/management/repair/index.d.ts.map +1 -0
- package/dist/management/repair/index.js +9 -0
- package/dist/management/repair/index.js.map +1 -0
- package/dist/management/shared-manager.d.ts +55 -0
- package/dist/management/shared-manager.d.ts.map +1 -0
- package/dist/management/shared-manager.js +424 -0
- package/dist/management/shared-manager.js.map +1 -0
- package/dist/types/cli.d.ts +50 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +16 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +89 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +26 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/delegation.d.ts +49 -0
- package/dist/types/delegation.d.ts.map +1 -0
- package/dist/types/delegation.js +6 -0
- package/dist/types/delegation.js.map +1 -0
- package/dist/types/glmt.d.ts +95 -0
- package/dist/types/glmt.d.ts.map +1 -0
- package/dist/types/glmt.js +7 -0
- package/dist/types/glmt.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utils.d.ts +107 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +22 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/utils/api-key-validator.d.ts +14 -0
- package/dist/utils/api-key-validator.d.ts.map +1 -0
- package/dist/utils/api-key-validator.js +143 -0
- package/dist/utils/api-key-validator.js.map +1 -0
- package/dist/utils/claude-detector.d.ts +14 -0
- package/dist/utils/claude-detector.d.ts.map +1 -0
- package/dist/utils/claude-detector.js +152 -0
- package/dist/utils/claude-detector.js.map +1 -0
- package/dist/utils/claude-dir-installer.d.ts +46 -0
- package/dist/utils/claude-dir-installer.d.ts.map +1 -0
- package/dist/utils/claude-dir-installer.js +289 -0
- package/dist/utils/claude-dir-installer.js.map +1 -0
- package/dist/utils/claude-spawner.d.ts +54 -0
- package/dist/utils/claude-spawner.d.ts.map +1 -0
- package/dist/utils/claude-spawner.js +118 -0
- package/dist/utils/claude-spawner.js.map +1 -0
- package/dist/utils/claude-symlink-manager.d.ts +75 -0
- package/dist/utils/claude-symlink-manager.d.ts.map +1 -0
- package/dist/utils/claude-symlink-manager.js +393 -0
- package/dist/utils/claude-symlink-manager.js.map +1 -0
- package/dist/utils/config-manager.d.ts +59 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +292 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/delegation-validator.d.ts +44 -0
- package/dist/utils/delegation-validator.d.ts.map +1 -0
- package/dist/utils/delegation-validator.js +182 -0
- package/dist/utils/delegation-validator.js.map +1 -0
- package/dist/utils/error-codes.d.ts +36 -0
- package/dist/utils/error-codes.d.ts.map +1 -0
- package/dist/utils/error-codes.js +63 -0
- package/dist/utils/error-codes.js.map +1 -0
- package/dist/utils/error-manager.d.ts +59 -0
- package/dist/utils/error-manager.d.ts.map +1 -0
- package/dist/utils/error-manager.js +250 -0
- package/dist/utils/error-manager.js.map +1 -0
- package/dist/utils/helpers.d.ts +17 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +111 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/hooks/get-image-analysis-hook-env.d.ts +17 -0
- package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -0
- package/dist/utils/hooks/get-image-analysis-hook-env.js +42 -0
- package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts +17 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.js +71 -0
- package/dist/utils/hooks/image-analyzer-hook-configuration.js.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-installer.d.ts +31 -0
- package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +1 -0
- package/dist/utils/hooks/image-analyzer-hook-installer.js +149 -0
- package/dist/utils/hooks/image-analyzer-hook-installer.js.map +1 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts +24 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +251 -0
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -0
- package/dist/utils/hooks/index.d.ts +11 -0
- package/dist/utils/hooks/index.d.ts.map +1 -0
- package/dist/utils/hooks/index.js +21 -0
- package/dist/utils/hooks/index.js.map +1 -0
- package/dist/utils/image-analysis/hook-installer.d.ts +19 -0
- package/dist/utils/image-analysis/hook-installer.d.ts.map +1 -0
- package/dist/utils/image-analysis/hook-installer.js +112 -0
- package/dist/utils/image-analysis/hook-installer.js.map +1 -0
- package/dist/utils/image-analysis/index.d.ts +7 -0
- package/dist/utils/image-analysis/index.d.ts.map +1 -0
- package/dist/utils/image-analysis/index.js +12 -0
- package/dist/utils/image-analysis/index.js.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +50 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/package-manager-detector.d.ts +11 -0
- package/dist/utils/package-manager-detector.d.ts.map +1 -0
- package/dist/utils/package-manager-detector.js +103 -0
- package/dist/utils/package-manager-detector.js.map +1 -0
- package/dist/utils/platform-commands.d.ts +53 -0
- package/dist/utils/platform-commands.d.ts.map +1 -0
- package/dist/utils/platform-commands.js +189 -0
- package/dist/utils/platform-commands.js.map +1 -0
- package/dist/utils/port-utils.d.ts +55 -0
- package/dist/utils/port-utils.d.ts.map +1 -0
- package/dist/utils/port-utils.js +217 -0
- package/dist/utils/port-utils.js.map +1 -0
- package/dist/utils/progress-indicator.d.ts +53 -0
- package/dist/utils/progress-indicator.d.ts.map +1 -0
- package/dist/utils/progress-indicator.js +104 -0
- package/dist/utils/progress-indicator.js.map +1 -0
- package/dist/utils/prompt.d.ts +55 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +270 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/sensitive-keys.d.ts +35 -0
- package/dist/utils/sensitive-keys.d.ts.map +1 -0
- package/dist/utils/sensitive-keys.js +67 -0
- package/dist/utils/sensitive-keys.js.map +1 -0
- package/dist/utils/shell-completion.d.ts +54 -0
- package/dist/utils/shell-completion.d.ts.map +1 -0
- package/dist/utils/shell-completion.js +260 -0
- package/dist/utils/shell-completion.js.map +1 -0
- package/dist/utils/shell-executor.d.ts +16 -0
- package/dist/utils/shell-executor.d.ts.map +1 -0
- package/dist/utils/shell-executor.js +73 -0
- package/dist/utils/shell-executor.js.map +1 -0
- package/dist/utils/time.d.ts +10 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +27 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/ui/boxes.d.ts +24 -0
- package/dist/utils/ui/boxes.d.ts.map +1 -0
- package/dist/utils/ui/boxes.js +108 -0
- package/dist/utils/ui/boxes.js.map +1 -0
- package/dist/utils/ui/colors.d.ts +25 -0
- package/dist/utils/ui/colors.d.ts.map +1 -0
- package/dist/utils/ui/colors.js +70 -0
- package/dist/utils/ui/colors.js.map +1 -0
- package/dist/utils/ui/index.d.ts +51 -0
- package/dist/utils/ui/index.d.ts.map +1 -0
- package/dist/utils/ui/index.js +96 -0
- package/dist/utils/ui/index.js.map +1 -0
- package/dist/utils/ui/indicators.d.ts +23 -0
- package/dist/utils/ui/indicators.d.ts.map +1 -0
- package/dist/utils/ui/indicators.js +39 -0
- package/dist/utils/ui/indicators.js.map +1 -0
- package/dist/utils/ui/init.d.ts +30 -0
- package/dist/utils/ui/init.d.ts.map +1 -0
- package/dist/utils/ui/init.js +102 -0
- package/dist/utils/ui/init.js.map +1 -0
- package/dist/utils/ui/spinner.d.ts +13 -0
- package/dist/utils/ui/spinner.d.ts.map +1 -0
- package/dist/utils/ui/spinner.js +89 -0
- package/dist/utils/ui/spinner.js.map +1 -0
- package/dist/utils/ui/tables.d.ts +12 -0
- package/dist/utils/ui/tables.d.ts.map +1 -0
- package/dist/utils/ui/tables.js +69 -0
- package/dist/utils/ui/tables.js.map +1 -0
- package/dist/utils/ui/tasks.d.ts +26 -0
- package/dist/utils/ui/tasks.d.ts.map +1 -0
- package/dist/utils/ui/tasks.js +102 -0
- package/dist/utils/ui/tasks.js.map +1 -0
- package/dist/utils/ui/text.d.ts +24 -0
- package/dist/utils/ui/text.d.ts.map +1 -0
- package/dist/utils/ui/text.js +60 -0
- package/dist/utils/ui/text.js.map +1 -0
- package/dist/utils/ui/types.d.ts +36 -0
- package/dist/utils/ui/types.d.ts.map +1 -0
- package/dist/utils/ui/types.js +33 -0
- package/dist/utils/ui/types.js.map +1 -0
- package/dist/utils/ui.d.ts +17 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +57 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/update-checker.d.ts +71 -0
- package/dist/utils/update-checker.d.ts.map +1 -0
- package/dist/utils/update-checker.js +377 -0
- package/dist/utils/update-checker.js.map +1 -0
- package/dist/utils/version.d.ts +8 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +51 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/utils/websearch/gemini-cli.d.ts +36 -0
- package/dist/utils/websearch/gemini-cli.d.ts.map +1 -0
- package/dist/utils/websearch/gemini-cli.js +132 -0
- package/dist/utils/websearch/gemini-cli.js.map +1 -0
- package/dist/utils/websearch/grok-cli.d.ts +26 -0
- package/dist/utils/websearch/grok-cli.d.ts.map +1 -0
- package/dist/utils/websearch/grok-cli.js +81 -0
- package/dist/utils/websearch/grok-cli.js.map +1 -0
- package/dist/utils/websearch/hook-config.d.ts +27 -0
- package/dist/utils/websearch/hook-config.d.ts.map +1 -0
- package/dist/utils/websearch/hook-config.js +280 -0
- package/dist/utils/websearch/hook-config.js.map +1 -0
- package/dist/utils/websearch/hook-env.d.ts +16 -0
- package/dist/utils/websearch/hook-env.d.ts.map +1 -0
- package/dist/utils/websearch/hook-env.js +62 -0
- package/dist/utils/websearch/hook-env.js.map +1 -0
- package/dist/utils/websearch/hook-installer.d.ts +30 -0
- package/dist/utils/websearch/hook-installer.d.ts.map +1 -0
- package/dist/utils/websearch/hook-installer.js +148 -0
- package/dist/utils/websearch/hook-installer.js.map +1 -0
- package/dist/utils/websearch/hook-utils.d.ts +18 -0
- package/dist/utils/websearch/hook-utils.d.ts.map +1 -0
- package/dist/utils/websearch/hook-utils.js +59 -0
- package/dist/utils/websearch/hook-utils.js.map +1 -0
- package/dist/utils/websearch/index.d.ts +17 -0
- package/dist/utils/websearch/index.d.ts.map +1 -0
- package/dist/utils/websearch/index.js +51 -0
- package/dist/utils/websearch/index.js.map +1 -0
- package/dist/utils/websearch/opencode-cli.d.ts +26 -0
- package/dist/utils/websearch/opencode-cli.d.ts.map +1 -0
- package/dist/utils/websearch/opencode-cli.js +81 -0
- package/dist/utils/websearch/opencode-cli.js.map +1 -0
- package/dist/utils/websearch/profile-hook-injector.d.ts +20 -0
- package/dist/utils/websearch/profile-hook-injector.d.ts.map +1 -0
- package/dist/utils/websearch/profile-hook-injector.js +250 -0
- package/dist/utils/websearch/profile-hook-injector.js.map +1 -0
- package/dist/utils/websearch/status.d.ts +36 -0
- package/dist/utils/websearch/status.d.ts.map +1 -0
- package/dist/utils/websearch/status.js +192 -0
- package/dist/utils/websearch/status.js.map +1 -0
- package/dist/utils/websearch/types.d.ts +85 -0
- package/dist/utils/websearch/types.d.ts.map +1 -0
- package/dist/utils/websearch/types.js +10 -0
- package/dist/utils/websearch/types.js.map +1 -0
- package/dist/utils/websearch-manager.d.ts +31 -0
- package/dist/utils/websearch-manager.d.ts.map +1 -0
- package/dist/utils/websearch-manager.js +72 -0
- package/dist/utils/websearch-manager.js.map +1 -0
- package/dist/web-server/data-aggregator.d.ts +7 -0
- package/dist/web-server/data-aggregator.d.ts.map +1 -0
- package/dist/web-server/data-aggregator.js +23 -0
- package/dist/web-server/data-aggregator.js.map +1 -0
- package/dist/web-server/file-watcher.d.ts +15 -0
- package/dist/web-server/file-watcher.d.ts.map +1 -0
- package/dist/web-server/file-watcher.js +93 -0
- package/dist/web-server/file-watcher.js.map +1 -0
- package/dist/web-server/health/cliproxy-checks.d.ts +23 -0
- package/dist/web-server/health/cliproxy-checks.d.ts.map +1 -0
- package/dist/web-server/health/cliproxy-checks.js +171 -0
- package/dist/web-server/health/cliproxy-checks.js.map +1 -0
- package/dist/web-server/health/config-checks.d.ts +20 -0
- package/dist/web-server/health/config-checks.d.ts.map +1 -0
- package/dist/web-server/health/config-checks.js +212 -0
- package/dist/web-server/health/config-checks.js.map +1 -0
- package/dist/web-server/health/environment-checks.d.ts +11 -0
- package/dist/web-server/health/environment-checks.d.ts.map +1 -0
- package/dist/web-server/health/environment-checks.js +40 -0
- package/dist/web-server/health/environment-checks.js.map +1 -0
- package/dist/web-server/health/index.d.ts +13 -0
- package/dist/web-server/health/index.d.ts.map +1 -0
- package/dist/web-server/health/index.js +41 -0
- package/dist/web-server/health/index.js.map +1 -0
- package/dist/web-server/health/oauth-checks.d.ts +11 -0
- package/dist/web-server/health/oauth-checks.d.ts.map +1 -0
- package/dist/web-server/health/oauth-checks.js +34 -0
- package/dist/web-server/health/oauth-checks.js.map +1 -0
- package/dist/web-server/health/profile-checks.d.ts +20 -0
- package/dist/web-server/health/profile-checks.d.ts.map +1 -0
- package/dist/web-server/health/profile-checks.js +184 -0
- package/dist/web-server/health/profile-checks.js.map +1 -0
- package/dist/web-server/health/symlink-checks.d.ts +15 -0
- package/dist/web-server/health/symlink-checks.d.ts.map +1 -0
- package/dist/web-server/health/symlink-checks.js +173 -0
- package/dist/web-server/health/symlink-checks.js.map +1 -0
- package/dist/web-server/health/system-checks.d.ts +19 -0
- package/dist/web-server/health/system-checks.d.ts.map +1 -0
- package/dist/web-server/health/system-checks.js +127 -0
- package/dist/web-server/health/system-checks.js.map +1 -0
- package/dist/web-server/health/types.d.ts +34 -0
- package/dist/web-server/health/types.d.ts.map +1 -0
- package/dist/web-server/health/types.js +8 -0
- package/dist/web-server/health/types.js.map +1 -0
- package/dist/web-server/health/websearch-checks.d.ts +11 -0
- package/dist/web-server/health/websearch-checks.d.ts.map +1 -0
- package/dist/web-server/health/websearch-checks.js +53 -0
- package/dist/web-server/health/websearch-checks.js.map +1 -0
- package/dist/web-server/health-service.d.ts +20 -0
- package/dist/web-server/health-service.d.ts.map +1 -0
- package/dist/web-server/health-service.js +162 -0
- package/dist/web-server/health-service.js.map +1 -0
- package/dist/web-server/index.d.ts +25 -0
- package/dist/web-server/index.d.ts.map +1 -0
- package/dist/web-server/index.js +118 -0
- package/dist/web-server/index.js.map +1 -0
- package/dist/web-server/jsonl-parser.d.ts +68 -0
- package/dist/web-server/jsonl-parser.d.ts.map +1 -0
- package/dist/web-server/jsonl-parser.js +214 -0
- package/dist/web-server/jsonl-parser.js.map +1 -0
- package/dist/web-server/middleware/auth-middleware.d.ts +27 -0
- package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -0
- package/dist/web-server/middleware/auth-middleware.js +116 -0
- package/dist/web-server/middleware/auth-middleware.js.map +1 -0
- package/dist/web-server/model-pricing.d.ts +42 -0
- package/dist/web-server/model-pricing.d.ts.map +1 -0
- package/dist/web-server/model-pricing.js +669 -0
- package/dist/web-server/model-pricing.js.map +1 -0
- package/dist/web-server/overview-routes.d.ts +7 -0
- package/dist/web-server/overview-routes.d.ts.map +1 -0
- package/dist/web-server/overview-routes.js +75 -0
- package/dist/web-server/overview-routes.js.map +1 -0
- package/dist/web-server/routes/account-routes.d.ts +9 -0
- package/dist/web-server/routes/account-routes.d.ts.map +1 -0
- package/dist/web-server/routes/account-routes.js +274 -0
- package/dist/web-server/routes/account-routes.js.map +1 -0
- package/dist/web-server/routes/auth-routes.d.ts +7 -0
- package/dist/web-server/routes/auth-routes.d.ts.map +1 -0
- package/dist/web-server/routes/auth-routes.js +108 -0
- package/dist/web-server/routes/auth-routes.js.map +1 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts +3 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-auth-routes.js +610 -0
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts +6 -0
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes.js +681 -0
- package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -0
- package/dist/web-server/routes/cliproxy-sync-routes.d.ts +6 -0
- package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-sync-routes.js +157 -0
- package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -0
- package/dist/web-server/routes/config-routes.d.ts +6 -0
- package/dist/web-server/routes/config-routes.d.ts.map +1 -0
- package/dist/web-server/routes/config-routes.js +130 -0
- package/dist/web-server/routes/config-routes.js.map +1 -0
- package/dist/web-server/routes/copilot-routes.d.ts +6 -0
- package/dist/web-server/routes/copilot-routes.d.ts.map +1 -0
- package/dist/web-server/routes/copilot-routes.js +195 -0
- package/dist/web-server/routes/copilot-routes.js.map +1 -0
- package/dist/web-server/routes/copilot-settings-routes.d.ts +6 -0
- package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -0
- package/dist/web-server/routes/copilot-settings-routes.js +122 -0
- package/dist/web-server/routes/copilot-settings-routes.js.map +1 -0
- package/dist/web-server/routes/health-routes.d.ts +6 -0
- package/dist/web-server/routes/health-routes.d.ts.map +1 -0
- package/dist/web-server/routes/health-routes.js +40 -0
- package/dist/web-server/routes/health-routes.js.map +1 -0
- package/dist/web-server/routes/index.d.ts +8 -0
- package/dist/web-server/routes/index.d.ts.map +1 -0
- package/dist/web-server/routes/index.js +62 -0
- package/dist/web-server/routes/index.js.map +1 -0
- package/dist/web-server/routes/misc-routes.d.ts +6 -0
- package/dist/web-server/routes/misc-routes.d.ts.map +1 -0
- package/dist/web-server/routes/misc-routes.js +396 -0
- package/dist/web-server/routes/misc-routes.js.map +1 -0
- package/dist/web-server/routes/persist-routes.d.ts +6 -0
- package/dist/web-server/routes/persist-routes.d.ts.map +1 -0
- package/dist/web-server/routes/persist-routes.js +286 -0
- package/dist/web-server/routes/persist-routes.js.map +1 -0
- package/dist/web-server/routes/profile-routes.d.ts +9 -0
- package/dist/web-server/routes/profile-routes.d.ts.map +1 -0
- package/dist/web-server/routes/profile-routes.js +116 -0
- package/dist/web-server/routes/profile-routes.js.map +1 -0
- package/dist/web-server/routes/provider-routes.d.ts +6 -0
- package/dist/web-server/routes/provider-routes.d.ts.map +1 -0
- package/dist/web-server/routes/provider-routes.js +146 -0
- package/dist/web-server/routes/provider-routes.js.map +1 -0
- package/dist/web-server/routes/proxy-routes.d.ts +11 -0
- package/dist/web-server/routes/proxy-routes.d.ts.map +1 -0
- package/dist/web-server/routes/proxy-routes.js +154 -0
- package/dist/web-server/routes/proxy-routes.js.map +1 -0
- package/dist/web-server/routes/route-helpers.d.ts +50 -0
- package/dist/web-server/routes/route-helpers.d.ts.map +1 -0
- package/dist/web-server/routes/route-helpers.js +179 -0
- package/dist/web-server/routes/route-helpers.js.map +1 -0
- package/dist/web-server/routes/settings-routes.d.ts +6 -0
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -0
- package/dist/web-server/routes/settings-routes.js +413 -0
- package/dist/web-server/routes/settings-routes.js.map +1 -0
- package/dist/web-server/routes/variant-routes.d.ts +8 -0
- package/dist/web-server/routes/variant-routes.d.ts.map +1 -0
- package/dist/web-server/routes/variant-routes.js +119 -0
- package/dist/web-server/routes/variant-routes.js.map +1 -0
- package/dist/web-server/routes/websearch-routes.d.ts +6 -0
- package/dist/web-server/routes/websearch-routes.d.ts.map +1 -0
- package/dist/web-server/routes/websearch-routes.js +130 -0
- package/dist/web-server/routes/websearch-routes.js.map +1 -0
- package/dist/web-server/services/index.d.ts +7 -0
- package/dist/web-server/services/index.d.ts.map +1 -0
- package/dist/web-server/services/index.js +21 -0
- package/dist/web-server/services/index.js.map +1 -0
- package/dist/web-server/services/usage-aggregator.d.ts +7 -0
- package/dist/web-server/services/usage-aggregator.d.ts.map +1 -0
- package/dist/web-server/services/usage-aggregator.js +23 -0
- package/dist/web-server/services/usage-aggregator.js.map +1 -0
- package/dist/web-server/shared-routes.d.ts +7 -0
- package/dist/web-server/shared-routes.d.ts.map +1 -0
- package/dist/web-server/shared-routes.js +168 -0
- package/dist/web-server/shared-routes.js.map +1 -0
- package/dist/web-server/shutdown.d.ts +14 -0
- package/dist/web-server/shutdown.d.ts.map +1 -0
- package/dist/web-server/shutdown.js +29 -0
- package/dist/web-server/shutdown.js.map +1 -0
- package/dist/web-server/usage/aggregator.d.ts +54 -0
- package/dist/web-server/usage/aggregator.d.ts.map +1 -0
- package/dist/web-server/usage/aggregator.js +470 -0
- package/dist/web-server/usage/aggregator.js.map +1 -0
- package/dist/web-server/usage/data-aggregator.d.ts +55 -0
- package/dist/web-server/usage/data-aggregator.d.ts.map +1 -0
- package/dist/web-server/usage/data-aggregator.js +391 -0
- package/dist/web-server/usage/data-aggregator.js.map +1 -0
- package/dist/web-server/usage/disk-cache.d.ts +46 -0
- package/dist/web-server/usage/disk-cache.d.ts.map +1 -0
- package/dist/web-server/usage/disk-cache.js +162 -0
- package/dist/web-server/usage/disk-cache.js.map +1 -0
- package/dist/web-server/usage/handlers.d.ts +50 -0
- package/dist/web-server/usage/handlers.d.ts.map +1 -0
- package/dist/web-server/usage/handlers.js +524 -0
- package/dist/web-server/usage/handlers.js.map +1 -0
- package/dist/web-server/usage/index.d.ts +12 -0
- package/dist/web-server/usage/index.d.ts.map +1 -0
- package/dist/web-server/usage/index.js +54 -0
- package/dist/web-server/usage/index.js.map +1 -0
- package/dist/web-server/usage/routes.d.ts +11 -0
- package/dist/web-server/usage/routes.d.ts.map +1 -0
- package/dist/web-server/usage/routes.js +37 -0
- package/dist/web-server/usage/routes.js.map +1 -0
- package/dist/web-server/usage/types.d.ts +119 -0
- package/dist/web-server/usage/types.d.ts.map +1 -0
- package/dist/web-server/usage/types.js +9 -0
- package/dist/web-server/usage/types.js.map +1 -0
- package/dist/web-server/usage-disk-cache.d.ts +7 -0
- package/dist/web-server/usage-disk-cache.d.ts.map +1 -0
- package/dist/web-server/usage-disk-cache.js +23 -0
- package/dist/web-server/usage-disk-cache.js.map +1 -0
- package/dist/web-server/usage-routes.d.ts +7 -0
- package/dist/web-server/usage-routes.d.ts.map +1 -0
- package/dist/web-server/usage-routes.js +14 -0
- package/dist/web-server/usage-routes.js.map +1 -0
- package/dist/web-server/usage-types.d.ts +7 -0
- package/dist/web-server/usage-types.d.ts.map +1 -0
- package/dist/web-server/usage-types.js +23 -0
- package/dist/web-server/usage-types.js.map +1 -0
- package/dist/web-server/websocket.d.ts +15 -0
- package/dist/web-server/websocket.d.ts.map +1 -0
- package/dist/web-server/websocket.js +162 -0
- package/dist/web-server/websocket.js.map +1 -0
- package/lib/ccs +32 -0
- package/lib/ccs.ps1 +39 -0
- package/lib/error-codes.ps1 +56 -0
- package/lib/error-codes.sh +63 -0
- package/lib/hooks/block-websearch.cjs +75 -0
- package/lib/hooks/image-analyzer-transformer.cjs +880 -0
- package/lib/hooks/websearch-transformer.cjs +632 -0
- package/lib/progress-indicator.ps1 +120 -0
- package/lib/progress-indicator.sh +117 -0
- package/lib/prompt.ps1 +109 -0
- package/lib/prompt.sh +99 -0
- package/lib/prompts/image-analysis-default.txt +12 -0
- package/lib/prompts/image-analysis-document.txt +13 -0
- package/lib/prompts/image-analysis-screenshot.txt +13 -0
- package/package.json +133 -0
- package/scripts/add-shebang.js +39 -0
- package/scripts/bump-version.sh +153 -0
- package/scripts/check-executables.js +18 -0
- package/scripts/clean-dist.js +46 -0
- package/scripts/code-reviewer.ts +217 -0
- package/scripts/completion/README.md +308 -0
- package/scripts/completion/ccs.bash +176 -0
- package/scripts/completion/ccs.fish +248 -0
- package/scripts/completion/ccs.ps1 +394 -0
- package/scripts/completion/ccs.zsh +308 -0
- package/scripts/dev-install.sh +108 -0
- package/scripts/dev-release.sh +123 -0
- package/scripts/dev-symlink.sh +115 -0
- package/scripts/get-version.sh +16 -0
- package/scripts/postinstall.js +358 -0
- package/scripts/postuninstall.js +48 -0
- package/scripts/pre-release.sh +39 -0
- package/scripts/preinstall.js +59 -0
- package/scripts/send-discord-release.cjs +249 -0
- package/scripts/verify-bundle.js +56 -0
- package/scripts/worker.js +26 -0
- package/scripts/wrangler.toml +15 -0
|
@@ -0,0 +1,1025 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLIProxy Executor - Spawn/Kill Pattern for CLIProxyAPI
|
|
4
|
+
*
|
|
5
|
+
* Mirrors GLMT architecture:
|
|
6
|
+
* 1. Ensure binary exists (Phase 1)
|
|
7
|
+
* 2. Generate config for provider
|
|
8
|
+
* 3. Spawn CLIProxyAPI binary
|
|
9
|
+
* 4. Poll port for readiness (no stdout signal)
|
|
10
|
+
* 5. Execute Claude CLI with proxied environment
|
|
11
|
+
* 6. Kill proxy on Claude exit
|
|
12
|
+
*
|
|
13
|
+
* Key difference from GLMT: Uses TCP port polling instead of PROXY_READY signal
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.findAvailablePort = exports.isPortAvailable = exports.execClaudeWithCLIProxy = void 0;
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
const net = __importStar(require("net"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const progress_indicator_1 = require("../utils/progress-indicator");
|
|
44
|
+
const ui_1 = require("../utils/ui");
|
|
45
|
+
const shell_executor_1 = require("../utils/shell-executor");
|
|
46
|
+
const binary_manager_1 = require("./binary-manager");
|
|
47
|
+
const config_generator_1 = require("./config-generator");
|
|
48
|
+
const remote_proxy_client_1 = require("./remote-proxy-client");
|
|
49
|
+
const auth_handler_1 = require("./auth-handler");
|
|
50
|
+
const types_1 = require("./types");
|
|
51
|
+
const platform_detector_1 = require("./platform-detector");
|
|
52
|
+
const model_config_1 = require("./model-config");
|
|
53
|
+
const proxy_config_resolver_1 = require("./proxy-config-resolver");
|
|
54
|
+
const websearch_manager_1 = require("../utils/websearch-manager");
|
|
55
|
+
const get_image_analysis_hook_env_1 = require("../utils/hooks/get-image-analysis-hook-env");
|
|
56
|
+
const model_catalog_1 = require("./model-catalog");
|
|
57
|
+
const codex_reasoning_proxy_1 = require("./codex-reasoning-proxy");
|
|
58
|
+
const tool_sanitization_proxy_1 = require("./tool-sanitization-proxy");
|
|
59
|
+
const account_manager_1 = require("./account-manager");
|
|
60
|
+
const platform_commands_1 = require("../utils/platform-commands");
|
|
61
|
+
const websearch_manager_2 = require("../utils/websearch-manager");
|
|
62
|
+
const session_tracker_1 = require("./session-tracker");
|
|
63
|
+
const proxy_detector_1 = require("./proxy-detector");
|
|
64
|
+
const startup_lock_1 = require("./startup-lock");
|
|
65
|
+
const unified_config_loader_1 = require("../config/unified-config-loader");
|
|
66
|
+
const quota_manager_1 = require("./quota-manager");
|
|
67
|
+
const https_tunnel_proxy_1 = require("./https-tunnel-proxy");
|
|
68
|
+
/** Default executor configuration */
|
|
69
|
+
const DEFAULT_CONFIG = {
|
|
70
|
+
port: config_generator_1.CLIPROXY_DEFAULT_PORT,
|
|
71
|
+
timeout: 5000,
|
|
72
|
+
verbose: false,
|
|
73
|
+
pollInterval: 100,
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Wait for TCP port to become available
|
|
77
|
+
* Uses polling since CLIProxyAPI doesn't emit PROXY_READY signal
|
|
78
|
+
*/
|
|
79
|
+
async function waitForProxyReady(port, timeout = 5000, pollInterval = 100) {
|
|
80
|
+
const start = Date.now();
|
|
81
|
+
while (Date.now() - start < timeout) {
|
|
82
|
+
try {
|
|
83
|
+
await new Promise((resolve, reject) => {
|
|
84
|
+
const socket = net.createConnection({ port, host: '127.0.0.1' }, () => {
|
|
85
|
+
socket.destroy();
|
|
86
|
+
resolve();
|
|
87
|
+
});
|
|
88
|
+
socket.on('error', (err) => {
|
|
89
|
+
socket.destroy();
|
|
90
|
+
reject(err);
|
|
91
|
+
});
|
|
92
|
+
// Individual connection timeout
|
|
93
|
+
socket.setTimeout(1000, () => {
|
|
94
|
+
socket.destroy();
|
|
95
|
+
reject(new Error('Connection timeout'));
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
return; // Connection successful - proxy is ready
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Connection failed, wait and retry
|
|
102
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
throw new Error(`CLIProxy not ready after ${timeout}ms on port ${port}`);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Execute Claude CLI with CLIProxy (main entry point)
|
|
109
|
+
*
|
|
110
|
+
* @param claudeCli Path to Claude CLI executable
|
|
111
|
+
* @param provider CLIProxy provider (gemini, codex, agy, qwen)
|
|
112
|
+
* @param args Arguments to pass to Claude CLI
|
|
113
|
+
* @param config Optional executor configuration
|
|
114
|
+
*/
|
|
115
|
+
async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
|
|
116
|
+
// Filter out undefined values to prevent overwriting defaults
|
|
117
|
+
const filteredConfig = Object.fromEntries(Object.entries(config).filter(([, v]) => v !== undefined));
|
|
118
|
+
const cfg = { ...DEFAULT_CONFIG, ...filteredConfig };
|
|
119
|
+
const verbose = cfg.verbose || args.includes('--verbose') || args.includes('-v');
|
|
120
|
+
const log = (msg) => {
|
|
121
|
+
if (verbose) {
|
|
122
|
+
console.error(`[cliproxy] ${msg}`);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
// 0. Resolve proxy configuration (CLI > ENV > config.yaml > defaults)
|
|
126
|
+
// This filters proxy flags from args and returns resolved config
|
|
127
|
+
const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
128
|
+
// 0a. Runtime backend/provider validation - block kiro/ghcp if backend=original
|
|
129
|
+
const backend = unifiedConfig.cliproxy?.backend ?? platform_detector_1.DEFAULT_BACKEND;
|
|
130
|
+
if (backend === 'original' && types_1.PLUS_ONLY_PROVIDERS.includes(provider)) {
|
|
131
|
+
console.error('');
|
|
132
|
+
console.error((0, ui_1.fail)(`${provider} requires CLIProxyAPIPlus backend`));
|
|
133
|
+
console.error('');
|
|
134
|
+
console.error('To use this provider, either:');
|
|
135
|
+
console.error(' 1. Set `cliproxy.backend: plus` in ~/.ccs/config.yaml');
|
|
136
|
+
console.error(' 2. Use --backend=plus flag: ccs ' + provider + ' --backend=plus');
|
|
137
|
+
console.error('');
|
|
138
|
+
throw new Error(`Provider ${provider} requires Plus backend`);
|
|
139
|
+
}
|
|
140
|
+
const cliproxyServerConfig = unifiedConfig.cliproxy_server;
|
|
141
|
+
const { config: proxyConfig, remainingArgs: argsWithoutProxy } = (0, proxy_config_resolver_1.resolveProxyConfig)(args, {
|
|
142
|
+
remote: cliproxyServerConfig?.remote
|
|
143
|
+
? {
|
|
144
|
+
enabled: cliproxyServerConfig.remote.enabled,
|
|
145
|
+
host: cliproxyServerConfig.remote.host,
|
|
146
|
+
port: cliproxyServerConfig.remote.port,
|
|
147
|
+
protocol: cliproxyServerConfig.remote.protocol,
|
|
148
|
+
auth_token: cliproxyServerConfig.remote.auth_token,
|
|
149
|
+
timeout: cliproxyServerConfig.remote.timeout,
|
|
150
|
+
}
|
|
151
|
+
: undefined,
|
|
152
|
+
local: cliproxyServerConfig?.local
|
|
153
|
+
? {
|
|
154
|
+
port: cliproxyServerConfig.local.port,
|
|
155
|
+
auto_start: cliproxyServerConfig.local.auto_start,
|
|
156
|
+
}
|
|
157
|
+
: undefined,
|
|
158
|
+
});
|
|
159
|
+
// Use resolved port from proxy config (overrides ExecutorConfig)
|
|
160
|
+
// Priority: CLI flags > Variant port (cfg.port) > config.yaml > default
|
|
161
|
+
// cfg.port is set if variant has dedicated port; proxyConfig.port comes from CLI/ENV/config.yaml
|
|
162
|
+
if (cfg.port && cfg.port !== config_generator_1.CLIPROXY_DEFAULT_PORT) {
|
|
163
|
+
// Variant port already set via config param - keep it (highest priority after CLI flags)
|
|
164
|
+
// CLI flags would have been parsed in resolveProxyConfig and set proxyConfig.port
|
|
165
|
+
// So if proxyConfig.port differs from default AND cfg.port differs, CLI wins
|
|
166
|
+
if (proxyConfig.port !== config_generator_1.CLIPROXY_DEFAULT_PORT) {
|
|
167
|
+
cfg.port = proxyConfig.port; // CLI/ENV override variant port
|
|
168
|
+
}
|
|
169
|
+
// else: keep cfg.port (variant port)
|
|
170
|
+
}
|
|
171
|
+
else if (proxyConfig.port !== config_generator_1.CLIPROXY_DEFAULT_PORT) {
|
|
172
|
+
cfg.port = proxyConfig.port;
|
|
173
|
+
}
|
|
174
|
+
// Final port validation - ensure valid port after all resolution
|
|
175
|
+
cfg.port = (0, config_generator_1.validatePort)(cfg.port);
|
|
176
|
+
log(`Proxy mode: ${proxyConfig.mode}`);
|
|
177
|
+
if (proxyConfig.mode === 'remote') {
|
|
178
|
+
log(`Remote host: ${proxyConfig.host}:${proxyConfig.port} (${proxyConfig.protocol})`);
|
|
179
|
+
}
|
|
180
|
+
// Note: proxyConfig is available for Phase 4 (remote mode integration)
|
|
181
|
+
// Ensure MCP web-search is configured for third-party profiles
|
|
182
|
+
// WebSearch is a server-side tool executed by Anthropic's API
|
|
183
|
+
// Third-party providers don't have access, so we use MCP fallback
|
|
184
|
+
(0, websearch_manager_2.ensureMcpWebSearch)();
|
|
185
|
+
// Install WebSearch hook for Gemini CLI + MCP fallback
|
|
186
|
+
// Hook intercepts WebSearch, tries Gemini CLI first, falls back to MCP
|
|
187
|
+
(0, websearch_manager_2.installWebSearchHook)();
|
|
188
|
+
// Display WebSearch status (single line, equilibrium UX)
|
|
189
|
+
(0, websearch_manager_2.displayWebSearchStatus)();
|
|
190
|
+
// Validate provider
|
|
191
|
+
const providerConfig = (0, config_generator_1.getProviderConfig)(provider);
|
|
192
|
+
log(`Provider: ${providerConfig.displayName}`);
|
|
193
|
+
// Check remote proxy if configured (before binary download)
|
|
194
|
+
let useRemoteProxy = false;
|
|
195
|
+
if (proxyConfig.mode === 'remote' && proxyConfig.host) {
|
|
196
|
+
const status = await (0, remote_proxy_client_1.checkRemoteProxy)({
|
|
197
|
+
host: proxyConfig.host,
|
|
198
|
+
port: proxyConfig.port,
|
|
199
|
+
protocol: proxyConfig.protocol,
|
|
200
|
+
authToken: proxyConfig.authToken,
|
|
201
|
+
timeout: proxyConfig.timeout ?? 2000,
|
|
202
|
+
allowSelfSigned: proxyConfig.allowSelfSigned ?? false,
|
|
203
|
+
});
|
|
204
|
+
if (status.reachable) {
|
|
205
|
+
useRemoteProxy = true;
|
|
206
|
+
console.log((0, ui_1.ok)(`Connected to remote proxy at ${proxyConfig.host}:${proxyConfig.port} (${status.latencyMs}ms)`));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
console.error((0, ui_1.warn)(`Remote proxy unreachable: ${status.error}`));
|
|
210
|
+
if (proxyConfig.remoteOnly) {
|
|
211
|
+
throw new Error('Remote proxy unreachable and --remote-only specified');
|
|
212
|
+
}
|
|
213
|
+
if (proxyConfig.fallbackEnabled) {
|
|
214
|
+
if (proxyConfig.autoStartLocal) {
|
|
215
|
+
console.log((0, ui_1.info)('Falling back to local proxy...'));
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
// Prompt user for fallback (only in TTY)
|
|
219
|
+
if (process.stdin.isTTY) {
|
|
220
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
221
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
222
|
+
const answer = await new Promise((resolve) => {
|
|
223
|
+
rl.question('Start local proxy instead? [Y/n] ', resolve);
|
|
224
|
+
});
|
|
225
|
+
rl.close();
|
|
226
|
+
if (answer.toLowerCase() === 'n') {
|
|
227
|
+
throw new Error('Remote proxy unreachable and user declined fallback');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
console.log((0, ui_1.info)('Starting local proxy...'));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
throw new Error('Remote proxy unreachable and fallback disabled');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Variables for local proxy mode
|
|
239
|
+
let binaryPath;
|
|
240
|
+
let sessionId;
|
|
241
|
+
// 1. Ensure binary exists (downloads if needed) - SKIP for remote mode
|
|
242
|
+
if (!useRemoteProxy) {
|
|
243
|
+
const spinner = new progress_indicator_1.ProgressIndicator('Preparing CLIProxy');
|
|
244
|
+
spinner.start();
|
|
245
|
+
try {
|
|
246
|
+
binaryPath = await (0, binary_manager_1.ensureCLIProxyBinary)(verbose);
|
|
247
|
+
spinner.succeed('CLIProxy binary ready');
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
spinner.fail('Failed to prepare CLIProxy');
|
|
251
|
+
const err = error;
|
|
252
|
+
// Check if network offline (DNS, connection, or timeout failure)
|
|
253
|
+
const networkErrors = [
|
|
254
|
+
'getaddrinfo',
|
|
255
|
+
'ENOTFOUND',
|
|
256
|
+
'ETIMEDOUT',
|
|
257
|
+
'ECONNREFUSED',
|
|
258
|
+
'ENETUNREACH',
|
|
259
|
+
'EAI_AGAIN',
|
|
260
|
+
];
|
|
261
|
+
const isNetworkError = networkErrors.some((errCode) => err.message.includes(errCode));
|
|
262
|
+
if (isNetworkError) {
|
|
263
|
+
console.error('');
|
|
264
|
+
console.error((0, ui_1.fail)('No network connection detected'));
|
|
265
|
+
console.error('');
|
|
266
|
+
console.error('CLIProxy binary download requires internet access.');
|
|
267
|
+
console.error('Please check your network connection and try again.');
|
|
268
|
+
console.error('');
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// 2. Handle special flags (use argsWithoutProxy - proxy flags already stripped)
|
|
275
|
+
const forceAuth = argsWithoutProxy.includes('--auth');
|
|
276
|
+
const pasteCallback = argsWithoutProxy.includes('--paste-callback');
|
|
277
|
+
const forceHeadless = argsWithoutProxy.includes('--headless');
|
|
278
|
+
const forceLogout = argsWithoutProxy.includes('--logout');
|
|
279
|
+
const forceConfig = argsWithoutProxy.includes('--config');
|
|
280
|
+
const addAccount = argsWithoutProxy.includes('--add');
|
|
281
|
+
const showAccounts = argsWithoutProxy.includes('--accounts');
|
|
282
|
+
// Kiro-specific: --import to import token from Kiro IDE directly
|
|
283
|
+
const forceImport = argsWithoutProxy.includes('--import');
|
|
284
|
+
// Kiro-specific: browser mode for OAuth
|
|
285
|
+
// Default to normal browser (noIncognito=true) for reliability - incognito often fails on Linux
|
|
286
|
+
// --incognito flag opts into incognito mode, --no-incognito is legacy (now default)
|
|
287
|
+
const incognitoFlag = argsWithoutProxy.includes('--incognito');
|
|
288
|
+
const noIncognitoFlag = argsWithoutProxy.includes('--no-incognito');
|
|
289
|
+
// Config setting (defaults to true = normal browser)
|
|
290
|
+
const kiroNoIncognitoConfig = provider === 'kiro' ? (unifiedConfig.cliproxy?.kiro_no_incognito ?? true) : false;
|
|
291
|
+
// --incognito flag overrides everything to use incognito
|
|
292
|
+
const noIncognito = incognitoFlag ? false : noIncognitoFlag || kiroNoIncognitoConfig;
|
|
293
|
+
// Parse --use <account> flag
|
|
294
|
+
let useAccount;
|
|
295
|
+
const useIdx = argsWithoutProxy.indexOf('--use');
|
|
296
|
+
if (useIdx !== -1 &&
|
|
297
|
+
argsWithoutProxy[useIdx + 1] &&
|
|
298
|
+
!argsWithoutProxy[useIdx + 1].startsWith('-')) {
|
|
299
|
+
useAccount = argsWithoutProxy[useIdx + 1];
|
|
300
|
+
}
|
|
301
|
+
// Parse --nickname <name> flag
|
|
302
|
+
let setNickname;
|
|
303
|
+
const nicknameIdx = argsWithoutProxy.indexOf('--nickname');
|
|
304
|
+
if (nicknameIdx !== -1 &&
|
|
305
|
+
argsWithoutProxy[nicknameIdx + 1] &&
|
|
306
|
+
!argsWithoutProxy[nicknameIdx + 1].startsWith('-')) {
|
|
307
|
+
setNickname = argsWithoutProxy[nicknameIdx + 1];
|
|
308
|
+
}
|
|
309
|
+
// Parse --thinking <value> flag for thinking budget control
|
|
310
|
+
// Supports: level names (low, medium, high, xhigh, auto), numeric budget, or 'off'/'none'
|
|
311
|
+
// Accepts both --thinking=value and --thinking value formats
|
|
312
|
+
let thinkingOverride;
|
|
313
|
+
// Check for --thinking=value format first
|
|
314
|
+
const thinkingEqArg = argsWithoutProxy.find((arg) => arg.startsWith('--thinking='));
|
|
315
|
+
if (thinkingEqArg) {
|
|
316
|
+
const val = thinkingEqArg.substring('--thinking='.length);
|
|
317
|
+
// Handle empty value after equals (--thinking=)
|
|
318
|
+
if (!val || val.trim() === '') {
|
|
319
|
+
console.error((0, ui_1.fail)('--thinking requires a value'));
|
|
320
|
+
console.error(' Examples: --thinking=low, --thinking=8192, --thinking=off');
|
|
321
|
+
console.error(' Levels: minimal, low, medium, high, xhigh, auto');
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
// Parse as number if numeric, otherwise keep as string (level name)
|
|
325
|
+
const numVal = parseInt(val, 10);
|
|
326
|
+
thinkingOverride = !isNaN(numVal) ? numVal : val;
|
|
327
|
+
// W2: Warn if multiple --thinking flags found (check both formats)
|
|
328
|
+
const allThinkingFlags = argsWithoutProxy.filter((arg) => arg === '--thinking' || arg.startsWith('--thinking='));
|
|
329
|
+
if (allThinkingFlags.length > 1) {
|
|
330
|
+
console.warn(`[!] Multiple --thinking flags detected. Using first occurrence: ${thinkingEqArg}`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
// Fall back to --thinking value format
|
|
335
|
+
const thinkingIdx = argsWithoutProxy.indexOf('--thinking');
|
|
336
|
+
if (thinkingIdx !== -1) {
|
|
337
|
+
const nextArg = argsWithoutProxy[thinkingIdx + 1];
|
|
338
|
+
// U1: Check if --thinking has a value (not missing or another flag)
|
|
339
|
+
if (!nextArg || nextArg.startsWith('-')) {
|
|
340
|
+
console.error((0, ui_1.fail)('--thinking requires a value'));
|
|
341
|
+
console.error(' Examples: --thinking low, --thinking 8192, --thinking off');
|
|
342
|
+
console.error(' Levels: minimal, low, medium, high, xhigh, auto');
|
|
343
|
+
process.exit(1);
|
|
344
|
+
}
|
|
345
|
+
const val = nextArg;
|
|
346
|
+
// Parse as number if numeric, otherwise keep as string (level name)
|
|
347
|
+
const numVal = parseInt(val, 10);
|
|
348
|
+
thinkingOverride = !isNaN(numVal) ? numVal : val;
|
|
349
|
+
// W2: Warn if multiple --thinking flags found (check both formats)
|
|
350
|
+
const allThinkingFlags = argsWithoutProxy.filter((arg) => arg === '--thinking' || arg.startsWith('--thinking='));
|
|
351
|
+
if (allThinkingFlags.length > 1) {
|
|
352
|
+
console.warn(`[!] Multiple --thinking flags detected. Using first occurrence: --thinking ${val}`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// Handle --accounts: list accounts and exit
|
|
357
|
+
if (showAccounts) {
|
|
358
|
+
const accounts = (0, account_manager_1.getProviderAccounts)(provider);
|
|
359
|
+
if (accounts.length === 0) {
|
|
360
|
+
console.log((0, ui_1.info)(`No accounts registered for ${providerConfig.displayName}`));
|
|
361
|
+
console.log(` Run "ccs ${provider} --auth" to add an account`);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
console.log(`\n${providerConfig.displayName} Accounts:\n`);
|
|
365
|
+
for (const acct of accounts) {
|
|
366
|
+
const defaultMark = acct.isDefault ? ' (default)' : '';
|
|
367
|
+
const nickname = acct.nickname ? `[${acct.nickname}]` : '';
|
|
368
|
+
console.log(` ${nickname.padEnd(12)} ${acct.email || acct.id}${defaultMark}`);
|
|
369
|
+
}
|
|
370
|
+
console.log(`\n Use "ccs ${provider} --use <nickname>" to switch accounts`);
|
|
371
|
+
}
|
|
372
|
+
process.exit(0);
|
|
373
|
+
}
|
|
374
|
+
// Handle --use: switch to specified account
|
|
375
|
+
if (useAccount) {
|
|
376
|
+
const account = (0, account_manager_1.findAccountByQuery)(provider, useAccount);
|
|
377
|
+
if (!account) {
|
|
378
|
+
console.error((0, ui_1.fail)(`Account not found: "${useAccount}"`));
|
|
379
|
+
const accounts = (0, account_manager_1.getProviderAccounts)(provider);
|
|
380
|
+
if (accounts.length > 0) {
|
|
381
|
+
console.error(` Available accounts:`);
|
|
382
|
+
for (const acct of accounts) {
|
|
383
|
+
console.error(` - ${acct.nickname || acct.id} (${acct.email || 'no email'})`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
process.exit(1);
|
|
387
|
+
}
|
|
388
|
+
// Set as default for this and future sessions
|
|
389
|
+
(0, account_manager_1.setDefaultAccount)(provider, account.id);
|
|
390
|
+
(0, account_manager_1.touchAccount)(provider, account.id);
|
|
391
|
+
console.log((0, ui_1.ok)(`Switched to account: ${account.nickname || account.email || account.id}`));
|
|
392
|
+
}
|
|
393
|
+
// Handle --nickname: rename account and exit (unless used with --auth --add)
|
|
394
|
+
if (setNickname && !addAccount) {
|
|
395
|
+
const defaultAccount = (0, account_manager_1.getDefaultAccount)(provider);
|
|
396
|
+
if (!defaultAccount) {
|
|
397
|
+
console.error((0, ui_1.fail)(`No account found for ${providerConfig.displayName}`));
|
|
398
|
+
console.error(` Run "ccs ${provider} --auth" to add an account first`);
|
|
399
|
+
process.exit(1);
|
|
400
|
+
}
|
|
401
|
+
try {
|
|
402
|
+
const success = (0, account_manager_1.renameAccount)(provider, defaultAccount.id, setNickname);
|
|
403
|
+
if (success) {
|
|
404
|
+
console.log((0, ui_1.ok)(`Renamed account to: ${setNickname}`));
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
console.error((0, ui_1.fail)('Failed to rename account'));
|
|
408
|
+
process.exit(1);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
catch (err) {
|
|
412
|
+
console.error((0, ui_1.fail)(err instanceof Error ? err.message : 'Failed to rename account'));
|
|
413
|
+
process.exit(1);
|
|
414
|
+
}
|
|
415
|
+
process.exit(0);
|
|
416
|
+
}
|
|
417
|
+
// Handle --config: configure model selection and exit
|
|
418
|
+
// Pass customSettingsPath for CLIProxy variants to save to correct file
|
|
419
|
+
if (forceConfig && (0, model_catalog_1.supportsModelConfig)(provider)) {
|
|
420
|
+
await (0, model_config_1.configureProviderModel)(provider, true, cfg.customSettingsPath);
|
|
421
|
+
process.exit(0);
|
|
422
|
+
}
|
|
423
|
+
// Handle --logout: clear auth and exit
|
|
424
|
+
if (forceLogout) {
|
|
425
|
+
const { clearAuth } = await Promise.resolve().then(() => __importStar(require('./auth-handler')));
|
|
426
|
+
if (clearAuth(provider)) {
|
|
427
|
+
console.log((0, ui_1.ok)(`Logged out from ${providerConfig.displayName}`));
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
console.log((0, ui_1.info)(`No authentication found for ${providerConfig.displayName}`));
|
|
431
|
+
}
|
|
432
|
+
process.exit(0);
|
|
433
|
+
}
|
|
434
|
+
// Handle --import: import token from Kiro IDE directly (Kiro only)
|
|
435
|
+
if (forceImport) {
|
|
436
|
+
if (provider !== 'kiro') {
|
|
437
|
+
console.error((0, ui_1.fail)('--import is only available for Kiro'));
|
|
438
|
+
console.error(` Run "ccs ${provider} --auth" to authenticate`);
|
|
439
|
+
process.exit(1);
|
|
440
|
+
}
|
|
441
|
+
// Validate flag conflicts
|
|
442
|
+
if (forceAuth) {
|
|
443
|
+
console.error((0, ui_1.fail)('Cannot use --import with --auth'));
|
|
444
|
+
console.error(' --import: Import existing token from Kiro IDE');
|
|
445
|
+
console.error(' --auth: Trigger new OAuth flow in browser');
|
|
446
|
+
process.exit(1);
|
|
447
|
+
}
|
|
448
|
+
if (forceLogout) {
|
|
449
|
+
console.error((0, ui_1.fail)('Cannot use --import with --logout'));
|
|
450
|
+
process.exit(1);
|
|
451
|
+
}
|
|
452
|
+
const { triggerOAuth } = await Promise.resolve().then(() => __importStar(require('./auth-handler')));
|
|
453
|
+
const authSuccess = await triggerOAuth(provider, {
|
|
454
|
+
verbose,
|
|
455
|
+
import: true,
|
|
456
|
+
...(setNickname ? { nickname: setNickname } : {}),
|
|
457
|
+
});
|
|
458
|
+
if (!authSuccess) {
|
|
459
|
+
console.error((0, ui_1.fail)('Failed to import Kiro token from IDE'));
|
|
460
|
+
console.error(' Make sure you are logged into Kiro IDE first');
|
|
461
|
+
process.exit(1);
|
|
462
|
+
}
|
|
463
|
+
process.exit(0);
|
|
464
|
+
}
|
|
465
|
+
// 3. Ensure OAuth completed (if provider requires it)
|
|
466
|
+
// Skip local OAuth check when using remote proxy with auth token
|
|
467
|
+
// The remote proxy has its own OAuth sessions and handles authentication
|
|
468
|
+
// Note: Trim authToken to reject whitespace-only values
|
|
469
|
+
const remoteAuthToken = proxyConfig.authToken?.trim();
|
|
470
|
+
const skipLocalAuth = useRemoteProxy && !!remoteAuthToken;
|
|
471
|
+
if (skipLocalAuth) {
|
|
472
|
+
log(`Using remote proxy authentication (skipping local OAuth)`);
|
|
473
|
+
}
|
|
474
|
+
if (providerConfig.requiresOAuth && !skipLocalAuth) {
|
|
475
|
+
log(`Checking authentication for ${provider}`);
|
|
476
|
+
if (forceAuth || !(0, auth_handler_1.isAuthenticated)(provider)) {
|
|
477
|
+
// Pass headless only if explicitly set; otherwise let auth-handler auto-detect
|
|
478
|
+
const { triggerOAuth } = await Promise.resolve().then(() => __importStar(require('./auth-handler')));
|
|
479
|
+
const authSuccess = await triggerOAuth(provider, {
|
|
480
|
+
verbose,
|
|
481
|
+
add: addAccount,
|
|
482
|
+
...(forceHeadless ? { headless: true } : {}),
|
|
483
|
+
...(setNickname ? { nickname: setNickname } : {}),
|
|
484
|
+
...(noIncognito ? { noIncognito: true } : {}),
|
|
485
|
+
...(pasteCallback ? { pasteCallback: true } : {}),
|
|
486
|
+
});
|
|
487
|
+
if (!authSuccess) {
|
|
488
|
+
throw new Error(`Authentication required for ${providerConfig.displayName}`);
|
|
489
|
+
}
|
|
490
|
+
// If --auth was explicitly passed, exit after auth (don't start Claude)
|
|
491
|
+
if (forceAuth) {
|
|
492
|
+
process.exit(0);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
log(`${provider} already authenticated`);
|
|
497
|
+
}
|
|
498
|
+
// 3a. Proactive token refresh - prevent UND_ERR_SOCKET from expired tokens
|
|
499
|
+
// CLIProxyAPI may fail mid-request if token expires during use
|
|
500
|
+
const { ensureTokenValid } = await Promise.resolve().then(() => __importStar(require('./auth/token-manager')));
|
|
501
|
+
const tokenResult = await ensureTokenValid(provider, verbose);
|
|
502
|
+
if (!tokenResult.valid) {
|
|
503
|
+
// Token expired and refresh failed - trigger re-auth
|
|
504
|
+
console.error((0, ui_1.warn)('OAuth token expired and refresh failed'));
|
|
505
|
+
if (tokenResult.error) {
|
|
506
|
+
console.error(` ${tokenResult.error}`);
|
|
507
|
+
}
|
|
508
|
+
console.error(` Run "ccs ${provider} --auth" to re-authenticate`);
|
|
509
|
+
process.exit(1);
|
|
510
|
+
}
|
|
511
|
+
if (tokenResult.refreshed) {
|
|
512
|
+
log('Token was refreshed proactively');
|
|
513
|
+
}
|
|
514
|
+
// 3a-1. Update lastUsedAt for the account being used
|
|
515
|
+
// This ensures dashboard shows accurate "Last used" timestamps
|
|
516
|
+
const usedAccount = (0, account_manager_1.getDefaultAccount)(provider);
|
|
517
|
+
if (usedAccount) {
|
|
518
|
+
(0, account_manager_1.touchAccount)(provider, usedAccount.id);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
// 3b. Preflight quota check - auto-switch to account with quota before launch
|
|
522
|
+
// Uses quota-manager for caching, tier priority, and cooldown support
|
|
523
|
+
// Skip for remote proxy - quota is managed on the remote server
|
|
524
|
+
if (provider === 'agy' && !skipLocalAuth) {
|
|
525
|
+
const preflight = await (0, quota_manager_1.preflightCheck)(provider);
|
|
526
|
+
if (!preflight.proceed) {
|
|
527
|
+
console.error((0, ui_1.fail)(`Cannot start session: ${preflight.reason}`));
|
|
528
|
+
process.exit(1);
|
|
529
|
+
}
|
|
530
|
+
if (preflight.switchedFrom) {
|
|
531
|
+
console.log((0, ui_1.info)(`Auto-switched to ${preflight.accountId}`));
|
|
532
|
+
console.log(` Reason: ${preflight.reason}`);
|
|
533
|
+
if (preflight.quotaPercent !== undefined && preflight.quotaPercent !== null) {
|
|
534
|
+
console.log(` New account quota: ${preflight.quotaPercent.toFixed(1)}%`);
|
|
535
|
+
}
|
|
536
|
+
else {
|
|
537
|
+
console.log(` New account quota: N/A (fetch unavailable)`);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
// 4. First-run model configuration (interactive)
|
|
542
|
+
// For supported providers, prompt user to select model on first run
|
|
543
|
+
// Pass customSettingsPath for CLIProxy variants
|
|
544
|
+
// Skip for remote proxy - model is configured on the remote server
|
|
545
|
+
if ((0, model_catalog_1.supportsModelConfig)(provider) && !skipLocalAuth) {
|
|
546
|
+
await (0, model_config_1.configureProviderModel)(provider, false, cfg.customSettingsPath); // false = only if not configured
|
|
547
|
+
}
|
|
548
|
+
// 5. Check for known broken models and warn user
|
|
549
|
+
// Show warning for both local and remote modes - user should be aware of model issues
|
|
550
|
+
const currentModel = (0, model_config_1.getCurrentModel)(provider, cfg.customSettingsPath);
|
|
551
|
+
if (currentModel && (0, model_catalog_1.isModelBroken)(provider, currentModel)) {
|
|
552
|
+
const modelEntry = (0, model_catalog_1.findModel)(provider, currentModel);
|
|
553
|
+
const issueUrl = (0, model_catalog_1.getModelIssueUrl)(provider, currentModel);
|
|
554
|
+
console.error('');
|
|
555
|
+
console.error((0, ui_1.warn)(`${modelEntry?.name || currentModel} has known issues with Claude Code`));
|
|
556
|
+
console.error(' Tool calls will fail. Use "gemini-3-pro-preview" instead.');
|
|
557
|
+
if (issueUrl) {
|
|
558
|
+
console.error(` Tracking: ${issueUrl}`);
|
|
559
|
+
}
|
|
560
|
+
if (skipLocalAuth) {
|
|
561
|
+
console.error(' Note: Model may be overridden by remote proxy configuration.');
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
console.error(` Run "ccs ${provider} --config" to change model.`);
|
|
565
|
+
}
|
|
566
|
+
console.error('');
|
|
567
|
+
}
|
|
568
|
+
// 6. Ensure user settings file exists (creates from defaults if not)
|
|
569
|
+
(0, config_generator_1.ensureProviderSettings)(provider);
|
|
570
|
+
// Local proxy mode: generate config, spawn proxy, track session
|
|
571
|
+
let proxy = null;
|
|
572
|
+
if (!useRemoteProxy) {
|
|
573
|
+
// 6. Generate config file
|
|
574
|
+
log(`Generating config for ${provider}`);
|
|
575
|
+
const configPath = (0, config_generator_1.generateConfig)(provider, cfg.port);
|
|
576
|
+
log(`Config written: ${configPath}`);
|
|
577
|
+
// 6a. Pre-flight check using unified detection with startup lock
|
|
578
|
+
// This prevents race conditions when multiple CCS processes start simultaneously
|
|
579
|
+
(0, session_tracker_1.cleanupOrphanedSessions)(cfg.port);
|
|
580
|
+
// Use startup lock to coordinate with other CCS processes
|
|
581
|
+
await (0, startup_lock_1.withStartupLock)(async () => {
|
|
582
|
+
// Detect running proxy using multiple methods (HTTP, session-lock, port-process)
|
|
583
|
+
let proxyStatus = await (0, proxy_detector_1.detectRunningProxy)(cfg.port);
|
|
584
|
+
log(`Proxy detection: ${JSON.stringify(proxyStatus)}`);
|
|
585
|
+
// Check for version mismatch - restart proxy if installed version differs from running
|
|
586
|
+
if (proxyStatus.running && proxyStatus.verified && proxyStatus.version) {
|
|
587
|
+
const installedVersion = (0, binary_manager_1.getInstalledCliproxyVersion)();
|
|
588
|
+
if (installedVersion !== proxyStatus.version) {
|
|
589
|
+
console.log((0, ui_1.warn)(`Version mismatch: running v${proxyStatus.version}, installed v${installedVersion}. Restarting proxy...`));
|
|
590
|
+
log(`Stopping outdated proxy (PID: ${proxyStatus.pid ?? 'unknown'})...`);
|
|
591
|
+
const stopResult = await (0, session_tracker_1.stopProxy)(cfg.port);
|
|
592
|
+
if (stopResult.stopped) {
|
|
593
|
+
log(`Stopped outdated proxy successfully`);
|
|
594
|
+
}
|
|
595
|
+
else {
|
|
596
|
+
log(`Stop proxy result: ${stopResult.error ?? 'unknown error'}`);
|
|
597
|
+
}
|
|
598
|
+
// Wait for port to be released
|
|
599
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
600
|
+
// Re-detect proxy status (should now be not running)
|
|
601
|
+
proxyStatus = await (0, proxy_detector_1.detectRunningProxy)(cfg.port);
|
|
602
|
+
log(`Re-detection after version mismatch restart: ${JSON.stringify(proxyStatus)}`);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
if (proxyStatus.running && proxyStatus.verified) {
|
|
606
|
+
// Healthy proxy found - join it
|
|
607
|
+
if (proxyStatus.pid) {
|
|
608
|
+
sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.pid, verbose) ?? undefined;
|
|
609
|
+
}
|
|
610
|
+
if (sessionId) {
|
|
611
|
+
console.log((0, ui_1.info)(`Joined existing CLIProxy on port ${cfg.port} (${proxyStatus.method})`));
|
|
612
|
+
}
|
|
613
|
+
else {
|
|
614
|
+
// Failed to register session - proxy is running but we can't track it
|
|
615
|
+
// This happens when port-process detection fails (permissions, platform issues)
|
|
616
|
+
console.log((0, ui_1.info)(`Using existing CLIProxy on port ${cfg.port} (session tracking unavailable)`));
|
|
617
|
+
log(`PID=${proxyStatus.pid ?? 'unknown'}, session registration skipped`);
|
|
618
|
+
}
|
|
619
|
+
return; // Exit lock early, skip spawning
|
|
620
|
+
}
|
|
621
|
+
if (proxyStatus.running && !proxyStatus.verified) {
|
|
622
|
+
// Proxy detected but not ready yet (another process is starting it)
|
|
623
|
+
log(`Proxy starting up (detected via ${proxyStatus.method}), waiting...`);
|
|
624
|
+
const becameHealthy = await (0, proxy_detector_1.waitForProxyHealthy)(cfg.port, cfg.timeout);
|
|
625
|
+
if (becameHealthy) {
|
|
626
|
+
if (proxyStatus.pid) {
|
|
627
|
+
sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.pid, verbose) ?? undefined;
|
|
628
|
+
}
|
|
629
|
+
console.log((0, ui_1.info)(`Joined CLIProxy after startup wait`));
|
|
630
|
+
return; // Exit lock early
|
|
631
|
+
}
|
|
632
|
+
// Proxy didn't become healthy - kill and respawn
|
|
633
|
+
if (proxyStatus.pid) {
|
|
634
|
+
log(`Proxy PID ${proxyStatus.pid} not responding, killing...`);
|
|
635
|
+
(0, platform_commands_1.killProcessOnPort)(cfg.port, verbose);
|
|
636
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
if (proxyStatus.blocked && proxyStatus.blocker) {
|
|
640
|
+
// Port blocked by non-CLIProxy process
|
|
641
|
+
// Last resort: try HTTP health check (handles Windows PID-XXXXX case)
|
|
642
|
+
const isActuallyOurs = await (0, proxy_detector_1.waitForProxyHealthy)(cfg.port, 1000);
|
|
643
|
+
if (isActuallyOurs) {
|
|
644
|
+
sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.blocker.pid, verbose) ?? undefined;
|
|
645
|
+
console.log((0, ui_1.info)(`Reclaimed CLIProxy with unrecognized process name`));
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
// Truly blocked by another application
|
|
649
|
+
console.error('');
|
|
650
|
+
console.error((0, ui_1.warn)(`Port ${cfg.port} is blocked by ${proxyStatus.blocker.processName} (PID ${proxyStatus.blocker.pid})`));
|
|
651
|
+
console.error('');
|
|
652
|
+
console.error('To fix this, close the blocking application or run:');
|
|
653
|
+
console.error(` ${(0, platform_commands_1.getPortCheckCommand)(cfg.port)}`);
|
|
654
|
+
console.error('');
|
|
655
|
+
throw new Error(`Port ${cfg.port} is in use by another application`);
|
|
656
|
+
}
|
|
657
|
+
// 6b. Spawn CLIProxyAPI binary
|
|
658
|
+
const proxyArgs = ['--config', configPath];
|
|
659
|
+
log(`Spawning: ${binaryPath} ${proxyArgs.join(' ')}`);
|
|
660
|
+
proxy = (0, child_process_1.spawn)(binaryPath, proxyArgs, {
|
|
661
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
662
|
+
detached: true,
|
|
663
|
+
env: {
|
|
664
|
+
...process.env,
|
|
665
|
+
WRITABLE_PATH: (0, config_generator_1.getCliproxyWritablePath)(),
|
|
666
|
+
},
|
|
667
|
+
});
|
|
668
|
+
proxy.unref();
|
|
669
|
+
proxy.on('error', (error) => {
|
|
670
|
+
console.error((0, ui_1.fail)(`CLIProxy spawn error: ${error.message}`));
|
|
671
|
+
});
|
|
672
|
+
// 7. Wait for proxy readiness via TCP polling
|
|
673
|
+
const readySpinner = new progress_indicator_1.ProgressIndicator(`Waiting for CLIProxy on port ${cfg.port}`);
|
|
674
|
+
readySpinner.start();
|
|
675
|
+
try {
|
|
676
|
+
await waitForProxyReady(cfg.port, cfg.timeout, cfg.pollInterval);
|
|
677
|
+
readySpinner.succeed(`CLIProxy ready on port ${cfg.port}`);
|
|
678
|
+
}
|
|
679
|
+
catch (error) {
|
|
680
|
+
const backendLabel = backend === 'plus' ? 'CLIProxy Plus' : 'CLIProxy';
|
|
681
|
+
readySpinner.fail(`${backendLabel} startup failed`);
|
|
682
|
+
proxy.kill('SIGTERM');
|
|
683
|
+
const err = error;
|
|
684
|
+
console.error('');
|
|
685
|
+
console.error((0, ui_1.fail)(`${backendLabel} failed to start`));
|
|
686
|
+
console.error('');
|
|
687
|
+
console.error('Possible causes:');
|
|
688
|
+
console.error(` 1. Port ${cfg.port} already in use`);
|
|
689
|
+
console.error(' 2. Binary crashed on startup');
|
|
690
|
+
console.error(' 3. Invalid configuration');
|
|
691
|
+
console.error('');
|
|
692
|
+
console.error('Troubleshooting:');
|
|
693
|
+
console.error(` - Check port: ${(0, platform_commands_1.getPortCheckCommand)(cfg.port)}`);
|
|
694
|
+
console.error(' - Run with --verbose for detailed logs');
|
|
695
|
+
console.error(` - View config: ${(0, platform_commands_1.getCatCommand)(configPath)}`);
|
|
696
|
+
console.error(' - Try: ccs doctor --fix');
|
|
697
|
+
console.error('');
|
|
698
|
+
throw new Error(`CLIProxy startup failed: ${err.message}`);
|
|
699
|
+
}
|
|
700
|
+
// Register this session with the new proxy, including version and backend
|
|
701
|
+
const installedVersion = (0, binary_manager_1.getInstalledCliproxyVersion)();
|
|
702
|
+
sessionId = (0, session_tracker_1.registerSession)(cfg.port, proxy.pid, installedVersion, backend);
|
|
703
|
+
log(`Registered session ${sessionId} with new proxy (PID ${proxy.pid}, version ${installedVersion})`);
|
|
704
|
+
});
|
|
705
|
+
}
|
|
706
|
+
// 7. Execute Claude CLI with proxied environment
|
|
707
|
+
// Use remote or local env vars based on mode
|
|
708
|
+
// When remote is configured (even if using local), pass config for URL rewriting
|
|
709
|
+
const remoteRewriteConfig = proxyConfig.mode === 'remote' && proxyConfig.host
|
|
710
|
+
? {
|
|
711
|
+
host: proxyConfig.host,
|
|
712
|
+
port: proxyConfig.port,
|
|
713
|
+
protocol: proxyConfig.protocol,
|
|
714
|
+
authToken: proxyConfig.authToken,
|
|
715
|
+
}
|
|
716
|
+
: undefined;
|
|
717
|
+
// For HTTPS remote, we need a local HTTP tunnel since Claude Code doesn't support
|
|
718
|
+
// HTTPS in ANTHROPIC_BASE_URL directly (undici limitation)
|
|
719
|
+
let httpsTunnel = null;
|
|
720
|
+
let tunnelPort = null;
|
|
721
|
+
if (useRemoteProxy && proxyConfig.protocol === 'https' && proxyConfig.host) {
|
|
722
|
+
try {
|
|
723
|
+
httpsTunnel = new https_tunnel_proxy_1.HttpsTunnelProxy({
|
|
724
|
+
remoteHost: proxyConfig.host,
|
|
725
|
+
remotePort: proxyConfig.port,
|
|
726
|
+
authToken: proxyConfig.authToken,
|
|
727
|
+
verbose,
|
|
728
|
+
allowSelfSigned: proxyConfig.allowSelfSigned ?? false,
|
|
729
|
+
});
|
|
730
|
+
tunnelPort = await httpsTunnel.start();
|
|
731
|
+
log(`HTTPS tunnel started on port ${tunnelPort} → https://${proxyConfig.host}:${proxyConfig.port}`);
|
|
732
|
+
}
|
|
733
|
+
catch (error) {
|
|
734
|
+
const err = error;
|
|
735
|
+
console.error((0, ui_1.warn)(`Failed to start HTTPS tunnel: ${err.message}`));
|
|
736
|
+
throw new Error(`HTTPS tunnel startup failed: ${err.message}`);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
// Build env vars - use tunnel port for HTTPS remote, direct URL otherwise
|
|
740
|
+
const envVars = useRemoteProxy
|
|
741
|
+
? httpsTunnel && tunnelPort
|
|
742
|
+
? // HTTPS remote via local tunnel - use HTTP to tunnel
|
|
743
|
+
(0, config_generator_1.getRemoteEnvVars)(provider, {
|
|
744
|
+
host: '127.0.0.1',
|
|
745
|
+
port: tunnelPort,
|
|
746
|
+
protocol: 'http', // Tunnel speaks HTTP locally
|
|
747
|
+
authToken: proxyConfig.authToken,
|
|
748
|
+
}, cfg.customSettingsPath)
|
|
749
|
+
: // HTTP remote - direct connection
|
|
750
|
+
(0, config_generator_1.getRemoteEnvVars)(provider, {
|
|
751
|
+
host: proxyConfig.host ?? 'localhost',
|
|
752
|
+
port: proxyConfig.port,
|
|
753
|
+
protocol: proxyConfig.protocol,
|
|
754
|
+
authToken: proxyConfig.authToken,
|
|
755
|
+
}, cfg.customSettingsPath)
|
|
756
|
+
: (0, config_generator_1.getEffectiveEnvVars)(provider, cfg.port, cfg.customSettingsPath, remoteRewriteConfig);
|
|
757
|
+
// Apply thinking configuration to model (auto tier-based or manual override)
|
|
758
|
+
// This adds thinking suffix like model(high) or model(8192) for CLIProxyAPIPlus
|
|
759
|
+
(0, config_generator_1.applyThinkingConfig)(envVars, provider, thinkingOverride);
|
|
760
|
+
// Tool sanitization proxy - applies to ALL CLIProxy providers.
|
|
761
|
+
// Sanitizes MCP tool names exceeding Gemini's 64-char limit.
|
|
762
|
+
// Proxy chain order (request flow):
|
|
763
|
+
// Claude CLI → ToolSanitizationProxy → [CodexReasoningProxy if codex] → CLIProxy → Backend
|
|
764
|
+
// Response flow is reversed, with each proxy transforming data back.
|
|
765
|
+
let toolSanitizationProxy = null;
|
|
766
|
+
let toolSanitizationPort = null;
|
|
767
|
+
if (envVars.ANTHROPIC_BASE_URL) {
|
|
768
|
+
try {
|
|
769
|
+
toolSanitizationProxy = new tool_sanitization_proxy_1.ToolSanitizationProxy({
|
|
770
|
+
upstreamBaseUrl: envVars.ANTHROPIC_BASE_URL,
|
|
771
|
+
verbose,
|
|
772
|
+
warnOnSanitize: true,
|
|
773
|
+
});
|
|
774
|
+
toolSanitizationPort = await toolSanitizationProxy.start();
|
|
775
|
+
log(`Tool sanitization proxy active on port ${toolSanitizationPort}`);
|
|
776
|
+
}
|
|
777
|
+
catch (error) {
|
|
778
|
+
// Non-fatal: continue without sanitization
|
|
779
|
+
const err = error;
|
|
780
|
+
toolSanitizationProxy = null;
|
|
781
|
+
toolSanitizationPort = null;
|
|
782
|
+
if (verbose) {
|
|
783
|
+
console.error((0, ui_1.warn)(`Tool sanitization proxy disabled: ${err.message}`));
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
// Determine the effective upstream URL after tool sanitization
|
|
788
|
+
const postSanitizationBaseUrl = toolSanitizationPort
|
|
789
|
+
? `http://127.0.0.1:${toolSanitizationPort}`
|
|
790
|
+
: envVars.ANTHROPIC_BASE_URL;
|
|
791
|
+
// Codex-only: inject OpenAI reasoning effort based on tier model mapping.
|
|
792
|
+
// Maps by request.model:
|
|
793
|
+
// - OPUS/default model → xhigh
|
|
794
|
+
// - SONNET model → high
|
|
795
|
+
// - HAIKU model → medium
|
|
796
|
+
// - Unknown → medium
|
|
797
|
+
let codexReasoningProxy = null;
|
|
798
|
+
let codexReasoningPort = null;
|
|
799
|
+
if (provider === 'codex') {
|
|
800
|
+
if (!postSanitizationBaseUrl) {
|
|
801
|
+
log('ANTHROPIC_BASE_URL not set for Codex, reasoning proxy disabled');
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
try {
|
|
805
|
+
const traceEnabled = process.env.CCS_CODEX_REASONING_TRACE === '1' ||
|
|
806
|
+
process.env.CCS_CODEX_REASONING_TRACE === 'true';
|
|
807
|
+
// For remote proxy mode, strip /api/provider/codex prefix from paths
|
|
808
|
+
// because remote CLIProxyAPI uses root paths (/v1/messages), not provider-prefixed
|
|
809
|
+
const stripPathPrefix = useRemoteProxy ? '/api/provider/codex' : undefined;
|
|
810
|
+
codexReasoningProxy = new codex_reasoning_proxy_1.CodexReasoningProxy({
|
|
811
|
+
upstreamBaseUrl: postSanitizationBaseUrl,
|
|
812
|
+
verbose,
|
|
813
|
+
defaultEffort: 'medium',
|
|
814
|
+
traceFilePath: traceEnabled ? `${os.homedir()}/.ccs/codex-reasoning-proxy.log` : '',
|
|
815
|
+
modelMap: {
|
|
816
|
+
defaultModel: envVars.ANTHROPIC_MODEL,
|
|
817
|
+
opusModel: envVars.ANTHROPIC_DEFAULT_OPUS_MODEL,
|
|
818
|
+
sonnetModel: envVars.ANTHROPIC_DEFAULT_SONNET_MODEL,
|
|
819
|
+
haikuModel: envVars.ANTHROPIC_DEFAULT_HAIKU_MODEL,
|
|
820
|
+
},
|
|
821
|
+
stripPathPrefix,
|
|
822
|
+
});
|
|
823
|
+
codexReasoningPort = await codexReasoningProxy.start();
|
|
824
|
+
log(`Codex reasoning proxy active: http://127.0.0.1:${codexReasoningPort}/api/provider/codex`);
|
|
825
|
+
}
|
|
826
|
+
catch (error) {
|
|
827
|
+
const err = error;
|
|
828
|
+
codexReasoningProxy = null;
|
|
829
|
+
codexReasoningPort = null;
|
|
830
|
+
if (verbose) {
|
|
831
|
+
console.error((0, ui_1.warn)(`Codex reasoning proxy disabled: ${err.message}`));
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
// Determine the final ANTHROPIC_BASE_URL based on active proxies
|
|
837
|
+
// Chain order: Claude CLI → [CodexReasoningProxy] → [ToolSanitizationProxy] → CLIProxy
|
|
838
|
+
// The outermost active proxy becomes the effective base URL
|
|
839
|
+
let finalBaseUrl = envVars.ANTHROPIC_BASE_URL;
|
|
840
|
+
if (toolSanitizationPort) {
|
|
841
|
+
finalBaseUrl = `http://127.0.0.1:${toolSanitizationPort}`;
|
|
842
|
+
}
|
|
843
|
+
if (codexReasoningPort) {
|
|
844
|
+
// Codex reasoning proxy is the outermost layer for codex provider
|
|
845
|
+
finalBaseUrl = `http://127.0.0.1:${codexReasoningPort}/api/provider/codex`;
|
|
846
|
+
}
|
|
847
|
+
const effectiveEnvVars = {
|
|
848
|
+
...envVars,
|
|
849
|
+
ANTHROPIC_BASE_URL: finalBaseUrl,
|
|
850
|
+
};
|
|
851
|
+
const webSearchEnv = (0, websearch_manager_1.getWebSearchHookEnv)();
|
|
852
|
+
const imageAnalysisEnv = (0, get_image_analysis_hook_env_1.getImageAnalysisHookEnv)(provider);
|
|
853
|
+
const env = {
|
|
854
|
+
...process.env,
|
|
855
|
+
...effectiveEnvVars,
|
|
856
|
+
...webSearchEnv,
|
|
857
|
+
...imageAnalysisEnv,
|
|
858
|
+
CCS_PROFILE_TYPE: 'cliproxy', // Signal to WebSearch hook this is a third-party provider
|
|
859
|
+
};
|
|
860
|
+
log(`Claude env: ANTHROPIC_BASE_URL=${effectiveEnvVars.ANTHROPIC_BASE_URL}`);
|
|
861
|
+
log(`Claude env: ANTHROPIC_MODEL=${envVars.ANTHROPIC_MODEL}`);
|
|
862
|
+
if (Object.keys(webSearchEnv).length > 0) {
|
|
863
|
+
log(`Claude env: WebSearch config=${JSON.stringify(webSearchEnv)}`);
|
|
864
|
+
}
|
|
865
|
+
// Log global env vars for visibility
|
|
866
|
+
if (envVars.DISABLE_TELEMETRY || envVars.DISABLE_ERROR_REPORTING || envVars.DISABLE_BUG_COMMAND) {
|
|
867
|
+
log(`Claude env: Global env applied (telemetry/reporting disabled)`);
|
|
868
|
+
}
|
|
869
|
+
// Filter out CCS-specific flags before passing to Claude CLI
|
|
870
|
+
// Note: Proxy flags (--proxy-host, etc.) already stripped by resolveProxyConfig()
|
|
871
|
+
const ccsFlags = [
|
|
872
|
+
'--auth',
|
|
873
|
+
'--paste-callback',
|
|
874
|
+
'--headless',
|
|
875
|
+
'--logout',
|
|
876
|
+
'--config',
|
|
877
|
+
'--add',
|
|
878
|
+
'--accounts',
|
|
879
|
+
'--use',
|
|
880
|
+
'--nickname',
|
|
881
|
+
'--thinking',
|
|
882
|
+
'--incognito',
|
|
883
|
+
'--no-incognito',
|
|
884
|
+
'--import',
|
|
885
|
+
'--settings', // Block user --settings to prevent duplicate flags
|
|
886
|
+
// Proxy flags are handled by resolveProxyConfig, but list for documentation
|
|
887
|
+
...proxy_config_resolver_1.PROXY_CLI_FLAGS,
|
|
888
|
+
];
|
|
889
|
+
const claudeArgs = argsWithoutProxy.filter((arg, idx) => {
|
|
890
|
+
// Filter out CCS flags
|
|
891
|
+
if (ccsFlags.includes(arg))
|
|
892
|
+
return false;
|
|
893
|
+
// Filter out --thinking=value format
|
|
894
|
+
if (arg.startsWith('--thinking='))
|
|
895
|
+
return false;
|
|
896
|
+
// Filter out value after --use, --nickname, or --thinking
|
|
897
|
+
if (argsWithoutProxy[idx - 1] === '--use' ||
|
|
898
|
+
argsWithoutProxy[idx - 1] === '--nickname' ||
|
|
899
|
+
argsWithoutProxy[idx - 1] === '--thinking')
|
|
900
|
+
return false;
|
|
901
|
+
return true;
|
|
902
|
+
});
|
|
903
|
+
const isWindows = process.platform === 'win32';
|
|
904
|
+
const needsShell = isWindows && /\.(cmd|bat|ps1)$/i.test(claudeCli);
|
|
905
|
+
// Get profile settings path for hooks (WebSearch, etc.)
|
|
906
|
+
// Use custom settings path for CLIProxy variants, otherwise use default provider path
|
|
907
|
+
const settingsPath = cfg.customSettingsPath
|
|
908
|
+
? cfg.customSettingsPath.replace(/^~/, os.homedir())
|
|
909
|
+
: (0, config_generator_1.getProviderSettingsPath)(provider);
|
|
910
|
+
let claude;
|
|
911
|
+
if (needsShell) {
|
|
912
|
+
const cmdString = [claudeCli, '--settings', settingsPath, ...claudeArgs]
|
|
913
|
+
.map(shell_executor_1.escapeShellArg)
|
|
914
|
+
.join(' ');
|
|
915
|
+
claude = (0, child_process_1.spawn)(cmdString, {
|
|
916
|
+
stdio: 'inherit',
|
|
917
|
+
windowsHide: true,
|
|
918
|
+
shell: true,
|
|
919
|
+
env,
|
|
920
|
+
});
|
|
921
|
+
}
|
|
922
|
+
else {
|
|
923
|
+
claude = (0, child_process_1.spawn)(claudeCli, ['--settings', settingsPath, ...claudeArgs], {
|
|
924
|
+
stdio: 'inherit',
|
|
925
|
+
windowsHide: true,
|
|
926
|
+
env,
|
|
927
|
+
});
|
|
928
|
+
}
|
|
929
|
+
// 8. Cleanup: unregister session when Claude exits (local mode only)
|
|
930
|
+
// Proxy persists by default - use 'ccs cliproxy stop' to kill manually
|
|
931
|
+
// Capture port for cleanup (avoids closure issues)
|
|
932
|
+
const sessionPort = cfg.port;
|
|
933
|
+
claude.on('exit', (code, signal) => {
|
|
934
|
+
log(`Claude exited: code=${code}, signal=${signal}`);
|
|
935
|
+
if (codexReasoningProxy) {
|
|
936
|
+
codexReasoningProxy.stop();
|
|
937
|
+
}
|
|
938
|
+
if (toolSanitizationProxy) {
|
|
939
|
+
toolSanitizationProxy.stop();
|
|
940
|
+
}
|
|
941
|
+
if (httpsTunnel) {
|
|
942
|
+
httpsTunnel.stop();
|
|
943
|
+
}
|
|
944
|
+
// Unregister this session (proxy keeps running for persistence) - only for local mode
|
|
945
|
+
if (sessionId) {
|
|
946
|
+
(0, session_tracker_1.unregisterSession)(sessionId, sessionPort);
|
|
947
|
+
log(`Session ${sessionId} unregistered, proxy persists for other sessions or future use`);
|
|
948
|
+
}
|
|
949
|
+
if (signal) {
|
|
950
|
+
process.kill(process.pid, signal);
|
|
951
|
+
}
|
|
952
|
+
else {
|
|
953
|
+
process.exit(code || 0);
|
|
954
|
+
}
|
|
955
|
+
});
|
|
956
|
+
claude.on('error', (error) => {
|
|
957
|
+
console.error((0, ui_1.fail)(`Claude CLI error: ${error}`));
|
|
958
|
+
if (codexReasoningProxy) {
|
|
959
|
+
codexReasoningProxy.stop();
|
|
960
|
+
}
|
|
961
|
+
if (toolSanitizationProxy) {
|
|
962
|
+
toolSanitizationProxy.stop();
|
|
963
|
+
}
|
|
964
|
+
if (httpsTunnel) {
|
|
965
|
+
httpsTunnel.stop();
|
|
966
|
+
}
|
|
967
|
+
// Unregister session, proxy keeps running (local mode only)
|
|
968
|
+
if (sessionId) {
|
|
969
|
+
(0, session_tracker_1.unregisterSession)(sessionId, sessionPort);
|
|
970
|
+
}
|
|
971
|
+
process.exit(1);
|
|
972
|
+
});
|
|
973
|
+
// Handle parent process termination (SIGTERM, SIGINT)
|
|
974
|
+
const cleanup = () => {
|
|
975
|
+
log('Parent signal received, cleaning up');
|
|
976
|
+
if (codexReasoningProxy) {
|
|
977
|
+
codexReasoningProxy.stop();
|
|
978
|
+
}
|
|
979
|
+
if (toolSanitizationProxy) {
|
|
980
|
+
toolSanitizationProxy.stop();
|
|
981
|
+
}
|
|
982
|
+
if (httpsTunnel) {
|
|
983
|
+
httpsTunnel.stop();
|
|
984
|
+
}
|
|
985
|
+
// Unregister session, proxy keeps running (local mode only)
|
|
986
|
+
if (sessionId) {
|
|
987
|
+
(0, session_tracker_1.unregisterSession)(sessionId, sessionPort);
|
|
988
|
+
}
|
|
989
|
+
claude.kill('SIGTERM');
|
|
990
|
+
};
|
|
991
|
+
process.once('SIGTERM', cleanup);
|
|
992
|
+
process.once('SIGINT', cleanup);
|
|
993
|
+
}
|
|
994
|
+
exports.execClaudeWithCLIProxy = execClaudeWithCLIProxy;
|
|
995
|
+
/**
|
|
996
|
+
* Check if a port is available
|
|
997
|
+
*/
|
|
998
|
+
async function isPortAvailable(port) {
|
|
999
|
+
return new Promise((resolve) => {
|
|
1000
|
+
const server = net.createServer();
|
|
1001
|
+
server.once('error', () => {
|
|
1002
|
+
resolve(false);
|
|
1003
|
+
});
|
|
1004
|
+
server.once('listening', () => {
|
|
1005
|
+
server.close();
|
|
1006
|
+
resolve(true);
|
|
1007
|
+
});
|
|
1008
|
+
server.listen(port, '127.0.0.1');
|
|
1009
|
+
});
|
|
1010
|
+
}
|
|
1011
|
+
exports.isPortAvailable = isPortAvailable;
|
|
1012
|
+
/**
|
|
1013
|
+
* Find an available port in range
|
|
1014
|
+
*/
|
|
1015
|
+
async function findAvailablePort(startPort = config_generator_1.CLIPROXY_DEFAULT_PORT, range = 10) {
|
|
1016
|
+
for (let port = startPort; port < startPort + range; port++) {
|
|
1017
|
+
if (await isPortAvailable(port)) {
|
|
1018
|
+
return port;
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
throw new Error(`No available port found in range ${startPort}-${startPort + range - 1}`);
|
|
1022
|
+
}
|
|
1023
|
+
exports.findAvailablePort = findAvailablePort;
|
|
1024
|
+
exports.default = execClaudeWithCLIProxy;
|
|
1025
|
+
//# sourceMappingURL=cliproxy-executor.js.map
|