@kaitranntt/ccs 7.76.0-dev.2 → 7.76.0-dev.4
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 +2 -1
- package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
- package/dist/api/services/cliproxy-profile-bridge.js +5 -6
- package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
- package/dist/api/services/openrouter-catalog.js +2 -2
- package/dist/api/services/openrouter-catalog.js.map +1 -1
- package/dist/api/services/profile-lifecycle-service.d.ts.map +1 -1
- package/dist/api/services/profile-lifecycle-service.js +6 -6
- package/dist/api/services/profile-lifecycle-service.js.map +1 -1
- package/dist/api/services/profile-reader.d.ts.map +1 -1
- package/dist/api/services/profile-reader.js +14 -15
- package/dist/api/services/profile-reader.js.map +1 -1
- package/dist/api/services/profile-writer.d.ts.map +1 -1
- package/dist/api/services/profile-writer.js +13 -13
- package/dist/api/services/profile-writer.js.map +1 -1
- package/dist/auth/commands/create-command.d.ts.map +1 -1
- package/dist/auth/commands/create-command.js +2 -2
- package/dist/auth/commands/create-command.js.map +1 -1
- package/dist/auth/commands/default-command.d.ts.map +1 -1
- package/dist/auth/commands/default-command.js +3 -3
- package/dist/auth/commands/default-command.js.map +1 -1
- package/dist/auth/commands/remove-command.d.ts.map +1 -1
- package/dist/auth/commands/remove-command.js +2 -2
- package/dist/auth/commands/remove-command.js.map +1 -1
- package/dist/auth/profile-continuity-inheritance.d.ts.map +1 -1
- package/dist/auth/profile-continuity-inheritance.js +4 -4
- package/dist/auth/profile-continuity-inheritance.js.map +1 -1
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +5 -6
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/auth/profile-registry.d.ts.map +1 -1
- package/dist/auth/profile-registry.js +14 -15
- package/dist/auth/profile-registry.js.map +1 -1
- package/dist/auth/resume-lane-diagnostics.d.ts.map +1 -1
- package/dist/auth/resume-lane-diagnostics.js +2 -2
- package/dist/auth/resume-lane-diagnostics.js.map +1 -1
- package/dist/ccs.js +30 -1257
- package/dist/ccs.js.map +1 -1
- package/dist/channels/official-channels-ids.d.ts +21 -0
- package/dist/channels/official-channels-ids.d.ts.map +1 -0
- package/dist/channels/official-channels-ids.js +46 -0
- package/dist/channels/official-channels-ids.js.map +1 -0
- package/dist/channels/official-channels-runtime.d.ts +2 -5
- package/dist/channels/official-channels-runtime.d.ts.map +1 -1
- package/dist/channels/official-channels-runtime.js +14 -29
- package/dist/channels/official-channels-runtime.js.map +1 -1
- package/dist/channels/official-channels-store.d.ts.map +1 -1
- package/dist/channels/official-channels-store.js +2 -2
- package/dist/channels/official-channels-store.js.map +1 -1
- package/dist/cliproxy/accounts/account-safety.js +4 -4
- package/dist/cliproxy/accounts/account-safety.js.map +1 -1
- package/dist/cliproxy/auth/antigravity-responsibility.js +2 -2
- package/dist/cliproxy/auth/antigravity-responsibility.js.map +1 -1
- package/dist/cliproxy/auth/auth-token-manager.d.ts.map +1 -1
- package/dist/cliproxy/auth/auth-token-manager.js +8 -8
- package/dist/cliproxy/auth/auth-token-manager.js.map +1 -1
- package/dist/cliproxy/auth/token-refresh-config.d.ts.map +1 -1
- package/dist/cliproxy/auth/token-refresh-config.js +2 -2
- package/dist/cliproxy/auth/token-refresh-config.js.map +1 -1
- package/dist/cliproxy/binary-manager.d.ts.map +1 -1
- package/dist/cliproxy/binary-manager.js +2 -2
- package/dist/cliproxy/binary-manager.js.map +1 -1
- package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
- package/dist/cliproxy/config/env-builder.js +2 -2
- package/dist/cliproxy/config/env-builder.js.map +1 -1
- package/dist/cliproxy/config/generator.d.ts +6 -2
- package/dist/cliproxy/config/generator.d.ts.map +1 -1
- package/dist/cliproxy/config/generator.js +43 -10
- package/dist/cliproxy/config/generator.js.map +1 -1
- package/dist/cliproxy/config/model-config.d.ts.map +1 -1
- package/dist/cliproxy/config/model-config.js +2 -2
- package/dist/cliproxy/config/model-config.js.map +1 -1
- package/dist/cliproxy/config/path-resolver.d.ts.map +1 -1
- package/dist/cliproxy/config/path-resolver.js +4 -4
- package/dist/cliproxy/config/path-resolver.js.map +1 -1
- package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
- package/dist/cliproxy/config/thinking-config.js +2 -2
- package/dist/cliproxy/config/thinking-config.js.map +1 -1
- package/dist/cliproxy/executor/account-resolution.d.ts +52 -0
- package/dist/cliproxy/executor/account-resolution.d.ts.map +1 -0
- package/dist/cliproxy/executor/account-resolution.js +154 -0
- package/dist/cliproxy/executor/account-resolution.js.map +1 -0
- package/dist/cliproxy/executor/arg-parser.d.ts +96 -0
- package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -0
- package/dist/cliproxy/executor/arg-parser.js +529 -0
- package/dist/cliproxy/executor/arg-parser.js.map +1 -0
- package/dist/cliproxy/executor/auth-coordinator.d.ts +96 -0
- package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -0
- package/dist/cliproxy/executor/auth-coordinator.js +342 -0
- package/dist/cliproxy/executor/auth-coordinator.js.map +1 -0
- package/dist/cliproxy/executor/browser-launch-setup.d.ts +36 -0
- package/dist/cliproxy/executor/browser-launch-setup.d.ts.map +1 -0
- package/dist/cliproxy/executor/browser-launch-setup.js +80 -0
- package/dist/cliproxy/executor/browser-launch-setup.js.map +1 -0
- package/dist/cliproxy/executor/claude-launcher.d.ts +55 -0
- package/dist/cliproxy/executor/claude-launcher.d.ts.map +1 -0
- package/dist/cliproxy/executor/claude-launcher.js +112 -0
- package/dist/cliproxy/executor/claude-launcher.js.map +1 -0
- package/dist/cliproxy/executor/index.d.ts +4 -9
- package/dist/cliproxy/executor/index.d.ts.map +1 -1
- package/dist/cliproxy/executor/index.js +110 -866
- package/dist/cliproxy/executor/index.js.map +1 -1
- package/dist/cliproxy/executor/model-warnings.d.ts +22 -0
- package/dist/cliproxy/executor/model-warnings.d.ts.map +1 -0
- package/dist/cliproxy/executor/model-warnings.js +67 -0
- package/dist/cliproxy/executor/model-warnings.js.map +1 -0
- package/dist/cliproxy/executor/proxy-chain-builder.d.ts +71 -0
- package/dist/cliproxy/executor/proxy-chain-builder.d.ts.map +1 -0
- package/dist/cliproxy/executor/proxy-chain-builder.js +143 -0
- package/dist/cliproxy/executor/proxy-chain-builder.js.map +1 -0
- package/dist/cliproxy/executor/proxy-resolver.d.ts +44 -0
- package/dist/cliproxy/executor/proxy-resolver.d.ts.map +1 -0
- package/dist/cliproxy/executor/proxy-resolver.js +173 -0
- package/dist/cliproxy/executor/proxy-resolver.js.map +1 -0
- package/dist/cliproxy/proxy/proxy-target-resolver.js +2 -2
- package/dist/cliproxy/proxy/proxy-target-resolver.js.map +1 -1
- package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
- package/dist/cliproxy/proxy/tool-sanitization-proxy.js +2 -2
- package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
- package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-manager.js +4 -4
- package/dist/cliproxy/quota/quota-manager.js.map +1 -1
- package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
- package/dist/cliproxy/routing/routing-strategy.js +5 -5
- package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
- package/dist/cliproxy/service-manager.js +2 -2
- package/dist/cliproxy/service-manager.js.map +1 -1
- package/dist/cliproxy/services/binary-service.js +8 -8
- package/dist/cliproxy/services/binary-service.js.map +1 -1
- package/dist/cliproxy/services/catalog-cache.d.ts.map +1 -1
- package/dist/cliproxy/services/catalog-cache.js +2 -2
- package/dist/cliproxy/services/catalog-cache.js.map +1 -1
- package/dist/cliproxy/services/variant-config-adapter.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-config-adapter.js +10 -10
- package/dist/cliproxy/services/variant-config-adapter.js.map +1 -1
- package/dist/cliproxy/services/variant-service.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-service.js +7 -8
- package/dist/cliproxy/services/variant-service.js.map +1 -1
- package/dist/cliproxy/services/variant-settings.d.ts.map +1 -1
- package/dist/cliproxy/services/variant-settings.js +5 -5
- package/dist/cliproxy/services/variant-settings.js.map +1 -1
- package/dist/cliproxy/sync/auto-sync-watcher.js +3 -4
- package/dist/cliproxy/sync/auto-sync-watcher.js.map +1 -1
- package/dist/cliproxy/sync/profile-mapper.d.ts.map +1 -1
- package/dist/cliproxy/sync/profile-mapper.js +2 -2
- package/dist/cliproxy/sync/profile-mapper.js.map +1 -1
- package/dist/commands/browser-command.d.ts.map +1 -1
- package/dist/commands/browser-command.js +7 -7
- package/dist/commands/browser-command.js.map +1 -1
- package/dist/commands/cliproxy/resolve-lifecycle-port.d.ts.map +1 -1
- package/dist/commands/cliproxy/resolve-lifecycle-port.js +2 -2
- package/dist/commands/cliproxy/resolve-lifecycle-port.js.map +1 -1
- package/dist/commands/cliproxy/variant-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/variant-subcommand.js +4 -4
- package/dist/commands/cliproxy/variant-subcommand.js.map +1 -1
- package/dist/commands/config-auth/disable-command.d.ts.map +1 -1
- package/dist/commands/config-auth/disable-command.js +3 -3
- package/dist/commands/config-auth/disable-command.js.map +1 -1
- package/dist/commands/config-auth/setup-command.d.ts.map +1 -1
- package/dist/commands/config-auth/setup-command.js +2 -2
- package/dist/commands/config-auth/setup-command.js.map +1 -1
- package/dist/commands/config-auth/show-command.js +2 -2
- package/dist/commands/config-auth/show-command.js.map +1 -1
- package/dist/commands/config-channels-command.d.ts.map +1 -1
- package/dist/commands/config-channels-command.js +4 -4
- package/dist/commands/config-channels-command.js.map +1 -1
- package/dist/commands/config-command.d.ts +1 -1
- package/dist/commands/config-command.d.ts.map +1 -1
- package/dist/commands/config-command.js +2 -2
- package/dist/commands/config-command.js.map +1 -1
- package/dist/commands/config-image-analysis-command.d.ts.map +1 -1
- package/dist/commands/config-image-analysis-command.js +4 -4
- package/dist/commands/config-image-analysis-command.js.map +1 -1
- package/dist/commands/config-thinking-command.d.ts.map +1 -1
- package/dist/commands/config-thinking-command.js +4 -4
- package/dist/commands/config-thinking-command.js.map +1 -1
- package/dist/commands/copilot-command.d.ts.map +1 -1
- package/dist/commands/copilot-command.js +4 -4
- package/dist/commands/copilot-command.js.map +1 -1
- package/dist/commands/cursor-command.d.ts.map +1 -1
- package/dist/commands/cursor-command.js +7 -7
- package/dist/commands/cursor-command.js.map +1 -1
- package/dist/commands/env-command.d.ts.map +1 -1
- package/dist/commands/env-command.js +2 -2
- package/dist/commands/env-command.js.map +1 -1
- package/dist/commands/migrate-command.d.ts.map +1 -1
- package/dist/commands/migrate-command.js +2 -2
- package/dist/commands/migrate-command.js.map +1 -1
- package/dist/commands/proxy-command.d.ts.map +1 -1
- package/dist/commands/proxy-command.js +2 -1
- package/dist/commands/proxy-command.js.map +1 -1
- package/dist/commands/setup-command.d.ts.map +1 -1
- package/dist/commands/setup-command.js +6 -7
- package/dist/commands/setup-command.js.map +1 -1
- package/dist/commands/version-command.d.ts.map +1 -1
- package/dist/commands/version-command.js +2 -1
- package/dist/commands/version-command.js.map +1 -1
- package/dist/config/loader/config-getters.d.ts +121 -0
- package/dist/config/loader/config-getters.d.ts.map +1 -0
- package/dist/config/loader/config-getters.js +260 -0
- package/dist/config/loader/config-getters.js.map +1 -0
- package/dist/config/loader/defaults-merger.d.ts +21 -0
- package/dist/config/loader/defaults-merger.d.ts.map +1 -0
- package/dist/config/loader/defaults-merger.js +278 -0
- package/dist/config/loader/defaults-merger.js.map +1 -0
- package/dist/config/loader/io-locks.d.ts +76 -0
- package/dist/config/loader/io-locks.d.ts.map +1 -0
- package/dist/config/loader/io-locks.js +297 -0
- package/dist/config/loader/io-locks.js.map +1 -0
- package/dist/config/loader/normalizers.d.ts +40 -0
- package/dist/config/loader/normalizers.d.ts.map +1 -0
- package/dist/config/loader/normalizers.js +172 -0
- package/dist/config/loader/normalizers.js.map +1 -0
- package/dist/config/loader/yaml-serializer.d.ts +19 -0
- package/dist/config/loader/yaml-serializer.d.ts.map +1 -0
- package/dist/config/loader/yaml-serializer.js +300 -0
- package/dist/config/loader/yaml-serializer.js.map +1 -0
- package/dist/config/schemas/cliproxy.d.ts +2 -0
- package/dist/config/schemas/cliproxy.d.ts.map +1 -1
- package/dist/config/unified-config-loader.d.ts +21 -124
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +100 -1098
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/copilot/copilot-daemon.d.ts.map +1 -1
- package/dist/copilot/copilot-daemon.js +2 -2
- package/dist/copilot/copilot-daemon.js.map +1 -1
- package/dist/copilot/copilot-executor.d.ts.map +1 -1
- package/dist/copilot/copilot-executor.js +2 -2
- package/dist/copilot/copilot-executor.js.map +1 -1
- package/dist/copilot/copilot-package-manager.js +2 -2
- package/dist/copilot/copilot-package-manager.js.map +1 -1
- package/dist/cursor/cursor-auth.js +2 -2
- package/dist/cursor/cursor-auth.js.map +1 -1
- package/dist/cursor/cursor-daemon-pid.js +2 -2
- package/dist/cursor/cursor-daemon-pid.js.map +1 -1
- package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
- package/dist/cursor/cursor-profile-executor.js +2 -2
- package/dist/cursor/cursor-profile-executor.js.map +1 -1
- package/dist/delegation/delegation-handler.js +2 -2
- package/dist/delegation/delegation-handler.js.map +1 -1
- package/dist/delegation/headless-executor.d.ts.map +1 -1
- package/dist/delegation/headless-executor.js +4 -4
- package/dist/delegation/headless-executor.js.map +1 -1
- package/dist/delegation/session-manager.js +2 -2
- package/dist/delegation/session-manager.js.map +1 -1
- package/dist/dispatcher/cli-argument-parser.d.ts +70 -0
- package/dist/dispatcher/cli-argument-parser.d.ts.map +1 -0
- package/dist/dispatcher/cli-argument-parser.js +285 -0
- package/dist/dispatcher/cli-argument-parser.js.map +1 -0
- package/dist/dispatcher/dispatcher-context.d.ts +24 -0
- package/dist/dispatcher/dispatcher-context.d.ts.map +1 -0
- package/dist/dispatcher/dispatcher-context.js +11 -0
- package/dist/dispatcher/dispatcher-context.js.map +1 -0
- package/dist/dispatcher/environment-builder.d.ts +20 -0
- package/dist/dispatcher/environment-builder.d.ts.map +1 -0
- package/dist/dispatcher/environment-builder.js +95 -0
- package/dist/dispatcher/environment-builder.js.map +1 -0
- package/dist/dispatcher/flows/account-flow.d.ts +9 -0
- package/dist/dispatcher/flows/account-flow.d.ts.map +1 -0
- package/dist/dispatcher/flows/account-flow.js +49 -0
- package/dist/dispatcher/flows/account-flow.js.map +1 -0
- package/dist/dispatcher/flows/cliproxy-flow.d.ts +8 -0
- package/dist/dispatcher/flows/cliproxy-flow.d.ts.map +1 -0
- package/dist/dispatcher/flows/cliproxy-flow.js +165 -0
- package/dist/dispatcher/flows/cliproxy-flow.js.map +1 -0
- package/dist/dispatcher/flows/copilot-flow.d.ts +8 -0
- package/dist/dispatcher/flows/copilot-flow.d.ts.map +1 -0
- package/dist/dispatcher/flows/copilot-flow.js +72 -0
- package/dist/dispatcher/flows/copilot-flow.js.map +1 -0
- package/dist/dispatcher/flows/cursor-flow.d.ts +8 -0
- package/dist/dispatcher/flows/cursor-flow.d.ts.map +1 -0
- package/dist/dispatcher/flows/cursor-flow.js +62 -0
- package/dist/dispatcher/flows/cursor-flow.js.map +1 -0
- package/dist/dispatcher/flows/default-flow.d.ts +10 -0
- package/dist/dispatcher/flows/default-flow.d.ts.map +1 -0
- package/dist/dispatcher/flows/default-flow.js +99 -0
- package/dist/dispatcher/flows/default-flow.js.map +1 -0
- package/dist/dispatcher/flows/settings-flow.d.ts +9 -0
- package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -0
- package/dist/dispatcher/flows/settings-flow.js +318 -0
- package/dist/dispatcher/flows/settings-flow.js.map +1 -0
- package/dist/dispatcher/flows/settings-image-analysis-prep.d.ts +28 -0
- package/dist/dispatcher/flows/settings-image-analysis-prep.d.ts.map +1 -0
- package/dist/dispatcher/flows/settings-image-analysis-prep.js +81 -0
- package/dist/dispatcher/flows/settings-image-analysis-prep.js.map +1 -0
- package/dist/dispatcher/pre-dispatch.d.ts +23 -0
- package/dist/dispatcher/pre-dispatch.d.ts.map +1 -0
- package/dist/dispatcher/pre-dispatch.js +156 -0
- package/dist/dispatcher/pre-dispatch.js.map +1 -0
- package/dist/dispatcher/profile-resolver.d.ts +65 -0
- package/dist/dispatcher/profile-resolver.d.ts.map +1 -0
- package/dist/dispatcher/profile-resolver.js +290 -0
- package/dist/dispatcher/profile-resolver.js.map +1 -0
- package/dist/dispatcher/target-executor.d.ts +26 -0
- package/dist/dispatcher/target-executor.d.ts.map +1 -0
- package/dist/dispatcher/target-executor.js +81 -0
- package/dist/dispatcher/target-executor.js.map +1 -0
- package/dist/docker/docker-assets.d.ts.map +1 -1
- package/dist/docker/docker-assets.js +2 -2
- package/dist/docker/docker-assets.js.map +1 -1
- package/dist/glmt/glmt-transformer.d.ts.map +1 -1
- package/dist/glmt/glmt-transformer.js +2 -2
- package/dist/glmt/glmt-transformer.js.map +1 -1
- package/dist/management/checks/config-check.d.ts.map +1 -1
- package/dist/management/checks/config-check.js +2 -2
- package/dist/management/checks/config-check.js.map +1 -1
- package/dist/management/checks/env-check.d.ts.map +1 -1
- package/dist/management/checks/env-check.js +2 -1
- package/dist/management/checks/env-check.js.map +1 -1
- package/dist/management/checks/image-analysis-check.d.ts.map +1 -1
- package/dist/management/checks/image-analysis-check.js +4 -4
- package/dist/management/checks/image-analysis-check.js.map +1 -1
- package/dist/management/checks/profile-check.js +4 -4
- package/dist/management/checks/profile-check.js.map +1 -1
- package/dist/management/checks/symlink-check.js +2 -2
- package/dist/management/checks/symlink-check.js.map +1 -1
- package/dist/management/checks/system-check.js +2 -2
- package/dist/management/checks/system-check.js.map +1 -1
- package/dist/management/instance-manager.d.ts.map +1 -1
- package/dist/management/instance-manager.js +2 -1
- package/dist/management/instance-manager.js.map +1 -1
- package/dist/management/recovery-manager.d.ts.map +1 -1
- package/dist/management/recovery-manager.js +5 -5
- package/dist/management/recovery-manager.js.map +1 -1
- package/dist/management/repair/auto-repair.d.ts.map +1 -1
- package/dist/management/repair/auto-repair.js +2 -2
- package/dist/management/repair/auto-repair.js.map +1 -1
- package/dist/management/shared-manager.d.ts.map +1 -1
- package/dist/management/shared-manager.js +2 -2
- package/dist/management/shared-manager.js.map +1 -1
- package/dist/proxy/proxy-daemon-entry.js +2 -2
- package/dist/proxy/proxy-daemon-entry.js.map +1 -1
- package/dist/proxy/proxy-daemon-paths.js +2 -2
- package/dist/proxy/proxy-daemon-paths.js.map +1 -1
- package/dist/proxy/proxy-port-resolver.js +2 -2
- package/dist/proxy/proxy-port-resolver.js.map +1 -1
- package/dist/proxy/request-router.d.ts.map +1 -1
- package/dist/proxy/request-router.js +3 -3
- package/dist/proxy/request-router.js.map +1 -1
- package/dist/services/logging/log-config.d.ts.map +1 -1
- package/dist/services/logging/log-config.js +3 -3
- package/dist/services/logging/log-config.js.map +1 -1
- package/dist/services/logging/log-paths.js +3 -3
- package/dist/services/logging/log-paths.js.map +1 -1
- package/dist/utils/browser/browser-setup.d.ts +2 -2
- package/dist/utils/browser/browser-setup.d.ts.map +1 -1
- package/dist/utils/browser/browser-setup.js +4 -4
- package/dist/utils/browser/browser-setup.js.map +1 -1
- package/dist/utils/browser/browser-status.d.ts.map +1 -1
- package/dist/utils/browser/browser-status.js +3 -3
- package/dist/utils/browser/browser-status.js.map +1 -1
- package/dist/utils/hooks/get-image-analysis-hook-env.d.ts.map +1 -1
- package/dist/utils/hooks/get-image-analysis-hook-env.js +2 -2
- package/dist/utils/hooks/get-image-analysis-hook-env.js.map +1 -1
- package/dist/utils/hooks/image-analyzer-hook-configuration.d.ts.map +1 -1
- package/dist/utils/hooks/image-analyzer-hook-configuration.js +2 -2
- package/dist/utils/hooks/image-analyzer-hook-configuration.js.map +1 -1
- package/dist/utils/hooks/image-analyzer-hook-installer.d.ts.map +1 -1
- package/dist/utils/hooks/image-analyzer-hook-installer.js +2 -2
- package/dist/utils/hooks/image-analyzer-hook-installer.js.map +1 -1
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.d.ts.map +1 -1
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js +2 -2
- package/dist/utils/hooks/image-analyzer-profile-hook-injector.js.map +1 -1
- package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
- package/dist/utils/image-analysis/mcp-installer.js +5 -5
- package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
- package/dist/utils/shell-executor.d.ts.map +1 -1
- package/dist/utils/shell-executor.js +2 -2
- package/dist/utils/shell-executor.js.map +1 -1
- package/dist/utils/websearch/hook-config.d.ts.map +1 -1
- package/dist/utils/websearch/hook-config.js +3 -3
- package/dist/utils/websearch/hook-config.js.map +1 -1
- package/dist/utils/websearch/hook-env.js +2 -2
- package/dist/utils/websearch/hook-env.js.map +1 -1
- package/dist/utils/websearch/hook-installer.d.ts.map +1 -1
- package/dist/utils/websearch/hook-installer.js +2 -2
- package/dist/utils/websearch/hook-installer.js.map +1 -1
- package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
- package/dist/utils/websearch/mcp-installer.js +5 -5
- package/dist/utils/websearch/mcp-installer.js.map +1 -1
- package/dist/utils/websearch/profile-hook-injector.d.ts.map +1 -1
- package/dist/utils/websearch/profile-hook-injector.js +3 -3
- package/dist/utils/websearch/profile-hook-injector.js.map +1 -1
- package/dist/utils/websearch/provider-secrets.js +2 -2
- package/dist/utils/websearch/provider-secrets.js.map +1 -1
- package/dist/utils/websearch/status.d.ts.map +1 -1
- package/dist/utils/websearch/status.js +4 -4
- package/dist/utils/websearch/status.js.map +1 -1
- package/dist/web-server/file-watcher.js +2 -2
- package/dist/web-server/file-watcher.js.map +1 -1
- package/dist/web-server/health/config-checks.d.ts.map +1 -1
- package/dist/web-server/health/config-checks.js +3 -3
- package/dist/web-server/health/config-checks.js.map +1 -1
- package/dist/web-server/health/profile-checks.d.ts.map +1 -1
- package/dist/web-server/health/profile-checks.js +3 -3
- package/dist/web-server/health/profile-checks.js.map +1 -1
- package/dist/web-server/health-service.d.ts.map +1 -1
- package/dist/web-server/health-service.js +7 -6
- package/dist/web-server/health-service.js.map +1 -1
- package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
- package/dist/web-server/middleware/auth-middleware.js +6 -7
- package/dist/web-server/middleware/auth-middleware.js.map +1 -1
- package/dist/web-server/models-dev/registry-cache.d.ts.map +1 -1
- package/dist/web-server/models-dev/registry-cache.js +2 -2
- package/dist/web-server/models-dev/registry-cache.js.map +1 -1
- package/dist/web-server/overview-routes.d.ts.map +1 -1
- package/dist/web-server/overview-routes.js +2 -2
- package/dist/web-server/overview-routes.js.map +1 -1
- package/dist/web-server/routes/account-routes.d.ts.map +1 -1
- package/dist/web-server/routes/account-routes.js +7 -7
- package/dist/web-server/routes/account-routes.js.map +1 -1
- package/dist/web-server/routes/auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/auth-routes.js +4 -4
- package/dist/web-server/routes/auth-routes.js.map +1 -1
- package/dist/web-server/routes/browser-routes.d.ts.map +1 -1
- package/dist/web-server/routes/browser-routes.js +2 -2
- package/dist/web-server/routes/browser-routes.js.map +1 -1
- package/dist/web-server/routes/channels-routes.d.ts.map +1 -1
- package/dist/web-server/routes/channels-routes.js +4 -4
- package/dist/web-server/routes/channels-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +2 -2
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-local-proxy.js +2 -2
- package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
- package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-sync-routes.js +2 -2
- package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -1
- package/dist/web-server/routes/config-routes.d.ts.map +1 -1
- package/dist/web-server/routes/config-routes.js +6 -6
- package/dist/web-server/routes/config-routes.js.map +1 -1
- package/dist/web-server/routes/copilot-routes.d.ts.map +1 -1
- package/dist/web-server/routes/copilot-routes.js +3 -3
- package/dist/web-server/routes/copilot-routes.js.map +1 -1
- package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/copilot-settings-routes.js +6 -7
- package/dist/web-server/routes/copilot-settings-routes.js.map +1 -1
- package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cursor-routes.js +5 -5
- package/dist/web-server/routes/cursor-routes.js.map +1 -1
- package/dist/web-server/routes/cursor-settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cursor-settings-routes.js +8 -9
- package/dist/web-server/routes/cursor-settings-routes.js.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.js +5 -6
- package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
- package/dist/web-server/routes/misc-routes.d.ts.map +1 -1
- package/dist/web-server/routes/misc-routes.js +10 -11
- package/dist/web-server/routes/misc-routes.js.map +1 -1
- package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
- package/dist/web-server/routes/proxy-routes.js +18 -10
- package/dist/web-server/routes/proxy-routes.js.map +1 -1
- package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
- package/dist/web-server/routes/route-helpers.js +7 -6
- package/dist/web-server/routes/route-helpers.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +8 -9
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/dist/web-server/routes/websearch-routes.d.ts.map +1 -1
- package/dist/web-server/routes/websearch-routes.js +4 -4
- package/dist/web-server/routes/websearch-routes.js.map +1 -1
- package/dist/web-server/services/claude-extension-binding-service.js +2 -2
- package/dist/web-server/services/claude-extension-binding-service.js.map +1 -1
- package/dist/web-server/services/logs-dashboard-service.d.ts.map +1 -1
- package/dist/web-server/services/logs-dashboard-service.js +2 -2
- package/dist/web-server/services/logs-dashboard-service.js.map +1 -1
- package/dist/web-server/shared-routes.d.ts.map +1 -1
- package/dist/web-server/shared-routes.js +4 -4
- package/dist/web-server/shared-routes.js.map +1 -1
- package/dist/web-server/usage/aggregator.d.ts.map +1 -1
- package/dist/web-server/usage/aggregator.js +2 -2
- package/dist/web-server/usage/aggregator.js.map +1 -1
- package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -1
- package/dist/web-server/usage/cliproxy-usage-syncer.js +2 -2
- package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -1
- package/dist/web-server/usage/disk-cache.js +2 -2
- package/dist/web-server/usage/disk-cache.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* io-locks.ts
|
|
3
|
+
*
|
|
4
|
+
* Path constants, lockfile management, and config I/O helpers extracted from
|
|
5
|
+
* unified-config-loader.ts (Phase 1 split — issue #1164).
|
|
6
|
+
*
|
|
7
|
+
* Forward-reference note: loadUnifiedConfigWithLockHeld and
|
|
8
|
+
* writeUnifiedConfigWithLockHeld depend on mergeWithDefaults,
|
|
9
|
+
* validateCompositeVariants, generateYamlHeader, and generateYamlWithComments
|
|
10
|
+
* which still live in unified-config-loader.ts (extracted in later phases).
|
|
11
|
+
* Those are passed as callbacks to avoid a circular import. Once Phases 2–3
|
|
12
|
+
* land in separate modules with no dependency on this file, they can be
|
|
13
|
+
* imported directly.
|
|
14
|
+
*/
|
|
15
|
+
import type { UnifiedConfig } from '../unified-config-types';
|
|
16
|
+
export declare const CONFIG_YAML = "config.yaml";
|
|
17
|
+
export declare const CONFIG_JSON = "config.json";
|
|
18
|
+
export declare const CONFIG_LOCK = "config.yaml.lock";
|
|
19
|
+
/** Lock is stale after this many milliseconds */
|
|
20
|
+
export declare const LOCK_STALE_MS = 5000;
|
|
21
|
+
export declare const GO_DURATION_SEGMENT: string;
|
|
22
|
+
export declare const GO_DURATION_PATTERN: RegExp;
|
|
23
|
+
/**
|
|
24
|
+
* Get path to unified config.yaml
|
|
25
|
+
*/
|
|
26
|
+
export declare function getConfigYamlPath(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Get path to legacy config.json
|
|
29
|
+
*/
|
|
30
|
+
export declare function getConfigJsonPath(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Acquire lockfile for config write operations.
|
|
33
|
+
* Returns a lock token if acquired, null if already locked by another process.
|
|
34
|
+
* Cleans up stale locks (older than LOCK_STALE_MS).
|
|
35
|
+
*/
|
|
36
|
+
export declare function acquireLock(): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Release lockfile after config write operation.
|
|
39
|
+
*/
|
|
40
|
+
export declare function releaseLock(lockToken: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Check if unified config.yaml exists
|
|
43
|
+
*/
|
|
44
|
+
export declare function hasUnifiedConfig(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Check if legacy config.json exists
|
|
47
|
+
*/
|
|
48
|
+
export declare function hasLegacyConfig(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Sync sleep helper for lock retry loops.
|
|
51
|
+
* Uses Atomics.wait when available to avoid CPU-intensive busy-wait.
|
|
52
|
+
*/
|
|
53
|
+
export declare function sleepSync(ms: number): void;
|
|
54
|
+
/**
|
|
55
|
+
* Execute a callback while holding the config lock.
|
|
56
|
+
*/
|
|
57
|
+
export declare function withConfigWriteLock<T>(callback: () => T): T;
|
|
58
|
+
/**
|
|
59
|
+
* Load unified config directly from disk while lock is already held.
|
|
60
|
+
* Falls back to empty config when file doesn't exist.
|
|
61
|
+
*
|
|
62
|
+
* Forward-reference: mergeWithDefaults and validateCompositeVariants are
|
|
63
|
+
* passed as callbacks to avoid a circular dependency. They will be imported
|
|
64
|
+
* directly once all phases are complete.
|
|
65
|
+
*/
|
|
66
|
+
export declare function loadUnifiedConfigWithLockHeld(mergeWithDefaults: (partial: Partial<UnifiedConfig>) => UnifiedConfig, validateCompositeVariants: (config: UnifiedConfig) => void): UnifiedConfig;
|
|
67
|
+
/**
|
|
68
|
+
* Write unified config to disk while lock is already held.
|
|
69
|
+
* Uses atomic write (temp file + rename) to prevent corruption.
|
|
70
|
+
*
|
|
71
|
+
* Forward-reference: generateYamlHeader and generateYamlWithComments are
|
|
72
|
+
* passed as callbacks to avoid a circular dependency. They will be imported
|
|
73
|
+
* directly once all phases are complete.
|
|
74
|
+
*/
|
|
75
|
+
export declare function writeUnifiedConfigWithLockHeld(config: UnifiedConfig, generateYamlHeader: () => string, generateYamlWithComments: (config: UnifiedConfig) => string): void;
|
|
76
|
+
//# sourceMappingURL=io-locks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io-locks.d.ts","sourceRoot":"","sources":["../../../src/config/loader/io-locks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,iDAAiD;AACjD,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,mBAAmB,QAAwD,CAAC;AACzF,eAAO,MAAM,mBAAmB,QAA0C,CAAC;AAM3E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AA0BD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAuC3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAanD;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAMD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAS1C;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAwB3D;AAMD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,aAAa,EACrE,yBAAyB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GACzD,aAAa,CAgBf;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,aAAa,EACrB,kBAAkB,EAAE,MAAM,MAAM,EAChC,wBAAwB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,MAAM,GAC1D,IAAI,CAwCN"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* io-locks.ts
|
|
4
|
+
*
|
|
5
|
+
* Path constants, lockfile management, and config I/O helpers extracted from
|
|
6
|
+
* unified-config-loader.ts (Phase 1 split — issue #1164).
|
|
7
|
+
*
|
|
8
|
+
* Forward-reference note: loadUnifiedConfigWithLockHeld and
|
|
9
|
+
* writeUnifiedConfigWithLockHeld depend on mergeWithDefaults,
|
|
10
|
+
* validateCompositeVariants, generateYamlHeader, and generateYamlWithComments
|
|
11
|
+
* which still live in unified-config-loader.ts (extracted in later phases).
|
|
12
|
+
* Those are passed as callbacks to avoid a circular import. Once Phases 2–3
|
|
13
|
+
* land in separate modules with no dependency on this file, they can be
|
|
14
|
+
* imported directly.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.writeUnifiedConfigWithLockHeld = exports.loadUnifiedConfigWithLockHeld = exports.withConfigWriteLock = exports.sleepSync = exports.hasLegacyConfig = exports.hasUnifiedConfig = exports.releaseLock = exports.acquireLock = exports.getConfigJsonPath = exports.getConfigYamlPath = exports.GO_DURATION_PATTERN = exports.GO_DURATION_SEGMENT = exports.LOCK_STALE_MS = exports.CONFIG_LOCK = exports.CONFIG_JSON = exports.CONFIG_YAML = void 0;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const crypto = __importStar(require("crypto"));
|
|
44
|
+
const yaml = __importStar(require("js-yaml"));
|
|
45
|
+
const config_manager_1 = require("../../utils/config-manager");
|
|
46
|
+
const unified_config_types_1 = require("../unified-config-types");
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Path constants
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
exports.CONFIG_YAML = 'config.yaml';
|
|
51
|
+
exports.CONFIG_JSON = 'config.json';
|
|
52
|
+
exports.CONFIG_LOCK = 'config.yaml.lock';
|
|
53
|
+
/** Lock is stale after this many milliseconds */
|
|
54
|
+
exports.LOCK_STALE_MS = 5000;
|
|
55
|
+
exports.GO_DURATION_SEGMENT = String.raw `(?:\d+(?:\.\d+)?(?:ns|us|µs|μs|ms|s|m|h))`;
|
|
56
|
+
exports.GO_DURATION_PATTERN = new RegExp(`^${exports.GO_DURATION_SEGMENT}+$`);
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Path helpers
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
/**
|
|
61
|
+
* Get path to unified config.yaml
|
|
62
|
+
*/
|
|
63
|
+
function getConfigYamlPath() {
|
|
64
|
+
return path.join((0, config_manager_1.getCcsDir)(), exports.CONFIG_YAML);
|
|
65
|
+
}
|
|
66
|
+
exports.getConfigYamlPath = getConfigYamlPath;
|
|
67
|
+
/**
|
|
68
|
+
* Get path to legacy config.json
|
|
69
|
+
*/
|
|
70
|
+
function getConfigJsonPath() {
|
|
71
|
+
return path.join((0, config_manager_1.getCcsDir)(), exports.CONFIG_JSON);
|
|
72
|
+
}
|
|
73
|
+
exports.getConfigJsonPath = getConfigJsonPath;
|
|
74
|
+
/**
|
|
75
|
+
* Get path to config lockfile (internal)
|
|
76
|
+
*/
|
|
77
|
+
function getLockFilePath() {
|
|
78
|
+
return path.join((0, config_manager_1.getCcsDir)(), exports.CONFIG_LOCK);
|
|
79
|
+
}
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Process check
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
function processExists(pid) {
|
|
84
|
+
try {
|
|
85
|
+
process.kill(pid, 0);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// Lockfile primitives
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
/**
|
|
96
|
+
* Acquire lockfile for config write operations.
|
|
97
|
+
* Returns a lock token if acquired, null if already locked by another process.
|
|
98
|
+
* Cleans up stale locks (older than LOCK_STALE_MS).
|
|
99
|
+
*/
|
|
100
|
+
function acquireLock() {
|
|
101
|
+
const lockPath = getLockFilePath();
|
|
102
|
+
const lockDir = path.dirname(lockPath);
|
|
103
|
+
const lockToken = crypto.randomUUID();
|
|
104
|
+
const lockData = `${process.pid}\n${Date.now()}\n${lockToken}`;
|
|
105
|
+
try {
|
|
106
|
+
if (!fs.existsSync(lockDir)) {
|
|
107
|
+
fs.mkdirSync(lockDir, { recursive: true, mode: 0o700 });
|
|
108
|
+
}
|
|
109
|
+
// Check if lock exists
|
|
110
|
+
if (fs.existsSync(lockPath)) {
|
|
111
|
+
const content = fs.readFileSync(lockPath, 'utf8');
|
|
112
|
+
const [pidStr, timestampStr] = content.trim().split('\n');
|
|
113
|
+
const pid = Number.parseInt(pidStr, 10);
|
|
114
|
+
const timestamp = Number.parseInt(timestampStr, 10);
|
|
115
|
+
const hasLiveOwner = Number.isInteger(pid) && pid > 0 && processExists(pid);
|
|
116
|
+
const isStale = !Number.isFinite(timestamp) || Date.now() - timestamp > exports.LOCK_STALE_MS;
|
|
117
|
+
if (hasLiveOwner) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
if (isStale || !hasLiveOwner) {
|
|
121
|
+
fs.unlinkSync(lockPath);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Acquire lock
|
|
125
|
+
fs.writeFileSync(lockPath, lockData, { flag: 'wx', mode: 0o600 });
|
|
126
|
+
return lockToken;
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
// EEXIST means another process acquired the lock between our check and write
|
|
130
|
+
if (error.code === 'EEXIST') {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.acquireLock = acquireLock;
|
|
137
|
+
/**
|
|
138
|
+
* Release lockfile after config write operation.
|
|
139
|
+
*/
|
|
140
|
+
function releaseLock(lockToken) {
|
|
141
|
+
const lockPath = getLockFilePath();
|
|
142
|
+
try {
|
|
143
|
+
if (fs.existsSync(lockPath)) {
|
|
144
|
+
const content = fs.readFileSync(lockPath, 'utf8');
|
|
145
|
+
const fileToken = content.trim().split('\n')[2];
|
|
146
|
+
if (fileToken === lockToken) {
|
|
147
|
+
fs.unlinkSync(lockPath);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Ignore cleanup errors
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.releaseLock = releaseLock;
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
// Config format detection
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
159
|
+
/**
|
|
160
|
+
* Check if unified config.yaml exists
|
|
161
|
+
*/
|
|
162
|
+
function hasUnifiedConfig() {
|
|
163
|
+
return fs.existsSync(getConfigYamlPath());
|
|
164
|
+
}
|
|
165
|
+
exports.hasUnifiedConfig = hasUnifiedConfig;
|
|
166
|
+
/**
|
|
167
|
+
* Check if legacy config.json exists
|
|
168
|
+
*/
|
|
169
|
+
function hasLegacyConfig() {
|
|
170
|
+
return fs.existsSync(getConfigJsonPath());
|
|
171
|
+
}
|
|
172
|
+
exports.hasLegacyConfig = hasLegacyConfig;
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
// Sync sleep
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
/**
|
|
177
|
+
* Sync sleep helper for lock retry loops.
|
|
178
|
+
* Uses Atomics.wait when available to avoid CPU-intensive busy-wait.
|
|
179
|
+
*/
|
|
180
|
+
function sleepSync(ms) {
|
|
181
|
+
try {
|
|
182
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
const end = Date.now() + ms;
|
|
186
|
+
while (Date.now() < end) {
|
|
187
|
+
/* busy-wait */
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.sleepSync = sleepSync;
|
|
192
|
+
// ---------------------------------------------------------------------------
|
|
193
|
+
// Lock-aware execution wrapper
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
/**
|
|
196
|
+
* Execute a callback while holding the config lock.
|
|
197
|
+
*/
|
|
198
|
+
function withConfigWriteLock(callback) {
|
|
199
|
+
// Acquire lock (retry for up to 1 second)
|
|
200
|
+
const maxRetries = 10;
|
|
201
|
+
const retryDelayMs = 100;
|
|
202
|
+
let lockToken = null;
|
|
203
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
204
|
+
const acquiredToken = acquireLock();
|
|
205
|
+
if (acquiredToken) {
|
|
206
|
+
lockToken = acquiredToken;
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
sleepSync(retryDelayMs);
|
|
210
|
+
}
|
|
211
|
+
if (!lockToken) {
|
|
212
|
+
throw new Error('Config file is locked by another process. Wait a moment and try again.');
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
return callback();
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
// Always release lock
|
|
219
|
+
releaseLock(lockToken);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.withConfigWriteLock = withConfigWriteLock;
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
// Lock-held read/write helpers
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
/**
|
|
227
|
+
* Load unified config directly from disk while lock is already held.
|
|
228
|
+
* Falls back to empty config when file doesn't exist.
|
|
229
|
+
*
|
|
230
|
+
* Forward-reference: mergeWithDefaults and validateCompositeVariants are
|
|
231
|
+
* passed as callbacks to avoid a circular dependency. They will be imported
|
|
232
|
+
* directly once all phases are complete.
|
|
233
|
+
*/
|
|
234
|
+
function loadUnifiedConfigWithLockHeld(mergeWithDefaults, validateCompositeVariants) {
|
|
235
|
+
const yamlPath = getConfigYamlPath();
|
|
236
|
+
if (!fs.existsSync(yamlPath)) {
|
|
237
|
+
return (0, unified_config_types_1.createEmptyUnifiedConfig)();
|
|
238
|
+
}
|
|
239
|
+
const content = fs.readFileSync(yamlPath, 'utf8');
|
|
240
|
+
const parsed = yaml.load(content);
|
|
241
|
+
if (!(0, unified_config_types_1.isUnifiedConfig)(parsed)) {
|
|
242
|
+
throw new Error(`Invalid config format in ${yamlPath}`);
|
|
243
|
+
}
|
|
244
|
+
const merged = mergeWithDefaults(parsed);
|
|
245
|
+
validateCompositeVariants(merged);
|
|
246
|
+
return merged;
|
|
247
|
+
}
|
|
248
|
+
exports.loadUnifiedConfigWithLockHeld = loadUnifiedConfigWithLockHeld;
|
|
249
|
+
/**
|
|
250
|
+
* Write unified config to disk while lock is already held.
|
|
251
|
+
* Uses atomic write (temp file + rename) to prevent corruption.
|
|
252
|
+
*
|
|
253
|
+
* Forward-reference: generateYamlHeader and generateYamlWithComments are
|
|
254
|
+
* passed as callbacks to avoid a circular dependency. They will be imported
|
|
255
|
+
* directly once all phases are complete.
|
|
256
|
+
*/
|
|
257
|
+
function writeUnifiedConfigWithLockHeld(config, generateYamlHeader, generateYamlWithComments) {
|
|
258
|
+
const yamlPath = getConfigYamlPath();
|
|
259
|
+
const dir = path.dirname(yamlPath);
|
|
260
|
+
// Ensure directory exists
|
|
261
|
+
if (!fs.existsSync(dir)) {
|
|
262
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
263
|
+
}
|
|
264
|
+
// Ensure version is set
|
|
265
|
+
config.version = unified_config_types_1.UNIFIED_CONFIG_VERSION;
|
|
266
|
+
// Generate YAML with section comments
|
|
267
|
+
const yamlContent = generateYamlWithComments(config);
|
|
268
|
+
const content = generateYamlHeader() + yamlContent;
|
|
269
|
+
// Atomic write: write to temp file, then rename
|
|
270
|
+
const tempPath = `${yamlPath}.tmp.${process.pid}`;
|
|
271
|
+
try {
|
|
272
|
+
fs.writeFileSync(tempPath, content, { mode: 0o600 });
|
|
273
|
+
fs.renameSync(tempPath, yamlPath);
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
// Clean up temp file on error
|
|
277
|
+
if (fs.existsSync(tempPath)) {
|
|
278
|
+
try {
|
|
279
|
+
fs.unlinkSync(tempPath);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
// Ignore cleanup errors
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Classify filesystem errors
|
|
286
|
+
const err = error;
|
|
287
|
+
if (err.code === 'ENOSPC') {
|
|
288
|
+
throw new Error('Disk full - cannot save config. Free up space and try again.');
|
|
289
|
+
}
|
|
290
|
+
else if (err.code === 'EROFS' || err.code === 'EACCES') {
|
|
291
|
+
throw new Error(`Cannot write config - check file permissions: ${err.message}`);
|
|
292
|
+
}
|
|
293
|
+
throw error;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
exports.writeUnifiedConfigWithLockHeld = writeUnifiedConfigWithLockHeld;
|
|
297
|
+
//# sourceMappingURL=io-locks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io-locks.js","sourceRoot":"","sources":["../../../src/config/loader/io-locks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* normalizers.ts
|
|
3
|
+
*
|
|
4
|
+
* Input normalization and validation helpers extracted from
|
|
5
|
+
* unified-config-loader.ts (Phase 2 split — issue #1164).
|
|
6
|
+
*
|
|
7
|
+
* Contains: browser config normalizers, session affinity TTL normalizer,
|
|
8
|
+
* composite variant validator, continuity config normalizer, and official
|
|
9
|
+
* channels config normalizer.
|
|
10
|
+
*/
|
|
11
|
+
import type { UnifiedConfig, BrowserConfig, BrowserEvalMode, BrowserToolPolicy, OfficialChannelsConfig, ContinuityConfig } from '../unified-config-types';
|
|
12
|
+
export declare function normalizeBrowserDevtoolsPort(value: number | undefined): number;
|
|
13
|
+
export declare function normalizeBrowserPolicy(value: string | undefined): BrowserToolPolicy;
|
|
14
|
+
export declare function normalizeBrowserEvalMode(value: string | undefined): BrowserEvalMode;
|
|
15
|
+
export declare function canonicalizeBrowserConfig(config?: BrowserConfig, fallback?: BrowserConfig): BrowserConfig;
|
|
16
|
+
export declare function normalizeSessionAffinityTtl(value: unknown, fallback: string): string;
|
|
17
|
+
export declare function hasPositiveDuration(value: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Validate composite variant provider strings.
|
|
20
|
+
* Warns about invalid providers in composite variant configurations.
|
|
21
|
+
*/
|
|
22
|
+
export declare function validateCompositeVariants(config: UnifiedConfig): void;
|
|
23
|
+
/**
|
|
24
|
+
* Normalize continuity inheritance mapping payload.
|
|
25
|
+
* Keeps only non-empty string keys and values.
|
|
26
|
+
*/
|
|
27
|
+
export declare function normalizeContinuityInheritanceMap(value: unknown): Record<string, string> | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Normalize continuity section.
|
|
30
|
+
* Supports legacy root key: continuity_inherit_from_account.
|
|
31
|
+
*/
|
|
32
|
+
export declare function normalizeContinuityConfig(partial: Partial<UnifiedConfig>): ContinuityConfig | undefined;
|
|
33
|
+
export interface LegacyDiscordChannelsConfig {
|
|
34
|
+
enabled?: boolean;
|
|
35
|
+
unattended?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare function normalizeOfficialChannelsConfig(partial: Partial<UnifiedConfig> & {
|
|
38
|
+
discord_channels?: LegacyDiscordChannelsConfig;
|
|
39
|
+
}): OfficialChannelsConfig;
|
|
40
|
+
//# sourceMappingURL=normalizers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizers.d.ts","sourceRoot":"","sources":["../../../src/config/loader/normalizers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EAEtB,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAcjC,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAW9E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAEnF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAMnF;AAED,wBAAgB,yBAAyB,CACvC,MAAM,CAAC,EAAE,aAAa,EACtB,QAAQ,GAAE,aAAsC,GAC/C,aAAa,CAsBf;AAMD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWpF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAU1D;AAMD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAerE;AAMD;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAkBpC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,gBAAgB,GAAG,SAAS,CAiB9B;AAMD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;IAAE,gBAAgB,CAAC,EAAE,2BAA2B,CAAA;CAAE,GACnF,sBAAsB,CAqBxB"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* normalizers.ts
|
|
4
|
+
*
|
|
5
|
+
* Input normalization and validation helpers extracted from
|
|
6
|
+
* unified-config-loader.ts (Phase 2 split — issue #1164).
|
|
7
|
+
*
|
|
8
|
+
* Contains: browser config normalizers, session affinity TTL normalizer,
|
|
9
|
+
* composite variant validator, continuity config normalizer, and official
|
|
10
|
+
* channels config normalizer.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.normalizeOfficialChannelsConfig = exports.normalizeContinuityConfig = exports.normalizeContinuityInheritanceMap = exports.validateCompositeVariants = exports.hasPositiveDuration = exports.normalizeSessionAffinityTtl = exports.canonicalizeBrowserConfig = exports.normalizeBrowserEvalMode = exports.normalizeBrowserPolicy = exports.normalizeBrowserDevtoolsPort = void 0;
|
|
14
|
+
const unified_config_types_1 = require("../unified-config-types");
|
|
15
|
+
const composite_validator_1 = require("../../cliproxy/config/composite-validator");
|
|
16
|
+
const official_channels_ids_1 = require("../../channels/official-channels-ids");
|
|
17
|
+
const browser_settings_1 = require("../../utils/browser/browser-settings");
|
|
18
|
+
const io_locks_1 = require("./io-locks");
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Browser normalizers
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
function normalizeBrowserDevtoolsPort(value) {
|
|
23
|
+
if (!Number.isFinite(value)) {
|
|
24
|
+
return unified_config_types_1.DEFAULT_BROWSER_CONFIG.claude.devtools_port;
|
|
25
|
+
}
|
|
26
|
+
const port = Math.floor(value);
|
|
27
|
+
if (port < 1 || port > 65535) {
|
|
28
|
+
return unified_config_types_1.DEFAULT_BROWSER_CONFIG.claude.devtools_port;
|
|
29
|
+
}
|
|
30
|
+
return port;
|
|
31
|
+
}
|
|
32
|
+
exports.normalizeBrowserDevtoolsPort = normalizeBrowserDevtoolsPort;
|
|
33
|
+
function normalizeBrowserPolicy(value) {
|
|
34
|
+
return value === 'auto' || value === 'manual' ? value : unified_config_types_1.DEFAULT_BROWSER_CONFIG.claude.policy;
|
|
35
|
+
}
|
|
36
|
+
exports.normalizeBrowserPolicy = normalizeBrowserPolicy;
|
|
37
|
+
function normalizeBrowserEvalMode(value) {
|
|
38
|
+
if (value === 'disabled' || value === 'readonly' || value === 'readwrite') {
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
return unified_config_types_1.DEFAULT_BROWSER_CONFIG.claude.eval_mode ?? 'readonly';
|
|
42
|
+
}
|
|
43
|
+
exports.normalizeBrowserEvalMode = normalizeBrowserEvalMode;
|
|
44
|
+
function canonicalizeBrowserConfig(config, fallback = unified_config_types_1.DEFAULT_BROWSER_CONFIG) {
|
|
45
|
+
const claudeUserDataDir = config?.claude?.user_data_dir === undefined
|
|
46
|
+
? fallback.claude.user_data_dir || (0, browser_settings_1.getRecommendedBrowserUserDataDir)()
|
|
47
|
+
: config.claude.user_data_dir.trim() || (0, browser_settings_1.getRecommendedBrowserUserDataDir)();
|
|
48
|
+
return {
|
|
49
|
+
claude: {
|
|
50
|
+
enabled: config?.claude?.enabled ?? fallback.claude.enabled,
|
|
51
|
+
policy: normalizeBrowserPolicy(config?.claude?.policy ?? fallback.claude.policy),
|
|
52
|
+
user_data_dir: claudeUserDataDir,
|
|
53
|
+
devtools_port: normalizeBrowserDevtoolsPort(config?.claude?.devtools_port ?? fallback.claude.devtools_port),
|
|
54
|
+
eval_mode: normalizeBrowserEvalMode(config?.claude?.eval_mode ?? fallback.claude.eval_mode),
|
|
55
|
+
},
|
|
56
|
+
codex: {
|
|
57
|
+
enabled: config?.codex?.enabled ?? fallback.codex.enabled,
|
|
58
|
+
policy: normalizeBrowserPolicy(config?.codex?.policy ?? fallback.codex.policy),
|
|
59
|
+
eval_mode: normalizeBrowserEvalMode(config?.codex?.eval_mode ?? fallback.codex.eval_mode),
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
exports.canonicalizeBrowserConfig = canonicalizeBrowserConfig;
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Session affinity TTL normalizer
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
function normalizeSessionAffinityTtl(value, fallback) {
|
|
68
|
+
if (typeof value !== 'string') {
|
|
69
|
+
return fallback;
|
|
70
|
+
}
|
|
71
|
+
const trimmed = value.trim();
|
|
72
|
+
if (!trimmed || !io_locks_1.GO_DURATION_PATTERN.test(trimmed) || !hasPositiveDuration(trimmed)) {
|
|
73
|
+
return fallback;
|
|
74
|
+
}
|
|
75
|
+
return trimmed;
|
|
76
|
+
}
|
|
77
|
+
exports.normalizeSessionAffinityTtl = normalizeSessionAffinityTtl;
|
|
78
|
+
function hasPositiveDuration(value) {
|
|
79
|
+
const segments = value.match(new RegExp(io_locks_1.GO_DURATION_SEGMENT, 'g'));
|
|
80
|
+
if (!segments) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
return segments.some((segment) => {
|
|
84
|
+
const numeric = parseFloat(segment);
|
|
85
|
+
return Number.isFinite(numeric) && numeric > 0;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
exports.hasPositiveDuration = hasPositiveDuration;
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Composite variant validator
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
/**
|
|
93
|
+
* Validate composite variant provider strings.
|
|
94
|
+
* Warns about invalid providers in composite variant configurations.
|
|
95
|
+
*/
|
|
96
|
+
function validateCompositeVariants(config) {
|
|
97
|
+
const variants = config.cliproxy?.variants;
|
|
98
|
+
if (!variants)
|
|
99
|
+
return;
|
|
100
|
+
for (const [name, variant] of Object.entries(variants)) {
|
|
101
|
+
if ('type' in variant && variant.type === 'composite') {
|
|
102
|
+
const error = (0, composite_validator_1.validateCompositeTiers)(variant.tiers, {
|
|
103
|
+
defaultTier: variant.default_tier,
|
|
104
|
+
requireAllTiers: true,
|
|
105
|
+
});
|
|
106
|
+
if (error) {
|
|
107
|
+
console.warn(`[!] Variant '${name}': invalid composite config (${error})`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.validateCompositeVariants = validateCompositeVariants;
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
// Continuity config normalizer
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
/**
|
|
117
|
+
* Normalize continuity inheritance mapping payload.
|
|
118
|
+
* Keeps only non-empty string keys and values.
|
|
119
|
+
*/
|
|
120
|
+
function normalizeContinuityInheritanceMap(value) {
|
|
121
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
const normalized = {};
|
|
125
|
+
for (const [profileName, accountName] of Object.entries(value)) {
|
|
126
|
+
const normalizedProfile = profileName.trim();
|
|
127
|
+
const normalizedAccount = typeof accountName === 'string' ? accountName.trim() : '';
|
|
128
|
+
if (!normalizedProfile || !normalizedAccount) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
normalized[normalizedProfile] = normalizedAccount;
|
|
132
|
+
}
|
|
133
|
+
return Object.keys(normalized).length > 0 ? normalized : undefined;
|
|
134
|
+
}
|
|
135
|
+
exports.normalizeContinuityInheritanceMap = normalizeContinuityInheritanceMap;
|
|
136
|
+
/**
|
|
137
|
+
* Normalize continuity section.
|
|
138
|
+
* Supports legacy root key: continuity_inherit_from_account.
|
|
139
|
+
*/
|
|
140
|
+
function normalizeContinuityConfig(partial) {
|
|
141
|
+
const legacyMap = normalizeContinuityInheritanceMap(partial
|
|
142
|
+
.continuity_inherit_from_account);
|
|
143
|
+
const continuityMap = normalizeContinuityInheritanceMap(partial.continuity?.inherit_from_account);
|
|
144
|
+
if (!legacyMap && !continuityMap) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
inherit_from_account: {
|
|
149
|
+
...(legacyMap ?? {}),
|
|
150
|
+
...(continuityMap ?? {}),
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
exports.normalizeContinuityConfig = normalizeContinuityConfig;
|
|
155
|
+
function normalizeOfficialChannelsConfig(partial) {
|
|
156
|
+
const hasCanonicalChannelsSection = partial.channels !== undefined;
|
|
157
|
+
const hasExplicitSelectedField = hasCanonicalChannelsSection &&
|
|
158
|
+
Object.prototype.hasOwnProperty.call(partial.channels, 'selected');
|
|
159
|
+
const rawSelected = hasExplicitSelectedField && Array.isArray(partial.channels?.selected)
|
|
160
|
+
? partial.channels.selected.filter((value) => (0, official_channels_ids_1.isOfficialChannelId)(value))
|
|
161
|
+
: [];
|
|
162
|
+
return {
|
|
163
|
+
selected: hasCanonicalChannelsSection
|
|
164
|
+
? (0, official_channels_ids_1.normalizeOfficialChannelIds)(rawSelected)
|
|
165
|
+
: (0, official_channels_ids_1.resolveLegacyDiscordSelection)(partial.discord_channels?.enabled),
|
|
166
|
+
unattended: partial.channels?.unattended ??
|
|
167
|
+
partial.discord_channels?.unattended ??
|
|
168
|
+
unified_config_types_1.DEFAULT_OFFICIAL_CHANNELS_CONFIG.unattended,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
exports.normalizeOfficialChannelsConfig = normalizeOfficialChannelsConfig;
|
|
172
|
+
//# sourceMappingURL=normalizers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizers.js","sourceRoot":"","sources":["../../../src/config/loader/normalizers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* yaml-serializer.ts
|
|
3
|
+
*
|
|
4
|
+
* YAML generation helpers extracted from unified-config-loader.ts
|
|
5
|
+
* (Phase 3 split — issue #1164).
|
|
6
|
+
*
|
|
7
|
+
* Contains: generateYamlHeader, generateYamlWithComments.
|
|
8
|
+
* These produce the commented YAML written to config.yaml on every save.
|
|
9
|
+
*/
|
|
10
|
+
import type { UnifiedConfig } from '../unified-config-types';
|
|
11
|
+
/**
|
|
12
|
+
* Generate YAML header with helpful comments.
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateYamlHeader(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Generate YAML content with section comments for better readability.
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateYamlWithComments(config: UnifiedConfig): string;
|
|
19
|
+
//# sourceMappingURL=yaml-serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-serializer.d.ts","sourceRoot":"","sources":["../../../src/config/loader/yaml-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAsUtE"}
|