@a1hvdy/cc-openclaw 0.11.0 → 0.13.0

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 (212) hide show
  1. package/dist/src/channels/telegram/event-reducer.js +3 -15
  2. package/dist/src/channels/telegram/event-reducer.js.map +1 -1
  3. package/dist/src/channels/telegram/format-helpers.d.ts +20 -0
  4. package/dist/src/channels/telegram/format-helpers.js +34 -0
  5. package/dist/src/channels/telegram/format-helpers.js.map +1 -0
  6. package/dist/src/channels/telegram/live-card.js +3 -21
  7. package/dist/src/channels/telegram/live-card.js.map +1 -1
  8. package/dist/src/channels/telegram/result-preview.d.ts +12 -0
  9. package/dist/src/channels/telegram/result-preview.js +48 -0
  10. package/dist/src/channels/telegram/result-preview.js.map +1 -0
  11. package/dist/src/channels/telegram/tool-tracker.d.ts +1 -2
  12. package/dist/src/channels/telegram/tool-tracker.js +11 -38
  13. package/dist/src/channels/telegram/tool-tracker.js.map +1 -1
  14. package/dist/src/cli/checks/bridge-wiring.d.ts +14 -0
  15. package/dist/src/cli/checks/bridge-wiring.js +64 -0
  16. package/dist/src/cli/checks/bridge-wiring.js.map +1 -0
  17. package/dist/src/cli/checks/config-schema.d.ts +11 -0
  18. package/dist/src/cli/checks/config-schema.js +51 -0
  19. package/dist/src/cli/checks/config-schema.js.map +1 -0
  20. package/dist/src/cli/checks/critical-openclaw-json-keys.d.ts +21 -0
  21. package/dist/src/cli/checks/critical-openclaw-json-keys.js +106 -0
  22. package/dist/src/cli/checks/critical-openclaw-json-keys.js.map +1 -0
  23. package/dist/src/cli/checks/install-path.d.ts +11 -0
  24. package/dist/src/cli/checks/install-path.js +89 -0
  25. package/dist/src/cli/checks/install-path.js.map +1 -0
  26. package/dist/src/cli/checks/patch-scaffold.d.ts +17 -0
  27. package/dist/src/cli/checks/patch-scaffold.js +56 -0
  28. package/dist/src/cli/checks/patch-scaffold.js.map +1 -0
  29. package/dist/src/cli/doctor.d.ts +5 -9
  30. package/dist/src/cli/doctor.js +28 -129
  31. package/dist/src/cli/doctor.js.map +1 -1
  32. package/dist/src/cli/index.js +2 -2
  33. package/dist/src/cli/index.js.map +1 -1
  34. package/dist/src/cli/migrate.d.ts +29 -0
  35. package/dist/src/cli/migrate.js +75 -0
  36. package/dist/src/cli/migrate.js.map +1 -0
  37. package/dist/src/config/drift-detector.d.ts +28 -0
  38. package/dist/src/config/drift-detector.js +75 -0
  39. package/dist/src/config/drift-detector.js.map +1 -0
  40. package/dist/src/config/loader.d.ts +8 -0
  41. package/dist/src/config/loader.js +69 -0
  42. package/dist/src/config/loader.js.map +1 -0
  43. package/dist/src/config/schema.d.ts +188 -0
  44. package/dist/src/config/schema.js +98 -0
  45. package/dist/src/config/schema.js.map +1 -0
  46. package/dist/src/council/build-agent-prompt.d.ts +11 -0
  47. package/dist/src/council/build-agent-prompt.js +96 -0
  48. package/dist/src/council/build-agent-prompt.js.map +1 -0
  49. package/dist/src/council/cleanup-worktrees.d.ts +10 -0
  50. package/dist/src/council/cleanup-worktrees.js +22 -0
  51. package/dist/src/council/cleanup-worktrees.js.map +1 -0
  52. package/dist/src/council/council.js +15 -186
  53. package/dist/src/council/council.js.map +1 -1
  54. package/dist/src/council/system-prompt.d.ts +16 -0
  55. package/dist/src/council/system-prompt.js +40 -0
  56. package/dist/src/council/system-prompt.js.map +1 -0
  57. package/dist/src/council/write-worktree-claude-md.d.ts +10 -0
  58. package/dist/src/council/write-worktree-claude-md.js +41 -0
  59. package/dist/src/council/write-worktree-claude-md.js.map +1 -0
  60. package/dist/src/engines/persistent-custom-session.js +3 -8
  61. package/dist/src/engines/persistent-custom-session.js.map +1 -1
  62. package/dist/src/engines/resolve-bin.d.ts +14 -0
  63. package/dist/src/engines/resolve-bin.js +18 -0
  64. package/dist/src/engines/resolve-bin.js.map +1 -0
  65. package/dist/src/lib/config-service.js +8 -0
  66. package/dist/src/lib/config-service.js.map +1 -1
  67. package/dist/src/lib/debounce.d.ts +12 -0
  68. package/dist/src/lib/debounce.js +23 -0
  69. package/dist/src/lib/debounce.js.map +1 -0
  70. package/dist/src/lib/domain-error.d.ts +59 -0
  71. package/dist/src/lib/domain-error.js +79 -0
  72. package/dist/src/lib/domain-error.js.map +1 -0
  73. package/dist/src/lib/json-array.d.ts +10 -0
  74. package/dist/src/lib/json-array.js +23 -0
  75. package/dist/src/lib/json-array.js.map +1 -0
  76. package/dist/src/lib/safe-upstream-probes.d.ts +25 -0
  77. package/dist/src/lib/safe-upstream-probes.js +42 -0
  78. package/dist/src/lib/safe-upstream-probes.js.map +1 -0
  79. package/dist/src/lib/spawn-async.d.ts +18 -0
  80. package/dist/src/lib/spawn-async.js +47 -0
  81. package/dist/src/lib/spawn-async.js.map +1 -0
  82. package/dist/src/lib/stale-pid-files.d.ts +17 -0
  83. package/dist/src/lib/stale-pid-files.js +40 -0
  84. package/dist/src/lib/stale-pid-files.js.map +1 -0
  85. package/dist/src/lifecycle/boot.d.ts +59 -0
  86. package/dist/src/lifecycle/boot.js +132 -0
  87. package/dist/src/lifecycle/boot.js.map +1 -0
  88. package/dist/src/lifecycle/patch-manifest.d.ts +82 -0
  89. package/dist/src/lifecycle/patch-manifest.js +126 -0
  90. package/dist/src/lifecycle/patch-manifest.js.map +1 -0
  91. package/dist/src/lifecycle/phase-import-upstream.d.ts +12 -0
  92. package/dist/src/lifecycle/phase-import-upstream.js +18 -0
  93. package/dist/src/lifecycle/phase-import-upstream.js.map +1 -0
  94. package/dist/src/lifecycle/phase-install-patches.d.ts +12 -0
  95. package/dist/src/lifecycle/phase-install-patches.js +31 -0
  96. package/dist/src/lifecycle/phase-install-patches.js.map +1 -0
  97. package/dist/src/lifecycle/phase-schedule-jobs.d.ts +12 -0
  98. package/dist/src/lifecycle/phase-schedule-jobs.js +15 -0
  99. package/dist/src/lifecycle/phase-schedule-jobs.js.map +1 -0
  100. package/dist/src/lifecycle/phase-start-server.d.ts +11 -0
  101. package/dist/src/lifecycle/phase-start-server.js +11 -0
  102. package/dist/src/lifecycle/phase-start-server.js.map +1 -0
  103. package/dist/src/lifecycle/phase-validate-config.d.ts +9 -0
  104. package/dist/src/lifecycle/phase-validate-config.js +25 -0
  105. package/dist/src/lifecycle/phase-validate-config.js.map +1 -0
  106. package/dist/src/lifecycle/phase-validate-upstream.d.ts +11 -0
  107. package/dist/src/lifecycle/phase-validate-upstream.js +16 -0
  108. package/dist/src/lifecycle/phase-validate-upstream.js.map +1 -0
  109. package/dist/src/lifecycle/phase-wire-handlers.d.ts +12 -0
  110. package/dist/src/lifecycle/phase-wire-handlers.js +16 -0
  111. package/dist/src/lifecycle/phase-wire-handlers.js.map +1 -0
  112. package/dist/src/observability/event-bus.d.ts +75 -0
  113. package/dist/src/observability/event-bus.js +63 -0
  114. package/dist/src/observability/event-bus.js.map +1 -0
  115. package/dist/src/observability/get-event-bus.d.ts +25 -0
  116. package/dist/src/observability/get-event-bus.js +34 -0
  117. package/dist/src/observability/get-event-bus.js.map +1 -0
  118. package/dist/src/observability/observability-service.d.ts +19 -0
  119. package/dist/src/observability/observability-service.js +24 -0
  120. package/dist/src/observability/observability-service.js.map +1 -0
  121. package/dist/src/observability/subscribers/metrics.d.ts +11 -0
  122. package/dist/src/observability/subscribers/metrics.js +21 -0
  123. package/dist/src/observability/subscribers/metrics.js.map +1 -0
  124. package/dist/src/observability/subscribers/session-capture.d.ts +15 -0
  125. package/dist/src/observability/subscribers/session-capture.js +25 -0
  126. package/dist/src/observability/subscribers/session-capture.js.map +1 -0
  127. package/dist/src/openai-compat/bridges/allowlist.d.ts +14 -5
  128. package/dist/src/openai-compat/bridges/allowlist.js +18 -7
  129. package/dist/src/openai-compat/bridges/allowlist.js.map +1 -1
  130. package/dist/src/openai-compat/bridges/openclaw-api-shim.d.ts +54 -0
  131. package/dist/src/openai-compat/bridges/openclaw-api-shim.js +45 -0
  132. package/dist/src/openai-compat/bridges/openclaw-api-shim.js.map +1 -0
  133. package/dist/src/openai-compat/openai-chunk-types.d.ts +35 -0
  134. package/dist/src/openai-compat/openai-chunk-types.js +9 -0
  135. package/dist/src/openai-compat/openai-chunk-types.js.map +1 -0
  136. package/dist/src/openai-compat/openai-compat.d.ts +2 -90
  137. package/dist/src/openai-compat/openai-compat.js +68 -68
  138. package/dist/src/openai-compat/openai-compat.js.map +1 -1
  139. package/dist/src/openai-compat/openai-types.d.ts +71 -0
  140. package/dist/src/openai-compat/openai-types.js +11 -0
  141. package/dist/src/openai-compat/openai-types.js.map +1 -0
  142. package/dist/src/openai-compat/parse-route-body.d.ts +24 -0
  143. package/dist/src/openai-compat/parse-route-body.js +45 -0
  144. package/dist/src/openai-compat/parse-route-body.js.map +1 -0
  145. package/dist/src/openai-compat/tts-rule.d.ts +20 -0
  146. package/dist/src/openai-compat/tts-rule.js +58 -0
  147. package/dist/src/openai-compat/tts-rule.js.map +1 -0
  148. package/dist/src/openai-compat/voice-recovery.js +0 -1
  149. package/dist/src/openai-compat/voice-recovery.js.map +1 -1
  150. package/dist/src/patches/cache-parity-registry.d.ts +20 -0
  151. package/dist/src/patches/cache-parity-registry.js +64 -0
  152. package/dist/src/patches/cache-parity-registry.js.map +1 -0
  153. package/dist/src/patches/claude-md-injection.d.ts +10 -0
  154. package/dist/src/patches/claude-md-injection.js +46 -0
  155. package/dist/src/patches/claude-md-injection.js.map +1 -0
  156. package/dist/src/patches/cwd-redirect.d.ts +10 -0
  157. package/dist/src/patches/cwd-redirect.js +51 -0
  158. package/dist/src/patches/cwd-redirect.js.map +1 -0
  159. package/dist/src/patches/embedded-server-route.d.ts +23 -0
  160. package/dist/src/patches/embedded-server-route.js +64 -0
  161. package/dist/src/patches/embedded-server-route.js.map +1 -0
  162. package/dist/src/patches/pricing-overrides.d.ts +10 -0
  163. package/dist/src/patches/pricing-overrides.js +55 -0
  164. package/dist/src/patches/pricing-overrides.js.map +1 -0
  165. package/dist/src/patches/resume-registry-restore.d.ts +11 -0
  166. package/dist/src/patches/resume-registry-restore.js +48 -0
  167. package/dist/src/patches/resume-registry-restore.js.map +1 -0
  168. package/dist/src/patches/session-pid-tracking.d.ts +10 -0
  169. package/dist/src/patches/session-pid-tracking.js +45 -0
  170. package/dist/src/patches/session-pid-tracking.js.map +1 -0
  171. package/dist/src/patches/sysprompt-strip.d.ts +46 -0
  172. package/dist/src/patches/sysprompt-strip.js +78 -0
  173. package/dist/src/patches/sysprompt-strip.js.map +1 -0
  174. package/dist/src/patches/sysprompt-strip.spec.d.ts +33 -0
  175. package/dist/src/patches/sysprompt-strip.spec.js +53 -0
  176. package/dist/src/patches/sysprompt-strip.spec.js.map +1 -0
  177. package/dist/src/patches/tools-restoration.d.ts +12 -0
  178. package/dist/src/patches/tools-restoration.js +43 -0
  179. package/dist/src/patches/tools-restoration.js.map +1 -0
  180. package/dist/src/persistence/migration-v0.d.ts +24 -0
  181. package/dist/src/persistence/migration-v0.js +142 -0
  182. package/dist/src/persistence/migration-v0.js.map +1 -0
  183. package/dist/src/persistence/session-registry.d.ts +57 -0
  184. package/dist/src/persistence/session-registry.js +58 -0
  185. package/dist/src/persistence/session-registry.js.map +1 -0
  186. package/dist/src/persistence/snapshot.d.ts +18 -0
  187. package/dist/src/persistence/snapshot.js +32 -0
  188. package/dist/src/persistence/snapshot.js.map +1 -0
  189. package/dist/src/persistence/wal.d.ts +17 -0
  190. package/dist/src/persistence/wal.js +32 -0
  191. package/dist/src/persistence/wal.js.map +1 -0
  192. package/dist/src/session/persisted-sessions.d.ts +26 -0
  193. package/dist/src/session/persisted-sessions.js +70 -0
  194. package/dist/src/session/persisted-sessions.js.map +1 -0
  195. package/dist/src/session/session-manager.d.ts +2 -11
  196. package/dist/src/session/session-manager.js +22 -66
  197. package/dist/src/session/session-manager.js.map +1 -1
  198. package/dist/src/session-bootstrap/boot-self-heal.d.ts +32 -0
  199. package/dist/src/session-bootstrap/boot-self-heal.js +54 -0
  200. package/dist/src/session-bootstrap/boot-self-heal.js.map +1 -0
  201. package/dist/src/session-bootstrap/cwd-patch.js +11 -87
  202. package/dist/src/session-bootstrap/cwd-patch.js.map +1 -1
  203. package/dist/src/session-bootstrap/resume-registry.d.ts +29 -0
  204. package/dist/src/session-bootstrap/resume-registry.js +58 -0
  205. package/dist/src/session-bootstrap/resume-registry.js.map +1 -0
  206. package/dist/src/session-bootstrap/session-hygiene.d.ts +23 -0
  207. package/dist/src/session-bootstrap/session-hygiene.js +41 -0
  208. package/dist/src/session-bootstrap/session-hygiene.js.map +1 -0
  209. package/dist/src/types/runtime-config.d.ts +11 -0
  210. package/dist/src/types/runtime-config.js +9 -0
  211. package/dist/src/types/runtime-config.js.map +1 -1
  212. package/package.json +1 -1
