@a1hvdy/cc-openclaw 0.26.5 β†’ 0.26.6

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 (444) hide show
  1. package/dist/src/channels/adapter.js +0 -1
  2. package/dist/src/channels/telegram-mirror/askuser.js +0 -1
  3. package/dist/src/channels/telegram-mirror/burst-accumulator.js +0 -1
  4. package/dist/src/channels/telegram-mirror/callback-mapping.js +0 -1
  5. package/dist/src/channels/telegram-mirror/card-renderer.js +63 -21
  6. package/dist/src/channels/telegram-mirror/card-state.js +0 -1
  7. package/dist/src/channels/telegram-mirror/commands.js +0 -1
  8. package/dist/src/channels/telegram-mirror/compose-buffer.js +0 -1
  9. package/dist/src/channels/telegram-mirror/cost-views.js +0 -1
  10. package/dist/src/channels/telegram-mirror/failure/callback-data-overflow.js +0 -1
  11. package/dist/src/channels/telegram-mirror/failure/gateway-down.js +0 -1
  12. package/dist/src/channels/telegram-mirror/failure/in-flight-conflict.js +0 -1
  13. package/dist/src/channels/telegram-mirror/failure/index.js +0 -1
  14. package/dist/src/channels/telegram-mirror/failure/model-5xx.js +0 -1
  15. package/dist/src/channels/telegram-mirror/failure/network-blip.js +0 -1
  16. package/dist/src/channels/telegram-mirror/failure/pool-exhausted-fallback.js +0 -1
  17. package/dist/src/channels/telegram-mirror/failure/rate-limit.js +0 -1
  18. package/dist/src/channels/telegram-mirror/failure/returning-after-24h.js +0 -1
  19. package/dist/src/channels/telegram-mirror/failure/types.js +0 -1
  20. package/dist/src/channels/telegram-mirror/inbound-handler.js +0 -1
  21. package/dist/src/channels/telegram-mirror/index.js +0 -1
  22. package/dist/src/channels/telegram-mirror/plan-attachment.js +0 -1
  23. package/dist/src/channels/telegram-mirror/quota-reader.js +0 -1
  24. package/dist/src/channels/telegram-mirror/sessions-keyboard.js +0 -1
  25. package/dist/src/channels/telegram-mirror/soak-log.js +0 -1
  26. package/dist/src/channels/telegram-mirror/state-machine.js +21 -2
  27. package/dist/src/channels/telegram-mirror/status-line.js +0 -1
  28. package/dist/src/channels/telegram-mirror/sync-commands.js +0 -1
  29. package/dist/src/channels/telegram-mirror/threshold-watcher.js +0 -1
  30. package/dist/src/channels/telegram-mirror/turn-bridge.js +21 -2
  31. package/dist/src/cli/checks/bridge-wiring.js +0 -1
  32. package/dist/src/cli/checks/config-schema.js +0 -1
  33. package/dist/src/cli/checks/critical-openclaw-json-keys.js +0 -1
  34. package/dist/src/cli/checks/install-path.js +0 -1
  35. package/dist/src/cli/checks/patch-scaffold.js +0 -1
  36. package/dist/src/cli/doctor.js +0 -1
  37. package/dist/src/cli/index.js +0 -1
  38. package/dist/src/cli/migrate.js +0 -1
  39. package/dist/src/command-router/cc-handler.js +0 -1
  40. package/dist/src/command-router/index.js +0 -1
  41. package/dist/src/command-router/launch-policy.js +0 -1
  42. package/dist/src/command-router/resume-policy.js +0 -1
  43. package/dist/src/command-router/turn-formatter.js +0 -1
  44. package/dist/src/config/drift-detector.js +0 -1
  45. package/dist/src/config/loader.js +0 -1
  46. package/dist/src/config/schema.js +0 -1
  47. package/dist/src/constants.js +0 -1
  48. package/dist/src/council/build-agent-prompt.js +0 -1
  49. package/dist/src/council/cleanup-worktrees.js +0 -1
  50. package/dist/src/council/consensus.js +0 -1
  51. package/dist/src/council/council.js +0 -1
  52. package/dist/src/council/index.js +0 -1
  53. package/dist/src/council/system-prompt.js +0 -1
  54. package/dist/src/council/write-worktree-claude-md.js +0 -1
  55. package/dist/src/engines/base-oneshot-session.js +0 -1
  56. package/dist/src/engines/heartbeat-guard.js +0 -1
  57. package/dist/src/engines/index.js +0 -1
  58. package/dist/src/engines/persistent-codex-session.js +0 -1
  59. package/dist/src/engines/persistent-cursor-session.js +0 -1
  60. package/dist/src/engines/persistent-custom-session.js +0 -1
  61. package/dist/src/engines/persistent-gemini-session.js +0 -1
  62. package/dist/src/engines/persistent-session.js +30 -1
  63. package/dist/src/engines/resolve-bin.js +0 -1
  64. package/dist/src/engines/subprocess-pool.js +0 -1
  65. package/dist/src/health/handler.js +0 -1
  66. package/dist/src/health/index.js +0 -1
  67. package/dist/src/health/metrics.js +0 -1
  68. package/dist/src/index.js +0 -1
  69. package/dist/src/lib/auto-recovery.js +0 -1
  70. package/dist/src/lib/cache-parity.js +0 -1
  71. package/dist/src/lib/circuit-breaker.js +0 -1
  72. package/dist/src/lib/config-service.js +0 -1
  73. package/dist/src/lib/config.js +0 -1
  74. package/dist/src/lib/cost-rollup.js +0 -1
  75. package/dist/src/lib/debounce.js +0 -1
  76. package/dist/src/lib/debug-tap.js +0 -1
  77. package/dist/src/lib/domain-error.js +0 -1
  78. package/dist/src/lib/drift-detector.js +0 -1
  79. package/dist/src/lib/env-overrides.js +0 -1
  80. package/dist/src/lib/error-formatter.js +0 -1
  81. package/dist/src/lib/error-renderer.js +0 -1
  82. package/dist/src/lib/heartbeat-config.js +0 -1
  83. package/dist/src/lib/heartbeat-workaround.js +0 -1
  84. package/dist/src/lib/http-agent.js +0 -1
  85. package/dist/src/lib/index.js +0 -1
  86. package/dist/src/lib/json-array.js +0 -1
  87. package/dist/src/lib/markdown-to-mdv2.js +0 -1
  88. package/dist/src/lib/markdown-v2.js +0 -1
  89. package/dist/src/lib/perf/async-compact.js +0 -1
  90. package/dist/src/lib/perf/direct-sdk.js +0 -1
  91. package/dist/src/lib/perf/haiku-route.js +0 -1
  92. package/dist/src/lib/perf/predictive-continuation.js +0 -1
  93. package/dist/src/lib/perf/read-batch.js +0 -1
  94. package/dist/src/lib/perf/skill-list-collapse.js +0 -1
  95. package/dist/src/lib/perf/speculative-bubble.js +0 -1
  96. package/dist/src/lib/perf/typing-prefetch.js +0 -1
  97. package/dist/src/lib/register-guard.js +0 -1
  98. package/dist/src/lib/req-shape-log.js +0 -1
  99. package/dist/src/lib/safe-upstream-probes.js +0 -1
  100. package/dist/src/lib/session-registry.js +0 -1
  101. package/dist/src/lib/spawn-async.js +0 -1
  102. package/dist/src/lib/stale-pid-files.js +0 -1
  103. package/dist/src/lib/status-tee-reader.js +0 -1
  104. package/dist/src/lib/sysprompt-strip.js +0 -1
  105. package/dist/src/lib/telegram-bot-api.js +0 -1
  106. package/dist/src/lib/telemetry.js +0 -1
  107. package/dist/src/lib/test-mode.js +0 -1
  108. package/dist/src/lib/trajectory.js +0 -1
  109. package/dist/src/lib/vendor-paths.js +0 -1
  110. package/dist/src/lifecycle/boot.js +0 -1
  111. package/dist/src/lifecycle/patch-manifest.js +0 -1
  112. package/dist/src/lifecycle/phase-import-upstream.js +0 -1
  113. package/dist/src/lifecycle/phase-install-patches.js +0 -1
  114. package/dist/src/lifecycle/phase-schedule-jobs.js +0 -1
  115. package/dist/src/lifecycle/phase-start-server.js +0 -1
  116. package/dist/src/lifecycle/phase-validate-config.js +0 -1
  117. package/dist/src/lifecycle/phase-validate-upstream.js +0 -1
  118. package/dist/src/lifecycle/phase-wire-handlers.js +0 -1
  119. package/dist/src/lifecycle/safe-restart.js +0 -1
  120. package/dist/src/logger.js +0 -1
  121. package/dist/src/mcp/bridge.js +0 -1
  122. package/dist/src/mcp/index.js +0 -1
  123. package/dist/src/models.js +0 -1
  124. package/dist/src/observability/event-bus.js +0 -1
  125. package/dist/src/observability/get-event-bus.js +0 -1
  126. package/dist/src/observability/observability-service.js +0 -1
  127. package/dist/src/observability/perf-telemetry.js +0 -1
  128. package/dist/src/observability/subscribers/metrics.js +0 -1
  129. package/dist/src/observability/subscribers/session-capture.js +0 -1
  130. package/dist/src/openai-compat/bridges/allowlist.js +0 -1
  131. package/dist/src/openai-compat/bridges/factory.js +0 -1
  132. package/dist/src/openai-compat/bridges/media-bridge.js +0 -1
  133. package/dist/src/openai-compat/bridges/openclaw-api-shim.js +0 -1
  134. package/dist/src/openai-compat/bridges/openclaw-native-tools.js +0 -1
  135. package/dist/src/openai-compat/bridges/openclaw-tool-registry.js +0 -1
  136. package/dist/src/openai-compat/bridges/tts-media-bridge.js +0 -1
  137. package/dist/src/openai-compat/cli-stream-parser.js +0 -1
  138. package/dist/src/openai-compat/index.js +0 -1
  139. package/dist/src/openai-compat/message-extractor.js +0 -1
  140. package/dist/src/openai-compat/mode-flags.js +0 -1
  141. package/dist/src/openai-compat/non-streaming-handler.js +4 -2
  142. package/dist/src/openai-compat/openai-chunk-types.js +0 -1
  143. package/dist/src/openai-compat/openai-compat.js +0 -1
  144. package/dist/src/openai-compat/openai-types.js +0 -1
  145. package/dist/src/openai-compat/parse-route-body.js +0 -1
  146. package/dist/src/openai-compat/prompts.js +0 -1
  147. package/dist/src/openai-compat/response-formatter.js +0 -1
  148. package/dist/src/openai-compat/session-key-resolver.js +0 -1
  149. package/dist/src/openai-compat/skill-resolver.js +0 -1
  150. package/dist/src/openai-compat/sse-translator.js +0 -1
  151. package/dist/src/openai-compat/status-reporter.js +0 -1
  152. package/dist/src/openai-compat/streaming-handler.js +6 -2
  153. package/dist/src/openai-compat/tool-calls-parser.js +0 -1
  154. package/dist/src/openai-compat/tool-results-serializer.js +0 -1
  155. package/dist/src/openai-compat/tts-rule.js +0 -1
  156. package/dist/src/openai-compat/voice-recovery.js +0 -1
  157. package/dist/src/patches/cache-parity-registry.js +0 -1
  158. package/dist/src/patches/claude-md-injection.js +0 -1
  159. package/dist/src/patches/cwd-redirect.js +0 -1
  160. package/dist/src/patches/embedded-server-route.js +0 -1
  161. package/dist/src/patches/pricing-overrides.js +0 -1
  162. package/dist/src/patches/resume-registry-restore.js +0 -1
  163. package/dist/src/patches/session-pid-tracking.js +0 -1
  164. package/dist/src/patches/sysprompt-strip.js +0 -1
  165. package/dist/src/patches/tools-restoration.js +0 -1
  166. package/dist/src/persistence/migration-v0.js +0 -1
  167. package/dist/src/persistence/session-registry.js +0 -1
  168. package/dist/src/persistence/snapshot.js +0 -1
  169. package/dist/src/persistence/wal.js +0 -1
  170. package/dist/src/proxy/anthropic-adapter.js +0 -1
  171. package/dist/src/proxy/handler.js +0 -1
  172. package/dist/src/proxy/index.js +0 -1
  173. package/dist/src/proxy/schema-cleaner.js +0 -1
  174. package/dist/src/proxy/thought-cache.js +0 -1
  175. package/dist/src/session/embedded-server.js +0 -1
  176. package/dist/src/session/inbox-manager.js +0 -1
  177. package/dist/src/session/index.js +0 -1
  178. package/dist/src/session/persisted-sessions.js +0 -1
  179. package/dist/src/session/session-manager.js +0 -1
  180. package/dist/src/session/watchdogs.js +0 -1
  181. package/dist/src/session-bootstrap/boot-self-heal.js +0 -1
  182. package/dist/src/session-bootstrap/cwd-patch.js +0 -1
  183. package/dist/src/session-bootstrap/index.js +0 -1
  184. package/dist/src/session-bootstrap/resume-registry.js +0 -1
  185. package/dist/src/session-bootstrap/session-hygiene.js +0 -1
  186. package/dist/src/session-bootstrap/sysprompt-strip.js +0 -1
  187. package/dist/src/session-bootstrap/think-conflict-resolver.js +0 -1
  188. package/dist/src/types/index.js +0 -1
  189. package/dist/src/types/route.js +0 -1
  190. package/dist/src/types/runtime-config.js +0 -1
  191. package/dist/src/types/session.js +0 -1
  192. package/dist/src/types/sse.js +0 -1
  193. package/dist/src/types/tool-bridge.js +0 -1
  194. package/dist/src/types/upstream.js +0 -1
  195. package/dist/src/types.js +0 -1
  196. package/dist/src/validation.js +0 -1
  197. package/package.json +1 -1
  198. package/dist/src/channels/adapter.js.map +0 -1
  199. package/dist/src/channels/telegram/card-renderer.d.ts +0 -80
  200. package/dist/src/channels/telegram/card-renderer.js +0 -169
  201. package/dist/src/channels/telegram/card-renderer.js.map +0 -1
  202. package/dist/src/channels/telegram/completion-summary.d.ts +0 -21
  203. package/dist/src/channels/telegram/completion-summary.js +0 -218
  204. package/dist/src/channels/telegram/completion-summary.js.map +0 -1
  205. package/dist/src/channels/telegram/edit-cadence.d.ts +0 -37
  206. package/dist/src/channels/telegram/edit-cadence.js +0 -50
  207. package/dist/src/channels/telegram/edit-cadence.js.map +0 -1
  208. package/dist/src/channels/telegram/error-renderer.d.ts +0 -29
  209. package/dist/src/channels/telegram/error-renderer.js +0 -133
  210. package/dist/src/channels/telegram/error-renderer.js.map +0 -1
  211. package/dist/src/channels/telegram/event-reducer.d.ts +0 -33
  212. package/dist/src/channels/telegram/event-reducer.js +0 -647
  213. package/dist/src/channels/telegram/event-reducer.js.map +0 -1
  214. package/dist/src/channels/telegram/format-helpers.d.ts +0 -20
  215. package/dist/src/channels/telegram/format-helpers.js +0 -34
  216. package/dist/src/channels/telegram/format-helpers.js.map +0 -1
  217. package/dist/src/channels/telegram/index.d.ts +0 -13
  218. package/dist/src/channels/telegram/index.js +0 -14
  219. package/dist/src/channels/telegram/index.js.map +0 -1
  220. package/dist/src/channels/telegram/injector.d.ts +0 -53
  221. package/dist/src/channels/telegram/injector.js +0 -271
  222. package/dist/src/channels/telegram/injector.js.map +0 -1
  223. package/dist/src/channels/telegram/insight-formatter.d.ts +0 -36
  224. package/dist/src/channels/telegram/insight-formatter.js +0 -36
  225. package/dist/src/channels/telegram/insight-formatter.js.map +0 -1
  226. package/dist/src/channels/telegram/live-card.d.ts +0 -185
  227. package/dist/src/channels/telegram/live-card.js +0 -868
  228. package/dist/src/channels/telegram/live-card.js.map +0 -1
  229. package/dist/src/channels/telegram/logger.d.ts +0 -10
  230. package/dist/src/channels/telegram/logger.js +0 -13
  231. package/dist/src/channels/telegram/logger.js.map +0 -1
  232. package/dist/src/channels/telegram/result-preview.d.ts +0 -12
  233. package/dist/src/channels/telegram/result-preview.js +0 -48
  234. package/dist/src/channels/telegram/result-preview.js.map +0 -1
  235. package/dist/src/channels/telegram/speculative-bubble.d.ts +0 -33
  236. package/dist/src/channels/telegram/speculative-bubble.js +0 -42
  237. package/dist/src/channels/telegram/speculative-bubble.js.map +0 -1
  238. package/dist/src/channels/telegram/state-machine.d.ts +0 -22
  239. package/dist/src/channels/telegram/state-machine.js +0 -72
  240. package/dist/src/channels/telegram/state-machine.js.map +0 -1
  241. package/dist/src/channels/telegram/throttle-controller.d.ts +0 -88
  242. package/dist/src/channels/telegram/throttle-controller.js +0 -203
  243. package/dist/src/channels/telegram/throttle-controller.js.map +0 -1
  244. package/dist/src/channels/telegram/tool-tracker.d.ts +0 -149
  245. package/dist/src/channels/telegram/tool-tracker.js +0 -578
  246. package/dist/src/channels/telegram/tool-tracker.js.map +0 -1
  247. package/dist/src/channels/telegram-mirror/askuser.js.map +0 -1
  248. package/dist/src/channels/telegram-mirror/burst-accumulator.js.map +0 -1
  249. package/dist/src/channels/telegram-mirror/callback-mapping.js.map +0 -1
  250. package/dist/src/channels/telegram-mirror/card-renderer.js.map +0 -1
  251. package/dist/src/channels/telegram-mirror/card-state.js.map +0 -1
  252. package/dist/src/channels/telegram-mirror/commands.js.map +0 -1
  253. package/dist/src/channels/telegram-mirror/compose-buffer.js.map +0 -1
  254. package/dist/src/channels/telegram-mirror/cost-views.js.map +0 -1
  255. package/dist/src/channels/telegram-mirror/failure/callback-data-overflow.js.map +0 -1
  256. package/dist/src/channels/telegram-mirror/failure/gateway-down.js.map +0 -1
  257. package/dist/src/channels/telegram-mirror/failure/in-flight-conflict.js.map +0 -1
  258. package/dist/src/channels/telegram-mirror/failure/index.js.map +0 -1
  259. package/dist/src/channels/telegram-mirror/failure/model-5xx.js.map +0 -1
  260. package/dist/src/channels/telegram-mirror/failure/network-blip.js.map +0 -1
  261. package/dist/src/channels/telegram-mirror/failure/pool-exhausted-fallback.js.map +0 -1
  262. package/dist/src/channels/telegram-mirror/failure/rate-limit.js.map +0 -1
  263. package/dist/src/channels/telegram-mirror/failure/returning-after-24h.js.map +0 -1
  264. package/dist/src/channels/telegram-mirror/failure/types.js.map +0 -1
  265. package/dist/src/channels/telegram-mirror/inbound-handler.js.map +0 -1
  266. package/dist/src/channels/telegram-mirror/index.js.map +0 -1
  267. package/dist/src/channels/telegram-mirror/plan-attachment.js.map +0 -1
  268. package/dist/src/channels/telegram-mirror/quota-reader.js.map +0 -1
  269. package/dist/src/channels/telegram-mirror/sessions-keyboard.js.map +0 -1
  270. package/dist/src/channels/telegram-mirror/soak-log.js.map +0 -1
  271. package/dist/src/channels/telegram-mirror/state-machine.js.map +0 -1
  272. package/dist/src/channels/telegram-mirror/status-line.js.map +0 -1
  273. package/dist/src/channels/telegram-mirror/sync-commands.js.map +0 -1
  274. package/dist/src/channels/telegram-mirror/threshold-watcher.js.map +0 -1
  275. package/dist/src/channels/telegram-mirror/turn-bridge.js.map +0 -1
  276. package/dist/src/cli/checks/bridge-wiring.js.map +0 -1
  277. package/dist/src/cli/checks/config-schema.js.map +0 -1
  278. package/dist/src/cli/checks/critical-openclaw-json-keys.js.map +0 -1
  279. package/dist/src/cli/checks/install-path.js.map +0 -1
  280. package/dist/src/cli/checks/patch-scaffold.js.map +0 -1
  281. package/dist/src/cli/doctor.js.map +0 -1
  282. package/dist/src/cli/index.js.map +0 -1
  283. package/dist/src/cli/migrate.js.map +0 -1
  284. package/dist/src/command-router/cc-handler.js.map +0 -1
  285. package/dist/src/command-router/index.js.map +0 -1
  286. package/dist/src/command-router/launch-policy.js.map +0 -1
  287. package/dist/src/command-router/resume-policy.js.map +0 -1
  288. package/dist/src/command-router/turn-formatter.js.map +0 -1
  289. package/dist/src/config/drift-detector.js.map +0 -1
  290. package/dist/src/config/loader.js.map +0 -1
  291. package/dist/src/config/schema.js.map +0 -1
  292. package/dist/src/constants.js.map +0 -1
  293. package/dist/src/council/build-agent-prompt.js.map +0 -1
  294. package/dist/src/council/cleanup-worktrees.js.map +0 -1
  295. package/dist/src/council/consensus.js.map +0 -1
  296. package/dist/src/council/council.js.map +0 -1
  297. package/dist/src/council/index.js.map +0 -1
  298. package/dist/src/council/system-prompt.js.map +0 -1
  299. package/dist/src/council/write-worktree-claude-md.js.map +0 -1
  300. package/dist/src/engines/base-oneshot-session.js.map +0 -1
  301. package/dist/src/engines/heartbeat-guard.js.map +0 -1
  302. package/dist/src/engines/index.js.map +0 -1
  303. package/dist/src/engines/persistent-codex-session.js.map +0 -1
  304. package/dist/src/engines/persistent-cursor-session.js.map +0 -1
  305. package/dist/src/engines/persistent-custom-session.js.map +0 -1
  306. package/dist/src/engines/persistent-gemini-session.js.map +0 -1
  307. package/dist/src/engines/persistent-session.js.map +0 -1
  308. package/dist/src/engines/resolve-bin.js.map +0 -1
  309. package/dist/src/engines/subprocess-pool.js.map +0 -1
  310. package/dist/src/health/handler.js.map +0 -1
  311. package/dist/src/health/index.js.map +0 -1
  312. package/dist/src/health/metrics.js.map +0 -1
  313. package/dist/src/index.js.map +0 -1
  314. package/dist/src/lib/auto-recovery.js.map +0 -1
  315. package/dist/src/lib/cache-parity.js.map +0 -1
  316. package/dist/src/lib/circuit-breaker.js.map +0 -1
  317. package/dist/src/lib/config-service.js.map +0 -1
  318. package/dist/src/lib/config.js.map +0 -1
  319. package/dist/src/lib/cost-rollup.js.map +0 -1
  320. package/dist/src/lib/debounce.js.map +0 -1
  321. package/dist/src/lib/debug-tap.js.map +0 -1
  322. package/dist/src/lib/domain-error.js.map +0 -1
  323. package/dist/src/lib/drift-detector.js.map +0 -1
  324. package/dist/src/lib/env-overrides.js.map +0 -1
  325. package/dist/src/lib/error-formatter.js.map +0 -1
  326. package/dist/src/lib/error-renderer.js.map +0 -1
  327. package/dist/src/lib/heartbeat-config.js.map +0 -1
  328. package/dist/src/lib/heartbeat-workaround.js.map +0 -1
  329. package/dist/src/lib/http-agent.js.map +0 -1
  330. package/dist/src/lib/index.js.map +0 -1
  331. package/dist/src/lib/json-array.js.map +0 -1
  332. package/dist/src/lib/markdown-to-mdv2.js.map +0 -1
  333. package/dist/src/lib/markdown-v2.js.map +0 -1
  334. package/dist/src/lib/perf/async-compact.js.map +0 -1
  335. package/dist/src/lib/perf/direct-sdk.js.map +0 -1
  336. package/dist/src/lib/perf/haiku-route.js.map +0 -1
  337. package/dist/src/lib/perf/predictive-continuation.js.map +0 -1
  338. package/dist/src/lib/perf/read-batch.js.map +0 -1
  339. package/dist/src/lib/perf/skill-list-collapse.js.map +0 -1
  340. package/dist/src/lib/perf/speculative-bubble.js.map +0 -1
  341. package/dist/src/lib/perf/typing-prefetch.js.map +0 -1
  342. package/dist/src/lib/register-guard.js.map +0 -1
  343. package/dist/src/lib/req-shape-log.js.map +0 -1
  344. package/dist/src/lib/safe-upstream-probes.js.map +0 -1
  345. package/dist/src/lib/session-registry.js.map +0 -1
  346. package/dist/src/lib/spawn-async.js.map +0 -1
  347. package/dist/src/lib/stale-pid-files.js.map +0 -1
  348. package/dist/src/lib/status-tee-reader.js.map +0 -1
  349. package/dist/src/lib/sysprompt-strip.js.map +0 -1
  350. package/dist/src/lib/telegram-bot-api.js.map +0 -1
  351. package/dist/src/lib/telemetry.js.map +0 -1
  352. package/dist/src/lib/test-mode.js.map +0 -1
  353. package/dist/src/lib/trajectory.js.map +0 -1
  354. package/dist/src/lib/vendor-paths.js.map +0 -1
  355. package/dist/src/lifecycle/boot.js.map +0 -1
  356. package/dist/src/lifecycle/patch-manifest.js.map +0 -1
  357. package/dist/src/lifecycle/phase-import-upstream.js.map +0 -1
  358. package/dist/src/lifecycle/phase-install-patches.js.map +0 -1
  359. package/dist/src/lifecycle/phase-schedule-jobs.js.map +0 -1
  360. package/dist/src/lifecycle/phase-start-server.js.map +0 -1
  361. package/dist/src/lifecycle/phase-validate-config.js.map +0 -1
  362. package/dist/src/lifecycle/phase-validate-upstream.js.map +0 -1
  363. package/dist/src/lifecycle/phase-wire-handlers.js.map +0 -1
  364. package/dist/src/lifecycle/safe-restart.js.map +0 -1
  365. package/dist/src/logger.js.map +0 -1
  366. package/dist/src/mcp/bridge.js.map +0 -1
  367. package/dist/src/mcp/index.js.map +0 -1
  368. package/dist/src/models.js.map +0 -1
  369. package/dist/src/observability/event-bus.js.map +0 -1
  370. package/dist/src/observability/get-event-bus.js.map +0 -1
  371. package/dist/src/observability/observability-service.js.map +0 -1
  372. package/dist/src/observability/perf-telemetry.js.map +0 -1
  373. package/dist/src/observability/subscribers/metrics.js.map +0 -1
  374. package/dist/src/observability/subscribers/session-capture.js.map +0 -1
  375. package/dist/src/openai-compat/bridges/allowlist.js.map +0 -1
  376. package/dist/src/openai-compat/bridges/factory.js.map +0 -1
  377. package/dist/src/openai-compat/bridges/media-bridge.js.map +0 -1
  378. package/dist/src/openai-compat/bridges/openclaw-api-shim.js.map +0 -1
  379. package/dist/src/openai-compat/bridges/openclaw-native-tools.js.map +0 -1
  380. package/dist/src/openai-compat/bridges/openclaw-tool-registry.js.map +0 -1
  381. package/dist/src/openai-compat/bridges/tts-media-bridge.js.map +0 -1
  382. package/dist/src/openai-compat/cli-stream-parser.js.map +0 -1
  383. package/dist/src/openai-compat/index.js.map +0 -1
  384. package/dist/src/openai-compat/message-extractor.js.map +0 -1
  385. package/dist/src/openai-compat/mode-flags.js.map +0 -1
  386. package/dist/src/openai-compat/non-streaming-handler.js.map +0 -1
  387. package/dist/src/openai-compat/openai-chunk-types.js.map +0 -1
  388. package/dist/src/openai-compat/openai-compat.js.map +0 -1
  389. package/dist/src/openai-compat/openai-types.js.map +0 -1
  390. package/dist/src/openai-compat/parse-route-body.js.map +0 -1
  391. package/dist/src/openai-compat/prompts.js.map +0 -1
  392. package/dist/src/openai-compat/response-formatter.js.map +0 -1
  393. package/dist/src/openai-compat/session-key-resolver.js.map +0 -1
  394. package/dist/src/openai-compat/skill-resolver.js.map +0 -1
  395. package/dist/src/openai-compat/sse-translator.js.map +0 -1
  396. package/dist/src/openai-compat/status-reporter.js.map +0 -1
  397. package/dist/src/openai-compat/streaming-handler.js.map +0 -1
  398. package/dist/src/openai-compat/tool-calls-parser.js.map +0 -1
  399. package/dist/src/openai-compat/tool-results-serializer.js.map +0 -1
  400. package/dist/src/openai-compat/tts-rule.js.map +0 -1
  401. package/dist/src/openai-compat/voice-recovery.js.map +0 -1
  402. package/dist/src/patches/cache-parity-registry.js.map +0 -1
  403. package/dist/src/patches/claude-md-injection.js.map +0 -1
  404. package/dist/src/patches/cwd-redirect.js.map +0 -1
  405. package/dist/src/patches/embedded-server-route.js.map +0 -1
  406. package/dist/src/patches/pricing-overrides.js.map +0 -1
  407. package/dist/src/patches/resume-registry-restore.js.map +0 -1
  408. package/dist/src/patches/session-pid-tracking.js.map +0 -1
  409. package/dist/src/patches/sysprompt-strip.js.map +0 -1
  410. package/dist/src/patches/sysprompt-strip.spec.d.ts +0 -33
  411. package/dist/src/patches/sysprompt-strip.spec.js +0 -53
  412. package/dist/src/patches/sysprompt-strip.spec.js.map +0 -1
  413. package/dist/src/patches/tools-restoration.js.map +0 -1
  414. package/dist/src/persistence/migration-v0.js.map +0 -1
  415. package/dist/src/persistence/session-registry.js.map +0 -1
  416. package/dist/src/persistence/snapshot.js.map +0 -1
  417. package/dist/src/persistence/wal.js.map +0 -1
  418. package/dist/src/proxy/anthropic-adapter.js.map +0 -1
  419. package/dist/src/proxy/handler.js.map +0 -1
  420. package/dist/src/proxy/index.js.map +0 -1
  421. package/dist/src/proxy/schema-cleaner.js.map +0 -1
  422. package/dist/src/proxy/thought-cache.js.map +0 -1
  423. package/dist/src/session/embedded-server.js.map +0 -1
  424. package/dist/src/session/inbox-manager.js.map +0 -1
  425. package/dist/src/session/index.js.map +0 -1
  426. package/dist/src/session/persisted-sessions.js.map +0 -1
  427. package/dist/src/session/session-manager.js.map +0 -1
  428. package/dist/src/session/watchdogs.js.map +0 -1
  429. package/dist/src/session-bootstrap/boot-self-heal.js.map +0 -1
  430. package/dist/src/session-bootstrap/cwd-patch.js.map +0 -1
  431. package/dist/src/session-bootstrap/index.js.map +0 -1
  432. package/dist/src/session-bootstrap/resume-registry.js.map +0 -1
  433. package/dist/src/session-bootstrap/session-hygiene.js.map +0 -1
  434. package/dist/src/session-bootstrap/sysprompt-strip.js.map +0 -1
  435. package/dist/src/session-bootstrap/think-conflict-resolver.js.map +0 -1
  436. package/dist/src/types/index.js.map +0 -1
  437. package/dist/src/types/route.js.map +0 -1
  438. package/dist/src/types/runtime-config.js.map +0 -1
  439. package/dist/src/types/session.js.map +0 -1
  440. package/dist/src/types/sse.js.map +0 -1
  441. package/dist/src/types/tool-bridge.js.map +0 -1
  442. package/dist/src/types/upstream.js.map +0 -1
  443. package/dist/src/types.js.map +0 -1
  444. package/dist/src/validation.js.map +0 -1
