@a1hvdy/cc-openclaw 0.9.2 → 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.
- package/dist/src/channels/telegram/card-renderer.d.ts +63 -0
- package/dist/src/channels/telegram/card-renderer.js +149 -0
- package/dist/src/channels/telegram/card-renderer.js.map +1 -0
- package/dist/src/channels/telegram/completion-summary.js +20 -1
- package/dist/src/channels/telegram/completion-summary.js.map +1 -1
- package/dist/src/channels/telegram/insight-formatter.d.ts +36 -0
- package/dist/src/channels/telegram/insight-formatter.js +36 -0
- package/dist/src/channels/telegram/insight-formatter.js.map +1 -0
- package/dist/src/channels/telegram/live-card.d.ts +7 -90
- package/dist/src/channels/telegram/live-card.js +22 -265
- package/dist/src/channels/telegram/live-card.js.map +1 -1
- package/dist/src/channels/telegram/logger.d.ts +10 -0
- package/dist/src/channels/telegram/logger.js +13 -0
- package/dist/src/channels/telegram/logger.js.map +1 -0
- package/dist/src/channels/telegram/throttle-controller.d.ts +54 -0
- package/dist/src/channels/telegram/throttle-controller.js +132 -0
- package/dist/src/channels/telegram/throttle-controller.js.map +1 -0
- package/dist/src/channels/telegram/tool-tracker.js +3 -14
- package/dist/src/channels/telegram/tool-tracker.js.map +1 -1
- package/dist/src/cli/doctor.d.ts +24 -0
- package/dist/src/cli/doctor.js +194 -0
- package/dist/src/cli/doctor.js.map +1 -0
- package/dist/src/cli/index.d.ts +8 -0
- package/dist/src/cli/index.js +39 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/command-router/cc-handler.js +35 -709
- package/dist/src/command-router/cc-handler.js.map +1 -1
- package/dist/src/command-router/launch-policy.d.ts +93 -0
- package/dist/src/command-router/launch-policy.js +323 -0
- package/dist/src/command-router/launch-policy.js.map +1 -0
- package/dist/src/command-router/resume-policy.d.ts +18 -0
- package/dist/src/command-router/resume-policy.js +236 -0
- package/dist/src/command-router/resume-policy.js.map +1 -0
- package/dist/src/command-router/turn-formatter.d.ts +19 -0
- package/dist/src/command-router/turn-formatter.js +144 -0
- package/dist/src/command-router/turn-formatter.js.map +1 -0
- package/dist/src/constants.d.ts +33 -2
- package/dist/src/constants.js +33 -2
- package/dist/src/constants.js.map +1 -1
- package/dist/src/lib/config.d.ts +3 -0
- package/dist/src/lib/config.js +46 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/trajectory.d.ts +1 -1
- package/dist/src/lib/trajectory.js.map +1 -1
- package/dist/src/openai-compat/bridges/allowlist.d.ts +10 -0
- package/dist/src/openai-compat/bridges/allowlist.js +17 -0
- package/dist/src/openai-compat/bridges/allowlist.js.map +1 -0
- package/dist/src/openai-compat/bridges/factory.d.ts +30 -0
- package/dist/src/openai-compat/bridges/factory.js +84 -0
- package/dist/src/openai-compat/bridges/factory.js.map +1 -0
- package/dist/src/openai-compat/bridges/media-bridge.d.ts +34 -0
- package/dist/src/openai-compat/bridges/media-bridge.js +20 -0
- package/dist/src/openai-compat/bridges/media-bridge.js.map +1 -0
- package/dist/src/openai-compat/bridges/openclaw-native-tools.d.ts +61 -0
- package/dist/src/openai-compat/bridges/openclaw-native-tools.js +171 -0
- package/dist/src/openai-compat/bridges/openclaw-native-tools.js.map +1 -0
- package/dist/src/openai-compat/bridges/openclaw-tool-registry.d.ts +26 -0
- package/dist/src/openai-compat/bridges/openclaw-tool-registry.js +38 -0
- package/dist/src/openai-compat/bridges/openclaw-tool-registry.js.map +1 -0
- package/dist/src/openai-compat/bridges/tts-media-bridge.d.ts +19 -0
- package/dist/src/openai-compat/bridges/tts-media-bridge.js +59 -0
- package/dist/src/openai-compat/bridges/tts-media-bridge.js.map +1 -0
- package/dist/src/openai-compat/non-streaming-handler.js +52 -3
- package/dist/src/openai-compat/non-streaming-handler.js.map +1 -1
- package/dist/src/openai-compat/openai-compat.js +64 -2
- package/dist/src/openai-compat/openai-compat.js.map +1 -1
- package/dist/src/openai-compat/streaming-handler.js +107 -1
- package/dist/src/openai-compat/streaming-handler.js.map +1 -1
- package/dist/src/openai-compat/voice-recovery.d.ts +56 -0
- package/dist/src/openai-compat/voice-recovery.js +231 -0
- package/dist/src/openai-compat/voice-recovery.js.map +1 -0
- package/dist/src/session/session-manager.d.ts +51 -0
- package/dist/src/session/session-manager.js +165 -1
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/types/tool-bridge.d.ts +2 -1
- package/dist/src/types/tool-bridge.js +1 -0
- package/dist/src/types/tool-bridge.js.map +1 -1
- package/package.json +1 -1
- package/dist/scripts/bench/ab-harness.d.ts +0 -58
- package/dist/scripts/bench/ab-harness.d.ts.map +0 -1
- package/dist/scripts/bench/ab-harness.js +0 -78
- package/dist/scripts/bench/ab-harness.js.map +0 -1
- package/dist/src/channels/adapter.d.ts.map +0 -1
- package/dist/src/channels/telegram/completion-summary.d.ts.map +0 -1
- package/dist/src/channels/telegram/error-renderer.d.ts.map +0 -1
- package/dist/src/channels/telegram/event-reducer.d.ts.map +0 -1
- package/dist/src/channels/telegram/index.d.ts.map +0 -1
- package/dist/src/channels/telegram/injector.d.ts.map +0 -1
- package/dist/src/channels/telegram/live-card.d.ts.map +0 -1
- package/dist/src/channels/telegram/state-machine.d.ts.map +0 -1
- package/dist/src/channels/telegram/tool-tracker.d.ts.map +0 -1
- package/dist/src/command-router/cc-handler.d.ts.map +0 -1
- package/dist/src/command-router/index.d.ts.map +0 -1
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/council/consensus.d.ts.map +0 -1
- package/dist/src/council/council.d.ts.map +0 -1
- package/dist/src/council/index.d.ts.map +0 -1
- package/dist/src/engines/base-oneshot-session.d.ts.map +0 -1
- package/dist/src/engines/index.d.ts.map +0 -1
- package/dist/src/engines/persistent-codex-session.d.ts.map +0 -1
- package/dist/src/engines/persistent-cursor-session.d.ts.map +0 -1
- package/dist/src/engines/persistent-custom-session.d.ts.map +0 -1
- package/dist/src/engines/persistent-gemini-session.d.ts.map +0 -1
- package/dist/src/engines/persistent-session.d.ts.map +0 -1
- package/dist/src/health/handler.d.ts.map +0 -1
- package/dist/src/health/index.d.ts.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/lib/auto-recovery.d.ts.map +0 -1
- package/dist/src/lib/cache-parity.d.ts.map +0 -1
- package/dist/src/lib/circuit-breaker.d.ts.map +0 -1
- package/dist/src/lib/config.d.ts.map +0 -1
- package/dist/src/lib/debug-tap.d.ts.map +0 -1
- package/dist/src/lib/drift-detector.d.ts.map +0 -1
- package/dist/src/lib/error-formatter.d.ts.map +0 -1
- package/dist/src/lib/heartbeat-workaround.d.ts.map +0 -1
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/register-guard.d.ts.map +0 -1
- package/dist/src/lib/route-flag.d.ts +0 -49
- package/dist/src/lib/route-flag.d.ts.map +0 -1
- package/dist/src/lib/route-flag.js +0 -52
- package/dist/src/lib/route-flag.js.map +0 -1
- package/dist/src/lib/sysprompt-strip.d.ts.map +0 -1
- package/dist/src/lib/telemetry.d.ts.map +0 -1
- package/dist/src/lib/test-mode.d.ts.map +0 -1
- package/dist/src/lib/vendor-paths.d.ts.map +0 -1
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/mcp/bridge.d.ts.map +0 -1
- package/dist/src/mcp/index.d.ts.map +0 -1
- package/dist/src/models.d.ts.map +0 -1
- package/dist/src/openai-compat/cli-stream-parser.d.ts.map +0 -1
- package/dist/src/openai-compat/index.d.ts.map +0 -1
- package/dist/src/openai-compat/openai-compat.d.ts.map +0 -1
- package/dist/src/openai-compat/skill-resolver.d.ts.map +0 -1
- package/dist/src/openai-compat/sse-translator.d.ts.map +0 -1
- package/dist/src/proxy/anthropic-adapter.d.ts.map +0 -1
- package/dist/src/proxy/handler.d.ts.map +0 -1
- package/dist/src/proxy/index.d.ts.map +0 -1
- package/dist/src/proxy/schema-cleaner.d.ts.map +0 -1
- package/dist/src/proxy/thought-cache.d.ts.map +0 -1
- package/dist/src/session/embedded-server.d.ts.map +0 -1
- package/dist/src/session/inbox-manager.d.ts.map +0 -1
- package/dist/src/session/index.d.ts.map +0 -1
- package/dist/src/session/session-manager.d.ts.map +0 -1
- package/dist/src/session-bootstrap/cwd-patch.d.ts.map +0 -1
- package/dist/src/session-bootstrap/index.d.ts.map +0 -1
- package/dist/src/session-bootstrap/sysprompt-strip.d.ts.map +0 -1
- package/dist/src/session-bootstrap/think-conflict-resolver.d.ts.map +0 -1
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/validation.d.ts.map +0 -1
- package/dist/tests/_helpers/subprocess-mock.d.ts +0 -35
- package/dist/tests/_helpers/subprocess-mock.d.ts.map +0 -1
- package/dist/tests/_helpers/subprocess-mock.js +0 -136
- package/dist/tests/_helpers/subprocess-mock.js.map +0 -1
- package/dist/tests/auto-recovery.test.d.ts +0 -2
- package/dist/tests/auto-recovery.test.d.ts.map +0 -1
- package/dist/tests/auto-recovery.test.js +0 -189
- package/dist/tests/auto-recovery.test.js.map +0 -1
- package/dist/tests/bench-harness.test.d.ts +0 -2
- package/dist/tests/bench-harness.test.d.ts.map +0 -1
- package/dist/tests/bench-harness.test.js +0 -21
- package/dist/tests/bench-harness.test.js.map +0 -1
- package/dist/tests/cache-parity.test.d.ts +0 -2
- package/dist/tests/cache-parity.test.d.ts.map +0 -1
- package/dist/tests/cache-parity.test.js +0 -401
- package/dist/tests/cache-parity.test.js.map +0 -1
- package/dist/tests/command-router.test.d.ts +0 -2
- package/dist/tests/command-router.test.d.ts.map +0 -1
- package/dist/tests/command-router.test.js +0 -60
- package/dist/tests/command-router.test.js.map +0 -1
- package/dist/tests/council.test.d.ts +0 -2
- package/dist/tests/council.test.d.ts.map +0 -1
- package/dist/tests/council.test.js +0 -20
- package/dist/tests/council.test.js.map +0 -1
- package/dist/tests/drift-detector.test.d.ts +0 -2
- package/dist/tests/drift-detector.test.d.ts.map +0 -1
- package/dist/tests/drift-detector.test.js +0 -268
- package/dist/tests/drift-detector.test.js.map +0 -1
- package/dist/tests/eager-bootstrap-gating.test.d.ts +0 -9
- package/dist/tests/eager-bootstrap-gating.test.d.ts.map +0 -1
- package/dist/tests/eager-bootstrap-gating.test.js +0 -97
- package/dist/tests/eager-bootstrap-gating.test.js.map +0 -1
- package/dist/tests/engines.test.d.ts +0 -2
- package/dist/tests/engines.test.d.ts.map +0 -1
- package/dist/tests/engines.test.js +0 -8
- package/dist/tests/engines.test.js.map +0 -1
- package/dist/tests/error-formatter.test.d.ts +0 -2
- package/dist/tests/error-formatter.test.d.ts.map +0 -1
- package/dist/tests/error-formatter.test.js +0 -220
- package/dist/tests/error-formatter.test.js.map +0 -1
- package/dist/tests/health.test.d.ts +0 -2
- package/dist/tests/health.test.d.ts.map +0 -1
- package/dist/tests/health.test.js +0 -110
- package/dist/tests/health.test.js.map +0 -1
- package/dist/tests/heartbeat-workaround.test.d.ts +0 -2
- package/dist/tests/heartbeat-workaround.test.d.ts.map +0 -1
- package/dist/tests/heartbeat-workaround.test.js +0 -90
- package/dist/tests/heartbeat-workaround.test.js.map +0 -1
- package/dist/tests/index.test.d.ts +0 -2
- package/dist/tests/index.test.d.ts.map +0 -1
- package/dist/tests/index.test.js +0 -7
- package/dist/tests/index.test.js.map +0 -1
- package/dist/tests/lib-sysprompt-strip.test.d.ts +0 -2
- package/dist/tests/lib-sysprompt-strip.test.d.ts.map +0 -1
- package/dist/tests/lib-sysprompt-strip.test.js +0 -145
- package/dist/tests/lib-sysprompt-strip.test.js.map +0 -1
- package/dist/tests/listener-activation.test.d.ts +0 -2
- package/dist/tests/listener-activation.test.d.ts.map +0 -1
- package/dist/tests/listener-activation.test.js +0 -87
- package/dist/tests/listener-activation.test.js.map +0 -1
- package/dist/tests/mcp-bridge.test.d.ts +0 -2
- package/dist/tests/mcp-bridge.test.d.ts.map +0 -1
- package/dist/tests/mcp-bridge.test.js +0 -137
- package/dist/tests/mcp-bridge.test.js.map +0 -1
- package/dist/tests/openai-compat.test.d.ts +0 -2
- package/dist/tests/openai-compat.test.d.ts.map +0 -1
- package/dist/tests/openai-compat.test.js +0 -8
- package/dist/tests/openai-compat.test.js.map +0 -1
- package/dist/tests/proxy-heartbeat-integration.test.d.ts +0 -15
- package/dist/tests/proxy-heartbeat-integration.test.d.ts.map +0 -1
- package/dist/tests/proxy-heartbeat-integration.test.js +0 -122
- package/dist/tests/proxy-heartbeat-integration.test.js.map +0 -1
- package/dist/tests/proxy.test.d.ts +0 -2
- package/dist/tests/proxy.test.d.ts.map +0 -1
- package/dist/tests/proxy.test.js +0 -8
- package/dist/tests/proxy.test.js.map +0 -1
- package/dist/tests/register-guard-stacking.test.d.ts +0 -2
- package/dist/tests/register-guard-stacking.test.d.ts.map +0 -1
- package/dist/tests/register-guard-stacking.test.js +0 -61
- package/dist/tests/register-guard-stacking.test.js.map +0 -1
- package/dist/tests/register-guard.test.d.ts +0 -2
- package/dist/tests/register-guard.test.d.ts.map +0 -1
- package/dist/tests/register-guard.test.js +0 -129
- package/dist/tests/register-guard.test.js.map +0 -1
- package/dist/tests/route-flag-rollback.test.d.ts +0 -2
- package/dist/tests/route-flag-rollback.test.d.ts.map +0 -1
- package/dist/tests/route-flag-rollback.test.js +0 -70
- package/dist/tests/route-flag-rollback.test.js.map +0 -1
- package/dist/tests/route-flag.test.d.ts +0 -2
- package/dist/tests/route-flag.test.d.ts.map +0 -1
- package/dist/tests/route-flag.test.js +0 -101
- package/dist/tests/route-flag.test.js.map +0 -1
- package/dist/tests/session-bootstrap.test.d.ts +0 -2
- package/dist/tests/session-bootstrap.test.d.ts.map +0 -1
- package/dist/tests/session-bootstrap.test.js +0 -183
- package/dist/tests/session-bootstrap.test.js.map +0 -1
- package/dist/tests/session.test.d.ts +0 -2
- package/dist/tests/session.test.d.ts.map +0 -1
- package/dist/tests/session.test.js +0 -17
- package/dist/tests/session.test.js.map +0 -1
- package/dist/tests/state-machine.test.d.ts +0 -2
- package/dist/tests/state-machine.test.d.ts.map +0 -1
- package/dist/tests/state-machine.test.js +0 -133
- package/dist/tests/state-machine.test.js.map +0 -1
- package/dist/tests/streaming/cli-stream-parser.test.d.ts +0 -2
- package/dist/tests/streaming/cli-stream-parser.test.d.ts.map +0 -1
- package/dist/tests/streaming/cli-stream-parser.test.js +0 -233
- package/dist/tests/streaming/cli-stream-parser.test.js.map +0 -1
- package/dist/tests/streaming/feature-flag.test.d.ts +0 -14
- package/dist/tests/streaming/feature-flag.test.d.ts.map +0 -1
- package/dist/tests/streaming/feature-flag.test.js +0 -163
- package/dist/tests/streaming/feature-flag.test.js.map +0 -1
- package/dist/tests/streaming/no-tools-prompt.test.d.ts +0 -17
- package/dist/tests/streaming/no-tools-prompt.test.d.ts.map +0 -1
- package/dist/tests/streaming/no-tools-prompt.test.js +0 -229
- package/dist/tests/streaming/no-tools-prompt.test.js.map +0 -1
- package/dist/tests/streaming/skill-plus-tools.test.d.ts +0 -14
- package/dist/tests/streaming/skill-plus-tools.test.d.ts.map +0 -1
- package/dist/tests/streaming/skill-plus-tools.test.js +0 -234
- package/dist/tests/streaming/skill-plus-tools.test.js.map +0 -1
- package/dist/tests/streaming/sse-translator.test.d.ts +0 -2
- package/dist/tests/streaming/sse-translator.test.d.ts.map +0 -1
- package/dist/tests/streaming/sse-translator.test.js +0 -227
- package/dist/tests/streaming/sse-translator.test.js.map +0 -1
- package/dist/tests/streaming/tool-result-roundtrip.test.d.ts +0 -11
- package/dist/tests/streaming/tool-result-roundtrip.test.d.ts.map +0 -1
- package/dist/tests/streaming/tool-result-roundtrip.test.js +0 -215
- package/dist/tests/streaming/tool-result-roundtrip.test.js.map +0 -1
- package/dist/tests/streaming/tool-use-translation.test.d.ts +0 -10
- package/dist/tests/streaming/tool-use-translation.test.d.ts.map +0 -1
- package/dist/tests/streaming/tool-use-translation.test.js +0 -251
- package/dist/tests/streaming/tool-use-translation.test.js.map +0 -1
- package/dist/tests/telegram-bridge.test.d.ts +0 -2
- package/dist/tests/telegram-bridge.test.d.ts.map +0 -1
- package/dist/tests/telegram-bridge.test.js +0 -17
- package/dist/tests/telegram-bridge.test.js.map +0 -1
- package/dist/tests/telegram-injector.test.d.ts +0 -2
- package/dist/tests/telegram-injector.test.d.ts.map +0 -1
- package/dist/tests/telegram-injector.test.js +0 -74
- package/dist/tests/telegram-injector.test.js.map +0 -1
- package/dist/tests/telemetry.test.d.ts +0 -2
- package/dist/tests/telemetry.test.d.ts.map +0 -1
- package/dist/tests/telemetry.test.js +0 -405
- package/dist/tests/telemetry.test.js.map +0 -1
- package/dist/tests/test-mode.test.d.ts +0 -2
- package/dist/tests/test-mode.test.d.ts.map +0 -1
- package/dist/tests/test-mode.test.js +0 -39
- 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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,GAAG,kCAAkC,CAAC;AAEtD,6EAA6E;AAE7E,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,MAA+B;IAOzE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,OAAO,SAAS,IAAI,MAAM,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;aAC1C;SACF,CAAC;QACF,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE;YAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAAc,EACd,IAAY,EACZ,QAAiB,EACjB,WAAqB,EACrB,gBAAgC;IAEhC,IAAI,CAAC;QACH,MAAM,IAAI,GAA4B,EAAE,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC;QAC1F,IAAI,QAAQ;YAAE,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,WAAW;YAAE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QACjD,IAAI,gBAAgB;YAAE,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,aAAa,EAAE;YAC3C,GAAG,IAAI;YACP,IAAI;YACJ,UAAU,EAAE,YAAY;SACzB,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAC5D,OAAO,WAAW,CAAC,aAAa,EAAE;YAChC,GAAG,IAAI;YACP,IAAI,EAAE,KAAK,IAAI,gBAAgB;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAAc,EACd,SAAiB,EACjB,IAAY,EACZ,WAAqB;IAErB,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B;YACtC,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,SAAS;YACrB,IAAI;YACJ,UAAU,EAAE,YAAY;YACxB,wBAAwB,EAAE,IAAI;SAC/B,CAAC;QACF,IAAI,WAAW;YAAE,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;YAC1F,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,EAAE,WAAW,IAAI,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,yBAAyB,MAAM,IAAI,CAAC,CAAC;YAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;QAC7B,CAAC;QACD,IAAI,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAA4B;YACxC,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,KAAK,IAAI,gBAAgB;YAC/B,wBAAwB,EAAE,IAAI;SAC/B,CAAC;QACF,IAAI,WAAW;YAAE,QAAQ,CAAC,YAAY,GAAG,WAAW,CAAC;QACrD,OAAO,WAAW,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAsCD,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,eAAe,GACnB,KAAK,CAAC,kBAAkB;YACxB,KAAK,CAAC,IAAI,EAAE,kBAAkB;YAC9B,KAAK,CAAC,eAAe;YACrB,EAAE,CAAC;QACL,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,EAAE;YACF,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS;YACnC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAC9B,SAAS,EAAE,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE;YAC9C,eAAe;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,EAAE;YACF,SAAS,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE;YAC9C,QAAQ,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS;YAC1D,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;YAC5C,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;YAC/C,eAAe,EACb,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,eAAe,IAAI,EAAE;SAC1D,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,EAAE;YACF,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;YACxB,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -37,8 +37,27 @@ export function register(api) {
|
|
|
37
37
|
if (!sk)
|
|
38
38
|
return;
|
|
39
39
|
const entry = activeSavvyCards.get(sk);
|
|
40
|
-
if (!entry)
|
|
40
|
+
if (!entry) {
|
|
41
|
+
// v0.10.1: log + persist a minimal JSONL entry so the daily savvy-turns
|
|
42
|
+
// file isn't completely empty when activeSavvyCards has a key-alignment
|
|
43
|
+
// miss. Diagnostics for the v0.10.2 root-cause fix (session-key drift
|
|
44
|
+
// between tool-tracker and completion-summary).
|
|
45
|
+
logger.info(`${PLUGIN_TAG} [savvy-card] reply_dispatch for unknown sessionKey=${sk} — writing minimal log entry`);
|
|
46
|
+
try {
|
|
47
|
+
const dayStr = new Date().toISOString().slice(0, 10);
|
|
48
|
+
mkdirSync(SAVVY_LOG_DIR, { recursive: true });
|
|
49
|
+
appendFileSync(`${SAVVY_LOG_DIR}/${dayStr}.jsonl`, JSON.stringify({
|
|
50
|
+
ts: Date.now(),
|
|
51
|
+
sessionKey: sk,
|
|
52
|
+
status: 'card-miss',
|
|
53
|
+
note: 'reply_dispatch fired but activeSavvyCards lookup returned undefined',
|
|
54
|
+
}) + '\n');
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Best-effort — never block dispatch on logging
|
|
58
|
+
}
|
|
41
59
|
return;
|
|
60
|
+
}
|
|
42
61
|
// Clean up bridge + stall timer
|
|
43
62
|
if (entry._bridgeCleanup) {
|
|
44
63
|
entry._bridgeCleanup();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion-summary.js","sourceRoot":"","sources":["../../../../src/channels/telegram/completion-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,WAAW,EACX,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAS3B,6EAA6E;AAE7E,MAAM,UAAU,GAAG,2CAA2C,CAAC;AAC/D,MAAM,aAAa,GAAG,4CAA4C,CAAC;AACnE,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,qBAAqB;AAE5E,6EAA6E;AAC7E,qFAAqF;AAErF,6EAA6E;AAE7E;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAc;IACrC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC;IAErC,oBAAoB,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,EAAE,GAAG,EAAE;QAC7E,yEAAyE;QACzE,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAc,EAAE,EAAE;YAC1C,MAAM,EAAE,GAAG,KAAgC,CAAC;YAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,EAAE;gBAAE,OAAO;YAEhB,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"completion-summary.js","sourceRoot":"","sources":["../../../../src/channels/telegram/completion-summary.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
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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 {};
|