@a1hvdy/cc-openclaw 0.8.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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.map +1 -0
- package/dist/src/channels/telegram/completion-summary.d.ts.map +1 -0
- package/dist/src/channels/telegram/error-renderer.d.ts.map +1 -0
- package/dist/src/channels/telegram/event-reducer.d.ts.map +1 -0
- package/dist/src/channels/telegram/index.d.ts.map +1 -0
- package/dist/src/channels/telegram/injector.d.ts.map +1 -0
- package/dist/src/channels/telegram/live-card.d.ts.map +1 -0
- package/dist/src/channels/telegram/state-machine.d.ts.map +1 -0
- package/dist/src/channels/telegram/tool-tracker.d.ts.map +1 -0
- package/dist/src/command-router/cc-handler.d.ts.map +1 -0
- package/dist/src/command-router/index.d.ts.map +1 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/council/consensus.d.ts.map +1 -0
- package/dist/src/council/council.d.ts.map +1 -0
- package/dist/src/council/index.d.ts.map +1 -0
- package/dist/src/engines/base-oneshot-session.d.ts.map +1 -0
- package/dist/src/engines/index.d.ts.map +1 -0
- package/dist/src/engines/persistent-codex-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-cursor-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-custom-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-gemini-session.d.ts.map +1 -0
- package/dist/src/engines/persistent-session.d.ts.map +1 -0
- package/dist/src/health/handler.d.ts.map +1 -0
- package/dist/src/health/index.d.ts.map +1 -0
- package/dist/src/index.d.ts +10 -1
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +47 -7
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/auto-recovery.d.ts.map +1 -0
- package/dist/src/lib/cache-parity.d.ts.map +1 -0
- package/dist/src/lib/circuit-breaker.d.ts.map +1 -0
- package/dist/src/lib/config-service.d.ts +106 -0
- package/dist/src/lib/config-service.js +217 -0
- package/dist/src/lib/config-service.js.map +1 -0
- package/dist/src/lib/config.d.ts +33 -14
- package/dist/src/lib/config.d.ts.map +1 -0
- package/dist/src/lib/config.js +147 -34
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/debug-tap.d.ts.map +1 -0
- package/dist/src/lib/drift-detector.d.ts.map +1 -0
- package/dist/src/lib/error-formatter.d.ts.map +1 -0
- package/dist/src/lib/heartbeat-workaround.d.ts.map +1 -0
- package/dist/src/lib/index.d.ts +1 -1
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +4 -1
- package/dist/src/lib/index.js.map +1 -1
- package/dist/src/lib/register-guard.d.ts.map +1 -0
- package/dist/src/lib/req-shape-log.d.ts +31 -0
- package/dist/src/lib/req-shape-log.js +106 -0
- package/dist/src/lib/req-shape-log.js.map +1 -0
- package/dist/src/lib/route-flag.d.ts.map +1 -0
- package/dist/src/lib/sysprompt-strip.d.ts.map +1 -0
- package/dist/src/lib/telemetry.d.ts.map +1 -0
- package/dist/src/lib/test-mode.d.ts.map +1 -0
- package/dist/src/lib/vendor-paths.d.ts.map +1 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/mcp/bridge.d.ts.map +1 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/models.d.ts.map +1 -0
- package/dist/src/openai-compat/cli-stream-parser.d.ts.map +1 -0
- package/dist/src/openai-compat/index.d.ts.map +1 -0
- package/dist/src/openai-compat/message-extractor.d.ts +79 -0
- package/dist/src/openai-compat/message-extractor.js +162 -0
- package/dist/src/openai-compat/message-extractor.js.map +1 -0
- package/dist/src/openai-compat/mode-flags.d.ts +34 -0
- package/dist/src/openai-compat/mode-flags.js +44 -0
- package/dist/src/openai-compat/mode-flags.js.map +1 -0
- package/dist/src/openai-compat/non-streaming-handler.d.ts +26 -0
- package/dist/src/openai-compat/non-streaming-handler.js +108 -0
- package/dist/src/openai-compat/non-streaming-handler.js.map +1 -0
- package/dist/src/openai-compat/openai-compat.d.ts +15 -166
- package/dist/src/openai-compat/openai-compat.d.ts.map +1 -0
- package/dist/src/openai-compat/openai-compat.js +65 -849
- package/dist/src/openai-compat/openai-compat.js.map +1 -1
- package/dist/src/openai-compat/prompts.d.ts +47 -0
- package/dist/src/openai-compat/prompts.js +119 -0
- package/dist/src/openai-compat/prompts.js.map +1 -0
- package/dist/src/openai-compat/response-formatter.d.ts +33 -0
- package/dist/src/openai-compat/response-formatter.js +74 -0
- package/dist/src/openai-compat/response-formatter.js.map +1 -0
- package/dist/src/openai-compat/session-key-resolver.d.ts +41 -0
- package/dist/src/openai-compat/session-key-resolver.js +78 -0
- package/dist/src/openai-compat/session-key-resolver.js.map +1 -0
- package/dist/src/openai-compat/skill-resolver.d.ts.map +1 -0
- package/dist/src/openai-compat/sse-translator.d.ts.map +1 -0
- package/dist/src/openai-compat/status-reporter.d.ts +30 -0
- package/dist/src/openai-compat/status-reporter.js +81 -0
- package/dist/src/openai-compat/status-reporter.js.map +1 -0
- package/dist/src/openai-compat/streaming-handler.d.ts +41 -0
- package/dist/src/openai-compat/streaming-handler.js +294 -0
- package/dist/src/openai-compat/streaming-handler.js.map +1 -0
- package/dist/src/openai-compat/tool-calls-parser.d.ts +34 -0
- package/dist/src/openai-compat/tool-calls-parser.js +93 -0
- package/dist/src/openai-compat/tool-calls-parser.js.map +1 -0
- package/dist/src/openai-compat/tool-results-serializer.d.ts +60 -0
- package/dist/src/openai-compat/tool-results-serializer.js +56 -0
- package/dist/src/openai-compat/tool-results-serializer.js.map +1 -0
- package/dist/src/proxy/anthropic-adapter.d.ts.map +1 -0
- package/dist/src/proxy/handler.d.ts.map +1 -0
- package/dist/src/proxy/index.d.ts.map +1 -0
- package/dist/src/proxy/schema-cleaner.d.ts.map +1 -0
- package/dist/src/proxy/thought-cache.d.ts.map +1 -0
- package/dist/src/session/embedded-server.d.ts.map +1 -0
- package/dist/src/session/inbox-manager.d.ts.map +1 -0
- package/dist/src/session/index.d.ts.map +1 -0
- package/dist/src/session/session-manager.d.ts.map +1 -0
- package/dist/src/session-bootstrap/cwd-patch.d.ts.map +1 -0
- package/dist/src/session-bootstrap/cwd-patch.js +20 -13
- package/dist/src/session-bootstrap/cwd-patch.js.map +1 -1
- package/dist/src/session-bootstrap/index.d.ts.map +1 -0
- package/dist/src/session-bootstrap/sysprompt-strip.d.ts.map +1 -0
- package/dist/src/session-bootstrap/think-conflict-resolver.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +15 -0
- package/dist/src/types/index.js +16 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/route.d.ts +41 -0
- package/dist/src/types/route.js +12 -0
- package/dist/src/types/route.js.map +1 -0
- package/dist/src/types/runtime-config.d.ts +161 -0
- package/dist/src/types/runtime-config.js +118 -0
- package/dist/src/types/runtime-config.js.map +1 -0
- package/dist/src/types/session.d.ts +48 -0
- package/dist/src/types/session.js +20 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/sse.d.ts +38 -0
- package/dist/src/types/sse.js +12 -0
- package/dist/src/types/sse.js.map +1 -0
- package/dist/src/types/tool-bridge.d.ts +81 -0
- package/dist/src/types/tool-bridge.js +34 -0
- package/dist/src/types/tool-bridge.js.map +1 -0
- package/dist/src/types/upstream.d.ts +652 -0
- package/dist/src/types/upstream.js +145 -0
- package/dist/src/types/upstream.js.map +1 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/validation.d.ts.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/package.json +3 -2
package/dist/src/lib/config.js
CHANGED
|
@@ -1,43 +1,54 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* config —
|
|
2
|
+
* config — env-reader source of truth.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `src/lib/route-flag.ts`, and this module.
|
|
6
|
-
*
|
|
4
|
+
* Originally PRP_v3 §5: `process.env` reads only in `src/index.ts`,
|
|
5
|
+
* `src/lib/route-flag.ts`, and this module. Cluster A step 7 layered a
|
|
6
|
+
* compat shim on top: getters now delegate to `ConfigService.config.X`
|
|
7
|
+
* (the typed Cluster A boot config) when available, falling back to
|
|
8
|
+
* the original `process.env.X` read otherwise.
|
|
7
9
|
*
|
|
8
|
-
* Why
|
|
9
|
-
* `process.env.X = 'y'` and expect immediate effect.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* Why the shim instead of pure delegation: tests flip env vars at
|
|
11
|
+
* runtime via `process.env.X = 'y'` and expect immediate effect. When
|
|
12
|
+
* `ConfigService` is unset (most tests), getters fall through to env
|
|
13
|
+
* — preserving test flippability bit-for-bit. When `ConfigService` is
|
|
14
|
+
* set (live gateway boot), the typed config wins, providing single-
|
|
15
|
+
* source-of-truth observability via `/health` and the boot log.
|
|
13
16
|
*
|
|
14
|
-
* Adding a new env var: add a getter here
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
+
* Adding a new env var: add a getter here AND a field to
|
|
18
|
+
* `RuntimeConfigSchema` in `src/types/runtime-config.ts`. The shim line
|
|
19
|
+
* pattern is `getConfigService()?.config.X ?? legacyEnvRead`.
|
|
20
|
+
*
|
|
21
|
+
* Cluster A step 8 will collapse the activation getters (selectEngine,
|
|
22
|
+
* route-flag) into ConfigService escape hatches and delete
|
|
23
|
+
* `src/lib/route-flag.ts`. Cluster F (v1.0.0) will remove the legacy
|
|
24
|
+
* env-read fallback and hard-fail when ConfigService is missing.
|
|
17
25
|
*/
|
|
18
26
|
import { RATE_LIMIT_MAX_REQUESTS } from '../constants.js';
|
|
27
|
+
import { getConfigService } from './config-service.js';
|
|
19
28
|
// ── Sysprompt strip (PRP_v3 §10) ─────────────────────────────────────────
|
|
20
29
|
// Default ON. Opt-out via OPENCLAW_AGGRESSIVE_STRIP=0|false|off (exact-match,
|
|
21
30
|
// case-sensitive — preserved bit-for-bit from sysprompt-strip.ts:43-45 to
|
|
22
31
|
// avoid breaking the 18 existing strip tests).
|
|
23
32
|
export function getAggressiveStripEnabled() {
|
|
33
|
+
const cfg = getConfigService();
|
|
34
|
+
if (cfg)
|
|
35
|
+
return cfg.config.aggressiveStripEnabled;
|
|
24
36
|
const env = process.env.OPENCLAW_AGGRESSIVE_STRIP;
|
|
25
37
|
if (env === '0' || env === 'false' || env === 'off')
|
|
26
38
|
return false;
|
|
27
39
|
return true;
|
|
28
40
|
}
|
|
29
|
-
// ── Cache parity
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
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.
|
|
41
|
+
// ── Cache parity (Cluster A: dual-default split resolved) ────────────────
|
|
42
|
+
// Pre-existing latent bug at config.ts:39-42 (now historical):
|
|
43
|
+
// getCacheParityEnabled → default ON → maps to cacheParityModuleEnabled
|
|
44
|
+
// isCacheParityTrackB → default OFF → maps to cacheParityTrackB
|
|
45
|
+
// Both currently key on OPENCLAW_CACHE_PARITY. The split resolves the
|
|
46
|
+
// documentation question — the bug is preserved as a feature per the
|
|
47
|
+
// behavior-identical mandate of Phase 4 (PRP §3 + §11 Decision Log).
|
|
40
48
|
export function getCacheParityEnabled() {
|
|
49
|
+
const cfg = getConfigService();
|
|
50
|
+
if (cfg)
|
|
51
|
+
return cfg.config.cacheParityModuleEnabled;
|
|
41
52
|
const env = process.env.OPENCLAW_CACHE_PARITY;
|
|
42
53
|
if (env === '0' || env === 'false' || env === 'off')
|
|
43
54
|
return false;
|
|
@@ -45,11 +56,17 @@ export function getCacheParityEnabled() {
|
|
|
45
56
|
}
|
|
46
57
|
/** Strict opt-in variant used by cwd-patch route patch (Track B append). */
|
|
47
58
|
export function isCacheParityTrackB() {
|
|
59
|
+
const cfg = getConfigService();
|
|
60
|
+
if (cfg)
|
|
61
|
+
return cfg.config.cacheParityTrackB;
|
|
48
62
|
return process.env.OPENCLAW_CACHE_PARITY === '1';
|
|
49
63
|
}
|
|
50
64
|
// ── Log level (PRP_v3 §10) ───────────────────────────────────────────────
|
|
51
65
|
// Returns raw string for the logger to parse. Empty/unset → undefined; the
|
|
52
66
|
// caller decides the default (logger.ts uses 'info').
|
|
67
|
+
//
|
|
68
|
+
// NOT in RuntimeConfig — log level is consumed by the logger module which
|
|
69
|
+
// has its own validation surface. Kept as a direct env reader.
|
|
53
70
|
export function getLogLevel() {
|
|
54
71
|
const v = process.env.OPENCLAW_LOG_LEVEL;
|
|
55
72
|
return v === undefined || v === null || v === '' ? undefined : v;
|
|
@@ -58,20 +75,35 @@ export function getLogLevel() {
|
|
|
58
75
|
export function isLogLevelDebug() {
|
|
59
76
|
return getLogLevel() === 'debug';
|
|
60
77
|
}
|
|
61
|
-
// ── Telemetry & diagnostics (
|
|
62
|
-
//
|
|
78
|
+
// ── Telemetry & diagnostics (Cluster A: dual-default split resolved) ─────
|
|
79
|
+
// Pre-existing latent bug at config.ts:195-197 (now historical):
|
|
80
|
+
// isTokenTelemetryEnabled → default OFF → tokenTelemetryRouteGate
|
|
81
|
+
// isTokenTelemetryWriterEnabled → default ON → tokenTelemetryWriter
|
|
82
|
+
// Same env var, opposite defaults. Preserved as features per Phase 4.
|
|
63
83
|
export function isTokenTelemetryEnabled() {
|
|
84
|
+
const cfg = getConfigService();
|
|
85
|
+
if (cfg)
|
|
86
|
+
return cfg.config.tokenTelemetryRouteGate;
|
|
64
87
|
return process.env.OPENCLAW_TOKEN_TELEMETRY === '1';
|
|
65
88
|
}
|
|
66
89
|
export function isSyspromptDumpEnabled() {
|
|
90
|
+
const cfg = getConfigService();
|
|
91
|
+
if (cfg)
|
|
92
|
+
return cfg.config.syspromptDump;
|
|
67
93
|
return process.env.OPENCLAW_SYSPROMPT_DUMP === '1';
|
|
68
94
|
}
|
|
69
95
|
// ── SessionManager bootstrap caps (cwd-patch eager-init) ─────────────────
|
|
70
96
|
// Defaults preserved from cwd-patch.ts:844-845.
|
|
71
97
|
export function getMaxConcurrentSessions() {
|
|
98
|
+
const cfg = getConfigService();
|
|
99
|
+
if (cfg)
|
|
100
|
+
return cfg.config.maxConcurrentSessions;
|
|
72
101
|
return parseInt(process.env.CLAUDE_CODE_MAX_SESSIONS || '', 10) || 32;
|
|
73
102
|
}
|
|
74
103
|
export function getSessionTtlMinutes() {
|
|
104
|
+
const cfg = getConfigService();
|
|
105
|
+
if (cfg)
|
|
106
|
+
return cfg.config.sessionTtlMinutes;
|
|
75
107
|
return parseInt(process.env.CLAUDE_CODE_SESSION_TTL || '', 10) || 1440;
|
|
76
108
|
}
|
|
77
109
|
// ── UX bridge bootstrap (cwd-patch register hook) ────────────────────────
|
|
@@ -79,6 +111,9 @@ export function getSessionTtlMinutes() {
|
|
|
79
111
|
// Returns { mutated, value } so the caller can log accurately. Centralized
|
|
80
112
|
// here because it's the one process.env *write* outside index/route-flag.
|
|
81
113
|
//
|
|
114
|
+
// NOT in RuntimeConfig — this getter MUTATES process.env, which violates
|
|
115
|
+
// the frozen-at-boot contract. Kept as a direct env reader/writer.
|
|
116
|
+
//
|
|
82
117
|
// Behavior preserved bit-for-bit from cwd-patch.ts:983-988.
|
|
83
118
|
export function ensureUxBridgeAllSessionsDefault() {
|
|
84
119
|
const current = process.env.UX_BRIDGE_ALL_SESSIONS;
|
|
@@ -90,22 +125,36 @@ export function ensureUxBridgeAllSessionsDefault() {
|
|
|
90
125
|
}
|
|
91
126
|
// ── Embedded HTTP server (src/session/embedded-server.ts) ────────────────
|
|
92
127
|
export function getServerHost() {
|
|
128
|
+
const cfg = getConfigService();
|
|
129
|
+
if (cfg)
|
|
130
|
+
return cfg.config.serverHost;
|
|
93
131
|
return process.env.OPENCLAW_SERVER_HOST || '127.0.0.1';
|
|
94
132
|
}
|
|
95
133
|
/** Per-IP rate limit; falls back to RATE_LIMIT_MAX_REQUESTS if unset/invalid. */
|
|
96
134
|
export function getRateLimit() {
|
|
135
|
+
const cfg = getConfigService();
|
|
136
|
+
if (cfg)
|
|
137
|
+
return cfg.config.rateLimit;
|
|
97
138
|
return parseInt(process.env.OPENCLAW_RATE_LIMIT || '', 10) || RATE_LIMIT_MAX_REQUESTS;
|
|
98
139
|
}
|
|
99
140
|
/** Bearer token for embedded server. Undefined → no auth (default). */
|
|
100
141
|
export function getServerToken() {
|
|
142
|
+
const cfg = getConfigService();
|
|
143
|
+
if (cfg)
|
|
144
|
+
return cfg.config.serverToken;
|
|
101
145
|
const t = process.env.OPENCLAW_SERVER_TOKEN;
|
|
102
146
|
return t === undefined || t === '' ? undefined : t;
|
|
103
147
|
}
|
|
104
148
|
/** True iff CORS is wildcarded via OPENCLAW_CORS_ORIGINS=*. */
|
|
105
149
|
export function isCorsAllowAll() {
|
|
150
|
+
const cfg = getConfigService();
|
|
151
|
+
if (cfg)
|
|
152
|
+
return cfg.config.corsAllowAll;
|
|
106
153
|
return process.env.OPENCLAW_CORS_ORIGINS === '*';
|
|
107
154
|
}
|
|
108
155
|
// ── Gateway proxy (src/session/session-manager.ts) ───────────────────────
|
|
156
|
+
// NOT in RuntimeConfig — gateway URL/key are reverse-proxy internals not
|
|
157
|
+
// surfaced through the activation flag matrix. Kept as direct env readers.
|
|
109
158
|
export function getGatewayUrl() {
|
|
110
159
|
const v = process.env.GATEWAY_URL;
|
|
111
160
|
return v === undefined || v === '' ? undefined : v;
|
|
@@ -115,8 +164,8 @@ export function getGatewayKey() {
|
|
|
115
164
|
return v === undefined || v === '' ? undefined : v;
|
|
116
165
|
}
|
|
117
166
|
// ── Provider API keys (session-manager → proxy handler) ──────────────────
|
|
118
|
-
//
|
|
119
|
-
//
|
|
167
|
+
// NOT in RuntimeConfig — secrets that must never appear in /health or boot
|
|
168
|
+
// telemetry. Kept as direct env readers for principle-of-least-disclosure.
|
|
120
169
|
export function getAnthropicApiKey() {
|
|
121
170
|
const v = process.env.ANTHROPIC_API_KEY;
|
|
122
171
|
return v === undefined || v === '' ? undefined : v;
|
|
@@ -133,18 +182,30 @@ export function getGeminiApiKey() {
|
|
|
133
182
|
// Returns undefined when unset so the persistent-*-session constructors
|
|
134
183
|
// fall back to their built-in default (e.g. 'gemini', 'agent').
|
|
135
184
|
export function getGeminiBin() {
|
|
185
|
+
const cfg = getConfigService();
|
|
186
|
+
if (cfg)
|
|
187
|
+
return cfg.config.geminiBin;
|
|
136
188
|
const v = process.env.GEMINI_BIN;
|
|
137
189
|
return v === undefined || v === '' ? undefined : v;
|
|
138
190
|
}
|
|
139
191
|
export function getCodexBin() {
|
|
192
|
+
const cfg = getConfigService();
|
|
193
|
+
if (cfg)
|
|
194
|
+
return cfg.config.codexBin;
|
|
140
195
|
const v = process.env.CODEX_BIN;
|
|
141
196
|
return v === undefined || v === '' ? undefined : v;
|
|
142
197
|
}
|
|
143
198
|
export function getCursorBin() {
|
|
199
|
+
const cfg = getConfigService();
|
|
200
|
+
if (cfg)
|
|
201
|
+
return cfg.config.cursorBin;
|
|
144
202
|
const v = process.env.CURSOR_BIN;
|
|
145
203
|
return v === undefined || v === '' ? undefined : v;
|
|
146
204
|
}
|
|
147
205
|
export function getClaudeBin() {
|
|
206
|
+
const cfg = getConfigService();
|
|
207
|
+
if (cfg)
|
|
208
|
+
return cfg.config.claudeBin;
|
|
148
209
|
const v = process.env.CLAUDE_BIN;
|
|
149
210
|
return v === undefined || v === '' ? undefined : v;
|
|
150
211
|
}
|
|
@@ -152,50 +213,75 @@ export function getClaudeBin() {
|
|
|
152
213
|
* PATH passed to spawned engine subprocesses. Falls back to the standard
|
|
153
214
|
* Unix path so binaries resolve even when the parent's PATH is unset
|
|
154
215
|
* (preserved from persistent-session.ts:257 + persistent-custom-session.ts:240).
|
|
216
|
+
*
|
|
217
|
+
* NOT in RuntimeConfig — PATH is process-environment, not plugin
|
|
218
|
+
* configuration. Kept as a direct env reader.
|
|
155
219
|
*/
|
|
156
220
|
export function getProcessPath() {
|
|
157
221
|
return process.env.PATH || '/usr/local/bin:/usr/bin:/bin';
|
|
158
222
|
}
|
|
159
|
-
// ── Telemetry
|
|
160
|
-
//
|
|
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.
|
|
223
|
+
// ── Telemetry writer (Cluster A: dual-default split resolved) ────────────
|
|
224
|
+
// See `isTokenTelemetryEnabled` above for the split rationale.
|
|
164
225
|
export function isTokenTelemetryWriterEnabled() {
|
|
226
|
+
const cfg = getConfigService();
|
|
227
|
+
if (cfg)
|
|
228
|
+
return cfg.config.tokenTelemetryWriter;
|
|
165
229
|
return process.env.OPENCLAW_TOKEN_TELEMETRY !== '0';
|
|
166
230
|
}
|
|
167
231
|
/** Strict opt-in — register-guard event logging via OPENCLAW_REGISTER_DEBUG=1. */
|
|
168
232
|
export function isRegisterDebugEnabled() {
|
|
233
|
+
const cfg = getConfigService();
|
|
234
|
+
if (cfg)
|
|
235
|
+
return cfg.config.registerDebug;
|
|
169
236
|
return process.env.OPENCLAW_REGISTER_DEBUG === '1';
|
|
170
237
|
}
|
|
171
238
|
// ── Heartbeat workaround kill-switch (src/lib/heartbeat-workaround.ts) ───
|
|
172
239
|
// Strict opt-in — set CC_OPENCLAW_DISABLE_HEARTBEAT_WORKAROUND=1 to bypass.
|
|
173
240
|
export function isHeartbeatWorkaroundDisabled() {
|
|
241
|
+
const cfg = getConfigService();
|
|
242
|
+
if (cfg)
|
|
243
|
+
return cfg.config.heartbeatWorkaroundDisabled;
|
|
174
244
|
return process.env.CC_OPENCLAW_DISABLE_HEARTBEAT_WORKAROUND === '1';
|
|
175
245
|
}
|
|
176
246
|
// ── Telegram quota auto-pause (src/channels/telegram/live-card.ts) ───────
|
|
177
247
|
// Returns parsed percent threshold (0-100). Default 95.
|
|
178
248
|
export function getQuotaPausePct() {
|
|
249
|
+
const cfg = getConfigService();
|
|
250
|
+
if (cfg)
|
|
251
|
+
return cfg.config.quotaPausePct;
|
|
179
252
|
const n = Number(process.env.OPENCLAW_QUOTA_PAUSE_PCT);
|
|
180
253
|
return Number.isFinite(n) ? n : 95;
|
|
181
254
|
}
|
|
182
255
|
// ── OpenAI-compat shim (src/openai-compat/openai-compat.ts) ──────────────
|
|
183
|
-
/**
|
|
256
|
+
/**
|
|
257
|
+
* Raw value for `isToolsPerMessageModeEnabled()` parsing.
|
|
258
|
+
* NOT delegated — the consumer parses the raw string itself; the typed
|
|
259
|
+
* `toolsPerMessage` boolean field is for boot-time observability only.
|
|
260
|
+
*/
|
|
184
261
|
export function getOpenaiCompatToolsPerMessage() {
|
|
185
262
|
const v = process.env.OPENAI_COMPAT_TOOLS_PER_MESSAGE;
|
|
186
263
|
return v === undefined || v === '' ? undefined : v;
|
|
187
264
|
}
|
|
188
265
|
/** Strict opt-in — legacy new-conversation heuristic via env=1. */
|
|
189
266
|
export function isOpenaiCompatNewConvoHeuristic() {
|
|
267
|
+
const cfg = getConfigService();
|
|
268
|
+
if (cfg)
|
|
269
|
+
return cfg.config.newConvoHeuristic;
|
|
190
270
|
return process.env.OPENAI_COMPAT_NEW_CONVO_HEURISTIC === '1';
|
|
191
271
|
}
|
|
192
272
|
export function getOpenaiCompatStatusUrl() {
|
|
273
|
+
const cfg = getConfigService();
|
|
274
|
+
if (cfg)
|
|
275
|
+
return cfg.config.statusUrl;
|
|
193
276
|
const v = process.env.OPENAI_COMPAT_STATUS_URL;
|
|
194
277
|
return v === undefined || v === '' ? undefined : v;
|
|
195
278
|
}
|
|
196
279
|
// ── UX bridge sessions read-only check (src/channels/telegram/event-reducer.ts) ──
|
|
197
280
|
// Read-only counterpart to `ensureUxBridgeAllSessionsDefault()` — used in
|
|
198
281
|
// hot-path event handlers where the value is treated as a truthy gate.
|
|
282
|
+
//
|
|
283
|
+
// NOT in RuntimeConfig — its peer `ensureUxBridgeAllSessionsDefault` mutates
|
|
284
|
+
// env, so both must read live env to stay coherent.
|
|
199
285
|
export function getUxBridgeAllSessions() {
|
|
200
286
|
const v = process.env.UX_BRIDGE_ALL_SESSIONS;
|
|
201
287
|
return v === undefined || v === '' ? undefined : v;
|
|
@@ -203,24 +289,35 @@ export function getUxBridgeAllSessions() {
|
|
|
203
289
|
// ── Anthropic base URL (src/proxy/handler.ts layer 1) ────────────────────
|
|
204
290
|
// proxy/handler.ts owns the higher-level resolver
|
|
205
291
|
// (env → openclaw.json → default); this getter only exposes the raw env.
|
|
292
|
+
//
|
|
293
|
+
// NOT in RuntimeConfig — it's an upstream override resolved at request
|
|
294
|
+
// time, not boot time.
|
|
206
295
|
export function getAnthropicBaseUrlEnv() {
|
|
207
296
|
const v = process.env.ANTHROPIC_BASE_URL;
|
|
208
297
|
return v === undefined || v === '' ? undefined : v;
|
|
209
298
|
}
|
|
210
299
|
// ── Savvy live card gate (src/channels/telegram/tool-tracker.ts) ─────────
|
|
211
300
|
export function isSavvyLiveCardEnabled() {
|
|
301
|
+
const cfg = getConfigService();
|
|
302
|
+
if (cfg)
|
|
303
|
+
return cfg.config.savvyLiveCardEnabled;
|
|
212
304
|
const v = process.env.SAVVY_LIVE_CARD;
|
|
213
305
|
return !!(v && v !== '');
|
|
214
306
|
}
|
|
215
307
|
// ── Council transcript dir base (src/council/council.ts) ─────────────────
|
|
216
308
|
// Preserves bit-for-bit the original `process.env.HOME || '/tmp'` fallback.
|
|
217
309
|
// Note: differs from os.homedir() which never returns '/tmp' as fallback.
|
|
310
|
+
//
|
|
311
|
+
// NOT in RuntimeConfig — HOME is process-environment, not plugin config.
|
|
218
312
|
export function getHomeOrTmp() {
|
|
219
313
|
return process.env.HOME || '/tmp';
|
|
220
314
|
}
|
|
221
315
|
// ── Health port override (src/health/handler.ts) ─────────────────────────
|
|
222
316
|
// health/handler.ts owns the validation (range check 1-65535). This getter
|
|
223
317
|
// only exposes the raw env so the validator stays where it is.
|
|
318
|
+
//
|
|
319
|
+
// NOT in RuntimeConfig — the validator owns the typed surface; this getter
|
|
320
|
+
// is the raw boundary.
|
|
224
321
|
export function getHealthPortEnv() {
|
|
225
322
|
const v = process.env.CC_OPENCLAW_HEALTH_PORT;
|
|
226
323
|
return v === undefined || v === '' ? undefined : v;
|
|
@@ -228,9 +325,16 @@ export function getHealthPortEnv() {
|
|
|
228
325
|
// ── Drift detection (src/lib/drift-detector.ts) ───────────────────────────
|
|
229
326
|
// Default-ON. Opt-out via OPENCLAW_CC_OPENCLAW_DRIFT_ALERTS=0.
|
|
230
327
|
export function isDriftAlertsEnabled() {
|
|
328
|
+
const cfg = getConfigService();
|
|
329
|
+
if (cfg)
|
|
330
|
+
return cfg.config.driftAlertsEnabled;
|
|
231
331
|
return process.env.OPENCLAW_CC_OPENCLAW_DRIFT_ALERTS !== '0';
|
|
232
332
|
}
|
|
233
|
-
/**
|
|
333
|
+
/**
|
|
334
|
+
* Dedup window for repeated drift Telegram alerts. Default 1h.
|
|
335
|
+
* NOT in RuntimeConfig — niche tunable not surfaced through the activation
|
|
336
|
+
* matrix. Kept as a direct env reader.
|
|
337
|
+
*/
|
|
234
338
|
export function getDriftDedupeWindowMs() {
|
|
235
339
|
const v = process.env.OPENCLAW_CC_OPENCLAW_DRIFT_DEDUPE_WINDOW_MS;
|
|
236
340
|
const n = v !== undefined ? parseInt(v, 10) : NaN;
|
|
@@ -239,6 +343,9 @@ export function getDriftDedupeWindowMs() {
|
|
|
239
343
|
// ── Auto-recovery (src/lib/auto-recovery.ts) ─────────────────────────────
|
|
240
344
|
// Default-ON. Opt-out via OPENCLAW_CC_OPENCLAW_AUTO_RECOVERY=0.
|
|
241
345
|
export function isAutoRecoveryEnabled() {
|
|
346
|
+
const cfg = getConfigService();
|
|
347
|
+
if (cfg)
|
|
348
|
+
return cfg.config.autoRecoveryEnabled;
|
|
242
349
|
return process.env.OPENCLAW_CC_OPENCLAW_AUTO_RECOVERY !== '0';
|
|
243
350
|
}
|
|
244
351
|
// ── Thinking-block surfacing (v0.7.0, src/openai-compat/sse-translator.ts) ─
|
|
@@ -250,6 +357,9 @@ export function isAutoRecoveryEnabled() {
|
|
|
250
357
|
// attaches `choices[0].message.reasoning` to the final response.
|
|
251
358
|
// `signature_delta` events are NEVER forwarded regardless of this flag.
|
|
252
359
|
export function getSurfaceThinkingEnabled() {
|
|
360
|
+
const cfg = getConfigService();
|
|
361
|
+
if (cfg)
|
|
362
|
+
return cfg.config.surfaceThinking;
|
|
253
363
|
return process.env.CC_OPENCLAW_SURFACE_THINKING === '1';
|
|
254
364
|
}
|
|
255
365
|
// ── Thinking excerpt → live-card preview (v0.7.0) ────────────────────────
|
|
@@ -258,6 +368,9 @@ export function getSurfaceThinkingEnabled() {
|
|
|
258
368
|
// twice for visibility there. Has no effect when CC_OPENCLAW_SURFACE_THINKING
|
|
259
369
|
// is unset.
|
|
260
370
|
export function getThinkingExcerptEnabled() {
|
|
371
|
+
const cfg = getConfigService();
|
|
372
|
+
if (cfg)
|
|
373
|
+
return cfg.config.thinkingExcerpt;
|
|
261
374
|
return process.env.CC_OPENCLAW_THINKING_EXCERPT === '1';
|
|
262
375
|
}
|
|
263
376
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-tap.d.ts","sourceRoot":"","sources":["../../../src/lib/debug-tap.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAmF7C;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CA4DlF;AAED,gEAAgE;AAChE,wBAAgB,sBAAsB,IAAI,IAAI,CAS7C"}
|
|
@@ -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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-formatter.d.ts","sourceRoot":"","sources":["../../../src/lib/error-formatter.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;CAed,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAqBjE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,QAAQ,EAAE,aAAa,CAAC;IACxB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAID,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUrD;AAWD,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAWD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CA6CjF;AAID,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAKrF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat-workaround.d.ts","sourceRoot":"","sources":["../../../src/lib/heartbeat-workaround.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,+DAAgE,CAAC;AAEjG,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gFAAgF;IAChF,SAAS,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAclE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,iBAAiB,GAAG,iBAAiB,CAOlF"}
|
package/dist/src/lib/index.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ export * from './register-guard.js';
|
|
|
2
2
|
export { registerOnce } from './register-guard.js';
|
|
3
3
|
export { stripSysprompt, isStripEnabled, type StripOptions, type StripResult } from './sysprompt-strip.js';
|
|
4
4
|
export { isCacheParityEnabled, hashPrompt, recordAttachment, readRegistry, REGISTRY_PATH, type RegistryEntry, } from './cache-parity.js';
|
|
5
|
-
export { selectEngine, isCcOpenclawEnabled, captureSessionRoute, ACTIVE_FLAG_ENV, ROUTE_FLAG_ENV, type Engine, type SessionRoute, } from './
|
|
5
|
+
export { selectEngine, isCcOpenclawEnabled, captureSessionRoute, ACTIVE_FLAG_ENV, ROUTE_FLAG_ENV, type Engine, type SessionRoute, } from './config-service.js';
|
|
6
6
|
export { isTestMode, TEST_MODE_ENV, _setTestModeForTests } from './test-mode.js';
|
|
7
7
|
export { getAggressiveStripEnabled, getCacheParityEnabled, getLogLevel, isLogLevelDebug, } from './config.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,KAAK,MAAM,EACX,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC"}
|
package/dist/src/lib/index.js
CHANGED
|
@@ -2,7 +2,10 @@ export * from './register-guard.js';
|
|
|
2
2
|
export { registerOnce } from './register-guard.js';
|
|
3
3
|
export { stripSysprompt, isStripEnabled } from './sysprompt-strip.js';
|
|
4
4
|
export { isCacheParityEnabled, hashPrompt, recordAttachment, readRegistry, REGISTRY_PATH, } from './cache-parity.js';
|
|
5
|
-
|
|
5
|
+
// Engine routing — originally `./route-flag.js`; collapsed into
|
|
6
|
+
// `./config-service.js` at Cluster A step 8. Same API, same semantics,
|
|
7
|
+
// single source of truth.
|
|
8
|
+
export { selectEngine, isCcOpenclawEnabled, captureSessionRoute, ACTIVE_FLAG_ENV, ROUTE_FLAG_ENV, } from './config-service.js';
|
|
6
9
|
export { isTestMode, TEST_MODE_ENV, _setTestModeForTests } from './test-mode.js';
|
|
7
10
|
export { getAggressiveStripEnabled, getCacheParityEnabled, getLogLevel, isLogLevelDebug, } from './config.js';
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAuC,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,cAAc,GAGf,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAuC,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAC3B,gEAAgE;AAChE,uEAAuE;AACvE,0BAA0B;AAC1B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,cAAc,GAGf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-guard.d.ts","sourceRoot":"","sources":["../../../src/lib/register-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACxD,uBAAuB;IACvB,cAAc,IAAI,IAAI,CAAC;IACvB,uCAAuC;IACvC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CA8BnD;AAED,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,eAAwB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAE7E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostic: privacy-safe request-shape logger.
|
|
3
|
+
*
|
|
4
|
+
* Purpose: investigate the "Acknowledged — no user request to act on" failure
|
|
5
|
+
* mode where Claude responds as if no user turn exists in the conversation.
|
|
6
|
+
* The leading hypothesis is that Savvy/OpenClaw is shipping `content` in a
|
|
7
|
+
* shape that `message-extractor.ts:textOf` returns `''` for, producing an
|
|
8
|
+
* empty user turn that Claude treats as no-input.
|
|
9
|
+
*
|
|
10
|
+
* Privacy contract: this logger NEVER writes content text. It records only
|
|
11
|
+
* the structural shape of the incoming `messages[]` — kind, length, and
|
|
12
|
+
* for content arrays, the key-set + type-field of each part. That's enough
|
|
13
|
+
* to identify a field-name mismatch (e.g., `.value` vs `.text`) without
|
|
14
|
+
* leaking the actual question text.
|
|
15
|
+
*
|
|
16
|
+
* Activation: `CC_OPENCLAW_REQ_SHAPE_LOG=1`. No-op when unset.
|
|
17
|
+
*
|
|
18
|
+
* Output: NDJSON appended to
|
|
19
|
+
* `~/.openclaw/workspace/memory/cc-openclaw-req-shape.jsonl`
|
|
20
|
+
*
|
|
21
|
+
* Lifecycle: enable for 24h, diagnose, then set the env flag to 0. The
|
|
22
|
+
* env-gate keeps the cost at zero (one `process.env` check) when disabled,
|
|
23
|
+
* so the module can stay in the tree as a dormant diagnostic primitive.
|
|
24
|
+
*/
|
|
25
|
+
import type { OpenAIChatCompletionRequest } from '../openai-compat/openai-compat.js';
|
|
26
|
+
/**
|
|
27
|
+
* Append a shape-only record describing the incoming request. Best-effort:
|
|
28
|
+
* any IO error is swallowed (we don't want diagnostic logging to break a
|
|
29
|
+
* real request).
|
|
30
|
+
*/
|
|
31
|
+
export declare function logReqShape(request: OpenAIChatCompletionRequest, sessionName: string): void;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostic: privacy-safe request-shape logger.
|
|
3
|
+
*
|
|
4
|
+
* Purpose: investigate the "Acknowledged — no user request to act on" failure
|
|
5
|
+
* mode where Claude responds as if no user turn exists in the conversation.
|
|
6
|
+
* The leading hypothesis is that Savvy/OpenClaw is shipping `content` in a
|
|
7
|
+
* shape that `message-extractor.ts:textOf` returns `''` for, producing an
|
|
8
|
+
* empty user turn that Claude treats as no-input.
|
|
9
|
+
*
|
|
10
|
+
* Privacy contract: this logger NEVER writes content text. It records only
|
|
11
|
+
* the structural shape of the incoming `messages[]` — kind, length, and
|
|
12
|
+
* for content arrays, the key-set + type-field of each part. That's enough
|
|
13
|
+
* to identify a field-name mismatch (e.g., `.value` vs `.text`) without
|
|
14
|
+
* leaking the actual question text.
|
|
15
|
+
*
|
|
16
|
+
* Activation: `CC_OPENCLAW_REQ_SHAPE_LOG=1`. No-op when unset.
|
|
17
|
+
*
|
|
18
|
+
* Output: NDJSON appended to
|
|
19
|
+
* `~/.openclaw/workspace/memory/cc-openclaw-req-shape.jsonl`
|
|
20
|
+
*
|
|
21
|
+
* Lifecycle: enable for 24h, diagnose, then set the env flag to 0. The
|
|
22
|
+
* env-gate keeps the cost at zero (one `process.env` check) when disabled,
|
|
23
|
+
* so the module can stay in the tree as a dormant diagnostic primitive.
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from 'node:fs';
|
|
26
|
+
import * as path from 'node:path';
|
|
27
|
+
import * as os from 'node:os';
|
|
28
|
+
const LOG_PATH = path.join(os.homedir(), '.openclaw', 'workspace', 'memory', 'cc-openclaw-req-shape.jsonl');
|
|
29
|
+
function describeContent(content) {
|
|
30
|
+
if (content === null)
|
|
31
|
+
return { kind: 'null', length: null };
|
|
32
|
+
if (content === undefined)
|
|
33
|
+
return { kind: 'undefined', length: null };
|
|
34
|
+
if (typeof content === 'string')
|
|
35
|
+
return { kind: 'string', length: content.length };
|
|
36
|
+
if (Array.isArray(content)) {
|
|
37
|
+
const arrayPartShapes = content.map((part) => {
|
|
38
|
+
if (part === null || typeof part !== 'object') {
|
|
39
|
+
return { partKeys: [], typeField: null };
|
|
40
|
+
}
|
|
41
|
+
const obj = part;
|
|
42
|
+
const typeField = typeof obj.type === 'string' ? obj.type : null;
|
|
43
|
+
return { partKeys: Object.keys(obj).sort(), typeField };
|
|
44
|
+
});
|
|
45
|
+
return { kind: 'array', length: content.length, arrayPartShapes };
|
|
46
|
+
}
|
|
47
|
+
if (typeof content === 'object')
|
|
48
|
+
return { kind: 'object', length: null };
|
|
49
|
+
return { kind: 'other', length: null };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Append a shape-only record describing the incoming request. Best-effort:
|
|
53
|
+
* any IO error is swallowed (we don't want diagnostic logging to break a
|
|
54
|
+
* real request).
|
|
55
|
+
*/
|
|
56
|
+
export function logReqShape(request, sessionName) {
|
|
57
|
+
try {
|
|
58
|
+
const messages = (request.messages ?? []);
|
|
59
|
+
const roles = {};
|
|
60
|
+
for (const m of messages) {
|
|
61
|
+
const r = m.role ?? 'unknown';
|
|
62
|
+
roles[r] = (roles[r] ?? 0) + 1;
|
|
63
|
+
}
|
|
64
|
+
// Find the LAST user message (matches extractUserMessage's logic at L273-277).
|
|
65
|
+
const lastUser = [...messages].reverse().find((m) => m.role === 'user');
|
|
66
|
+
const userContentShape = lastUser
|
|
67
|
+
? describeContent(lastUser.content)
|
|
68
|
+
: { kind: 'undefined', length: null };
|
|
69
|
+
const record = {
|
|
70
|
+
ts: new Date().toISOString(),
|
|
71
|
+
sessionName,
|
|
72
|
+
msgCount: messages.length,
|
|
73
|
+
roles,
|
|
74
|
+
hasTools: Array.isArray(request.tools) && request.tools.length > 0,
|
|
75
|
+
userContentShape,
|
|
76
|
+
};
|
|
77
|
+
fs.appendFileSync(LOG_PATH, JSON.stringify(record) + '\n', 'utf8');
|
|
78
|
+
// Diagnostic 2026-05-11: when OPENCLAW_SYSPROMPT_DUMP is also on,
|
|
79
|
+
// dump the FULL user message bodies to a parallel directory. Only
|
|
80
|
+
// active during the user-message-drop investigation. Turn off by
|
|
81
|
+
// setting OPENCLAW_SYSPROMPT_DUMP=0.
|
|
82
|
+
if (process.env.OPENCLAW_SYSPROMPT_DUMP === '1') {
|
|
83
|
+
const dumpDir = path.join(os.homedir(), '.openclaw', 'workspace', 'debug', 'usermsg');
|
|
84
|
+
fs.mkdirSync(dumpDir, { recursive: true });
|
|
85
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
86
|
+
const safeName = sessionName.replace(/[^A-Za-z0-9_-]/g, '_');
|
|
87
|
+
const dumpPath = path.join(dumpDir, `${stamp}_${safeName}.txt`);
|
|
88
|
+
const userMessages = messages.filter((m) => m.role === 'user');
|
|
89
|
+
const body = userMessages
|
|
90
|
+
.map((m, i) => {
|
|
91
|
+
const content = typeof m.content === 'string'
|
|
92
|
+
? m.content
|
|
93
|
+
: Array.isArray(m.content)
|
|
94
|
+
? JSON.stringify(m.content)
|
|
95
|
+
: String(m.content ?? '');
|
|
96
|
+
return `=== user message ${i + 1} of ${userMessages.length} (${content.length} chars) ===\n${content}`;
|
|
97
|
+
})
|
|
98
|
+
.join('\n\n');
|
|
99
|
+
fs.writeFileSync(dumpPath, body, 'utf8');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
/* swallow — diagnostics must never break production */
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=req-shape-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"req-shape-log.js","sourceRoot":"","sources":["../../../src/lib/req-shape-log.ts"],"names":[],"mappings":"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"}
|