@kaitranntt/ccs 6.7.0-dev.5 → 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
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Headless executor for Claude CLI delegation
|
|
5
|
+
* Spawns claude with -p flag for single-turn execution
|
|
6
|
+
*/
|
|
3
7
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
8
|
if (k2 === undefined) k2 = k;
|
|
5
9
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -32,9 +36,10 @@ const fs = __importStar(require("fs"));
|
|
|
32
36
|
const session_manager_1 = require("./session-manager");
|
|
33
37
|
const settings_parser_1 = require("./settings-parser");
|
|
34
38
|
const ui_1 = require("../utils/ui");
|
|
39
|
+
const stream_parser_1 = require("./executor/stream-parser");
|
|
40
|
+
const result_aggregator_1 = require("./executor/result-aggregator");
|
|
35
41
|
/**
|
|
36
42
|
* Headless executor for Claude CLI delegation
|
|
37
|
-
* Spawns claude with -p flag for single-turn execution
|
|
38
43
|
*/
|
|
39
44
|
class HeadlessExecutor {
|
|
40
45
|
/**
|
|
@@ -63,21 +68,17 @@ class HeadlessExecutor {
|
|
|
63
68
|
throw new Error(`Settings file not found: ${settingsPath}\nProfile "${profile}" may not be configured.`);
|
|
64
69
|
}
|
|
65
70
|
// Smart slash command detection and preservation
|
|
66
|
-
// Detects if prompt contains slash command and restructures for proper execution
|
|
67
71
|
const processedPrompt = this._processSlashCommand(enhancedPrompt);
|
|
68
72
|
// Prepare arguments
|
|
69
73
|
const args = ['-p', processedPrompt, '--settings', settingsPath];
|
|
70
74
|
// Always use stream-json for real-time progress visibility
|
|
71
|
-
// Note: --verbose is required when using --print with stream-json
|
|
72
75
|
args.push('--output-format', 'stream-json', '--verbose');
|
|
73
76
|
// Add permission mode
|
|
74
77
|
if (permissionMode && permissionMode !== 'default') {
|
|
75
78
|
if (permissionMode === 'bypassPermissions') {
|
|
76
79
|
args.push('--dangerously-skip-permissions');
|
|
77
|
-
// Warn about dangerous mode
|
|
78
80
|
if (process.env.CCS_DEBUG) {
|
|
79
81
|
console.warn((0, ui_1.warn)('WARNING: Using --dangerously-skip-permissions mode'));
|
|
80
|
-
console.warn((0, ui_1.warn)('This bypasses ALL permission checks. Use only in trusted environments.'));
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
else {
|
|
@@ -90,17 +91,12 @@ class HeadlessExecutor {
|
|
|
90
91
|
if (lastSession) {
|
|
91
92
|
args.push('--resume', lastSession.sessionId);
|
|
92
93
|
if (process.env.CCS_DEBUG) {
|
|
93
|
-
const cost = lastSession.totalCost
|
|
94
|
-
|
|
95
|
-
: '0.0000';
|
|
96
|
-
console.error((0, ui_1.info)(`Resuming session: ${lastSession.sessionId} (${lastSession.turns} turns, $${cost})`));
|
|
94
|
+
const cost = lastSession.totalCost?.toFixed(4) || '0.0000';
|
|
95
|
+
console.error((0, ui_1.info)(`Resuming session: ${lastSession.sessionId} ($${cost})`));
|
|
97
96
|
}
|
|
98
97
|
}
|
|
99
98
|
else if (sessionId) {
|
|
100
99
|
args.push('--resume', sessionId);
|
|
101
|
-
if (process.env.CCS_DEBUG) {
|
|
102
|
-
console.error((0, ui_1.info)(`Resuming specific session: ${sessionId}`));
|
|
103
|
-
}
|
|
104
100
|
}
|
|
105
101
|
else {
|
|
106
102
|
console.warn((0, ui_1.warn)('No previous session found, starting new session'));
|
|
@@ -108,37 +104,43 @@ class HeadlessExecutor {
|
|
|
108
104
|
}
|
|
109
105
|
else if (sessionId) {
|
|
110
106
|
args.push('--resume', sessionId);
|
|
111
|
-
if (process.env.CCS_DEBUG) {
|
|
112
|
-
console.error((0, ui_1.info)(`Resuming specific session: ${sessionId}`));
|
|
113
|
-
}
|
|
114
107
|
}
|
|
115
108
|
// Add tool restrictions from settings
|
|
116
109
|
const toolRestrictions = settings_parser_1.SettingsParser.parseToolRestrictions(cwd);
|
|
117
110
|
if (toolRestrictions.allowedTools.length > 0) {
|
|
118
|
-
args.push('--allowedTools');
|
|
119
|
-
toolRestrictions.allowedTools.forEach((tool) => args.push(tool));
|
|
111
|
+
args.push('--allowedTools', ...toolRestrictions.allowedTools);
|
|
120
112
|
}
|
|
121
113
|
if (toolRestrictions.disallowedTools.length > 0) {
|
|
122
|
-
args.push('--disallowedTools');
|
|
123
|
-
toolRestrictions.disallowedTools.forEach((tool) => args.push(tool));
|
|
114
|
+
args.push('--disallowedTools', ...toolRestrictions.disallowedTools);
|
|
124
115
|
}
|
|
125
|
-
//
|
|
126
|
-
// Passthrough extra args (from Claude CLI flags like --agent, --system-prompt-file, etc.)
|
|
116
|
+
// Passthrough extra args
|
|
127
117
|
if (extraArgs.length > 0) {
|
|
128
118
|
args.push(...extraArgs);
|
|
129
119
|
}
|
|
130
|
-
// Debug log args
|
|
131
120
|
if (process.env.CCS_DEBUG) {
|
|
132
121
|
console.error((0, ui_1.info)(`Claude CLI args: ${args.join(' ')}`));
|
|
133
122
|
}
|
|
134
123
|
// Initialize UI before spawning
|
|
135
124
|
await ui_1.ui.init();
|
|
136
125
|
// Execute with spawn
|
|
126
|
+
return this._spawnAndExecute(claudeCli, args, {
|
|
127
|
+
cwd,
|
|
128
|
+
profile,
|
|
129
|
+
timeout,
|
|
130
|
+
resumeSession,
|
|
131
|
+
sessionId,
|
|
132
|
+
sessionMgr,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Spawn Claude CLI and handle execution
|
|
137
|
+
*/
|
|
138
|
+
static _spawnAndExecute(claudeCli, args, ctx) {
|
|
139
|
+
const { cwd, profile, timeout, resumeSession, sessionId, sessionMgr } = ctx;
|
|
137
140
|
return new Promise((resolve, reject) => {
|
|
138
141
|
const startTime = Date.now();
|
|
139
|
-
// Show progress unless explicitly disabled with CCS_QUIET
|
|
140
142
|
const showProgress = !process.env.CCS_QUIET;
|
|
141
|
-
|
|
143
|
+
const streamBuffer = new stream_parser_1.StreamBuffer();
|
|
142
144
|
if (showProgress) {
|
|
143
145
|
const modelName = profile === 'glm' ? 'GLM-4.6' : profile === 'kimi' ? 'Kimi' : profile.toUpperCase();
|
|
144
146
|
console.error(ui_1.ui.info(`Delegating to ${modelName}...`));
|
|
@@ -151,416 +153,207 @@ class HeadlessExecutor {
|
|
|
151
153
|
let stdout = '';
|
|
152
154
|
let stderr = '';
|
|
153
155
|
let progressInterval;
|
|
154
|
-
const messages = [];
|
|
155
|
-
let
|
|
156
|
-
//
|
|
157
|
-
// When main Claude session is killed, cleanup spawned child process
|
|
156
|
+
const messages = [];
|
|
157
|
+
let timedOut = false;
|
|
158
|
+
// Setup signal handlers for cleanup
|
|
158
159
|
const cleanupHandler = () => {
|
|
159
160
|
if (!proc.killed) {
|
|
160
|
-
if (process.env.CCS_DEBUG) {
|
|
161
|
-
console.error((0, ui_1.warn)('Parent process terminating, killing delegated session...'));
|
|
162
|
-
}
|
|
163
161
|
proc.kill('SIGTERM');
|
|
164
|
-
// Force kill if not dead after 2s
|
|
165
162
|
setTimeout(() => {
|
|
166
|
-
if (!proc.killed)
|
|
163
|
+
if (!proc.killed)
|
|
167
164
|
proc.kill('SIGKILL');
|
|
168
|
-
}
|
|
169
165
|
}, 2000);
|
|
170
166
|
}
|
|
171
167
|
};
|
|
172
|
-
// Register signal handlers for parent process termination
|
|
173
168
|
process.once('SIGINT', cleanupHandler);
|
|
174
169
|
process.once('SIGTERM', cleanupHandler);
|
|
175
|
-
// Cleanup signal handlers when child process exits
|
|
176
170
|
const removeSignalHandlers = () => {
|
|
177
171
|
process.removeListener('SIGINT', cleanupHandler);
|
|
178
172
|
process.removeListener('SIGTERM', cleanupHandler);
|
|
179
173
|
};
|
|
180
174
|
proc.on('close', removeSignalHandlers);
|
|
181
175
|
proc.on('error', removeSignalHandlers);
|
|
182
|
-
// Progress indicator
|
|
176
|
+
// Progress indicator
|
|
183
177
|
if (showProgress) {
|
|
184
178
|
progressInterval = setInterval(() => {
|
|
185
179
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
186
180
|
process.stderr.write(`${ui_1.ui.info(`Still running... ${elapsed}s elapsed`)}\r`);
|
|
187
181
|
}, 5000);
|
|
188
182
|
}
|
|
189
|
-
// Capture stdout (stream-json format
|
|
183
|
+
// Capture stdout (stream-json format)
|
|
190
184
|
proc.stdout?.on('data', (data) => {
|
|
191
185
|
const dataStr = data.toString();
|
|
192
186
|
stdout += dataStr;
|
|
193
|
-
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (showProgress && msg.type === 'assistant') {
|
|
205
|
-
const toolUses = msg.message?.content?.filter((c) => c.type === 'tool_use') || [];
|
|
206
|
-
for (const tool of toolUses) {
|
|
207
|
-
process.stderr.write('\r\x1b[K'); // Clear line
|
|
208
|
-
// Show verbose tool use with description/input if available
|
|
209
|
-
const toolInput = tool.input || {};
|
|
210
|
-
let verboseMsg = `[Tool] ${tool.name}`;
|
|
211
|
-
// Add context based on tool type (all Claude Code tools)
|
|
212
|
-
switch (tool.name) {
|
|
213
|
-
case 'Bash':
|
|
214
|
-
if (toolInput.command) {
|
|
215
|
-
// Truncate long commands
|
|
216
|
-
const command = toolInput.command;
|
|
217
|
-
const cmd = command.length > 80 ? command.substring(0, 77) + '...' : command;
|
|
218
|
-
verboseMsg += `: ${cmd}`;
|
|
219
|
-
}
|
|
220
|
-
break;
|
|
221
|
-
case 'Edit':
|
|
222
|
-
case 'Write':
|
|
223
|
-
case 'Read':
|
|
224
|
-
if (toolInput.file_path) {
|
|
225
|
-
verboseMsg += `: ${toolInput.file_path}`;
|
|
226
|
-
}
|
|
227
|
-
break;
|
|
228
|
-
case 'NotebookEdit':
|
|
229
|
-
case 'NotebookRead':
|
|
230
|
-
if (toolInput.notebook_path) {
|
|
231
|
-
verboseMsg += `: ${toolInput.notebook_path}`;
|
|
232
|
-
}
|
|
233
|
-
break;
|
|
234
|
-
case 'Grep':
|
|
235
|
-
if (toolInput.pattern) {
|
|
236
|
-
verboseMsg += `: searching for "${toolInput.pattern}"`;
|
|
237
|
-
if (toolInput.path) {
|
|
238
|
-
verboseMsg += ` in ${toolInput.path}`;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
break;
|
|
242
|
-
case 'Glob':
|
|
243
|
-
if (toolInput.pattern) {
|
|
244
|
-
verboseMsg += `: ${toolInput.pattern}`;
|
|
245
|
-
}
|
|
246
|
-
break;
|
|
247
|
-
case 'SlashCommand':
|
|
248
|
-
if (toolInput.command) {
|
|
249
|
-
verboseMsg += `: ${toolInput.command}`;
|
|
250
|
-
}
|
|
251
|
-
break;
|
|
252
|
-
case 'Task':
|
|
253
|
-
if (toolInput.description) {
|
|
254
|
-
verboseMsg += `: ${toolInput.description}`;
|
|
255
|
-
}
|
|
256
|
-
else if (toolInput.prompt) {
|
|
257
|
-
const promptText = toolInput.prompt;
|
|
258
|
-
const prompt = promptText.length > 60 ? promptText.substring(0, 57) + '...' : promptText;
|
|
259
|
-
verboseMsg += `: ${prompt}`;
|
|
260
|
-
}
|
|
261
|
-
break;
|
|
262
|
-
case 'TodoWrite':
|
|
263
|
-
if (toolInput.todos && Array.isArray(toolInput.todos)) {
|
|
264
|
-
// Show in_progress task instead of just count
|
|
265
|
-
const inProgressTask = toolInput.todos.find((t) => t.status === 'in_progress');
|
|
266
|
-
if (inProgressTask && inProgressTask.activeForm) {
|
|
267
|
-
verboseMsg += `: ${inProgressTask.activeForm}`;
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
// Fallback to count if no in_progress task
|
|
271
|
-
verboseMsg += `: ${toolInput.todos.length} task(s)`;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
break;
|
|
275
|
-
case 'WebFetch':
|
|
276
|
-
if (toolInput.url) {
|
|
277
|
-
verboseMsg += `: ${toolInput.url}`;
|
|
278
|
-
}
|
|
279
|
-
break;
|
|
280
|
-
case 'WebSearch':
|
|
281
|
-
if (toolInput.query) {
|
|
282
|
-
verboseMsg += `: "${toolInput.query}"`;
|
|
283
|
-
}
|
|
284
|
-
break;
|
|
285
|
-
default:
|
|
286
|
-
// For unknown tools, show first meaningful parameter
|
|
287
|
-
if (Object.keys(toolInput).length > 0) {
|
|
288
|
-
const firstKey = Object.keys(toolInput)[0];
|
|
289
|
-
const firstValue = toolInput[firstKey];
|
|
290
|
-
if (typeof firstValue === 'string' && firstValue.length < 60) {
|
|
291
|
-
verboseMsg += `: ${firstValue}`;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
process.stderr.write(`${verboseMsg}\n`);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
catch (parseError) {
|
|
300
|
-
// Skip malformed JSON lines (shouldn't happen with stream-json)
|
|
301
|
-
if (process.env.CCS_DEBUG) {
|
|
302
|
-
console.error((0, ui_1.warn)(`Failed to parse stream-json line: ${parseError.message}`));
|
|
187
|
+
const parsedMessages = streamBuffer.parseChunk(dataStr);
|
|
188
|
+
for (const msg of parsedMessages) {
|
|
189
|
+
messages.push(msg);
|
|
190
|
+
// Show real-time tool use
|
|
191
|
+
if (showProgress && msg.type === 'assistant') {
|
|
192
|
+
const toolUses = msg.message?.content?.filter((c) => c.type === 'tool_use') || [];
|
|
193
|
+
for (const tool of toolUses) {
|
|
194
|
+
process.stderr.write('\r\x1b[K');
|
|
195
|
+
const toolInput = tool.input || {};
|
|
196
|
+
const verboseMsg = (0, stream_parser_1.formatToolVerbose)(tool.name || 'Unknown', toolInput);
|
|
197
|
+
process.stderr.write(`${verboseMsg}\n`);
|
|
303
198
|
}
|
|
304
199
|
}
|
|
305
200
|
}
|
|
306
201
|
});
|
|
307
|
-
// Stream stderr in real-time
|
|
202
|
+
// Stream stderr in real-time
|
|
308
203
|
proc.stderr?.on('data', (data) => {
|
|
309
204
|
const stderrText = data.toString();
|
|
310
205
|
stderr += stderrText;
|
|
311
|
-
// Show stderr in real-time if in TTY
|
|
312
206
|
if (showProgress) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
process.stderr.write('\r\x1b[K'); // Clear line
|
|
316
|
-
}
|
|
207
|
+
if (progressInterval)
|
|
208
|
+
process.stderr.write('\r\x1b[K');
|
|
317
209
|
process.stderr.write(stderrText);
|
|
318
210
|
}
|
|
319
211
|
});
|
|
320
212
|
// Handle completion
|
|
321
213
|
proc.on('close', (exitCode) => {
|
|
322
214
|
const duration = Date.now() - startTime;
|
|
323
|
-
// Clear progress indicator
|
|
324
215
|
if (progressInterval) {
|
|
325
216
|
clearInterval(progressInterval);
|
|
326
|
-
process.stderr.write('\r\x1b[K');
|
|
217
|
+
process.stderr.write('\r\x1b[K');
|
|
327
218
|
}
|
|
328
|
-
// Show completion message
|
|
329
219
|
if (showProgress) {
|
|
330
220
|
const durationSec = (duration / 1000).toFixed(1);
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
console.error(ui_1.ui.info(`Execution completed in ${durationSec}s`));
|
|
336
|
-
}
|
|
337
|
-
console.error(''); // Blank line before formatted output
|
|
221
|
+
console.error(timedOut
|
|
222
|
+
? ui_1.ui.warn(`Timed out after ${durationSec}s`)
|
|
223
|
+
: ui_1.ui.info(`Completed in ${durationSec}s`));
|
|
224
|
+
console.error('');
|
|
338
225
|
}
|
|
339
|
-
const result = {
|
|
226
|
+
const result = (0, result_aggregator_1.buildExecutionResult)({
|
|
340
227
|
exitCode: exitCode || 0,
|
|
341
228
|
stdout,
|
|
342
229
|
stderr,
|
|
343
230
|
cwd,
|
|
344
231
|
profile,
|
|
345
232
|
duration,
|
|
346
|
-
timedOut
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
// Extract metadata from final 'result' message in stream-json
|
|
351
|
-
const resultMessage = messages.find((m) => m.type === 'result');
|
|
352
|
-
if (resultMessage) {
|
|
353
|
-
// Add parsed fields from result message
|
|
354
|
-
result.sessionId = resultMessage.session_id || undefined;
|
|
355
|
-
result.totalCost = resultMessage.total_cost_usd || 0;
|
|
356
|
-
result.numTurns = resultMessage.num_turns || 0;
|
|
357
|
-
result.isError = resultMessage.is_error || false;
|
|
358
|
-
result.type = resultMessage.type || null;
|
|
359
|
-
result.subtype = resultMessage.subtype || undefined;
|
|
360
|
-
result.durationApi = resultMessage.duration_api_ms || 0;
|
|
361
|
-
result.permissionDenials = resultMessage.permission_denials || [];
|
|
362
|
-
result.errors = resultMessage.errors || [];
|
|
363
|
-
// Extract content from result message
|
|
364
|
-
result.content = resultMessage.result || '';
|
|
365
|
-
}
|
|
366
|
-
else {
|
|
367
|
-
// Fallback: no result message found (shouldn't happen)
|
|
368
|
-
result.content = stdout;
|
|
369
|
-
if (process.env.CCS_DEBUG) {
|
|
370
|
-
console.error((0, ui_1.warn)('No result message found in stream-json output'));
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
// Store or update session if we have session ID (even on timeout, for :continue support)
|
|
233
|
+
timedOut,
|
|
234
|
+
messages,
|
|
235
|
+
});
|
|
236
|
+
// Store session
|
|
374
237
|
if (result.sessionId) {
|
|
375
238
|
if (resumeSession || sessionId) {
|
|
376
|
-
|
|
377
|
-
sessionMgr.updateSession(profile, result.sessionId, {
|
|
378
|
-
totalCost: result.totalCost,
|
|
379
|
-
});
|
|
239
|
+
sessionMgr.updateSession(profile, result.sessionId, { totalCost: result.totalCost });
|
|
380
240
|
}
|
|
381
241
|
else {
|
|
382
|
-
// Store new session
|
|
383
242
|
sessionMgr.storeSession(profile, {
|
|
384
243
|
sessionId: result.sessionId,
|
|
385
244
|
totalCost: result.totalCost,
|
|
386
|
-
cwd
|
|
245
|
+
cwd,
|
|
387
246
|
});
|
|
388
247
|
}
|
|
389
|
-
|
|
390
|
-
if (Math.random() < 0.1) {
|
|
391
|
-
// 10% chance
|
|
248
|
+
if (Math.random() < 0.1)
|
|
392
249
|
sessionMgr.cleanupExpired();
|
|
393
|
-
}
|
|
394
250
|
}
|
|
395
251
|
resolve(result);
|
|
396
252
|
});
|
|
397
253
|
// Handle errors
|
|
398
254
|
proc.on('error', (error) => {
|
|
399
|
-
if (progressInterval)
|
|
255
|
+
if (progressInterval)
|
|
400
256
|
clearInterval(progressInterval);
|
|
401
|
-
}
|
|
402
257
|
reject(new Error(`Failed to execute Claude CLI: ${error.message}`));
|
|
403
258
|
});
|
|
404
|
-
// Handle timeout
|
|
405
|
-
let timedOut = false;
|
|
259
|
+
// Handle timeout
|
|
406
260
|
if (timeout > 0) {
|
|
407
261
|
const timeoutHandle = setTimeout(() => {
|
|
408
262
|
if (!proc.killed) {
|
|
409
263
|
timedOut = true;
|
|
410
264
|
if (progressInterval) {
|
|
411
265
|
clearInterval(progressInterval);
|
|
412
|
-
process.stderr.write('\r\x1b[K');
|
|
266
|
+
process.stderr.write('\r\x1b[K');
|
|
413
267
|
}
|
|
414
|
-
if (process.env.CCS_DEBUG) {
|
|
415
|
-
console.error((0, ui_1.warn)(`Timeout reached after ${timeout}ms, sending SIGTERM for graceful shutdown...`));
|
|
416
|
-
}
|
|
417
|
-
// Send SIGTERM for graceful shutdown
|
|
418
268
|
proc.kill('SIGTERM');
|
|
419
|
-
// If process doesn't terminate within 10s, force kill
|
|
420
269
|
setTimeout(() => {
|
|
421
|
-
if (!proc.killed)
|
|
422
|
-
if (process.env.CCS_DEBUG) {
|
|
423
|
-
console.error((0, ui_1.warn)('Process did not terminate gracefully, sending SIGKILL...'));
|
|
424
|
-
}
|
|
270
|
+
if (!proc.killed)
|
|
425
271
|
proc.kill('SIGKILL');
|
|
426
|
-
|
|
427
|
-
}, 10000); // Give 10s for graceful shutdown instead of 5s
|
|
272
|
+
}, 10000);
|
|
428
273
|
}
|
|
429
274
|
}, timeout);
|
|
430
|
-
// Clear timeout on successful completion
|
|
431
275
|
proc.on('close', () => clearTimeout(timeoutHandle));
|
|
432
276
|
}
|
|
433
277
|
});
|
|
434
278
|
}
|
|
435
|
-
/**
|
|
436
|
-
* Validate permission mode
|
|
437
|
-
* @param mode - Permission mode
|
|
438
|
-
* @throws {Error} If mode is invalid
|
|
439
|
-
* @private
|
|
440
|
-
*/
|
|
279
|
+
/** Validate permission mode */
|
|
441
280
|
static _validatePermissionMode(mode) {
|
|
442
281
|
const VALID_MODES = ['default', 'plan', 'acceptEdits', 'bypassPermissions'];
|
|
443
282
|
if (!VALID_MODES.includes(mode)) {
|
|
444
283
|
throw new Error(`Invalid permission mode: "${mode}". Valid modes: ${VALID_MODES.join(', ')}`);
|
|
445
284
|
}
|
|
446
285
|
}
|
|
447
|
-
/**
|
|
448
|
-
* Detect Claude CLI executable
|
|
449
|
-
* @returns Path to claude CLI or null if not found
|
|
450
|
-
* @private
|
|
451
|
-
*/
|
|
286
|
+
/** Detect Claude CLI executable */
|
|
452
287
|
static _detectClaudeCli() {
|
|
453
|
-
|
|
454
|
-
if (process.env.CCS_CLAUDE_PATH) {
|
|
288
|
+
if (process.env.CCS_CLAUDE_PATH)
|
|
455
289
|
return process.env.CCS_CLAUDE_PATH;
|
|
456
|
-
}
|
|
457
|
-
// Try to find in PATH
|
|
458
290
|
const { execSync } = require('child_process');
|
|
459
291
|
try {
|
|
460
|
-
|
|
461
|
-
return result.trim();
|
|
292
|
+
return execSync('command -v claude', { encoding: 'utf8' }).trim();
|
|
462
293
|
}
|
|
463
|
-
catch
|
|
294
|
+
catch {
|
|
464
295
|
return null;
|
|
465
296
|
}
|
|
466
297
|
}
|
|
467
|
-
/**
|
|
468
|
-
* Execute with retry logic
|
|
469
|
-
* @param profile - Profile name
|
|
470
|
-
* @param enhancedPrompt - Enhanced prompt
|
|
471
|
-
* @param options - Execution options
|
|
472
|
-
* @returns execution result
|
|
473
|
-
*/
|
|
298
|
+
/** Execute with retry logic */
|
|
474
299
|
static async executeWithRetry(profile, enhancedPrompt, options = {}) {
|
|
475
300
|
const { maxRetries = 2, ...execOptions } = options;
|
|
476
301
|
let lastError;
|
|
477
302
|
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
478
303
|
try {
|
|
479
304
|
const result = await this.execute(profile, enhancedPrompt, execOptions);
|
|
480
|
-
|
|
481
|
-
if (result.success) {
|
|
305
|
+
if (result.success)
|
|
482
306
|
return result;
|
|
483
|
-
}
|
|
484
|
-
// If not last attempt, retry
|
|
485
307
|
if (attempt < maxRetries) {
|
|
486
308
|
console.error((0, ui_1.warn)(`Attempt ${attempt + 1} failed, retrying...`));
|
|
487
|
-
await this._sleep(1000 * (attempt + 1));
|
|
309
|
+
await this._sleep(1000 * (attempt + 1));
|
|
488
310
|
continue;
|
|
489
311
|
}
|
|
490
|
-
// Last attempt failed, return result anyway
|
|
491
312
|
return result;
|
|
492
313
|
}
|
|
493
314
|
catch (error) {
|
|
494
315
|
lastError = error;
|
|
495
316
|
if (attempt < maxRetries) {
|
|
496
|
-
console.error((0, ui_1.warn)(`Attempt ${attempt + 1} errored
|
|
317
|
+
console.error((0, ui_1.warn)(`Attempt ${attempt + 1} errored, retrying...`));
|
|
497
318
|
await this._sleep(1000 * (attempt + 1));
|
|
498
319
|
}
|
|
499
320
|
}
|
|
500
321
|
}
|
|
501
|
-
// All retries exhausted
|
|
502
322
|
throw lastError || new Error('Execution failed after all retry attempts');
|
|
503
323
|
}
|
|
504
|
-
/**
|
|
505
|
-
* Sleep utility for retry backoff
|
|
506
|
-
* @param ms - Milliseconds to sleep
|
|
507
|
-
* @returns Promise<void>
|
|
508
|
-
* @private
|
|
509
|
-
*/
|
|
324
|
+
/** Sleep utility for retry backoff */
|
|
510
325
|
static _sleep(ms) {
|
|
511
326
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
512
327
|
}
|
|
513
|
-
/**
|
|
514
|
-
* Process prompt to detect and preserve slash commands
|
|
515
|
-
* Implements smart enhancement: preserves slash command at start, allows context in rest
|
|
516
|
-
* @param prompt - Original prompt (may contain slash command)
|
|
517
|
-
* @returns Processed prompt with slash command preserved
|
|
518
|
-
* @private
|
|
519
|
-
*/
|
|
328
|
+
/** Process prompt to detect and preserve slash commands */
|
|
520
329
|
static _processSlashCommand(prompt) {
|
|
521
330
|
const trimmed = prompt.trim();
|
|
522
|
-
// Case 1: Already starts with slash command
|
|
523
|
-
if (trimmed.match(/^\/[\w:-]+(\s|$)/))
|
|
331
|
+
// Case 1: Already starts with slash command
|
|
332
|
+
if (trimmed.match(/^\/[\w:-]+(\s|$)/))
|
|
524
333
|
return prompt;
|
|
525
|
-
}
|
|
526
334
|
// Case 2: Find slash command embedded in text
|
|
527
|
-
// Look for /command that's NOT part of a file path
|
|
528
|
-
// File paths: /home/user, /path/to/file (have / before or after)
|
|
529
|
-
// Commands: /cook, /plan (standalone, preceded by space/colon/start)
|
|
530
|
-
// Strategy: Find LAST occurrence that looks like a command, not a path
|
|
531
335
|
const embeddedSlash = trimmed.match(/(?:^|[^\w/])(\/[\w:-]+)(\s+[\s\S]*)?$/);
|
|
532
336
|
if (embeddedSlash) {
|
|
533
|
-
const command = embeddedSlash[1];
|
|
534
|
-
const args = (embeddedSlash[2] || '').trim();
|
|
535
|
-
// Calculate where the command starts (excluding preceding char if any)
|
|
337
|
+
const command = embeddedSlash[1];
|
|
338
|
+
const args = (embeddedSlash[2] || '').trim();
|
|
536
339
|
const matchIndex = embeddedSlash.index || 0;
|
|
537
340
|
const matchStart = matchIndex + (embeddedSlash[0][0] === '/' ? 0 : 1);
|
|
538
341
|
const beforeCommand = trimmed.substring(0, matchStart).trim();
|
|
539
|
-
|
|
540
|
-
if (beforeCommand && args) {
|
|
342
|
+
if (beforeCommand && args)
|
|
541
343
|
return `${command} ${args}\n\nContext: ${beforeCommand}`;
|
|
542
|
-
|
|
543
|
-
else if (beforeCommand) {
|
|
344
|
+
if (beforeCommand)
|
|
544
345
|
return `${command}\n\nContext: ${beforeCommand}`;
|
|
545
|
-
}
|
|
546
346
|
return args ? `${command} ${args}` : command;
|
|
547
347
|
}
|
|
548
|
-
// No slash command detected, return as-is
|
|
549
348
|
return prompt;
|
|
550
349
|
}
|
|
551
|
-
/**
|
|
552
|
-
* Test if profile is executable (quick health check)
|
|
553
|
-
* @param profile - Profile name
|
|
554
|
-
* @returns True if profile can execute
|
|
555
|
-
*/
|
|
350
|
+
/** Test if profile is executable */
|
|
556
351
|
static async testProfile(profile) {
|
|
557
352
|
try {
|
|
558
|
-
const result = await this.execute(profile, 'Say "test successful"', {
|
|
559
|
-
timeout: 10000,
|
|
560
|
-
});
|
|
353
|
+
const result = await this.execute(profile, 'Say "test successful"', { timeout: 10000 });
|
|
561
354
|
return result.success;
|
|
562
355
|
}
|
|
563
|
-
catch
|
|
356
|
+
catch {
|
|
564
357
|
return false;
|
|
565
358
|
}
|
|
566
359
|
}
|