@kaitranntt/ccs 6.7.0 → 6.7.1-dev.1
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/README.md +45 -23
- 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 +10 -0
- package/dist/api/services/index.d.ts.map +1 -0
- package/dist/api/services/index.js +26 -0
- package/dist/api/services/index.js.map +1 -0
- package/dist/api/services/profile-reader.d.ts +28 -0
- package/dist/api/services/profile-reader.d.ts.map +1 -0
- package/dist/api/services/profile-reader.js +148 -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 +176 -0
- package/dist/api/services/profile-writer.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 +77 -0
- package/dist/api/services/validation-service.js.map +1 -0
- package/dist/auth/auth-commands.d.ts +16 -22
- package/dist/auth/auth-commands.d.ts.map +1 -1
- package/dist/auth/auth-commands.js +29 -467
- package/dist/auth/auth-commands.js.map +1 -1
- 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 +0 -5
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +1 -9
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/auth/profile-registry.d.ts +0 -4
- package/dist/auth/profile-registry.d.ts.map +1 -1
- package/dist/auth/profile-registry.js +3 -10
- package/dist/auth/profile-registry.js.map +1 -1
- package/dist/ccs.js +21 -4
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/auth/auth-types.d.ts +85 -0
- package/dist/cliproxy/auth/auth-types.d.ts.map +1 -0
- package/dist/cliproxy/auth/auth-types.js +100 -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 +124 -0
- package/dist/cliproxy/auth/environment-detector.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/oauth-handler.d.ts +29 -0
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-handler.js +205 -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 +209 -0
- package/dist/cliproxy/auth/oauth-process.js.map +1 -0
- package/dist/cliproxy/auth/token-manager.d.ts +53 -0
- package/dist/cliproxy/auth/token-manager.d.ts.map +1 -0
- package/dist/cliproxy/auth/token-manager.js +250 -0
- package/dist/cliproxy/auth/token-manager.js.map +1 -0
- package/dist/cliproxy/auth-handler.d.ts +13 -103
- package/dist/cliproxy/auth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth-handler.js +35 -766
- package/dist/cliproxy/auth-handler.js.map +1 -1
- package/dist/cliproxy/binary/downloader.d.ts +29 -0
- package/dist/cliproxy/binary/downloader.d.ts.map +1 -0
- package/dist/cliproxy/binary/downloader.js +218 -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 +27 -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 +53 -0
- package/dist/cliproxy/binary/index.js.map +1 -0
- package/dist/cliproxy/binary/installer.d.ts +24 -0
- package/dist/cliproxy/binary/installer.d.ts.map +1 -0
- package/dist/cliproxy/binary/installer.js +117 -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 +106 -0
- package/dist/cliproxy/binary/lifecycle.js.map +1 -0
- package/dist/cliproxy/binary/tar-extractor.d.ts +9 -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 +24 -0
- package/dist/cliproxy/binary/types.d.ts.map +1 -0
- package/dist/cliproxy/binary/types.js +14 -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 +46 -0
- package/dist/cliproxy/binary/version-cache.d.ts.map +1 -0
- package/dist/cliproxy/binary/version-cache.js +171 -0
- package/dist/cliproxy/binary/version-cache.js.map +1 -0
- package/dist/cliproxy/binary/version-checker.d.ts +19 -0
- package/dist/cliproxy/binary/version-checker.d.ts.map +1 -0
- package/dist/cliproxy/binary/version-checker.js +77 -0
- package/dist/cliproxy/binary/version-checker.js.map +1 -0
- package/dist/cliproxy/binary/zip-extractor.d.ts +9 -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 +16 -170
- package/dist/cliproxy/binary-manager.d.ts.map +1 -1
- package/dist/cliproxy/binary-manager.js +38 -865
- package/dist/cliproxy/binary-manager.js.map +1 -1
- package/dist/cliproxy/services/binary-service.d.ts +65 -0
- package/dist/cliproxy/services/binary-service.d.ts.map +1 -0
- package/dist/cliproxy/services/binary-service.js +140 -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 +38 -0
- package/dist/cliproxy/services/variant-config-adapter.d.ts.map +1 -0
- package/dist/cliproxy/services/variant-config-adapter.js +172 -0
- package/dist/cliproxy/services/variant-config-adapter.js.map +1 -0
- package/dist/cliproxy/services/variant-service.d.ts +37 -0
- package/dist/cliproxy/services/variant-service.d.ts.map +1 -0
- package/dist/cliproxy/services/variant-service.js +128 -0
- package/dist/cliproxy/services/variant-service.js.map +1 -0
- package/dist/cliproxy/services/variant-settings.d.ts +32 -0
- package/dist/cliproxy/services/variant-settings.d.ts.map +1 -0
- package/dist/cliproxy/services/variant-settings.js +128 -0
- package/dist/cliproxy/services/variant-settings.js.map +1 -0
- package/dist/commands/api-command.d.ts +3 -6
- package/dist/commands/api-command.d.ts.map +1 -1
- package/dist/commands/api-command.js +84 -445
- package/dist/commands/api-command.js.map +1 -1
- package/dist/commands/cliproxy-command.d.ts +0 -3
- package/dist/commands/cliproxy-command.d.ts.map +1 -1
- package/dist/commands/cliproxy-command.js +182 -621
- package/dist/commands/cliproxy-command.js.map +1 -1
- package/dist/commands/index.d.ts +17 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +33 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/config/unified-config-loader.d.ts +7 -0
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +11 -1
- package/dist/config/unified-config-loader.js.map +1 -1
- 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 +121 -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 +13 -91
- package/dist/delegation/headless-executor.d.ts.map +1 -1
- package/dist/delegation/headless-executor.js +84 -291
- package/dist/delegation/headless-executor.js.map +1 -1
- 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 +1 -30
- package/dist/delegation/result-formatter.d.ts.map +1 -1
- package/dist/delegation/result-formatter.js.map +1 -1
- 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/glmt-transformer.d.ts +29 -248
- package/dist/glmt/glmt-transformer.d.ts.map +1 -1
- package/dist/glmt/glmt-transformer.js +63 -718
- package/dist/glmt/glmt-transformer.js.map +1 -1
- 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/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/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 +27 -0
- package/dist/management/checks/config-check.d.ts.map +1 -0
- package/dist/management/checks/config-check.js +158 -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/index.d.ts +12 -0
- package/dist/management/checks/index.d.ts.map +1 -0
- package/dist/management/checks/index.js +48 -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 +36 -0
- package/dist/management/checks/profile-check.d.ts.map +1 -0
- package/dist/management/checks/profile-check.js +165 -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 +204 -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 +136 -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 +63 -0
- package/dist/management/checks/types.js.map +1 -0
- package/dist/management/doctor.d.ts +3 -92
- package/dist/management/doctor.d.ts.map +1 -1
- package/dist/management/doctor.js +15 -831
- package/dist/management/doctor.js.map +1 -1
- 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/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 +170 -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/types/delegation.d.ts +1 -13
- package/dist/types/delegation.d.ts.map +1 -1
- package/dist/types/utils.d.ts +27 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/ui/assets/{accounts-p1_nf0Jy.js → accounts-BqDNXZu4.js} +1 -1
- package/dist/ui/assets/analytics-DQMyOsqI.js +1 -0
- package/dist/ui/assets/api-Bzyq4XP7.js +1 -0
- package/dist/ui/assets/{card-CCDc-Mx9.js → card-CIN0KDsX.js} +1 -1
- package/dist/ui/assets/cliproxy-5iKdPrEG.js +3 -0
- package/dist/ui/assets/cliproxy-control-panel-CJ2CfYod.js +1 -0
- package/dist/ui/assets/{code-editor-Br9x-r-E.js → code-editor-CDmNFLQ6.js} +1 -1
- package/dist/ui/assets/confirm-dialog-CaiDQikc.js +1 -0
- package/dist/ui/assets/copilot-nS6iAyk2.js +4 -0
- package/dist/ui/assets/form-utils-DP6ILe7Z.js +20 -0
- package/dist/ui/assets/health-DYOQfC7u.js +1 -0
- package/dist/ui/assets/{icons-BOsxPbiD.js → icons-ZmwVoUeR.js} +1 -1
- package/dist/ui/assets/index-C6Dah-xh.js +46 -0
- package/dist/ui/assets/index-It66SkKf.css +1 -0
- package/dist/ui/assets/{radix-ui-DFHQr9A5.js → radix-ui-CV3R9pD6.js} +3 -3
- package/dist/ui/assets/settings-DABC9b5G.js +1 -0
- package/dist/ui/assets/{shared-BfYhSN4-.js → shared-BwU4OKQc.js} +1 -1
- package/dist/ui/assets/{switch-CMk95lwf.js → switch-BQ6sBBUv.js} +1 -1
- package/dist/ui/assets/{tanstack-C4gT2P7V.js → tanstack-Df9bCj5R.js} +1 -1
- package/dist/ui/index.html +6 -6
- 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/delegation-validator.d.ts +8 -4
- package/dist/utils/delegation-validator.d.ts.map +1 -1
- package/dist/utils/delegation-validator.js.map +1 -1
- package/dist/utils/helpers.d.ts +0 -11
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +1 -57
- package/dist/utils/helpers.js.map +1 -1
- 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/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 +3 -138
- package/dist/utils/ui.d.ts.map +1 -1
- package/dist/utils/ui.js +40 -567
- package/dist/utils/ui.js.map +1 -1
- 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 +21 -0
- package/dist/utils/websearch/hook-config.d.ts.map +1 -0
- package/dist/utils/websearch/hook-config.js +183 -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 +27 -0
- package/dist/utils/websearch/hook-installer.d.ts.map +1 -0
- package/dist/utils/websearch/hook-installer.js +141 -0
- package/dist/utils/websearch/hook-installer.js.map +1 -0
- package/dist/utils/websearch/index.d.ts +15 -0
- package/dist/utils/websearch/index.d.ts.map +1 -0
- package/dist/utils/websearch/index.js +44 -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/status.d.ts +35 -0
- package/dist/utils/websearch/status.d.ts.map +1 -0
- package/dist/utils/websearch/status.js +185 -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 +7 -186
- package/dist/utils/websearch-manager.d.ts.map +1 -1
- package/dist/utils/websearch-manager.js +37 -710
- package/dist/utils/websearch-manager.js.map +1 -1
- package/dist/web-server/data-aggregator.d.ts +3 -51
- package/dist/web-server/data-aggregator.d.ts.map +1 -1
- package/dist/web-server/data-aggregator.js +18 -386
- package/dist/web-server/data-aggregator.js.map +1 -1
- 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 +145 -0
- package/dist/web-server/health/cliproxy-checks.js.map +1 -0
- package/dist/web-server/health/config-checks.d.ts +19 -0
- package/dist/web-server/health/config-checks.d.ts.map +1 -0
- package/dist/web-server/health/config-checks.js +174 -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 +19 -0
- package/dist/web-server/health/profile-checks.d.ts.map +1 -0
- package/dist/web-server/health/profile-checks.js +152 -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 +4 -30
- package/dist/web-server/health-service.d.ts.map +1 -1
- package/dist/web-server/health-service.js +28 -695
- package/dist/web-server/health-service.js.map +1 -1
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +2 -5
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts +6 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-auth-routes.js +202 -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 +253 -0
- package/dist/web-server/routes/cliproxy-stats-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 +145 -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 +30 -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 +54 -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 +219 -0
- package/dist/web-server/routes/misc-routes.js.map +1 -0
- package/dist/web-server/routes/profile-routes.d.ts +6 -0
- package/dist/web-server/routes/profile-routes.d.ts.map +1 -0
- package/dist/web-server/routes/profile-routes.js +164 -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/route-helpers.d.ts +55 -0
- package/dist/web-server/routes/route-helpers.d.ts.map +1 -0
- package/dist/web-server/routes/route-helpers.js +201 -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 +207 -0
- package/dist/web-server/routes/settings-routes.js.map +1 -0
- package/dist/web-server/routes/variant-routes.d.ts +6 -0
- package/dist/web-server/routes/variant-routes.d.ts.map +1 -0
- package/dist/web-server/routes/variant-routes.js +158 -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/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 +3 -42
- package/dist/web-server/usage-disk-cache.d.ts.map +1 -1
- package/dist/web-server/usage-disk-cache.js +5 -144
- package/dist/web-server/usage-disk-cache.js.map +1 -1
- package/dist/web-server/usage-routes.d.ts +3 -31
- package/dist/web-server/usage-routes.d.ts.map +1 -1
- package/dist/web-server/usage-routes.js +8 -1139
- package/dist/web-server/usage-routes.js.map +1 -1
- package/dist/web-server/usage-types.d.ts +3 -115
- package/dist/web-server/usage-types.d.ts.map +1 -1
- package/dist/web-server/usage-types.js +17 -3
- package/dist/web-server/usage-types.js.map +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/analytics-D1k2nYcF.js +0 -1
- package/dist/ui/assets/api-D9VVmZ1j.js +0 -1
- package/dist/ui/assets/cliproxy-CTt_Nsft.js +0 -1
- package/dist/ui/assets/cliproxy-control-panel-DKMAi4_4.js +0 -1
- package/dist/ui/assets/copilot-C6F8PT_L.js +0 -4
- package/dist/ui/assets/form-utils-BuXDJb0w.js +0 -20
- package/dist/ui/assets/health-DiAvJaSn.js +0 -1
- package/dist/ui/assets/index-Brq6EBKZ.css +0 -1
- package/dist/ui/assets/index-ByU8ZhED.js +0 -48
- package/dist/ui/assets/settings-CEomZLGl.js +0 -1
- package/dist/web-server/routes.d.ts +0 -7
- package/dist/web-server/routes.d.ts.map +0 -1
- package/dist/web-server/routes.js +0 -1891
- package/dist/web-server/routes.js.map +0 -1
|
@@ -43,25 +43,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.handleCliproxyCommand = void 0;
|
|
46
|
-
const fs = __importStar(require("fs"));
|
|
47
46
|
const path = __importStar(require("path"));
|
|
48
|
-
const cliproxy_1 = require("../cliproxy");
|
|
49
47
|
const auth_handler_1 = require("../cliproxy/auth-handler");
|
|
50
48
|
const account_manager_1 = require("../cliproxy/account-manager");
|
|
51
49
|
const platform_detector_1 = require("../cliproxy/platform-detector");
|
|
52
50
|
const profile_detector_1 = require("../auth/profile-detector");
|
|
53
|
-
const config_manager_1 = require("../utils/config-manager");
|
|
54
|
-
const config_generator_1 = require("../cliproxy/config-generator");
|
|
55
51
|
const model_catalog_1 = require("../cliproxy/model-catalog");
|
|
52
|
+
const unified_config_loader_1 = require("../config/unified-config-loader");
|
|
56
53
|
const ui_1 = require("../utils/ui");
|
|
57
54
|
const prompt_1 = require("../utils/prompt");
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
const feature_flags_1 = require("../config/feature-flags");
|
|
61
|
-
const session_tracker_1 = require("../cliproxy/session-tracker");
|
|
62
|
-
/**
|
|
63
|
-
* Parse command line arguments for profile commands
|
|
64
|
-
*/
|
|
55
|
+
// Import services
|
|
56
|
+
const services_1 = require("../cliproxy/services");
|
|
65
57
|
function parseProfileArgs(args) {
|
|
66
58
|
const result = {};
|
|
67
59
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -87,211 +79,13 @@ function parseProfileArgs(args) {
|
|
|
87
79
|
}
|
|
88
80
|
return result;
|
|
89
81
|
}
|
|
90
|
-
/**
|
|
91
|
-
* Validate CLIProxy profile name
|
|
92
|
-
*/
|
|
93
|
-
function validateProfileName(name) {
|
|
94
|
-
if (!name) {
|
|
95
|
-
return 'Profile name is required';
|
|
96
|
-
}
|
|
97
|
-
if (!/^[a-zA-Z][a-zA-Z0-9._-]*$/.test(name)) {
|
|
98
|
-
return 'Name must start with letter, contain only letters, numbers, dot, dash, underscore';
|
|
99
|
-
}
|
|
100
|
-
if (name.length > 32) {
|
|
101
|
-
return 'Name must be 32 characters or less';
|
|
102
|
-
}
|
|
103
|
-
// Use centralized reserved names list (includes built-in cliproxy profiles)
|
|
104
|
-
if ((0, reserved_names_1.isReservedName)(name)) {
|
|
105
|
-
return `'${name}' is a reserved name`;
|
|
106
|
-
}
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Check if unified config mode is active
|
|
111
|
-
*/
|
|
112
|
-
function isUnifiedMode() {
|
|
113
|
-
return (0, unified_config_loader_1.hasUnifiedConfig)() || (0, feature_flags_1.isUnifiedConfigEnabled)();
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Check if CLIProxy variant profile exists
|
|
117
|
-
*/
|
|
118
|
-
function cliproxyVariantExists(name) {
|
|
119
|
-
try {
|
|
120
|
-
if (isUnifiedMode()) {
|
|
121
|
-
const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
122
|
-
return !!(config.cliproxy?.variants && name in config.cliproxy.variants);
|
|
123
|
-
}
|
|
124
|
-
const config = (0, config_manager_1.loadConfig)();
|
|
125
|
-
return !!(config.cliproxy && name in config.cliproxy);
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Create settings.json file for CLIProxy variant
|
|
133
|
-
* Includes all 6 fields for proper Claude CLI integration
|
|
134
|
-
*/
|
|
135
|
-
function createCliproxySettingsFile(name, provider, model, _account) {
|
|
136
|
-
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
137
|
-
const settingsPath = path.join(ccsDir, `${provider}-${name}.settings.json`);
|
|
138
|
-
// Get base env vars from provider config
|
|
139
|
-
const baseEnv = (0, config_generator_1.getClaudeEnvVars)(provider, config_generator_1.CLIPROXY_DEFAULT_PORT);
|
|
140
|
-
const settings = {
|
|
141
|
-
env: {
|
|
142
|
-
ANTHROPIC_BASE_URL: baseEnv.ANTHROPIC_BASE_URL || '',
|
|
143
|
-
ANTHROPIC_AUTH_TOKEN: baseEnv.ANTHROPIC_AUTH_TOKEN || '',
|
|
144
|
-
ANTHROPIC_MODEL: model,
|
|
145
|
-
ANTHROPIC_DEFAULT_OPUS_MODEL: model,
|
|
146
|
-
ANTHROPIC_DEFAULT_SONNET_MODEL: model,
|
|
147
|
-
ANTHROPIC_DEFAULT_HAIKU_MODEL: baseEnv.ANTHROPIC_DEFAULT_HAIKU_MODEL || model,
|
|
148
|
-
},
|
|
149
|
-
};
|
|
150
|
-
// Ensure directory exists
|
|
151
|
-
if (!fs.existsSync(ccsDir)) {
|
|
152
|
-
fs.mkdirSync(ccsDir, { recursive: true });
|
|
153
|
-
}
|
|
154
|
-
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
|
|
155
|
-
return settingsPath;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Update config.json with new CLIProxy variant
|
|
159
|
-
*/
|
|
160
|
-
function addCliproxyVariant(name, provider, settingsPath, account) {
|
|
161
|
-
const configPath = (0, config_manager_1.getConfigPath)();
|
|
162
|
-
// Read existing config or create new
|
|
163
|
-
let config;
|
|
164
|
-
try {
|
|
165
|
-
config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
config = { profiles: {} };
|
|
169
|
-
}
|
|
170
|
-
// Ensure cliproxy section exists
|
|
171
|
-
if (!config.cliproxy) {
|
|
172
|
-
config.cliproxy = {};
|
|
173
|
-
}
|
|
174
|
-
// Use relative path with ~ for portability
|
|
175
|
-
const relativePath = `~/.ccs/${path.basename(settingsPath)}`;
|
|
176
|
-
// Build variant config with optional account
|
|
177
|
-
const variantConfig = {
|
|
178
|
-
provider,
|
|
179
|
-
settings: relativePath,
|
|
180
|
-
};
|
|
181
|
-
if (account) {
|
|
182
|
-
variantConfig.account = account;
|
|
183
|
-
}
|
|
184
|
-
config.cliproxy[name] = variantConfig;
|
|
185
|
-
// Write config atomically
|
|
186
|
-
const tempPath = configPath + '.tmp';
|
|
187
|
-
fs.writeFileSync(tempPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
|
|
188
|
-
fs.renameSync(tempPath, configPath);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Remove CLIProxy variant from config.json
|
|
192
|
-
*/
|
|
193
|
-
function removeCliproxyVariant(name) {
|
|
194
|
-
const configPath = (0, config_manager_1.getConfigPath)();
|
|
195
|
-
let config;
|
|
196
|
-
try {
|
|
197
|
-
config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
198
|
-
}
|
|
199
|
-
catch {
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
if (!config.cliproxy || !(name in config.cliproxy)) {
|
|
203
|
-
return null;
|
|
204
|
-
}
|
|
205
|
-
const variant = config.cliproxy[name];
|
|
206
|
-
delete config.cliproxy[name];
|
|
207
|
-
// Clean up empty cliproxy section
|
|
208
|
-
if (Object.keys(config.cliproxy).length === 0) {
|
|
209
|
-
delete config.cliproxy;
|
|
210
|
-
}
|
|
211
|
-
// Write config atomically
|
|
212
|
-
const tempPath = configPath + '.tmp';
|
|
213
|
-
fs.writeFileSync(tempPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
|
|
214
|
-
fs.renameSync(tempPath, configPath);
|
|
215
|
-
return variant;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Add CLIProxy variant to unified config (config.yaml)
|
|
219
|
-
* Creates *.settings.json file and stores reference in config.yaml
|
|
220
|
-
*/
|
|
221
|
-
function addCliproxyVariantUnified(name, provider, model, account) {
|
|
222
|
-
const ccsDir = path.join(require('os').homedir(), '.ccs');
|
|
223
|
-
const settingsFile = `${provider}-${name}.settings.json`;
|
|
224
|
-
const settingsPath = path.join(ccsDir, settingsFile);
|
|
225
|
-
// Get base env vars from provider config
|
|
226
|
-
const baseEnv = (0, config_generator_1.getClaudeEnvVars)(provider, config_generator_1.CLIPROXY_DEFAULT_PORT);
|
|
227
|
-
// Create settings file with model override
|
|
228
|
-
const settings = {
|
|
229
|
-
env: {
|
|
230
|
-
ANTHROPIC_BASE_URL: baseEnv.ANTHROPIC_BASE_URL || '',
|
|
231
|
-
ANTHROPIC_AUTH_TOKEN: baseEnv.ANTHROPIC_AUTH_TOKEN || '',
|
|
232
|
-
ANTHROPIC_MODEL: model,
|
|
233
|
-
ANTHROPIC_DEFAULT_OPUS_MODEL: model,
|
|
234
|
-
ANTHROPIC_DEFAULT_SONNET_MODEL: model,
|
|
235
|
-
ANTHROPIC_DEFAULT_HAIKU_MODEL: baseEnv.ANTHROPIC_DEFAULT_HAIKU_MODEL || model,
|
|
236
|
-
},
|
|
237
|
-
};
|
|
238
|
-
// Ensure directory exists
|
|
239
|
-
if (!fs.existsSync(ccsDir)) {
|
|
240
|
-
fs.mkdirSync(ccsDir, { recursive: true });
|
|
241
|
-
}
|
|
242
|
-
// Write settings file
|
|
243
|
-
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
|
|
244
|
-
// Update config.yaml with reference
|
|
245
|
-
const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
246
|
-
// Ensure cliproxy.variants section exists
|
|
247
|
-
if (!config.cliproxy) {
|
|
248
|
-
config.cliproxy = {
|
|
249
|
-
oauth_accounts: {},
|
|
250
|
-
providers: ['gemini', 'codex', 'agy', 'qwen', 'iflow'],
|
|
251
|
-
variants: {},
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
if (!config.cliproxy.variants) {
|
|
255
|
-
config.cliproxy.variants = {};
|
|
256
|
-
}
|
|
257
|
-
// Add variant with settings file reference
|
|
258
|
-
config.cliproxy.variants[name] = {
|
|
259
|
-
provider: provider,
|
|
260
|
-
account,
|
|
261
|
-
settings: `~/.ccs/${settingsFile}`,
|
|
262
|
-
};
|
|
263
|
-
(0, unified_config_loader_1.saveUnifiedConfig)(config);
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Remove CLIProxy variant from unified config
|
|
267
|
-
*/
|
|
268
|
-
function removeCliproxyVariantUnified(name) {
|
|
269
|
-
const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
270
|
-
if (!config.cliproxy?.variants || !(name in config.cliproxy.variants)) {
|
|
271
|
-
return null;
|
|
272
|
-
}
|
|
273
|
-
const variant = config.cliproxy.variants[name];
|
|
274
|
-
// Delete the settings file if it exists
|
|
275
|
-
if (variant.settings) {
|
|
276
|
-
const settingsPath = variant.settings.replace(/^~/, require('os').homedir());
|
|
277
|
-
if (fs.existsSync(settingsPath)) {
|
|
278
|
-
fs.unlinkSync(settingsPath);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
delete config.cliproxy.variants[name];
|
|
282
|
-
(0, unified_config_loader_1.saveUnifiedConfig)(config);
|
|
283
|
-
return { provider: variant.provider, settings: variant.settings };
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Format model entry for display
|
|
287
|
-
*/
|
|
288
82
|
function formatModelOption(model) {
|
|
289
83
|
const tierBadge = model.tier === 'paid' ? (0, ui_1.color)(' [Paid Tier]', 'warning') : '';
|
|
290
84
|
return `${model.name}${tierBadge}`;
|
|
291
85
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
86
|
+
// ============================================================================
|
|
87
|
+
// COMMAND HANDLERS
|
|
88
|
+
// ============================================================================
|
|
295
89
|
async function handleCreate(args) {
|
|
296
90
|
await (0, ui_1.initUI)();
|
|
297
91
|
const parsedArgs = parseProfileArgs(args);
|
|
@@ -301,18 +95,17 @@ async function handleCreate(args) {
|
|
|
301
95
|
let name = parsedArgs.name;
|
|
302
96
|
if (!name) {
|
|
303
97
|
name = await prompt_1.InteractivePrompt.input('Variant name (e.g., g3, flash, pro)', {
|
|
304
|
-
validate: validateProfileName,
|
|
98
|
+
validate: services_1.validateProfileName,
|
|
305
99
|
});
|
|
306
100
|
}
|
|
307
101
|
else {
|
|
308
|
-
const error = validateProfileName(name);
|
|
102
|
+
const error = (0, services_1.validateProfileName)(name);
|
|
309
103
|
if (error) {
|
|
310
104
|
console.log((0, ui_1.fail)(error));
|
|
311
105
|
process.exit(1);
|
|
312
106
|
}
|
|
313
107
|
}
|
|
314
|
-
|
|
315
|
-
if (cliproxyVariantExists(name) && !parsedArgs.force) {
|
|
108
|
+
if ((0, services_1.variantExists)(name) && !parsedArgs.force) {
|
|
316
109
|
console.log((0, ui_1.fail)(`Variant '${name}' already exists`));
|
|
317
110
|
console.log(` Use ${(0, ui_1.color)('--force', 'command')} to overwrite`);
|
|
318
111
|
process.exit(1);
|
|
@@ -336,7 +129,6 @@ async function handleCreate(args) {
|
|
|
336
129
|
const providerAccounts = (0, account_manager_1.getProviderAccounts)(provider);
|
|
337
130
|
if (!account) {
|
|
338
131
|
if (providerAccounts.length === 0) {
|
|
339
|
-
// No accounts - prompt to authenticate first
|
|
340
132
|
console.log('');
|
|
341
133
|
console.log((0, ui_1.warn)(`No accounts authenticated for ${provider}`));
|
|
342
134
|
console.log('');
|
|
@@ -349,7 +141,6 @@ async function handleCreate(args) {
|
|
|
349
141
|
console.log(` ${(0, ui_1.color)(`ccs ${provider} --auth`, 'command')}`);
|
|
350
142
|
process.exit(0);
|
|
351
143
|
}
|
|
352
|
-
// Trigger OAuth inline
|
|
353
144
|
console.log('');
|
|
354
145
|
const newAccount = await (0, auth_handler_1.triggerOAuth)(provider, {
|
|
355
146
|
add: true,
|
|
@@ -364,26 +155,20 @@ async function handleCreate(args) {
|
|
|
364
155
|
console.log((0, ui_1.ok)(`Authenticated as ${newAccount.email || newAccount.id}`));
|
|
365
156
|
}
|
|
366
157
|
else if (providerAccounts.length === 1) {
|
|
367
|
-
// Single account - auto-select
|
|
368
158
|
account = providerAccounts[0].id;
|
|
369
159
|
}
|
|
370
160
|
else {
|
|
371
|
-
// Multiple accounts - show selector with "Add new" option
|
|
372
161
|
const ADD_NEW_ID = '__add_new__';
|
|
373
162
|
const accountOptions = [
|
|
374
163
|
...providerAccounts.map((acc) => ({
|
|
375
164
|
id: acc.id,
|
|
376
165
|
label: `${acc.email || acc.id}${acc.isDefault ? ' (default)' : ''}`,
|
|
377
166
|
})),
|
|
378
|
-
{
|
|
379
|
-
id: ADD_NEW_ID,
|
|
380
|
-
label: (0, ui_1.color)('[+ Add new account...]', 'info'),
|
|
381
|
-
},
|
|
167
|
+
{ id: ADD_NEW_ID, label: (0, ui_1.color)('[+ Add new account...]', 'info') },
|
|
382
168
|
];
|
|
383
169
|
const defaultIdx = providerAccounts.findIndex((a) => a.isDefault);
|
|
384
170
|
const selectedAccount = await prompt_1.InteractivePrompt.selectFromList('Select account:', accountOptions, { defaultIndex: defaultIdx >= 0 ? defaultIdx : 0 });
|
|
385
171
|
if (selectedAccount === ADD_NEW_ID) {
|
|
386
|
-
// Add new account inline
|
|
387
172
|
console.log('');
|
|
388
173
|
const newAccount = await (0, auth_handler_1.triggerOAuth)(provider, {
|
|
389
174
|
add: true,
|
|
@@ -403,195 +188,111 @@ async function handleCreate(args) {
|
|
|
403
188
|
}
|
|
404
189
|
}
|
|
405
190
|
else {
|
|
406
|
-
// Validate provided account exists
|
|
407
191
|
const exists = providerAccounts.find((a) => a.id === account);
|
|
408
192
|
if (!exists) {
|
|
409
193
|
console.log((0, ui_1.fail)(`Account '${account}' not found for ${provider}`));
|
|
410
194
|
console.log('');
|
|
411
195
|
console.log('Available accounts:');
|
|
412
|
-
providerAccounts.forEach((a) => {
|
|
413
|
-
console.log(` - ${a.email || a.id}${a.isDefault ? ' (default)' : ''}`);
|
|
414
|
-
});
|
|
196
|
+
providerAccounts.forEach((a) => console.log(` - ${a.email || a.id}${a.isDefault ? ' (default)' : ''}`));
|
|
415
197
|
process.exit(1);
|
|
416
198
|
}
|
|
417
199
|
}
|
|
418
200
|
// Step 3: Model selection
|
|
419
201
|
let model = parsedArgs.model;
|
|
420
202
|
if (!model) {
|
|
421
|
-
// Check if provider has model catalog for interactive selection
|
|
422
203
|
if ((0, model_catalog_1.supportsModelConfig)(provider)) {
|
|
423
204
|
const catalog = (0, model_catalog_1.getProviderCatalog)(provider);
|
|
424
205
|
if (catalog) {
|
|
425
|
-
const modelOptions = catalog.models.map((m) => ({
|
|
426
|
-
id: m.id,
|
|
427
|
-
label: formatModelOption(m),
|
|
428
|
-
}));
|
|
206
|
+
const modelOptions = catalog.models.map((m) => ({ id: m.id, label: formatModelOption(m) }));
|
|
429
207
|
const defaultIdx = catalog.models.findIndex((m) => m.id === catalog.defaultModel);
|
|
430
208
|
model = await prompt_1.InteractivePrompt.selectFromList('Select model:', modelOptions, {
|
|
431
209
|
defaultIndex: defaultIdx >= 0 ? defaultIdx : 0,
|
|
432
210
|
});
|
|
433
211
|
}
|
|
434
212
|
}
|
|
435
|
-
// Fallback to manual input if no catalog
|
|
436
213
|
if (!model) {
|
|
437
214
|
model = await prompt_1.InteractivePrompt.input('Model name', {
|
|
438
215
|
validate: (val) => (val ? null : 'Model is required'),
|
|
439
216
|
});
|
|
440
217
|
}
|
|
441
218
|
}
|
|
442
|
-
// Create
|
|
219
|
+
// Create variant
|
|
443
220
|
console.log('');
|
|
444
221
|
console.log((0, ui_1.info)('Creating CLIProxy variant...'));
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
addCliproxyVariantUnified(name, provider, model, account);
|
|
449
|
-
console.log('');
|
|
450
|
-
console.log((0, ui_1.infoBox)(`Variant: ${name}\n` +
|
|
451
|
-
`Provider: ${provider}\n` +
|
|
452
|
-
`Model: ${model}\n` +
|
|
453
|
-
(account ? `Account: ${account}\n` : '') +
|
|
454
|
-
`Config: ~/.ccs/config.yaml`, 'CLIProxy Variant Created (Unified Config)'));
|
|
455
|
-
}
|
|
456
|
-
else {
|
|
457
|
-
// Legacy: create settings.json file
|
|
458
|
-
const settingsPath = createCliproxySettingsFile(name, provider, model, account);
|
|
459
|
-
addCliproxyVariant(name, provider, settingsPath, account);
|
|
460
|
-
console.log('');
|
|
461
|
-
console.log((0, ui_1.infoBox)(`Variant: ${name}\n` +
|
|
462
|
-
`Provider: ${provider}\n` +
|
|
463
|
-
`Model: ${model}\n` +
|
|
464
|
-
(account ? `Account: ${account}\n` : '') +
|
|
465
|
-
`Settings: ~/.ccs/${path.basename(settingsPath)}`, 'CLIProxy Variant Created'));
|
|
466
|
-
}
|
|
467
|
-
console.log('');
|
|
468
|
-
console.log((0, ui_1.header)('Usage'));
|
|
469
|
-
console.log(` ${(0, ui_1.color)(`ccs ${name} "your prompt"`, 'command')}`);
|
|
470
|
-
console.log('');
|
|
471
|
-
console.log((0, ui_1.dim)('To change model later:'));
|
|
472
|
-
console.log(` ${(0, ui_1.color)(`ccs ${name} --config`, 'command')}`);
|
|
473
|
-
console.log('');
|
|
474
|
-
}
|
|
475
|
-
catch (error) {
|
|
476
|
-
console.log((0, ui_1.fail)(`Failed to create variant: ${error.message}`));
|
|
222
|
+
const result = (0, services_1.createVariant)(name, provider, model, account);
|
|
223
|
+
if (!result.success) {
|
|
224
|
+
console.log((0, ui_1.fail)(`Failed to create variant: ${result.error}`));
|
|
477
225
|
process.exit(1);
|
|
478
226
|
}
|
|
227
|
+
console.log('');
|
|
228
|
+
const configType = (0, unified_config_loader_1.isUnifiedMode)()
|
|
229
|
+
? 'CLIProxy Variant Created (Unified Config)'
|
|
230
|
+
: 'CLIProxy Variant Created';
|
|
231
|
+
const settingsDisplay = (0, unified_config_loader_1.isUnifiedMode)()
|
|
232
|
+
? '~/.ccs/config.yaml'
|
|
233
|
+
: `~/.ccs/${path.basename(result.settingsPath || '')}`;
|
|
234
|
+
console.log((0, ui_1.infoBox)(`Variant: ${name}\nProvider: ${provider}\nModel: ${model}\n${account ? `Account: ${account}\n` : ''}${(0, unified_config_loader_1.isUnifiedMode)() ? 'Config' : 'Settings'}: ${settingsDisplay}`, configType));
|
|
235
|
+
console.log('');
|
|
236
|
+
console.log((0, ui_1.header)('Usage'));
|
|
237
|
+
console.log(` ${(0, ui_1.color)(`ccs ${name} "your prompt"`, 'command')}`);
|
|
238
|
+
console.log('');
|
|
239
|
+
console.log((0, ui_1.dim)('To change model later:'));
|
|
240
|
+
console.log(` ${(0, ui_1.color)(`ccs ${name} --config`, 'command')}`);
|
|
241
|
+
console.log('');
|
|
479
242
|
}
|
|
480
|
-
/**
|
|
481
|
-
* Handle 'ccs cliproxy list' command
|
|
482
|
-
*/
|
|
483
243
|
async function handleList() {
|
|
484
244
|
await (0, ui_1.initUI)();
|
|
485
245
|
console.log((0, ui_1.header)('CLIProxy Profiles'));
|
|
486
246
|
console.log('');
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
247
|
+
// Built-in profiles
|
|
248
|
+
console.log((0, ui_1.subheader)('Built-in Profiles'));
|
|
249
|
+
const authStatuses = (0, auth_handler_1.getAllAuthStatus)();
|
|
250
|
+
for (const status of authStatuses) {
|
|
251
|
+
const oauthConfig = (0, auth_handler_1.getOAuthConfig)(status.provider);
|
|
252
|
+
const icon = status.authenticated ? (0, ui_1.ok)('') : (0, ui_1.warn)('');
|
|
253
|
+
const authLabel = status.authenticated
|
|
254
|
+
? (0, ui_1.color)('authenticated', 'success')
|
|
255
|
+
: (0, ui_1.dim)('not authenticated');
|
|
256
|
+
const lastAuthStr = status.lastAuth ? (0, ui_1.dim)(` (${status.lastAuth.toLocaleDateString()})`) : '';
|
|
257
|
+
console.log(` ${icon} ${(0, ui_1.color)(status.provider, 'command').padEnd(18)} ${oauthConfig.displayName.padEnd(16)} ${authLabel}${lastAuthStr}`);
|
|
258
|
+
}
|
|
259
|
+
console.log('');
|
|
260
|
+
console.log((0, ui_1.dim)(' To authenticate: ccs <provider> --auth'));
|
|
261
|
+
console.log((0, ui_1.dim)(' To logout: ccs <provider> --logout'));
|
|
262
|
+
console.log('');
|
|
263
|
+
// Custom variants
|
|
264
|
+
const variants = (0, services_1.listVariants)();
|
|
265
|
+
const variantNames = Object.keys(variants);
|
|
266
|
+
if (variantNames.length > 0) {
|
|
267
|
+
console.log((0, ui_1.subheader)('Custom Variants'));
|
|
268
|
+
const rows = variantNames.map((name) => {
|
|
269
|
+
const variant = variants[name];
|
|
270
|
+
return [name, variant.provider, variant.settings || '-'];
|
|
271
|
+
});
|
|
272
|
+
console.log((0, ui_1.table)(rows, { head: ['Variant', 'Provider', 'Settings'], colWidths: [15, 12, 35] }));
|
|
500
273
|
console.log('');
|
|
501
|
-
console.log((0, ui_1.dim)(
|
|
502
|
-
console.log((0, ui_1.dim)(' To logout: ccs <provider> --logout'));
|
|
503
|
-
console.log('');
|
|
504
|
-
// Show custom variants if any (from unified or legacy config)
|
|
505
|
-
let variantNames;
|
|
506
|
-
let variantData;
|
|
507
|
-
if (isUnifiedMode()) {
|
|
508
|
-
const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
509
|
-
const variants = unifiedConfig.cliproxy?.variants || {};
|
|
510
|
-
variantNames = Object.keys(variants);
|
|
511
|
-
variantData = {};
|
|
512
|
-
for (const name of variantNames) {
|
|
513
|
-
const v = variants[name];
|
|
514
|
-
variantData[name] = { provider: v.provider, settings: v.settings };
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
else {
|
|
518
|
-
const config = (0, config_manager_1.loadConfig)();
|
|
519
|
-
const variants = config.cliproxy || {};
|
|
520
|
-
variantNames = Object.keys(variants);
|
|
521
|
-
variantData = {};
|
|
522
|
-
for (const name of variantNames) {
|
|
523
|
-
const v = variants[name];
|
|
524
|
-
variantData[name] = { provider: v.provider, settings: v.settings };
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
if (variantNames.length > 0) {
|
|
528
|
-
console.log((0, ui_1.subheader)('Custom Variants'));
|
|
529
|
-
// Build table data
|
|
530
|
-
const rows = variantNames.map((name) => {
|
|
531
|
-
const variant = variantData[name];
|
|
532
|
-
return [name, variant.provider, variant.settings || '-'];
|
|
533
|
-
});
|
|
534
|
-
// Print table
|
|
535
|
-
console.log((0, ui_1.table)(rows, {
|
|
536
|
-
head: ['Variant', 'Provider', 'Settings'],
|
|
537
|
-
colWidths: [15, 12, 35],
|
|
538
|
-
}));
|
|
539
|
-
console.log('');
|
|
540
|
-
console.log((0, ui_1.dim)(`Total: ${variantNames.length} custom variant(s)`));
|
|
541
|
-
console.log('');
|
|
542
|
-
}
|
|
543
|
-
console.log((0, ui_1.dim)('To create a custom variant:'));
|
|
544
|
-
console.log(` ${(0, ui_1.color)('ccs cliproxy create', 'command')}`);
|
|
274
|
+
console.log((0, ui_1.dim)(`Total: ${variantNames.length} custom variant(s)`));
|
|
545
275
|
console.log('');
|
|
546
276
|
}
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
}
|
|
277
|
+
console.log((0, ui_1.dim)('To create a custom variant:'));
|
|
278
|
+
console.log(` ${(0, ui_1.color)('ccs cliproxy create', 'command')}`);
|
|
279
|
+
console.log('');
|
|
551
280
|
}
|
|
552
|
-
/**
|
|
553
|
-
* Handle 'ccs cliproxy remove' command
|
|
554
|
-
*/
|
|
555
281
|
async function handleRemove(args) {
|
|
556
282
|
await (0, ui_1.initUI)();
|
|
557
283
|
const parsedArgs = parseProfileArgs(args);
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
let variantData;
|
|
561
|
-
if (isUnifiedMode()) {
|
|
562
|
-
const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
563
|
-
const variants = unifiedConfig.cliproxy?.variants || {};
|
|
564
|
-
variantNames = Object.keys(variants);
|
|
565
|
-
variantData = {};
|
|
566
|
-
for (const name of variantNames) {
|
|
567
|
-
const v = variants[name];
|
|
568
|
-
variantData[name] = { provider: v.provider, settings: v.settings };
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
else {
|
|
572
|
-
const config = (0, config_manager_1.loadConfig)();
|
|
573
|
-
const variants = config.cliproxy || {};
|
|
574
|
-
variantNames = Object.keys(variants);
|
|
575
|
-
variantData = {};
|
|
576
|
-
for (const name of variantNames) {
|
|
577
|
-
const v = variants[name];
|
|
578
|
-
variantData[name] = { provider: v.provider, settings: v.settings };
|
|
579
|
-
}
|
|
580
|
-
}
|
|
284
|
+
const variants = (0, services_1.listVariants)();
|
|
285
|
+
const variantNames = Object.keys(variants);
|
|
581
286
|
if (variantNames.length === 0) {
|
|
582
287
|
console.log((0, ui_1.warn)('No CLIProxy variants to remove'));
|
|
583
288
|
process.exit(0);
|
|
584
289
|
}
|
|
585
|
-
// Interactive selection if not provided
|
|
586
290
|
let name = parsedArgs.name;
|
|
587
291
|
if (!name) {
|
|
588
292
|
console.log((0, ui_1.header)('Remove CLIProxy Variant'));
|
|
589
293
|
console.log('');
|
|
590
294
|
console.log('Available variants:');
|
|
591
|
-
variantNames.forEach((n, i) => {
|
|
592
|
-
const v = variantData[n];
|
|
593
|
-
console.log(` ${i + 1}. ${n} (${v.provider})`);
|
|
594
|
-
});
|
|
295
|
+
variantNames.forEach((n, i) => console.log(` ${i + 1}. ${n} (${variants[n].provider})`));
|
|
595
296
|
console.log('');
|
|
596
297
|
name = await prompt_1.InteractivePrompt.input('Variant name to remove', {
|
|
597
298
|
validate: (val) => {
|
|
@@ -610,8 +311,7 @@ async function handleRemove(args) {
|
|
|
610
311
|
variantNames.forEach((n) => console.log(` - ${n}`));
|
|
611
312
|
process.exit(1);
|
|
612
313
|
}
|
|
613
|
-
const variant =
|
|
614
|
-
// Confirm deletion
|
|
314
|
+
const variant = variants[name];
|
|
615
315
|
console.log('');
|
|
616
316
|
console.log(`Variant '${(0, ui_1.color)(name, 'command')}' will be removed.`);
|
|
617
317
|
console.log(` Provider: ${variant.provider}`);
|
|
@@ -622,217 +322,106 @@ async function handleRemove(args) {
|
|
|
622
322
|
console.log((0, ui_1.info)('Cancelled'));
|
|
623
323
|
process.exit(0);
|
|
624
324
|
}
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
removeCliproxyVariantUnified(name);
|
|
629
|
-
}
|
|
630
|
-
else {
|
|
631
|
-
// Remove from legacy config
|
|
632
|
-
const removed = removeCliproxyVariant(name);
|
|
633
|
-
if (!removed) {
|
|
634
|
-
console.log((0, ui_1.fail)('Failed to remove variant from config'));
|
|
635
|
-
process.exit(1);
|
|
636
|
-
}
|
|
637
|
-
// Remove settings file if it exists
|
|
638
|
-
const settingsFile = removed.settings.replace(/^~/, process.env.HOME || '');
|
|
639
|
-
if (fs.existsSync(settingsFile)) {
|
|
640
|
-
fs.unlinkSync(settingsFile);
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
console.log((0, ui_1.ok)(`Variant removed: ${name}`));
|
|
644
|
-
console.log('');
|
|
645
|
-
}
|
|
646
|
-
catch (error) {
|
|
647
|
-
console.log((0, ui_1.fail)(`Failed to remove variant: ${error.message}`));
|
|
325
|
+
const result = (0, services_1.removeVariant)(name);
|
|
326
|
+
if (!result.success) {
|
|
327
|
+
console.log((0, ui_1.fail)(`Failed to remove variant: ${result.error}`));
|
|
648
328
|
process.exit(1);
|
|
649
329
|
}
|
|
330
|
+
console.log((0, ui_1.ok)(`Variant removed: ${name}`));
|
|
331
|
+
console.log('');
|
|
650
332
|
}
|
|
651
|
-
|
|
652
|
-
// BINARY MANAGEMENT
|
|
653
|
-
// ============================================================================
|
|
654
|
-
/**
|
|
655
|
-
* Show cliproxy command help with styled UI
|
|
656
|
-
*/
|
|
657
|
-
async function showHelp() {
|
|
333
|
+
async function handleStop() {
|
|
658
334
|
await (0, ui_1.initUI)();
|
|
335
|
+
console.log((0, ui_1.header)('Stop CLIProxy'));
|
|
659
336
|
console.log('');
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
// Profile Commands
|
|
667
|
-
console.log((0, ui_1.subheader)('Profile Commands:'));
|
|
668
|
-
const profileCmds = [
|
|
669
|
-
['create [name]', 'Create new CLIProxy variant profile'],
|
|
670
|
-
['list', 'List all CLIProxy variant profiles'],
|
|
671
|
-
['remove <name>', 'Remove a CLIProxy variant profile'],
|
|
672
|
-
];
|
|
673
|
-
const maxProfileLen = Math.max(...profileCmds.map(([cmd]) => cmd.length));
|
|
674
|
-
for (const [cmd, desc] of profileCmds) {
|
|
675
|
-
console.log(` ${(0, ui_1.color)(cmd.padEnd(maxProfileLen + 2), 'command')} ${desc}`);
|
|
337
|
+
const result = await (0, services_1.stopProxy)();
|
|
338
|
+
if (result.stopped) {
|
|
339
|
+
console.log((0, ui_1.ok)(`CLIProxy stopped (PID ${result.pid})`));
|
|
340
|
+
if (result.sessionCount && result.sessionCount > 0) {
|
|
341
|
+
console.log((0, ui_1.info)(`${result.sessionCount} active session(s) were disconnected`));
|
|
342
|
+
}
|
|
676
343
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
console.log((0, ui_1.subheader)('Proxy Lifecycle:'));
|
|
680
|
-
const lifecycleCmds = [
|
|
681
|
-
['status', 'Show running CLIProxy status'],
|
|
682
|
-
['stop', 'Stop running CLIProxy instance'],
|
|
683
|
-
];
|
|
684
|
-
const maxLifecycleLen = Math.max(...lifecycleCmds.map(([cmd]) => cmd.length));
|
|
685
|
-
for (const [cmd, desc] of lifecycleCmds) {
|
|
686
|
-
console.log(` ${(0, ui_1.color)(cmd.padEnd(maxLifecycleLen + 2), 'command')} ${desc}`);
|
|
344
|
+
else {
|
|
345
|
+
console.log((0, ui_1.warn)(result.error || 'Failed to stop CLIProxy'));
|
|
687
346
|
}
|
|
688
347
|
console.log('');
|
|
689
|
-
|
|
348
|
+
}
|
|
349
|
+
async function handleProxyStatus() {
|
|
350
|
+
await (0, ui_1.initUI)();
|
|
351
|
+
console.log((0, ui_1.header)('CLIProxy Status'));
|
|
690
352
|
console.log('');
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
console.log(
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
['--nickname <name>', 'Set friendly name for account'],
|
|
709
|
-
['--accounts', 'List all accounts for a provider'],
|
|
710
|
-
['--use <name>', 'Switch to account by nickname/email'],
|
|
711
|
-
];
|
|
712
|
-
const maxMultiLen = Math.max(...multiAcctCmds.map(([cmd]) => cmd.length));
|
|
713
|
-
for (const [cmd, desc] of multiAcctCmds) {
|
|
714
|
-
console.log(` ${(0, ui_1.color)(cmd.padEnd(maxMultiLen + 2), 'command')} ${desc}`);
|
|
715
|
-
}
|
|
716
|
-
console.log('');
|
|
717
|
-
// Create Options
|
|
718
|
-
console.log((0, ui_1.subheader)('Create Options:'));
|
|
719
|
-
const createOpts = [
|
|
720
|
-
['--provider <name>', 'Provider (gemini, codex, agy, qwen)'],
|
|
721
|
-
['--model <model>', 'Model name'],
|
|
722
|
-
['--account <id>', 'Account ID (email or default)'],
|
|
723
|
-
['--force', 'Overwrite existing variant'],
|
|
724
|
-
['--yes, -y', 'Skip confirmation prompts'],
|
|
725
|
-
];
|
|
726
|
-
const maxOptLen = Math.max(...createOpts.map(([opt]) => opt.length));
|
|
727
|
-
for (const [opt, desc] of createOpts) {
|
|
728
|
-
console.log(` ${(0, ui_1.color)(opt.padEnd(maxOptLen + 2), 'command')} ${desc}`);
|
|
729
|
-
}
|
|
730
|
-
console.log('');
|
|
731
|
-
// Examples
|
|
732
|
-
console.log((0, ui_1.subheader)('Examples:'));
|
|
733
|
-
console.log(` $ ${(0, ui_1.color)('ccs cliproxy create', 'command')} ${(0, ui_1.dim)('# Interactive wizard')}`);
|
|
734
|
-
console.log(` $ ${(0, ui_1.color)('ccs cliproxy create g3 --provider gemini', 'command')}`);
|
|
735
|
-
console.log(` ${(0, ui_1.color)('--model gemini-3-pro-preview', 'command')} ${(0, ui_1.dim)('# Non-interactive')}`);
|
|
736
|
-
console.log(` $ ${(0, ui_1.color)('ccs cliproxy list', 'command')} ${(0, ui_1.dim)('# Show all variants')}`);
|
|
737
|
-
console.log(` $ ${(0, ui_1.color)('ccs cliproxy remove g3', 'command')} ${(0, ui_1.dim)('# Remove variant')}`);
|
|
738
|
-
console.log(` $ ${(0, ui_1.color)('ccs cliproxy --latest', 'command')} ${(0, ui_1.dim)('# Update binary')}`);
|
|
739
|
-
console.log('');
|
|
740
|
-
console.log((0, ui_1.subheader)('Multi-Account Examples:'));
|
|
741
|
-
console.log(` $ ${(0, ui_1.color)('ccs gemini --auth', 'command')} ${(0, ui_1.dim)('# First account')}`);
|
|
742
|
-
console.log(` $ ${(0, ui_1.color)('ccs gemini --auth --add', 'command')} ${(0, ui_1.dim)('# Add second account')}`);
|
|
743
|
-
console.log(` $ ${(0, ui_1.color)('ccs gemini --auth --add --nickname work', 'command')} ${(0, ui_1.dim)('# With nickname')}`);
|
|
744
|
-
console.log(` $ ${(0, ui_1.color)('ccs agy --accounts', 'command')} ${(0, ui_1.dim)('# List accounts')}`);
|
|
745
|
-
console.log(` $ ${(0, ui_1.color)('ccs agy --use work', 'command')} ${(0, ui_1.dim)('# Switch account')}`);
|
|
746
|
-
console.log('');
|
|
747
|
-
// Notes
|
|
748
|
-
console.log((0, ui_1.subheader)('Notes:'));
|
|
749
|
-
console.log(` Default fallback version: ${(0, ui_1.color)(platform_detector_1.CLIPROXY_FALLBACK_VERSION, 'info')}`);
|
|
750
|
-
console.log(` Releases: ${(0, ui_1.color)('https://github.com/router-for-me/CLIProxyAPI/releases', 'path')}`);
|
|
353
|
+
const status = (0, services_1.getProxyStatus)();
|
|
354
|
+
if (status.running) {
|
|
355
|
+
console.log(` Status: ${(0, ui_1.color)('Running', 'success')}`);
|
|
356
|
+
console.log(` PID: ${status.pid}`);
|
|
357
|
+
console.log(` Port: ${status.port}`);
|
|
358
|
+
console.log(` Sessions: ${status.sessionCount || 0} active`);
|
|
359
|
+
if (status.startedAt) {
|
|
360
|
+
console.log(` Started: ${new Date(status.startedAt).toLocaleString()}`);
|
|
361
|
+
}
|
|
362
|
+
console.log('');
|
|
363
|
+
console.log((0, ui_1.dim)('To stop: ccs cliproxy stop'));
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
console.log(` Status: ${(0, ui_1.color)('Not running', 'warning')}`);
|
|
367
|
+
console.log('');
|
|
368
|
+
console.log((0, ui_1.dim)('CLIProxy starts automatically when you run ccs gemini, codex, etc.'));
|
|
369
|
+
}
|
|
751
370
|
console.log('');
|
|
752
371
|
}
|
|
753
|
-
/**
|
|
754
|
-
* Show current cliproxy status
|
|
755
|
-
*/
|
|
756
372
|
async function showStatus(verbose) {
|
|
757
373
|
await (0, ui_1.initUI)();
|
|
758
|
-
const
|
|
759
|
-
const currentVersion = (0, cliproxy_1.getInstalledCliproxyVersion)();
|
|
760
|
-
const binaryPath = (0, cliproxy_1.getCLIProxyPath)();
|
|
761
|
-
const pinnedVersion = (0, cliproxy_1.getPinnedVersion)();
|
|
374
|
+
const status = (0, services_1.getBinaryStatus)();
|
|
762
375
|
console.log('');
|
|
763
376
|
console.log((0, ui_1.color)('CLIProxyAPI Status', 'primary'));
|
|
764
377
|
console.log('');
|
|
765
|
-
if (installed) {
|
|
378
|
+
if (status.installed) {
|
|
766
379
|
console.log(` Installed: ${(0, ui_1.color)('Yes', 'success')}`);
|
|
767
|
-
const versionLabel = pinnedVersion
|
|
768
|
-
? `${(0, ui_1.color)(`v${currentVersion}`, 'info')} ${(0, ui_1.color)('(pinned)', 'warning')}`
|
|
769
|
-
: (0, ui_1.color)(`v${currentVersion}`, 'info');
|
|
380
|
+
const versionLabel = status.pinnedVersion
|
|
381
|
+
? `${(0, ui_1.color)(`v${status.currentVersion}`, 'info')} ${(0, ui_1.color)('(pinned)', 'warning')}`
|
|
382
|
+
: (0, ui_1.color)(`v${status.currentVersion}`, 'info');
|
|
770
383
|
console.log(` Version: ${versionLabel}`);
|
|
771
|
-
console.log(` Binary: ${(0, ui_1.dim)(binaryPath)}`);
|
|
384
|
+
console.log(` Binary: ${(0, ui_1.dim)(status.binaryPath)}`);
|
|
772
385
|
}
|
|
773
386
|
else {
|
|
774
387
|
console.log(` Installed: ${(0, ui_1.color)('No', 'error')}`);
|
|
775
|
-
console.log(` Fallback: ${(0, ui_1.color)(`v${
|
|
388
|
+
console.log(` Fallback: ${(0, ui_1.color)(`v${status.fallbackVersion}`, 'info')}`);
|
|
776
389
|
console.log(` ${(0, ui_1.dim)('Run "ccs gemini" or any provider to auto-install')}`);
|
|
777
390
|
}
|
|
778
|
-
|
|
779
|
-
|
|
391
|
+
const latestCheck = await (0, services_1.checkLatestVersion)();
|
|
392
|
+
if (latestCheck.success && latestCheck.latestVersion) {
|
|
780
393
|
console.log('');
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
if (pinnedVersion) {
|
|
785
|
-
console.log(` Latest: ${(0, ui_1.color)(`v${latestVersion}`, 'success')} ${(0, ui_1.dim)('(pinned to v' + pinnedVersion + ')')}`);
|
|
394
|
+
if (latestCheck.updateAvailable) {
|
|
395
|
+
if (status.pinnedVersion) {
|
|
396
|
+
console.log(` Latest: ${(0, ui_1.color)(`v${latestCheck.latestVersion}`, 'success')} ${(0, ui_1.dim)('(pinned to v' + status.pinnedVersion + ')')}`);
|
|
786
397
|
console.log('');
|
|
787
398
|
console.log(` ${(0, ui_1.dim)('Run "ccs cliproxy --update" to unpin and update')}`);
|
|
788
399
|
}
|
|
789
400
|
else {
|
|
790
|
-
console.log(` Latest: ${(0, ui_1.color)(`v${latestVersion}`, 'success')} ${(0, ui_1.dim)('(update available)')}`);
|
|
401
|
+
console.log(` Latest: ${(0, ui_1.color)(`v${latestCheck.latestVersion}`, 'success')} ${(0, ui_1.dim)('(update available)')}`);
|
|
791
402
|
console.log('');
|
|
792
403
|
console.log(` ${(0, ui_1.dim)('Run "ccs cliproxy --latest" to update')}`);
|
|
793
404
|
}
|
|
794
405
|
}
|
|
795
406
|
else {
|
|
796
|
-
console.log(` Latest: ${(0, ui_1.color)(`v${latestVersion}`, 'success')} ${(0, ui_1.dim)('(up to date)')}`);
|
|
407
|
+
console.log(` Latest: ${(0, ui_1.color)(`v${latestCheck.latestVersion}`, 'success')} ${(0, ui_1.dim)('(up to date)')}`);
|
|
797
408
|
}
|
|
798
409
|
}
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
const err = error;
|
|
802
|
-
console.log(` Latest: ${(0, ui_1.dim)(`Could not fetch (${err.message})`)}`);
|
|
803
|
-
}
|
|
410
|
+
else if (verbose && latestCheck.error) {
|
|
411
|
+
console.log(` Latest: ${(0, ui_1.dim)(`Could not fetch (${latestCheck.error})`)}`);
|
|
804
412
|
}
|
|
805
413
|
console.log('');
|
|
806
|
-
console.log((0, ui_1.dim)(
|
|
414
|
+
console.log((0, ui_1.dim)('Run "ccs cliproxy --help" for all available commands'));
|
|
807
415
|
console.log('');
|
|
808
416
|
}
|
|
809
|
-
|
|
810
|
-
* Install a specific version (pins the version to prevent auto-update)
|
|
811
|
-
*/
|
|
812
|
-
async function installVersion(version, verbose) {
|
|
813
|
-
// Validate version format (basic semver check)
|
|
814
|
-
if (!/^\d+\.\d+\.\d+$/.test(version)) {
|
|
815
|
-
console.error((0, ui_1.fail)('Invalid version format. Expected format: X.Y.Z (e.g., 6.5.53)'));
|
|
816
|
-
process.exit(1);
|
|
817
|
-
}
|
|
417
|
+
async function handleInstallVersion(version, verbose) {
|
|
818
418
|
console.log((0, ui_1.info)(`Installing CLIProxyAPI v${version}...`));
|
|
819
419
|
console.log('');
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
// Pin the version to prevent auto-update
|
|
823
|
-
(0, cliproxy_1.savePinnedVersion)(version);
|
|
824
|
-
console.log('');
|
|
825
|
-
console.log((0, ui_1.ok)(`CLIProxyAPI v${version} installed (pinned)`));
|
|
826
|
-
console.log('');
|
|
827
|
-
console.log((0, ui_1.dim)('This version will be used until you run:'));
|
|
828
|
-
console.log(` ${(0, ui_1.color)('ccs cliproxy --update', 'command')} ${(0, ui_1.dim)('# Update to latest and unpin')}`);
|
|
829
|
-
console.log('');
|
|
830
|
-
}
|
|
831
|
-
catch (error) {
|
|
832
|
-
const err = error;
|
|
420
|
+
const result = await (0, services_1.installVersion)(version, verbose);
|
|
421
|
+
if (!result.success) {
|
|
833
422
|
console.error('');
|
|
834
423
|
console.error((0, ui_1.fail)(`Failed to install CLIProxyAPI v${version}`));
|
|
835
|
-
console.error(` ${
|
|
424
|
+
console.error(` ${result.error}`);
|
|
836
425
|
console.error('');
|
|
837
426
|
console.error('Possible causes:');
|
|
838
427
|
console.error(' 1. Version does not exist on GitHub');
|
|
@@ -843,106 +432,87 @@ async function installVersion(version, verbose) {
|
|
|
843
432
|
console.error(' https://github.com/router-for-me/CLIProxyAPI/releases');
|
|
844
433
|
process.exit(1);
|
|
845
434
|
}
|
|
435
|
+
console.log('');
|
|
436
|
+
console.log((0, ui_1.ok)(`CLIProxyAPI v${version} installed (pinned)`));
|
|
437
|
+
console.log('');
|
|
438
|
+
console.log((0, ui_1.dim)('This version will be used until you run:'));
|
|
439
|
+
console.log(` ${(0, ui_1.color)('ccs cliproxy --update', 'command')} ${(0, ui_1.dim)('# Update to latest and unpin')}`);
|
|
440
|
+
console.log('');
|
|
846
441
|
}
|
|
847
|
-
|
|
848
|
-
* Install latest version (clears any version pin)
|
|
849
|
-
*/
|
|
850
|
-
async function installLatest(verbose) {
|
|
442
|
+
async function handleInstallLatest(verbose) {
|
|
851
443
|
console.log((0, ui_1.info)('Fetching latest CLIProxyAPI version...'));
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
const wasPinned = (0, cliproxy_1.isVersionPinned)();
|
|
856
|
-
if ((0, cliproxy_1.isCLIProxyInstalled)() && latestVersion === currentVersion && !wasPinned) {
|
|
857
|
-
console.log((0, ui_1.ok)(`Already running latest version: v${latestVersion}`));
|
|
858
|
-
return;
|
|
859
|
-
}
|
|
860
|
-
console.log((0, ui_1.info)(`Latest version: v${latestVersion}`));
|
|
861
|
-
if ((0, cliproxy_1.isCLIProxyInstalled)()) {
|
|
862
|
-
console.log((0, ui_1.info)(`Current version: v${currentVersion}`));
|
|
863
|
-
}
|
|
864
|
-
if (wasPinned) {
|
|
865
|
-
console.log((0, ui_1.info)(`Removing version pin (was v${(0, cliproxy_1.getPinnedVersion)()})`));
|
|
866
|
-
}
|
|
867
|
-
console.log('');
|
|
868
|
-
await (0, cliproxy_1.installCliproxyVersion)(latestVersion, verbose);
|
|
869
|
-
// Clear any version pin so auto-update works again
|
|
870
|
-
(0, cliproxy_1.clearPinnedVersion)();
|
|
871
|
-
console.log('');
|
|
872
|
-
console.log((0, ui_1.ok)(`CLIProxyAPI updated to v${latestVersion}`));
|
|
873
|
-
console.log((0, ui_1.dim)('Auto-update is now enabled.'));
|
|
874
|
-
console.log('');
|
|
875
|
-
}
|
|
876
|
-
catch (error) {
|
|
877
|
-
const err = error;
|
|
878
|
-
console.error((0, ui_1.fail)(`Failed to install latest version: ${err.message}`));
|
|
444
|
+
const result = await (0, services_1.installLatest)(verbose);
|
|
445
|
+
if (!result.success) {
|
|
446
|
+
console.error((0, ui_1.fail)(`Failed to install latest version: ${result.error}`));
|
|
879
447
|
process.exit(1);
|
|
880
448
|
}
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
// ============================================================================
|
|
885
|
-
/**
|
|
886
|
-
* Handle 'ccs cliproxy stop' - Stop running CLIProxy instance
|
|
887
|
-
*/
|
|
888
|
-
async function handleStop() {
|
|
889
|
-
await (0, ui_1.initUI)();
|
|
890
|
-
console.log((0, ui_1.header)('Stop CLIProxy'));
|
|
891
|
-
console.log('');
|
|
892
|
-
const result = await (0, session_tracker_1.stopProxy)();
|
|
893
|
-
if (result.stopped) {
|
|
894
|
-
console.log((0, ui_1.ok)(`CLIProxy stopped (PID ${result.pid})`));
|
|
895
|
-
if (result.sessionCount && result.sessionCount > 0) {
|
|
896
|
-
console.log((0, ui_1.info)(`${result.sessionCount} active session(s) were disconnected`));
|
|
897
|
-
}
|
|
898
|
-
}
|
|
899
|
-
else {
|
|
900
|
-
console.log((0, ui_1.warn)(result.error || 'Failed to stop CLIProxy'));
|
|
449
|
+
if (result.error?.startsWith('Already')) {
|
|
450
|
+
console.log((0, ui_1.ok)(result.error));
|
|
451
|
+
return;
|
|
901
452
|
}
|
|
902
453
|
console.log('');
|
|
454
|
+
console.log((0, ui_1.ok)(`CLIProxyAPI updated to v${result.version}`));
|
|
455
|
+
console.log((0, ui_1.dim)('Auto-update is now enabled.'));
|
|
456
|
+
console.log('');
|
|
903
457
|
}
|
|
904
|
-
|
|
905
|
-
* Handle 'ccs cliproxy status' - Show running proxy status
|
|
906
|
-
*/
|
|
907
|
-
async function handleProxyStatus() {
|
|
458
|
+
async function showHelp() {
|
|
908
459
|
await (0, ui_1.initUI)();
|
|
909
|
-
console.log((0, ui_1.header)('CLIProxy Status'));
|
|
910
460
|
console.log('');
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
461
|
+
console.log((0, ui_1.header)('CLIProxy Management'));
|
|
462
|
+
console.log('');
|
|
463
|
+
console.log((0, ui_1.subheader)('Usage:'));
|
|
464
|
+
console.log(` ${(0, ui_1.color)('ccs cliproxy', 'command')} <command> [options]`);
|
|
465
|
+
console.log('');
|
|
466
|
+
const sections = [
|
|
467
|
+
[
|
|
468
|
+
'Profile Commands:',
|
|
469
|
+
[
|
|
470
|
+
['create [name]', 'Create new CLIProxy variant profile'],
|
|
471
|
+
['list', 'List all CLIProxy variant profiles'],
|
|
472
|
+
['remove <name>', 'Remove a CLIProxy variant profile'],
|
|
473
|
+
],
|
|
474
|
+
],
|
|
475
|
+
[
|
|
476
|
+
'Proxy Lifecycle:',
|
|
477
|
+
[
|
|
478
|
+
['status', 'Show running CLIProxy status'],
|
|
479
|
+
['stop', 'Stop running CLIProxy instance'],
|
|
480
|
+
],
|
|
481
|
+
],
|
|
482
|
+
[
|
|
483
|
+
'Binary Commands:',
|
|
484
|
+
[
|
|
485
|
+
['--install <version>', 'Install and pin a specific version'],
|
|
486
|
+
['--latest', 'Install the latest version (no pin)'],
|
|
487
|
+
['--update', 'Unpin and update to latest version'],
|
|
488
|
+
],
|
|
489
|
+
],
|
|
490
|
+
];
|
|
491
|
+
for (const [title, cmds] of sections) {
|
|
492
|
+
console.log((0, ui_1.subheader)(title));
|
|
493
|
+
const maxLen = Math.max(...cmds.map(([cmd]) => cmd.length));
|
|
494
|
+
for (const [cmd, desc] of cmds) {
|
|
495
|
+
console.log(` ${(0, ui_1.color)(cmd.padEnd(maxLen + 2), 'command')} ${desc}`);
|
|
920
496
|
}
|
|
921
497
|
console.log('');
|
|
922
|
-
console.log((0, ui_1.dim)('To stop: ccs cliproxy stop'));
|
|
923
|
-
}
|
|
924
|
-
else {
|
|
925
|
-
console.log(` Status: ${(0, ui_1.color)('Not running', 'warning')}`);
|
|
926
|
-
console.log('');
|
|
927
|
-
console.log((0, ui_1.dim)('CLIProxy starts automatically when you run ccs gemini, codex, etc.'));
|
|
928
498
|
}
|
|
499
|
+
console.log((0, ui_1.dim)(' Note: CLIProxy now persists by default. Use "stop" to terminate.'));
|
|
500
|
+
console.log('');
|
|
501
|
+
console.log((0, ui_1.subheader)('Notes:'));
|
|
502
|
+
console.log(` Default fallback version: ${(0, ui_1.color)(platform_detector_1.CLIPROXY_FALLBACK_VERSION, 'info')}`);
|
|
503
|
+
console.log(` Releases: ${(0, ui_1.color)('https://github.com/router-for-me/CLIProxyAPI/releases', 'path')}`);
|
|
929
504
|
console.log('');
|
|
930
505
|
}
|
|
931
506
|
// ============================================================================
|
|
932
507
|
// MAIN ROUTER
|
|
933
508
|
// ============================================================================
|
|
934
|
-
/**
|
|
935
|
-
* Main cliproxy command handler
|
|
936
|
-
*/
|
|
937
509
|
async function handleCliproxyCommand(args) {
|
|
938
510
|
const verbose = args.includes('--verbose') || args.includes('-v');
|
|
939
511
|
const command = args[0];
|
|
940
|
-
// Handle --help
|
|
941
512
|
if (args.includes('--help') || args.includes('-h')) {
|
|
942
513
|
await showHelp();
|
|
943
514
|
return;
|
|
944
515
|
}
|
|
945
|
-
// Handle profile commands
|
|
946
516
|
if (command === 'create') {
|
|
947
517
|
await handleCreate(args.slice(1));
|
|
948
518
|
return;
|
|
@@ -955,7 +525,6 @@ async function handleCliproxyCommand(args) {
|
|
|
955
525
|
await handleRemove(args.slice(1));
|
|
956
526
|
return;
|
|
957
527
|
}
|
|
958
|
-
// Handle proxy lifecycle commands
|
|
959
528
|
if (command === 'stop') {
|
|
960
529
|
await handleStop();
|
|
961
530
|
return;
|
|
@@ -964,7 +533,6 @@ async function handleCliproxyCommand(args) {
|
|
|
964
533
|
await handleProxyStatus();
|
|
965
534
|
return;
|
|
966
535
|
}
|
|
967
|
-
// Handle --install <version>
|
|
968
536
|
const installIdx = args.indexOf('--install');
|
|
969
537
|
if (installIdx !== -1) {
|
|
970
538
|
const version = args[installIdx + 1];
|
|
@@ -974,20 +542,13 @@ async function handleCliproxyCommand(args) {
|
|
|
974
542
|
console.error(' Example: ccs cliproxy --install 6.5.53');
|
|
975
543
|
process.exit(1);
|
|
976
544
|
}
|
|
977
|
-
await
|
|
978
|
-
return;
|
|
979
|
-
}
|
|
980
|
-
// Handle --latest
|
|
981
|
-
if (args.includes('--latest')) {
|
|
982
|
-
await installLatest(verbose);
|
|
545
|
+
await handleInstallVersion(version, verbose);
|
|
983
546
|
return;
|
|
984
547
|
}
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
await installLatest(verbose);
|
|
548
|
+
if (args.includes('--latest') || args.includes('--update')) {
|
|
549
|
+
await handleInstallLatest(verbose);
|
|
988
550
|
return;
|
|
989
551
|
}
|
|
990
|
-
// Default: show status
|
|
991
552
|
await showStatus(verbose);
|
|
992
553
|
}
|
|
993
554
|
exports.handleCliproxyCommand = handleCliproxyCommand;
|