@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
@@ -35,4 +35,3 @@
35
35
  export function registerChannelAdapter(api, adapter) {
36
36
  adapter.register(api);
37
37
  }
38
- //# sourceMappingURL=adapter.js.map
@@ -271,4 +271,3 @@ export function _resetAskUserForTests() {
271
271
  export function _pendingCount() {
272
272
  return _questions.size;
273
273
  }
274
- //# sourceMappingURL=askuser.js.map
@@ -127,4 +127,3 @@ export class BurstAccumulator {
127
127
  return session.pending.map((p) => p.text).join(this.separator);
128
128
  }
129
129
  }
130
- //# sourceMappingURL=burst-accumulator.js.map
@@ -96,4 +96,3 @@ export class CallbackMap {
96
96
  return base36.padStart(this.idLength, '0').slice(0, this.idLength);
97
97
  }
98
98
  }
99
- //# sourceMappingURL=callback-mapping.js.map
@@ -14,6 +14,24 @@
14
14
  * Tests live at tests/channels/telegram-mirror/m2-render-pipeline.test.ts.
15
15
  */
16
16
  import { renderStatusLine, renderMeters, renderTodos } from './status-line.js';
17
+ import { escapeMarkdownV2 } from '../../lib/markdown-v2.js';
18
+ import { markdownToMdv2 } from '../../lib/markdown-to-mdv2.js';
19
+ /**
20
+ * Wrap raw text in a Telegram MarkdownV2 inline code span. Inside a code span
21
+ * only backtick and backslash need escaping (dots, hyphens, slashes render
22
+ * literally) — which is exactly why monospace is ideal for file paths and shell
23
+ * commands: no busy backslash-escaping, and they read like the CC terminal.
24
+ */
25
+ function code(s) {
26
+ return '`' + s.replace(/[`\\]/g, '\\$&') + '`';
27
+ }
28
+ /** Last path segment (basename) — keeps tool lines short and CLI-like, e.g.
29
+ * "/home/a1/kris-kitchen/components/ShoppingList.tsx" → "ShoppingList.tsx". */
30
+ function basename(p) {
31
+ const cleaned = p.replace(/\/+$/, '');
32
+ const idx = cleaned.lastIndexOf('/');
33
+ return idx >= 0 ? cleaned.slice(idx + 1) : cleaned;
34
+ }
17
35
  /**
18
36
  * Glyph picked per tool-call status. Mirrors terminal "running / done /
19
37
  * errored" iconography that A1 already reads in the live Claude Code TUI.
@@ -28,25 +46,32 @@ function toolGlyph(tc) {
28
46
  /**
29
47
  * Render the input argument summary for a tool call. Kept tight — full
30
48
  * input is in the result; the mirror line is meant to read at a glance.
49
+ * Returns RAW (unescaped) text; the caller wraps it in a code span.
50
+ *
51
+ * v0.26.5: collapse embedded whitespace/newlines to single spaces (a
52
+ * multi-line Bash command used to spill across several card rows), prefer the
53
+ * basename for file paths (shorter + CLI-like), and truncate with a single "…".
31
54
  */
32
55
  function toolInputSummary(tc) {
33
56
  const input = tc.input;
34
57
  if (!input || typeof input !== 'object')
35
58
  return '';
36
- // Prefer common single-field shapes used by Bash/Read/Edit/Write.
37
- const single = typeof input.command === 'string'
59
+ // Prefer common single-field shapes used by Bash/Read/Edit/Write/Grep/Glob.
60
+ const raw = typeof input.command === 'string'
38
61
  ? input.command
39
62
  : typeof input.file_path === 'string'
40
- ? input.file_path
63
+ ? basename(input.file_path)
41
64
  : typeof input.path === 'string'
42
- ? input.path
43
- : typeof input.url === 'string'
44
- ? input.url
45
- : '';
46
- if (single) {
47
- return single.length > 60 ? single.slice(0, 57) + '...' : single;
48
- }
49
- return '';
65
+ ? basename(input.path)
66
+ : typeof input.pattern === 'string'
67
+ ? input.pattern
68
+ : typeof input.url === 'string'
69
+ ? input.url
70
+ : '';
71
+ if (!raw)
72
+ return '';
73
+ const collapsed = raw.replace(/\s+/g, ' ').trim();
74
+ return collapsed.length > 48 ? collapsed.slice(0, 47) + '…' : collapsed;
50
75
  }
51
76
  /**
52
77
  * Format one tool-call line for inclusion in the rendered card body.
@@ -87,8 +112,11 @@ export function toolIcon(name) {
87
112
  export function renderToolLine(tc) {
88
113
  const glyph = toolGlyph(tc);
89
114
  const icon = toolIcon(tc.name);
115
+ // Status glyph + emoji are MarkdownV2-safe; the tool name is escaped and the
116
+ // input detail rides in a monospace code span (v0.26.5 styling).
117
+ const name = escapeMarkdownV2(tc.name);
90
118
  const summary = toolInputSummary(tc);
91
- return summary ? `${glyph} ${icon} ${tc.name} · ${summary}` : `${glyph} ${icon} ${tc.name}`;
119
+ return summary ? `${glyph} ${icon} ${name} · ${code(summary)}` : `${glyph} ${icon} ${name}`;
92
120
  }
93
121
  /**
94
122
  * Render the thinking block (M6). Each line of the thinking text is
@@ -100,8 +128,11 @@ export function renderThinkingBlock(thinkingText) {
100
128
  const trimmed = thinkingText.trim();
101
129
  if (trimmed.length === 0)
102
130
  return '';
103
- const lines = trimmed.split('\n');
104
- return ['💭 Thinking', ...lines.map((l) => `> ${l}`)].join('\n');
131
+ // MarkdownV2 block quote: a leading ">" makes the line a quote; the line
132
+ // content is escaped so reasoning punctuation can't break the parse. The
133
+ // space after ">" is cosmetic (reads as an indented quote, terminal-style).
134
+ const lines = trimmed.split('\n').map((l) => `> ${escapeMarkdownV2(l)}`);
135
+ return ['💭 Thinking', ...lines].join('\n');
105
136
  }
106
137
  /**
107
138
  * Render the full turn into a Telegram-safe message body. The mirror keeps
@@ -133,18 +164,24 @@ export function renderTurn(turn, meta) {
133
164
  // handler calls setCardMeta(), the status line appears on the next repaint.
134
165
  if (meta) {
135
166
  const status = renderStatusLine(turn, meta);
167
+ // v0.26.5 — bold the status line (the card header). Escaped first so the
168
+ // model/version dots and brackets don't break the MarkdownV2 parse.
136
169
  if (status)
137
- lines.push(status);
170
+ lines.push('*' + escapeMarkdownV2(status) + '*');
138
171
  // v0.26.2 M2 — meter row (context % + quota % + reset). Same no-fake-data
139
- // gating: omitted unless real values are present.
172
+ // gating: omitted unless real values are present. Escaped (the bars/% are
173
+ // safe but the escape is harmless and keeps the line parse-proof).
140
174
  const meters = renderMeters(meta);
141
175
  if (meters)
142
- lines.push(meters);
176
+ lines.push(escapeMarkdownV2(meters));
143
177
  // v0.26.4 styling — divider between the status/telemetry block and the
144
- // activity block (only when a status block was actually rendered).
178
+ // activity block (only when a status block was actually rendered). The
179
+ // heavy-bar glyph is not a MarkdownV2 special, so it needs no escaping.
145
180
  if (lines.length > 0)
146
181
  lines.push('━━━━━━━━━━━━');
147
182
  }
183
+ // Turn-status header. Kept plain (the glyph + word carry no MarkdownV2
184
+ // specials) so it reads cleanly above the tool stream, terminal-style.
148
185
  const header = turn.state === 'done' ? '✓ Done' : '▶ Working';
149
186
  lines.push(header);
150
187
  if (turn.toolCalls.length > 0) {
@@ -153,10 +190,12 @@ export function renderTurn(turn, meta) {
153
190
  }
154
191
  }
155
192
  // v0.26.2 M4 — todo checklist (real data from the agent's TodoWrite calls).
193
+ // Escaped as a block (glyphs are safe; content + the "+N more" plus sign are
194
+ // not, so the whole block goes through the escaper).
156
195
  const todoBlock = renderTodos(meta);
157
196
  if (todoBlock) {
158
197
  lines.push('');
159
- lines.push(todoBlock);
198
+ lines.push(escapeMarkdownV2(todoBlock));
160
199
  }
161
200
  // Defensive default — Turn.thinkingText is required by the interface, but
162
201
  // some test helpers and pre-M6 fixtures construct Turn-shaped objects
@@ -169,7 +208,11 @@ export function renderTurn(turn, meta) {
169
208
  const text = turn.assistantText.trim();
170
209
  if (text.length > 0) {
171
210
  lines.push('');
172
- lines.push(text);
211
+ // v0.26.5 — render the model's markdown as Telegram MarkdownV2 with
212
+ // structure preserved (**bold**→*bold*, `code`, fences) instead of dumping
213
+ // raw text whose unescaped specials forced the whole card to the plain-text
214
+ // fallback. markdownToMdv2 escapes all remaining content per the MDV2 spec.
215
+ lines.push(markdownToMdv2(text));
173
216
  }
174
217
  return lines.join('\n');
175
218
  }
@@ -185,4 +228,3 @@ export function planRenderAction(turn, knownMessageId) {
185
228
  }
186
229
  return { type: 'edit', chatId: turn.chatId, text, messageId: knownMessageId };
187
230
  }
188
- //# sourceMappingURL=card-renderer.js.map
@@ -46,4 +46,3 @@ export const cardState = _g[CARD_STATE_KEY] ?? (_g[CARD_STATE_KEY] = new Map());
46
46
  export function cardStateDebug() {
47
47
  return `cards=${cardState.size}`;
48
48
  }
49
- //# sourceMappingURL=card-state.js.map
@@ -386,4 +386,3 @@ export function dispatchCommand(parsed, ctxBase) {
386
386
  return undefined;
387
387
  return handler({ ...ctxBase, args: parsed.args });
388
388
  }
389
- //# sourceMappingURL=commands.js.map
@@ -107,4 +107,3 @@ export class ComposeBuffer {
107
107
  return this.now() - session.startedAt > this.timeoutMs;
108
108
  }
109
109
  }
110
- //# sourceMappingURL=compose-buffer.js.map
@@ -118,4 +118,3 @@ export function createStatusTeeQuotaReader(reader = readStatusTeeQuotaSnapshot)
118
118
  },
119
119
  };
120
120
  }
121
- //# sourceMappingURL=cost-views.js.map
@@ -27,4 +27,3 @@ export const handle = (ctx, info) => {
27
27
  },
28
28
  ];
29
29
  };
30
- //# sourceMappingURL=callback-data-overflow.js.map
@@ -24,4 +24,3 @@ export const handle = (ctx, info) => {
24
24
  ];
25
25
  return actions;
26
26
  };
27
- //# sourceMappingURL=gateway-down.js.map
@@ -24,4 +24,3 @@ export const handle = (ctx, info) => {
24
24
  },
25
25
  ];
26
26
  };
27
- //# sourceMappingURL=in-flight-conflict.js.map
@@ -32,4 +32,3 @@ export const FAILURE_MODULES = [
32
32
  * to fire a handler by name.
33
33
  */
34
34
  export const FAILURE_BY_MODE = Object.fromEntries(FAILURE_MODULES.map((m) => [m.META.mode, m]));
35
- //# sourceMappingURL=index.js.map
@@ -21,4 +21,3 @@ export const handle = (ctx, info) => {
21
21
  },
22
22
  ];
23
23
  };
