@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.
Files changed (288) hide show
  1. package/dist/scripts/bench/ab-harness.d.ts +58 -0
  2. package/dist/scripts/bench/ab-harness.d.ts.map +1 -0
  3. package/dist/scripts/bench/ab-harness.js +78 -0
  4. package/dist/scripts/bench/ab-harness.js.map +1 -0
  5. package/dist/src/channels/adapter.d.ts.map +1 -0
  6. package/dist/src/channels/telegram/completion-summary.d.ts.map +1 -0
  7. package/dist/src/channels/telegram/error-renderer.d.ts.map +1 -0
  8. package/dist/src/channels/telegram/event-reducer.d.ts.map +1 -0
  9. package/dist/src/channels/telegram/index.d.ts.map +1 -0
  10. package/dist/src/channels/telegram/injector.d.ts.map +1 -0
  11. package/dist/src/channels/telegram/live-card.d.ts.map +1 -0
  12. package/dist/src/channels/telegram/state-machine.d.ts.map +1 -0
  13. package/dist/src/channels/telegram/tool-tracker.d.ts.map +1 -0
  14. package/dist/src/command-router/cc-handler.d.ts.map +1 -0
  15. package/dist/src/command-router/index.d.ts.map +1 -0
  16. package/dist/src/constants.d.ts.map +1 -0
  17. package/dist/src/council/consensus.d.ts.map +1 -0
  18. package/dist/src/council/council.d.ts.map +1 -0
  19. package/dist/src/council/index.d.ts.map +1 -0
  20. package/dist/src/engines/base-oneshot-session.d.ts.map +1 -0
  21. package/dist/src/engines/index.d.ts.map +1 -0
  22. package/dist/src/engines/persistent-codex-session.d.ts.map +1 -0
  23. package/dist/src/engines/persistent-cursor-session.d.ts.map +1 -0
  24. package/dist/src/engines/persistent-custom-session.d.ts.map +1 -0
  25. package/dist/src/engines/persistent-gemini-session.d.ts.map +1 -0
  26. package/dist/src/engines/persistent-session.d.ts.map +1 -0
  27. package/dist/src/health/handler.d.ts.map +1 -0
  28. package/dist/src/health/index.d.ts.map +1 -0
  29. package/dist/src/index.d.ts +10 -1
  30. package/dist/src/index.d.ts.map +1 -0
  31. package/dist/src/index.js +47 -7
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/lib/auto-recovery.d.ts.map +1 -0
  34. package/dist/src/lib/cache-parity.d.ts.map +1 -0
  35. package/dist/src/lib/circuit-breaker.d.ts.map +1 -0
  36. package/dist/src/lib/config-service.d.ts +106 -0
  37. package/dist/src/lib/config-service.js +217 -0
  38. package/dist/src/lib/config-service.js.map +1 -0
  39. package/dist/src/lib/config.d.ts +33 -14
  40. package/dist/src/lib/config.d.ts.map +1 -0
  41. package/dist/src/lib/config.js +147 -34
  42. package/dist/src/lib/config.js.map +1 -1
  43. package/dist/src/lib/debug-tap.d.ts.map +1 -0
  44. package/dist/src/lib/drift-detector.d.ts.map +1 -0
  45. package/dist/src/lib/error-formatter.d.ts.map +1 -0
  46. package/dist/src/lib/heartbeat-workaround.d.ts.map +1 -0
  47. package/dist/src/lib/index.d.ts +1 -1
  48. package/dist/src/lib/index.d.ts.map +1 -0
  49. package/dist/src/lib/index.js +4 -1
  50. package/dist/src/lib/index.js.map +1 -1
  51. package/dist/src/lib/register-guard.d.ts.map +1 -0
  52. package/dist/src/lib/req-shape-log.d.ts +31 -0
  53. package/dist/src/lib/req-shape-log.js +106 -0
  54. package/dist/src/lib/req-shape-log.js.map +1 -0
  55. package/dist/src/lib/route-flag.d.ts.map +1 -0
  56. package/dist/src/lib/sysprompt-strip.d.ts.map +1 -0
  57. package/dist/src/lib/telemetry.d.ts.map +1 -0
  58. package/dist/src/lib/test-mode.d.ts.map +1 -0
  59. package/dist/src/lib/vendor-paths.d.ts.map +1 -0
  60. package/dist/src/logger.d.ts.map +1 -0
  61. package/dist/src/mcp/bridge.d.ts.map +1 -0
  62. package/dist/src/mcp/index.d.ts.map +1 -0
  63. package/dist/src/models.d.ts.map +1 -0
  64. package/dist/src/openai-compat/cli-stream-parser.d.ts.map +1 -0
  65. package/dist/src/openai-compat/index.d.ts.map +1 -0
  66. package/dist/src/openai-compat/message-extractor.d.ts +79 -0
  67. package/dist/src/openai-compat/message-extractor.js +162 -0
  68. package/dist/src/openai-compat/message-extractor.js.map +1 -0
  69. package/dist/src/openai-compat/mode-flags.d.ts +34 -0
  70. package/dist/src/openai-compat/mode-flags.js +44 -0
  71. package/dist/src/openai-compat/mode-flags.js.map +1 -0
  72. package/dist/src/openai-compat/non-streaming-handler.d.ts +26 -0
  73. package/dist/src/openai-compat/non-streaming-handler.js +108 -0
  74. package/dist/src/openai-compat/non-streaming-handler.js.map +1 -0
  75. package/dist/src/openai-compat/openai-compat.d.ts +15 -166
  76. package/dist/src/openai-compat/openai-compat.d.ts.map +1 -0
  77. package/dist/src/openai-compat/openai-compat.js +65 -849
  78. package/dist/src/openai-compat/openai-compat.js.map +1 -1
  79. package/dist/src/openai-compat/prompts.d.ts +47 -0
  80. package/dist/src/openai-compat/prompts.js +119 -0
  81. package/dist/src/openai-compat/prompts.js.map +1 -0
  82. package/dist/src/openai-compat/response-formatter.d.ts +33 -0
  83. package/dist/src/openai-compat/response-formatter.js +74 -0
  84. package/dist/src/openai-compat/response-formatter.js.map +1 -0
  85. package/dist/src/openai-compat/session-key-resolver.d.ts +41 -0
  86. package/dist/src/openai-compat/session-key-resolver.js +78 -0
  87. package/dist/src/openai-compat/session-key-resolver.js.map +1 -0
  88. package/dist/src/openai-compat/skill-resolver.d.ts.map +1 -0
  89. package/dist/src/openai-compat/sse-translator.d.ts.map +1 -0
  90. package/dist/src/openai-compat/status-reporter.d.ts +30 -0
  91. package/dist/src/openai-compat/status-reporter.js +81 -0
  92. package/dist/src/openai-compat/status-reporter.js.map +1 -0
  93. package/dist/src/openai-compat/streaming-handler.d.ts +41 -0
  94. package/dist/src/openai-compat/streaming-handler.js +294 -0
  95. package/dist/src/openai-compat/streaming-handler.js.map +1 -0
  96. package/dist/src/openai-compat/tool-calls-parser.d.ts +34 -0
  97. package/dist/src/openai-compat/tool-calls-parser.js +93 -0
  98. package/dist/src/openai-compat/tool-calls-parser.js.map +1 -0
  99. package/dist/src/openai-compat/tool-results-serializer.d.ts +60 -0
  100. package/dist/src/openai-compat/tool-results-serializer.js +56 -0
  101. package/dist/src/openai-compat/tool-results-serializer.js.map +1 -0
  102. package/dist/src/proxy/anthropic-adapter.d.ts.map +1 -0
  103. package/dist/src/proxy/handler.d.ts.map +1 -0
  104. package/dist/src/proxy/index.d.ts.map +1 -0
  105. package/dist/src/proxy/schema-cleaner.d.ts.map +1 -0
  106. package/dist/src/proxy/thought-cache.d.ts.map +1 -0
  107. package/dist/src/session/embedded-server.d.ts.map +1 -0
  108. package/dist/src/session/inbox-manager.d.ts.map +1 -0
  109. package/dist/src/session/index.d.ts.map +1 -0
  110. package/dist/src/session/session-manager.d.ts.map +1 -0
  111. package/dist/src/session-bootstrap/cwd-patch.d.ts.map +1 -0
  112. package/dist/src/session-bootstrap/cwd-patch.js +20 -13
  113. package/dist/src/session-bootstrap/cwd-patch.js.map +1 -1
  114. package/dist/src/session-bootstrap/index.d.ts.map +1 -0
  115. package/dist/src/session-bootstrap/sysprompt-strip.d.ts.map +1 -0
  116. package/dist/src/session-bootstrap/think-conflict-resolver.d.ts.map +1 -0
  117. package/dist/src/types/index.d.ts +15 -0
  118. package/dist/src/types/index.js +16 -0
  119. package/dist/src/types/index.js.map +1 -0
  120. package/dist/src/types/route.d.ts +41 -0
  121. package/dist/src/types/route.js +12 -0
  122. package/dist/src/types/route.js.map +1 -0
  123. package/dist/src/types/runtime-config.d.ts +161 -0
  124. package/dist/src/types/runtime-config.js +118 -0
  125. package/dist/src/types/runtime-config.js.map +1 -0
  126. package/dist/src/types/session.d.ts +48 -0
  127. package/dist/src/types/session.js +20 -0
  128. package/dist/src/types/session.js.map +1 -0
  129. package/dist/src/types/sse.d.ts +38 -0
  130. package/dist/src/types/sse.js +12 -0
  131. package/dist/src/types/sse.js.map +1 -0
  132. package/dist/src/types/tool-bridge.d.ts +81 -0
  133. package/dist/src/types/tool-bridge.js +34 -0
  134. package/dist/src/types/tool-bridge.js.map +1 -0
  135. package/dist/src/types/upstream.d.ts +652 -0
  136. package/dist/src/types/upstream.js +145 -0
  137. package/dist/src/types/upstream.js.map +1 -0
  138. package/dist/src/types.d.ts.map +1 -0
  139. package/dist/src/validation.d.ts.map +1 -0
  140. package/dist/tests/_helpers/subprocess-mock.d.ts +35 -0
  141. package/dist/tests/_helpers/subprocess-mock.d.ts.map +1 -0
  142. package/dist/tests/_helpers/subprocess-mock.js +136 -0
  143. package/dist/tests/_helpers/subprocess-mock.js.map +1 -0
  144. package/dist/tests/auto-recovery.test.d.ts +2 -0
  145. package/dist/tests/auto-recovery.test.d.ts.map +1 -0
  146. package/dist/tests/auto-recovery.test.js +189 -0
  147. package/dist/tests/auto-recovery.test.js.map +1 -0
  148. package/dist/tests/bench-harness.test.d.ts +2 -0
  149. package/dist/tests/bench-harness.test.d.ts.map +1 -0
  150. package/dist/tests/bench-harness.test.js +21 -0
  151. package/dist/tests/bench-harness.test.js.map +1 -0
  152. package/dist/tests/cache-parity.test.d.ts +2 -0
  153. package/dist/tests/cache-parity.test.d.ts.map +1 -0
  154. package/dist/tests/cache-parity.test.js +401 -0
  155. package/dist/tests/cache-parity.test.js.map +1 -0
  156. package/dist/tests/command-router.test.d.ts +2 -0
  157. package/dist/tests/command-router.test.d.ts.map +1 -0
  158. package/dist/tests/command-router.test.js +60 -0
  159. package/dist/tests/command-router.test.js.map +1 -0
  160. package/dist/tests/council.test.d.ts +2 -0
  161. package/dist/tests/council.test.d.ts.map +1 -0
  162. package/dist/tests/council.test.js +20 -0
  163. package/dist/tests/council.test.js.map +1 -0
  164. package/dist/tests/drift-detector.test.d.ts +2 -0
  165. package/dist/tests/drift-detector.test.d.ts.map +1 -0
  166. package/dist/tests/drift-detector.test.js +268 -0
  167. package/dist/tests/drift-detector.test.js.map +1 -0
  168. package/dist/tests/eager-bootstrap-gating.test.d.ts +9 -0
  169. package/dist/tests/eager-bootstrap-gating.test.d.ts.map +1 -0
  170. package/dist/tests/eager-bootstrap-gating.test.js +97 -0
  171. package/dist/tests/eager-bootstrap-gating.test.js.map +1 -0
  172. package/dist/tests/engines.test.d.ts +2 -0
  173. package/dist/tests/engines.test.d.ts.map +1 -0
  174. package/dist/tests/engines.test.js +8 -0
  175. package/dist/tests/engines.test.js.map +1 -0
  176. package/dist/tests/error-formatter.test.d.ts +2 -0
  177. package/dist/tests/error-formatter.test.d.ts.map +1 -0
  178. package/dist/tests/error-formatter.test.js +220 -0
  179. package/dist/tests/error-formatter.test.js.map +1 -0
  180. package/dist/tests/health.test.d.ts +2 -0
  181. package/dist/tests/health.test.d.ts.map +1 -0
  182. package/dist/tests/health.test.js +110 -0
  183. package/dist/tests/health.test.js.map +1 -0
  184. package/dist/tests/heartbeat-workaround.test.d.ts +2 -0
  185. package/dist/tests/heartbeat-workaround.test.d.ts.map +1 -0
  186. package/dist/tests/heartbeat-workaround.test.js +90 -0
  187. package/dist/tests/heartbeat-workaround.test.js.map +1 -0
  188. package/dist/tests/index.test.d.ts +2 -0
  189. package/dist/tests/index.test.d.ts.map +1 -0
  190. package/dist/tests/index.test.js +7 -0
  191. package/dist/tests/index.test.js.map +1 -0
  192. package/dist/tests/lib-sysprompt-strip.test.d.ts +2 -0
  193. package/dist/tests/lib-sysprompt-strip.test.d.ts.map +1 -0
  194. package/dist/tests/lib-sysprompt-strip.test.js +145 -0
  195. package/dist/tests/lib-sysprompt-strip.test.js.map +1 -0
  196. package/dist/tests/listener-activation.test.d.ts +2 -0
  197. package/dist/tests/listener-activation.test.d.ts.map +1 -0
  198. package/dist/tests/listener-activation.test.js +87 -0
  199. package/dist/tests/listener-activation.test.js.map +1 -0
  200. package/dist/tests/mcp-bridge.test.d.ts +2 -0
  201. package/dist/tests/mcp-bridge.test.d.ts.map +1 -0
  202. package/dist/tests/mcp-bridge.test.js +137 -0
  203. package/dist/tests/mcp-bridge.test.js.map +1 -0
  204. package/dist/tests/openai-compat.test.d.ts +2 -0
  205. package/dist/tests/openai-compat.test.d.ts.map +1 -0
  206. package/dist/tests/openai-compat.test.js +8 -0
  207. package/dist/tests/openai-compat.test.js.map +1 -0
  208. package/dist/tests/proxy-heartbeat-integration.test.d.ts +15 -0
  209. package/dist/tests/proxy-heartbeat-integration.test.d.ts.map +1 -0
  210. package/dist/tests/proxy-heartbeat-integration.test.js +122 -0
  211. package/dist/tests/proxy-heartbeat-integration.test.js.map +1 -0
  212. package/dist/tests/proxy.test.d.ts +2 -0
  213. package/dist/tests/proxy.test.d.ts.map +1 -0
  214. package/dist/tests/proxy.test.js +8 -0
  215. package/dist/tests/proxy.test.js.map +1 -0
  216. package/dist/tests/register-guard-stacking.test.d.ts +2 -0
  217. package/dist/tests/register-guard-stacking.test.d.ts.map +1 -0
  218. package/dist/tests/register-guard-stacking.test.js +61 -0
  219. package/dist/tests/register-guard-stacking.test.js.map +1 -0
  220. package/dist/tests/register-guard.test.d.ts +2 -0
  221. package/dist/tests/register-guard.test.d.ts.map +1 -0
  222. package/dist/tests/register-guard.test.js +129 -0
  223. package/dist/tests/register-guard.test.js.map +1 -0
  224. package/dist/tests/route-flag-rollback.test.d.ts +2 -0
  225. package/dist/tests/route-flag-rollback.test.d.ts.map +1 -0
  226. package/dist/tests/route-flag-rollback.test.js +70 -0
  227. package/dist/tests/route-flag-rollback.test.js.map +1 -0
  228. package/dist/tests/route-flag.test.d.ts +2 -0
  229. package/dist/tests/route-flag.test.d.ts.map +1 -0
  230. package/dist/tests/route-flag.test.js +101 -0
  231. package/dist/tests/route-flag.test.js.map +1 -0
  232. package/dist/tests/session-bootstrap.test.d.ts +2 -0
  233. package/dist/tests/session-bootstrap.test.d.ts.map +1 -0
  234. package/dist/tests/session-bootstrap.test.js +183 -0
  235. package/dist/tests/session-bootstrap.test.js.map +1 -0
  236. package/dist/tests/session.test.d.ts +2 -0
  237. package/dist/tests/session.test.d.ts.map +1 -0
  238. package/dist/tests/session.test.js +17 -0
  239. package/dist/tests/session.test.js.map +1 -0
  240. package/dist/tests/state-machine.test.d.ts +2 -0
  241. package/dist/tests/state-machine.test.d.ts.map +1 -0
  242. package/dist/tests/state-machine.test.js +133 -0
  243. package/dist/tests/state-machine.test.js.map +1 -0
  244. package/dist/tests/streaming/cli-stream-parser.test.d.ts +2 -0
  245. package/dist/tests/streaming/cli-stream-parser.test.d.ts.map +1 -0
  246. package/dist/tests/streaming/cli-stream-parser.test.js +233 -0
  247. package/dist/tests/streaming/cli-stream-parser.test.js.map +1 -0
  248. package/dist/tests/streaming/feature-flag.test.d.ts +14 -0
  249. package/dist/tests/streaming/feature-flag.test.d.ts.map +1 -0
  250. package/dist/tests/streaming/feature-flag.test.js +163 -0
  251. package/dist/tests/streaming/feature-flag.test.js.map +1 -0
  252. package/dist/tests/streaming/no-tools-prompt.test.d.ts +17 -0
  253. package/dist/tests/streaming/no-tools-prompt.test.d.ts.map +1 -0
  254. package/dist/tests/streaming/no-tools-prompt.test.js +229 -0
  255. package/dist/tests/streaming/no-tools-prompt.test.js.map +1 -0
  256. package/dist/tests/streaming/skill-plus-tools.test.d.ts +14 -0
  257. package/dist/tests/streaming/skill-plus-tools.test.d.ts.map +1 -0
  258. package/dist/tests/streaming/skill-plus-tools.test.js +234 -0
  259. package/dist/tests/streaming/skill-plus-tools.test.js.map +1 -0
  260. package/dist/tests/streaming/sse-translator.test.d.ts +2 -0
  261. package/dist/tests/streaming/sse-translator.test.d.ts.map +1 -0
  262. package/dist/tests/streaming/sse-translator.test.js +227 -0
  263. package/dist/tests/streaming/sse-translator.test.js.map +1 -0
  264. package/dist/tests/streaming/tool-result-roundtrip.test.d.ts +11 -0
  265. package/dist/tests/streaming/tool-result-roundtrip.test.d.ts.map +1 -0
  266. package/dist/tests/streaming/tool-result-roundtrip.test.js +215 -0
  267. package/dist/tests/streaming/tool-result-roundtrip.test.js.map +1 -0
  268. package/dist/tests/streaming/tool-use-translation.test.d.ts +10 -0
  269. package/dist/tests/streaming/tool-use-translation.test.d.ts.map +1 -0
  270. package/dist/tests/streaming/tool-use-translation.test.js +251 -0
  271. package/dist/tests/streaming/tool-use-translation.test.js.map +1 -0
  272. package/dist/tests/telegram-bridge.test.d.ts +2 -0
  273. package/dist/tests/telegram-bridge.test.d.ts.map +1 -0
  274. package/dist/tests/telegram-bridge.test.js +17 -0
  275. package/dist/tests/telegram-bridge.test.js.map +1 -0
  276. package/dist/tests/telegram-injector.test.d.ts +2 -0
  277. package/dist/tests/telegram-injector.test.d.ts.map +1 -0
  278. package/dist/tests/telegram-injector.test.js +74 -0
  279. package/dist/tests/telegram-injector.test.js.map +1 -0
  280. package/dist/tests/telemetry.test.d.ts +2 -0
  281. package/dist/tests/telemetry.test.d.ts.map +1 -0
  282. package/dist/tests/telemetry.test.js +405 -0
  283. package/dist/tests/telemetry.test.js.map +1 -0
  284. package/dist/tests/test-mode.test.d.ts +2 -0
  285. package/dist/tests/test-mode.test.d.ts.map +1 -0
  286. package/dist/tests/test-mode.test.js +39 -0
  287. package/dist/tests/test-mode.test.js.map +1 -0
  288. package/package.json +3 -2
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Cluster A — ConfigService.
3
+ *
4
+ * The single source of truth for runtime configuration. Parses
5
+ * `process.env` into a frozen `RuntimeConfig` at boot, exposes two
6
+ * narrow escape hatches that preserve the live-read vs frozen-snapshot
7
+ * asymmetry currently encoded in `src/lib/route-flag.ts:48,63`.
8
+ *
9
+ * Compat-shim window (v0.9.x): existing `src/lib/config.ts` getters
10
+ * delegate here once Cluster A migration step 6 lands. Direct `process.env`
11
+ * reads are removed in step 7 (the final Cluster A commit) when
12
+ * `src/lib/route-flag.ts` collapses into `selectEngine()` /
13
+ * `captureSessionRoute()` below.
14
+ *
15
+ * NOT yet wired into `src/index.ts` — that's Cluster A migration step 3.
16
+ */
17
+ import { RuntimeConfigSchema, RuntimeMode, ConfigError, deriveMode, } from '../types/runtime-config.js';
18
+ const TRUTHY = (v) => v === '1' || v?.toLowerCase() === 'true' || v?.toLowerCase() === 'on';
19
+ const FALSEY = (v) => v === '0' || v?.toLowerCase() === 'false' || v?.toLowerCase() === 'off';
20
+ /**
21
+ * Parse `process.env` into a `RuntimeConfig`. Total function — never
22
+ * throws. Use the discriminated `ParseEnvResult` to handle failure.
23
+ *
24
+ * Behavior preservation contract: every `process.env.X` read here MUST
25
+ * match the semantic of the corresponding getter in `src/lib/config.ts`.
26
+ * The two dual-default flags (`OPENCLAW_TOKEN_TELEMETRY`,
27
+ * `OPENCLAW_CACHE_PARITY`) are split into two fields each — see
28
+ * `src/types/runtime-config.ts` schema comments.
29
+ */
30
+ export function parseEnv(env) {
31
+ const mode = deriveMode(env);
32
+ const usedDeprecatedAlias = env.OPENCLAW_CC_OPENCLAW_ACTIVE === undefined &&
33
+ env.OPENCLAW_USE_CC_OPENCLAW !== undefined;
34
+ const raw = {
35
+ mode,
36
+ listenersEnabled: TRUTHY(env.OPENCLAW_CC_OPENCLAW_LISTENERS),
37
+ activeRouting: mode === RuntimeMode.ACTIVE_ROUTING,
38
+ toolStream: TRUTHY(env.CC_OPENCLAW_TOOL_STREAM),
39
+ allowBuiltins: TRUTHY(env.CC_OPENCLAW_ALLOW_BUILTINS),
40
+ toolsPerMessage: TRUTHY(env.OPENAI_COMPAT_TOOLS_PER_MESSAGE),
41
+ // Dual-default split (see schema comments).
42
+ cacheParityModuleEnabled: !FALSEY(env.OPENCLAW_CACHE_PARITY),
43
+ cacheParityTrackB: env.OPENCLAW_CACHE_PARITY === '1',
44
+ newConvoHeuristic: env.OPENAI_COMPAT_NEW_CONVO_HEURISTIC === '1',
45
+ aggressiveStripEnabled: !FALSEY(env.OPENCLAW_AGGRESSIVE_STRIP),
46
+ debug: TRUTHY(env.CC_OPENCLAW_DEBUG),
47
+ registerDebug: env.OPENCLAW_REGISTER_DEBUG === '1',
48
+ // Dual-default split (see schema comments).
49
+ tokenTelemetryRouteGate: env.OPENCLAW_TOKEN_TELEMETRY === '1',
50
+ tokenTelemetryWriter: env.OPENCLAW_TOKEN_TELEMETRY !== '0',
51
+ syspromptDump: env.OPENCLAW_SYSPROMPT_DUMP === '1',
52
+ trajectoryEnabled: env.CC_OPENCLAW_TRAJECTORY === '1',
53
+ statusUrl: env.OPENAI_COMPAT_STATUS_URL && env.OPENAI_COMPAT_STATUS_URL !== ''
54
+ ? env.OPENAI_COMPAT_STATUS_URL
55
+ : undefined,
56
+ surfaceThinking: env.CC_OPENCLAW_SURFACE_THINKING === '1',
57
+ thinkingExcerpt: env.CC_OPENCLAW_THINKING_EXCERPT === '1',
58
+ maxConcurrentSessions: parseInt(env.CLAUDE_CODE_MAX_SESSIONS ?? '', 10) || 32,
59
+ sessionTtlMinutes: parseInt(env.CLAUDE_CODE_SESSION_TTL ?? '', 10) || 1440,
60
+ serverHost: env.OPENCLAW_SERVER_HOST || '127.0.0.1',
61
+ rateLimit: parseInt(env.OPENCLAW_RATE_LIMIT ?? '', 10) || 100,
62
+ serverToken: env.OPENCLAW_SERVER_TOKEN && env.OPENCLAW_SERVER_TOKEN !== '' ? env.OPENCLAW_SERVER_TOKEN : undefined,
63
+ corsAllowAll: env.OPENCLAW_CORS_ORIGINS === '*',
64
+ claudeBin: env.CLAUDE_BIN && env.CLAUDE_BIN !== '' ? env.CLAUDE_BIN : undefined,
65
+ geminiBin: env.GEMINI_BIN && env.GEMINI_BIN !== '' ? env.GEMINI_BIN : undefined,
66
+ codexBin: env.CODEX_BIN && env.CODEX_BIN !== '' ? env.CODEX_BIN : undefined,
67
+ cursorBin: env.CURSOR_BIN && env.CURSOR_BIN !== '' ? env.CURSOR_BIN : undefined,
68
+ driftAlertsEnabled: env.OPENCLAW_CC_OPENCLAW_DRIFT_ALERTS !== '0',
69
+ autoRecoveryEnabled: env.OPENCLAW_CC_OPENCLAW_AUTO_RECOVERY !== '0',
70
+ quotaPausePct: Number(env.OPENCLAW_QUOTA_PAUSE_PCT) || 95,
71
+ testMode: env.OPENCLAW_PLUGIN_TEST_MODE === '1',
72
+ heartbeatWorkaroundDisabled: env.CC_OPENCLAW_DISABLE_HEARTBEAT_WORKAROUND === '1',
73
+ savvyLiveCardEnabled: TRUTHY(env.SAVVY_LIVE_CARD),
74
+ usedDeprecatedAlias,
75
+ };
76
+ const result = RuntimeConfigSchema.safeParse(raw);
77
+ if (!result.success) {
78
+ return { ok: false, error: new ConfigError(result.error.issues) };
79
+ }
80
+ return { ok: true, config: Object.freeze(result.data) };
81
+ }
82
+ // ── Free-function compat shims (Cluster A step 8: collapses route-flag.ts) ──
83
+ //
84
+ // The old `src/lib/route-flag.ts` exported `selectEngine`,
85
+ // `isCcOpenclawEnabled`, `captureSessionRoute`, `ACTIVE_FLAG_ENV`, and
86
+ // `ROUTE_FLAG_ENV` as free top-level symbols. Step 8 collapsed that file
87
+ // into ConfigService: the exports below re-implement the same API as
88
+ // pure functions that read env at call time (no caching, no
89
+ // ConfigService instance required) so existing call sites + tests work
90
+ // unchanged after a one-line import-path swap.
91
+ //
92
+ // `ConfigService.prototype.selectEngine()` and `captureSessionRoute()`
93
+ // delegate to these free functions, so the semantics are bit-identical
94
+ // regardless of which API a caller uses.
95
+ //
96
+ // **Deprecation alias `ROUTE_FLAG_ENV`** is preserved through v0.9.x and
97
+ // removed at v1.0.0. The activation derivation in `deriveMode` already
98
+ // honors it as a fallback.
99
+ /** Primary activation env var (PRP_v3 §10). */
100
+ export const ACTIVE_FLAG_ENV = 'OPENCLAW_CC_OPENCLAW_ACTIVE';
101
+ /**
102
+ * @deprecated Use `ACTIVE_FLAG_ENV`. Read for fallback when the new name
103
+ * is unset. Removed in v1.0.0.
104
+ */
105
+ export const ROUTE_FLAG_ENV = 'OPENCLAW_USE_CC_OPENCLAW';
106
+ /**
107
+ * Read env at call time and report whether cc-openclaw engine routing is
108
+ * active. **Independent of `LISTENERS`** — per ARCHITECTURE.md §3, engine
109
+ * selection (per-session) and handler wiring (process-wide) are orthogonal:
110
+ * a session can pick the cc-openclaw engine even when LISTENERS is off.
111
+ *
112
+ * Honors deprecated `OPENCLAW_USE_CC_OPENCLAW` fallback when the new
113
+ * ACTIVE_FLAG_ENV is unset.
114
+ *
115
+ * Free-function variant — works without a ConfigService instance.
116
+ */
117
+ export function isCcOpenclawEnabled(env = process.env) {
118
+ const v = env[ACTIVE_FLAG_ENV] ?? env[ROUTE_FLAG_ENV];
119
+ if (!v)
120
+ return false;
121
+ const norm = v.toLowerCase();
122
+ return norm === '1' || norm === 'true' || norm === 'on';
123
+ }
124
+ /**
125
+ * Free-function variant of `ConfigService.prototype.selectEngine()`.
126
+ * Re-reads env at call time. Use when you don't have a ConfigService instance
127
+ * (i.e. early boot, or in tests) — semantics match the instance method exactly.
128
+ *
129
+ * **Only reads `ACTIVE_FLAG_ENV` / deprecated alias.** Does NOT consider
130
+ * `LISTENERS` — that flag controls handler wiring, not engine selection.
131
+ * The higher-level `RuntimeMode` enum (which classifies the whole-process
132
+ * activation state) is computed separately by `deriveMode`.
133
+ */
134
+ export function selectEngine(env = process.env) {
135
+ return isCcOpenclawEnabled(env) ? 'cc-openclaw' : 'claude-local';
136
+ }
137
+ /**
138
+ * Free-function variant of `ConfigService.prototype.captureSessionRoute()`.
139
+ * Returns a frozen snapshot — subsequent env mutations do NOT affect the
140
+ * captured route. This is what makes "in-flight sessions stay on original
141
+ * engine" architecturally true at the routing layer.
142
+ */
143
+ export function captureSessionRoute(env = process.env) {
144
+ return Object.freeze({
145
+ engine: selectEngine(env),
146
+ capturedAt: new Date().toISOString(),
147
+ });
148
+ }
149
+ /**
150
+ * ConfigService wraps the parsed config with the live-read escape hatches
151
+ * that preserve `route-flag.ts:48,63` semantics.
152
+ *
153
+ * - `config`: frozen at construction; reads return boot-time values.
154
+ * - `selectEngine()`: re-reads `process.env` on every call. Use when picking
155
+ * an engine for a NEW session — lets a rollback flip take effect mid-process
156
+ * without restart.
157
+ * - `captureSessionRoute()`: snapshots the current engine into a frozen
158
+ * object. Use at session-start to lock the engine for that session's
159
+ * lifetime — lets in-flight sessions ride out a rollback unaffected.
160
+ */
161
+ export class ConfigService {
162
+ config;
163
+ constructor(config) {
164
+ this.config = config;
165
+ }
166
+ /**
167
+ * Re-reads env at call time. Use for new-session engine selection.
168
+ * Asymmetric with `config.activeRouting` (frozen at boot) BY DESIGN —
169
+ * see PRP §5 Cluster A "Frozen + escape-hatch contract".
170
+ *
171
+ * Delegates to the module-level `selectEngine` free function so that
172
+ * the class API and free-function API share one implementation.
173
+ */
174
+ selectEngine(env = process.env) {
175
+ return selectEngine(env);
176
+ }
177
+ /**
178
+ * Snapshot the current engine for a new session. Frozen — subsequent
179
+ * env mutations do NOT affect the captured route. Delegates to the
180
+ * free function for the same single-source-of-truth reason.
181
+ */
182
+ captureSessionRoute(env = process.env) {
183
+ return captureSessionRoute(env);
184
+ }
185
+ /** Convenience constructor for boot path. */
186
+ static fromEnv(env = process.env) {
187
+ const result = parseEnv(env);
188
+ if (!result.ok)
189
+ throw result.error;
190
+ return new ConfigService(result.config);
191
+ }
192
+ }
193
+ // ── Module-level singleton (Cluster A step 7) ────────────────────────────────
194
+ //
195
+ // The singleton lives here (NOT in src/index.ts) so that src/lib/config.ts
196
+ // can import it without creating a circular import (index.ts imports from
197
+ // many lib modules; if config.ts imported from index.ts, the cycle would
198
+ // surface at boot).
199
+ //
200
+ // `setConfigService` is called once by `register()` at boot. `getConfigService`
201
+ // returns `undefined` before that call OR if parseEnv failed. Compat-shim
202
+ // callers should pattern-match: `getConfigService()?.config.X ?? legacy`.
203
+ //
204
+ // Tests can clear via `_resetConfigServiceForTests()`. Tests that mutate env
205
+ // and depend on getters reading the new value should not call `register()`
206
+ // at all, OR should reset the singleton first.
207
+ let _singleton;
208
+ export function getConfigService() {
209
+ return _singleton;
210
+ }
211
+ export function setConfigService(svc) {
212
+ _singleton = svc;
213
+ }
214
+ export function _resetConfigServiceForTests() {
215
+ _singleton = undefined;
216
+ }
217
+ //# sourceMappingURL=config-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../../src/lib/config-service.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,27 @@
1
1
  /**
2
- * config — single env-reader source of truth (PRP_v3 §5 hard rule).
2
+ * config — env-reader source of truth.
3
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.
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 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.
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, 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
+ * 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
  export declare function getAggressiveStripEnabled(): boolean;
19
27
  export declare function getCacheParityEnabled(): boolean;
@@ -50,6 +58,9 @@ export declare function getClaudeBin(): string | undefined;
50
58
  * PATH passed to spawned engine subprocesses. Falls back to the standard
51
59
  * Unix path so binaries resolve even when the parent's PATH is unset
52
60
  * (preserved from persistent-session.ts:257 + persistent-custom-session.ts:240).
61
+ *
62
+ * NOT in RuntimeConfig — PATH is process-environment, not plugin
63
+ * configuration. Kept as a direct env reader.
53
64
  */