@@ -12,133 +12,29 @@
12
12
  * Future planes add checks via the exported `ALL_CHECKS` registry.
13
13
  */
14
14
  import { Command } from 'commander';
15
- import { existsSync, readFileSync } from 'fs';
16
- import { homedir } from 'os';
17
- import { join, dirname } from 'path';
18
- import { fileURLToPath } from 'url';
19
- // Locate package.json by walking up from this file's directory until we find it.
20
- // Works in both runtime (dist/src/cli/) and vitest (src/cli/) contexts.
21
- function findProjectRoot(startDir) {
22
- let dir = startDir;
23
- for (let i = 0; i < 10; i++) {
24
- if (existsSync(join(dir, 'package.json')))
25
- return dir;
26
- const parent = dirname(dir);
27
- if (parent === dir)
28
- break;
29
- dir = parent;
30
- }
31
- throw new Error('cc-openclaw: could not locate project root package.json');
32
- }
33
- // Resolved lazily-at-import with a fallback so a mocked fs (vitest) or an
34
- // unreachable path doesn't crash the entire module load. SELF_VERSION is
35
- // display-only; an 'unknown' fallback is acceptable for the doctor surface.
36
- let SELF_VERSION;
37
- try {
38
- const _thisDir = dirname(fileURLToPath(import.meta.url));
39
- const _projectRoot = findProjectRoot(_thisDir);
40
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
41
- const selfPkg = JSON.parse(readFileSync(join(_projectRoot, 'package.json'), 'utf8'));
42
- SELF_VERSION = String(selfPkg.version ?? 'unknown');
43
- }
44
- catch {
45
- SELF_VERSION = 'unknown';
46
- }
47
- // ── Install-path candidates ──────────────────────────────────────────────────
48
- const INSTALL_CANDIDATES = [
49
- join(homedir(), '.npm-global/lib/node_modules/openclaw/dist/extensions/cc-openclaw'),
50
- '/usr/local/lib/node_modules/openclaw/dist/extensions/cc-openclaw',
51
- join(homedir(), '.openclaw/extensions/cc-openclaw'),
52
- ];
53
- // ── Check 1: install path resolution ────────────────────────────────────────
54
- export function checkInstallPath(selfVersion = SELF_VERSION) {
55
- const id = 'check_install_path';
56
- for (const candidate of INSTALL_CANDIDATES) {
57
- const pkgPath = join(candidate, 'package.json');
58
- if (!existsSync(pkgPath))
59
- continue;
60
- let installedVersion;
61
- try {
62
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
63
- const installedPkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
64
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
65
- installedVersion = String(installedPkg.version ?? 'unknown');
66
- }
67
- catch {
68
- return {
69
- id,
70
- status: 'fail',
71
- detail: {
72
- path: candidate,
73
- candidatesSearched: INSTALL_CANDIDATES,
74
- error: 'could not parse package.json at resolved path',
75
- },
76
- };
77
- }
78
- const mismatch = installedVersion !== selfVersion;
79
- return {
80
- id,
81
- status: mismatch ? 'fail' : 'pass',
82
- detail: {
83
- path: candidate,
84
- candidatesSearched: INSTALL_CANDIDATES,
85
- version: installedVersion,
86
- selfVersion: selfVersion,
87
- mismatch,
88
- },
89
- };
90
- }
91
- return {
92
- id,
93
- status: 'fail',
94
- detail: {
95
- candidatesSearched: INSTALL_CANDIDATES,
96
- error: 'cc-openclaw not found in any known openclaw extension path',
97
- },
98
- };
99
- }
100
- // ── Check 2: bridge wiring detection ────────────────────────────────────────
101
- const EXPECTED_BRIDGE_MODES = ['Embedded', 'PerMessage', 'NativeStream', 'OpenClawNative'];
102
- export async function checkBridgeWiring() {
103
- const id = 'check_bridge_wiring';
104
- let factory;
105
- try {
106
- // Dynamic import — soft-fail if the file doesn't exist yet.
107
- // The bridge coder is working on this in parallel; pending is correct.
108
- // The specifier is intentionally held in a variable so tsc does not
109
- // attempt static resolution of the not-yet-created module.
110
- factory = (await import('../openai-compat/bridges/factory.js'));
111
- }
112
- catch (err) {
113
- const matchesNotFound = (e) => e instanceof Error &&
114
- ('code' in e
115
- ? e.code === 'ERR_MODULE_NOT_FOUND'
116
- : e.message.includes('Cannot find module') ||
117
- e.message.includes('ERR_MODULE_NOT_FOUND'));
118
- const isNotFound = matchesNotFound(err) || matchesNotFound(err.cause);
119
- if (isNotFound) {
120
- return {
121
- id,
122
- status: 'pending',
123
- detail: { reason: 'bridge module not yet shipped' },
124
- };
125
- }
126
- return {
127
- id,
128
- status: 'fail',
129
- detail: { error: err instanceof Error ? err.message : String(err) },
130
- };
131
- }
132
- const missingBridges = EXPECTED_BRIDGE_MODES.filter((mode) => !(mode in factory));
133
- return {
134
- id,
135
- status: missingBridges.length === 0 ? 'pass' : 'fail',
136
- detail: {
137
- bridges: EXPECTED_BRIDGE_MODES.filter((m) => m in factory),
138
- missingBridges,
139
- },
140
- };
141
- }
15
+ import { checkPatchScaffold as _checkPatchScaffoldImpl } from './checks/patch-scaffold.js';
16
+ import { checkCriticalOpenclawJsonKeys as _checkCriticalKeysImpl } from './checks/critical-openclaw-json-keys.js';
17
+ import { checkConfigSchema as _checkConfigSchemaImpl } from './checks/config-schema.js';
18
+ import { checkInstallPath as _checkInstallPathImpl } from './checks/install-path.js';
19
+ import { checkBridgeWiring as _checkBridgeWiringImpl } from './checks/bridge-wiring.js';
20
+ // `checkInstallPath` extracted to `./checks/install-path.ts` 2026-05-13
21
+ // along with findProjectRoot, SELF_VERSION, INSTALL_CANDIDATES helpers
22
+ // to keep doctor.ts under the 500-LOC ceiling.
23
+ export { checkInstallPath } from './checks/install-path.js';
24
+ // `checkBridgeWiring` extracted to `./checks/bridge-wiring.ts` 2026-05-13
25
+ // to keep doctor.ts under the 500-LOC ceiling.
26
+ export { checkBridgeWiring } from './checks/bridge-wiring.js';
27
+ // `checkConfigSchema` extracted to `./checks/config-schema.ts` 2026-05-13
28
+ // to keep doctor.ts under the 500-LOC ceiling.
29
+ export { checkConfigSchema } from './checks/config-schema.js';
30
+ // `checkCriticalOpenclawJsonKeys` extracted to `./checks/critical-openclaw-json-keys.ts`
31
+ // 2026-05-13 to keep doctor.ts under the 500-LOC ceiling.
32
+ export { checkCriticalOpenclawJsonKeys } from './checks/critical-openclaw-json-keys.js';
33
+ // ── Check 5: patch scaffold composition ─────────────────────────────────────
34
+ // `checkPatchScaffold` lives in `src/cli/checks/patch-scaffold.ts` (extracted
35
+ // 2026-05-13 to keep doctor.ts under the 500-LOC ceiling). Re-exported here
36
+ // for backward compatibility.
37
+ export { checkPatchScaffold } from './checks/patch-scaffold.js';
142
38
  // ── Output helpers ───────────────────────────────────────────────────────────