24
- //# sourceMappingURL=model-5xx.js.map
@@ -22,4 +22,3 @@ export const handle = (ctx, info) => {
22
22
  },
23
23
  ];
24
24
  };
25
- //# sourceMappingURL=network-blip.js.map
@@ -21,4 +21,3 @@ export const handle = (ctx, info) => {
21
21
  },
22
22
  ];
23
23
  };
24
- //# sourceMappingURL=pool-exhausted-fallback.js.map
@@ -23,4 +23,3 @@ export const handle = (ctx, info) => {
23
23
  },
24
24
  ];
25
25
  };
26
- //# sourceMappingURL=rate-limit.js.map
@@ -30,4 +30,3 @@ export const handle = (ctx, info) => {
30
30
  },
31
31
  ];
32
32
  };
33
- //# sourceMappingURL=returning-after-24h.js.map
@@ -6,4 +6,3 @@
6
6
  * shared types so the 8 handler modules stay tight (each ~30-50 lines).
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=types.js.map
@@ -484,4 +484,3 @@ export function registerInboundHandler(api, state = createHandlerState()) {
484
484
  process.stderr.write(`${PLUGIN_TAG} subscribed to before_dispatch — ${MIRROR_COMMANDS.size} commands armed.\n`);
485
485
  return state;
486
486
  }
