@kaitranntt/ccs 6.7.0 → 6.7.1-dev.2
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/remote-proxy-client.d.ts +3 -0
- package/dist/cliproxy/remote-proxy-client.d.ts.map +1 -1
- package/dist/cliproxy/remote-proxy-client.js +7 -3
- package/dist/cliproxy/remote-proxy-client.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--0JKEYYO.js} +1 -1
- package/dist/ui/assets/analytics-CX5PurM9.js +1 -0
- package/dist/ui/assets/api-D80tfZOx.js +1 -0
- package/dist/ui/assets/{card-CCDc-Mx9.js → card-B-DPlvgo.js} +1 -1
- package/dist/ui/assets/cliproxy-D4AoDTZB.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-DIj6qdUG.js} +1 -1
- package/dist/ui/assets/confirm-dialog-DZkzZLrs.js +1 -0
- package/dist/ui/assets/copilot-Q9tyCgYD.js +4 -0
- package/dist/ui/assets/form-utils-DP6ILe7Z.js +20 -0
- package/dist/ui/assets/health-Cw76uZRy.js +1 -0
- package/dist/ui/assets/{icons-BOsxPbiD.js → icons-ZmwVoUeR.js} +1 -1
- package/dist/ui/assets/index-C1W0iP_Z.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-CDdHW_gU.js +1 -0
- package/dist/ui/assets/{shared-BfYhSN4-.js → shared--pI8rTbP.js} +1 -1
- package/dist/ui/assets/{switch-CMk95lwf.js → switch-BP6SzLyZ.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/scripts/dev-release.sh +113 -0
- 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
|
@@ -5,48 +5,15 @@
|
|
|
5
5
|
* Manages CCS API profiles for custom API providers.
|
|
6
6
|
* Commands: create, list, remove
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - Legacy JSON format (config.json, *.settings.json) as fallback
|
|
8
|
+
* CLI parsing and output formatting only.
|
|
9
|
+
* Business logic delegated to src/api/services/.
|
|
11
10
|
*/
|
|
12
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
-
}
|
|
18
|
-
Object.defineProperty(o, k2, desc);
|
|
19
|
-
}) : (function(o, m, k, k2) {
|
|
20
|
-
if (k2 === undefined) k2 = k;
|
|
21
|
-
o[k2] = m[k];
|
|
22
|
-
}));
|
|
23
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
-
}) : function(o, v) {
|
|
26
|
-
o["default"] = v;
|
|
27
|
-
});
|
|
28
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
12
|
exports.handleApiCommand = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const os = __importStar(require("os"));
|
|
39
|
-
const path = __importStar(require("path"));
|
|
40
13
|
const ui_1 = require("../utils/ui");
|
|
41
14
|
const prompt_1 = require("../utils/prompt");
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const unified_config_loader_1 = require("../config/unified-config-loader");
|
|
45
|
-
const secrets_manager_1 = require("../config/secrets-manager");
|
|
46
|
-
const feature_flags_1 = require("../config/feature-flags");
|
|
47
|
-
/**
|
|
48
|
-
* Parse command line arguments for api commands
|
|
49
|
-
*/
|
|
15
|
+
const services_1 = require("../api/services");
|
|
16
|
+
/** Parse command line arguments for api commands */
|
|
50
17
|
function parseArgs(args) {
|
|
51
18
|
const result = {};
|
|
52
19
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -72,185 +39,7 @@ function parseArgs(args) {
|
|
|
72
39
|
}
|
|
73
40
|
return result;
|
|
74
41
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Validate API profile name
|
|
77
|
-
*/
|
|
78
|
-
function validateApiName(name) {
|
|
79
|
-
if (!name) {
|
|
80
|
-
return 'API name is required';
|
|
81
|
-
}
|
|
82
|
-
if (!/^[a-zA-Z][a-zA-Z0-9._-]*$/.test(name)) {
|
|
83
|
-
return 'API name must start with letter, contain only letters, numbers, dot, dash, underscore';
|
|
84
|
-
}
|
|
85
|
-
if (name.length > 32) {
|
|
86
|
-
return 'API name must be 32 characters or less';
|
|
87
|
-
}
|
|
88
|
-
// Use centralized reserved names list
|
|
89
|
-
if ((0, reserved_names_1.isReservedName)(name)) {
|
|
90
|
-
return `'${name}' is a reserved name`;
|
|
91
|
-
}
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Validate URL format and warn about common mistakes
|
|
96
|
-
*/
|
|
97
|
-
function validateUrl(url) {
|
|
98
|
-
if (!url) {
|
|
99
|
-
return 'Base URL is required';
|
|
100
|
-
}
|
|
101
|
-
try {
|
|
102
|
-
new URL(url);
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
return 'Invalid URL format (must include protocol, e.g., https://)';
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Check if URL looks like it includes endpoint path (common mistake)
|
|
111
|
-
* Returns warning message if problematic, null if OK
|
|
112
|
-
*/
|
|
113
|
-
function getUrlWarning(url) {
|
|
114
|
-
const problematicPaths = ['/chat/completions', '/v1/messages', '/messages', '/completions'];
|
|
115
|
-
const lowerUrl = url.toLowerCase();
|
|
116
|
-
for (const path of problematicPaths) {
|
|
117
|
-
if (lowerUrl.endsWith(path)) {
|
|
118
|
-
return (`URL ends with "${path}" - Claude appends this automatically.\n` +
|
|
119
|
-
` You likely want: ${url.replace(new RegExp(path + '$', 'i'), '')}`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Check if unified config mode is active
|
|
126
|
-
*/
|
|
127
|
-
function isUnifiedMode() {
|
|
128
|
-
return (0, unified_config_loader_1.hasUnifiedConfig)() || (0, feature_flags_1.isUnifiedConfigEnabled)();
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Check if API profile already exists in config
|
|
132
|
-
*/
|
|
133
|
-
function apiExists(name) {
|
|
134
|
-
try {
|
|
135
|
-
if (isUnifiedMode()) {
|
|
136
|
-
const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
137
|
-
return name in config.profiles;
|
|
138
|
-
}
|
|
139
|
-
const config = (0, config_manager_1.loadConfig)();
|
|
140
|
-
return name in config.profiles;
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Create settings.json file for API profile
|
|
148
|
-
* Includes all 4 model fields for proper Claude CLI integration
|
|
149
|
-
*/
|
|
150
|
-
function createSettingsFile(name, baseUrl, apiKey, models) {
|
|
151
|
-
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
152
|
-
const settingsPath = path.join(ccsDir, `${name}.settings.json`);
|
|
153
|
-
const settings = {
|
|
154
|
-
env: {
|
|
155
|
-
ANTHROPIC_BASE_URL: baseUrl,
|
|
156
|
-
ANTHROPIC_AUTH_TOKEN: apiKey,
|
|
157
|
-
ANTHROPIC_MODEL: models.default,
|
|
158
|
-
ANTHROPIC_DEFAULT_OPUS_MODEL: models.opus,
|
|
159
|
-
ANTHROPIC_DEFAULT_SONNET_MODEL: models.sonnet,
|
|
160
|
-
ANTHROPIC_DEFAULT_HAIKU_MODEL: models.haiku,
|
|
161
|
-
},
|
|
162
|
-
};
|
|
163
|
-
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
|
|
164
|
-
return settingsPath;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Update config.json with new API profile
|
|
168
|
-
*/
|
|
169
|
-
function updateConfig(name, _settingsPath) {
|
|
170
|
-
const configPath = (0, config_manager_1.getConfigPath)();
|
|
171
|
-
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
172
|
-
// Read existing config or create new
|
|
173
|
-
let config;
|
|
174
|
-
try {
|
|
175
|
-
config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
176
|
-
}
|
|
177
|
-
catch {
|
|
178
|
-
config = { profiles: {} };
|
|
179
|
-
}
|
|
180
|
-
// Use relative path with ~ for portability
|
|
181
|
-
const relativePath = `~/.ccs/${name}.settings.json`;
|
|
182
|
-
config.profiles[name] = relativePath;
|
|
183
|
-
// Ensure directory exists
|
|
184
|
-
if (!fs.existsSync(ccsDir)) {
|
|
185
|
-
fs.mkdirSync(ccsDir, { recursive: true });
|
|
186
|
-
}
|
|
187
|
-
// Write config atomically (write to temp, then rename)
|
|
188
|
-
const tempPath = configPath + '.tmp';
|
|
189
|
-
fs.writeFileSync(tempPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
|
|
190
|
-
fs.renameSync(tempPath, configPath);
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Create API profile in unified config
|
|
194
|
-
* Creates *.settings.json file and stores reference in config.yaml
|
|
195
|
-
* (matching Claude's ~/.claude/settings.json pattern)
|
|
196
|
-
*/
|
|
197
|
-
function createApiProfileUnified(name, baseUrl, apiKey, models) {
|
|
198
|
-
const ccsDir = path.join(os.homedir(), '.ccs');
|
|
199
|
-
const settingsFile = `${name}.settings.json`;
|
|
200
|
-
const settingsPath = path.join(ccsDir, settingsFile);
|
|
201
|
-
// Create settings file with all env vars (matching Claude's pattern)
|
|
202
|
-
const settings = {
|
|
203
|
-
env: {
|
|
204
|
-
ANTHROPIC_BASE_URL: baseUrl,
|
|
205
|
-
ANTHROPIC_AUTH_TOKEN: apiKey,
|
|
206
|
-
ANTHROPIC_MODEL: models.default,
|
|
207
|
-
ANTHROPIC_DEFAULT_OPUS_MODEL: models.opus,
|
|
208
|
-
ANTHROPIC_DEFAULT_SONNET_MODEL: models.sonnet,
|
|
209
|
-
ANTHROPIC_DEFAULT_HAIKU_MODEL: models.haiku,
|
|
210
|
-
},
|
|
211
|
-
};
|
|
212
|
-
// Ensure directory exists
|
|
213
|
-
if (!fs.existsSync(ccsDir)) {
|
|
214
|
-
fs.mkdirSync(ccsDir, { recursive: true });
|
|
215
|
-
}
|
|
216
|
-
// Write settings file
|
|
217
|
-
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
|
|
218
|
-
// Store reference in config.yaml
|
|
219
|
-
const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
220
|
-
config.profiles[name] = {
|
|
221
|
-
type: 'api',
|
|
222
|
-
settings: `~/.ccs/${settingsFile}`,
|
|
223
|
-
};
|
|
224
|
-
(0, unified_config_loader_1.saveUnifiedConfig)(config);
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Remove API profile from unified config
|
|
228
|
-
*/
|
|
229
|
-
function removeApiProfileUnified(name) {
|
|
230
|
-
const config = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
231
|
-
const profile = config.profiles[name];
|
|
232
|
-
if (!profile) {
|
|
233
|
-
throw new Error(`API profile not found: ${name}`);
|
|
234
|
-
}
|
|
235
|
-
// Delete the settings file if it exists
|
|
236
|
-
if (profile.settings) {
|
|
237
|
-
const settingsPath = profile.settings.replace(/^~/, os.homedir());
|
|
238
|
-
if (fs.existsSync(settingsPath)) {
|
|
239
|
-
fs.unlinkSync(settingsPath);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
delete config.profiles[name];
|
|
243
|
-
// Clear default if it was the deleted profile
|
|
244
|
-
if (config.default === name) {
|
|
245
|
-
config.default = undefined;
|
|
246
|
-
}
|
|
247
|
-
(0, unified_config_loader_1.saveUnifiedConfig)(config);
|
|
248
|
-
// Remove any legacy secrets (backward compat)
|
|
249
|
-
(0, secrets_manager_1.deleteAllProfileSecrets)(name);
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Handle 'ccs api create' command
|
|
253
|
-
*/
|
|
42
|
+
/** Handle 'ccs api create' command */
|
|
254
43
|
async function handleCreate(args) {
|
|
255
44
|
await (0, ui_1.initUI)();
|
|
256
45
|
const parsedArgs = parseArgs(args);
|
|
@@ -260,18 +49,18 @@ async function handleCreate(args) {
|
|
|
260
49
|
let name = parsedArgs.name;
|
|
261
50
|
if (!name) {
|
|
262
51
|
name = await prompt_1.InteractivePrompt.input('API name', {
|
|
263
|
-
validate: validateApiName,
|
|
52
|
+
validate: services_1.validateApiName,
|
|
264
53
|
});
|
|
265
54
|
}
|
|
266
55
|
else {
|
|
267
|
-
const error = validateApiName(name);
|
|
56
|
+
const error = (0, services_1.validateApiName)(name);
|
|
268
57
|
if (error) {
|
|
269
58
|
console.log((0, ui_1.fail)(error));
|
|
270
59
|
process.exit(1);
|
|
271
60
|
}
|
|
272
61
|
}
|
|
273
62
|
// Check if exists
|
|
274
|
-
if (
|
|
63
|
+
if ((0, services_1.apiProfileExists)(name) && !parsedArgs.force) {
|
|
275
64
|
console.log((0, ui_1.fail)(`API '${name}' already exists`));
|
|
276
65
|
console.log(` Use ${(0, ui_1.color)('--force', 'command')} to overwrite`);
|
|
277
66
|
process.exit(1);
|
|
@@ -279,19 +68,17 @@ async function handleCreate(args) {
|
|
|
279
68
|
// Step 2: Base URL
|
|
280
69
|
let baseUrl = parsedArgs.baseUrl;
|
|
281
70
|
if (!baseUrl) {
|
|
282
|
-
baseUrl = await prompt_1.InteractivePrompt.input('API Base URL (e.g., https://api.example.com/v1 - without /chat/completions)', {
|
|
283
|
-
validate: validateUrl,
|
|
284
|
-
});
|
|
71
|
+
baseUrl = await prompt_1.InteractivePrompt.input('API Base URL (e.g., https://api.example.com/v1 - without /chat/completions)', { validate: services_1.validateUrl });
|
|
285
72
|
}
|
|
286
73
|
else {
|
|
287
|
-
const error = validateUrl(baseUrl);
|
|
74
|
+
const error = (0, services_1.validateUrl)(baseUrl);
|
|
288
75
|
if (error) {
|
|
289
76
|
console.log((0, ui_1.fail)(error));
|
|
290
77
|
process.exit(1);
|
|
291
78
|
}
|
|
292
79
|
}
|
|
293
80
|
// Check for common URL mistakes and warn
|
|
294
|
-
const urlWarning = getUrlWarning(baseUrl);
|
|
81
|
+
const urlWarning = (0, services_1.getUrlWarning)(baseUrl);
|
|
295
82
|
if (urlWarning) {
|
|
296
83
|
console.log('');
|
|
297
84
|
console.log((0, ui_1.warn)(urlWarning));
|
|
@@ -299,10 +86,9 @@ async function handleCreate(args) {
|
|
|
299
86
|
default: false,
|
|
300
87
|
});
|
|
301
88
|
if (!continueAnyway) {
|
|
302
|
-
// Let user re-enter URL
|
|
303
89
|
baseUrl = await prompt_1.InteractivePrompt.input('API Base URL', {
|
|
304
|
-
validate: validateUrl,
|
|
305
|
-
default:
|
|
90
|
+
validate: services_1.validateUrl,
|
|
91
|
+
default: (0, services_1.sanitizeBaseUrl)(baseUrl),
|
|
306
92
|
});
|
|
307
93
|
}
|
|
308
94
|
}
|
|
@@ -315,7 +101,7 @@ async function handleCreate(args) {
|
|
|
315
101
|
process.exit(1);
|
|
316
102
|
}
|
|
317
103
|
}
|
|
318
|
-
// Step 4: Model
|
|
104
|
+
// Step 4: Model configuration
|
|
319
105
|
const defaultModel = 'claude-sonnet-4-5-20250929';
|
|
320
106
|
let model = parsedArgs.model;
|
|
321
107
|
if (!model && !parsedArgs.yes) {
|
|
@@ -325,14 +111,11 @@ async function handleCreate(args) {
|
|
|
325
111
|
}
|
|
326
112
|
model = model || defaultModel;
|
|
327
113
|
// Step 5: Model mapping for Opus/Sonnet/Haiku
|
|
328
|
-
// Auto-show if user entered a custom model, otherwise ask
|
|
329
114
|
let opusModel = model;
|
|
330
115
|
let sonnetModel = model;
|
|
331
116
|
let haikuModel = model;
|
|
332
117
|
const isCustomModel = model !== defaultModel;
|
|
333
118
|
if (!parsedArgs.yes) {
|
|
334
|
-
// If user entered custom model, auto-prompt for model mapping
|
|
335
|
-
// Otherwise, ask if they want to configure it
|
|
336
119
|
let wantCustomMapping = isCustomModel;
|
|
337
120
|
if (!isCustomModel) {
|
|
338
121
|
console.log('');
|
|
@@ -341,12 +124,9 @@ async function handleCreate(args) {
|
|
|
341
124
|
}
|
|
342
125
|
if (wantCustomMapping) {
|
|
343
126
|
console.log('');
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
else {
|
|
348
|
-
console.log((0, ui_1.dim)('Leave blank to use the default model for each.'));
|
|
349
|
-
}
|
|
127
|
+
console.log((0, ui_1.dim)(isCustomModel
|
|
128
|
+
? 'Configure model IDs for each tier (defaults to your model):'
|
|
129
|
+
: 'Leave blank to use the default model for each.'));
|
|
350
130
|
opusModel =
|
|
351
131
|
(await prompt_1.InteractivePrompt.input('Opus model (ANTHROPIC_DEFAULT_OPUS_MODEL)', {
|
|
352
132
|
default: model,
|
|
@@ -361,206 +141,88 @@ async function handleCreate(args) {
|
|
|
361
141
|
})) || model;
|
|
362
142
|
}
|
|
363
143
|
}
|
|
364
|
-
// Build model mapping
|
|
365
144
|
const models = {
|
|
366
145
|
default: model,
|
|
367
146
|
opus: opusModel,
|
|
368
147
|
sonnet: sonnetModel,
|
|
369
148
|
haiku: haikuModel,
|
|
370
149
|
};
|
|
371
|
-
//
|
|
372
|
-
const hasCustomMapping = opusModel !== model || sonnetModel !== model || haikuModel !== model;
|
|
373
|
-
// Create files
|
|
150
|
+
// Create profile
|
|
374
151
|
console.log('');
|
|
375
152
|
console.log((0, ui_1.info)('Creating API profile...'));
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
// Use unified config format
|
|
380
|
-
createApiProfileUnified(name, baseUrl, apiKey, models);
|
|
381
|
-
console.log('');
|
|
382
|
-
// Build info message
|
|
383
|
-
let infoMsg = `API: ${name}\n` +
|
|
384
|
-
`Config: ~/.ccs/config.yaml\n` +
|
|
385
|
-
`Settings: ${settingsFile}\n` +
|
|
386
|
-
`Base URL: ${baseUrl}\n` +
|
|
387
|
-
`Model: ${model}`;
|
|
388
|
-
if (hasCustomMapping) {
|
|
389
|
-
infoMsg +=
|
|
390
|
-
`\n\nModel Mapping:\n` +
|
|
391
|
-
` Opus: ${opusModel}\n` +
|
|
392
|
-
` Sonnet: ${sonnetModel}\n` +
|
|
393
|
-
` Haiku: ${haikuModel}`;
|
|
394
|
-
}
|
|
395
|
-
console.log((0, ui_1.infoBox)(infoMsg, 'API Profile Created'));
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
// Use legacy JSON format
|
|
399
|
-
const settingsPath = createSettingsFile(name, baseUrl, apiKey, models);
|
|
400
|
-
updateConfig(name, settingsPath);
|
|
401
|
-
console.log('');
|
|
402
|
-
let infoMsg = `API: ${name}\n` +
|
|
403
|
-
`Settings: ${settingsFile}\n` +
|
|
404
|
-
`Base URL: ${baseUrl}\n` +
|
|
405
|
-
`Model: ${model}`;
|
|
406
|
-
if (hasCustomMapping) {
|
|
407
|
-
infoMsg +=
|
|
408
|
-
`\n\nModel Mapping:\n` +
|
|
409
|
-
` Opus: ${opusModel}\n` +
|
|
410
|
-
` Sonnet: ${sonnetModel}\n` +
|
|
411
|
-
` Haiku: ${haikuModel}`;
|
|
412
|
-
}
|
|
413
|
-
console.log((0, ui_1.infoBox)(infoMsg, 'API Profile Created'));
|
|
414
|
-
}
|
|
415
|
-
console.log('');
|
|
416
|
-
console.log((0, ui_1.header)('Usage'));
|
|
417
|
-
console.log(` ${(0, ui_1.color)(`ccs ${name} "your prompt"`, 'command')}`);
|
|
418
|
-
console.log('');
|
|
419
|
-
console.log((0, ui_1.header)('Edit Settings'));
|
|
420
|
-
console.log(` ${(0, ui_1.dim)('To modify env vars later:')}`);
|
|
421
|
-
console.log(` ${(0, ui_1.color)(`nano ${settingsFile.replace('~', '$HOME')}`, 'command')}`);
|
|
422
|
-
console.log('');
|
|
423
|
-
}
|
|
424
|
-
catch (error) {
|
|
425
|
-
console.log((0, ui_1.fail)(`Failed to create API profile: ${error.message}`));
|
|
153
|
+
const result = (0, services_1.createApiProfile)(name, baseUrl, apiKey, models);
|
|
154
|
+
if (!result.success) {
|
|
155
|
+
console.log((0, ui_1.fail)(`Failed to create API profile: ${result.error}`));
|
|
426
156
|
process.exit(1);
|
|
427
157
|
}
|
|
158
|
+
// Display success
|
|
159
|
+
console.log('');
|
|
160
|
+
const hasCustomMapping = opusModel !== model || sonnetModel !== model || haikuModel !== model;
|
|
161
|
+
let infoMsg = `API: ${name}\n` +
|
|
162
|
+
`Config: ${(0, services_1.isUsingUnifiedConfig)() ? '~/.ccs/config.yaml' : '~/.ccs/config.json'}\n` +
|
|
163
|
+
`Settings: ${result.settingsFile}\n` +
|
|
164
|
+
`Base URL: ${baseUrl}\n` +
|
|
165
|
+
`Model: ${model}`;
|
|
166
|
+
if (hasCustomMapping) {
|
|
167
|
+
infoMsg +=
|
|
168
|
+
`\n\nModel Mapping:\n` +
|
|
169
|
+
` Opus: ${opusModel}\n` +
|
|
170
|
+
` Sonnet: ${sonnetModel}\n` +
|
|
171
|
+
` Haiku: ${haikuModel}`;
|
|
172
|
+
}
|
|
173
|
+
console.log((0, ui_1.infoBox)(infoMsg, 'API Profile Created'));
|
|
174
|
+
console.log('');
|
|
175
|
+
console.log((0, ui_1.header)('Usage'));
|
|
176
|
+
console.log(` ${(0, ui_1.color)(`ccs ${name} "your prompt"`, 'command')}`);
|
|
177
|
+
console.log('');
|
|
178
|
+
console.log((0, ui_1.header)('Edit Settings'));
|
|
179
|
+
console.log(` ${(0, ui_1.dim)('To modify env vars later:')}`);
|
|
180
|
+
console.log(` ${(0, ui_1.color)(`nano ${result.settingsFile.replace('~', '$HOME')}`, 'command')}`);
|
|
181
|
+
console.log('');
|
|
428
182
|
}
|
|
429
|
-
/**
|
|
430
|
-
* Check if API profile has real API key (not placeholder)
|
|
431
|
-
*/
|
|
432
|
-
function isApiConfigured(apiName) {
|
|
433
|
-
try {
|
|
434
|
-
if (isUnifiedMode()) {
|
|
435
|
-
// Check secrets.yaml for unified config
|
|
436
|
-
const { getProfileSecrets } = require('../config/secrets-manager');
|
|
437
|
-
const secrets = getProfileSecrets(apiName);
|
|
438
|
-
const token = secrets?.ANTHROPIC_AUTH_TOKEN || '';
|
|
439
|
-
return token.length > 0 && !token.includes('YOUR_') && !token.includes('your-');
|
|
440
|
-
}
|
|
441
|
-
// Legacy: check settings.json file
|
|
442
|
-
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
443
|
-
const settingsPath = path.join(ccsDir, `${apiName}.settings.json`);
|
|
444
|
-
if (!fs.existsSync(settingsPath))
|
|
445
|
-
return false;
|
|
446
|
-
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
447
|
-
const token = settings?.env?.ANTHROPIC_AUTH_TOKEN || '';
|
|
448
|
-
// Check if it's a placeholder or empty
|
|
449
|
-
return token.length > 0 && !token.includes('YOUR_') && !token.includes('your-');
|
|
450
|
-
}
|
|
451
|
-
catch {
|
|
452
|
-
return false;
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
/**
|
|
456
|
-
* Handle 'ccs api list' command
|
|
457
|
-
*/
|
|
183
|
+
/** Handle 'ccs api list' command */
|
|
458
184
|
async function handleList() {
|
|
459
185
|
await (0, ui_1.initUI)();
|
|
460
186
|
console.log((0, ui_1.header)('CCS API Profiles'));
|
|
461
187
|
console.log('');
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
466
|
-
const apis = Object.keys(unifiedConfig.profiles);
|
|
467
|
-
if (apis.length === 0) {
|
|
468
|
-
console.log((0, ui_1.warn)('No API profiles configured'));
|
|
469
|
-
console.log('');
|
|
470
|
-
console.log('To create an API profile:');
|
|
471
|
-
console.log(` ${(0, ui_1.color)('ccs api create', 'command')}`);
|
|
472
|
-
console.log('');
|
|
473
|
-
return;
|
|
474
|
-
}
|
|
475
|
-
// Build table data with status indicators
|
|
476
|
-
const rows = apis.map((name) => {
|
|
477
|
-
const status = isApiConfigured(name) ? (0, ui_1.color)('[OK]', 'success') : (0, ui_1.color)('[!]', 'warning');
|
|
478
|
-
return [name, 'config.yaml', status];
|
|
479
|
-
});
|
|
480
|
-
// Print table
|
|
481
|
-
console.log((0, ui_1.table)(rows, {
|
|
482
|
-
head: ['API', 'Config', 'Status'],
|
|
483
|
-
colWidths: [15, 20, 10],
|
|
484
|
-
}));
|
|
485
|
-
console.log('');
|
|
486
|
-
// Show CLIProxy variants if any
|
|
487
|
-
const variants = Object.keys(unifiedConfig.cliproxy?.variants || {});
|
|
488
|
-
if (variants.length > 0) {
|
|
489
|
-
console.log((0, ui_1.subheader)('CLIProxy Variants'));
|
|
490
|
-
const cliproxyRows = variants.map((name) => {
|
|
491
|
-
const variant = unifiedConfig.cliproxy?.variants[name];
|
|
492
|
-
return [name, variant?.provider || 'unknown', variant?.settings || '-'];
|
|
493
|
-
});
|
|
494
|
-
console.log((0, ui_1.table)(cliproxyRows, {
|
|
495
|
-
head: ['Variant', 'Provider', 'Settings'],
|
|
496
|
-
colWidths: [15, 15, 30],
|
|
497
|
-
}));
|
|
498
|
-
console.log('');
|
|
499
|
-
}
|
|
500
|
-
console.log((0, ui_1.dim)(`Total: ${apis.length} API profile(s)`));
|
|
501
|
-
console.log('');
|
|
502
|
-
return;
|
|
503
|
-
}
|
|
504
|
-
// Legacy: list from config.json
|
|
505
|
-
const config = (0, config_manager_1.loadConfig)();
|
|
506
|
-
const apis = Object.keys(config.profiles);
|
|
507
|
-
if (apis.length === 0) {
|
|
508
|
-
console.log((0, ui_1.warn)('No API profiles configured'));
|
|
509
|
-
console.log('');
|
|
510
|
-
console.log('To create an API profile:');
|
|
511
|
-
console.log(` ${(0, ui_1.color)('ccs api create', 'command')}`);
|
|
512
|
-
console.log('');
|
|
513
|
-
return;
|
|
514
|
-
}
|
|
515
|
-
// Build table data with status indicators
|
|
516
|
-
const rows = apis.map((name) => {
|
|
517
|
-
const settingsPath = config.profiles[name];
|
|
518
|
-
const status = isApiConfigured(name) ? (0, ui_1.color)('[OK]', 'success') : (0, ui_1.color)('[!]', 'warning');
|
|
519
|
-
return [name, settingsPath, status];
|
|
520
|
-
});
|
|
521
|
-
// Print table
|
|
522
|
-
console.log((0, ui_1.table)(rows, {
|
|
523
|
-
head: ['API', 'Settings File', 'Status'],
|
|
524
|
-
colWidths: [15, 35, 10],
|
|
525
|
-
}));
|
|
188
|
+
const { profiles, variants } = (0, services_1.listApiProfiles)();
|
|
189
|
+
if (profiles.length === 0) {
|
|
190
|
+
console.log((0, ui_1.warn)('No API profiles configured'));
|
|
526
191
|
console.log('');
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
console.log((0, ui_1.subheader)('CLIProxy Variants'));
|
|
530
|
-
const cliproxyRows = Object.entries(config.cliproxy).map(([name, v]) => {
|
|
531
|
-
const variant = v;
|
|
532
|
-
return [name, variant.provider, variant.settings];
|
|
533
|
-
});
|
|
534
|
-
console.log((0, ui_1.table)(cliproxyRows, {
|
|
535
|
-
head: ['Variant', 'Provider', 'Settings'],
|
|
536
|
-
colWidths: [15, 15, 30],
|
|
537
|
-
}));
|
|
538
|
-
console.log('');
|
|
539
|
-
}
|
|
540
|
-
console.log((0, ui_1.dim)(`Total: ${apis.length} API profile(s)`));
|
|
192
|
+
console.log('To create an API profile:');
|
|
193
|
+
console.log(` ${(0, ui_1.color)('ccs api create', 'command')}`);
|
|
541
194
|
console.log('');
|
|
195
|
+
return;
|
|
542
196
|
}
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
197
|
+
// Build table data
|
|
198
|
+
const rows = profiles.map((p) => {
|
|
199
|
+
const status = p.isConfigured ? (0, ui_1.color)('[OK]', 'success') : (0, ui_1.color)('[!]', 'warning');
|
|
200
|
+
return [p.name, p.settingsPath, status];
|
|
201
|
+
});
|
|
202
|
+
const colWidths = (0, services_1.isUsingUnifiedConfig)() ? [15, 20, 10] : [15, 35, 10];
|
|
203
|
+
console.log((0, ui_1.table)(rows, {
|
|
204
|
+
head: ['API', (0, services_1.isUsingUnifiedConfig)() ? 'Config' : 'Settings File', 'Status'],
|
|
205
|
+
colWidths,
|
|
206
|
+
}));
|
|
207
|
+
console.log('');
|
|
208
|
+
// Show CLIProxy variants if any
|
|
209
|
+
if (variants.length > 0) {
|
|
210
|
+
console.log((0, ui_1.subheader)('CLIProxy Variants'));
|
|
211
|
+
const cliproxyRows = variants.map((v) => [v.name, v.provider, v.settings]);
|
|
212
|
+
console.log((0, ui_1.table)(cliproxyRows, {
|
|
213
|
+
head: ['Variant', 'Provider', 'Settings'],
|
|
214
|
+
colWidths: [15, 15, 30],
|
|
215
|
+
}));
|
|
216
|
+
console.log('');
|
|
546
217
|
}
|
|
218
|
+
console.log((0, ui_1.dim)(`Total: ${profiles.length} API profile(s)`));
|
|
219
|
+
console.log('');
|
|
547
220
|
}
|
|
548
|
-
/**
|
|
549
|
-
* Handle 'ccs api remove' command
|
|
550
|
-
*/
|
|
221
|
+
/** Handle 'ccs api remove' command */
|
|
551
222
|
async function handleRemove(args) {
|
|
552
223
|
await (0, ui_1.initUI)();
|
|
553
224
|
const parsedArgs = parseArgs(args);
|
|
554
|
-
|
|
555
|
-
let apis;
|
|
556
|
-
if (isUnifiedMode()) {
|
|
557
|
-
const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
558
|
-
apis = Object.keys(unifiedConfig.profiles);
|
|
559
|
-
}
|
|
560
|
-
else {
|
|
561
|
-
const config = (0, config_manager_1.loadConfig)();
|
|
562
|
-
apis = Object.keys(config.profiles);
|
|
563
|
-
}
|
|
225
|
+
const apis = (0, services_1.getApiProfileNames)();
|
|
564
226
|
if (apis.length === 0) {
|
|
565
227
|
console.log((0, ui_1.warn)('No API profiles to remove'));
|
|
566
228
|
process.exit(0);
|
|
@@ -593,7 +255,7 @@ async function handleRemove(args) {
|
|
|
593
255
|
// Confirm deletion
|
|
594
256
|
console.log('');
|
|
595
257
|
console.log(`API '${(0, ui_1.color)(name, 'command')}' will be removed.`);
|
|
596
|
-
if (
|
|
258
|
+
if ((0, services_1.isUsingUnifiedConfig)()) {
|
|
597
259
|
console.log(' Config: ~/.ccs/config.yaml');
|
|
598
260
|
console.log(' Secrets: ~/.ccs/secrets.yaml');
|
|
599
261
|
}
|
|
@@ -607,36 +269,15 @@ async function handleRemove(args) {
|
|
|
607
269
|
console.log((0, ui_1.info)('Cancelled'));
|
|
608
270
|
process.exit(0);
|
|
609
271
|
}
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
removeApiProfileUnified(name);
|
|
614
|
-
}
|
|
615
|
-
else {
|
|
616
|
-
// Remove from legacy config.json
|
|
617
|
-
const config = (0, config_manager_1.loadConfig)();
|
|
618
|
-
delete config.profiles[name];
|
|
619
|
-
const configPath = (0, config_manager_1.getConfigPath)();
|
|
620
|
-
const tempPath = configPath + '.tmp';
|
|
621
|
-
fs.writeFileSync(tempPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
|
|
622
|
-
fs.renameSync(tempPath, configPath);
|
|
623
|
-
// Remove settings file if it exists
|
|
624
|
-
const expandedPath = path.join((0, config_manager_1.getCcsDir)(), `${name}.settings.json`);
|
|
625
|
-
if (fs.existsSync(expandedPath)) {
|
|
626
|
-
fs.unlinkSync(expandedPath);
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
console.log((0, ui_1.ok)(`API profile removed: ${name}`));
|
|
630
|
-
console.log('');
|
|
631
|
-
}
|
|
632
|
-
catch (error) {
|
|
633
|
-
console.log((0, ui_1.fail)(`Failed to remove API profile: ${error.message}`));
|
|
272
|
+
const result = (0, services_1.removeApiProfile)(name);
|
|
273
|
+
if (!result.success) {
|
|
274
|
+
console.log((0, ui_1.fail)(`Failed to remove API profile: ${result.error}`));
|
|
634
275
|
process.exit(1);
|
|
635
276
|
}
|
|
277
|
+
console.log((0, ui_1.ok)(`API profile removed: ${name}`));
|
|
278
|
+
console.log('');
|
|
636
279
|
}
|
|
637
|
-
/**
|
|
638
|
-
* Show help for api commands
|
|
639
|
-
*/
|
|
280
|
+
/** Show help for api commands */
|
|
640
281
|
async function showHelp() {
|
|
641
282
|
await (0, ui_1.initUI)();
|
|
642
283
|
console.log((0, ui_1.header)('CCS API Management'));
|
|
@@ -670,9 +311,7 @@ async function showHelp() {
|
|
|
670
311
|
console.log(` ${(0, ui_1.color)('ccs api list', 'command')}`);
|
|
671
312
|
console.log('');
|
|
672
313
|
}
|
|
673
|
-
/**
|
|
674
|
-
* Main api command router
|
|
675
|
-
*/
|
|
314
|
+
/** Main api command router */
|
|
676
315
|
async function handleApiCommand(args) {
|
|
677
316
|
const command = args[0];
|
|
678
317
|
if (!command || command === '--help' || command === '-h' || command === 'help') {
|