54
65
  export declare function getProcessPath(): string;
55
66
  export declare function isTokenTelemetryWriterEnabled(): boolean;
@@ -57,7 +68,11 @@ export declare function isTokenTelemetryWriterEnabled(): boolean;
57
68
  export declare function isRegisterDebugEnabled(): boolean;
58
69
  export declare function isHeartbeatWorkaroundDisabled(): boolean;
59
70
  export declare function getQuotaPausePct(): number;
60
- /** Raw value for `isToolsPerMessageModeEnabled()` parsing. */
71
+ /**
72
+ * Raw value for `isToolsPerMessageModeEnabled()` parsing.
73
+ * NOT delegated — the consumer parses the raw string itself; the typed
74
+ * `toolsPerMessage` boolean field is for boot-time observability only.
75
+ */
61
76
  export declare function getOpenaiCompatToolsPerMessage(): string | undefined;
62
77
  /** Strict opt-in — legacy new-conversation heuristic via env=1. */
63
78
  export declare function isOpenaiCompatNewConvoHeuristic(): boolean;
@@ -68,7 +83,11 @@ export declare function isSavvyLiveCardEnabled(): boolean;
68
83
  export declare function getHomeOrTmp(): string;
69
84
  export declare function getHealthPortEnv(): string | undefined;
70
85
  export declare function isDriftAlertsEnabled(): boolean;
71
- /** Dedup window for repeated drift Telegram alerts. Default 1h. */
86
+ /**
87
+ * Dedup window for repeated drift Telegram alerts. Default 1h.
88
+ * NOT in RuntimeConfig — niche tunable not surfaced through the activation
89
+ * matrix. Kept as a direct env reader.
90
+ */
72
91
  export declare function getDriftDedupeWindowMs(): number;
73
92
  export declare function isAutoRecoveryEnabled(): boolean;
74
93
  export declare function getSurfaceThinkingEnabled(): boolean;
@@ -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"}