487
- //# sourceMappingURL=inbound-handler.js.map
@@ -89,4 +89,3 @@ export function register(api) {
89
89
  }
90
90
  });
91
91
  }
92
- //# sourceMappingURL=index.js.map
@@ -135,4 +135,3 @@ export class RejectFeedbackTracker {
135
135
  export function formatApprovePayload(planId) {
136
136
  return `<plan approved: ${planId}>`;
137
137
  }
138
- //# sourceMappingURL=plan-attachment.js.map
@@ -26,4 +26,3 @@ export const stubQuotaReader = {
26
26
  };
27
27
  },
28
28
  };
29
- //# sourceMappingURL=quota-reader.js.map
@@ -110,4 +110,3 @@ export function assertCallbackDataBudget(keyboard) {
110
110
  }
111
111
  }
112
112
  }
113
- //# sourceMappingURL=sessions-keyboard.js.map
@@ -133,4 +133,3 @@ export class SoakLogger {
133
133
  return out;
134
134
  }
135
135
  }
136
- //# sourceMappingURL=soak-log.js.map
@@ -52,10 +52,30 @@ export class TurnStateMachine {
52
52
  if (turn.state !== 'working')
53
53
  return turn;
54
54
  if (event.type === 'tool_use') {
55
+ const id = event.id ?? event.tool_use_id ?? '';
56
+ // Dedup by tool-use id. claude.exe emits each tool_use TWICE — once at
57
+ // `content_block_start` with empty input, then again in the aggregate
58
+ // `assistant` message with the fully-assembled input. Both fires carry
59
+ // the same block id. Without this guard the card shows every tool twice
60
+ // (a bare line + a detailed line), doubles the 🔧 count, and the
61
+ // tool_result `.find()` below resolves only the FIRST record so the
62
+ // detailed line never flips … → ✓. Merge the richer payload into the
63
+ // existing record instead of pushing a duplicate.
64
+ if (id) {
65
+ const existing = turn.toolCalls.find((tc) => tc.toolUseId === id);
66
+ if (existing) {
67
+ const incoming = event.tool?.input;
68
+ if (incoming && Object.keys(incoming).length > 0)
69
+ existing.input = incoming;
70
+ if (existing.name === 'Unknown' && event.tool?.name)
71
+ existing.name = event.tool.name;
72
+ return turn;
73
+ }
74
+ }
55
75
  turn.toolCalls.push({
56
76
  name: event.tool?.name ?? 'Unknown',
57
77
  input: event.tool?.input ?? {},
58
- toolUseId: event.id ?? event.tool_use_id ?? '',
78
+ toolUseId: id,
59
79
  });
60
80
  return turn;
61
81
  }
@@ -114,4 +134,3 @@ export class TurnStateMachine {
114
134
  this.turns.delete(chatId);
115
135
  }
116
136
  }
