@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,54 @@
1
+ /**
2
+ * OpenClawApiShim — typed subset of the OpenClaw plugin API surface.
3
+ *
4
+ * Q2 resolution: the upstream OpenClaw plugin API has no semver contract.
5
+ * Rather than depend on it directly, all native-tool calls go through this
6
+ * shim which exposes only the methods cc-openclaw needs.
7
+ *
8
+ * `validateShape(api)` runs at boot phase 3 (`validate-upstream`) and is
9
+ * registered as a `PatchSpec.expectedShape` probe. Failure → `DriftError`
10
+ * and boot refuses (per PatchManifest atomic-install contract).
11
+ *
12
+ * Phase D: types + probe shipped; `dispatch` stubbed and throws
13
+ * `NotImplemented` until Phase E wires the live OpenClaw `api.tool.dispatch`.
14
+ */
15
+ /**
16
+ * Inbound dispatch types for the v1.0.0 ToolBridge strategy. These are
17
+ * complementary to the existing `IToolBridge` at `src/types/tool-bridge.ts`
18
+ * (which handles outbound tools-to-CLI wiring). Phase E consolidates the
19
+ * two interfaces if a clean merge is possible.
20
+ */
21
+ export interface ToolUseCall {
22
+ readonly id: string;
23
+ readonly name: string;
24
+ readonly input: unknown;
25
+ }
26
+ export interface ToolUseResult {
27
+ readonly toolUseId: string;
28
+ readonly content: string;
29
+ readonly isError?: boolean;
30
+ }
31
+ /** Minimum surface area the shim requires from `openclaw.PluginApi`. */
32
+ export interface OpenClawApiSurface {
33
+ readonly tool: {
34
+ readonly dispatch: (name: string, input: unknown) => Promise<unknown>;
35
+ readonly list: () => ReadonlyArray<{
36
+ readonly name: string;
37
+ }>;
38
+ };
39
+ }
40
+ export declare class OpenClawApiShim {
41
+ private readonly api;
42
+ constructor(api: OpenClawApiSurface);
43
+ /**
44
+ * Phase 3 probe — returns true when `api.tool.dispatch` and `api.tool.list`
45
+ * exist as callable methods. Used as a `PatchSpec.expectedShape` probe.
46
+ */
47
+ static validateShape(api: unknown): boolean;
48
+ /**
49
+ * Dispatch a Claude `tool_use` event to OpenClaw's plugin API. Phase D stub.
50
+ */
51
+ dispatch(_call: ToolUseCall): Promise<ToolUseResult>;
52
+ /** Phase D helper — exposes the underlying surface for tests. */
53
+ getApi(): OpenClawApiSurface;
54
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * OpenClawApiShim — typed subset of the OpenClaw plugin API surface.
3
+ *
4
+ * Q2 resolution: the upstream OpenClaw plugin API has no semver contract.
5
+ * Rather than depend on it directly, all native-tool calls go through this
6
+ * shim which exposes only the methods cc-openclaw needs.
7
+ *
8
+ * `validateShape(api)` runs at boot phase 3 (`validate-upstream`) and is
9
+ * registered as a `PatchSpec.expectedShape` probe. Failure → `DriftError`
10
+ * and boot refuses (per PatchManifest atomic-install contract).
11
+ *
12
+ * Phase D: types + probe shipped; `dispatch` stubbed and throws
13
+ * `NotImplemented` until Phase E wires the live OpenClaw `api.tool.dispatch`.
14
+ */
15
+ import { NotImplemented } from '../../lib/domain-error.js';
16
+ export class OpenClawApiShim {
17
+ api;
18
+ constructor(api) {
19
+ this.api = api;
20
+ }
21
+ /**
22
+ * Phase 3 probe — returns true when `api.tool.dispatch` and `api.tool.list`
23
+ * exist as callable methods. Used as a `PatchSpec.expectedShape` probe.
24
+ */
25
+ static validateShape(api) {
26
+ if (typeof api !== 'object' || api === null)
27
+ return false;
28
+ const a = api;
29
+ if (typeof a.tool !== 'object' || a.tool === null)
30
+ return false;
31
+ const t = a.tool;
32
+ return typeof t.dispatch === 'function' && typeof t.list === 'function';
33
+ }
34
+ /**
35
+ * Dispatch a Claude `tool_use` event to OpenClaw's plugin API. Phase D stub.
36
+ */
37
+ async dispatch(_call) {
38
+ throw new NotImplemented('OpenClawApiShim.dispatch (Phase E wires api.tool.dispatch)');
39
+ }
40
+ /** Phase D helper — exposes the underlying surface for tests. */
41
+ getApi() {
42
+ return this.api;
43
+ }
44
+ }
45
+ //# sourceMappingURL=openclaw-api-shim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-api-shim.js","sourceRoot":"","sources":["../../../../src/openai-compat/bridges/openclaw-api-shim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AA4B3D,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,GAAuB;QAAvB,QAAG,GAAH,GAAG,CAAoB;IAAG,CAAC;IAExD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,GAAY;QAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC1D,MAAM,CAAC,GAAG,GAA8B,CAAC;QACzC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChE,MAAM,CAAC,GAAG,CAAC,CAAC,IAA+B,CAAC;QAC5C,OAAO,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,KAAkB;QAC/B,MAAM,IAAI,cAAc,CAAC,4DAA4D,CAAC,CAAC;IACzF,CAAC;IAED,iEAAiE;IACjE,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * openclaw-native-tools.ts — IToolBridge impl for ToolMode.OpenClawNative.
3
+ *
4
+ * v0.11.0 investigation result: OpenClaw DOES expose `/tools/invoke` at
5
+ * `http://127.0.0.1:18790` with Bearer token auth (confirmed in
6
+ * extensions/cc-openclaw/openclaw-mcp-bridge.cjs). However, the gateway's
7
+ * `tools.allow` list in openclaw.json only includes `claude_session_*` and
8
+ * council/ultraplan commands — `message.voice` is NOT there. Invoking
9
+ * `/tools/invoke` for voice would 404/401 at runtime.
10
+ *
11
+ * Decision: Path B (internal marker translation) for v0.11.0. `executeNative`
12
+ * routes `message.voice` through TtsMediaBridge → `[[tts:text]]` markers.
13
+ * OpenClaw's existing `maybeApplyTtsToPayload` picks them up downstream.
14
+ * This is identical to the voice-recovery.ts rescue path — the difference is
15
+ * the call site: here the model emits a proper tool_call, not raw text XML.
16
+ *
17
+ * Path A (real HTTP POST to `/tools/invoke`) is fully wired in `executeHttp`
18
+ * and ready to activate in v0.12.0 when A1 adds `message.voice` to
19
+ * `gateway.tools.allow` in openclaw.json.
20
+ */
21
+ import type { IToolBridge, ToolDefinition, TranslatedToolUseDelta } from '../../types/tool-bridge.js';
22
+ import { ToolMode } from '../../types/tool-bridge.js';
23
+ interface GatewayConfig {
24
+ url: string;
25
+ token: string;
26
+ }
27
+ export declare class OpenClawNativeToolsBridge implements IToolBridge {
28
+ readonly mode = ToolMode.OpenClawNative;
29
+ private readonly _gwConfig;
30
+ constructor(gwConfig?: GatewayConfig);
31
+ /**
32
+ * Build a minimal tool preamble listing only the tools the bridge can
33
+ * actually handle (allowlisted + registered). The full schema is omitted —
34
+ * the caller's system prompt already advertises it. This is a safety marker
35
+ * so Savvy knows the bridge is active.
36
+ */
37
+ buildToolPreamble(tools: ReadonlyArray<ToolDefinition> | undefined): string;
38
+ /**
39
+ * Translate a tool_use event from the Claude stream into an OpenAI delta.
40
+ * This bridge does NOT intercept mid-stream events — tool execution happens
41
+ * in `executeNative` after the full turn completes. Return null always.
42
+ */
43
+ translateToolUse(_event: unknown): TranslatedToolUseDelta;
44
+ /** Serialize a tool result back as XML for the next turn's user message. */
45
+ serializeToolResult(call: import('../../types/route.js').OpenAIToolCall, result: string): string;
46
+ /**
47
+ * Execute a `message.voice` (or other allowlisted) tool call.
48
+ *
49
+ * v0.11.0: routes through TtsMediaBridge (Path B — marker translation).
50
+ * Returns the TTS marker text to inject into the SSE stream.
51
+ *
52
+ * When `CC_OPENCLAW_NATIVE_TOOLS_HTTP=1` is set, falls through to Path A
53
+ * (real HTTP POST). Reserved for v0.12.0 activation.
54
+ */
55
+ executeNative(toolName: string, args: Record<string, unknown>): Promise<{
56
+ text: string;
57
+ delivered: boolean;
58
+ via: string;
59
+ }>;
60
+ }
61
+ export {};
@@ -0,0 +1,171 @@
1
+ /**
2
+ * openclaw-native-tools.ts — IToolBridge impl for ToolMode.OpenClawNative.
3
+ *
4
+ * v0.11.0 investigation result: OpenClaw DOES expose `/tools/invoke` at
5
+ * `http://127.0.0.1:18790` with Bearer token auth (confirmed in
6
+ * extensions/cc-openclaw/openclaw-mcp-bridge.cjs). However, the gateway's
7
+ * `tools.allow` list in openclaw.json only includes `claude_session_*` and
8
+ * council/ultraplan commands — `message.voice` is NOT there. Invoking
9
+ * `/tools/invoke` for voice would 404/401 at runtime.
10
+ *
11
+ * Decision: Path B (internal marker translation) for v0.11.0. `executeNative`
12
+ * routes `message.voice` through TtsMediaBridge → `[[tts:text]]` markers.
13
+ * OpenClaw's existing `maybeApplyTtsToPayload` picks them up downstream.
14
+ * This is identical to the voice-recovery.ts rescue path — the difference is
15
+ * the call site: here the model emits a proper tool_call, not raw text XML.
16
+ *
17
+ * Path A (real HTTP POST to `/tools/invoke`) is fully wired in `executeHttp`
18
+ * and ready to activate in v0.12.0 when A1 adds `message.voice` to
19
+ * `gateway.tools.allow` in openclaw.json.
20
+ */
21
+ import * as http from 'node:http';
22
+ import * as fs from 'node:fs';
23
+ import * as path from 'node:path';
24
+ import * as os from 'node:os';
25
+ import { ToolMode } from '../../types/tool-bridge.js';
26
+ import { resolveToolBridge, registeredToolNames } from './openclaw-tool-registry.js';
27
+ import { MediaBridgeError } from './media-bridge.js';
28
+ // ── Gateway config ─────────────────────────────────────────────────────────
29
+ const DEFAULT_GATEWAY_URL = 'http://127.0.0.1:18790';
30
+ const REQUEST_TIMEOUT_MS = 15_000;
31
+ function readGatewayConfig() {
32
+ // Env overrides first (matches session-manager.ts priority)
33
+ const envUrl = process.env.GATEWAY_URL;
34
+ const envKey = process.env.GATEWAY_KEY;
35
+ if (envUrl && envKey)
36
+ return { url: envUrl, token: envKey };
37
+ try {
38
+ const configPath = path.join(os.homedir(), '.openclaw', 'openclaw.json');
39
+ const raw = fs.readFileSync(configPath, 'utf-8');
40
+ const parsed = JSON.parse(raw);
41
+ const gw = parsed.gateway;
42
+ if (!gw)
43
+ return { url: DEFAULT_GATEWAY_URL, token: '' };
44
+ const port = gw.port || 18790;
45
+ const auth = gw.auth;
46
+ const token = auth?.token || auth?.password || '';
47
+ return { url: `http://127.0.0.1:${port}`, token };
48
+ }
49
+ catch {
50
+ return { url: DEFAULT_GATEWAY_URL, token: '' };
51
+ }
52
+ }
53
+ // ── Path A: real HTTP invoke (ready for v0.12.0) ───────────────────────────
54
+ async function executeHttp(toolName, args, config) {
55
+ return new Promise((resolve) => {
56
+ const body = JSON.stringify({ tool: toolName, args });
57
+ const url = new URL('/tools/invoke', config.url);
58
+ const req = http.request(url, {
59
+ method: 'POST',
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ Authorization: `Bearer ${config.token}`,
63
+ 'Content-Length': Buffer.byteLength(body),
64
+ },
65
+ }, (res) => {
66
+ let data = '';
67
+ res.on('data', (chunk) => { data += chunk.toString(); });
68
+ res.on('end', () => {
69
+ try {
70
+ const parsed = JSON.parse(data);
71
+ if (parsed.ok === false) {
72
+ const err = parsed.error;
73
+ resolve({ ok: false, error: String(err?.message ?? data.slice(0, 200)) });
74
+ }
75
+ else {
76
+ const result = typeof parsed.result === 'string'
77
+ ? parsed.result
78
+ : JSON.stringify(parsed.result ?? parsed);
79
+ resolve({ ok: true, result });
80
+ }
81
+ }
82
+ catch {
83
+ resolve({ ok: false, error: data.slice(0, 200) });
84
+ }
85
+ });
86
+ });
87
+ req.on('error', (err) => resolve({ ok: false, error: err.message }));
88
+ req.setTimeout(REQUEST_TIMEOUT_MS, () => {
89
+ req.destroy();
90
+ resolve({ ok: false, error: `Timeout (${REQUEST_TIMEOUT_MS}ms)` });
91
+ });
92
+ req.write(body);
93
+ req.end();
94
+ });
95
+ }
96
+ // ── IToolBridge impl ───────────────────────────────────────────────────────
97
+ export class OpenClawNativeToolsBridge {
98
+ mode = ToolMode.OpenClawNative;
99
+ _gwConfig;
100
+ constructor(gwConfig) {
101
+ this._gwConfig = gwConfig ?? readGatewayConfig();
102
+ }
103
+ /**
104
+ * Build a minimal tool preamble listing only the tools the bridge can
105
+ * actually handle (allowlisted + registered). The full schema is omitted —
106
+ * the caller's system prompt already advertises it. This is a safety marker
107
+ * so Savvy knows the bridge is active.
108
+ */
109
+ buildToolPreamble(tools) {
110
+ if (!tools?.length)
111
+ return '';
112
+ const bridgeable = tools
113
+ .map((t) => t.function.name)
114
+ .filter((n) => registeredToolNames().has(n));
115
+ if (!bridgeable.length)
116
+ return '';
117
+ return [
118
+ '=== NATIVE TOOL BRIDGE (cc-openclaw v0.11.0) ===',
119
+ `Bridged tools (emit tool_call, NOT XML): ${bridgeable.join(', ')}`,
120
+ '=== END NATIVE TOOL BRIDGE ===',
121
+ ].join('\n');
122
+ }
123
+ /**
124
+ * Translate a tool_use event from the Claude stream into an OpenAI delta.
125
+ * This bridge does NOT intercept mid-stream events — tool execution happens
126
+ * in `executeNative` after the full turn completes. Return null always.
127
+ */
128
+ translateToolUse(_event) {
129
+ return null;
130
+ }
131
+ /** Serialize a tool result back as XML for the next turn's user message. */
132
+ serializeToolResult(call, result) {
133
+ return `<tool_result tool_use_id="${call.id}" name="${call.function.name}">${result}</tool_result>`;
134
+ }
135
+ /**
136
+ * Execute a `message.voice` (or other allowlisted) tool call.
137
+ *
138
+ * v0.11.0: routes through TtsMediaBridge (Path B — marker translation).
139
+ * Returns the TTS marker text to inject into the SSE stream.
140
+ *
141
+ * When `CC_OPENCLAW_NATIVE_TOOLS_HTTP=1` is set, falls through to Path A
142
+ * (real HTTP POST). Reserved for v0.12.0 activation.
143
+ */
144
+ async executeNative(toolName, args) {
145
+ const resolved = resolveToolBridge(toolName);
146
+ // Tool not in allowlist → fallback empty string (caller decides what to do)
147
+ if (!resolved) {
148
+ return { text: '', delivered: false, via: 'not-allowed' };
149
+ }
150
+ // Path A: real HTTP (future v0.12.0, opt-in via env flag)
151
+ if (process.env.CC_OPENCLAW_NATIVE_TOOLS_HTTP === '1') {
152
+ const httpResult = await executeHttp(toolName, args, this._gwConfig);
153
+ if (httpResult.ok && httpResult.result !== undefined) {
154
+ return { text: httpResult.result, delivered: true, via: 'http-invoke' };
155
+ }
156
+ // HTTP failed → fall through to Path B
157
+ }
158
+ // Path B: internal marker translation
159
+ try {
160
+ return await resolved.bridge.execute(args);
161
+ }
162
+ catch (err) {
163
+ if (err instanceof MediaBridgeError) {
164
+ // Return empty text — upstream voice-recovery fallback will handle it
165
+ return { text: '', delivered: false, via: `error:${err.message}` };
166
+ }
167
+ return { text: '', delivered: false, via: 'error:unknown' };
168
+ }
169
+ }
170
+ }
171
+ //# sourceMappingURL=openclaw-native-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-native-tools.js","sourceRoot":"","sources":["../../../../src/openai-compat/bridges/openclaw-native-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * openclaw-tool-registry.ts — Registry that maps allowed tool names to their
3
+ * MediaBridge implementations.
4
+ *
5
+ * v0.11.0 only registers `message.voice` → TtsMediaBridge. The registry is
6
+ * lazy-constructed per-request (stateless) so future parallel agents can add
7
+ * bridges without contention.
8
+ */
9
+ import type { MediaBridge } from './media-bridge.js';
10
+ /** Resolved bridge for a given tool name, or null when not in allowlist. */
11
+ export interface ResolvedBridge {
12
+ readonly bridge: MediaBridge;
13
+ readonly toolName: string;
14
+ }
15
+ /**
16
+ * Look up the MediaBridge for `toolName`.
17
+ * Returns null when the tool is not in the v0.11.0 allowlist OR has no
18
+ * registered implementation.
19
+ */
20
+ export declare function resolveToolBridge(toolName: string): ResolvedBridge | null;
21
+ /**
22
+ * Return every tool name currently in the registry (i.e. allowed + implemented).
23
+ * Used by `OpenClawNativeToolsBridge.buildToolPreamble` to filter the caller's
24
+ * tool list down to what the bridge can actually handle.
25
+ */
26
+ export declare function registeredToolNames(): ReadonlySet<string>;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * openclaw-tool-registry.ts — Registry that maps allowed tool names to their
3
+ * MediaBridge implementations.
4
+ *
5
+ * v0.11.0 only registers `message.voice` → TtsMediaBridge. The registry is
6
+ * lazy-constructed per-request (stateless) so future parallel agents can add
7
+ * bridges without contention.
8
+ */
9
+ import { TtsMediaBridge, TTS_TOOL_NAME } from './tts-media-bridge.js';
10
+ import { isAllowedTool } from './allowlist.js';
11
+ /**
12
+ * Look up the MediaBridge for `toolName`.
13
+ * Returns null when the tool is not in the v0.11.0 allowlist OR has no
14
+ * registered implementation.
15
+ */
16
+ export function resolveToolBridge(toolName) {
17
+ if (!isAllowedTool(toolName))
18
+ return null;
19
+ const bridge = BRIDGE_MAP.get(toolName);
20
+ if (!bridge)
21
+ return null;
22
+ return { bridge, toolName };
23
+ }
24
+ /**
25
+ * Return every tool name currently in the registry (i.e. allowed + implemented).
26
+ * Used by `OpenClawNativeToolsBridge.buildToolPreamble` to filter the caller's
27
+ * tool list down to what the bridge can actually handle.
28
+ */
29
+ export function registeredToolNames() {
30
+ return REGISTERED_NAMES;
31
+ }
32
+ // ── Internal registry ──────────────────────────────────────────────────────
33
+ /** Singleton instances — bridges are stateless so one per process is fine. */
34
+ const BRIDGE_MAP = new Map([
35
+ [TTS_TOOL_NAME, new TtsMediaBridge()],
36
+ ]);
37
+ const REGISTERED_NAMES = new Set(BRIDGE_MAP.keys());
38
+ //# sourceMappingURL=openclaw-tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-tool-registry.js","sourceRoot":"","sources":["../../../../src/openai-compat/bridges/openclaw-tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAQ/C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAE9E,8EAA8E;AAC9E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAsB;IAC9C,CAAC,aAAa,EAAE,IAAI,cAAc,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * tts-media-bridge.ts — MediaBridge impl for `message.voice`.
3
+ *
4
+ * v0.11.0 Path B strategy: instead of POSTing to a TTS HTTP endpoint, this
5
+ * bridge converts `message.voice` tool args into `[[tts:text]]` markers that
6
+ * OpenClaw's existing `maybeApplyTtsToPayload` downstream picks up — the same
7
+ * channel voice-recovery.ts uses. This gives the tool-boundary UX (Savvy sees
8
+ * a proper tool interface; callers see tool_call deltas) without requiring a
9
+ * new OpenClaw endpoint.
10
+ *
11
+ * The bridge imports from voice-recovery.ts and reuses its marker constants
12
+ * and truncation logic. No logic is duplicated.
13
+ */
14
+ import type { MediaBridge, MediaBridgeResult } from './media-bridge.js';
15
+ export declare const TTS_TOOL_NAME = "message.voice";
16
+ export declare class TtsMediaBridge implements MediaBridge {
17
+ readonly toolName = "message.voice";
18
+ execute(args: Record<string, unknown>): Promise<MediaBridgeResult>;
19
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * tts-media-bridge.ts — MediaBridge impl for `message.voice`.
3
+ *
4
+ * v0.11.0 Path B strategy: instead of POSTing to a TTS HTTP endpoint, this
5
+ * bridge converts `message.voice` tool args into `[[tts:text]]` markers that
6
+ * OpenClaw's existing `maybeApplyTtsToPayload` downstream picks up — the same
7
+ * channel voice-recovery.ts uses. This gives the tool-boundary UX (Savvy sees
8
+ * a proper tool interface; callers see tool_call deltas) without requiring a
9
+ * new OpenClaw endpoint.
10
+ *
11
+ * The bridge imports from voice-recovery.ts and reuses its marker constants
12
+ * and truncation logic. No logic is duplicated.
13
+ */
14
+ import { DEFAULT_MAX_SPOKEN_CHARS } from '../voice-recovery.js';
15
+ import { MediaBridgeError } from './media-bridge.js';
16
+ export const TTS_TOOL_NAME = 'message.voice';
17
+ /** Max spoken chars for the injected TTS block — mirrors voice-recovery default. */
18
+ const MAX_SPOKEN = DEFAULT_MAX_SPOKEN_CHARS;
19
+ /** Marker constants — identical to voice-recovery.ts to stay in-sync. */
20
+ const TTS_OPEN = '[[tts:text]]';
21
+ const TTS_CLOSE = '[[/tts:text]]';
22
+ /**
23
+ * Extract the spoken text from tool call args.
24
+ * Tries `text`, `content`, `speech`, `input` in that order.
25
+ */
26
+ function extractText(args) {
27
+ for (const key of ['text', 'content', 'speech', 'input']) {
28
+ const v = args[key];
29
+ if (typeof v === 'string' && v.trim())
30
+ return v.trim();
31
+ }
32
+ return null;
33
+ }
34
+ /** Truncate to `max` chars at a sentence boundary when possible. */
35
+ function truncate(text, max) {
36
+ if (text.length <= max)
37
+ return text;
38
+ const slice = text.slice(0, max);
39
+ const lastSentence = Math.max(slice.lastIndexOf('. '), slice.lastIndexOf('! '), slice.lastIndexOf('? '));
40
+ if (lastSentence > max * 0.5)
41
+ return slice.slice(0, lastSentence + 1);
42
+ const lastSpace = slice.lastIndexOf(' ');
43
+ if (lastSpace > max * 0.5)
44
+ return `${slice.slice(0, lastSpace)}…`;
45
+ return `${slice}…`;
46
+ }
47
+ export class TtsMediaBridge {
48
+ toolName = TTS_TOOL_NAME;
49
+ async execute(args) {
50
+ const raw = extractText(args);
51
+ if (!raw) {
52
+ throw new MediaBridgeError('message.voice args missing text/content/speech/input field', this.toolName, args);
53
+ }
54
+ const spoken = truncate(raw, MAX_SPOKEN);
55
+ const text = `${TTS_OPEN}${spoken}${TTS_CLOSE}`;
56
+ return { text, delivered: true, via: 'tts-markers' };
57
+ }
58
+ }
59
+ //# sourceMappingURL=tts-media-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tts-media-bridge.js","sourceRoot":"","sources":["../../../../src/openai-compat/bridges/tts-media-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAE7C,oFAAoF;AACpF,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAE5C,yEAAyE;AACzE,MAAM,QAAQ,GAAG,cAAc,CAAC;AAChC,MAAM,SAAS,GAAG,eAAe,CAAC;AAElC;;;GAGG;AACH,SAAS,WAAW,CAAC,IAA6B;IAChD,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AACpE,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EACvB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EACvB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CACxB,CAAC;IACF,IAAI,YAAY,GAAG,GAAG,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,SAAS,GAAG,GAAG,GAAG,GAAG;QAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC;IAClE,OAAO,GAAG,KAAK,GAAG,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,cAAc;IAChB,QAAQ,GAAG,aAAa,CAAC;IAElC,KAAK,CAAC,OAAO,CAAC,IAA6B;QACzC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,gBAAgB,CACxB,4DAA4D,EAC5D,IAAI,CAAC,QAAQ,EACb,IAAI,CACL,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;QAChD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * OpenAI streaming chunk types.
3
+ *
4
+ * Extracted from `openai-compat.ts` 2026-05-13 to push that file under the
5
+ * 500-LOC ceiling. Single source of truth for the SSE chunk shape; also
6
+ * imported by `response-formatter.ts`, `types/route.ts`, `types/sse.ts`.
7
+ */
8
+ export interface OpenAIChatCompletionChunk {
9
+ id: string;
10
+ object: 'chat.completion.chunk';
11
+ created: number;
12
+ model: string;
13
+ choices: Array<{
14
+ index: number;
15
+ delta: {
16
+ role?: string;
17
+ content?: string | null;
18
+ tool_calls?: Array<{
19
+ index: number;
20
+ id?: string;
21
+ type?: 'function';
22
+ function?: {
23
+ name?: string;
24
+ arguments?: string;
25
+ };
26
+ }>;
27
+ };
28
+ finish_reason: string | null;
29
+ }>;
30
+ usage?: {
31
+ prompt_tokens: number;
32
+ completion_tokens: number;
33
+ total_tokens: number;
34
+ };
35
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * OpenAI streaming chunk types.
3
+ *
4
+ * Extracted from `openai-compat.ts` 2026-05-13 to push that file under the
5
+ * 500-LOC ceiling. Single source of truth for the SSE chunk shape; also
6
+ * imported by `response-formatter.ts`, `types/route.ts`, `types/sse.ts`.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=openai-chunk-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-chunk-types.js","sourceRoot":"","sources":["../../../src/openai-compat/openai-chunk-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -17,96 +17,8 @@ export { formatCompletionResponse, formatCompletionChunk } from './response-form
17
17
  export { reportStatus, getToolDescription } from './status-reporter.js';
18
18
  export { handleNonStreaming } from './non-streaming-handler.js';
19
19
  export { handleStreaming } from './streaming-handler.js';
20
- export interface OpenAIChatMessage {
21
- role: 'system' | 'user' | 'assistant' | 'tool';
22
- content: string | Array<{
23
- type?: string;
24
- text?: string;
25
- }> | null;
26
- tool_calls?: Array<{
27
- id: string;
28
- type: 'function';
29
- function: {
30
- name: string;
31
- arguments: string;
32
- };
33
- }>;
34
- tool_call_id?: string;
35
- }
36
- export interface OpenAIChatCompletionRequest {
37
- model?: string;
38
- messages: OpenAIChatMessage[];
39
- stream?: boolean;
40
- temperature?: number;
41
- max_tokens?: number;
42
- max_completion_tokens?: number;
43
- user?: string;
44
- tools?: Array<{
45
- type: 'function';
46
- function: {
47
- name: string;
48
- description: string;
49
- parameters: unknown;
50
- };
51
- }>;
52
- }
53
- export interface OpenAIToolCall {
54
- id: string;
55
- type: 'function';
56
- function: {
57
- name: string;
58
- arguments: string;
59
- };
60
- }
61
- export interface OpenAIChatCompletionResponse {
62
- id: string;
63
- object: 'chat.completion';
64
- created: number;
65
- model: string;
66
- choices: Array<{
67
- index: number;
68
- message: {
69
- role: 'assistant';
70
- content: string | null;
71
- tool_calls?: OpenAIToolCall[];
72
- reasoning?: string;
73
- };
74
- finish_reason: 'stop' | 'length' | 'tool_calls';
75
- }>;
76
- usage: {
77
- prompt_tokens: number;
78
- completion_tokens: number;
79
- total_tokens: number;
80
- };
81
- }
82
- export interface OpenAIChatCompletionChunk {
83
- id: string;
84
- object: 'chat.completion.chunk';
85
- created: number;
86
- model: string;
87
- choices: Array<{
88
- index: number;
89
- delta: {
90
- role?: string;
91
- content?: string | null;
92
- tool_calls?: Array<{
93
- index: number;
94
- id?: string;
95
- type?: 'function';
96
- function?: {
97
- name?: string;
98
- arguments?: string;
99
- };
100
- }>;
101
- };
102
- finish_reason: string | null;
103
- }>;
104
- usage?: {
105
- prompt_tokens: number;
106
- completion_tokens: number;
107
- total_tokens: number;
108
- };
109
- }
20
+ export type { OpenAIChatMessage, OpenAIChatCompletionRequest, OpenAIToolCall, OpenAIChatCompletionResponse, } from './openai-types.js';
21
+ export type { OpenAIChatCompletionChunk } from './openai-chunk-types.js';
110
22
  /** SessionManager-like interface to avoid circular imports. Exported so
111
23
  * the extracted handlers (non-streaming-handler.ts, streaming-handler.ts)
112
24
  * can type their `manager` parameter from a single canonical definition. */