@a1hvdy/cc-openclaw 0.10.4 → 0.12.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 (473) hide show
  1. package/dist/src/channels/telegram/card-renderer.d.ts +63 -0
  2. package/dist/src/channels/telegram/card-renderer.js +149 -0
  3. package/dist/src/channels/telegram/card-renderer.js.map +1 -0
  4. package/dist/src/channels/telegram/event-reducer.js +3 -15
  5. package/dist/src/channels/telegram/event-reducer.js.map +1 -1
  6. package/dist/src/channels/telegram/format-helpers.d.ts +20 -0
  7. package/dist/src/channels/telegram/format-helpers.js +34 -0
  8. package/dist/src/channels/telegram/format-helpers.js.map +1 -0
  9. package/dist/src/channels/telegram/insight-formatter.d.ts +36 -0
  10. package/dist/src/channels/telegram/insight-formatter.js +36 -0
  11. package/dist/src/channels/telegram/insight-formatter.js.map +1 -0
  12. package/dist/src/channels/telegram/live-card.d.ts +7 -90
  13. package/dist/src/channels/telegram/live-card.js +25 -286
  14. package/dist/src/channels/telegram/live-card.js.map +1 -1
  15. package/dist/src/channels/telegram/logger.d.ts +10 -0
  16. package/dist/src/channels/telegram/logger.js +13 -0
  17. package/dist/src/channels/telegram/logger.js.map +1 -0
  18. package/dist/src/channels/telegram/result-preview.d.ts +12 -0
  19. package/dist/src/channels/telegram/result-preview.js +48 -0
  20. package/dist/src/channels/telegram/result-preview.js.map +1 -0
  21. package/dist/src/channels/telegram/throttle-controller.d.ts +54 -0
  22. package/dist/src/channels/telegram/throttle-controller.js +132 -0
  23. package/dist/src/channels/telegram/throttle-controller.js.map +1 -0
  24. package/dist/src/channels/telegram/tool-tracker.d.ts +1 -2
  25. package/dist/src/channels/telegram/tool-tracker.js +9 -51
  26. package/dist/src/channels/telegram/tool-tracker.js.map +1 -1
  27. package/dist/src/cli/checks/bridge-wiring.d.ts +14 -0
  28. package/dist/src/cli/checks/bridge-wiring.js +64 -0
  29. package/dist/src/cli/checks/bridge-wiring.js.map +1 -0
  30. package/dist/src/cli/checks/config-schema.d.ts +11 -0
  31. package/dist/src/cli/checks/config-schema.js +51 -0
  32. package/dist/src/cli/checks/config-schema.js.map +1 -0
  33. package/dist/src/cli/checks/critical-openclaw-json-keys.d.ts +21 -0
  34. package/dist/src/cli/checks/critical-openclaw-json-keys.js +106 -0
  35. package/dist/src/cli/checks/critical-openclaw-json-keys.js.map +1 -0
  36. package/dist/src/cli/checks/install-path.d.ts +11 -0
  37. package/dist/src/cli/checks/install-path.js +89 -0
  38. package/dist/src/cli/checks/install-path.js.map +1 -0
  39. package/dist/src/cli/checks/patch-scaffold.d.ts +17 -0
  40. package/dist/src/cli/checks/patch-scaffold.js +56 -0
  41. package/dist/src/cli/checks/patch-scaffold.js.map +1 -0
  42. package/dist/src/cli/doctor.d.ts +20 -0
  43. package/dist/src/cli/doctor.js +93 -0
  44. package/dist/src/cli/doctor.js.map +1 -0
  45. package/dist/src/cli/index.d.ts +8 -0
  46. package/dist/src/cli/index.js +39 -0
  47. package/dist/src/cli/index.js.map +1 -0
  48. package/dist/src/cli/migrate.d.ts +29 -0
  49. package/dist/src/cli/migrate.js +75 -0
  50. package/dist/src/cli/migrate.js.map +1 -0
  51. package/dist/src/command-router/cc-handler.js +35 -709
  52. package/dist/src/command-router/cc-handler.js.map +1 -1
  53. package/dist/src/command-router/launch-policy.d.ts +93 -0
  54. package/dist/src/command-router/launch-policy.js +323 -0
  55. package/dist/src/command-router/launch-policy.js.map +1 -0
  56. package/dist/src/command-router/resume-policy.d.ts +18 -0
  57. package/dist/src/command-router/resume-policy.js +236 -0
  58. package/dist/src/command-router/resume-policy.js.map +1 -0
  59. package/dist/src/command-router/turn-formatter.d.ts +19 -0
  60. package/dist/src/command-router/turn-formatter.js +144 -0
  61. package/dist/src/command-router/turn-formatter.js.map +1 -0
  62. package/dist/src/config/drift-detector.d.ts +28 -0
  63. package/dist/src/config/drift-detector.js +75 -0
  64. package/dist/src/config/drift-detector.js.map +1 -0
  65. package/dist/src/config/loader.d.ts +8 -0
  66. package/dist/src/config/loader.js +69 -0
  67. package/dist/src/config/loader.js.map +1 -0
  68. package/dist/src/config/schema.d.ts +188 -0
  69. package/dist/src/config/schema.js +98 -0
  70. package/dist/src/config/schema.js.map +1 -0
  71. package/dist/src/council/build-agent-prompt.d.ts +11 -0
  72. package/dist/src/council/build-agent-prompt.js +96 -0
  73. package/dist/src/council/build-agent-prompt.js.map +1 -0
  74. package/dist/src/council/cleanup-worktrees.d.ts +10 -0
  75. package/dist/src/council/cleanup-worktrees.js +22 -0
  76. package/dist/src/council/cleanup-worktrees.js.map +1 -0
  77. package/dist/src/council/council.js +15 -186
  78. package/dist/src/council/council.js.map +1 -1
  79. package/dist/src/council/system-prompt.d.ts +16 -0
  80. package/dist/src/council/system-prompt.js +40 -0
  81. package/dist/src/council/system-prompt.js.map +1 -0
  82. package/dist/src/council/write-worktree-claude-md.d.ts +10 -0
  83. package/dist/src/council/write-worktree-claude-md.js +41 -0
  84. package/dist/src/council/write-worktree-claude-md.js.map +1 -0
  85. package/dist/src/engines/persistent-custom-session.js +3 -8
  86. package/dist/src/engines/persistent-custom-session.js.map +1 -1
  87. package/dist/src/engines/resolve-bin.d.ts +14 -0
  88. package/dist/src/engines/resolve-bin.js +18 -0
  89. package/dist/src/engines/resolve-bin.js.map +1 -0
  90. package/dist/src/lib/config-service.js +8 -0
  91. package/dist/src/lib/config-service.js.map +1 -1
  92. package/dist/src/lib/debounce.d.ts +12 -0
  93. package/dist/src/lib/debounce.js +23 -0
  94. package/dist/src/lib/debounce.js.map +1 -0
  95. package/dist/src/lib/domain-error.d.ts +59 -0
  96. package/dist/src/lib/domain-error.js +79 -0
  97. package/dist/src/lib/domain-error.js.map +1 -0
  98. package/dist/src/lib/json-array.d.ts +10 -0
  99. package/dist/src/lib/json-array.js +23 -0
  100. package/dist/src/lib/json-array.js.map +1 -0
  101. package/dist/src/lib/safe-upstream-probes.d.ts +25 -0
  102. package/dist/src/lib/safe-upstream-probes.js +42 -0
  103. package/dist/src/lib/safe-upstream-probes.js.map +1 -0
  104. package/dist/src/lib/spawn-async.d.ts +18 -0
  105. package/dist/src/lib/spawn-async.js +47 -0
  106. package/dist/src/lib/spawn-async.js.map +1 -0
  107. package/dist/src/lib/stale-pid-files.d.ts +17 -0
  108. package/dist/src/lib/stale-pid-files.js +40 -0
  109. package/dist/src/lib/stale-pid-files.js.map +1 -0
  110. package/dist/src/lifecycle/boot.d.ts +59 -0
  111. package/dist/src/lifecycle/boot.js +132 -0
  112. package/dist/src/lifecycle/boot.js.map +1 -0
  113. package/dist/src/lifecycle/patch-manifest.d.ts +82 -0
  114. package/dist/src/lifecycle/patch-manifest.js +126 -0
  115. package/dist/src/lifecycle/patch-manifest.js.map +1 -0
  116. package/dist/src/lifecycle/phase-import-upstream.d.ts +12 -0
  117. package/dist/src/lifecycle/phase-import-upstream.js +18 -0
  118. package/dist/src/lifecycle/phase-import-upstream.js.map +1 -0
  119. package/dist/src/lifecycle/phase-install-patches.d.ts +12 -0
  120. package/dist/src/lifecycle/phase-install-patches.js +31 -0
  121. package/dist/src/lifecycle/phase-install-patches.js.map +1 -0
  122. package/dist/src/lifecycle/phase-schedule-jobs.d.ts +12 -0
  123. package/dist/src/lifecycle/phase-schedule-jobs.js +15 -0
  124. package/dist/src/lifecycle/phase-schedule-jobs.js.map +1 -0
  125. package/dist/src/lifecycle/phase-start-server.d.ts +11 -0
  126. package/dist/src/lifecycle/phase-start-server.js +11 -0
  127. package/dist/src/lifecycle/phase-start-server.js.map +1 -0
  128. package/dist/src/lifecycle/phase-validate-config.d.ts +9 -0
  129. package/dist/src/lifecycle/phase-validate-config.js +25 -0
  130. package/dist/src/lifecycle/phase-validate-config.js.map +1 -0
  131. package/dist/src/lifecycle/phase-validate-upstream.d.ts +11 -0
  132. package/dist/src/lifecycle/phase-validate-upstream.js +16 -0
  133. package/dist/src/lifecycle/phase-validate-upstream.js.map +1 -0
  134. package/dist/src/lifecycle/phase-wire-handlers.d.ts +12 -0
  135. package/dist/src/lifecycle/phase-wire-handlers.js +16 -0
  136. package/dist/src/lifecycle/phase-wire-handlers.js.map +1 -0
  137. package/dist/src/observability/event-bus.d.ts +65 -0
  138. package/dist/src/observability/event-bus.js +52 -0
  139. package/dist/src/observability/event-bus.js.map +1 -0
  140. package/dist/src/observability/get-event-bus.d.ts +25 -0
  141. package/dist/src/observability/get-event-bus.js +34 -0
  142. package/dist/src/observability/get-event-bus.js.map +1 -0
  143. package/dist/src/observability/observability-service.d.ts +19 -0
  144. package/dist/src/observability/observability-service.js +24 -0
  145. package/dist/src/observability/observability-service.js.map +1 -0
  146. package/dist/src/observability/subscribers/metrics.d.ts +11 -0
  147. package/dist/src/observability/subscribers/metrics.js +21 -0
  148. package/dist/src/observability/subscribers/metrics.js.map +1 -0
  149. package/dist/src/observability/subscribers/session-capture.d.ts +15 -0
  150. package/dist/src/observability/subscribers/session-capture.js +25 -0
  151. package/dist/src/observability/subscribers/session-capture.js.map +1 -0
  152. package/dist/src/openai-compat/bridges/allowlist.d.ts +19 -0
  153. package/dist/src/openai-compat/bridges/allowlist.js +28 -0
  154. package/dist/src/openai-compat/bridges/allowlist.js.map +1 -0
  155. package/dist/src/openai-compat/bridges/factory.d.ts +30 -0
  156. package/dist/src/openai-compat/bridges/factory.js +84 -0
  157. package/dist/src/openai-compat/bridges/factory.js.map +1 -0
  158. package/dist/src/openai-compat/bridges/media-bridge.d.ts +34 -0
  159. package/dist/src/openai-compat/bridges/media-bridge.js +20 -0
  160. package/dist/src/openai-compat/bridges/media-bridge.js.map +1 -0
  161. package/dist/src/openai-compat/bridges/openclaw-api-shim.d.ts +54 -0
  162. package/dist/src/openai-compat/bridges/openclaw-api-shim.js +45 -0
  163. package/dist/src/openai-compat/bridges/openclaw-api-shim.js.map +1 -0
  164. package/dist/src/openai-compat/bridges/openclaw-native-tools.d.ts +61 -0
  165. package/dist/src/openai-compat/bridges/openclaw-native-tools.js +171 -0
  166. package/dist/src/openai-compat/bridges/openclaw-native-tools.js.map +1 -0
  167. package/dist/src/openai-compat/bridges/openclaw-tool-registry.d.ts +26 -0
  168. package/dist/src/openai-compat/bridges/openclaw-tool-registry.js +38 -0
  169. package/dist/src/openai-compat/bridges/openclaw-tool-registry.js.map +1 -0
  170. package/dist/src/openai-compat/bridges/tts-media-bridge.d.ts +19 -0
  171. package/dist/src/openai-compat/bridges/tts-media-bridge.js +59 -0
  172. package/dist/src/openai-compat/bridges/tts-media-bridge.js.map +1 -0
  173. package/dist/src/openai-compat/openai-chunk-types.d.ts +35 -0
  174. package/dist/src/openai-compat/openai-chunk-types.js +9 -0
  175. package/dist/src/openai-compat/openai-chunk-types.js.map +1 -0
  176. package/dist/src/openai-compat/openai-compat.d.ts +2 -90
  177. package/dist/src/openai-compat/openai-compat.js +68 -68
  178. package/dist/src/openai-compat/openai-compat.js.map +1 -1
  179. package/dist/src/openai-compat/openai-types.d.ts +71 -0
  180. package/dist/src/openai-compat/openai-types.js +11 -0
  181. package/dist/src/openai-compat/openai-types.js.map +1 -0
  182. package/dist/src/openai-compat/parse-route-body.d.ts +24 -0
  183. package/dist/src/openai-compat/parse-route-body.js +45 -0
  184. package/dist/src/openai-compat/parse-route-body.js.map +1 -0
  185. package/dist/src/openai-compat/tts-rule.d.ts +20 -0
  186. package/dist/src/openai-compat/tts-rule.js +58 -0
  187. package/dist/src/openai-compat/tts-rule.js.map +1 -0
  188. package/dist/src/openai-compat/voice-recovery.js +0 -1
  189. package/dist/src/openai-compat/voice-recovery.js.map +1 -1
  190. package/dist/src/patches/cache-parity-registry.d.ts +20 -0
  191. package/dist/src/patches/cache-parity-registry.js +64 -0
  192. package/dist/src/patches/cache-parity-registry.js.map +1 -0
  193. package/dist/src/patches/claude-md-injection.d.ts +10 -0
  194. package/dist/src/patches/claude-md-injection.js +46 -0
  195. package/dist/src/patches/claude-md-injection.js.map +1 -0
  196. package/dist/src/patches/cwd-redirect.d.ts +10 -0
  197. package/dist/src/patches/cwd-redirect.js +51 -0
  198. package/dist/src/patches/cwd-redirect.js.map +1 -0
  199. package/dist/src/patches/embedded-server-route.d.ts +23 -0
  200. package/dist/src/patches/embedded-server-route.js +64 -0
  201. package/dist/src/patches/embedded-server-route.js.map +1 -0
  202. package/dist/src/patches/pricing-overrides.d.ts +10 -0
  203. package/dist/src/patches/pricing-overrides.js +55 -0
  204. package/dist/src/patches/pricing-overrides.js.map +1 -0
  205. package/dist/src/patches/resume-registry-restore.d.ts +11 -0
  206. package/dist/src/patches/resume-registry-restore.js +48 -0
  207. package/dist/src/patches/resume-registry-restore.js.map +1 -0
  208. package/dist/src/patches/session-pid-tracking.d.ts +10 -0
  209. package/dist/src/patches/session-pid-tracking.js +45 -0
  210. package/dist/src/patches/session-pid-tracking.js.map +1 -0
  211. package/dist/src/patches/sysprompt-strip.d.ts +46 -0
  212. package/dist/src/patches/sysprompt-strip.js +78 -0
  213. package/dist/src/patches/sysprompt-strip.js.map +1 -0
  214. package/dist/src/patches/sysprompt-strip.spec.d.ts +33 -0
  215. package/dist/src/patches/sysprompt-strip.spec.js +53 -0
  216. package/dist/src/patches/sysprompt-strip.spec.js.map +1 -0
  217. package/dist/src/patches/tools-restoration.d.ts +12 -0
  218. package/dist/src/patches/tools-restoration.js +43 -0
  219. package/dist/src/patches/tools-restoration.js.map +1 -0
  220. package/dist/src/persistence/migration-v0.d.ts +24 -0
  221. package/dist/src/persistence/migration-v0.js +142 -0
  222. package/dist/src/persistence/migration-v0.js.map +1 -0
  223. package/dist/src/persistence/session-registry.d.ts +57 -0
  224. package/dist/src/persistence/session-registry.js +58 -0
  225. package/dist/src/persistence/session-registry.js.map +1 -0
  226. package/dist/src/persistence/snapshot.d.ts +18 -0
  227. package/dist/src/persistence/snapshot.js +32 -0
  228. package/dist/src/persistence/snapshot.js.map +1 -0
  229. package/dist/src/persistence/wal.d.ts +17 -0
  230. package/dist/src/persistence/wal.js +32 -0
  231. package/dist/src/persistence/wal.js.map +1 -0
  232. package/dist/src/session/persisted-sessions.d.ts +26 -0
  233. package/dist/src/session/persisted-sessions.js +70 -0
  234. package/dist/src/session/persisted-sessions.js.map +1 -0
  235. package/dist/src/session/session-manager.d.ts +2 -11
  236. package/dist/src/session/session-manager.js +22 -66
  237. package/dist/src/session/session-manager.js.map +1 -1
  238. package/dist/src/session-bootstrap/boot-self-heal.d.ts +32 -0
  239. package/dist/src/session-bootstrap/boot-self-heal.js +54 -0
  240. package/dist/src/session-bootstrap/boot-self-heal.js.map +1 -0
  241. package/dist/src/session-bootstrap/cwd-patch.js +11 -87
  242. package/dist/src/session-bootstrap/cwd-patch.js.map +1 -1
  243. package/dist/src/session-bootstrap/resume-registry.d.ts +29 -0
  244. package/dist/src/session-bootstrap/resume-registry.js +58 -0
  245. package/dist/src/session-bootstrap/resume-registry.js.map +1 -0
  246. package/dist/src/session-bootstrap/session-hygiene.d.ts +23 -0
  247. package/dist/src/session-bootstrap/session-hygiene.js +41 -0
  248. package/dist/src/session-bootstrap/session-hygiene.js.map +1 -0
  249. package/dist/src/types/runtime-config.d.ts +11 -0
  250. package/dist/src/types/runtime-config.js +9 -0
  251. package/dist/src/types/runtime-config.js.map +1 -1
  252. package/dist/src/types/tool-bridge.d.ts +2 -1
  253. package/dist/src/types/tool-bridge.js +1 -0
  254. package/dist/src/types/tool-bridge.js.map +1 -1
  255. package/package.json +1 -1
  256. package/dist/scripts/bench/ab-harness.d.ts +0 -58
  257. package/dist/scripts/bench/ab-harness.d.ts.map +0 -1
  258. package/dist/scripts/bench/ab-harness.js +0 -78
  259. package/dist/scripts/bench/ab-harness.js.map +0 -1
  260. package/dist/src/channels/adapter.d.ts.map +0 -1
  261. package/dist/src/channels/telegram/completion-summary.d.ts.map +0 -1
  262. package/dist/src/channels/telegram/error-renderer.d.ts.map +0 -1
  263. package/dist/src/channels/telegram/event-reducer.d.ts.map +0 -1
  264. package/dist/src/channels/telegram/index.d.ts.map +0 -1
  265. package/dist/src/channels/telegram/injector.d.ts.map +0 -1
  266. package/dist/src/channels/telegram/live-card.d.ts.map +0 -1
  267. package/dist/src/channels/telegram/state-machine.d.ts.map +0 -1
  268. package/dist/src/channels/telegram/tool-tracker.d.ts.map +0 -1
  269. package/dist/src/command-router/cc-handler.d.ts.map +0 -1
  270. package/dist/src/command-router/index.d.ts.map +0 -1
  271. package/dist/src/constants.d.ts.map +0 -1
  272. package/dist/src/council/consensus.d.ts.map +0 -1
  273. package/dist/src/council/council.d.ts.map +0 -1
  274. package/dist/src/council/index.d.ts.map +0 -1
  275. package/dist/src/engines/base-oneshot-session.d.ts.map +0 -1
  276. package/dist/src/engines/index.d.ts.map +0 -1
  277. package/dist/src/engines/persistent-codex-session.d.ts.map +0 -1
  278. package/dist/src/engines/persistent-cursor-session.d.ts.map +0 -1
  279. package/dist/src/engines/persistent-custom-session.d.ts.map +0 -1
  280. package/dist/src/engines/persistent-gemini-session.d.ts.map +0 -1
  281. package/dist/src/engines/persistent-session.d.ts.map +0 -1
  282. package/dist/src/health/handler.d.ts.map +0 -1
  283. package/dist/src/health/index.d.ts.map +0 -1
  284. package/dist/src/index.d.ts.map +0 -1
  285. package/dist/src/lib/auto-recovery.d.ts.map +0 -1
  286. package/dist/src/lib/cache-parity.d.ts.map +0 -1
  287. package/dist/src/lib/circuit-breaker.d.ts.map +0 -1
  288. package/dist/src/lib/config.d.ts.map +0 -1
  289. package/dist/src/lib/drift-detector.d.ts.map +0 -1
  290. package/dist/src/lib/error-formatter.d.ts.map +0 -1
  291. package/dist/src/lib/heartbeat-workaround.d.ts.map +0 -1
  292. package/dist/src/lib/index.d.ts.map +0 -1
  293. package/dist/src/lib/register-guard.d.ts.map +0 -1
  294. package/dist/src/lib/route-flag.d.ts +0 -49
  295. package/dist/src/lib/route-flag.d.ts.map +0 -1
  296. package/dist/src/lib/route-flag.js +0 -52
  297. package/dist/src/lib/route-flag.js.map +0 -1
  298. package/dist/src/lib/sysprompt-strip.d.ts.map +0 -1
  299. package/dist/src/lib/telemetry.d.ts.map +0 -1
  300. package/dist/src/lib/test-mode.d.ts.map +0 -1
  301. package/dist/src/lib/vendor-paths.d.ts.map +0 -1
  302. package/dist/src/logger.d.ts.map +0 -1
  303. package/dist/src/mcp/bridge.d.ts.map +0 -1
  304. package/dist/src/mcp/index.d.ts.map +0 -1
  305. package/dist/src/models.d.ts.map +0 -1
  306. package/dist/src/openai-compat/cli-stream-parser.d.ts.map +0 -1
  307. package/dist/src/openai-compat/index.d.ts.map +0 -1
  308. package/dist/src/openai-compat/openai-compat.d.ts.map +0 -1
  309. package/dist/src/openai-compat/skill-resolver.d.ts.map +0 -1
  310. package/dist/src/openai-compat/sse-translator.d.ts.map +0 -1
  311. package/dist/src/proxy/anthropic-adapter.d.ts.map +0 -1
  312. package/dist/src/proxy/handler.d.ts.map +0 -1
  313. package/dist/src/proxy/index.d.ts.map +0 -1
  314. package/dist/src/proxy/schema-cleaner.d.ts.map +0 -1
  315. package/dist/src/proxy/thought-cache.d.ts.map +0 -1
  316. package/dist/src/session/embedded-server.d.ts.map +0 -1
  317. package/dist/src/session/inbox-manager.d.ts.map +0 -1
  318. package/dist/src/session/index.d.ts.map +0 -1
  319. package/dist/src/session/session-manager.d.ts.map +0 -1
  320. package/dist/src/session-bootstrap/cwd-patch.d.ts.map +0 -1
  321. package/dist/src/session-bootstrap/index.d.ts.map +0 -1
  322. package/dist/src/session-bootstrap/sysprompt-strip.d.ts.map +0 -1
  323. package/dist/src/session-bootstrap/think-conflict-resolver.d.ts.map +0 -1
  324. package/dist/src/types.d.ts.map +0 -1
  325. package/dist/src/validation.d.ts.map +0 -1
  326. package/dist/tests/_helpers/subprocess-mock.d.ts +0 -35
  327. package/dist/tests/_helpers/subprocess-mock.d.ts.map +0 -1
  328. package/dist/tests/_helpers/subprocess-mock.js +0 -136
  329. package/dist/tests/_helpers/subprocess-mock.js.map +0 -1
  330. package/dist/tests/auto-recovery.test.d.ts +0 -2
  331. package/dist/tests/auto-recovery.test.d.ts.map +0 -1
  332. package/dist/tests/auto-recovery.test.js +0 -185
  333. package/dist/tests/auto-recovery.test.js.map +0 -1
  334. package/dist/tests/bench-harness.test.d.ts +0 -2
  335. package/dist/tests/bench-harness.test.d.ts.map +0 -1
  336. package/dist/tests/bench-harness.test.js +0 -21
  337. package/dist/tests/bench-harness.test.js.map +0 -1
  338. package/dist/tests/cache-parity.test.d.ts +0 -2
  339. package/dist/tests/cache-parity.test.d.ts.map +0 -1
  340. package/dist/tests/cache-parity.test.js +0 -401
  341. package/dist/tests/cache-parity.test.js.map +0 -1
  342. package/dist/tests/command-router.test.d.ts +0 -2
  343. package/dist/tests/command-router.test.d.ts.map +0 -1
  344. package/dist/tests/command-router.test.js +0 -60
  345. package/dist/tests/command-router.test.js.map +0 -1
  346. package/dist/tests/council.test.d.ts +0 -2
  347. package/dist/tests/council.test.d.ts.map +0 -1
  348. package/dist/tests/council.test.js +0 -20
  349. package/dist/tests/council.test.js.map +0 -1
  350. package/dist/tests/drift-detector.test.d.ts +0 -2
  351. package/dist/tests/drift-detector.test.d.ts.map +0 -1
  352. package/dist/tests/drift-detector.test.js +0 -268
  353. package/dist/tests/drift-detector.test.js.map +0 -1
  354. package/dist/tests/eager-bootstrap-gating.test.d.ts +0 -9
  355. package/dist/tests/eager-bootstrap-gating.test.d.ts.map +0 -1
  356. package/dist/tests/eager-bootstrap-gating.test.js +0 -97
  357. package/dist/tests/eager-bootstrap-gating.test.js.map +0 -1
  358. package/dist/tests/engines.test.d.ts +0 -2
  359. package/dist/tests/engines.test.d.ts.map +0 -1
  360. package/dist/tests/engines.test.js +0 -8
  361. package/dist/tests/engines.test.js.map +0 -1
  362. package/dist/tests/error-formatter.test.d.ts +0 -2
  363. package/dist/tests/error-formatter.test.d.ts.map +0 -1
  364. package/dist/tests/error-formatter.test.js +0 -220
  365. package/dist/tests/error-formatter.test.js.map +0 -1
  366. package/dist/tests/health.test.d.ts +0 -2
  367. package/dist/tests/health.test.d.ts.map +0 -1
  368. package/dist/tests/health.test.js +0 -110
  369. package/dist/tests/health.test.js.map +0 -1
  370. package/dist/tests/heartbeat-workaround.test.d.ts +0 -2
  371. package/dist/tests/heartbeat-workaround.test.d.ts.map +0 -1
  372. package/dist/tests/heartbeat-workaround.test.js +0 -90
  373. package/dist/tests/heartbeat-workaround.test.js.map +0 -1
  374. package/dist/tests/index.test.d.ts +0 -2
  375. package/dist/tests/index.test.d.ts.map +0 -1
  376. package/dist/tests/index.test.js +0 -7
  377. package/dist/tests/index.test.js.map +0 -1
  378. package/dist/tests/lib-sysprompt-strip.test.d.ts +0 -2
  379. package/dist/tests/lib-sysprompt-strip.test.d.ts.map +0 -1
  380. package/dist/tests/lib-sysprompt-strip.test.js +0 -145
  381. package/dist/tests/lib-sysprompt-strip.test.js.map +0 -1
  382. package/dist/tests/listener-activation.test.d.ts +0 -2
  383. package/dist/tests/listener-activation.test.d.ts.map +0 -1
  384. package/dist/tests/listener-activation.test.js +0 -87
  385. package/dist/tests/listener-activation.test.js.map +0 -1
  386. package/dist/tests/mcp-bridge.test.d.ts +0 -2
  387. package/dist/tests/mcp-bridge.test.d.ts.map +0 -1
  388. package/dist/tests/mcp-bridge.test.js +0 -137
  389. package/dist/tests/mcp-bridge.test.js.map +0 -1
  390. package/dist/tests/openai-compat.test.d.ts +0 -2
  391. package/dist/tests/openai-compat.test.d.ts.map +0 -1
  392. package/dist/tests/openai-compat.test.js +0 -8
  393. package/dist/tests/openai-compat.test.js.map +0 -1
  394. package/dist/tests/proxy-heartbeat-integration.test.d.ts +0 -15
  395. package/dist/tests/proxy-heartbeat-integration.test.d.ts.map +0 -1
  396. package/dist/tests/proxy-heartbeat-integration.test.js +0 -122
  397. package/dist/tests/proxy-heartbeat-integration.test.js.map +0 -1
  398. package/dist/tests/proxy.test.d.ts +0 -2
  399. package/dist/tests/proxy.test.d.ts.map +0 -1
  400. package/dist/tests/proxy.test.js +0 -8
  401. package/dist/tests/proxy.test.js.map +0 -1
  402. package/dist/tests/register-guard-stacking.test.d.ts +0 -2
  403. package/dist/tests/register-guard-stacking.test.d.ts.map +0 -1
  404. package/dist/tests/register-guard-stacking.test.js +0 -61
  405. package/dist/tests/register-guard-stacking.test.js.map +0 -1
  406. package/dist/tests/register-guard.test.d.ts +0 -2
  407. package/dist/tests/register-guard.test.d.ts.map +0 -1
  408. package/dist/tests/register-guard.test.js +0 -129
  409. package/dist/tests/register-guard.test.js.map +0 -1
  410. package/dist/tests/route-flag-rollback.test.d.ts +0 -2
  411. package/dist/tests/route-flag-rollback.test.d.ts.map +0 -1
  412. package/dist/tests/route-flag-rollback.test.js +0 -70
  413. package/dist/tests/route-flag-rollback.test.js.map +0 -1
  414. package/dist/tests/route-flag.test.d.ts +0 -2
  415. package/dist/tests/route-flag.test.d.ts.map +0 -1
  416. package/dist/tests/route-flag.test.js +0 -101
  417. package/dist/tests/route-flag.test.js.map +0 -1
  418. package/dist/tests/session-bootstrap.test.d.ts +0 -2
  419. package/dist/tests/session-bootstrap.test.d.ts.map +0 -1
  420. package/dist/tests/session-bootstrap.test.js +0 -183
  421. package/dist/tests/session-bootstrap.test.js.map +0 -1
  422. package/dist/tests/session.test.d.ts +0 -2
  423. package/dist/tests/session.test.d.ts.map +0 -1
  424. package/dist/tests/session.test.js +0 -17
  425. package/dist/tests/session.test.js.map +0 -1
  426. package/dist/tests/state-machine.test.d.ts +0 -2
  427. package/dist/tests/state-machine.test.d.ts.map +0 -1
  428. package/dist/tests/state-machine.test.js +0 -133
  429. package/dist/tests/state-machine.test.js.map +0 -1
  430. package/dist/tests/streaming/cli-stream-parser.test.d.ts +0 -2
  431. package/dist/tests/streaming/cli-stream-parser.test.d.ts.map +0 -1
  432. package/dist/tests/streaming/cli-stream-parser.test.js +0 -233
  433. package/dist/tests/streaming/cli-stream-parser.test.js.map +0 -1
  434. package/dist/tests/streaming/feature-flag.test.d.ts +0 -14
  435. package/dist/tests/streaming/feature-flag.test.d.ts.map +0 -1
  436. package/dist/tests/streaming/feature-flag.test.js +0 -163
  437. package/dist/tests/streaming/feature-flag.test.js.map +0 -1
  438. package/dist/tests/streaming/no-tools-prompt.test.d.ts +0 -17
  439. package/dist/tests/streaming/no-tools-prompt.test.d.ts.map +0 -1
  440. package/dist/tests/streaming/no-tools-prompt.test.js +0 -229
  441. package/dist/tests/streaming/no-tools-prompt.test.js.map +0 -1
  442. package/dist/tests/streaming/skill-plus-tools.test.d.ts +0 -14
  443. package/dist/tests/streaming/skill-plus-tools.test.d.ts.map +0 -1
  444. package/dist/tests/streaming/skill-plus-tools.test.js +0 -234
  445. package/dist/tests/streaming/skill-plus-tools.test.js.map +0 -1
  446. package/dist/tests/streaming/sse-translator.test.d.ts +0 -2
  447. package/dist/tests/streaming/sse-translator.test.d.ts.map +0 -1
  448. package/dist/tests/streaming/sse-translator.test.js +0 -227
  449. package/dist/tests/streaming/sse-translator.test.js.map +0 -1
  450. package/dist/tests/streaming/tool-result-roundtrip.test.d.ts +0 -11
  451. package/dist/tests/streaming/tool-result-roundtrip.test.d.ts.map +0 -1
  452. package/dist/tests/streaming/tool-result-roundtrip.test.js +0 -215
  453. package/dist/tests/streaming/tool-result-roundtrip.test.js.map +0 -1
  454. package/dist/tests/streaming/tool-use-translation.test.d.ts +0 -10
  455. package/dist/tests/streaming/tool-use-translation.test.d.ts.map +0 -1
  456. package/dist/tests/streaming/tool-use-translation.test.js +0 -251
  457. package/dist/tests/streaming/tool-use-translation.test.js.map +0 -1
  458. package/dist/tests/telegram-bridge.test.d.ts +0 -2
  459. package/dist/tests/telegram-bridge.test.d.ts.map +0 -1
  460. package/dist/tests/telegram-bridge.test.js +0 -17
  461. package/dist/tests/telegram-bridge.test.js.map +0 -1
  462. package/dist/tests/telegram-injector.test.d.ts +0 -2
  463. package/dist/tests/telegram-injector.test.d.ts.map +0 -1
  464. package/dist/tests/telegram-injector.test.js +0 -74
  465. package/dist/tests/telegram-injector.test.js.map +0 -1
  466. package/dist/tests/telemetry.test.d.ts +0 -2
  467. package/dist/tests/telemetry.test.d.ts.map +0 -1
  468. package/dist/tests/telemetry.test.js +0 -405
  469. package/dist/tests/telemetry.test.js.map +0 -1
  470. package/dist/tests/test-mode.test.d.ts +0 -2
  471. package/dist/tests/test-mode.test.d.ts.map +0 -1
  472. package/dist/tests/test-mode.test.js +0 -39
  473. package/dist/tests/test-mode.test.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `check_install_path` — resolves which of the 3 known openclaw extension