117
- //# sourceMappingURL=state-machine.js.map
@@ -165,4 +165,3 @@ export function renderTodos(meta) {
165
165
  lines.push(` +${todos.length - TODO_MAX} more`);
166
166
  return lines.join('\n');
167
167
  }
168
- //# sourceMappingURL=status-line.js.map
@@ -48,4 +48,3 @@ export async function syncMyCommands(opts) {
48
48
  export function _resetSyncedForTests() {
49
49
  synced = false;
50
50
  }
51
- //# sourceMappingURL=sync-commands.js.map
@@ -74,4 +74,3 @@ export class ThresholdWatcher {
74
74
  return this.thresholds;
75
75
  }
76
76
  }
77
- //# sourceMappingURL=threshold-watcher.js.map
@@ -30,6 +30,13 @@ import { editTg } from '../../lib/telegram-bot-api.js';
30
30
  import { readQuotaSnapshot } from '../../lib/status-tee-reader.js';
31
31
  import { captureAskUserQuestion } from './askuser.js';
32
32
  const _lastRepaintAt = new Map();
33
+ // v0.26.5: per-chat in-flight guard. repaint() is called fire-and-forget
34
+ // (`void repaint(...)`) from every push, so two edits for the same card could
35
+ // otherwise overlap — racing Telegram's editMessageText and provoking 429 /
36
+ // "message is not modified" churn (the "fragile" feel). Skipping while an edit
37
+ // is in flight is safe because finalizeActiveCards() always does a final
38
+ // authoritative render at turn end, so no state is lost.
39
+ const _inFlight = new Set();
33
40
  const REPAINT_MIN_MS = 800;
