@a1hvdy/cc-openclaw 0.10.4 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/dist/src/channels/telegram/card-renderer.d.ts +63 -0
  2. package/dist/src/channels/telegram/card-renderer.js +149 -0
  3. package/dist/src/channels/telegram/card-renderer.js.map +1 -0
  4. package/dist/src/channels/telegram/insight-formatter.d.ts +36 -0
  5. package/dist/src/channels/telegram/insight-formatter.js +36 -0
  6. package/dist/src/channels/telegram/insight-formatter.js.map +1 -0
  7. package/dist/src/channels/telegram/live-card.d.ts +7 -90
  8. package/dist/src/channels/telegram/live-card.js +22 -265
  9. package/dist/src/channels/telegram/live-card.js.map +1 -1
  10. package/dist/src/channels/telegram/logger.d.ts +10 -0
  11. package/dist/src/channels/telegram/logger.js +13 -0
  12. package/dist/src/channels/telegram/logger.js.map +1 -0
  13. package/dist/src/channels/telegram/throttle-controller.d.ts +54 -0
  14. package/dist/src/channels/telegram/throttle-controller.js +132 -0
  15. package/dist/src/channels/telegram/throttle-controller.js.map +1 -0
  16. package/dist/src/channels/telegram/tool-tracker.js +3 -14
  17. package/dist/src/channels/telegram/tool-tracker.js.map +1 -1
  18. package/dist/src/cli/doctor.d.ts +24 -0
  19. package/dist/src/cli/doctor.js +194 -0
  20. package/dist/src/cli/doctor.js.map +1 -0
  21. package/dist/src/cli/index.d.ts +8 -0
  22. package/dist/src/cli/index.js +39 -0
  23. package/dist/src/cli/index.js.map +1 -0
  24. package/dist/src/command-router/cc-handler.js +35 -709
  25. package/dist/src/command-router/cc-handler.js.map +1 -1
  26. package/dist/src/command-router/launch-policy.d.ts +93 -0
  27. package/dist/src/command-router/launch-policy.js +323 -0
  28. package/dist/src/command-router/launch-policy.js.map +1 -0
  29. package/dist/src/command-router/resume-policy.d.ts +18 -0
  30. package/dist/src/command-router/resume-policy.js +236 -0
  31. package/dist/src/command-router/resume-policy.js.map +1 -0
  32. package/dist/src/command-router/turn-formatter.d.ts +19 -0
  33. package/dist/src/command-router/turn-formatter.js +144 -0
  34. package/dist/src/command-router/turn-formatter.js.map +1 -0
  35. package/dist/src/openai-compat/bridges/allowlist.d.ts +10 -0
  36. package/dist/src/openai-compat/bridges/allowlist.js +17 -0
  37. package/dist/src/openai-compat/bridges/allowlist.js.map +1 -0
  38. package/dist/src/openai-compat/bridges/factory.d.ts +30 -0
  39. package/dist/src/openai-compat/bridges/factory.js +84 -0
  40. package/dist/src/openai-compat/bridges/factory.js.map +1 -0
  41. package/dist/src/openai-compat/bridges/media-bridge.d.ts +34 -0
  42. package/dist/src/openai-compat/bridges/media-bridge.js +20 -0
  43. package/dist/src/openai-compat/bridges/media-bridge.js.map +1 -0
  44. package/dist/src/openai-compat/bridges/openclaw-native-tools.d.ts +61 -0
  45. package/dist/src/openai-compat/bridges/openclaw-native-tools.js +171 -0
  46. package/dist/src/openai-compat/bridges/openclaw-native-tools.js.map +1 -0
  47. package/dist/src/openai-compat/bridges/openclaw-tool-registry.d.ts +26 -0
  48. package/dist/src/openai-compat/bridges/openclaw-tool-registry.js +38 -0
  49. package/dist/src/openai-compat/bridges/openclaw-tool-registry.js.map +1 -0
  50. package/dist/src/openai-compat/bridges/tts-media-bridge.d.ts +19 -0
  51. package/dist/src/openai-compat/bridges/tts-media-bridge.js +59 -0
  52. package/dist/src/openai-compat/bridges/tts-media-bridge.js.map +1 -0
  53. package/dist/src/openai-compat/openai-compat.js.map +1 -1
  54. package/dist/src/types/tool-bridge.d.ts +2 -1
  55. package/dist/src/types/tool-bridge.js +1 -0
  56. package/dist/src/types/tool-bridge.js.map +1 -1
  57. package/package.json +1 -1
  58. package/dist/scripts/bench/ab-harness.d.ts +0 -58
  59. package/dist/scripts/bench/ab-harness.d.ts.map +0 -1
  60. package/dist/scripts/bench/ab-harness.js +0 -78
  61. package/dist/scripts/bench/ab-harness.js.map +0 -1
  62. package/dist/src/channels/adapter.d.ts.map +0 -1
  63. package/dist/src/channels/telegram/completion-summary.d.ts.map +0 -1
  64. package/dist/src/channels/telegram/error-renderer.d.ts.map +0 -1
  65. package/dist/src/channels/telegram/event-reducer.d.ts.map +0 -1
  66. package/dist/src/channels/telegram/index.d.ts.map +0 -1
  67. package/dist/src/channels/telegram/injector.d.ts.map +0 -1
  68. package/dist/src/channels/telegram/live-card.d.ts.map +0 -1
  69. package/dist/src/channels/telegram/state-machine.d.ts.map +0 -1
  70. package/dist/src/channels/telegram/tool-tracker.d.ts.map +0 -1
  71. package/dist/src/command-router/cc-handler.d.ts.map +0 -1
  72. package/dist/src/command-router/index.d.ts.map +0 -1
  73. package/dist/src/constants.d.ts.map +0 -1
  74. package/dist/src/council/consensus.d.ts.map +0 -1
  75. package/dist/src/council/council.d.ts.map +0 -1
  76. package/dist/src/council/index.d.ts.map +0 -1
  77. package/dist/src/engines/base-oneshot-session.d.ts.map +0 -1
  78. package/dist/src/engines/index.d.ts.map +0 -1
  79. package/dist/src/engines/persistent-codex-session.d.ts.map +0 -1
  80. package/dist/src/engines/persistent-cursor-session.d.ts.map +0 -1
  81. package/dist/src/engines/persistent-custom-session.d.ts.map +0 -1
  82. package/dist/src/engines/persistent-gemini-session.d.ts.map +0 -1
  83. package/dist/src/engines/persistent-session.d.ts.map +0 -1
  84. package/dist/src/health/handler.d.ts.map +0 -1
  85. package/dist/src/health/index.d.ts.map +0 -1
  86. package/dist/src/index.d.ts.map +0 -1
  87. package/dist/src/lib/auto-recovery.d.ts.map +0 -1
  88. package/dist/src/lib/cache-parity.d.ts.map +0 -1
  89. package/dist/src/lib/circuit-breaker.d.ts.map +0 -1
  90. package/dist/src/lib/config.d.ts.map +0 -1
  91. package/dist/src/lib/drift-detector.d.ts.map +0 -1
  92. package/dist/src/lib/error-formatter.d.ts.map +0 -1
  93. package/dist/src/lib/heartbeat-workaround.d.ts.map +0 -1
  94. package/dist/src/lib/index.d.ts.map +0 -1
  95. package/dist/src/lib/register-guard.d.ts.map +0 -1
  96. package/dist/src/lib/route-flag.d.ts +0 -49
  97. package/dist/src/lib/route-flag.d.ts.map +0 -1
  98. package/dist/src/lib/route-flag.js +0 -52
  99. package/dist/src/lib/route-flag.js.map +0 -1
  100. package/dist/src/lib/sysprompt-strip.d.ts.map +0 -1
  101. package/dist/src/lib/telemetry.d.ts.map +0 -1
  102. package/dist/src/lib/test-mode.d.ts.map +0 -1
  103. package/dist/src/lib/vendor-paths.d.ts.map +0 -1
  104. package/dist/src/logger.d.ts.map +0 -1
  105. package/dist/src/mcp/bridge.d.ts.map +0 -1
  106. package/dist/src/mcp/index.d.ts.map +0 -1
  107. package/dist/src/models.d.ts.map +0 -1
  108. package/dist/src/openai-compat/cli-stream-parser.d.ts.map +0 -1
  109. package/dist/src/openai-compat/index.d.ts.map +0 -1
  110. package/dist/src/openai-compat/openai-compat.d.ts.map +0 -1
  111. package/dist/src/openai-compat/skill-resolver.d.ts.map +0 -1
  112. package/dist/src/openai-compat/sse-translator.d.ts.map +0 -1
  113. package/dist/src/proxy/anthropic-adapter.d.ts.map +0 -1
  114. package/dist/src/proxy/handler.d.ts.map +0 -1
  115. package/dist/src/proxy/index.d.ts.map +0 -1
  116. package/dist/src/proxy/schema-cleaner.d.ts.map +0 -1
  117. package/dist/src/proxy/thought-cache.d.ts.map +0 -1
  118. package/dist/src/session/embedded-server.d.ts.map +0 -1
  119. package/dist/src/session/inbox-manager.d.ts.map +0 -1
  120. package/dist/src/session/index.d.ts.map +0 -1
  121. package/dist/src/session/session-manager.d.ts.map +0 -1
  122. package/dist/src/session-bootstrap/cwd-patch.d.ts.map +0 -1
  123. package/dist/src/session-bootstrap/index.d.ts.map +0 -1
  124. package/dist/src/session-bootstrap/sysprompt-strip.d.ts.map +0 -1
  125. package/dist/src/session-bootstrap/think-conflict-resolver.d.ts.map +0 -1
  126. package/dist/src/types.d.ts.map +0 -1
  127. package/dist/src/validation.d.ts.map +0 -1
  128. package/dist/tests/_helpers/subprocess-mock.d.ts +0 -35
  129. package/dist/tests/_helpers/subprocess-mock.d.ts.map +0 -1
  130. package/dist/tests/_helpers/subprocess-mock.js +0 -136
  131. package/dist/tests/_helpers/subprocess-mock.js.map +0 -1
  132. package/dist/tests/auto-recovery.test.d.ts +0 -2
  133. package/dist/tests/auto-recovery.test.d.ts.map +0 -1
  134. package/dist/tests/auto-recovery.test.js +0 -185
  135. package/dist/tests/auto-recovery.test.js.map +0 -1
  136. package/dist/tests/bench-harness.test.d.ts +0 -2
  137. package/dist/tests/bench-harness.test.d.ts.map +0 -1
  138. package/dist/tests/bench-harness.test.js +0 -21
  139. package/dist/tests/bench-harness.test.js.map +0 -1
  140. package/dist/tests/cache-parity.test.d.ts +0 -2
  141. package/dist/tests/cache-parity.test.d.ts.map +0 -1
  142. package/dist/tests/cache-parity.test.js +0 -401
  143. package/dist/tests/cache-parity.test.js.map +0 -1
  144. package/dist/tests/command-router.test.d.ts +0 -2
  145. package/dist/tests/command-router.test.d.ts.map +0 -1
  146. package/dist/tests/command-router.test.js +0 -60
  147. package/dist/tests/command-router.test.js.map +0 -1
  148. package/dist/tests/council.test.d.ts +0 -2
  149. package/dist/tests/council.test.d.ts.map +0 -1
  150. package/dist/tests/council.test.js +0 -20
  151. package/dist/tests/council.test.js.map +0 -1
  152. package/dist/tests/drift-detector.test.d.ts +0 -2
  153. package/dist/tests/drift-detector.test.d.ts.map +0 -1
  154. package/dist/tests/drift-detector.test.js +0 -268
  155. package/dist/tests/drift-detector.test.js.map +0 -1
  156. package/dist/tests/eager-bootstrap-gating.test.d.ts +0 -9
  157. package/dist/tests/eager-bootstrap-gating.test.d.ts.map +0 -1
  158. package/dist/tests/eager-bootstrap-gating.test.js +0 -97
  159. package/dist/tests/eager-bootstrap-gating.test.js.map +0 -1
  160. package/dist/tests/engines.test.d.ts +0 -2
  161. package/dist/tests/engines.test.d.ts.map +0 -1
  162. package/dist/tests/engines.test.js +0 -8
  163. package/dist/tests/engines.test.js.map +0 -1
  164. package/dist/tests/error-formatter.test.d.ts +0 -2
  165. package/dist/tests/error-formatter.test.d.ts.map +0 -1
  166. package/dist/tests/error-formatter.test.js +0 -220
  167. package/dist/tests/error-formatter.test.js.map +0 -1
  168. package/dist/tests/health.test.d.ts +0 -2
  169. package/dist/tests/health.test.d.ts.map +0 -1
  170. package/dist/tests/health.test.js +0 -110
  171. package/dist/tests/health.test.js.map +0 -1
  172. package/dist/tests/heartbeat-workaround.test.d.ts +0 -2
  173. package/dist/tests/heartbeat-workaround.test.d.ts.map +0 -1
  174. package/dist/tests/heartbeat-workaround.test.js +0 -90
  175. package/dist/tests/heartbeat-workaround.test.js.map +0 -1
  176. package/dist/tests/index.test.d.ts +0 -2
  177. package/dist/tests/index.test.d.ts.map +0 -1
  178. package/dist/tests/index.test.js +0 -7
  179. package/dist/tests/index.test.js.map +0 -1
  180. package/dist/tests/lib-sysprompt-strip.test.d.ts +0 -2
  181. package/dist/tests/lib-sysprompt-strip.test.d.ts.map +0 -1
  182. package/dist/tests/lib-sysprompt-strip.test.js +0 -145
  183. package/dist/tests/lib-sysprompt-strip.test.js.map +0 -1
  184. package/dist/tests/listener-activation.test.d.ts +0 -2
  185. package/dist/tests/listener-activation.test.d.ts.map +0 -1
  186. package/dist/tests/listener-activation.test.js +0 -87
  187. package/dist/tests/listener-activation.test.js.map +0 -1
  188. package/dist/tests/mcp-bridge.test.d.ts +0 -2
  189. package/dist/tests/mcp-bridge.test.d.ts.map +0 -1
  190. package/dist/tests/mcp-bridge.test.js +0 -137
  191. package/dist/tests/mcp-bridge.test.js.map +0 -1
  192. package/dist/tests/openai-compat.test.d.ts +0 -2
  193. package/dist/tests/openai-compat.test.d.ts.map +0 -1
  194. package/dist/tests/openai-compat.test.js +0 -8
  195. package/dist/tests/openai-compat.test.js.map +0 -1
  196. package/dist/tests/proxy-heartbeat-integration.test.d.ts +0 -15
  197. package/dist/tests/proxy-heartbeat-integration.test.d.ts.map +0 -1
  198. package/dist/tests/proxy-heartbeat-integration.test.js +0 -122
  199. package/dist/tests/proxy-heartbeat-integration.test.js.map +0 -1
  200. package/dist/tests/proxy.test.d.ts +0 -2
  201. package/dist/tests/proxy.test.d.ts.map +0 -1
  202. package/dist/tests/proxy.test.js +0 -8
  203. package/dist/tests/proxy.test.js.map +0 -1
  204. package/dist/tests/register-guard-stacking.test.d.ts +0 -2
  205. package/dist/tests/register-guard-stacking.test.d.ts.map +0 -1
  206. package/dist/tests/register-guard-stacking.test.js +0 -61
  207. package/dist/tests/register-guard-stacking.test.js.map +0 -1
  208. package/dist/tests/register-guard.test.d.ts +0 -2
  209. package/dist/tests/register-guard.test.d.ts.map +0 -1
  210. package/dist/tests/register-guard.test.js +0 -129
  211. package/dist/tests/register-guard.test.js.map +0 -1
  212. package/dist/tests/route-flag-rollback.test.d.ts +0 -2
  213. package/dist/tests/route-flag-rollback.test.d.ts.map +0 -1
  214. package/dist/tests/route-flag-rollback.test.js +0 -70
  215. package/dist/tests/route-flag-rollback.test.js.map +0 -1
  216. package/dist/tests/route-flag.test.d.ts +0 -2
  217. package/dist/tests/route-flag.test.d.ts.map +0 -1
  218. package/dist/tests/route-flag.test.js +0 -101
  219. package/dist/tests/route-flag.test.js.map +0 -1
  220. package/dist/tests/session-bootstrap.test.d.ts +0 -2
  221. package/dist/tests/session-bootstrap.test.d.ts.map +0 -1
  222. package/dist/tests/session-bootstrap.test.js +0 -183
  223. package/dist/tests/session-bootstrap.test.js.map +0 -1
  224. package/dist/tests/session.test.d.ts +0 -2
  225. package/dist/tests/session.test.d.ts.map +0 -1
  226. package/dist/tests/session.test.js +0 -17
  227. package/dist/tests/session.test.js.map +0 -1
  228. package/dist/tests/state-machine.test.d.ts +0 -2
  229. package/dist/tests/state-machine.test.d.ts.map +0 -1
  230. package/dist/tests/state-machine.test.js +0 -133
  231. package/dist/tests/state-machine.test.js.map +0 -1
  232. package/dist/tests/streaming/cli-stream-parser.test.d.ts +0 -2
  233. package/dist/tests/streaming/cli-stream-parser.test.d.ts.map +0 -1
  234. package/dist/tests/streaming/cli-stream-parser.test.js +0 -233
  235. package/dist/tests/streaming/cli-stream-parser.test.js.map +0 -1
  236. package/dist/tests/streaming/feature-flag.test.d.ts +0 -14
  237. package/dist/tests/streaming/feature-flag.test.d.ts.map +0 -1
  238. package/dist/tests/streaming/feature-flag.test.js +0 -163
  239. package/dist/tests/streaming/feature-flag.test.js.map +0 -1
  240. package/dist/tests/streaming/no-tools-prompt.test.d.ts +0 -17
  241. package/dist/tests/streaming/no-tools-prompt.test.d.ts.map +0 -1
  242. package/dist/tests/streaming/no-tools-prompt.test.js +0 -229
  243. package/dist/tests/streaming/no-tools-prompt.test.js.map +0 -1
  244. package/dist/tests/streaming/skill-plus-tools.test.d.ts +0 -14
  245. package/dist/tests/streaming/skill-plus-tools.test.d.ts.map +0 -1
  246. package/dist/tests/streaming/skill-plus-tools.test.js +0 -234
  247. package/dist/tests/streaming/skill-plus-tools.test.js.map +0 -1
  248. package/dist/tests/streaming/sse-translator.test.d.ts +0 -2
  249. package/dist/tests/streaming/sse-translator.test.d.ts.map +0 -1
  250. package/dist/tests/streaming/sse-translator.test.js +0 -227
  251. package/dist/tests/streaming/sse-translator.test.js.map +0 -1
  252. package/dist/tests/streaming/tool-result-roundtrip.test.d.ts +0 -11
  253. package/dist/tests/streaming/tool-result-roundtrip.test.d.ts.map +0 -1
  254. package/dist/tests/streaming/tool-result-roundtrip.test.js +0 -215
  255. package/dist/tests/streaming/tool-result-roundtrip.test.js.map +0 -1
  256. package/dist/tests/streaming/tool-use-translation.test.d.ts +0 -10
  257. package/dist/tests/streaming/tool-use-translation.test.d.ts.map +0 -1
  258. package/dist/tests/streaming/tool-use-translation.test.js +0 -251
  259. package/dist/tests/streaming/tool-use-translation.test.js.map +0 -1
  260. package/dist/tests/telegram-bridge.test.d.ts +0 -2
  261. package/dist/tests/telegram-bridge.test.d.ts.map +0 -1
  262. package/dist/tests/telegram-bridge.test.js +0 -17
  263. package/dist/tests/telegram-bridge.test.js.map +0 -1
  264. package/dist/tests/telegram-injector.test.d.ts +0 -2
  265. package/dist/tests/telegram-injector.test.d.ts.map +0 -1
  266. package/dist/tests/telegram-injector.test.js +0 -74
  267. package/dist/tests/telegram-injector.test.js.map +0 -1
  268. package/dist/tests/telemetry.test.d.ts +0 -2
  269. package/dist/tests/telemetry.test.d.ts.map +0 -1
  270. package/dist/tests/telemetry.test.js +0 -405
  271. package/dist/tests/telemetry.test.js.map +0 -1
  272. package/dist/tests/test-mode.test.d.ts +0 -2
  273. package/dist/tests/test-mode.test.d.ts.map +0 -1
  274. package/dist/tests/test-mode.test.js +0 -39
  275. package/dist/tests/test-mode.test.js.map +0 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * telegram/card-renderer.ts