3
+ * paths cc-openclaw was loaded from; compares installed version to this
4
+ * binary's built version.
5
+ *
6
+ * Extracted from `doctor.ts` 2026-05-13 along with its helpers
7
+ * (findProjectRoot, SELF_VERSION, INSTALL_CANDIDATES) to keep doctor.ts
8
+ * under the 500-LOC ceiling.
9
+ */
10
+ import type { CheckResult } from './patch-scaffold.js';
11
+ export declare function checkInstallPath(selfVersion?: string): CheckResult;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * `check_install_path` — resolves which of the 3 known openclaw extension
3
+ * paths cc-openclaw was loaded from; compares installed version to this
4
+ * binary's built version.
5
+ *
6
+ * Extracted from `doctor.ts` 2026-05-13 along with its helpers
7
+ * (findProjectRoot, SELF_VERSION, INSTALL_CANDIDATES) to keep doctor.ts
8
+ * under the 500-LOC ceiling.
9
+ */
10
+ import { existsSync, readFileSync } from 'fs';
11
+ import { homedir } from 'os';
12
+ import { join, dirname } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ // Locate package.json by walking up from this file's directory until we find it.
15
+ // Works in both runtime (dist/src/cli/checks/) and vitest (src/cli/checks/) contexts.
16
+ function findProjectRoot(startDir) {
17
+ let dir = startDir;
18
+ for (let i = 0; i < 10; i++) {
19
+ if (existsSync(join(dir, 'package.json')))
20
+ return dir;
21
+ const parent = dirname(dir);
22
+ if (parent === dir)
23
+ break;
24
+ dir = parent;
25
+ }
26
+ throw new Error('cc-openclaw: could not locate project root package.json');
27
+ }
28
+ // Resolved lazily-at-import with a fallback so a mocked fs (vitest) or an
29
+ // unreachable path doesn't crash the entire module load.
30
+ let SELF_VERSION;
31
+ try {
32
+ const _thisDir = dirname(fileURLToPath(import.meta.url));
33
+ const _projectRoot = findProjectRoot(_thisDir);
34
+ const selfPkg = JSON.parse(readFileSync(join(_projectRoot, 'package.json'), 'utf8'));
35
+ SELF_VERSION = String(selfPkg.version ?? 'unknown');
36
+ }
37
+ catch {
38
+ SELF_VERSION = 'unknown';
39
+ }
40
+ const INSTALL_CANDIDATES = [
41
+ join(homedir(), '.npm-global/lib/node_modules/openclaw/dist/extensions/cc-openclaw'),
42
+ '/usr/local/lib/node_modules/openclaw/dist/extensions/cc-openclaw',
43
+ join(homedir(), '.openclaw/extensions/cc-openclaw'),
44
+ ];
45
+ export function checkInstallPath(selfVersion = SELF_VERSION) {
46
+ const id = 'check_install_path';
47
+ for (const candidate of INSTALL_CANDIDATES) {
48
+ const pkgPath = join(candidate, 'package.json');
49
+ if (!existsSync(pkgPath))
50
+ continue;
51
+ let installedVersion;
52
+ try {
53
+ const installedPkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
54
+ installedVersion = String(installedPkg.version ?? 'unknown');
55
+ }
56
+ catch {
57
+ return {
58
+ id,
59
+ status: 'fail',
60
+ detail: {
61
+ path: candidate,
62
+ candidatesSearched: INSTALL_CANDIDATES,
63
+ error: 'could not parse package.json at resolved path',
64
+ },
65
+ };
66
+ }
67
+ const mismatch = installedVersion !== selfVersion;
68
+ return {
69
+ id,
70
+ status: mismatch ? 'fail' : 'pass',
71
+ detail: {
72
+ path: candidate,
73
+ candidatesSearched: INSTALL_CANDIDATES,
74
+ version: installedVersion,
75
+ selfVersion,
76
+ mismatch,
77
+ },
78
+ };
79
+ }
80
+ return {
81
+ id,
82
+ status: 'fail',
83
+ detail: {
84
+ candidatesSearched: INSTALL_CANDIDATES,
85
+ error: 'cc-openclaw not found in any known openclaw extension path',
86
+ },
87
+ };
88
+ }
89
+ //# sourceMappingURL=install-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-path.js","sourceRoot":"","sources":["../../../../src/cli/checks/install-path.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `check_patch_scaffold` — registers all 9 Phase E#3 PatchSpec scaffolds in a
3
+ * PatchManifest and runs `validate()` against the live `openclaw` peer dep.
4
+ *
5
+ * Extracted from `doctor.ts` to keep that file under the 500-LOC ceiling
6
+ * and establish the per-check module pattern.
7
+ *
8
+ * Phase E#3 fills in real probe bodies; this check evolves with them. Today
9
+ * the probes verify specific upstream symbols + pure-function determinism —
10
+ * any catastrophic upstream API loss fails the check.
11
+ */
12
+ export interface CheckResult {
13
+ id: string;
14
+ status: 'pass' | 'fail' | 'pending';
15
+ detail: Record<string, unknown>;
16
+ }
17
+ export declare function checkPatchScaffold(): Promise<CheckResult>;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * `check_patch_scaffold` — registers all 9 Phase E#3 PatchSpec scaffolds in a
3
+ * PatchManifest and runs `validate()` against the live `openclaw` peer dep.
4
+ *
5
+ * Extracted from `doctor.ts` to keep that file under the 500-LOC ceiling
6
+ * and establish the per-check module pattern.
7
+ *
8
+ * Phase E#3 fills in real probe bodies; this check evolves with them. Today
9
+ * the probes verify specific upstream symbols + pure-function determinism —
10
+ * any catastrophic upstream API loss fails the check.
11
+ */
12
+ import { PatchManifest } from '../../lifecycle/patch-manifest.js';
13
+ export async function checkPatchScaffold() {
14
+ const id = 'check_patch_scaffold';
15
+ try {
16
+ const [{ syspromptStripSpec }, { cacheParityRegistrySpec }, { embeddedServerRouteSpec }, { pricingOverridesSpec }, { resumeRegistryRestoreSpec }, { sessionPidTrackingSpec }, { cwdRedirectSpec }, { toolsRestorationSpec }, { claudeMdInjectionSpec },] = await Promise.all([
17
+ import('../../patches/sysprompt-strip.js'),
18
+ import('../../patches/cache-parity-registry.js'),
19
+ import('../../patches/embedded-server-route.js'),
20
+ import('../../patches/pricing-overrides.js'),
21
+ import('../../patches/resume-registry-restore.js'),
22
+ import('../../patches/session-pid-tracking.js'),
23
+ import('../../patches/cwd-redirect.js'),
24
+ import('../../patches/tools-restoration.js'),
25
+ import('../../patches/claude-md-injection.js'),
26
+ ]);
27
+ const manifest = new PatchManifest();
28
+ manifest.register(syspromptStripSpec);
29
+ manifest.register(cacheParityRegistrySpec);
30
+ manifest.register(embeddedServerRouteSpec);
31
+ manifest.register(pricingOverridesSpec);
32
+ manifest.register(resumeRegistryRestoreSpec);
33
+ manifest.register(sessionPidTrackingSpec);
34
+ manifest.register(cwdRedirectSpec);
35
+ manifest.register(toolsRestorationSpec);
36
+ manifest.register(claudeMdInjectionSpec);
37
+ await manifest.validate();
38
+ return {
39
+ id,
40
+ status: 'pass',
41
+ detail: { specCount: manifest.size, ids: manifest.ids() },
42
+ };
43
+ }
44
+ catch (err) {
45
+ return {
46
+ id,
47
+ status: 'fail',
48
+ detail: {
49
+ error: err instanceof Error ? err.message : String(err),
50
+ remediation: 'one or more PatchSpec probes detected drift against `openclaw`; ' +
51
+ 'review `tests/patches/all-specs-compose.test.ts` for the failing spec',
52
+ },
53
+ };
54
+ }
55
+ }
56
+ //# sourceMappingURL=patch-scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-scaffold.js","sourceRoot":"","sources":["../../../../src/cli/checks/patch-scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAQlE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,EAAE,GAAG,sBAAsB,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,CACJ,EAAE,kBAAkB,EAAE,EACtB,EAAE,uBAAuB,EAAE,EAC3B,EAAE,uBAAuB,EAAE,EAC3B,EAAE,oBAAoB,EAAE,EACxB,EAAE,yBAAyB,EAAE,EAC7B,EAAE,sBAAsB,EAAE,EAC1B,EAAE,eAAe,EAAE,EACnB,EAAE,oBAAoB,EAAE,EACxB,EAAE,qBAAqB,EAAE,EAC1B,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpB,MAAM,CAAC,kCAAkC,CAAC;YAC1C,MAAM,CAAC,wCAAwC,CAAC;YAChD,MAAM,CAAC,wCAAwC,CAAC;YAChD,MAAM,CAAC,oCAAoC,CAAC;YAC5C,MAAM,CAAC,0CAA0C,CAAC;YAClD,MAAM,CAAC,uCAAuC,CAAC;YAC/C,MAAM,CAAC,+BAA+B,CAAC;YACvC,MAAM,CAAC,oCAAoC,CAAC;YAC5C,MAAM,CAAC,sCAAsC,CAAC;SAC/C,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QACrC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACtC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QAC3C,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QAC3C,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACxC,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QAC7C,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAC1C,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACnC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACxC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAEzC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC1B,OAAO;YACL,EAAE;YACF,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE;SAC1D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE;YACF,MAAM,EAAE,MAAM;YACd,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvD,WAAW,EACT,kEAAkE;oBAClE,uEAAuE;aAC1E;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `cc-openclaw doctor` — Phase 5 Bridge Plane skeleton (v0.11.0).
3
+ *
4
+ * Checks shipped in this plane:
5
+ * 1. check_install_path — resolves which of the 3 known openclaw extension
6
+ * paths cc-openclaw was loaded from; compares installed version to this
7
+ * binary's built version.
8
+ * 2. check_bridge_wiring — soft-imports the bridge factory and asserts the
9
+ * 4 expected bridge mode exports exist. Soft-fails with `pending` when
10
+ * the factory file has not yet shipped (bridge coder is parallel).
11
+ *
12
+ * Future planes add checks via the exported `ALL_CHECKS` registry.
13
+ */
14
+ import { Command } from 'commander';
15
+ export { checkInstallPath } from './checks/install-path.js';
16
+ export { checkBridgeWiring } from './checks/bridge-wiring.js';
17
+ export { checkConfigSchema } from './checks/config-schema.js';
18
+ export { checkCriticalOpenclawJsonKeys } from './checks/critical-openclaw-json-keys.js';
19
+ export { checkPatchScaffold } from './checks/patch-scaffold.js';
20
+ export declare function createDoctorCommand(): Command;
@@ -0,0 +1,93 @@
1
+ /**
2
+ * `cc-openclaw doctor` — Phase 5 Bridge Plane skeleton (v0.11.0).
3
+ *
4
+ * Checks shipped in this plane:
5
+ * 1. check_install_path — resolves which of the 3 known openclaw extension
6
+ * paths cc-openclaw was loaded from; compares installed version to this
7
+ * binary's built version.
8
+ * 2. check_bridge_wiring — soft-imports the bridge factory and asserts the
9
+ * 4 expected bridge mode exports exist. Soft-fails with `pending` when
10
+ * the factory file has not yet shipped (bridge coder is parallel).
11
+ *
12
+ * Future planes add checks via the exported `ALL_CHECKS` registry.
13
+ */
14
+ import { Command } from 'commander';
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';
38
+ // ── Output helpers ───────────────────────────────────────────────────────────
39
+ function symbol(status) {
40
+ if (status === 'pass')
41
+ return '✔'; // ✔
42
+ if (status === 'pending')
43
+ return '○'; // ○
44
+ return '✘'; // ✘
45
+ }
46
+ function formatDetail(detail) {
47
+ const lines = [];
48
+ for (const [k, v] of Object.entries(detail)) {
49
+ if (Array.isArray(v)) {
50
+ lines.push(` ${k}: [${v.join(', ')}]`);
51
+ }
52
+ else {
53
+ lines.push(` ${k}: ${String(v)}`);
54
+ }
55
+ }
56
+ return lines.join('\n');
57
+ }
58
+ // ── Command factory ──────────────────────────────────────────────────────────
59
+ export function createDoctorCommand() {
60
+ const cmd = new Command('doctor');
61
+ cmd
62
+ .description('diagnose cc-openclaw install-path, bridge wiring, and plugin health')
63
+ .option('--json', 'emit results as a single JSON line')
64
+ .action(async (opts) => {
65
+ const results = [];
66
+ results.push(_checkInstallPathImpl());
67
+ results.push(await _checkBridgeWiringImpl());
68
+ results.push(_checkConfigSchemaImpl());
69
+ results.push(_checkCriticalKeysImpl());
70
+ results.push(await _checkPatchScaffoldImpl());
71
+ const passed = results.filter((r) => r.status === 'pass').length;
72
+ const pending = results.filter((r) => r.status === 'pending').length;
73
+ const failed = results.filter((r) => r.status === 'fail').length;
74
+ const total = results.length;
75
+ const exitCode = failed > 0 ? 1 : 0;
76
+ if (opts.json) {
77
+ process.stdout.write(JSON.stringify({ checks: results, passed, pending, failed, total, exitCode }) + '\n');
78
+ }
79
+ else {
80
+ for (let i = 0; i < results.length; i++) {
81
+ const r = results[i];
82
+ const statusLabel = r.status === 'pending' ? 'pending' : r.status;
83
+ process.stdout.write(`${symbol(r.status)} check ${i + 1} (${r.id}): ${statusLabel}\n`);
84
+ process.stdout.write(formatDetail(r.detail) + '\n');
85
+ }
86
+ const pendingNote = pending > 0 ? ` (${pending} pending)` : '';
87
+ process.stdout.write(`\nResult: ${passed}/${total} checks passed${pendingNote}\n`);
88
+ }
89
+ process.exit(exitCode);
90
+ });
91
+ return cmd;
92
+ }
93
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cc-openclaw CLI entry point.
4
+ *
5
+ * Registers the `cc-openclaw` binary with a `doctor` subcommand.
6
+ * Future planes add: patch-status (v0.12), registry (v0.13), lifecycle (v0.14).
7
+ */
8
+ export {};
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cc-openclaw CLI entry point.
4
+ *
5
+ * Registers the `cc-openclaw` binary with a `doctor` subcommand.
6
+ * Future planes add: patch-status (v0.12), registry (v0.13), lifecycle (v0.14).
7
+ */
8
+ import { Command } from 'commander';
9
+ import { createDoctorCommand } from './doctor.js';
10
+ import { createMigrateCommand } from './migrate.js';
11
+ import { existsSync, readFileSync } from 'fs';
12
+ import { dirname, join } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ function findProjectRoot(startDir) {
15
+ let dir = startDir;
16
+ for (let i = 0; i < 10; i++) {
17
+ if (existsSync(join(dir, 'package.json')))
18
+ return dir;
19
+ const parent = dirname(dir);
20
+ if (parent === dir)
21
+ break;
22
+ dir = parent;
23
+ }
24
+ throw new Error('cc-openclaw: could not locate project root package.json');
25
+ }
26
+ const _root = findProjectRoot(dirname(fileURLToPath(import.meta.url)));
27
+ const pkg = JSON.parse(readFileSync(join(_root, 'package.json'), 'utf8'));
28
+ const program = new Command();
29
+ program
30
+ .name('cc-openclaw')
31
+ .version(String(pkg.version), '-v, --version', 'print version and exit')
32
+ .description('A1xAI cc-openclaw plugin diagnostics');
33
+ program.addCommand(createDoctorCommand());
34
+ program.addCommand(createMigrateCommand());
35
+ program.parseAsync(process.argv).catch((err) => {
36
+ console.error('cc-openclaw: fatal error', err);
37
+ process.exit(1);
38
+ });
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,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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"}