34
41
  async function repaint(chatId, force) {
35
42
  const card = cardState.get(chatId);
@@ -42,7 +49,10 @@ async function repaint(chatId, force) {
42
49
  const last = _lastRepaintAt.get(chatId) ?? 0;
43
50
  if (!force && now - last < REPAINT_MIN_MS)
44
51
  return;
52
+ if (_inFlight.has(chatId))
53
+ return;
45
54
  _lastRepaintAt.set(chatId, now);
55
+ _inFlight.add(chatId);
46
56
  try {
47
57
  await editTg(chatId, card.messageId, renderTurn(turn, card.meta));
48
58
  }
@@ -52,6 +62,9 @@ async function repaint(chatId, force) {
52
62
  process.stderr.write(`[cc-openclaw/turn-bridge] repaint failed chat=${chatId}: ${m}\n`);
53
63
  }
54
64
  }
65
+ finally {
66
+ _inFlight.delete(chatId);
67
+ }
55
68
  }
56
69
  function activeChatIds() {
57
70
  return Array.from(cardState.keys());
@@ -123,6 +136,12 @@ export function pushToolUse(name, input, toolUseId) {
123
136
  void captureAskUserQuestion(chatId, cardState.get(chatId)?.threadId, input, toolUseId);
124
137
  }
125
138
  }
139
+ // v0.26.5: claude.exe fires tool_use twice — once with empty input, once with
140
+ // the full input (state-machine dedups by id). Force the immediate repaint
141
+ // only on the full-input fire; the empty-input fire takes a throttled repaint.
142
+ // Halves the edit volume per tool without losing the "line appears instantly"
143
+ // feel (the bare line still shows on the first throttle-permitted repaint).
144
+ const hasInput = !!input && Object.keys(input).length > 0;
126
145
  for (const chatId of chats) {
127
146
  const card = cardState.get(chatId);
128
147
  if (!card)
@@ -134,7 +153,7 @@ export function pushToolUse(name, input, toolUseId) {
134
153
  id,
135
154
  tool: { name, input: input ?? {} },
136
155
  });
137
- void repaint(chatId, /* force */ true);
156
+ void repaint(chatId, /* force */ hasInput);
138
157
  }