143
39
  function symbol(status) {
144
40
  if (status === 'pass')
@@ -167,8 +63,11 @@ export function createDoctorCommand() {
167
63
  .option('--json', 'emit results as a single JSON line')
168
64
  .action(async (opts) => {
169
65
  const results = [];
170
- results.push(checkInstallPath());
171
- results.push(await checkBridgeWiring());
66
+ results.push(_checkInstallPathImpl());
67
+ results.push(await _checkBridgeWiringImpl());
68
+ results.push(_checkConfigSchemaImpl());
69
+ results.push(_checkCriticalKeysImpl());
70
+ results.push(await _checkPatchScaffoldImpl());
172
71
  const passed = results.filter((r) => r.status === 'pass').length;
173
72
  const pending = results.filter((r) => r.status === 'pending').length;
174
73
  const failed = results.filter((r) => r.status === 'fail').length;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,6BAA6B,IAAI,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAClH,OAAO,EAAE,iBAAiB,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,iBAAiB,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAYxF,wEAAwE;AACxE,uEAAuE;AACvE,+CAA+C;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,0EAA0E;AAC1E,+CAA+C;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,0EAA0E;AAC1E,+CAA+C;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,yFAAyF;AACzF,0DAA0D;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AAExF,+EAA+E;AAE/E,8EAA8E;AAC9E,4EAA4E;AAC5E,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,gFAAgF;AAEhF,SAAS,MAAM,CAAC,MAAmB;IACjC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC,CAAC,IAAI;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,IAAI;IAC1C,OAAO,GAAG,CAAC,CAAC,IAAI;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,MAA+B;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAElC,GAAG;SACA,WAAW,CACV,qEAAqE,CACtE;SACA,MAAM,CAAC,QAAQ,EAAE,oCAAoC,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;QACzC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,MAAM,sBAAsB,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,MAAM,uBAAuB,EAAE,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACjE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QACjE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CACrF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,WAAW,IAAI,CACjE,CAAC;gBACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,aAAa,MAAM,IAAI,KAAK,iBAAiB,WAAW,IAAI,CAC7D,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { Command } from 'commander';
9
9
  import { createDoctorCommand } from './doctor.js';
10
+ import { createMigrateCommand } from './migrate.js';
10
11
  import { existsSync, readFileSync } from 'fs';
11
12
  import { dirname, join } from 'path';
12
13
  import { fileURLToPath } from 'url';
@@ -23,15 +24,14 @@ function findProjectRoot(startDir) {
23
24
  throw new Error('cc-openclaw: could not locate project root package.json');
24
25
  }
25
26
  const _root = findProjectRoot(dirname(fileURLToPath(import.meta.url)));
26
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
27
27
  const pkg = JSON.parse(readFileSync(join(_root, 'package.json'), 'utf8'));
28
28
  const program = new Command();
29
29
  program
30
30
  .name('cc-openclaw')
31
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
32
31
  .version(String(pkg.version), '-v, --version', 'print version and exit')
33
32
  .description('A1xAI cc-openclaw plugin diagnostics');
34
33
  program.addCommand(createDoctorCommand());
34
+ program.addCommand(createMigrateCommand());
35
35
  program.parseAsync(process.argv).catch((err) => {
36
36
  console.error('cc-openclaw: fatal error', err);
37
37
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,mEAAmE;AACnE,MAAM,GAAG,GAAyB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;IACpB,sEAAsE;KACrE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,wBAAwB,CAAC;KACvE,WAAW,CAAC,sCAAsC,CAAC,CAAC;AAEvD,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAE1C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,GAAG,GAAyB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KAEnB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,wBAAwB,CAAC;KACvE,WAAW,CAAC,sCAAsC,CAAC,CAAC;AAEvD,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAE3C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `cc-openclaw migrate` — legacy-persistence migration command (Q5 resolution).
3
+ *
4
+ * Default mode (no flag): READ-ONLY. Loads the four legacy JSON files into
5
+ * the new SessionRegistry's in-memory map, reports counts, exits 0. Legacy
6
+ * files remain untouched. Idempotent — safe to run repeatedly.
7
+ *
8
+ * `--commit`: DESTRUCTIVE. After successful read, deletes the four legacy
9
+ * files. The v1.0.0 release blocks on A1 running `--commit` on both laptops.
10
+ *
11
+ * `--dry-run`: synonym for default (no-flag) — emitted for parity with
12
+ * `openclaw doctor --fix` UX expectations. No deletion, no writes, only counts.
13
+ */
14
+ import { Command } from 'commander';
15
+ export interface MigrateOptions {
16
+ commit?: boolean;
17
+ dryRun?: boolean;
18
+ }
19
+ export interface MigrateResult {
20
+ readonly migratedCount: number;
21
+ readonly committed: boolean;
22
+ readonly deletedFiles: ReadonlyArray<string>;
23
+ }
24
+ /**
25
+ * Pure function — runs the migration, returns counts. Splits the side-effects
26
+ * (file deletion + console output) from the read so the test surface stays clean.
27
+ */
28
+ export declare function runMigrate(opts?: MigrateOptions): Promise<MigrateResult>;
29
+ export declare function createMigrateCommand(): Command;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * `cc-openclaw migrate` — legacy-persistence migration command (Q5 resolution).
3
+ *
4
+ * Default mode (no flag): READ-ONLY. Loads the four legacy JSON files into
5
+ * the new SessionRegistry's in-memory map, reports counts, exits 0. Legacy
6
+ * files remain untouched. Idempotent — safe to run repeatedly.
7
+ *
8
+ * `--commit`: DESTRUCTIVE. After successful read, deletes the four legacy
9
+ * files. The v1.0.0 release blocks on A1 running `--commit` on both laptops.
10
+ *
11
+ * `--dry-run`: synonym for default (no-flag) — emitted for parity with
12
+ * `openclaw doctor --fix` UX expectations. No deletion, no writes, only counts.
13
+ */
14
+ import { Command } from 'commander';
15
+ import { existsSync, unlinkSync } from 'fs';
16
+ import { homedir } from 'os';
17
+ import { join } from 'path';
18
+ import { MigrationV0 } from '../persistence/migration-v0.js';
19
+ import { SessionRegistry } from '../persistence/session-registry.js';
20
+ const HOME = homedir();
21
+ const OPENCLAW_ROOT = join(HOME, '.openclaw');
22
+ const LEGACY_PATHS = [
23
+ join(OPENCLAW_ROOT, 'claude-sessions.json'),
24
+ join(OPENCLAW_ROOT, 'savvy-resume-registry.json'),
25
+ join(OPENCLAW_ROOT, 'session-pids.json'),
26
+ join(OPENCLAW_ROOT, 'openclaw-cache-parity-registry.json'),
27
+ ];
28
+ /**
29
+ * Pure function — runs the migration, returns counts. Splits the side-effects
30
+ * (file deletion + console output) from the read so the test surface stays clean.
31
+ */
32
+ export async function runMigrate(opts = {}) {
33
+ const migration = new MigrationV0();
34
+ const registry = new SessionRegistry();
35
+ const states = await migration.readLegacy();
36
+ for (const state of states)
37
+ registry.set(state);
38
+ if (!opts.commit) {
39
+ return { migratedCount: states.length, committed: false, deletedFiles: [] };
40
+ }
41
+ const deleted = [];
42
+ for (const path of LEGACY_PATHS) {
43
+ if (existsSync(path)) {
44
+ try {
45
+ unlinkSync(path);
46
+ deleted.push(path);
47
+ }
48
+ catch {
49
+ // best-effort; surface in the result for caller transparency
50
+ }
51
+ }
52
+ }
53
+ return { migratedCount: states.length, committed: true, deletedFiles: deleted };
54
+ }
55
+ export function createMigrateCommand() {
56
+ const cmd = new Command('migrate');
57
+ cmd.description('Migrate legacy 4-file persistence into SessionRegistry. Default is read-only; ' +
58
+ 'pass --commit to delete the legacy files after a successful read.');
59
+ cmd.option('--commit', 'delete legacy files after successful read (destructive)');
60
+ cmd.option('--dry-run', 'read-only (synonym for default)');
61
+ cmd.action(async (opts) => {
62
+ const result = await runMigrate({ commit: opts.commit === true });
63
+ if (result.committed) {
64
+ console.log(`migrated ${result.migratedCount} session(s); deleted ${result.deletedFiles.length} legacy file(s):`);
65
+ for (const f of result.deletedFiles)
66
+ console.log(` - ${f}`);
67
+ }
68
+ else {
69
+ console.log(`migrated ${result.migratedCount} session(s) (read-only; legacy files preserved).`);
70
+ console.log(`Re-run with --commit on both laptops to delete legacy files.`);
71
+ }
72
+ });
73
+ return cmd;
74
+ }
75
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/cli/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * drift-detector — snapshots the parsed Config to disk on a healthy boot;
3
+ * compares on subsequent boots and returns a delta list.
4
+ *
5
+ * Primary purpose: detect keys pruned by `openclaw doctor --fix`
6
+ * (OF5 — feedback_cc_openclaw_provider_timeout.md).
7
+ *
8
+ * Snapshot path: ~/.openclaw/workspace/memory/cc-openclaw-config-snapshot.json
9
+ * The file is written atomically (write-then-rename is not available in pure
10
+ * Node ESM without extra deps; we write directly since the worst case is a
11
+ * corrupted snapshot — non-fatal; falls back to empty baseline).
12
+ */
13
+ import type { Config } from './schema.js';
14
+ export interface ConfigDelta {
15
+ path: string;
16
+ previous: unknown;
17
+ current: unknown;
18
+ }
19
+ /**
20
+ * Compare current config against the on-disk snapshot.
21
+ * Returns an array of changed paths (empty = no drift).
22
+ */
23
+ export declare function detectDrift(current: Config): ConfigDelta[];
24
+ /**
25
+ * Persist current config as the baseline snapshot for future drift detection.
26
+ * Called at the end of a successful boot (after phase 7 / ready state).
27
+ */
28
+ export declare function saveSnapshot(current: Config): void;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * drift-detector — snapshots the parsed Config to disk on a healthy boot;
3
+ * compares on subsequent boots and returns a delta list.
4
+ *
5
+ * Primary purpose: detect keys pruned by `openclaw doctor --fix`
6
+ * (OF5 — feedback_cc_openclaw_provider_timeout.md).
7
+ *
8
+ * Snapshot path: ~/.openclaw/workspace/memory/cc-openclaw-config-snapshot.json
9
+ * The file is written atomically (write-then-rename is not available in pure
10
+ * Node ESM without extra deps; we write directly since the worst case is a
11
+ * corrupted snapshot — non-fatal; falls back to empty baseline).
12
+ */
13
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
14
+ import { homedir } from 'os';
15
+ import { join, dirname } from 'path';
16
+ const SNAPSHOT_PATH = join(homedir(), '.openclaw', 'workspace', 'memory', 'cc-openclaw-config-snapshot.json');
17
+ // ── Internal helpers ──────────────────────────────────────────────────────────
18
+ function flattenConfig(obj, prefix = '') {
19
+ if (obj === null || typeof obj !== 'object') {
20
+ return { [prefix]: obj };
21
+ }
22
+ const result = {};
23
+ for (const [k, v] of Object.entries(obj)) {
24
+ const key = prefix ? `${prefix}.${k}` : k;
25
+ if (v !== null && typeof v === 'object' && !Array.isArray(v)) {
26
+ Object.assign(result, flattenConfig(v, key));
27
+ }
28
+ else {
29
+ result[key] = v;
30
+ }
31
+ }
32
+ return result;
33
+ }
34
+ function readSnapshot() {
35
+ if (!existsSync(SNAPSHOT_PATH))
36
+ return {};
37
+ try {
38
+ const raw = readFileSync(SNAPSHOT_PATH, 'utf8');
39
+ return JSON.parse(raw);
40
+ }
41
+ catch {
42
+ return {};
43
+ }
44
+ }
45
+ // ── Public API ────────────────────────────────────────────────────────────────
46
+ /**
47
+ * Compare current config against the on-disk snapshot.
48
+ * Returns an array of changed paths (empty = no drift).
49
+ */
50
+ export function detectDrift(current) {
51
+ const previous = readSnapshot();
52
+ const flat = flattenConfig(current);
53
+ const deltas = [];
54
+ for (const [path, value] of Object.entries(flat)) {
55
+ if (path in previous && JSON.stringify(previous[path]) !== JSON.stringify(value)) {
56
+ deltas.push({ path, previous: previous[path], current: value });
57
+ }
58
+ }
59
+ return deltas;
60
+ }
61
+ /**
62
+ * Persist current config as the baseline snapshot for future drift detection.
63
+ * Called at the end of a successful boot (after phase 7 / ready state).
64
+ */
65
+ export function saveSnapshot(current) {
66
+ try {
67
+ mkdirSync(dirname(SNAPSHOT_PATH), { recursive: true });
68
+ const flat = flattenConfig(current);
69
+ writeFileSync(SNAPSHOT_PATH, JSON.stringify(flat, null, 2), 'utf8');
70
+ }
71
+ catch {
72
+ // Non-fatal: drift detection degrades to "no baseline" on next boot.
73
+ }
74
+ }
75
+ //# sourceMappingURL=drift-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift-detector.js","sourceRoot":"","sources":["../../../src/config/drift-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * loadConfigSources — reads env vars + ~/.openclaw/openclaw.json, returns a
3
+ * raw object for ConfigSchema.parse().
4
+ *
5
+ * Does NOT throw on missing files — caller receives defaults via zod.
6
+ * Throws ConfigInvalid only when ConfigSchema.parse() rejects (via boot phase 1).
7
+ */
8
+ export declare function loadConfigSources(): Record<string, unknown>;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * loadConfigSources — reads env vars + ~/.openclaw/openclaw.json, returns a
3
+ * raw object for ConfigSchema.parse().
4
+ *
5
+ * Does NOT throw on missing files — caller receives defaults via zod.
6
+ * Throws ConfigInvalid only when ConfigSchema.parse() rejects (via boot phase 1).
7
+ */
8
+ import { existsSync, readFileSync } from 'fs';
9
+ import { homedir } from 'os';
10
+ import { join } from 'path';
11
+ const OPENCLAW_JSON_PATH = join(homedir(), '.openclaw', 'openclaw.json');
12
+ function readOpenClawJson() {
13
+ if (!existsSync(OPENCLAW_JSON_PATH))
14
+ return {};
15
+ try {
16
+ const raw = readFileSync(OPENCLAW_JSON_PATH, 'utf8');
17
+ return JSON.parse(raw);
18
+ }
19
+ catch {
20
+ return {};
21
+ }
22
+ }
23
+ function parseBoolEnv(key, fallback = false) {
24
+ const val = process.env[key];
25
+ if (val === undefined)
26
+ return fallback;
27
+ return val === '1' || val === 'true';
28
+ }
29
+ function parseIntEnv(key, fallback) {
30
+ const val = process.env[key];
31
+ if (val === undefined)
32
+ return fallback;
33
+ const n = parseInt(val, 10);
34
+ return isNaN(n) ? fallback : n;
35
+ }
36
+ // ── Main ──────────────────────────────────────────────────────────────────────
37
+ export function loadConfigSources() {
38
+ const oclJson = readOpenClawJson();
39
+ // Extract timeoutSeconds from models.providers["cc-openclaw"].timeoutSeconds
40
+ const ccProvider = oclJson.models?.providers?.['cc-openclaw'];
41
+ const timeoutSeconds = ccProvider?.timeoutSeconds ??
42
+ parseIntEnv('CC_OPENCLAW_TIMEOUT_SECONDS');
43
+ // Extract fallback chain from agents.defaults.model.fallbacks
44
+ const fallbackChain = oclJson.agents?.defaults?.model?.fallbacks ?? [];
45
+ return {
46
+ openclawCcOpenclawActive: parseBoolEnv('OPENCLAW_CC_OPENCLAW_ACTIVE'),
47
+ openclawCcOpenclawListeners: parseBoolEnv('OPENCLAW_CC_OPENCLAW_LISTENERS'),
48
+ ccOpenclaw: {
49
+ nativeTools: {
50
+ enabled: parseBoolEnv('CC_OPENCLAW_NATIVE_TOOLS', true),
51
+ // allowList not env-driven; comes from schema default (Q1)
52
+ },
53
+ stalledKillMs: parseIntEnv('CC_OPENCLAW_STALLED_KILL_MS'),
54
+ loopMaxSubprocs: parseIntEnv('CC_OPENCLAW_LOOP_MAX_SUBPROCS'),
55
+ cacheParity: parseBoolEnv('OPENCLAW_CACHE_PARITY', true),
56
+ ttsAutoMode: process.env['OPENCLAW_TTS_AUTO_MODE'],
57
+ },
58
+ openclawJson: {
59
+ timeoutSeconds,
60
+ messagesTts: {
61
+ timeoutMs: oclJson.messages?.tts?.timeoutMs,
62
+ maxTextLength: oclJson.messages?.tts?.maxTextLength,
63
+ },
64
+ fallbackChain,
65
+ pluginsAllow: oclJson.plugins?.allow ?? [],
66
+ },
67
+ };
68
+ }
69
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;AA0BzE,SAAS,gBAAgB;IACvB,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,QAAQ,GAAG,KAAK;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,QAAiB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,6EAA6E;IAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,cAAc,GAClB,UAAU,EAAE,cAAc;QAC1B,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAE7C,8DAA8D;IAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAEvE,OAAO;QACL,wBAAwB,EAAE,YAAY,CAAC,6BAA6B,CAAC;QACrE,2BAA2B,EAAE,YAAY,CAAC,gCAAgC,CAAC;QAC3E,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,OAAO,EAAE,YAAY,CAAC,0BAA0B,EAAE,IAAI,CAAC;gBACvD,2DAA2D;aAC5D;YACD,aAAa,EAAE,WAAW,CAAC,6BAA6B,CAAC;YACzD,eAAe,EAAE,WAAW,CAAC,+BAA+B,CAAC;YAC7D,WAAW,EAAE,YAAY,CAAC,uBAAuB,EAAE,IAAI,CAAC;YACxD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;SACnD;QACD,YAAY,EAAE;YACZ,cAAc;YACd,WAAW,EAAE;gBACX,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS;gBAC3C,aAAa,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,aAAa;aACpD;YACD,aAAa;YACb,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;SAC3C;KACF,CAAC;AACJ,CAAC"}