@a1hvdy/cc-openclaw 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +207 -0
- package/configs/.gitkeep +0 -0
- package/configs/council-reviewer-prompt.md +82 -0
- package/configs/council-system-prompt.md +141 -0
- package/dist/scripts/bench/ab-harness.d.ts +58 -0
- package/dist/scripts/bench/ab-harness.d.ts.map +1 -0
- package/dist/scripts/bench/ab-harness.js +78 -0
- package/dist/scripts/bench/ab-harness.js.map +1 -0
- package/dist/src/channels/adapter.d.ts +103 -0
- package/dist/src/channels/adapter.d.ts.map +1 -0
- package/dist/src/channels/adapter.js +38 -0
- package/dist/src/channels/adapter.js.map +1 -0
- package/dist/src/channels/telegram/completion-summary.d.ts +22 -0
- package/dist/src/channels/telegram/completion-summary.d.ts.map +1 -0
- package/dist/src/channels/telegram/completion-summary.js +186 -0
- package/dist/src/channels/telegram/completion-summary.js.map +1 -0
- package/dist/src/channels/telegram/error-renderer.d.ts +30 -0
- package/dist/src/channels/telegram/error-renderer.d.ts.map +1 -0
- package/dist/src/channels/telegram/error-renderer.js +133 -0
- package/dist/src/channels/telegram/error-renderer.js.map +1 -0
- package/dist/src/channels/telegram/event-reducer.d.ts +34 -0
- package/dist/src/channels/telegram/event-reducer.d.ts.map +1 -0
- package/dist/src/channels/telegram/event-reducer.js +579 -0
- package/dist/src/channels/telegram/event-reducer.js.map +1 -0
- package/dist/src/channels/telegram/index.d.ts +14 -0
- package/dist/src/channels/telegram/index.d.ts.map +1 -0
- package/dist/src/channels/telegram/index.js +14 -0
- package/dist/src/channels/telegram/index.js.map +1 -0
- package/dist/src/channels/telegram/injector.d.ts +54 -0
- package/dist/src/channels/telegram/injector.d.ts.map +1 -0
- package/dist/src/channels/telegram/injector.js +200 -0
- package/dist/src/channels/telegram/injector.js.map +1 -0
- package/dist/src/channels/telegram/live-card.d.ts +230 -0
- package/dist/src/channels/telegram/live-card.d.ts.map +1 -0
- package/dist/src/channels/telegram/live-card.js +916 -0
- package/dist/src/channels/telegram/live-card.js.map +1 -0
- package/dist/src/channels/telegram/state-machine.d.ts +23 -0
- package/dist/src/channels/telegram/state-machine.d.ts.map +1 -0
- package/dist/src/channels/telegram/state-machine.js +72 -0
- package/dist/src/channels/telegram/state-machine.js.map +1 -0
- package/dist/src/channels/telegram/tool-tracker.d.ts +147 -0
- package/dist/src/channels/telegram/tool-tracker.d.ts.map +1 -0
- package/dist/src/channels/telegram/tool-tracker.js +520 -0
- package/dist/src/channels/telegram/tool-tracker.js.map +1 -0
- package/dist/src/circuit-breaker.d.ts +22 -0
- package/dist/src/circuit-breaker.d.ts.map +1 -0
- package/dist/src/circuit-breaker.js +47 -0
- package/dist/src/circuit-breaker.js.map +1 -0
- package/dist/src/command-router/cc-handler.d.ts +67 -0
- package/dist/src/command-router/cc-handler.d.ts.map +1 -0
- package/dist/src/command-router/cc-handler.js +980 -0
- package/dist/src/command-router/cc-handler.js.map +1 -0
- package/dist/src/command-router/index.d.ts +3 -0
- package/dist/src/command-router/index.d.ts.map +1 -0
- package/dist/src/command-router/index.js +2 -0
- package/dist/src/command-router/index.js.map +1 -0
- package/dist/src/constants.d.ts +132 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +140 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/council/consensus.d.ts +21 -0
- package/dist/src/council/consensus.d.ts.map +1 -0
- package/dist/src/council/consensus.js +52 -0
- package/dist/src/council/consensus.js.map +1 -0
- package/dist/src/council/council.d.ts +68 -0
- package/dist/src/council/council.d.ts.map +1 -0
- package/dist/src/council/council.js +914 -0
- package/dist/src/council/council.js.map +1 -0
- package/dist/src/council/index.d.ts +3 -0
- package/dist/src/council/index.d.ts.map +1 -0
- package/dist/src/council/index.js +3 -0
- package/dist/src/council/index.js.map +1 -0
- package/dist/src/engines/base-oneshot-session.d.ts +88 -0
- package/dist/src/engines/base-oneshot-session.d.ts.map +1 -0
- package/dist/src/engines/base-oneshot-session.js +228 -0
- package/dist/src/engines/base-oneshot-session.js.map +1 -0
- package/dist/src/engines/index.d.ts +7 -0
- package/dist/src/engines/index.d.ts.map +1 -0
- package/dist/src/engines/index.js +7 -0
- package/dist/src/engines/index.js.map +1 -0
- package/dist/src/engines/persistent-codex-session.d.ts +17 -0
- package/dist/src/engines/persistent-codex-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-codex-session.js +106 -0
- package/dist/src/engines/persistent-codex-session.js.map +1 -0
- package/dist/src/engines/persistent-cursor-session.d.ts +22 -0
- package/dist/src/engines/persistent-cursor-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-cursor-session.js +242 -0
- package/dist/src/engines/persistent-cursor-session.js.map +1 -0
- package/dist/src/engines/persistent-custom-session.d.ts +79 -0
- package/dist/src/engines/persistent-custom-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-custom-session.js +939 -0
- package/dist/src/engines/persistent-custom-session.js.map +1 -0
- package/dist/src/engines/persistent-gemini-session.d.ts +22 -0
- package/dist/src/engines/persistent-gemini-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-gemini-session.js +217 -0
- package/dist/src/engines/persistent-gemini-session.js.map +1 -0
- package/dist/src/engines/persistent-session.d.ts +77 -0
- package/dist/src/engines/persistent-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-session.js +730 -0
- package/dist/src/engines/persistent-session.js.map +1 -0
- package/dist/src/health/handler.d.ts +40 -0
- package/dist/src/health/handler.d.ts.map +1 -0
- package/dist/src/health/handler.js +70 -0
- package/dist/src/health/handler.js.map +1 -0
- package/dist/src/health/index.d.ts +2 -0
- package/dist/src/health/index.d.ts.map +1 -0
- package/dist/src/health/index.js +2 -0
- package/dist/src/health/index.js.map +1 -0
- package/dist/src/index.d.ts +49 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +84 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/auto-recovery.d.ts +45 -0
- package/dist/src/lib/auto-recovery.d.ts.map +1 -0
- package/dist/src/lib/auto-recovery.js +217 -0
- package/dist/src/lib/auto-recovery.js.map +1 -0
- package/dist/src/lib/cache-parity.d.ts +39 -0
- package/dist/src/lib/cache-parity.d.ts.map +1 -0
- package/dist/src/lib/cache-parity.js +92 -0
- package/dist/src/lib/cache-parity.js.map +1 -0
- package/dist/src/lib/circuit-breaker.d.ts +22 -0
- package/dist/src/lib/circuit-breaker.d.ts.map +1 -0
- package/dist/src/lib/circuit-breaker.js +47 -0
- package/dist/src/lib/circuit-breaker.js.map +1 -0
- package/dist/src/lib/config.d.ts +74 -0
- package/dist/src/lib/config.d.ts.map +1 -0
- package/dist/src/lib/config.js +244 -0
- package/dist/src/lib/config.js.map +1 -0
- package/dist/src/lib/drift-detector.d.ts +47 -0
- package/dist/src/lib/drift-detector.d.ts.map +1 -0
- package/dist/src/lib/drift-detector.js +192 -0
- package/dist/src/lib/drift-detector.js.map +1 -0
- package/dist/src/lib/error-formatter.d.ts +78 -0
- package/dist/src/lib/error-formatter.d.ts.map +1 -0
- package/dist/src/lib/error-formatter.js +149 -0
- package/dist/src/lib/error-formatter.js.map +1 -0
- package/dist/src/lib/heartbeat-workaround.d.ts +45 -0
- package/dist/src/lib/heartbeat-workaround.d.ts.map +1 -0
- package/dist/src/lib/heartbeat-workaround.js +61 -0
- package/dist/src/lib/heartbeat-workaround.js.map +1 -0
- package/dist/src/lib/index.d.ts +8 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +8 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/lib/register-guard.d.ts +49 -0
- package/dist/src/lib/register-guard.d.ts.map +1 -0
- package/dist/src/lib/register-guard.js +73 -0
- package/dist/src/lib/register-guard.js.map +1 -0
- package/dist/src/lib/route-flag.d.ts +50 -0
- package/dist/src/lib/route-flag.d.ts.map +1 -0
- package/dist/src/lib/route-flag.js +52 -0
- package/dist/src/lib/route-flag.js.map +1 -0
- package/dist/src/lib/sysprompt-strip.d.ts +54 -0
- package/dist/src/lib/sysprompt-strip.d.ts.map +1 -0
- package/dist/src/lib/sysprompt-strip.js +75 -0
- package/dist/src/lib/sysprompt-strip.js.map +1 -0
- package/dist/src/lib/telemetry.d.ts +39 -0
- package/dist/src/lib/telemetry.d.ts.map +1 -0
- package/dist/src/lib/telemetry.js +73 -0
- package/dist/src/lib/telemetry.js.map +1 -0
- package/dist/src/lib/test-mode.d.ts +27 -0
- package/dist/src/lib/test-mode.d.ts.map +1 -0
- package/dist/src/lib/test-mode.js +38 -0
- package/dist/src/lib/test-mode.js.map +1 -0
- package/dist/src/lib/vendor-paths.d.ts +15 -0
- package/dist/src/lib/vendor-paths.d.ts.map +1 -0
- package/dist/src/lib/vendor-paths.js +32 -0
- package/dist/src/lib/vendor-paths.js.map +1 -0
- package/dist/src/logger.d.ts +17 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +46 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/mcp/bridge.d.ts +22 -0
- package/dist/src/mcp/bridge.d.ts.map +1 -0
- package/dist/src/mcp/bridge.js +78 -0
- package/dist/src/mcp/bridge.js.map +1 -0
- package/dist/src/mcp/index.d.ts +3 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/mcp/index.js +2 -0
- package/dist/src/mcp/index.js.map +1 -0
- package/dist/src/models.d.ts +70 -0
- package/dist/src/models.d.ts.map +1 -0
- package/dist/src/models.js +289 -0
- package/dist/src/models.js.map +1 -0
- package/dist/src/openai-compat/cli-stream-parser.d.ts +135 -0
- package/dist/src/openai-compat/cli-stream-parser.d.ts.map +1 -0
- package/dist/src/openai-compat/cli-stream-parser.js +195 -0
- package/dist/src/openai-compat/cli-stream-parser.js.map +1 -0
- package/dist/src/openai-compat/index.d.ts +2 -0
- package/dist/src/openai-compat/index.d.ts.map +1 -0
- package/dist/src/openai-compat/index.js +2 -0
- package/dist/src/openai-compat/index.js.map +1 -0
- package/dist/src/openai-compat/openai-compat.d.ts +281 -0
- package/dist/src/openai-compat/openai-compat.d.ts.map +1 -0
- package/dist/src/openai-compat/openai-compat.js +939 -0
- package/dist/src/openai-compat/openai-compat.js.map +1 -0
- package/dist/src/openai-compat/skill-resolver.d.ts +36 -0
- package/dist/src/openai-compat/skill-resolver.d.ts.map +1 -0
- package/dist/src/openai-compat/skill-resolver.js +134 -0
- package/dist/src/openai-compat/skill-resolver.js.map +1 -0
- package/dist/src/openai-compat/sse-translator.d.ts +32 -0
- package/dist/src/openai-compat/sse-translator.d.ts.map +1 -0
- package/dist/src/openai-compat/sse-translator.js +155 -0
- package/dist/src/openai-compat/sse-translator.js.map +1 -0
- package/dist/src/proxy/anthropic-adapter.d.ts +137 -0
- package/dist/src/proxy/anthropic-adapter.d.ts.map +1 -0
- package/dist/src/proxy/anthropic-adapter.js +392 -0
- package/dist/src/proxy/anthropic-adapter.js.map +1 -0
- package/dist/src/proxy/handler.d.ts +40 -0
- package/dist/src/proxy/handler.d.ts.map +1 -0
- package/dist/src/proxy/handler.js +378 -0
- package/dist/src/proxy/handler.js.map +1 -0
- package/dist/src/proxy/index.d.ts +5 -0
- package/dist/src/proxy/index.d.ts.map +1 -0
- package/dist/src/proxy/index.js +5 -0
- package/dist/src/proxy/index.js.map +1 -0
- package/dist/src/proxy/schema-cleaner.d.ts +12 -0
- package/dist/src/proxy/schema-cleaner.d.ts.map +1 -0
- package/dist/src/proxy/schema-cleaner.js +34 -0
- package/dist/src/proxy/schema-cleaner.js.map +1 -0
- package/dist/src/proxy/thought-cache.d.ts +20 -0
- package/dist/src/proxy/thought-cache.d.ts.map +1 -0
- package/dist/src/proxy/thought-cache.js +53 -0
- package/dist/src/proxy/thought-cache.js.map +1 -0
- package/dist/src/session/embedded-server.d.ts +26 -0
- package/dist/src/session/embedded-server.d.ts.map +1 -0
- package/dist/src/session/embedded-server.js +367 -0
- package/dist/src/session/embedded-server.js.map +1 -0
- package/dist/src/session/inbox-manager.d.ts +39 -0
- package/dist/src/session/inbox-manager.d.ts.map +1 -0
- package/dist/src/session/inbox-manager.js +111 -0
- package/dist/src/session/inbox-manager.js.map +1 -0
- package/dist/src/session/index.d.ts +4 -0
- package/dist/src/session/index.d.ts.map +1 -0
- package/dist/src/session/index.js +4 -0
- package/dist/src/session/index.js.map +1 -0
- package/dist/src/session/session-manager.d.ts +212 -0
- package/dist/src/session/session-manager.d.ts.map +1 -0
- package/dist/src/session/session-manager.js +1351 -0
- package/dist/src/session/session-manager.js.map +1 -0
- package/dist/src/session-bootstrap/cwd-patch.d.ts +51 -0
- package/dist/src/session-bootstrap/cwd-patch.d.ts.map +1 -0
- package/dist/src/session-bootstrap/cwd-patch.js +955 -0
- package/dist/src/session-bootstrap/cwd-patch.js.map +1 -0
- package/dist/src/session-bootstrap/index.d.ts +4 -0
- package/dist/src/session-bootstrap/index.d.ts.map +1 -0
- package/dist/src/session-bootstrap/index.js +4 -0
- package/dist/src/session-bootstrap/index.js.map +1 -0
- package/dist/src/session-bootstrap/sysprompt-strip.d.ts +26 -0
- package/dist/src/session-bootstrap/sysprompt-strip.d.ts.map +1 -0
- package/dist/src/session-bootstrap/sysprompt-strip.js +57 -0
- package/dist/src/session-bootstrap/sysprompt-strip.js.map +1 -0
- package/dist/src/session-bootstrap/think-conflict-resolver.d.ts +33 -0
- package/dist/src/session-bootstrap/think-conflict-resolver.d.ts.map +1 -0
- package/dist/src/session-bootstrap/think-conflict-resolver.js +234 -0
- package/dist/src/session-bootstrap/think-conflict-resolver.js.map +1 -0
- package/dist/src/types.d.ts +489 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +8 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/validation.d.ts +32 -0
- package/dist/src/validation.d.ts.map +1 -0
- package/dist/src/validation.js +104 -0
- package/dist/src/validation.js.map +1 -0
- package/dist/tests/_helpers/subprocess-mock.d.ts +35 -0
- package/dist/tests/_helpers/subprocess-mock.d.ts.map +1 -0
- package/dist/tests/_helpers/subprocess-mock.js +136 -0
- package/dist/tests/_helpers/subprocess-mock.js.map +1 -0
- package/dist/tests/auto-recovery.test.d.ts +2 -0
- package/dist/tests/auto-recovery.test.d.ts.map +1 -0
- package/dist/tests/auto-recovery.test.js +189 -0
- package/dist/tests/auto-recovery.test.js.map +1 -0
- package/dist/tests/bench-harness.test.d.ts +2 -0
- package/dist/tests/bench-harness.test.d.ts.map +1 -0
- package/dist/tests/bench-harness.test.js +21 -0
- package/dist/tests/bench-harness.test.js.map +1 -0
- package/dist/tests/cache-parity.test.d.ts +2 -0
- package/dist/tests/cache-parity.test.d.ts.map +1 -0
- package/dist/tests/cache-parity.test.js +401 -0
- package/dist/tests/cache-parity.test.js.map +1 -0
- package/dist/tests/command-router.test.d.ts +2 -0
- package/dist/tests/command-router.test.d.ts.map +1 -0
- package/dist/tests/command-router.test.js +60 -0
- package/dist/tests/command-router.test.js.map +1 -0
- package/dist/tests/council.test.d.ts +2 -0
- package/dist/tests/council.test.d.ts.map +1 -0
- package/dist/tests/council.test.js +20 -0
- package/dist/tests/council.test.js.map +1 -0
- package/dist/tests/drift-detector.test.d.ts +2 -0
- package/dist/tests/drift-detector.test.d.ts.map +1 -0
- package/dist/tests/drift-detector.test.js +268 -0
- package/dist/tests/drift-detector.test.js.map +1 -0
- package/dist/tests/eager-bootstrap-gating.test.d.ts +9 -0
- package/dist/tests/eager-bootstrap-gating.test.d.ts.map +1 -0
- package/dist/tests/eager-bootstrap-gating.test.js +97 -0
- package/dist/tests/eager-bootstrap-gating.test.js.map +1 -0
- package/dist/tests/engines.test.d.ts +2 -0
- package/dist/tests/engines.test.d.ts.map +1 -0
- package/dist/tests/engines.test.js +8 -0
- package/dist/tests/engines.test.js.map +1 -0
- package/dist/tests/error-formatter.test.d.ts +2 -0
- package/dist/tests/error-formatter.test.d.ts.map +1 -0
- package/dist/tests/error-formatter.test.js +220 -0
- package/dist/tests/error-formatter.test.js.map +1 -0
- package/dist/tests/health.test.d.ts +2 -0
- package/dist/tests/health.test.d.ts.map +1 -0
- package/dist/tests/health.test.js +110 -0
- package/dist/tests/health.test.js.map +1 -0
- package/dist/tests/heartbeat-workaround.test.d.ts +2 -0
- package/dist/tests/heartbeat-workaround.test.d.ts.map +1 -0
- package/dist/tests/heartbeat-workaround.test.js +90 -0
- package/dist/tests/heartbeat-workaround.test.js.map +1 -0
- package/dist/tests/index.test.d.ts +2 -0
- package/dist/tests/index.test.d.ts.map +1 -0
- package/dist/tests/index.test.js +7 -0
- package/dist/tests/index.test.js.map +1 -0
- package/dist/tests/lib-sysprompt-strip.test.d.ts +2 -0
- package/dist/tests/lib-sysprompt-strip.test.d.ts.map +1 -0
- package/dist/tests/lib-sysprompt-strip.test.js +145 -0
- package/dist/tests/lib-sysprompt-strip.test.js.map +1 -0
- package/dist/tests/listener-activation.test.d.ts +2 -0
- package/dist/tests/listener-activation.test.d.ts.map +1 -0
- package/dist/tests/listener-activation.test.js +87 -0
- package/dist/tests/listener-activation.test.js.map +1 -0
- package/dist/tests/mcp-bridge.test.d.ts +2 -0
- package/dist/tests/mcp-bridge.test.d.ts.map +1 -0
- package/dist/tests/mcp-bridge.test.js +137 -0
- package/dist/tests/mcp-bridge.test.js.map +1 -0
- package/dist/tests/openai-compat.test.d.ts +2 -0
- package/dist/tests/openai-compat.test.d.ts.map +1 -0
- package/dist/tests/openai-compat.test.js +8 -0
- package/dist/tests/openai-compat.test.js.map +1 -0
- package/dist/tests/proxy-heartbeat-integration.test.d.ts +15 -0
- package/dist/tests/proxy-heartbeat-integration.test.d.ts.map +1 -0
- package/dist/tests/proxy-heartbeat-integration.test.js +122 -0
- package/dist/tests/proxy-heartbeat-integration.test.js.map +1 -0
- package/dist/tests/proxy.test.d.ts +2 -0
- package/dist/tests/proxy.test.d.ts.map +1 -0
- package/dist/tests/proxy.test.js +8 -0
- package/dist/tests/proxy.test.js.map +1 -0
- package/dist/tests/register-guard-stacking.test.d.ts +2 -0
- package/dist/tests/register-guard-stacking.test.d.ts.map +1 -0
- package/dist/tests/register-guard-stacking.test.js +61 -0
- package/dist/tests/register-guard-stacking.test.js.map +1 -0
- package/dist/tests/register-guard.test.d.ts +2 -0
- package/dist/tests/register-guard.test.d.ts.map +1 -0
- package/dist/tests/register-guard.test.js +129 -0
- package/dist/tests/register-guard.test.js.map +1 -0
- package/dist/tests/route-flag-rollback.test.d.ts +2 -0
- package/dist/tests/route-flag-rollback.test.d.ts.map +1 -0
- package/dist/tests/route-flag-rollback.test.js +70 -0
- package/dist/tests/route-flag-rollback.test.js.map +1 -0
- package/dist/tests/route-flag.test.d.ts +2 -0
- package/dist/tests/route-flag.test.d.ts.map +1 -0
- package/dist/tests/route-flag.test.js +101 -0
- package/dist/tests/route-flag.test.js.map +1 -0
- package/dist/tests/session-bootstrap.test.d.ts +2 -0
- package/dist/tests/session-bootstrap.test.d.ts.map +1 -0
- package/dist/tests/session-bootstrap.test.js +183 -0
- package/dist/tests/session-bootstrap.test.js.map +1 -0
- package/dist/tests/session.test.d.ts +2 -0
- package/dist/tests/session.test.d.ts.map +1 -0
- package/dist/tests/session.test.js +17 -0
- package/dist/tests/session.test.js.map +1 -0
- package/dist/tests/state-machine.test.d.ts +2 -0
- package/dist/tests/state-machine.test.d.ts.map +1 -0
- package/dist/tests/state-machine.test.js +133 -0
- package/dist/tests/state-machine.test.js.map +1 -0
- package/dist/tests/streaming/cli-stream-parser.test.d.ts +2 -0
- package/dist/tests/streaming/cli-stream-parser.test.d.ts.map +1 -0
- package/dist/tests/streaming/cli-stream-parser.test.js +233 -0
- package/dist/tests/streaming/cli-stream-parser.test.js.map +1 -0
- package/dist/tests/streaming/feature-flag.test.d.ts +14 -0
- package/dist/tests/streaming/feature-flag.test.d.ts.map +1 -0
- package/dist/tests/streaming/feature-flag.test.js +163 -0
- package/dist/tests/streaming/feature-flag.test.js.map +1 -0
- package/dist/tests/streaming/no-tools-prompt.test.d.ts +17 -0
- package/dist/tests/streaming/no-tools-prompt.test.d.ts.map +1 -0
- package/dist/tests/streaming/no-tools-prompt.test.js +229 -0
- package/dist/tests/streaming/no-tools-prompt.test.js.map +1 -0
- package/dist/tests/streaming/skill-plus-tools.test.d.ts +14 -0
- package/dist/tests/streaming/skill-plus-tools.test.d.ts.map +1 -0
- package/dist/tests/streaming/skill-plus-tools.test.js +234 -0
- package/dist/tests/streaming/skill-plus-tools.test.js.map +1 -0
- package/dist/tests/streaming/sse-translator.test.d.ts +2 -0
- package/dist/tests/streaming/sse-translator.test.d.ts.map +1 -0
- package/dist/tests/streaming/sse-translator.test.js +227 -0
- package/dist/tests/streaming/sse-translator.test.js.map +1 -0
- package/dist/tests/streaming/tool-result-roundtrip.test.d.ts +11 -0
- package/dist/tests/streaming/tool-result-roundtrip.test.d.ts.map +1 -0
- package/dist/tests/streaming/tool-result-roundtrip.test.js +215 -0
- package/dist/tests/streaming/tool-result-roundtrip.test.js.map +1 -0
- package/dist/tests/streaming/tool-use-translation.test.d.ts +10 -0
- package/dist/tests/streaming/tool-use-translation.test.d.ts.map +1 -0
- package/dist/tests/streaming/tool-use-translation.test.js +251 -0
- package/dist/tests/streaming/tool-use-translation.test.js.map +1 -0
- package/dist/tests/telegram-bridge.test.d.ts +2 -0
- package/dist/tests/telegram-bridge.test.d.ts.map +1 -0
- package/dist/tests/telegram-bridge.test.js +17 -0
- package/dist/tests/telegram-bridge.test.js.map +1 -0
- package/dist/tests/telegram-injector.test.d.ts +2 -0
- package/dist/tests/telegram-injector.test.d.ts.map +1 -0
- package/dist/tests/telegram-injector.test.js +74 -0
- package/dist/tests/telegram-injector.test.js.map +1 -0
- package/dist/tests/telemetry.test.d.ts +2 -0
- package/dist/tests/telemetry.test.d.ts.map +1 -0
- package/dist/tests/telemetry.test.js +405 -0
- package/dist/tests/telemetry.test.js.map +1 -0
- package/dist/tests/test-mode.test.d.ts +2 -0
- package/dist/tests/test-mode.test.d.ts.map +1 -0
- package/dist/tests/test-mode.test.js +39 -0
- package/dist/tests/test-mode.test.js.map +1 -0
- package/mcp-config.template.json +13 -0
- package/mcp-tools.json +1 -0
- package/openclaw-mcp-bridge.cjs +152 -0
- package/openclaw.plugin.json +30 -0
- package/package.json +45 -0
- package/skills/.gitkeep +0 -0
- package/stubs/commands-status-deps.runtime.js +10 -0
- package/stubs/status.runtime.js +149 -0
- package/vendor/base-oneshot-session.d.ts +87 -0
- package/vendor/base-oneshot-session.js +227 -0
- package/vendor/base-oneshot-session.js.map +1 -0
- package/vendor/circuit-breaker.d.ts +21 -0
- package/vendor/circuit-breaker.js +47 -0
- package/vendor/circuit-breaker.js.map +1 -0
- package/vendor/consensus.d.ts +20 -0
- package/vendor/consensus.js +52 -0
- package/vendor/consensus.js.map +1 -0
- package/vendor/constants.d.ts +130 -0
- package/vendor/constants.js +139 -0
- package/vendor/constants.js.map +1 -0
- package/vendor/council.d.ts +67 -0
- package/vendor/council.js +913 -0
- package/vendor/council.js.map +1 -0
- package/vendor/embedded-server.d.ts +25 -0
- package/vendor/embedded-server.js +360 -0
- package/vendor/embedded-server.js.map +1 -0
- package/vendor/inbox-manager.d.ts +38 -0
- package/vendor/inbox-manager.js +111 -0
- package/vendor/inbox-manager.js.map +1 -0
- package/vendor/index.d.ts +63 -0
- package/vendor/index.js +705 -0
- package/vendor/index.js.map +1 -0
- package/vendor/logger.d.ts +16 -0
- package/vendor/logger.js +44 -0
- package/vendor/logger.js.map +1 -0
- package/vendor/models.d.ts +69 -0
- package/vendor/models.js +289 -0
- package/vendor/models.js.map +1 -0
- package/vendor/openai-compat.d.ts +197 -0
- package/vendor/openai-compat.js +721 -0
- package/vendor/openai-compat.js.map +1 -0
- package/vendor/persistent-codex-session.d.ts +16 -0
- package/vendor/persistent-codex-session.js +105 -0
- package/vendor/persistent-codex-session.js.map +1 -0
- package/vendor/persistent-cursor-session.d.ts +21 -0
- package/vendor/persistent-cursor-session.js +241 -0
- package/vendor/persistent-cursor-session.js.map +1 -0
- package/vendor/persistent-custom-session.d.ts +78 -0
- package/vendor/persistent-custom-session.js +937 -0
- package/vendor/persistent-custom-session.js.map +1 -0
- package/vendor/persistent-gemini-session.d.ts +21 -0
- package/vendor/persistent-gemini-session.js +216 -0
- package/vendor/persistent-gemini-session.js.map +1 -0
- package/vendor/persistent-session.d.ts +74 -0
- package/vendor/persistent-session.js +684 -0
- package/vendor/persistent-session.js.map +1 -0
- package/vendor/proxy/anthropic-adapter.d.ts +136 -0
- package/vendor/proxy/anthropic-adapter.js +392 -0
- package/vendor/proxy/anthropic-adapter.js.map +1 -0
- package/vendor/proxy/handler.d.ts +39 -0
- package/vendor/proxy/handler.js +323 -0
- package/vendor/proxy/handler.js.map +1 -0
- package/vendor/proxy/schema-cleaner.d.ts +11 -0
- package/vendor/proxy/schema-cleaner.js +34 -0
- package/vendor/proxy/schema-cleaner.js.map +1 -0
- package/vendor/proxy/thought-cache.d.ts +19 -0
- package/vendor/proxy/thought-cache.js +53 -0
- package/vendor/proxy/thought-cache.js.map +1 -0
- package/vendor/session-manager.d.ts +211 -0
- package/vendor/session-manager.js +1345 -0
- package/vendor/session-manager.js.map +1 -0
- package/vendor/skill-resolver.js +107 -0
- package/vendor/types.d.ts +466 -0
- package/vendor/types.js +8 -0
- package/vendor/types.js.map +1 -0
- package/vendor/validation.d.ts +31 -0
- package/vendor/validation.js +104 -0
- package/vendor/validation.js.map +1 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache-parity Track B — appendSystemPrompt + disk registry.
|
|
3
|
+
*
|
|
4
|
+
* Per memory `2026-04-26-cache-parity-track-b`: claude-local uses
|
|
5
|
+
* appendSystemPrompt (NOT body.system) + a disk registry so the Anthropic
|
|
6
|
+
* CLI auto-attaches cache_control on the system block. This module provides
|
|
7
|
+
* the registry primitives that cc-openclaw's session bootstrap will use.
|
|
8
|
+
*
|
|
9
|
+
* Env: OPENCLAW_CACHE_PARITY=1 (default-on in cc-openclaw) — set 0/false/off to disable.
|
|
10
|
+
*
|
|
11
|
+
* The disk registry lives at ~/.openclaw/workspace/memory/cc-openclaw-cache-registry.jsonl
|
|
12
|
+
* and tracks (sessionId, promptHash, attachedAt) so we can detect cache hits
|
|
13
|
+
* + emit metrics for the A/B benchmark harness in P2 R3.
|
|
14
|
+
*/
|
|
15
|
+
export declare const REGISTRY_PATH: string;
|
|
16
|
+
/** Resolve cache-parity enabled state. Default-on; only OPENCLAW_CACHE_PARITY=0/false/off opts out. */
|
|
17
|
+
export declare function isCacheParityEnabled(): boolean;
|
|
18
|
+
/** Compute a stable hash of a system prompt for registry tracking. Returns 16-char hex prefix. */
|
|
19
|
+
export declare function hashPrompt(prompt: string): string;
|
|
20
|
+
export interface RegistryEntry {
|
|
21
|
+
ts: string;
|
|
22
|
+
sessionId: string;
|
|
23
|
+
promptHash: string;
|
|
24
|
+
promptBytes: number;
|
|
25
|
+
attached: boolean;
|
|
26
|
+
source: 'appendSystemPrompt' | 'body.system' | 'unknown';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Record a system-prompt attachment event. Called by session bootstrap when
|
|
30
|
+
* it appends a sysprompt via appendSystemPrompt rather than body.system.
|
|
31
|
+
*/
|
|
32
|
+
export declare function recordAttachment(input: Omit<RegistryEntry, 'ts' | 'promptHash' | 'promptBytes'> & {
|
|
33
|
+
prompt: string;
|
|
34
|
+
}): void;
|
|
35
|
+
/** Read the entire registry — used by the A/B bench harness in P2 R3. */
|
|
36
|
+
export declare function readRegistry(): RegistryEntry[];
|
|
37
|
+
export declare function _setWriterForTests(w: (entry: RegistryEntry) => void): void;
|
|
38
|
+
export declare function _restoreDefaultWriterForTests(): void;
|
|
39
|
+
//# sourceMappingURL=cache-parity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-parity.d.ts","sourceRoot":"","sources":["../../../src/lib/cache-parity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,eAAO,MAAM,aAAa,QAAyD,CAAC;AASpF,uGAAuG;AACvG,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C;AAID,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAID,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,oBAAoB,GAAG,aAAa,GAAG,SAAS,CAAC;CAC1D;AAoBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,YAAY,GAAG,aAAa,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GACnF,IAAI,CAUN;AAED,yEAAyE;AACzE,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAW9C;AAID,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAE1E;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache-parity Track B — appendSystemPrompt + disk registry.
|
|
3
|
+
*
|
|
4
|
+
* Per memory `2026-04-26-cache-parity-track-b`: claude-local uses
|
|
5
|
+
* appendSystemPrompt (NOT body.system) + a disk registry so the Anthropic
|
|
6
|
+
* CLI auto-attaches cache_control on the system block. This module provides
|
|
7
|
+
* the registry primitives that cc-openclaw's session bootstrap will use.
|
|
8
|
+
*
|
|
9
|
+
* Env: OPENCLAW_CACHE_PARITY=1 (default-on in cc-openclaw) — set 0/false/off to disable.
|
|
10
|
+
*
|
|
11
|
+
* The disk registry lives at ~/.openclaw/workspace/memory/cc-openclaw-cache-registry.jsonl
|
|
12
|
+
* and tracks (sessionId, promptHash, attachedAt) so we can detect cache hits
|
|
13
|
+
* + emit metrics for the A/B benchmark harness in P2 R3.
|
|
14
|
+
*/
|
|
15
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
16
|
+
import { dirname, join } from 'node:path';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { createHash } from 'node:crypto';
|
|
19
|
+
import { getCacheParityEnabled, isLogLevelDebug } from './config.js';
|
|
20
|
+
// ─── Paths ───────────────────────────────────────────────────────────────────
|
|
21
|
+
const REGISTRY_DIR = join(homedir(), '.openclaw', 'workspace', 'memory');
|
|
22
|
+
export const REGISTRY_PATH = join(REGISTRY_DIR, 'cc-openclaw-cache-registry.jsonl');
|
|
23
|
+
function ensureDir(filePath) {
|
|
24
|
+
const dir = dirname(filePath);
|
|
25
|
+
if (!existsSync(dir))
|
|
26
|
+
mkdirSync(dir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
// ─── Enabled check ───────────────────────────────────────────────────────────
|
|
29
|
+
/** Resolve cache-parity enabled state. Default-on; only OPENCLAW_CACHE_PARITY=0/false/off opts out. */
|
|
30
|
+
export function isCacheParityEnabled() {
|
|
31
|
+
// Env read centralized in src/lib/config.ts (PRP_v3 §5 hard rule).
|
|
32
|
+
return getCacheParityEnabled();
|
|
33
|
+
}
|
|
34
|
+
// ─── Hashing ─────────────────────────────────────────────────────────────────
|
|
35
|
+
/** Compute a stable hash of a system prompt for registry tracking. Returns 16-char hex prefix. */
|
|
36
|
+
export function hashPrompt(prompt) {
|
|
37
|
+
return createHash('sha256').update(prompt, 'utf8').digest('hex').slice(0, 16);
|
|
38
|
+
}
|
|
39
|
+
// ─── Writer ──────────────────────────────────────────────────────────────────
|
|
40
|
+
let writer = defaultWriter;
|
|
41
|
+
function defaultWriter(entry) {
|
|
42
|
+
if (!isCacheParityEnabled())
|
|
43
|
+
return;
|
|
44
|
+
try {
|
|
45
|
+
ensureDir(REGISTRY_PATH);
|
|
46
|
+
appendFileSync(REGISTRY_PATH, JSON.stringify(entry) + '\n');
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (isLogLevelDebug()) {
|
|
50
|
+
process.stderr.write(`[cache-parity] registry write failed: ${err.message}\n`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
55
|
+
/**
|
|
56
|
+
* Record a system-prompt attachment event. Called by session bootstrap when
|
|
57
|
+
* it appends a sysprompt via appendSystemPrompt rather than body.system.
|
|
58
|
+
*/
|
|
59
|
+
export function recordAttachment(input) {
|
|
60
|
+
const { prompt, ...rest } = input;
|
|
61
|
+
writer({
|
|
62
|
+
ts: new Date().toISOString(),
|
|
63
|
+
sessionId: rest.sessionId,
|
|
64
|
+
promptHash: hashPrompt(prompt),
|
|
65
|
+
promptBytes: Buffer.byteLength(prompt, 'utf8'),
|
|
66
|
+
attached: rest.attached,
|
|
67
|
+
source: rest.source,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/** Read the entire registry — used by the A/B bench harness in P2 R3. */
|
|
71
|
+
export function readRegistry() {
|
|
72
|
+
if (!existsSync(REGISTRY_PATH))
|
|
73
|
+
return [];
|
|
74
|
+
try {
|
|
75
|
+
const content = readFileSync(REGISTRY_PATH, 'utf8');
|
|
76
|
+
return content
|
|
77
|
+
.split('\n')
|
|
78
|
+
.filter((line) => line.trim().length > 0)
|
|
79
|
+
.map((line) => JSON.parse(line));
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// ─── Test hooks ──────────────────────────────────────────────────────────────
|
|
86
|
+
export function _setWriterForTests(w) {
|
|
87
|
+
writer = w;
|
|
88
|
+
}
|
|
89
|
+
export function _restoreDefaultWriterForTests() {
|
|
90
|
+
writer = defaultWriter;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=cache-parity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-parity.js","sourceRoot":"","sources":["../../../src/lib/cache-parity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit breaker for engine failure tracking.
|
|
3
|
+
*
|
|
4
|
+
* Opens after CIRCUIT_BREAKER_THRESHOLD consecutive failures per engine,
|
|
5
|
+
* with exponential backoff capped at CIRCUIT_BREAKER_MAX_BACKOFF_MS.
|
|
6
|
+
* Resets on a successful engine start.
|
|
7
|
+
*/
|
|
8
|
+
export declare class CircuitBreaker {
|
|
9
|
+
private breakers;
|
|
10
|
+
/** Throws if the engine circuit is open and backoff has not yet expired. */
|
|
11
|
+
check(engine: string): void;
|
|
12
|
+
/** Record a failure — increments count and sets exponential backoff. */
|
|
13
|
+
recordFailure(engine: string): void;
|
|
14
|
+
/** Reset (clear) the breaker for an engine after a successful start. */
|
|
15
|
+
reset(engine: string): void;
|
|
16
|
+
/** Get status snapshot for health() reporting. */
|
|
17
|
+
getStatus(): Record<string, {
|
|
18
|
+
failures: number;
|
|
19
|
+
backoffUntil: string | null;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../../src/lib/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmC;IAEnD,4EAA4E;IAC5E,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAa3B,wEAAwE;IACxE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAYnC,wEAAwE;IACxE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI3B,kDAAkD;IAClD,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAW/E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit breaker for engine failure tracking.
|
|
3
|
+
*
|
|
4
|
+
* Opens after CIRCUIT_BREAKER_THRESHOLD consecutive failures per engine,
|
|
5
|
+
* with exponential backoff capped at CIRCUIT_BREAKER_MAX_BACKOFF_MS.
|
|
6
|
+
* Resets on a successful engine start.
|
|
7
|
+
*/
|
|
8
|
+
import { CIRCUIT_BREAKER_THRESHOLD, CIRCUIT_BREAKER_BACKOFF_BASE_MS, CIRCUIT_BREAKER_MAX_BACKOFF_MS, } from '../constants.js';
|
|
9
|
+
export class CircuitBreaker {
|
|
10
|
+
breakers = new Map();
|
|
11
|
+
/** Throws if the engine circuit is open and backoff has not yet expired. */
|
|
12
|
+
check(engine) {
|
|
13
|
+
const breaker = this.breakers.get(engine);
|
|
14
|
+
if (!breaker)
|
|
15
|
+
return;
|
|
16
|
+
if (breaker.count >= CIRCUIT_BREAKER_THRESHOLD && Date.now() < breaker.backoffUntil) {
|
|
17
|
+
const remaining = Math.ceil((breaker.backoffUntil - Date.now()) / 1000);
|
|
18
|
+
throw new Error(`Engine '${engine}' circuit breaker open after ${breaker.count} consecutive failures. ` +
|
|
19
|
+
`Retry in ${remaining}s.`);
|
|
20
|
+
}
|
|
21
|
+
// If backoff has expired, allow the attempt (will reset on success)
|
|
22
|
+
}
|
|
23
|
+
/** Record a failure — increments count and sets exponential backoff. */
|
|
24
|
+
recordFailure(engine) {
|
|
25
|
+
const existing = this.breakers.get(engine) || { count: 0, lastFailure: 0, backoffUntil: 0 };
|
|
26
|
+
existing.count++;
|
|
27
|
+
existing.lastFailure = Date.now();
|
|
28
|
+
const backoff = Math.min(CIRCUIT_BREAKER_BACKOFF_BASE_MS * Math.pow(2, existing.count - 1), CIRCUIT_BREAKER_MAX_BACKOFF_MS);
|
|
29
|
+
existing.backoffUntil = Date.now() + backoff;
|
|
30
|
+
this.breakers.set(engine, existing);
|
|
31
|
+
}
|
|
32
|
+
/** Reset (clear) the breaker for an engine after a successful start. */
|
|
33
|
+
reset(engine) {
|
|
34
|
+
this.breakers.delete(engine);
|
|
35
|
+
}
|
|
36
|
+
/** Get status snapshot for health() reporting. */
|
|
37
|
+
getStatus() {
|
|
38
|
+
return Object.fromEntries([...this.breakers].map(([engine, state]) => [
|
|
39
|
+
engine,
|
|
40
|
+
{
|
|
41
|
+
failures: state.count,
|
|
42
|
+
backoffUntil: state.backoffUntil > Date.now() ? new Date(state.backoffUntil).toISOString() : null,
|
|
43
|
+
},
|
|
44
|
+
]));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=circuit-breaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../../src/lib/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AAQzB,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEnD,4EAA4E;IAC5E,KAAK,CAAC,MAAc;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,OAAO,CAAC,KAAK,IAAI,yBAAyB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YACpF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACxE,MAAM,IAAI,KAAK,CACb,WAAW,MAAM,gCAAgC,OAAO,CAAC,KAAK,yBAAyB;gBACrF,YAAY,SAAS,IAAI,CAC5B,CAAC;QACJ,CAAC;QACD,oEAAoE;IACtE,CAAC;IAED,wEAAwE;IACxE,aAAa,CAAC,MAAc;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAC5F,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,+BAA+B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EACjE,8BAA8B,CAC/B,CAAC;QACF,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,MAAc;QAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,kDAAkD;IAClD,SAAS;QACP,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM;YACN;gBACE,QAAQ,EAAE,KAAK,CAAC,KAAK;gBACrB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;aAClG;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* config — single env-reader source of truth (PRP_v3 §5 hard rule).
|
|
3
|
+
*
|
|
4
|
+
* v3 §5 mandates: `process.env` reads only in `src/index.ts`,
|
|
5
|
+
* `src/lib/route-flag.ts`, and this module. Every other source file imports
|
|
6
|
+
* its config from here via the typed getter functions.
|
|
7
|
+
*
|
|
8
|
+
* Why getters (not cached constants): tests flip env vars at runtime via
|
|
9
|
+
* `process.env.X = 'y'` and expect immediate effect. Cached-at-import
|
|
10
|
+
* constants would freeze the value at first load, breaking every existing
|
|
11
|
+
* test that toggles env mid-run. Getters preserve test flippability while
|
|
12
|
+
* still centralizing env-coupling to one module.
|
|
13
|
+
*
|
|
14
|
+
* Adding a new env var: add a getter here, import it from the consumer.
|
|
15
|
+
* Do NOT add `process.env.X` reads in any other file under src/ except
|
|
16
|
+
* the two pre-authorized exceptions noted above.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getAggressiveStripEnabled(): boolean;
|
|
19
|
+
export declare function getCacheParityEnabled(): boolean;
|
|
20
|
+
/** Strict opt-in variant used by cwd-patch route patch (Track B append). */
|
|
21
|
+
export declare function isCacheParityTrackB(): boolean;
|
|
22
|
+
export declare function getLogLevel(): string | undefined;
|
|
23
|
+
/** Convenience boolean — true iff `getLogLevel() === 'debug'`. */
|
|
24
|
+
export declare function isLogLevelDebug(): boolean;
|
|
25
|
+
export declare function isTokenTelemetryEnabled(): boolean;
|
|
26
|
+
export declare function isSyspromptDumpEnabled(): boolean;
|
|
27
|
+
export declare function getMaxConcurrentSessions(): number;
|
|
28
|
+
export declare function getSessionTtlMinutes(): number;
|
|
29
|
+
export declare function ensureUxBridgeAllSessionsDefault(): {
|
|
30
|
+
mutated: boolean;
|
|
31
|
+
value: string;
|
|
32
|
+
};
|
|
33
|
+
export declare function getServerHost(): string;
|
|
34
|
+
/** Per-IP rate limit; falls back to RATE_LIMIT_MAX_REQUESTS if unset/invalid. */
|
|
35
|
+
export declare function getRateLimit(): number;
|
|
36
|
+
/** Bearer token for embedded server. Undefined → no auth (default). */
|
|
37
|
+
export declare function getServerToken(): string | undefined;
|
|
38
|
+
/** True iff CORS is wildcarded via OPENCLAW_CORS_ORIGINS=*. */
|
|
39
|
+
export declare function isCorsAllowAll(): boolean;
|
|
40
|
+
export declare function getGatewayUrl(): string | undefined;
|
|
41
|
+
export declare function getGatewayKey(): string | undefined;
|
|
42
|
+
export declare function getAnthropicApiKey(): string | undefined;
|
|
43
|
+
export declare function getOpenaiApiKey(): string | undefined;
|
|
44
|
+
export declare function getGeminiApiKey(): string | undefined;
|
|
45
|
+
export declare function getGeminiBin(): string | undefined;
|
|
46
|
+
export declare function getCodexBin(): string | undefined;
|
|
47
|
+
export declare function getCursorBin(): string | undefined;
|
|
48
|
+
export declare function getClaudeBin(): string | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* PATH passed to spawned engine subprocesses. Falls back to the standard
|
|
51
|
+
* Unix path so binaries resolve even when the parent's PATH is unset
|
|
52
|
+
* (preserved from persistent-session.ts:257 + persistent-custom-session.ts:240).
|
|
53
|
+
*/
|
|
54
|
+
export declare function getProcessPath(): string;
|
|
55
|
+
export declare function isTokenTelemetryWriterEnabled(): boolean;
|
|
56
|
+
/** Strict opt-in — register-guard event logging via OPENCLAW_REGISTER_DEBUG=1. */
|
|
57
|
+
export declare function isRegisterDebugEnabled(): boolean;
|
|
58
|
+
export declare function isHeartbeatWorkaroundDisabled(): boolean;
|
|
59
|
+
export declare function getQuotaPausePct(): number;
|
|
60
|
+
/** Raw value for `isToolsPerMessageModeEnabled()` parsing. */
|
|
61
|
+
export declare function getOpenaiCompatToolsPerMessage(): string | undefined;
|
|
62
|
+
/** Strict opt-in — legacy new-conversation heuristic via env=1. */
|
|
63
|
+
export declare function isOpenaiCompatNewConvoHeuristic(): boolean;
|
|
64
|
+
export declare function getOpenaiCompatStatusUrl(): string | undefined;
|
|
65
|
+
export declare function getUxBridgeAllSessions(): string | undefined;
|
|
66
|
+
export declare function getAnthropicBaseUrlEnv(): string | undefined;
|
|
67
|
+
export declare function isSavvyLiveCardEnabled(): boolean;
|
|
68
|
+
export declare function getHomeOrTmp(): string;
|
|
69
|
+
export declare function getHealthPortEnv(): string | undefined;
|
|
70
|
+
export declare function isDriftAlertsEnabled(): boolean;
|
|
71
|
+
/** Dedup window for repeated drift Telegram alerts. Default 1h. */
|
|
72
|
+
export declare function getDriftDedupeWindowMs(): number;
|
|
73
|
+
export declare function isAutoRecoveryEnabled(): boolean;
|
|
74
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,wBAAgB,yBAAyB,IAAI,OAAO,CAInD;AAcD,wBAAgB,qBAAqB,IAAI,OAAO,CAI/C;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAMD,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAGhD;AAED,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAKD,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAKD,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AASD,wBAAgB,gCAAgC,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAOtF;AAID,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,iFAAiF;AACjF,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,uEAAuE;AACvE,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAGnD;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAID,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAGlD;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAGlD;AAMD,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAGvD;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAGpD;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAGpD;AAMD,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAGjD;AAED,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAGhD;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAGjD;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAQD,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAKD,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAKD,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC;AAID,8DAA8D;AAC9D,wBAAgB,8BAA8B,IAAI,MAAM,GAAG,SAAS,CAGnE;AAED,mEAAmE;AACnE,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,SAAS,CAG7D;AAMD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAG3D;AAMD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAG3D;AAID,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAMD,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD;AAKD,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAKD,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* config — single env-reader source of truth (PRP_v3 §5 hard rule).
|
|
3
|
+
*
|
|
4
|
+
* v3 §5 mandates: `process.env` reads only in `src/index.ts`,
|
|
5
|
+
* `src/lib/route-flag.ts`, and this module. Every other source file imports
|
|
6
|
+
* its config from here via the typed getter functions.
|
|
7
|
+
*
|
|
8
|
+
* Why getters (not cached constants): tests flip env vars at runtime via
|
|
9
|
+
* `process.env.X = 'y'` and expect immediate effect. Cached-at-import
|
|
10
|
+
* constants would freeze the value at first load, breaking every existing
|
|
11
|
+
* test that toggles env mid-run. Getters preserve test flippability while
|
|
12
|
+
* still centralizing env-coupling to one module.
|
|
13
|
+
*
|
|
14
|
+
* Adding a new env var: add a getter here, import it from the consumer.
|
|
15
|
+
* Do NOT add `process.env.X` reads in any other file under src/ except
|
|
16
|
+
* the two pre-authorized exceptions noted above.
|
|
17
|
+
*/
|
|
18
|
+
import { RATE_LIMIT_MAX_REQUESTS } from '../constants.js';
|
|
19
|
+
// ── Sysprompt strip (PRP_v3 §10) ─────────────────────────────────────────
|
|
20
|
+
// Default ON. Opt-out via OPENCLAW_AGGRESSIVE_STRIP=0|false|off (exact-match,
|
|
21
|
+
// case-sensitive — preserved bit-for-bit from sysprompt-strip.ts:43-45 to
|
|
22
|
+
// avoid breaking the 18 existing strip tests).
|
|
23
|
+
export function getAggressiveStripEnabled() {
|
|
24
|
+
const env = process.env.OPENCLAW_AGGRESSIVE_STRIP;
|
|
25
|
+
if (env === '0' || env === 'false' || env === 'off')
|
|
26
|
+
return false;
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
// ── Cache parity Track B (PRP_v3 §10) ────────────────────────────────────
|
|
30
|
+
// Default ON. Opt-out via OPENCLAW_CACHE_PARITY=0|false|off (exact-match,
|
|
31
|
+
// case-sensitive — preserved from cache-parity.ts:35-37).
|
|
32
|
+
//
|
|
33
|
+
// NOTE — semantic divergence vs `isCacheParityTrackB()` below:
|
|
34
|
+
// `getCacheParityEnabled()` is the cache-parity *module* gate (default ON).
|
|
35
|
+
// `isCacheParityTrackB()` is the cwd-patch *route patch* gate (default OFF,
|
|
36
|
+
// strict opt-in via `=== '1'`). Both currently key on OPENCLAW_CACHE_PARITY,
|
|
37
|
+
// which is a latent bug — flipping the env var doesn't switch them in lock
|
|
38
|
+
// step. Tracked for B5-followup; B5-heavy preserves existing call-site
|
|
39
|
+
// semantics bit-for-bit.
|
|
40
|
+
export function getCacheParityEnabled() {
|
|
41
|
+
const env = process.env.OPENCLAW_CACHE_PARITY;
|
|
42
|
+
if (env === '0' || env === 'false' || env === 'off')
|
|
43
|
+
return false;
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
/** Strict opt-in variant used by cwd-patch route patch (Track B append). */
|
|
47
|
+
export function isCacheParityTrackB() {
|
|
48
|
+
return process.env.OPENCLAW_CACHE_PARITY === '1';
|
|
49
|
+
}
|
|
50
|
+
// ── Log level (PRP_v3 §10) ───────────────────────────────────────────────
|
|
51
|
+
// Returns raw string for the logger to parse. Empty/unset → undefined; the
|
|
52
|
+
// caller decides the default (logger.ts uses 'info').
|
|
53
|
+
export function getLogLevel() {
|
|
54
|
+
const v = process.env.OPENCLAW_LOG_LEVEL;
|
|
55
|
+
return v === undefined || v === null || v === '' ? undefined : v;
|
|
56
|
+
}
|
|
57
|
+
/** Convenience boolean — true iff `getLogLevel() === 'debug'`. */
|
|
58
|
+
export function isLogLevelDebug() {
|
|
59
|
+
return getLogLevel() === 'debug';
|
|
60
|
+
}
|
|
61
|
+
// ── Telemetry & diagnostics (cwd-patch) ──────────────────────────────────
|
|
62
|
+
// Strict opt-in — both default OFF, both keyed on `=== '1'`.
|
|
63
|
+
export function isTokenTelemetryEnabled() {
|
|
64
|
+
return process.env.OPENCLAW_TOKEN_TELEMETRY === '1';
|
|
65
|
+
}
|
|
66
|
+
export function isSyspromptDumpEnabled() {
|
|
67
|
+
return process.env.OPENCLAW_SYSPROMPT_DUMP === '1';
|
|
68
|
+
}
|
|
69
|
+
// ── SessionManager bootstrap caps (cwd-patch eager-init) ─────────────────
|
|
70
|
+
// Defaults preserved from cwd-patch.ts:844-845.
|
|
71
|
+
export function getMaxConcurrentSessions() {
|
|
72
|
+
return parseInt(process.env.CLAUDE_CODE_MAX_SESSIONS || '', 10) || 32;
|
|
73
|
+
}
|
|
74
|
+
export function getSessionTtlMinutes() {
|
|
75
|
+
return parseInt(process.env.CLAUDE_CODE_SESSION_TTL || '', 10) || 1440;
|
|
76
|
+
}
|
|
77
|
+
// ── UX bridge bootstrap (cwd-patch register hook) ────────────────────────
|
|
78
|
+
// One-shot mutation: if UX_BRIDGE_ALL_SESSIONS is unset, set it to 'true'.
|
|
79
|
+
// Returns { mutated, value } so the caller can log accurately. Centralized
|
|
80
|
+
// here because it's the one process.env *write* outside index/route-flag.
|
|
81
|
+
//
|
|
82
|
+
// Behavior preserved bit-for-bit from cwd-patch.ts:983-988.
|
|
83
|
+
export function ensureUxBridgeAllSessionsDefault() {
|
|
84
|
+
const current = process.env.UX_BRIDGE_ALL_SESSIONS;
|
|
85
|
+
if (current === undefined) {
|
|
86
|
+
process.env.UX_BRIDGE_ALL_SESSIONS = 'true';
|
|
87
|
+
return { mutated: true, value: 'true' };
|
|
88
|
+
}
|
|
89
|
+
return { mutated: false, value: current };
|
|
90
|
+
}
|
|
91
|
+
// ── Embedded HTTP server (src/session/embedded-server.ts) ────────────────
|
|
92
|
+
export function getServerHost() {
|
|
93
|
+
return process.env.OPENCLAW_SERVER_HOST || '127.0.0.1';
|
|
94
|
+
}
|
|
95
|
+
/** Per-IP rate limit; falls back to RATE_LIMIT_MAX_REQUESTS if unset/invalid. */
|
|
96
|
+
export function getRateLimit() {
|
|
97
|
+
return parseInt(process.env.OPENCLAW_RATE_LIMIT || '', 10) || RATE_LIMIT_MAX_REQUESTS;
|
|
98
|
+
}
|
|
99
|
+
/** Bearer token for embedded server. Undefined → no auth (default). */
|
|
100
|
+
export function getServerToken() {
|
|
101
|
+
const t = process.env.OPENCLAW_SERVER_TOKEN;
|
|
102
|
+
return t === undefined || t === '' ? undefined : t;
|
|
103
|
+
}
|
|
104
|
+
/** True iff CORS is wildcarded via OPENCLAW_CORS_ORIGINS=*. */
|
|
105
|
+
export function isCorsAllowAll() {
|
|
106
|
+
return process.env.OPENCLAW_CORS_ORIGINS === '*';
|
|
107
|
+
}
|
|
108
|
+
// ── Gateway proxy (src/session/session-manager.ts) ───────────────────────
|
|
109
|
+
export function getGatewayUrl() {
|
|
110
|
+
const v = process.env.GATEWAY_URL;
|
|
111
|
+
return v === undefined || v === '' ? undefined : v;
|
|
112
|
+
}
|
|
113
|
+
export function getGatewayKey() {
|
|
114
|
+
const v = process.env.GATEWAY_KEY;
|
|
115
|
+
return v === undefined || v === '' ? undefined : v;
|
|
116
|
+
}
|
|
117
|
+
// ── Provider API keys (session-manager → proxy handler) ──────────────────
|
|
118
|
+
// Each returns undefined when unset/empty so the proxy can decide whether
|
|
119
|
+
// to omit the auth header entirely vs. pass an empty string.
|
|
120
|
+
export function getAnthropicApiKey() {
|
|
121
|
+
const v = process.env.ANTHROPIC_API_KEY;
|
|
122
|
+
return v === undefined || v === '' ? undefined : v;
|
|
123
|
+
}
|
|
124
|
+
export function getOpenaiApiKey() {
|
|
125
|
+
const v = process.env.OPENAI_API_KEY;
|
|
126
|
+
return v === undefined || v === '' ? undefined : v;
|
|
127
|
+
}
|
|
128
|
+
export function getGeminiApiKey() {
|
|
129
|
+
const v = process.env.GEMINI_API_KEY;
|
|
130
|
+
return v === undefined || v === '' ? undefined : v;
|
|
131
|
+
}
|
|
132
|
+
// ── Engine binary overrides (session-manager._createSession + engines) ───
|
|
133
|
+
// Returns undefined when unset so the persistent-*-session constructors
|
|
134
|
+
// fall back to their built-in default (e.g. 'gemini', 'agent').
|
|
135
|
+
export function getGeminiBin() {
|
|
136
|
+
const v = process.env.GEMINI_BIN;
|
|
137
|
+
return v === undefined || v === '' ? undefined : v;
|
|
138
|
+
}
|
|
139
|
+
export function getCodexBin() {
|
|
140
|
+
const v = process.env.CODEX_BIN;
|
|
141
|
+
return v === undefined || v === '' ? undefined : v;
|
|
142
|
+
}
|
|
143
|
+
export function getCursorBin() {
|
|
144
|
+
const v = process.env.CURSOR_BIN;
|
|
145
|
+
return v === undefined || v === '' ? undefined : v;
|
|
146
|
+
}
|
|
147
|
+
export function getClaudeBin() {
|
|
148
|
+
const v = process.env.CLAUDE_BIN;
|
|
149
|
+
return v === undefined || v === '' ? undefined : v;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* PATH passed to spawned engine subprocesses. Falls back to the standard
|
|
153
|
+
* Unix path so binaries resolve even when the parent's PATH is unset
|
|
154
|
+
* (preserved from persistent-session.ts:257 + persistent-custom-session.ts:240).
|
|
155
|
+
*/
|
|
156
|
+
export function getProcessPath() {
|
|
157
|
+
return process.env.PATH || '/usr/local/bin:/usr/bin:/bin';
|
|
158
|
+
}
|
|
159
|
+
// ── Telemetry writers (src/lib/telemetry.ts) ─────────────────────────────
|
|
160
|
+
// Default-ON, opt-out via OPENCLAW_TOKEN_TELEMETRY=0.
|
|
161
|
+
// NOTE the divergence from `isTokenTelemetryEnabled()` above (which is the
|
|
162
|
+
// cwd-patch route-patch gate, default-OFF, strict `=== '1'`). Same env var,
|
|
163
|
+
// opposite defaults — pre-existing latent bug. Tracked for unification.
|
|
164
|
+
export function isTokenTelemetryWriterEnabled() {
|
|
165
|
+
return process.env.OPENCLAW_TOKEN_TELEMETRY !== '0';
|
|
166
|
+
}
|
|
167
|
+
/** Strict opt-in — register-guard event logging via OPENCLAW_REGISTER_DEBUG=1. */
|
|
168
|
+
export function isRegisterDebugEnabled() {
|
|
169
|
+
return process.env.OPENCLAW_REGISTER_DEBUG === '1';
|
|
170
|
+
}
|
|
171
|
+
// ── Heartbeat workaround kill-switch (src/lib/heartbeat-workaround.ts) ───
|
|
172
|
+
// Strict opt-in — set CC_OPENCLAW_DISABLE_HEARTBEAT_WORKAROUND=1 to bypass.
|
|
173
|
+
export function isHeartbeatWorkaroundDisabled() {
|
|
174
|
+
return process.env.CC_OPENCLAW_DISABLE_HEARTBEAT_WORKAROUND === '1';
|
|
175
|
+
}
|
|
176
|
+
// ── Telegram quota auto-pause (src/channels/telegram/live-card.ts) ───────
|
|
177
|
+
// Returns parsed percent threshold (0-100). Default 95.
|
|
178
|
+
export function getQuotaPausePct() {
|
|
179
|
+
const n = Number(process.env.OPENCLAW_QUOTA_PAUSE_PCT);
|
|
180
|
+
return Number.isFinite(n) ? n : 95;
|
|
181
|
+
}
|
|
182
|
+
// ── OpenAI-compat shim (src/openai-compat/openai-compat.ts) ──────────────
|
|
183
|
+
/** Raw value for `isToolsPerMessageModeEnabled()` parsing. */
|
|
184
|
+
export function getOpenaiCompatToolsPerMessage() {
|
|
185
|
+
const v = process.env.OPENAI_COMPAT_TOOLS_PER_MESSAGE;
|
|
186
|
+
return v === undefined || v === '' ? undefined : v;
|
|
187
|
+
}
|
|
188
|
+
/** Strict opt-in — legacy new-conversation heuristic via env=1. */
|
|
189
|
+
export function isOpenaiCompatNewConvoHeuristic() {
|
|
190
|
+
return process.env.OPENAI_COMPAT_NEW_CONVO_HEURISTIC === '1';
|
|
191
|
+
}
|
|
192
|
+
export function getOpenaiCompatStatusUrl() {
|
|
193
|
+
const v = process.env.OPENAI_COMPAT_STATUS_URL;
|
|
194
|
+
return v === undefined || v === '' ? undefined : v;
|
|
195
|
+
}
|
|
196
|
+
// ── UX bridge sessions read-only check (src/channels/telegram/event-reducer.ts) ──
|
|
197
|
+
// Read-only counterpart to `ensureUxBridgeAllSessionsDefault()` — used in
|
|
198
|
+
// hot-path event handlers where the value is treated as a truthy gate.
|
|
199
|
+
export function getUxBridgeAllSessions() {
|
|
200
|
+
const v = process.env.UX_BRIDGE_ALL_SESSIONS;
|
|
201
|
+
return v === undefined || v === '' ? undefined : v;
|
|
202
|
+
}
|
|
203
|
+
// ── Anthropic base URL (src/proxy/handler.ts layer 1) ────────────────────
|
|
204
|
+
// proxy/handler.ts owns the higher-level resolver
|
|
205
|
+
// (env → openclaw.json → default); this getter only exposes the raw env.
|
|
206
|
+
export function getAnthropicBaseUrlEnv() {
|
|
207
|
+
const v = process.env.ANTHROPIC_BASE_URL;
|
|
208
|
+
return v === undefined || v === '' ? undefined : v;
|
|
209
|
+
}
|
|
210
|
+
// ── Savvy live card gate (src/channels/telegram/tool-tracker.ts) ─────────
|
|
211
|
+
export function isSavvyLiveCardEnabled() {
|
|
212
|
+
const v = process.env.SAVVY_LIVE_CARD;
|
|
213
|
+
return !!(v && v !== '');
|
|
214
|
+
}
|
|
215
|
+
// ── Council transcript dir base (src/council/council.ts) ─────────────────
|
|
216
|
+
// Preserves bit-for-bit the original `process.env.HOME || '/tmp'` fallback.
|
|
217
|
+
// Note: differs from os.homedir() which never returns '/tmp' as fallback.
|
|
218
|
+
export function getHomeOrTmp() {
|
|
219
|
+
return process.env.HOME || '/tmp';
|
|
220
|
+
}
|
|
221
|
+
// ── Health port override (src/health/handler.ts) ─────────────────────────
|
|
222
|
+
// health/handler.ts owns the validation (range check 1-65535). This getter
|
|
223
|
+
// only exposes the raw env so the validator stays where it is.
|
|
224
|
+
export function getHealthPortEnv() {
|
|
225
|
+
const v = process.env.CC_OPENCLAW_HEALTH_PORT;
|
|
226
|
+
return v === undefined || v === '' ? undefined : v;
|
|
227
|
+
}
|
|
228
|
+
// ── Drift detection (src/lib/drift-detector.ts) ───────────────────────────
|
|
229
|
+
// Default-ON. Opt-out via OPENCLAW_CC_OPENCLAW_DRIFT_ALERTS=0.
|
|
230
|
+
export function isDriftAlertsEnabled() {
|
|
231
|
+
return process.env.OPENCLAW_CC_OPENCLAW_DRIFT_ALERTS !== '0';
|
|
232
|
+
}
|
|
233
|
+
/** Dedup window for repeated drift Telegram alerts. Default 1h. */
|
|
234
|
+
export function getDriftDedupeWindowMs() {
|
|
235
|
+
const v = process.env.OPENCLAW_CC_OPENCLAW_DRIFT_DEDUPE_WINDOW_MS;
|
|
236
|
+
const n = v !== undefined ? parseInt(v, 10) : NaN;
|
|
237
|
+
return Number.isFinite(n) && n > 0 ? n : 3_600_000;
|
|
238
|
+
}
|
|
239
|
+
// ── Auto-recovery (src/lib/auto-recovery.ts) ─────────────────────────────
|
|
240
|
+
// Default-ON. Opt-out via OPENCLAW_CC_OPENCLAW_AUTO_RECOVERY=0.
|
|
241
|
+
export function isAutoRecoveryEnabled() {
|
|
242
|
+
return process.env.OPENCLAW_CC_OPENCLAW_AUTO_RECOVERY !== '0';
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,+CAA+C;AAE/C,MAAM,UAAU,yBAAyB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAClD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAC5E,0EAA0E;AAC1E,0DAA0D;AAC1D,EAAE;AACF,+DAA+D;AAC/D,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,uEAAuE;AACvE,yBAAyB;AAEzB,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC9C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC;AACnD,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,sDAAsD;AAEtD,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACzC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,eAAe;IAC7B,OAAO,WAAW,EAAE,KAAK,OAAO,CAAC;AACnC,CAAC;AAED,4EAA4E;AAC5E,6DAA6D;AAE7D,MAAM,UAAU,uBAAuB;IACrC,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,gDAAgD;AAEhD,MAAM,UAAU,wBAAwB;IACtC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;AACzE,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,EAAE;AACF,4DAA4D;AAE5D,MAAM,UAAU,gCAAgC;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,MAAM,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC;AAED,4EAA4E;AAE5E,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,WAAW,CAAC;AACzD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC;AACxF,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC5C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC;AACnD,CAAC;AAED,4EAA4E;AAE5E,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAClC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAClC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,0EAA0E;AAC1E,6DAA6D;AAE7D,MAAM,UAAU,kBAAkB;IAChC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACxC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACrC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACrC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,wEAAwE;AACxE,gEAAgE;AAEhE,MAAM,UAAU,YAAY;IAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACjC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACjC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACjC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,8BAA8B,CAAC;AAC5D,CAAC;AAED,4EAA4E;AAC5E,sDAAsD;AACtD,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AAExE,MAAM,UAAU,6BAA6B;IAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG,CAAC;AACtD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAE5E,MAAM,UAAU,6BAA6B;IAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,wCAAwC,KAAK,GAAG,CAAC;AACtE,CAAC;AAED,4EAA4E;AAC5E,wDAAwD;AAExD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,CAAC;AAED,4EAA4E;AAE5E,8DAA8D;AAC9D,MAAM,UAAU,8BAA8B;IAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;IACtD,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,+BAA+B;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,GAAG,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC/C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,oFAAoF;AACpF,0EAA0E;AAC1E,uEAAuE;AAEvE,MAAM,UAAU,sBAAsB;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAC7C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,kDAAkD;AAClD,yEAAyE;AAEzE,MAAM,UAAU,sBAAsB;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACzC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,4EAA4E;AAE5E,MAAM,UAAU,sBAAsB;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACtC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAE1E,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;AACpC,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,+DAA+D;AAE/D,MAAM,UAAU,gBAAgB;IAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC9C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,6EAA6E;AAC7E,+DAA+D;AAE/D,MAAM,UAAU,oBAAoB;IAClC,OAAO,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,GAAG,CAAC;AAC/D,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,sBAAsB;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;IAClE,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,gEAAgE;AAEhE,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,GAAG,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drift-detector — cross-laptop version mismatch detection.
|
|
3
|
+
*
|
|
4
|
+
* On register() and every 5 minutes (default), captures:
|
|
5
|
+
* { laptopId, ccOpenclawBuildHash, openclawBinaryVersion, claudeCodeVersion, ts }
|
|
6
|
+
*
|
|
7
|
+
* Writes to ~/.openclaw/state/cc-openclaw-version-state.json (one slot per
|
|
8
|
+
* laptopId) per handoff system slot rule. Compares own slot vs other laptop
|
|
9
|
+
* slots; on mismatch fires Telegram alert + drift.jsonl row with 1h dedup.
|
|
10
|
+
*
|
|
11
|
+
* Configurable via:
|
|
12
|
+
* OPENCLAW_CC_OPENCLAW_DRIFT_ALERTS=0 — disable Telegram noise
|
|
13
|
+
* OPENCLAW_CC_OPENCLAW_DRIFT_DEDUPE_WINDOW_MS — dedup window (default 3600000)
|
|
14
|
+
*/
|
|
15
|
+
export interface VersionSlot {
|
|
16
|
+
laptopId: string;
|
|
17
|
+
ccOpenclawBuildHash: string;
|
|
18
|
+
openclawBinaryVersion: string;
|
|
19
|
+
claudeCodeVersion: string;
|
|
20
|
+
ts: string;
|
|
21
|
+
[key: string]: string;
|
|
22
|
+
}
|
|
23
|
+
export type VersionStateFile = Record<string, VersionSlot>;
|
|
24
|
+
export interface DriftReport {
|
|
25
|
+
detected: boolean;
|
|
26
|
+
ownSlot: VersionSlot;
|
|
27
|
+
conflictingSlots: Array<{
|
|
28
|
+
laptopId: string;
|
|
29
|
+
slot: VersionSlot;
|
|
30
|
+
fields: string[];
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
export declare function captureVersionSlot(): VersionSlot;
|
|
34
|
+
/** Test-only reset. */
|
|
35
|
+
export declare function _resetDriftAlertForTests(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Capture own slot, update state file, compare with other laptops.
|
|
38
|
+
* Fires Telegram + jsonl on mismatch (with 1h dedup).
|
|
39
|
+
*
|
|
40
|
+
* Returns the DriftReport so callers can react programmatically.
|
|
41
|
+
*/
|
|
42
|
+
export declare function checkDrift(): Promise<DriftReport>;
|
|
43
|
+
export declare function startDriftPolling(): void;
|
|
44
|
+
export declare function stopDriftPolling(): void;
|
|
45
|
+
/** Test-only: check if polling is active. */
|
|
46
|
+
export declare function _isDriftPollingActive(): boolean;
|
|
47
|
+
//# sourceMappingURL=drift-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift-detector.d.ts","sourceRoot":"","sources":["../../../src/lib/drift-detector.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AA2BH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,gBAAgB,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACpF;AAuCD,wBAAgB,kBAAkB,IAAI,WAAW,CAQhD;AAgED,uBAAuB;AACvB,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAuCvD;AAMD,wBAAgB,iBAAiB,IAAI,IAAI,CAYxC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC;AAED,6CAA6C;AAC7C,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
|