139
158
  }
140
159
  /** Parse a TodoWrite tool_use input into the CardMeta todos shape, or undefined
@@ -261,5 +280,5 @@ export async function finalizeActiveCards() {
261
280
  */
262
281
  export function _resetBridgeForTests() {
263
282
  _lastRepaintAt.clear();
283
+ _inFlight.clear();
264
284
  }
265
- //# sourceMappingURL=turn-bridge.js.map
@@ -61,4 +61,3 @@ export async function checkBridgeWiring() {
61
61
  },
62
62
  };
63
63
  }
64
- //# sourceMappingURL=bridge-wiring.js.map
@@ -48,4 +48,3 @@ export function checkConfigSchema() {
48
48
  };
49
49
  }
50
50
  }
51
- //# sourceMappingURL=config-schema.js.map
@@ -103,4 +103,3 @@ export function checkCriticalOpenclawJsonKeys() {
103
103
  },
104
104
  };
105
105
  }
106
- //# sourceMappingURL=critical-openclaw-json-keys.js.map
@@ -86,4 +86,3 @@ export function checkInstallPath(selfVersion = SELF_VERSION) {
86
86
  },
87
87
  };
88
88
  }
89
- //# sourceMappingURL=install-path.js.map
@@ -53,4 +53,3 @@ export async function checkPatchScaffold() {
53
53
  };
54
54
  }
55
55
  }
56
- //# sourceMappingURL=patch-scaffold.js.map
@@ -90,4 +90,3 @@ export function createDoctorCommand() {
90
90
  });
91
91
  return cmd;
92
92
  }
93
- //# sourceMappingURL=doctor.js.map
@@ -36,4 +36,3 @@ program.parseAsync(process.argv).catch((err) => {
36
36
  console.error('cc-openclaw: fatal error', err);
37
37
  process.exit(1);
38
38
  });
39
- //# sourceMappingURL=index.js.map
@@ -72,4 +72,3 @@ export function createMigrateCommand() {
72
72
  });
73
73
  return cmd;
74
74
  }
75
- //# sourceMappingURL=migrate.js.map
@@ -474,4 +474,3 @@ export function register(api) {
474
474
  }
475
475
  // Default export compatible with the original plugin object shape
476
476
  export default { id: 'telegram-cc-handler', name: 'Telegram /cc Handler', register };
477
- //# sourceMappingURL=cc-handler.js.map
@@ -1,2 +1 @@
1
1
  export { register, parseCcCommand } from './cc-handler.js';
2
- //# sourceMappingURL=index.js.map
@@ -339,4 +339,3 @@ export function recoverSessions(deps) {
339
339
  logger.info(`${PLUGIN_TAG} Warm-restart recovery: no recent sessions to restore`);
340
340
  }
341
341
  }
342
- //# sourceMappingURL=launch-policy.js.map
@@ -233,4 +233,3 @@ export async function continueTurn(deps, active, prompt, chatId, threadId, ackId
233
233
  logger.info(`${PLUGIN_TAG} Session ${sessionName} turn ${meta.turns} complete`);
234
234
  scheduleIdle(deps, key, active);
235
235
  }
236
- //# sourceMappingURL=resume-policy.js.map
@@ -141,4 +141,3 @@ export function buildObservabilityLines() {
141
141
  }
142
142
  return lines.join('\n');
143
143
  }
144
- //# sourceMappingURL=turn-formatter.js.map
@@ -72,4 +72,3 @@ export function saveSnapshot(current) {
72
72
  // Non-fatal: drift detection degrades to "no baseline" on next boot.
73
73
  }
74
74
  }
75
- //# sourceMappingURL=drift-detector.js.map
@@ -66,4 +66,3 @@ export function loadConfigSources() {
66
66
  },
67
67
  };
68
68
  }
69
- //# sourceMappingURL=loader.js.map
@@ -107,4 +107,3 @@ export const ConfigSchema = z.object({
107
107
  ccOpenclaw: CcOpenclawSchema,
108
108
  openclawJson: OpenclawJsonSchema,
109
109
  });