3
+ *
4
+ * Telegram Bot API HTTP layer + stream-event bridge.
5
+ * Extracted from live-card.ts (lines 214–458) per Phase 5 decomposition.
6
+ *
7
+ * Exports: telegramApi, sendTg, editTg, bridgeEvent, StreamEvent, TranscriptEntry
8
+ */
9
+ export declare function telegramApi(method: string, params: Record<string, unknown>): Promise<{
10
+ ok: boolean;
11
+ result?: {
12
+ message_id?: number;
13
+ };
14
+ error_code?: number;
15
+ description?: string;
16
+ parameters?: {
17
+ retry_after?: number;
18
+ };
19
+ }>;
20
+ /** Send a Telegram message. Tries MarkdownV2 first, falls back to plain text. */
21
+ export declare function sendTg(chatId: string, text: string, threadId?: string, replyMarkup?: unknown, replyToMessageId?: number | null): Promise<{
22
+ ok: boolean;
23
+ result?: {
24
+ message_id?: number;
25
+ };
26
+ }>;
27
+ /** Edit a Telegram message. Tries MarkdownV2 first, falls back to plain text. */
28
+ export declare function editTg(chatId: string, messageId: number, text: string, replyMarkup?: unknown): Promise<{
29
+ ok: boolean;
30
+ }>;
31
+ export interface StreamEvent {
32
+ type: string;
33
+ id?: string;
34
+ tool_use_id?: string;
35
+ parent_tool_use_id?: string;
36
+ parentToolUseId?: string;
37
+ tool?: {
38
+ name?: string;
39
+ input?: Record<string, unknown>;
40
+ parent_tool_use_id?: string;
41
+ };
42
+ tool_name?: string;
43
+ input?: Record<string, unknown>;
44
+ content?: unknown;
45
+ output?: unknown;
46
+ is_error?: boolean;
47
+ error?: unknown;
48
+ result?: string;
49
+ }
50
+ export interface TranscriptEntry {
51
+ kind: 'tool_call' | 'tool_result' | 'assistant';
52
+ ts: string;
53
+ name?: string;
54
+ input?: Record<string, unknown>;
55
+ toolUseId?: string;
56
+ parentToolUseId?: string;
57
+ toolName?: string;
58
+ content?: unknown;
59
+ isError?: boolean;
60
+ text?: string;
61
+ delta?: boolean;
62
+ }
63
+ export declare function bridgeEvent(event: StreamEvent): TranscriptEntry | null;
@@ -0,0 +1,149 @@
1
+ /**
2
+ * telegram/card-renderer.ts
3
+ *
4
+ * Telegram Bot API HTTP layer + stream-event bridge.
5
+ * Extracted from live-card.ts (lines 214–458) per Phase 5 decomposition.
6
+ *
7
+ * Exports: telegramApi, sendTg, editTg, bridgeEvent, StreamEvent, TranscriptEntry
8
+ */
9
+ import { request as httpsRequest } from 'node:https';
10
+ import { _logger } from './logger.js';
11
+ import { BOT_TOKEN } from './live-card.js';
12
+ const PLUGIN_TAG = '[cc-openclaw/telegram/live-card]';
13
+ // ── Telegram Bot API ──────────────────────────────────────────────────────
14
+ export function telegramApi(method, params) {
15
+ return new Promise((resolve, reject) => {
16
+ const body = JSON.stringify(params);
17
+ const options = {
18
+ hostname: 'api.telegram.org',
19
+ path: `/bot${BOT_TOKEN}/${method}`,
20
+ method: 'POST',
21
+ headers: {
22
+ 'Content-Type': 'application/json',
23
+ 'Content-Length': Buffer.byteLength(body),
24
+ },
25
+ };
26
+ const req = httpsRequest(options, (res) => {
27
+ let data = '';
28
+ res.on('data', (chunk) => (data += chunk));
29
+ res.on('end', () => {
30
+ try {
31
+ resolve(JSON.parse(data));
32
+ }
33
+ catch {
34
+ resolve({ ok: false, description: 'JSON parse error' });
35
+ }
36
+ });
37
+ });
38
+ req.on('error', (err) => reject(err));
39
+ req.setTimeout(10_000, () => {
40
+ req.destroy(new Error('Telegram API timeout'));
41
+ });
42
+ req.write(body);
43
+ req.end();
44
+ });
45
+ }
46
+ /** Send a Telegram message. Tries MarkdownV2 first, falls back to plain text. */
47
+ export async function sendTg(chatId, text, threadId, replyMarkup, replyToMessageId) {
48
+ try {
49
+ const base = { chat_id: chatId, disable_web_page_preview: true };
50
+ if (threadId)
51
+ base.message_thread_id = Number(threadId);
52
+ if (replyMarkup)
53
+ base.reply_markup = replyMarkup;
54
+ if (replyToMessageId)
55
+ base.reply_to_message_id = Number(replyToMessageId);
56
+ const res = await telegramApi('sendMessage', {
57
+ ...base,
58
+ text,
59
+ parse_mode: 'MarkdownV2',
60
+ });
61
+ if (res.ok)
62
+ return res;
63
+ const plain = text.replace(/[_*[\]()~`>#+\-=|{}.!\\]/g, '');
64
+ return telegramApi('sendMessage', {
65
+ ...base,
66
+ text: plain || 'Session update',
67
+ });
68
+ }
69
+ catch {
70
+ return { ok: false };
71
+ }
72
+ }
73
+ /** Edit a Telegram message. Tries MarkdownV2 first, falls back to plain text. */
74
+ export async function editTg(chatId, messageId, text, replyMarkup) {
75
+ try {
76
+ const params = {
77
+ chat_id: chatId,
78
+ message_id: messageId,
79
+ text,
80
+ parse_mode: 'MarkdownV2',
81
+ disable_web_page_preview: true,
82
+ };
83
+ if (replyMarkup)
84
+ params.reply_markup = replyMarkup;
85
+ const res = await telegramApi('editMessageText', params);
86
+ if (!res.ok && (res.error_code === 429 || res.description?.includes('Too Many Requests'))) {
87
+ const retryAfterSec = res.parameters?.retry_after || 5;
88
+ const waitMs = Math.min(retryAfterSec * 1000, 30000);
89
+ _logger.warn(`${PLUGIN_TAG} editTg 429 — waiting ${waitMs}ms`);
90
+ await new Promise(r => setTimeout(r, waitMs));
91
+ const retry = await telegramApi('editMessageText', params);
92
+ if (retry.ok)
93
+ return retry;
94
+ }
95
+ if (res.ok)
96
+ return res;
97
+ const plain = text.replace(/[_*[\]()~`>#+\-=|{}.!\\]/g, '');
98
+ const fallback = {
99
+ chat_id: chatId,
100
+ message_id: messageId,
101
+ text: plain || 'Session update',
102
+ disable_web_page_preview: true,
103
+ };
104
+ if (replyMarkup)
105
+ fallback.reply_markup = replyMarkup;
106
+ return telegramApi('editMessageText', fallback);
107
+ }
108
+ catch {
109
+ return { ok: false };
110
+ }
111
+ }
112
+ export function bridgeEvent(event) {
113
+ const ts = new Date().toISOString();
114
+ if (event.type === 'tool_use') {
115
+ const parentToolUseId = event.parent_tool_use_id ||
116
+ event.tool?.parent_tool_use_id ||
117
+ event.parentToolUseId ||
118
+ '';
119
+ return {
120
+ kind: 'tool_call',
121
+ ts,
122
+ name: event.tool?.name || 'Unknown',
123
+ input: event.tool?.input || {},
124
+ toolUseId: event.id || event.tool_use_id || '',
125
+ parentToolUseId,
126
+ };
127
+ }
128
+ if (event.type === 'tool_result') {
129
+ return {
130
+ kind: 'tool_result',
131
+ ts,
132
+ toolUseId: event.tool_use_id || event.id || '',
133
+ toolName: event.tool_name || event.tool?.name || undefined,
134
+ content: event.content || event.output || '',
135
+ isError: Boolean(event.is_error || event.error),
136
+ parentToolUseId: event.parent_tool_use_id || event.parentToolUseId || '',
137
+ };
138
+ }
139
+ if (event.type === 'text') {
140
+ return {
141
+ kind: 'assistant',
142
+ ts,
143
+ text: event.result || '',
144
+ delta: true,
145
+ };
146
+ }
147
+ return null;
148
+ }
149
+ //# sourceMappingURL=card-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-renderer.js","sourceRoot":"","sources":["../../../../src/channels/telegram/card-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * insight-formatter — pure tip extraction from Savvy card state + TipsEngine.
3
+ *
4
+ * Extracted from tool-tracker.ts (Step 5 of Phase 5 v0.11.0 decomposition,
5
+ * PRPs/phase5-live-card-split.md).
6
+ *
7
+ * Two call sites in tool-tracker.ts duplicated the toolSummary build + getTip
8
+ * orchestration: `after_tool_call` (~L617-625) and `message_sending` (~L675-683).
9
+ * This module factors that pattern into one pure function.
10
+ *
11
+ * The TipsEngine is loaded by tool-tracker.ts (stays there — the `__require`
12
+ * indirection to the workspace path is wired up alongside the other lazy
13
+ * module loads inside register()). This file only consumes the TipsEngine
14
+ * instance via an interface, keeping it framework-agnostic and testable.
15
+ */
16
+ /** Minimal shape this module needs from a SavvyCardState — type-safe without
17
+ * importing tool-tracker's full SavvyCardState interface (avoids a cycle).
18
+ */
19
+ export interface InsightCardState {
20
+ activityLog: string[];
21
+ elapsedMs: number;
22
+ [key: string]: unknown;
23
+ }
24
+ /** Minimal shape this module needs from a TipsEngine. */
25
+ export interface TipsEngineLike {
26
+ getTip(ctx: unknown): unknown;
27
+ }
28
+ /**
29
+ * Build a tool-frequency summary from a SavvyCardState's activityLog and
30
+ * call TipsEngine.getTip. Returns whatever the engine returns (typically a
31
+ * `{ emoji, text }` shape or null; consumers pass it to `state.setTip(tip)`).
32
+ *
33
+ * Pure: no I/O, no logging, no Telegram side effects. Safe to unit-test
34
+ * with a TipsEngine double.
35
+ */
36
+ export declare function extractInsightTip(state: InsightCardState, tipsEngine: TipsEngineLike): unknown;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * insight-formatter — pure tip extraction from Savvy card state + TipsEngine.
3
+ *
4
+ * Extracted from tool-tracker.ts (Step 5 of Phase 5 v0.11.0 decomposition,
5
+ * PRPs/phase5-live-card-split.md).
6
+ *
7
+ * Two call sites in tool-tracker.ts duplicated the toolSummary build + getTip
8
+ * orchestration: `after_tool_call` (~L617-625) and `message_sending` (~L675-683).
9
+ * This module factors that pattern into one pure function.
10
+ *
11
+ * The TipsEngine is loaded by tool-tracker.ts (stays there — the `__require`
12
+ * indirection to the workspace path is wired up alongside the other lazy
13
+ * module loads inside register()). This file only consumes the TipsEngine
14
+ * instance via an interface, keeping it framework-agnostic and testable.
15
+ */
16
+ /**
17
+ * Build a tool-frequency summary from a SavvyCardState's activityLog and
18
+ * call TipsEngine.getTip. Returns whatever the engine returns (typically a
19
+ * `{ emoji, text }` shape or null; consumers pass it to `state.setTip(tip)`).
20
+ *
21
+ * Pure: no I/O, no logging, no Telegram side effects. Safe to unit-test
22
+ * with a TipsEngine double.
23
+ */
24
+ export function extractInsightTip(state, tipsEngine) {
25
+ const toolSummary = {};
26
+ for (const t of state.activityLog) {
27
+ const key = t === 'exec' ? 'execute' : t;
28
+ toolSummary[key] = (toolSummary[key] || 0) + 1;
29
+ }
30
+ return tipsEngine.getTip({
31
+ ...state,
32
+ toolSummary,
33
+ elapsedSec: Math.round(state.elapsedMs / 1000),
34
+ });
35
+ }
36
+ //# sourceMappingURL=insight-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-formatter.js","sourceRoot":"","sources":["../../../../src/channels/telegram/insight-formatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAuB,EACvB,UAA0B;IAE1B,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC;QACvB,GAAG,KAAK;QACR,WAAW;QACX,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC"}
@@ -10,6 +10,7 @@
10
10
  *
11
11
  * Source lines: 1–930 of ux-bridge.js
12
12
  */
13
+ import { TelegramMessageQueue } from './throttle-controller.js';
13
14
  export interface PluginApi {
14
15
  on(event: string, handler: (...args: unknown[]) => unknown | Promise<unknown>): void;
15
16
  logger?: Console;
@@ -69,17 +70,7 @@ export declare const delegatedCardStore: Map<string, {
69
70
  threadId: string | undefined;
70
71
  }>;
71
72
  export declare let latestQuotaState: QuotaState | null;
72
- /**
73
- * Shared cross-handler dedup. Any handler dispatching to Telegram should
74
- * (a) mark via `markDispatchedToTelegram(chatId, payload)` and (b) check via
75
- * `wasDispatchedToTelegram(chatId, payload)` to short-circuit duplicates.
76
- *
77
- * Used to bridge the gap between cc-openclaw's patched SessionManager.send
78
- * path and the gateway's native ACP message_sending path — both can fire
79
- * for the same agent reply, producing the doubled-greeting on /new.
80
- */
81
- export declare function markDispatchedToTelegram(chatId: string, payload: unknown): void;
82
- export declare function wasDispatchedToTelegram(chatId: string, payload: unknown): boolean;
73
+ export { markDispatchedToTelegram, wasDispatchedToTelegram } from './throttle-controller.js';
83
74
  export interface QuotaState {
84
75
  sevenDay?: {
85
76
  usedPercent?: number;
@@ -140,84 +131,11 @@ interface CardState {
140
131
  startedAt?: number;
141
132
  [key: string]: unknown;
142
133
  }
143
- export declare function telegramApi(method: string, params: Record<string, unknown>): Promise<{
144
- ok: boolean;
145
- result?: {
146
- message_id?: number;
147
- };
148
- error_code?: number;
149
- description?: string;
150
- parameters?: {
151
- retry_after?: number;
152
- };
153
- }>;
154
- /** Send a Telegram message. Tries MarkdownV2 first, falls back to plain text. */
155
- export declare function sendTg(chatId: string, text: string, threadId?: string, replyMarkup?: unknown, replyToMessageId?: number | null): Promise<{
156
- ok: boolean;
157
- result?: {
158
- message_id?: number;
159
- };
160
- }>;
161
- /** Edit a Telegram message. Tries MarkdownV2 first, falls back to plain text. */
162
- export declare function editTg(chatId: string, messageId: number, text: string, replyMarkup?: unknown): Promise<{
163
- ok: boolean;
164
- }>;
165
- export declare class TelegramMessageQueue {
166
- chatId: string;
167
- threadId: string | undefined;
168
- cardMessageId: number | null;
169
- _replyToMessageId: number | null;
170
- /**
171
- * Sticky flag — set true the first time `sendMessage()` is called for this
172
- * queue instance. Lets the fast-turn fallback in `applyPatch()` detect that
173
- * a new message was already dispatched by the pipeline's `onNewMessage`
174
- * callback and avoid double-firing. Bug context: 2026-04-29 doubled-greeting
175
- * on `/new` was caused by both the pipeline AND the fallback emitting the
176
- * same model output as separate Telegram messages.
177
- */
178
- messageSent: boolean;
179
- private _cardChain;
180
- private _msgChain;
181
- constructor(chatId: string, threadId: string | undefined, existingCardMessageId: number | null, replyToMessageId?: number | null);
182
- /** Send or edit the session card. */
183
- updateCard(text: string, replyMarkup?: unknown): void;
184
- /** Send a standalone message (error alert, completion summary). */
185
- sendMessage(text: string): void;
186
- }
187
- interface StreamEvent {
188
- type: string;
189
- id?: string;
190
- tool_use_id?: string;
191
- parent_tool_use_id?: string;
192
- parentToolUseId?: string;
193
- tool?: {
194
- name?: string;
195
- input?: Record<string, unknown>;
196
- parent_tool_use_id?: string;
197
- };
198
- tool_name?: string;
199
- input?: Record<string, unknown>;
200
- content?: unknown;
201
- output?: unknown;
202
- is_error?: boolean;
203
- error?: unknown;
204
- result?: string;
205
- }
206
- interface TranscriptEntry {
207
- kind: 'tool_call' | 'tool_result' | 'assistant';
208
- ts: string;
209
- name?: string;
210
- input?: Record<string, unknown>;
211
- toolUseId?: string;
212
- parentToolUseId?: string;
213
- toolName?: string;
214
- content?: unknown;
215
- isError?: boolean;
216
- text?: string;
217
- delta?: boolean;
218
- }
219
- export declare function bridgeEvent(event: StreamEvent): TranscriptEntry | null;
220
- export declare let _logger: Console;
134
+ export { telegramApi, sendTg, editTg } from './card-renderer.js';
135
+ export { TelegramMessageQueue } from './throttle-controller.js';
136
+ export { bridgeEvent } from './card-renderer.js';
137
+ export type { StreamEvent, TranscriptEntry } from './card-renderer.js';
138
+ export { _logger, setLogger } from './logger.js';
221
139
  export declare function loadUxModule(): Record<string, unknown>;
222
140
  export declare function applyPatch(): Promise<void>;
223
141
  export declare function cleanStaleStatusFiles(): void;
@@ -226,4 +144,3 @@ export declare function cleanStaleStatusFiles(): void;
226
144
  * Idempotent — subsequent calls are no-ops.
227
145
  */
228
146
  export declare function register(api: PluginApi): void;
229
- export {};