@@ -1,647 +0,0 @@
1
- /**
2
- * telegram event-reducer β€” TypeScript port of savvy-claude-code/ux-bridge.js
3
- *
4
- * Central register() that wires all remaining api.on() hooks:
5
- * before_dispatch Γ—4 β€” /quota command, /sessions command, claude-local UX
6
- * feed, callback_query routing
7
- * before_model_resolve β€” per-chat model override (F5)
8
- * before_tool_call β€” Stage 4 gateway UX metadata injection
9
- * MiniMax usage tracking (before_dispatch)
10
- *
11
- * Depends on: live-card, tool-tracker, completion-summary, state-machine
12
- * (all must be registered before or alongside this module).
13
- *
14
- * Source lines: 1042–1615 of ux-bridge.js
15
- */
16
- import { createRequire } from 'node:module';
17
- import { getUxBridgeAllSessions } from '../../lib/config.js';
18
- import { telegramApi, UX_MODULE_PATH, activeSessions, recentlyFinishedSessions, _logger, buttonHandler, nsCommands, } from './live-card.js';
19
- import { activeSavvyCards, activeSavvyChatIds, verbosityCtrl, savvyButtons, renderSavvyCard, generateNextSteps, } from './tool-tracker.js';
20
- import { defaultRegisterGuard } from '../../lib/register-guard.js';
21
- import { isTestMode } from '../../lib/test-mode.js';
22
- const __require = createRequire(import.meta.url);
23
- // ── Constants ─────────────────────────────────────────────────────────────
24
- const PLUGIN_TAG = '[cc-openclaw/telegram/event-reducer]';
25
- const MODEL_PREF_STORE_PATH = '/home/a1xai/.openclaw/workspace/config/chat-model-prefs.json';
26
- let ChatModelPrefs;
27
- try {
28
- ({ ChatModelPrefs } = __require(`${UX_MODULE_PATH}/chat-model-prefs`));
29
- }
30
- catch {
31
- ChatModelPrefs = class {
32
- load() {
33
- /* no-op stub */
34
- }
35
- cycle(_chatId) {
36
- return { emoji: 'πŸ€–', label: 'default' };
37
- }
38
- get(_chatId) {
39
- return null;
40
- }
41
- };
42
- }
43
- const chatModelPrefs = new ChatModelPrefs(MODEL_PREF_STORE_PATH);
44
- if (!isTestMode()) {
45
- chatModelPrefs.load();
46
- }
47
- function cycleChatModel(chatId) { return chatModelPrefs.cycle(chatId); }
48
- function getChatModel(chatId) { return chatModelPrefs.get(chatId); }
49
- // ── Helpers ───────────────────────────────────────────────────────────────
50
- // `_fmtReset` and `_pct` extracted to `./format-helpers.ts` 2026-05-13 β€”
51
- // first hot-path-adjacent decomposition; pure functions, behavior preserved.
52
- import { fmtReset as _fmtReset, fmtPct as _pct } from './format-helpers.js';
53
- // ── register() ────────────────────────────────────────────────────────────
54
- /**
55
- * Register all event-reducer hooks (command dispatch, model override,
56
- * callback routing, Stage 4 injection).
57
- * Idempotent β€” subsequent calls are no-ops.
58
- */
59
- export function register(api) {
60
- const logger = api.logger || _logger;
61
- defaultRegisterGuard.guard('channels/telegram/event-reducer', api, () => {
62
- // ── /quota command ────────────────────────────────────────────────────
63
- api.on('before_dispatch', (event) => {
64
- const ev = event;
65
- if (ev.channel !== 'telegram')
66
- return;
67
- const msg = ev.raw?.message;
68
- const text = msg?.text;
69
- if (typeof text !== 'string')
70
- return;
71
- const cmd = text.trim().toLowerCase().split(/\s+/)[0];
72
- if (cmd !== '/quota' && !cmd.startsWith('/quota@'))
73
- return;
74
- const tgChatId = String(msg?.chat?.id || '');
75
- const threadId = msg?.message_thread_id;
76
- if (!tgChatId)
77
- return;
78
- (async () => {
79
- let body;
80
- try {
81
- const { QuotaFetcher } = __require(`${UX_MODULE_PATH}/quota-fetcher`);
82
- const fetcher = new QuotaFetcher();
83
- const quota = await fetcher.fetch();
84
- if (!quota) {
85
- body = '⚠️ No quota data available\n(OAuth token missing or endpoint unreachable)';
86
- }
87
- else {
88
- const lines = ['πŸ“Š Plan quota'];
89
- lines.push(`⚑ Current session ${_pct(quota.fiveHour?.usedPercent)}${_fmtReset(quota.fiveHour?.resetsAt)}`);
90
- lines.push(`πŸ“… Week Β· all ${_pct(quota.sevenDay?.usedPercent)}${_fmtReset(quota.sevenDay?.resetsAt)}`);
91
- if (quota.sevenDaySonnet?.usedPercent != null) {
92
- lines.push(`✨ Week · Sonnet ${_pct(quota.sevenDaySonnet.usedPercent)}`);
93
- }
94
- if (quota.sevenDayOpus?.usedPercent != null) {
95
- lines.push(`πŸ’« Week Β· Opus ${_pct(quota.sevenDayOpus.usedPercent)}`);
96
- }
97
- if (quota.extraUsage) {
98
- if (quota.extraUsage.isEnabled === false) {
99
- lines.push('πŸ’³ Extra usage: not enabled');
100
- }
101
- else if (typeof quota.extraUsage.usedCredits === 'number'
102
- && typeof quota.extraUsage.monthlyLimit === 'number') {
103
- const used = (quota.extraUsage.usedCredits / 100).toFixed(2);
104
- const cap = (quota.extraUsage.monthlyLimit / 100).toFixed(0);
105
- const sym = quota.extraUsage.currency === 'USD' ? '$' : '';
106
- lines.push(`πŸ’³ Extra usage: ${sym}${used} / ${sym}${cap}`);
107
- }
108
- }
109
- lines.push(`\nsource: ${quota.source || 'unknown'}`);
110
- body = lines.join('\n');
111
- }
112
- }
113
- catch (err) {
114
- body = `⚠️ /quota failed: ${err.message}`;
115
- }
116
- telegramApi('sendMessage', {
117
- chat_id: tgChatId,
118
- text: body,
119
- ...(threadId ? { message_thread_id: Number(threadId) } : {}),
120
- }).catch((e) => logger.warn(`${PLUGIN_TAG} /quota reply failed: ${e.message}`));
121
- logger.info(`${PLUGIN_TAG} /quota: chat=${tgChatId}`);
122
- })();
123
- return { handled: true };
124
- });
125
- // ── /sessions command ─────────────────────────────────────────────────
126
- api.on('before_dispatch', (event) => {
127
- const ev = event;
128
- if (ev.channel !== 'telegram')
129
- return;
130
- const msg = ev.raw?.message;
131
- const text = msg?.text;
132
- if (typeof text !== 'string')
133
- return;
134
- const cmd = text.trim().toLowerCase().split(/\s+/)[0];
135
- if (cmd !== '/sessions' && !cmd.startsWith('/sessions@'))
136
- return;
137
- const tgChatId = String(msg?.chat?.id || '');
138
- const threadId = msg?.message_thread_id;
139
- if (!tgChatId)
140
- return;
141
- const rows = [];
142
- const now = Date.now();
143
- for (const [sessionName, entry] of activeSessions) {
144
- const qChat = String(entry.queue?.chatId || '');
145
- if (qChat !== tgChatId)
146
- continue;
147
- const state = entry.pipeline?._cardState?.getState?.();
148
- const elapsedSec = Math.round((state?.elapsedMs || (now - (state?.startedAt || now))) / 1000);
149
- const toolCount = state?.toolCount ?? 0;
150
- const status = state?.status || 'working';
151
- const pretty = sessionName.startsWith('openai-')
152
- ? `Savvy ${sessionName.slice(7, 17)}…`
153
- : sessionName;
154
- rows.push(`β€’ ${pretty} β€” ${status} Β· ${toolCount} tools Β· ${elapsedSec}s`);
155
- }
156
- const summary = rows.length === 0
157
- ? 'No active sessions in this chat.'
158
- : `Active sessions (${rows.length}):\n${rows.join('\n')}`;
159
- telegramApi('sendMessage', {
160
- chat_id: tgChatId,
161
- text: summary,
162
- ...(threadId ? { message_thread_id: Number(threadId) } : {}),
163
- }).catch((e) => logger.warn(`${PLUGIN_TAG} /sessions reply failed: ${e.message}`));
164
- logger.info(`${PLUGIN_TAG} /sessions: chat=${tgChatId} rows=${rows.length}`);
165
- return { handled: true };
166
- });
167
- // ── F5: per-chat model override ───────────────────────────────────────
168
- api.on('before_model_resolve', (_event, ctx) => {
169
- const ctxObj = ctx;
170
- const sk = ctxObj?.sessionKey || '';
171
- const m = sk.match(/telegram:direct:(-?\d+)/)
172
- || sk.match(/telegram:group:(-?\d+)(?::topic:\d+)?/);
173
- const chatId = m ? m[1] : null;
174
- if (!chatId)
175
- return;
176
- const pref = getChatModel(chatId);
177
- if (pref?.id) {
178
- return { modelOverride: pref.id };
179
- }
180
- });
181
- // ── MiniMax usage tracking ────────────────────────────────────────────
182
- try {
183
- const { MiniMaxUsageTracker } = __require(`${UX_MODULE_PATH}/minimax-usage`);
184
- // minimaxTracker is a module-level singleton in live-card.ts; we set it via
185
- // the exported reference. For now store locally β€” live-card reads it via its
186
- // own module-level var which is separate. TODO(P2): unify via setter export.
187
- if (isTestMode()) {
188
- logger.info(`${PLUGIN_TAG} TEST_MODE=1 β€” skipping MiniMax usage tracker initialization (I/O)`);
189
- }
190
- else {
191
- const minimaxTrackerLocal = new MiniMaxUsageTracker('/tmp/minimax-usage.json');
192
- logger.info(`${PLUGIN_TAG} MiniMax usage tracker initialized`);
193
- api.on('before_dispatch', (event) => {
194
- const ev = event;
195
- if (ev.channel !== 'telegram')
196
- return;
197
- if (ev.raw?.callback_query)
198
- return;
199
- if (['minimax', 'minimax-portal'].includes(ev.provider ?? '')) {
200
- minimaxTrackerLocal.recordRequest();
201
- }
202
- });
203
- } // end else (not test mode)
204
- }
205
- catch (err) {
206
- logger.warn(`${PLUGIN_TAG} MiniMax tracker not available: ${err.message}`);
207
- }
208
- // ── claude-local UX feeder ────────────────────────────────────────────
209
- api.on('before_dispatch', (event, ctx) => {
210
- const ev = event;
211
- const ctxObj = ctx;
212
- if (ev.channel !== 'telegram' && ev.channel !== 'discord')
213
- return;
214
- const sk = ev.sessionKey || ctxObj?.sessionKey || '';
215
- const tgMatch = sk.match(/(?:telegram|discord):[^:]+:(-?\d+)(?::topic:(\d+))?/);
216
- if (!tgMatch)
217
- return;
218
- const chatId = tgMatch[1];
219
- const threadId = tgMatch[2] || undefined;
220
- const PENDING_CHAT_QUEUE = Symbol.for('claude-local-ux:pending-chat');
221
- if (!globalThis[PENDING_CHAT_QUEUE]) {
222
- globalThis[PENDING_CHAT_QUEUE] = [];
223
- }
224
- globalThis[PENDING_CHAT_QUEUE].push({
225
- chatId,
226
- threadId,
227
- origMessageId: undefined,
228
- ts: Date.now(),
229
- });
230
- const cutoff = Date.now() - 30000;
231
- const queue = globalThis[PENDING_CHAT_QUEUE];
232
- while (queue.length && queue[0].ts < cutoff) {
233
- queue.shift();
234
- }
235
- logger.info(`${PLUGIN_TAG} [ux-feed] queued chat=${chatId} thread=${threadId || 'none'} channel=${ev.channel}`);
236
- });
237
- // ── Callback query handler (inline keyboard button presses) ──────────
238
- // Async since v0.19 β€” the 'diff' branch lazily imports node:child_process
239
- // (await import) so the typescript build doesn't pull child_process at
240
- // module load. api.on contract accepts Promise<unknown> returns.
241
- api.on('before_dispatch', async (event) => {
242
- const ev = event;
243
- if (ev.channel !== 'telegram')
244
- return;
245
- const cbq = ev.raw?.callback_query;
246
- if (!cbq)
247
- return;
248
- // Re-read buttonHandler from live-card (may be set after register() call)
249
- const bh = buttonHandler;
250
- if (!bh)
251
- return;
252
- // ── Try Savvy card button (sv: prefix) ────────────────────────────
253
- const savvyParsed = bh.parseSavvyCallback?.(cbq.data);
254
- if (savvyParsed) {
255
- const { action, sessionKey } = savvyParsed;
256
- const entry = activeSavvyCards?.get(sessionKey);
257
- const answerId = cbq.id;
258
- if (!entry) {
259
- if (answerId) {
260
- telegramApi('answerCallbackQuery', {
261
- callback_query_id: answerId,
262
- text: 'Card expired',
263
- }).catch((e) => logger.error(`${PLUGIN_TAG} answerCallbackQuery error: ${e.message}`));
264
- }
265
- return { handled: true };
266
- }
267
- logger.info(`${PLUGIN_TAG} Savvy button: ${action} on sessionKey=${sessionKey}`);
268
- if (action === 'cancel') {
269
- entry.cancelled = true;
270
- if (entry._bridgeCleanup) {
271
- entry._bridgeCleanup();
272
- entry._bridgeCleanup = null;
273
- }
274
- entry.state.markCancelled();
275
- if (entry._stallTimer)
276
- clearInterval(entry._stallTimer);
277
- if (entry._typingInterval) {
278
- clearInterval(entry._typingInterval);
279
- entry._typingInterval = null;
280
- }
281
- if (entry._pendingEdit?.timer) {
282
- clearTimeout(entry._pendingEdit.timer);
283
- entry._pendingEdit = null;
284
- }
285
- entry._lastEditAt = 0;
286
- if (generateNextSteps) {
287
- const steps = generateNextSteps(entry.state.getState());
288
- entry.state.setNextSteps(steps);
289
- }
290
- const cancelState = entry.state.getState();
291
- const _render = renderSavvyCard;
292
- if (_render) {
293
- const cardText = _render(cancelState);
294
- const markup = savvyButtons(cancelState, sessionKey, entry.chatId);
295
- entry.queue.updateCard(cardText, markup);
296
- }
297
- activeSavvyChatIds.delete(entry.chatId);
298
- const cancelQueue = entry.queue;
299
- setTimeout(() => {
300
- const elapsedSec = Math.round((cancelState.elapsedMs || 0) / 1000);
301
- const collapsed = `πŸ›‘ *Savvy* β€” cancelled \\(${cancelState.toolCount ?? 0} tools, ${elapsedSec}s\\)`;
302
- cancelQueue.updateCard(collapsed, { inline_keyboard: [] });
303
- }, 20000);
304
- const cancelChatId = entry.chatId;
305
- const cancelMsgId = entry.queue._replyToMessageId;
306
- if (cancelMsgId) {
307
- setTimeout(() => {
308
- telegramApi('deleteMessage', {
309
- chat_id: cancelChatId,
310
- message_id: cancelMsgId,
311
- }).catch(() => { });
312
- }, 5 * 60 * 1000);
313
- }
314
- activeSavvyCards.delete(sessionKey);
315
- }
316
- if (action === 'quiet') {
317
- if (verbosityCtrl && entry.chatId) {
318
- const chatKey = `telegram:${entry.chatId}`;
319
- const newLevel = verbosityCtrl.cycleLevel(chatKey);
320
- const emoji = verbosityCtrl.getLevelEmoji(chatKey);
321
- const label = verbosityCtrl.getLevelLabel(chatKey);
322
- if (answerId) {
323
- telegramApi('answerCallbackQuery', {
324
- callback_query_id: answerId,
325
- text: `${emoji} Verbosity: ${label}`,
326
- }).catch((e) => logger.error(`${PLUGIN_TAG} answerCallbackQuery error: ${e.message}`));
327
- }
328
- logger.info(`${PLUGIN_TAG} Savvy quiet: cycled to ${newLevel} for chat=${entry.chatId}`);
329
- return { handled: true };
330
- }
331
- }
332
- if (action === 'nudge') {
333
- if (entry.state.stalled) {
334
- entry.state.clearStall();
335
- entry.state.lastActivityAt = Date.now();
336
- const _render = renderSavvyCard;
337
- if (entry._initialSent && _render) {
338
- const cardText = _render(entry.state.getState());
339
- const markup = savvyButtons(entry.state.getState(), sessionKey, entry.chatId);
340
- entry.queue.updateCard(cardText, markup);
341
- }
342
- }
343
- if (answerId) {
344
- telegramApi('answerCallbackQuery', {
345
- callback_query_id: answerId,
346
- text: 'πŸ‘‹ Nudged β€” stall cleared',
347
- }).catch((e) => logger.error(`${PLUGIN_TAG} answerCallbackQuery error: ${e.message}`));
348
- }
349
- return { handled: true };
350
- }
351
- if (action === 'details') {
352
- const s = entry.state.getState();
353
- const elapsed = ((s.elapsedMs ?? 0) / 1000).toFixed(1);
354
- const detailLines = [
355
- s.model ? `Model: ${s.model}` : null,
356
- `Tools: ${s.toolCount ?? 0} Β· Errors: ${s.errorCount ?? 0}`,
357
- `Elapsed: ${elapsed}s`,
358
- s.stalled ? '⚠️ Stalled' : null,
359
- s.qualityScore ? `${s.qualityScore.emoji} ${s.qualityScore.label}` : null,
360
- s.currentTool ? `Current: ${s.currentTool}` : null,
361
- ].filter((l) => l != null);
362
- const toolLog = s.toolLog ?? [];
363
- if (toolLog.length > 0) {
364
- detailLines.push('');
365
- toolLog.slice(-5).forEach(t => {
366
- const dur = (t.durationMs / 1000).toFixed(1);
367
- const err = t.error ? ' ❌' : '';
368
- detailLines.push(` ${t.tool} (${dur}s)${err}`);
369
- });
370
- }
371
- const filesModified = s.filesModified;
372
- if (filesModified && filesModified.length > 0) {
373
- detailLines.push(`Files: ${filesModified.slice(0, 8).join(', ')}`);
374
- }
375
- const popupText = detailLines.join('\n').slice(0, 195);
376
- if (answerId) {
377
- telegramApi('answerCallbackQuery', {
378
- callback_query_id: answerId,
379
- text: popupText,
380
- show_alert: true,
381
- }).catch((e) => logger.error(`${PLUGIN_TAG} answerCallbackQuery error: ${e.message}`));
382
- }
383
- return { handled: true };
384
- }
385
- // v0.19 β€” Diff-on-tap. Reads state.edits, prefers any cached diff,
386
- // falls back to `git diff --unified=3 -- <files>` capped at ~10 KB,
387
- // and replies as a follow-up message (avoids re-escaping the card
388
- // body for MarkdownV2 corruption).
389
- if (action === 'diff') {
390
- const s = entry.state.getState();
391
- const edits = s.edits || [];
392
- if (answerId) {
393
- telegramApi('answerCallbackQuery', {
394
- callback_query_id: answerId,
395
- text: edits.length === 0 ? 'πŸ“Ž No edits recorded' : 'πŸ“Ž Generating diff…',
396
- }).catch(() => { });
397
- }
398
- if (edits.length === 0)
399
- return { handled: true };
400
- const files = edits.map(e => e.path).filter((p) => !!p);
401
- let diff = edits.map(e => e.diff).filter((d) => !!d).join('\n');
402
- if (!diff && files.length > 0) {
403
- try {
404
- const cp = await import('node:child_process');
405
- diff = cp.execFileSync('git', ['diff', '--unified=3', '--', ...files], {
406
- cwd: process.cwd(),
407
- encoding: 'utf8',
408
- timeout: 5000,
409
- maxBuffer: 1024 * 1024,
410
- });
411
- }
412
- catch {
413
- diff = '';
414
- }
415
- }
416
- if (!diff || diff.trim().length === 0) {
417
- diff = `(no unified diff available)\n\nfiles touched:\n${files.map(f => ' ' + f).join('\n')}`;
418
- }
419
- const LIMIT = 10_000;
420
- if (diff.length > LIMIT) {
421
- diff = diff.slice(0, LIMIT - 100) + '\n[…truncated]';
422
- }
423
- const cardMsgId = entry.queue._replyToMessageId;
424
- telegramApi('sendMessage', {
425
- chat_id: entry.chatId,
426
- text: `πŸ“Ž git diff (${files.length} file${files.length === 1 ? '' : 's'})\n\n${diff}`,
427
- ...(cardMsgId ? { reply_to_message_id: cardMsgId, allow_sending_without_reply: true } : {}),
428
- }).catch((e) => logger.warn(`${PLUGIN_TAG} diff reply failed: ${e.message}`));
429
- return { handled: true };
430
- }
431
- // v0.19 β€” Steer button stubs. Pause / Plan / Inject answer with a
432
- // "coming in v0.19.1" toast. cc-openclaw runtime hooks land later.
433
- if (action === 'pause' || action === 'plan' || action === 'inject') {
434
- const stubText = action === 'pause'
435
- ? '⏸ Pause β€” coming in v0.19.1'
436
- : action === 'plan'
437
- ? 'πŸ“‹ Switch to Plan β€” coming in v0.19.1'
438
- : 'πŸ’‰ Inject prompt β€” coming in v0.19.1';
439
- if (answerId) {
440
- telegramApi('answerCallbackQuery', {
441
- callback_query_id: answerId,
442
- text: stubText,
443
- show_alert: true,
444
- }).catch(() => { });
445
- }
446
- return { handled: true };
447
- }
448
- if (answerId && action !== 'details') {
449
- telegramApi('answerCallbackQuery', {
450
- callback_query_id: answerId,
451
- text: action === 'cancel' ? 'πŸ›‘ Cancelled' : 'OK',
452
- }).catch((e) => logger.error(`${PLUGIN_TAG} answerCallbackQuery error: ${e.message}`));
453
- }
454
- return { handled: true };
455
- }
456
- // ── Try next-step button (ns: prefix) ──────────────────────────────
457
- const nsCallback = bh.parseNextStepCallback?.(cbq.data);
458
- if (nsCallback) {
459
- const nsChatId = cbq.message?.chat;
460
- const nsChatIdVal = nsChatId?.id;
461
- const nsThreadId = cbq.message?.message_thread_id;
462
- const command = nsCommands?.[nsCallback.action];
463
- if (command && nsChatIdVal) {
464
- telegramApi('sendMessage', {
465
- chat_id: nsChatIdVal,
466
- text: command,
467
- ...(nsThreadId ? { message_thread_id: Number(nsThreadId) } : {}),
468
- }).catch((e) => logger.error(`${PLUGIN_TAG} NS inject error: ${e.message}`));
469
- }
470
- if (cbq.id) {
471
- telegramApi('answerCallbackQuery', {
472
- callback_query_id: cbq.id,
473
- text: `Running ${command || nsCallback.action}...`,
474
- }).catch(() => { });
475
- }
476
- return { handled: true };
477
- }
478
- // ── Try CC session button (ux: prefix) ────────────────────────────
479
- const parsed = bh.parseCallback(cbq.data);
480
- if (!parsed)
481
- return;
482
- const { action, sessionId } = parsed;
483
- const session = activeSessions.get(sessionId) || recentlyFinishedSessions.get(sessionId);
484
- const answerId = cbq.id;
485
- if (!session) {
486
- logger.warn(`${PLUGIN_TAG} callback_query for unknown session: ${sessionId}`);
487
- if (answerId) {
488
- telegramApi('answerCallbackQuery', {
489
- callback_query_id: answerId,
490
- text: 'Session ended',
491
- }).catch((e) => logger.error(`${PLUGIN_TAG} answerCallbackQuery error: ${e.message}`));
492
- }
493
- return { handled: true };
494
- }
495
- const result = bh.handleAction(action, {
496
- sessionId,
497
- state: session.pipeline?._cardState?.getState?.(),
498
- pipeline: session.pipeline,
499
- });
500
- logger.info(`${PLUGIN_TAG} Button action: ${action} on session ${sessionId}`);
501
- if (action === 'cancel') {
502
- try {
503
- session.pipeline.abort();
504
- if (session.queue) {
505
- session.queue.sendMessage('πŸ›‘ Session cancelled via button');
506
- }
507
- }
508
- catch (err) {
509
- logger.warn(`${PLUGIN_TAG} Cancel action failed: ${err.message}`);
510
- }
511
- }
512
- if (action === 'quiet') {
513
- try {
514
- const newLevel = session.pipeline.cycleVerbosity();
515
- result.text = `πŸ”‡ Verbosity: ${newLevel}`;
516
- }
517
- catch (err) {
518
- logger.warn(`${PLUGIN_TAG} Quiet action failed: ${err.message}`);
519
- }
520
- }
521
- if (action === 'compact' && session.queue) {
522
- session.queue.sendMessage('πŸ“¦ Context compaction requested');
523
- }
524
- if (action === 'transcript' && session.queue) {
525
- try {
526
- const state = session.pipeline?._cardState?.getState?.();
527
- const transcript = bh.formatTranscript(state);
528
- session.queue.sendMessage(transcript);
529
- }
530
- catch (err) {
531
- logger.warn(`${PLUGIN_TAG} Transcript action failed: ${err.message}`);
532
- result.text = 'Transcript unavailable';
533
- }
534
- }
535
- if (action === 'verbose' && verbosityCtrl && session.queue?.chatId) {
536
- try {
537
- const chatKey = `telegram:${session.queue.chatId}`;
538
- verbosityCtrl.cycleLevel(chatKey);
539
- const emoji = verbosityCtrl.getLevelEmoji(chatKey);
540
- const label = verbosityCtrl.getLevelLabel(chatKey);
541
- result.text = `${emoji} Verbosity: ${label} (for this chat)`;
542
- }
543
- catch (err) {
544
- logger.warn(`${PLUGIN_TAG} Verbose toggle failed: ${err.message}`);
545
- }
546
- }
547
- if (action === 'model' && session.queue?.chatId) {
548
- try {
549
- const next = cycleChatModel(session.queue.chatId);
550
- result.text = `${next.emoji} Model: ${next.label} (applies to next turn in this chat)`;
551
- logger.info(`${PLUGIN_TAG} Model override for chat=${session.queue.chatId} β†’ ${next.id || 'default'}`);
552
- }
553
- catch (err) {
554
- logger.warn(`${PLUGIN_TAG} Model cycle failed: ${err.message}`);
555
- }
556
- }
557
- if (action === 'continue' && session.queue?.chatId) {
558
- const chatId = String(session.queue.chatId);
559
- const chatType = cbq.message?.chat;
560
- const chatTypeVal = chatType?.type;
561
- const threadIdVal = cbq.message?.message_thread_id;
562
- let sessionKey;
563
- if (chatTypeVal === 'group' || chatTypeVal === 'supergroup') {
564
- sessionKey = threadIdVal != null
565
- ? `agent:main:telegram:group:${chatId}:topic:${threadIdVal}`
566
- : `agent:main:telegram:group:${chatId}`;
567
- }
568
- else {
569
- sessionKey = `agent:main:telegram:direct:${chatId}`;
570
- }
571
- const runSubagent = api?.runtime?.subagent?.run;
572
- if (typeof runSubagent === 'function') {
573
- runSubagent({
574
- sessionKey,
575
- message: 'keep going',
576
- deliver: true,
577
- idempotencyKey: `continue:${sessionId}:${Date.now()}`,
578
- }).then((r) => {
579
- logger.info(`${PLUGIN_TAG} Continue: dispatched runId=${r?.runId} for chat=${chatId}`);
580
- }).catch((err) => {
581
- logger.warn(`${PLUGIN_TAG} Continue dispatch failed: ${err.message}`);
582
- telegramApi('sendMessage', {
583
- chat_id: chatId,
584
- text: `⚠️ Continue failed: ${err.message?.slice(0, 150) || 'unknown'}`,
585
- }).catch(() => { });
586
- });
587
- result.text = 'πŸ” Continuing… (dispatched)';
588
- }
589
- else {
590
- result.text = 'πŸ” Continue unavailable (subagent runtime missing)';
591
- logger.warn(`${PLUGIN_TAG} Continue: api.runtime.subagent.run not available`);
592
- }
593
- }
594
- if (answerId) {
595
- if (action === 'details' && result.text) {
596
- telegramApi('answerCallbackQuery', {
597
- callback_query_id: answerId,
598
- text: result.text,
599
- show_alert: true,
600
- }).catch((e) => logger.error(`${PLUGIN_TAG} answerCallbackQuery error: ${e.message}`));
601
- }
602
- else {
603
- telegramApi('answerCallbackQuery', {
604
- callback_query_id: answerId,
605
- text: result.text || '',
606
- }).catch((e) => logger.error(`${PLUGIN_TAG} answerCallbackQuery error: ${e.message}`));
607
- }
608
- }
609
- return { handled: true };
610
- });
611
- // ── Stage 4: Gateway-level UX metadata injection ──────────────────────
612
- api.on('before_tool_call', (event, ctx) => {
613
- const ev = event;
614
- const ctxObj = ctx;
615
- if (ev.toolName !== 'claude_session_send')
616
- return;
617
- if (!getUxBridgeAllSessions())
618
- return;
619
- if (ev.params?.telegramChatId)
620
- return;
621
- const sk = ctxObj.sessionKey || '';
622
- const tgMatch = sk.match(/telegram:[^:]+:(-?\d+)(?::topic:(\d+))?/);
623
- if (!tgMatch)
624
- return;
625
- const chatId = tgMatch[1];
626
- const threadId = tgMatch[2] || undefined;
627
- const sessionName = ev.params?.name;
628
- logger.info(`${PLUGIN_TAG} [stage4] injecting UX metadata chatId=${chatId} threadId=${threadId || 'none'} session=${sessionName || '?'}`);
629
- if (sessionName && typeof sessionName === 'string') {
630
- const UX_META = Symbol.for('telegram-ux-bridge:metadata');
631
- if (!globalThis[UX_META]) {
632
- globalThis[UX_META] = new Map();
633
- }
634
- (globalThis[UX_META]).set(sessionName, { chatId, threadId, storedAt: Date.now() });
635
- }
636
- return {
637
- params: {
638
- ...ev.params,
639
- telegramChatId: chatId,
640
- telegramThreadId: threadId,
641
- },
642
- };
643
- });
644
- logger.info(`${PLUGIN_TAG} event-reducer hooks registered (dispatch commands, model override, callbacks, stage4)`);
645
- }); // end defaultRegisterGuard.guard
646
- }
647
- //# sourceMappingURL=event-reducer.js.map