110
- //# sourceMappingURL=schema.js.map
@@ -185,4 +185,3 @@ export const CC_AUTO_COMPACT_THRESHOLD = 70;
185
185
  * recreate) instead of compacting. Used when /compact itself would leave
186
186
  * the session too close to the model's window cap to do useful work. */
187
187
  export const CC_HARD_RESET_THRESHOLD = 90;
188
- //# sourceMappingURL=constants.js.map
@@ -93,4 +93,3 @@ Collaboration ends **only when all members vote YES**.
93
93
 
94
94
  Start working!`;
95
95
  }
96
- //# sourceMappingURL=build-agent-prompt.js.map
@@ -19,4 +19,3 @@ export async function cleanupCreatedWorktrees(worktreeMap, projectDir, logger) {
19
19
  });
20
20
  }
21
21
  }
22
- //# sourceMappingURL=cleanup-worktrees.js.map
@@ -49,4 +49,3 @@ export function parseConsensus(content) {
49
49
  // keywords without actually voting.
50
50
  return false;
51
51
  }
52
- //# sourceMappingURL=consensus.js.map
@@ -740,4 +740,3 @@ export function getDefaultCouncilConfig(projectDir) {
740
740
  projectDir,
741
741
  };
742
742
  }
743
- //# sourceMappingURL=council.js.map
@@ -1,3 +1,2 @@
1
1
  export * from './council.js';
2
2
  export * from './consensus.js';
3
- //# sourceMappingURL=index.js.map
@@ -37,4 +37,3 @@ export function buildSystemPrompt(agent, allAgents, worktreePath) {
37
37
  .replace(/\{\{workDir\}\}/g, worktreePath)
38
38
  .replace(/\{\{otherBranches\}\}/g, otherBranches);
39
39
  }
40
- //# sourceMappingURL=system-prompt.js.map
@@ -38,4 +38,3 @@ Never access: \`~/\`, \`/Users/\`, \`~/.openclaw/\`, or any path outside your wo
38
38
  `;
39
39
  fs.writeFileSync(path.join(claudeDir, 'CLAUDE.md'), content);
40
40
  }
41
- //# sourceMappingURL=write-worktree-claude-md.js.map
@@ -225,4 +225,3 @@ export class BaseOneShotSession extends EventEmitter {
225
225
  }
226
226
  }
227
227
  }
228
- //# sourceMappingURL=base-oneshot-session.js.map
@@ -121,4 +121,3 @@ export class HeartbeatGuard {
121
121
  export function isHeartbeatGuardDisabled() {
122
122
  return isHeartbeatBypassed();
123
123
  }
124
- //# sourceMappingURL=heartbeat-guard.js.map
@@ -7,4 +7,3 @@ export * from './persistent-gemini-session.js';
7
7
  // v0.16 new engines
8
8
  export * from './subprocess-pool.js';
9
9
  export * from './heartbeat-guard.js';
10
- //# sourceMappingURL=index.js.map
@@ -103,4 +103,3 @@ export class PersistentCodexSession extends BaseOneShotSession {
103
103
  });
104
104
  }
105
105
  }
106
- //# sourceMappingURL=persistent-codex-session.js.map
@@ -239,4 +239,3 @@ export class PersistentCursorSession extends BaseOneShotSession {
239
239
  }
240
240
  }
241
241
  }
242
- //# sourceMappingURL=persistent-cursor-session.js.map
@@ -936,4 +936,3 @@ export class PersistentCustomSession extends EventEmitter {
936
936
  (this._stats.tokensOut / 1_000_000) * pricing.output;
937
937
  }
938
938
  }
939
- //# sourceMappingURL=persistent-custom-session.js.map
@@ -214,4 +214,3 @@ export class PersistentGeminiSession extends BaseOneShotSession {
214
214
  }
215
215
  }
216
216
  }
217
- //# sourceMappingURL=persistent-gemini-session.js.map