@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.
- package/dist/src/channels/adapter.js +0 -1
- package/dist/src/channels/telegram-mirror/askuser.js +0 -1
- package/dist/src/channels/telegram-mirror/burst-accumulator.js +0 -1
- package/dist/src/channels/telegram-mirror/callback-mapping.js +0 -1
- package/dist/src/channels/telegram-mirror/card-renderer.js +63 -21
- package/dist/src/channels/telegram-mirror/card-state.js +0 -1
- package/dist/src/channels/telegram-mirror/commands.js +0 -1
- package/dist/src/channels/telegram-mirror/compose-buffer.js +0 -1
- package/dist/src/channels/telegram-mirror/cost-views.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/callback-data-overflow.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/gateway-down.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/in-flight-conflict.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/index.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/model-5xx.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/network-blip.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/pool-exhausted-fallback.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/rate-limit.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/returning-after-24h.js +0 -1
- package/dist/src/channels/telegram-mirror/failure/types.js +0 -1
- package/dist/src/channels/telegram-mirror/inbound-handler.js +0 -1
- package/dist/src/channels/telegram-mirror/index.js +0 -1
- package/dist/src/channels/telegram-mirror/plan-attachment.js +0 -1
- package/dist/src/channels/telegram-mirror/quota-reader.js +0 -1
- package/dist/src/channels/telegram-mirror/sessions-keyboard.js +0 -1
- package/dist/src/channels/telegram-mirror/soak-log.js +0 -1
- package/dist/src/channels/telegram-mirror/state-machine.js +21 -2
- package/dist/src/channels/telegram-mirror/status-line.js +0 -1
- package/dist/src/channels/telegram-mirror/sync-commands.js +0 -1
- package/dist/src/channels/telegram-mirror/threshold-watcher.js +0 -1
- package/dist/src/channels/telegram-mirror/turn-bridge.js +21 -2
- package/dist/src/cli/checks/bridge-wiring.js +0 -1
- package/dist/src/cli/checks/config-schema.js +0 -1
- package/dist/src/cli/checks/critical-openclaw-json-keys.js +0 -1
- package/dist/src/cli/checks/install-path.js +0 -1
- package/dist/src/cli/checks/patch-scaffold.js +0 -1
- package/dist/src/cli/doctor.js +0 -1
- package/dist/src/cli/index.js +0 -1
- package/dist/src/cli/migrate.js +0 -1
- package/dist/src/command-router/cc-handler.js +0 -1
- package/dist/src/command-router/index.js +0 -1
- package/dist/src/command-router/launch-policy.js +0 -1
- package/dist/src/command-router/resume-policy.js +0 -1
- package/dist/src/command-router/turn-formatter.js +0 -1
- package/dist/src/config/drift-detector.js +0 -1
- package/dist/src/config/loader.js +0 -1
- package/dist/src/config/schema.js +0 -1
- package/dist/src/constants.js +0 -1
- package/dist/src/council/build-agent-prompt.js +0 -1
- package/dist/src/council/cleanup-worktrees.js +0 -1
- package/dist/src/council/consensus.js +0 -1
- package/dist/src/council/council.js +0 -1
- package/dist/src/council/index.js +0 -1
- package/dist/src/council/system-prompt.js +0 -1
- package/dist/src/council/write-worktree-claude-md.js +0 -1
- package/dist/src/engines/base-oneshot-session.js +0 -1
- package/dist/src/engines/heartbeat-guard.js +0 -1
- package/dist/src/engines/index.js +0 -1
- package/dist/src/engines/persistent-codex-session.js +0 -1
- package/dist/src/engines/persistent-cursor-session.js +0 -1
- package/dist/src/engines/persistent-custom-session.js +0 -1
- package/dist/src/engines/persistent-gemini-session.js +0 -1
- package/dist/src/engines/persistent-session.js +30 -1
- package/dist/src/engines/resolve-bin.js +0 -1
- package/dist/src/engines/subprocess-pool.js +0 -1
- package/dist/src/health/handler.js +0 -1
- package/dist/src/health/index.js +0 -1
- package/dist/src/health/metrics.js +0 -1
- package/dist/src/index.js +0 -1
- package/dist/src/lib/auto-recovery.js +0 -1
- package/dist/src/lib/cache-parity.js +0 -1
- package/dist/src/lib/circuit-breaker.js +0 -1
- package/dist/src/lib/config-service.js +0 -1
- package/dist/src/lib/config.js +0 -1
- package/dist/src/lib/cost-rollup.js +0 -1
- package/dist/src/lib/debounce.js +0 -1
- package/dist/src/lib/debug-tap.js +0 -1
- package/dist/src/lib/domain-error.js +0 -1
- package/dist/src/lib/drift-detector.js +0 -1
- package/dist/src/lib/env-overrides.js +0 -1
- package/dist/src/lib/error-formatter.js +0 -1
- package/dist/src/lib/error-renderer.js +0 -1
- package/dist/src/lib/heartbeat-config.js +0 -1
- package/dist/src/lib/heartbeat-workaround.js +0 -1
- package/dist/src/lib/http-agent.js +0 -1
- package/dist/src/lib/index.js +0 -1
- package/dist/src/lib/json-array.js +0 -1
- package/dist/src/lib/markdown-to-mdv2.js +0 -1
- package/dist/src/lib/markdown-v2.js +0 -1
- package/dist/src/lib/perf/async-compact.js +0 -1
- package/dist/src/lib/perf/direct-sdk.js +0 -1
- package/dist/src/lib/perf/haiku-route.js +0 -1
- package/dist/src/lib/perf/predictive-continuation.js +0 -1
- package/dist/src/lib/perf/read-batch.js +0 -1
- package/dist/src/lib/perf/skill-list-collapse.js +0 -1
- package/dist/src/lib/perf/speculative-bubble.js +0 -1
- package/dist/src/lib/perf/typing-prefetch.js +0 -1
- package/dist/src/lib/register-guard.js +0 -1
- package/dist/src/lib/req-shape-log.js +0 -1
- package/dist/src/lib/safe-upstream-probes.js +0 -1
- package/dist/src/lib/session-registry.js +0 -1
- package/dist/src/lib/spawn-async.js +0 -1
- package/dist/src/lib/stale-pid-files.js +0 -1
- package/dist/src/lib/status-tee-reader.js +0 -1
- package/dist/src/lib/sysprompt-strip.js +0 -1
- package/dist/src/lib/telegram-bot-api.js +0 -1
- package/dist/src/lib/telemetry.js +0 -1
- package/dist/src/lib/test-mode.js +0 -1
- package/dist/src/lib/trajectory.js +0 -1
- package/dist/src/lib/vendor-paths.js +0 -1
- package/dist/src/lifecycle/boot.js +0 -1
- package/dist/src/lifecycle/patch-manifest.js +0 -1
- package/dist/src/lifecycle/phase-import-upstream.js +0 -1
- package/dist/src/lifecycle/phase-install-patches.js +0 -1
- package/dist/src/lifecycle/phase-schedule-jobs.js +0 -1
- package/dist/src/lifecycle/phase-start-server.js +0 -1
- package/dist/src/lifecycle/phase-validate-config.js +0 -1
- package/dist/src/lifecycle/phase-validate-upstream.js +0 -1
- package/dist/src/lifecycle/phase-wire-handlers.js +0 -1
- package/dist/src/lifecycle/safe-restart.js +0 -1
- package/dist/src/logger.js +0 -1
- package/dist/src/mcp/bridge.js +0 -1
- package/dist/src/mcp/index.js +0 -1
- package/dist/src/models.js +0 -1
- package/dist/src/observability/event-bus.js +0 -1
- package/dist/src/observability/get-event-bus.js +0 -1
- package/dist/src/observability/observability-service.js +0 -1
- package/dist/src/observability/perf-telemetry.js +0 -1
- package/dist/src/observability/subscribers/metrics.js +0 -1
- package/dist/src/observability/subscribers/session-capture.js +0 -1
- package/dist/src/openai-compat/bridges/allowlist.js +0 -1
- package/dist/src/openai-compat/bridges/factory.js +0 -1
- package/dist/src/openai-compat/bridges/media-bridge.js +0 -1
- package/dist/src/openai-compat/bridges/openclaw-api-shim.js +0 -1
- package/dist/src/openai-compat/bridges/openclaw-native-tools.js +0 -1
- package/dist/src/openai-compat/bridges/openclaw-tool-registry.js +0 -1
- package/dist/src/openai-compat/bridges/tts-media-bridge.js +0 -1
- package/dist/src/openai-compat/cli-stream-parser.js +0 -1
- package/dist/src/openai-compat/index.js +0 -1
- package/dist/src/openai-compat/message-extractor.js +0 -1
- package/dist/src/openai-compat/mode-flags.js +0 -1
- package/dist/src/openai-compat/non-streaming-handler.js +4 -2
- package/dist/src/openai-compat/openai-chunk-types.js +0 -1
- package/dist/src/openai-compat/openai-compat.js +0 -1
- package/dist/src/openai-compat/openai-types.js +0 -1
- package/dist/src/openai-compat/parse-route-body.js +0 -1
- package/dist/src/openai-compat/prompts.js +0 -1
- package/dist/src/openai-compat/response-formatter.js +0 -1
- package/dist/src/openai-compat/session-key-resolver.js +0 -1
- package/dist/src/openai-compat/skill-resolver.js +0 -1
- package/dist/src/openai-compat/sse-translator.js +0 -1
- package/dist/src/openai-compat/status-reporter.js +0 -1
- package/dist/src/openai-compat/streaming-handler.js +6 -2
- package/dist/src/openai-compat/tool-calls-parser.js +0 -1
- package/dist/src/openai-compat/tool-results-serializer.js +0 -1
- package/dist/src/openai-compat/tts-rule.js +0 -1
- package/dist/src/openai-compat/voice-recovery.js +0 -1
- package/dist/src/patches/cache-parity-registry.js +0 -1
- package/dist/src/patches/claude-md-injection.js +0 -1
- package/dist/src/patches/cwd-redirect.js +0 -1
- package/dist/src/patches/embedded-server-route.js +0 -1
- package/dist/src/patches/pricing-overrides.js +0 -1
- package/dist/src/patches/resume-registry-restore.js +0 -1
- package/dist/src/patches/session-pid-tracking.js +0 -1
- package/dist/src/patches/sysprompt-strip.js +0 -1
- package/dist/src/patches/tools-restoration.js +0 -1
- package/dist/src/persistence/migration-v0.js +0 -1
- package/dist/src/persistence/session-registry.js +0 -1
- package/dist/src/persistence/snapshot.js +0 -1
- package/dist/src/persistence/wal.js +0 -1
- package/dist/src/proxy/anthropic-adapter.js +0 -1
- package/dist/src/proxy/handler.js +0 -1
- package/dist/src/proxy/index.js +0 -1
- package/dist/src/proxy/schema-cleaner.js +0 -1
- package/dist/src/proxy/thought-cache.js +0 -1
- package/dist/src/session/embedded-server.js +0 -1
- package/dist/src/session/inbox-manager.js +0 -1
- package/dist/src/session/index.js +0 -1
- package/dist/src/session/persisted-sessions.js +0 -1
- package/dist/src/session/session-manager.js +0 -1
- package/dist/src/session/watchdogs.js +0 -1
- package/dist/src/session-bootstrap/boot-self-heal.js +0 -1
- package/dist/src/session-bootstrap/cwd-patch.js +0 -1
- package/dist/src/session-bootstrap/index.js +0 -1
- package/dist/src/session-bootstrap/resume-registry.js +0 -1
- package/dist/src/session-bootstrap/session-hygiene.js +0 -1
- package/dist/src/session-bootstrap/sysprompt-strip.js +0 -1
- package/dist/src/session-bootstrap/think-conflict-resolver.js +0 -1
- package/dist/src/types/index.js +0 -1
- package/dist/src/types/route.js +0 -1
- package/dist/src/types/runtime-config.js +0 -1
- package/dist/src/types/session.js +0 -1
- package/dist/src/types/sse.js +0 -1
- package/dist/src/types/tool-bridge.js +0 -1
- package/dist/src/types/upstream.js +0 -1
- package/dist/src/types.js +0 -1
- package/dist/src/validation.js +0 -1
- package/package.json +1 -1
- package/dist/src/channels/adapter.js.map +0 -1
- package/dist/src/channels/telegram/card-renderer.d.ts +0 -80
- package/dist/src/channels/telegram/card-renderer.js +0 -169
- package/dist/src/channels/telegram/card-renderer.js.map +0 -1
- package/dist/src/channels/telegram/completion-summary.d.ts +0 -21
- package/dist/src/channels/telegram/completion-summary.js +0 -218
- package/dist/src/channels/telegram/completion-summary.js.map +0 -1
- package/dist/src/channels/telegram/edit-cadence.d.ts +0 -37
- package/dist/src/channels/telegram/edit-cadence.js +0 -50
- package/dist/src/channels/telegram/edit-cadence.js.map +0 -1
- package/dist/src/channels/telegram/error-renderer.d.ts +0 -29
- package/dist/src/channels/telegram/error-renderer.js +0 -133
- package/dist/src/channels/telegram/error-renderer.js.map +0 -1
- package/dist/src/channels/telegram/event-reducer.d.ts +0 -33
- package/dist/src/channels/telegram/event-reducer.js +0 -647
- package/dist/src/channels/telegram/event-reducer.js.map +0 -1
- package/dist/src/channels/telegram/format-helpers.d.ts +0 -20
- package/dist/src/channels/telegram/format-helpers.js +0 -34
- package/dist/src/channels/telegram/format-helpers.js.map +0 -1
- package/dist/src/channels/telegram/index.d.ts +0 -13
- package/dist/src/channels/telegram/index.js +0 -14
- package/dist/src/channels/telegram/index.js.map +0 -1
- package/dist/src/channels/telegram/injector.d.ts +0 -53
- package/dist/src/channels/telegram/injector.js +0 -271
- package/dist/src/channels/telegram/injector.js.map +0 -1
- package/dist/src/channels/telegram/insight-formatter.d.ts +0 -36
- package/dist/src/channels/telegram/insight-formatter.js +0 -36
- package/dist/src/channels/telegram/insight-formatter.js.map +0 -1
- package/dist/src/channels/telegram/live-card.d.ts +0 -185
- package/dist/src/channels/telegram/live-card.js +0 -868
- package/dist/src/channels/telegram/live-card.js.map +0 -1
- package/dist/src/channels/telegram/logger.d.ts +0 -10
- package/dist/src/channels/telegram/logger.js +0 -13
- package/dist/src/channels/telegram/logger.js.map +0 -1
- package/dist/src/channels/telegram/result-preview.d.ts +0 -12
- package/dist/src/channels/telegram/result-preview.js +0 -48
- package/dist/src/channels/telegram/result-preview.js.map +0 -1
- package/dist/src/channels/telegram/speculative-bubble.d.ts +0 -33
- package/dist/src/channels/telegram/speculative-bubble.js +0 -42
- package/dist/src/channels/telegram/speculative-bubble.js.map +0 -1
- package/dist/src/channels/telegram/state-machine.d.ts +0 -22
- package/dist/src/channels/telegram/state-machine.js +0 -72
- package/dist/src/channels/telegram/state-machine.js.map +0 -1
- package/dist/src/channels/telegram/throttle-controller.d.ts +0 -88
- package/dist/src/channels/telegram/throttle-controller.js +0 -203
- package/dist/src/channels/telegram/throttle-controller.js.map +0 -1
- package/dist/src/channels/telegram/tool-tracker.d.ts +0 -149
- package/dist/src/channels/telegram/tool-tracker.js +0 -578
- package/dist/src/channels/telegram/tool-tracker.js.map +0 -1
- package/dist/src/channels/telegram-mirror/askuser.js.map +0 -1
- package/dist/src/channels/telegram-mirror/burst-accumulator.js.map +0 -1
- package/dist/src/channels/telegram-mirror/callback-mapping.js.map +0 -1
- package/dist/src/channels/telegram-mirror/card-renderer.js.map +0 -1
- package/dist/src/channels/telegram-mirror/card-state.js.map +0 -1
- package/dist/src/channels/telegram-mirror/commands.js.map +0 -1
- package/dist/src/channels/telegram-mirror/compose-buffer.js.map +0 -1
- package/dist/src/channels/telegram-mirror/cost-views.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/callback-data-overflow.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/gateway-down.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/in-flight-conflict.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/index.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/model-5xx.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/network-blip.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/pool-exhausted-fallback.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/rate-limit.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/returning-after-24h.js.map +0 -1
- package/dist/src/channels/telegram-mirror/failure/types.js.map +0 -1
- package/dist/src/channels/telegram-mirror/inbound-handler.js.map +0 -1
- package/dist/src/channels/telegram-mirror/index.js.map +0 -1
- package/dist/src/channels/telegram-mirror/plan-attachment.js.map +0 -1
- package/dist/src/channels/telegram-mirror/quota-reader.js.map +0 -1
- package/dist/src/channels/telegram-mirror/sessions-keyboard.js.map +0 -1
- package/dist/src/channels/telegram-mirror/soak-log.js.map +0 -1
- package/dist/src/channels/telegram-mirror/state-machine.js.map +0 -1
- package/dist/src/channels/telegram-mirror/status-line.js.map +0 -1
- package/dist/src/channels/telegram-mirror/sync-commands.js.map +0 -1
- package/dist/src/channels/telegram-mirror/threshold-watcher.js.map +0 -1
- package/dist/src/channels/telegram-mirror/turn-bridge.js.map +0 -1
- package/dist/src/cli/checks/bridge-wiring.js.map +0 -1
- package/dist/src/cli/checks/config-schema.js.map +0 -1
- package/dist/src/cli/checks/critical-openclaw-json-keys.js.map +0 -1
- package/dist/src/cli/checks/install-path.js.map +0 -1
- package/dist/src/cli/checks/patch-scaffold.js.map +0 -1
- package/dist/src/cli/doctor.js.map +0 -1
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/migrate.js.map +0 -1
- package/dist/src/command-router/cc-handler.js.map +0 -1
- package/dist/src/command-router/index.js.map +0 -1
- package/dist/src/command-router/launch-policy.js.map +0 -1
- package/dist/src/command-router/resume-policy.js.map +0 -1
- package/dist/src/command-router/turn-formatter.js.map +0 -1
- package/dist/src/config/drift-detector.js.map +0 -1
- package/dist/src/config/loader.js.map +0 -1
- package/dist/src/config/schema.js.map +0 -1
- package/dist/src/constants.js.map +0 -1
- package/dist/src/council/build-agent-prompt.js.map +0 -1
- package/dist/src/council/cleanup-worktrees.js.map +0 -1
- package/dist/src/council/consensus.js.map +0 -1
- package/dist/src/council/council.js.map +0 -1
- package/dist/src/council/index.js.map +0 -1
- package/dist/src/council/system-prompt.js.map +0 -1
- package/dist/src/council/write-worktree-claude-md.js.map +0 -1
- package/dist/src/engines/base-oneshot-session.js.map +0 -1
- package/dist/src/engines/heartbeat-guard.js.map +0 -1
- package/dist/src/engines/index.js.map +0 -1
- package/dist/src/engines/persistent-codex-session.js.map +0 -1
- package/dist/src/engines/persistent-cursor-session.js.map +0 -1
- package/dist/src/engines/persistent-custom-session.js.map +0 -1
- package/dist/src/engines/persistent-gemini-session.js.map +0 -1
- package/dist/src/engines/persistent-session.js.map +0 -1
- package/dist/src/engines/resolve-bin.js.map +0 -1
- package/dist/src/engines/subprocess-pool.js.map +0 -1
- package/dist/src/health/handler.js.map +0 -1
- package/dist/src/health/index.js.map +0 -1
- package/dist/src/health/metrics.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/lib/auto-recovery.js.map +0 -1
- package/dist/src/lib/cache-parity.js.map +0 -1
- package/dist/src/lib/circuit-breaker.js.map +0 -1
- package/dist/src/lib/config-service.js.map +0 -1
- package/dist/src/lib/config.js.map +0 -1
- package/dist/src/lib/cost-rollup.js.map +0 -1
- package/dist/src/lib/debounce.js.map +0 -1
- package/dist/src/lib/debug-tap.js.map +0 -1
- package/dist/src/lib/domain-error.js.map +0 -1
- package/dist/src/lib/drift-detector.js.map +0 -1
- package/dist/src/lib/env-overrides.js.map +0 -1
- package/dist/src/lib/error-formatter.js.map +0 -1
- package/dist/src/lib/error-renderer.js.map +0 -1
- package/dist/src/lib/heartbeat-config.js.map +0 -1
- package/dist/src/lib/heartbeat-workaround.js.map +0 -1
- package/dist/src/lib/http-agent.js.map +0 -1
- package/dist/src/lib/index.js.map +0 -1
- package/dist/src/lib/json-array.js.map +0 -1
- package/dist/src/lib/markdown-to-mdv2.js.map +0 -1
- package/dist/src/lib/markdown-v2.js.map +0 -1
- package/dist/src/lib/perf/async-compact.js.map +0 -1
- package/dist/src/lib/perf/direct-sdk.js.map +0 -1
- package/dist/src/lib/perf/haiku-route.js.map +0 -1
- package/dist/src/lib/perf/predictive-continuation.js.map +0 -1
- package/dist/src/lib/perf/read-batch.js.map +0 -1
- package/dist/src/lib/perf/skill-list-collapse.js.map +0 -1
- package/dist/src/lib/perf/speculative-bubble.js.map +0 -1
- package/dist/src/lib/perf/typing-prefetch.js.map +0 -1
- package/dist/src/lib/register-guard.js.map +0 -1
- package/dist/src/lib/req-shape-log.js.map +0 -1
- package/dist/src/lib/safe-upstream-probes.js.map +0 -1
- package/dist/src/lib/session-registry.js.map +0 -1
- package/dist/src/lib/spawn-async.js.map +0 -1
- package/dist/src/lib/stale-pid-files.js.map +0 -1
- package/dist/src/lib/status-tee-reader.js.map +0 -1
- package/dist/src/lib/sysprompt-strip.js.map +0 -1
- package/dist/src/lib/telegram-bot-api.js.map +0 -1
- package/dist/src/lib/telemetry.js.map +0 -1
- package/dist/src/lib/test-mode.js.map +0 -1
- package/dist/src/lib/trajectory.js.map +0 -1
- package/dist/src/lib/vendor-paths.js.map +0 -1
- package/dist/src/lifecycle/boot.js.map +0 -1
- package/dist/src/lifecycle/patch-manifest.js.map +0 -1
- package/dist/src/lifecycle/phase-import-upstream.js.map +0 -1
- package/dist/src/lifecycle/phase-install-patches.js.map +0 -1
- package/dist/src/lifecycle/phase-schedule-jobs.js.map +0 -1
- package/dist/src/lifecycle/phase-start-server.js.map +0 -1
- package/dist/src/lifecycle/phase-validate-config.js.map +0 -1
- package/dist/src/lifecycle/phase-validate-upstream.js.map +0 -1
- package/dist/src/lifecycle/phase-wire-handlers.js.map +0 -1
- package/dist/src/lifecycle/safe-restart.js.map +0 -1
- package/dist/src/logger.js.map +0 -1
- package/dist/src/mcp/bridge.js.map +0 -1
- package/dist/src/mcp/index.js.map +0 -1
- package/dist/src/models.js.map +0 -1
- package/dist/src/observability/event-bus.js.map +0 -1
- package/dist/src/observability/get-event-bus.js.map +0 -1
- package/dist/src/observability/observability-service.js.map +0 -1
- package/dist/src/observability/perf-telemetry.js.map +0 -1
- package/dist/src/observability/subscribers/metrics.js.map +0 -1
- package/dist/src/observability/subscribers/session-capture.js.map +0 -1
- package/dist/src/openai-compat/bridges/allowlist.js.map +0 -1
- package/dist/src/openai-compat/bridges/factory.js.map +0 -1
- package/dist/src/openai-compat/bridges/media-bridge.js.map +0 -1
- package/dist/src/openai-compat/bridges/openclaw-api-shim.js.map +0 -1
- package/dist/src/openai-compat/bridges/openclaw-native-tools.js.map +0 -1
- package/dist/src/openai-compat/bridges/openclaw-tool-registry.js.map +0 -1
- package/dist/src/openai-compat/bridges/tts-media-bridge.js.map +0 -1
- package/dist/src/openai-compat/cli-stream-parser.js.map +0 -1
- package/dist/src/openai-compat/index.js.map +0 -1
- package/dist/src/openai-compat/message-extractor.js.map +0 -1
- package/dist/src/openai-compat/mode-flags.js.map +0 -1
- package/dist/src/openai-compat/non-streaming-handler.js.map +0 -1
- package/dist/src/openai-compat/openai-chunk-types.js.map +0 -1
- package/dist/src/openai-compat/openai-compat.js.map +0 -1
- package/dist/src/openai-compat/openai-types.js.map +0 -1
- package/dist/src/openai-compat/parse-route-body.js.map +0 -1
- package/dist/src/openai-compat/prompts.js.map +0 -1
- package/dist/src/openai-compat/response-formatter.js.map +0 -1
- package/dist/src/openai-compat/session-key-resolver.js.map +0 -1
- package/dist/src/openai-compat/skill-resolver.js.map +0 -1
- package/dist/src/openai-compat/sse-translator.js.map +0 -1
- package/dist/src/openai-compat/status-reporter.js.map +0 -1
- package/dist/src/openai-compat/streaming-handler.js.map +0 -1
- package/dist/src/openai-compat/tool-calls-parser.js.map +0 -1
- package/dist/src/openai-compat/tool-results-serializer.js.map +0 -1
- package/dist/src/openai-compat/tts-rule.js.map +0 -1
- package/dist/src/openai-compat/voice-recovery.js.map +0 -1
- package/dist/src/patches/cache-parity-registry.js.map +0 -1
- package/dist/src/patches/claude-md-injection.js.map +0 -1
- package/dist/src/patches/cwd-redirect.js.map +0 -1
- package/dist/src/patches/embedded-server-route.js.map +0 -1
- package/dist/src/patches/pricing-overrides.js.map +0 -1
- package/dist/src/patches/resume-registry-restore.js.map +0 -1
- package/dist/src/patches/session-pid-tracking.js.map +0 -1
- package/dist/src/patches/sysprompt-strip.js.map +0 -1
- package/dist/src/patches/sysprompt-strip.spec.d.ts +0 -33
- package/dist/src/patches/sysprompt-strip.spec.js +0 -53
- package/dist/src/patches/sysprompt-strip.spec.js.map +0 -1
- package/dist/src/patches/tools-restoration.js.map +0 -1
- package/dist/src/persistence/migration-v0.js.map +0 -1
- package/dist/src/persistence/session-registry.js.map +0 -1
- package/dist/src/persistence/snapshot.js.map +0 -1
- package/dist/src/persistence/wal.js.map +0 -1
- package/dist/src/proxy/anthropic-adapter.js.map +0 -1
- package/dist/src/proxy/handler.js.map +0 -1
- package/dist/src/proxy/index.js.map +0 -1
- package/dist/src/proxy/schema-cleaner.js.map +0 -1
- package/dist/src/proxy/thought-cache.js.map +0 -1
- package/dist/src/session/embedded-server.js.map +0 -1
- package/dist/src/session/inbox-manager.js.map +0 -1
- package/dist/src/session/index.js.map +0 -1
- package/dist/src/session/persisted-sessions.js.map +0 -1
- package/dist/src/session/session-manager.js.map +0 -1
- package/dist/src/session/watchdogs.js.map +0 -1
- package/dist/src/session-bootstrap/boot-self-heal.js.map +0 -1
- package/dist/src/session-bootstrap/cwd-patch.js.map +0 -1
- package/dist/src/session-bootstrap/index.js.map +0 -1
- package/dist/src/session-bootstrap/resume-registry.js.map +0 -1
- package/dist/src/session-bootstrap/session-hygiene.js.map +0 -1
- package/dist/src/session-bootstrap/sysprompt-strip.js.map +0 -1
- package/dist/src/session-bootstrap/think-conflict-resolver.js.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/route.js.map +0 -1
- package/dist/src/types/runtime-config.js.map +0 -1
- package/dist/src/types/session.js.map +0 -1
- package/dist/src/types/sse.js.map +0 -1
- package/dist/src/types/tool-bridge.js.map +0 -1
- package/dist/src/types/upstream.js.map +0 -1
- package/dist/src/types.js.map +0 -1
- package/dist/src/validation.js.map +0 -1
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* telegram completion-summary — TypeScript port of savvy-claude-code/ux-bridge.js
|
|
3
|
-
*
|
|
4
|
-
* Handles reply_dispatch finalization for Savvy cards:
|
|
5
|
-
* - Marks card done, generates next-steps, renders final state
|
|
6
|
-
* - Auto-collapse after delay, TTL-delete collapsed card
|
|
7
|
-
* - Completion reactions + auto-pin/unpin error cards
|
|
8
|
-
* - Persists card summary to daily JSONL log
|
|
9
|
-
* - Updates session history cache
|
|
10
|
-
*
|
|
11
|
-
* Source lines: 2077–2222 of ux-bridge.js
|
|
12
|
-
*/
|
|
13
|
-
import { appendFileSync, mkdirSync } from 'node:fs';
|
|
14
|
-
import { defaultRegisterGuard } from '../../lib/register-guard.js';
|
|
15
|
-
import { telegramApi, _logger, } from './live-card.js';
|
|
16
|
-
import { activeSavvyCards, activeSavvyChatIds, savvyQuotaFetcher, setSavvyQuotaFetcher, sessionHistoryCache, savvyButtons, renderSavvyCard, generateNextSteps, } from './tool-tracker.js';
|
|
17
|
-
// ── Constants ─────────────────────────────────────────────────────────────
|
|
18
|
-
const PLUGIN_TAG = '[cc-openclaw/telegram/completion-summary]';
|
|
19
|
-
const SAVVY_LOG_DIR = '/home/a1xai/.openclaw/sessions/savvy-turns';
|
|
20
|
-
const MAX_HISTORY_CACHE = 50;
|
|
21
|
-
// Track last pinned error card per chat for auto-unpin on clean follow-up
|
|
22
|
-
const lastPinnedErrorCard = new Map(); // chatId → messageId
|
|
23
|
-
// ── Internal types ────────────────────────────────────────────────────────
|
|
24
|
-
// (local alias — tool-tracker's SavvyCardState is not re-exported, use unknown cast)
|
|
25
|
-
// ── register() ────────────────────────────────────────────────────────────
|
|
26
|
-
/**
|
|
27
|
-
* Register the completion-summary plugin hook (reply_dispatch).
|
|
28
|
-
* Idempotent — subsequent calls are no-ops.
|
|
29
|
-
*/
|
|
30
|
-
export function register(api) {
|
|
31
|
-
const logger = api.logger || _logger;
|
|
32
|
-
defaultRegisterGuard.guard('channels/telegram/completion-summary', api, () => {
|
|
33
|
-
// ── reply_dispatch: finalize card when Savvy sends its reply ──────────
|
|
34
|
-
api.on('reply_dispatch', (event) => {
|
|
35
|
-
const ev = event;
|
|
36
|
-
const sk = ev.sessionKey;
|
|
37
|
-
if (!sk)
|
|
38
|
-
return;
|
|
39
|
-
const entry = activeSavvyCards.get(sk);
|
|
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
|
-
}
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
// Clean up bridge + stall timer
|
|
62
|
-
if (entry._bridgeCleanup) {
|
|
63
|
-
entry._bridgeCleanup();
|
|
64
|
-
entry._bridgeCleanup = null;
|
|
65
|
-
}
|
|
66
|
-
if (entry._stallTimer)
|
|
67
|
-
clearInterval(entry._stallTimer);
|
|
68
|
-
// If debounce timer never fired, skip card entirely (fast turn)
|
|
69
|
-
if (entry._initialTimer && !entry._initialSent) {
|
|
70
|
-
clearTimeout(entry._initialTimer);
|
|
71
|
-
if (entry._typingInterval) {
|
|
72
|
-
clearInterval(entry._typingInterval);
|
|
73
|
-
entry._typingInterval = null;
|
|
74
|
-
}
|
|
75
|
-
activeSavvyChatIds.delete(entry.chatId);
|
|
76
|
-
activeSavvyCards.delete(sk);
|
|
77
|
-
logger.info(`${PLUGIN_TAG} [savvy-card] Fast turn — skipped card for sessionKey=${sk}`);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
// Flush pending throttled edit — final render supersedes
|
|
81
|
-
if (entry._pendingEdit?.timer) {
|
|
82
|
-
clearTimeout(entry._pendingEdit.timer);
|
|
83
|
-
entry._pendingEdit = null;
|
|
84
|
-
}
|
|
85
|
-
entry._lastEditAt = 0;
|
|
86
|
-
if (entry._typingInterval) {
|
|
87
|
-
clearInterval(entry._typingInterval);
|
|
88
|
-
entry._typingInterval = null;
|
|
89
|
-
}
|
|
90
|
-
entry.state.markDone();
|
|
91
|
-
if (generateNextSteps) {
|
|
92
|
-
// TODO(P2): SavvyCardState type lives in tool-tracker — cast via unknown
|
|
93
|
-
const steps = generateNextSteps(entry.state.getState());
|
|
94
|
-
entry.state.setNextSteps(steps);
|
|
95
|
-
}
|
|
96
|
-
const finalState = entry.state.getState();
|
|
97
|
-
const _render = renderSavvyCard;
|
|
98
|
-
if (_render) {
|
|
99
|
-
const cardText = _render(finalState);
|
|
100
|
-
const markup = savvyButtons(finalState, sk, entry.chatId);
|
|
101
|
-
entry.queue.updateCard(cardText, markup);
|
|
102
|
-
}
|
|
103
|
-
// v0.21.2 mirror fix — defer entry-delete + cleanup to next tick so the
|
|
104
|
-
// `message_sending` hook in tool-tracker (which sets assistantText and
|
|
105
|
-
// re-renders the card) has a chance to run BEFORE the entry is removed
|
|
106
|
-
// from activeSavvyCards/activeSavvyChatIds. Without this defer, message_sending
|
|
107
|
-
// fires too late: by then activeSavvyChatIds.has(chatId) is false and the
|
|
108
|
-
// tool-tracker handler returns early, leaving the live-card without the
|
|
109
|
-
// assistant text mirror surfaced. setTimeout(0) lets any pending payload-
|
|
110
|
-
// delivery synchronous work (which includes message_sending firing) flush
|
|
111
|
-
// before cleanup. The user-visible card has already been edited at line 125
|
|
112
|
-
// with the metrics+next-step shape; the late re-render from tool-tracker
|
|
113
|
-
// mutates the same Telegram message_id with the mirror added.
|
|
114
|
-
setTimeout(() => {
|
|
115
|
-
activeSavvyChatIds.delete(entry.chatId);
|
|
116
|
-
activeSavvyCards.delete(sk);
|
|
117
|
-
if (savvyQuotaFetcher && activeSavvyCards.size === 0) {
|
|
118
|
-
savvyQuotaFetcher.stopPolling();
|
|
119
|
-
setSavvyQuotaFetcher(null);
|
|
120
|
-
}
|
|
121
|
-
}, 500);
|
|
122
|
-
// Auto-collapse after delay (skip error-heavy 🔴 cards)
|
|
123
|
-
if (!finalState.delegated && finalState.qualityScore?.emoji !== '🔴') {
|
|
124
|
-
const collapseDelay = finalState.qualityScore?.emoji === '🟡' ? 30000 : 20000;
|
|
125
|
-
const collapseQueue = entry.queue;
|
|
126
|
-
const collapseEntry = entry;
|
|
127
|
-
setTimeout(() => {
|
|
128
|
-
const elapsedSec = Math.round((finalState.elapsedMs || 0) / 1000);
|
|
129
|
-
const qualEmoji = finalState.qualityScore?.emoji || '✅';
|
|
130
|
-
let collapsed;
|
|
131
|
-
if (finalState.filesModified && finalState.filesModified.length > 0) {
|
|
132
|
-
const fileList = finalState.filesModified.slice(0, 3).join(', ');
|
|
133
|
-
const extra = finalState.filesModified.length > 3 ? ` \\+${finalState.filesModified.length - 3}` : '';
|
|
134
|
-
collapsed = `${qualEmoji} *Savvy* — edited ${fileList}${extra} \\(${elapsedSec}s\\)`;
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
collapsed = `${qualEmoji} *Savvy* — ${finalState.toolCount} tools in ${elapsedSec}s`;
|
|
138
|
-
}
|
|
139
|
-
collapseQueue.updateCard(collapsed, { inline_keyboard: [] });
|
|
140
|
-
setTimeout(() => {
|
|
141
|
-
if (collapseQueue.cardMessageId) {
|
|
142
|
-
telegramApi('deleteMessage', {
|
|
143
|
-
chat_id: collapseEntry.chatId,
|
|
144
|
-
message_id: collapseQueue.cardMessageId,
|
|
145
|
-
}).catch(() => { });
|
|
146
|
-
}
|
|
147
|
-
}, 5 * 60 * 1000);
|
|
148
|
-
}, collapseDelay);
|
|
149
|
-
}
|
|
150
|
-
// Completion reaction on card
|
|
151
|
-
const cardMsgId = entry.queue.cardMessageId;
|
|
152
|
-
if (cardMsgId) {
|
|
153
|
-
const reactionEmoji = finalState.qualityScore?.emoji === '🔴' ? '😬'
|
|
154
|
-
: finalState.qualityScore?.emoji === '🟡' ? '🤔'
|
|
155
|
-
: '👍';
|
|
156
|
-
telegramApi('setMessageReaction', {
|
|
157
|
-
chat_id: entry.chatId,
|
|
158
|
-
message_id: cardMsgId,
|
|
159
|
-
reaction: [{ type: 'emoji', emoji: reactionEmoji }],
|
|
160
|
-
}).catch(() => { });
|
|
161
|
-
if (finalState.qualityScore?.emoji === '🔴') {
|
|
162
|
-
telegramApi('pinChatMessage', {
|
|
163
|
-
chat_id: entry.chatId,
|
|
164
|
-
message_id: cardMsgId,
|
|
165
|
-
disable_notification: true,
|
|
166
|
-
}).catch(() => { });
|
|
167
|
-
lastPinnedErrorCard.set(entry.chatId, cardMsgId);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// Auto-unpin previous error card on clean follow-up
|
|
171
|
-
if (finalState.qualityScore?.emoji === '🟢') {
|
|
172
|
-
const pinnedId = lastPinnedErrorCard.get(entry.chatId);
|
|
173
|
-
if (pinnedId) {
|
|
174
|
-
telegramApi('unpinChatMessage', {
|
|
175
|
-
chat_id: entry.chatId,
|
|
176
|
-
message_id: pinnedId,
|
|
177
|
-
}).catch(() => { });
|
|
178
|
-
lastPinnedErrorCard.delete(entry.chatId);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
// Persist card summary to daily JSONL log
|
|
182
|
-
try {
|
|
183
|
-
const dayStr = new Date().toISOString().slice(0, 10);
|
|
184
|
-
mkdirSync(SAVVY_LOG_DIR, { recursive: true });
|
|
185
|
-
appendFileSync(`${SAVVY_LOG_DIR}/${dayStr}.jsonl`, JSON.stringify({
|
|
186
|
-
ts: Date.now(),
|
|
187
|
-
sessionKey: sk,
|
|
188
|
-
chatId: entry.chatId,
|
|
189
|
-
cardMessageId: cardMsgId || null,
|
|
190
|
-
toolCount: finalState.toolCount,
|
|
191
|
-
errorCount: finalState.errorCount,
|
|
192
|
-
elapsedMs: finalState.elapsedMs,
|
|
193
|
-
filesModified: finalState.filesModified,
|
|
194
|
-
qualityScore: finalState.qualityScore,
|
|
195
|
-
status: finalState.status,
|
|
196
|
-
}) + '\n');
|
|
197
|
-
}
|
|
198
|
-
catch (e) {
|
|
199
|
-
logger.warn(`${PLUGIN_TAG} Failed to persist Savvy card summary: ${e.message}`);
|
|
200
|
-
}
|
|
201
|
-
// Update session history cache for next card's badge
|
|
202
|
-
sessionHistoryCache.set(String(entry.chatId), {
|
|
203
|
-
toolCount: finalState.toolCount,
|
|
204
|
-
elapsedMs: finalState.elapsedMs,
|
|
205
|
-
qualityEmoji: finalState.qualityScore?.emoji || '✅',
|
|
206
|
-
ts: Date.now(),
|
|
207
|
-
});
|
|
208
|
-
if (sessionHistoryCache.size > MAX_HISTORY_CACHE) {
|
|
209
|
-
const oldest = sessionHistoryCache.keys().next().value;
|
|
210
|
-
if (oldest)
|
|
211
|
-
sessionHistoryCache.delete(oldest);
|
|
212
|
-
}
|
|
213
|
-
logger.info(`${PLUGIN_TAG} [savvy-card] Done → finalized sessionKey=${sk}`);
|
|
214
|
-
});
|
|
215
|
-
logger.info(`${PLUGIN_TAG} completion-summary hooks registered (reply_dispatch)`);
|
|
216
|
-
}); // end defaultRegisterGuard.guard
|
|
217
|
-
}
|
|
218
|
-
//# sourceMappingURL=completion-summary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completion-summary.js","sourceRoot":"","sources":["../../../../src/channels/telegram/completion-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* M3 (perf overhaul idea #3) — tiered edit cadence.
|
|
3
|
-
*
|
|
4
|
-
* Computes the trailing-edit delay for the live-card throttle. When the
|
|
5
|
-
* perf-edit-cadence flag is on, returns a 1500ms base interval with ±20%
|
|
6
|
-
* jitter applied; when off, returns the legacy 1200ms-exact value preserved
|
|
7
|
-
* bit-for-bit from `tool-tracker.ts:124` (v0.13.0 throttle).
|
|
8
|
-
*
|
|
9
|
-
* Why jitter: Telegram's per-chat editMessageText rate limit clusters 429s
|
|
10
|
-
* at the integer-second boundary when multiple cards in the same chat tick
|
|
11
|
-
* in lockstep. Spreading the trailing edit ±300ms breaks the clustering
|
|
12
|
-
* without going above the rate ceiling on any individual card.
|
|
13
|
-
*
|
|
14
|
-
* Tier-1 (t=0 placeholder) and tier-2 (immediate first content edit) are
|
|
15
|
-
* already handled by the `since >= interval` fast path in
|
|
16
|
-
* `throttledUpdateCard` — the very first call always finds `_lastEditAt=0`
|
|
17
|
-
* and fires immediately. This module's job is the tier-3 trailing edit
|
|
18
|
-
* pacing only.
|
|
19
|
-
*
|
|
20
|
-
* `rng` is injected for test determinism — production passes Math.random.
|
|
21
|
-
*/
|
|
22
|
-
export declare const LEGACY_EDIT_INTERVAL_MS = 1200;
|
|
23
|
-
export declare const PERF_EDIT_INTERVAL_MS = 1500;
|
|
24
|
-
export declare const PERF_EDIT_JITTER_PCT = 0.2;
|
|
25
|
-
/**
|
|
26
|
-
* Compute the trailing-edit delay given the current throttle state.
|
|
27
|
-
* `since` is the elapsed ms since the last edit; the caller pre-decides
|
|
28
|
-
* whether to fire immediately (since >= interval) or schedule a trailing
|
|
29
|
-
* edit using this delay.
|
|
30
|
-
*/
|
|
31
|
-
export declare function computeTrailingDelayMs(since: number, rng?: () => number): number;
|
|
32
|
-
/**
|
|
33
|
-
* Resolve the active interval for "is this call past the throttle window?"
|
|
34
|
-
* decisions. The flag flip changes both the schedule delay AND the
|
|
35
|
-
* immediate-fire boundary so the two stay consistent.
|
|
36
|
-
*/
|
|
37
|
-
export declare function getActiveEditIntervalMs(): number;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* M3 (perf overhaul idea #3) — tiered edit cadence.
|
|
3
|
-
*
|
|
4
|
-
* Computes the trailing-edit delay for the live-card throttle. When the
|
|
5
|
-
* perf-edit-cadence flag is on, returns a 1500ms base interval with ±20%
|
|
6
|
-
* jitter applied; when off, returns the legacy 1200ms-exact value preserved
|
|
7
|
-
* bit-for-bit from `tool-tracker.ts:124` (v0.13.0 throttle).
|
|
8
|
-
*
|
|
9
|
-
* Why jitter: Telegram's per-chat editMessageText rate limit clusters 429s
|
|
10
|
-
* at the integer-second boundary when multiple cards in the same chat tick
|
|
11
|
-
* in lockstep. Spreading the trailing edit ±300ms breaks the clustering
|
|
12
|
-
* without going above the rate ceiling on any individual card.
|
|
13
|
-
*
|
|
14
|
-
* Tier-1 (t=0 placeholder) and tier-2 (immediate first content edit) are
|
|
15
|
-
* already handled by the `since >= interval` fast path in
|
|
16
|
-
* `throttledUpdateCard` — the very first call always finds `_lastEditAt=0`
|
|
17
|
-
* and fires immediately. This module's job is the tier-3 trailing edit
|
|
18
|
-
* pacing only.
|
|
19
|
-
*
|
|
20
|
-
* `rng` is injected for test determinism — production passes Math.random.
|
|
21
|
-
*/
|
|
22
|
-
import { getPerfEditCadenceEnabled } from '../../lib/config.js';
|
|
23
|
-
export const LEGACY_EDIT_INTERVAL_MS = 1200;
|
|
24
|
-
export const PERF_EDIT_INTERVAL_MS = 1500;
|
|
25
|
-
export const PERF_EDIT_JITTER_PCT = 0.2;
|
|
26
|
-
/**
|
|
27
|
-
* Compute the trailing-edit delay given the current throttle state.
|
|
28
|
-
* `since` is the elapsed ms since the last edit; the caller pre-decides
|
|
29
|
-
* whether to fire immediately (since >= interval) or schedule a trailing
|
|
30
|
-
* edit using this delay.
|
|
31
|
-
*/
|
|
32
|
-
export function computeTrailingDelayMs(since, rng = Math.random) {
|
|
33
|
-
const enabled = getPerfEditCadenceEnabled();
|
|
34
|
-
const interval = enabled ? PERF_EDIT_INTERVAL_MS : LEGACY_EDIT_INTERVAL_MS;
|
|
35
|
-
const baseDelay = interval - since;
|
|
36
|
-
if (!enabled)
|
|
37
|
-
return baseDelay;
|
|
38
|
-
// ±PERF_EDIT_JITTER_PCT applied as a uniform multiplier in [1-pct, 1+pct].
|
|
39
|
-
const jitter = 1 + (rng() * 2 - 1) * PERF_EDIT_JITTER_PCT;
|
|
40
|
-
return Math.max(0, Math.round(baseDelay * jitter));
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Resolve the active interval for "is this call past the throttle window?"
|
|
44
|
-
* decisions. The flag flip changes both the schedule delay AND the
|
|
45
|
-
* immediate-fire boundary so the two stay consistent.
|
|
46
|
-
*/
|
|
47
|
-
export function getActiveEditIntervalMs() {
|
|
48
|
-
return getPerfEditCadenceEnabled() ? PERF_EDIT_INTERVAL_MS : LEGACY_EDIT_INTERVAL_MS;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=edit-cadence.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edit-cadence.js","sourceRoot":"","sources":["../../../../src/channels/telegram/edit-cadence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAa,EACb,MAAoB,IAAI,CAAC,MAAM;IAE/B,MAAM,OAAO,GAAG,yBAAyB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAC3E,MAAM,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,2EAA2E;IAC3E,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB,CAAC;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,yBAAyB,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,uBAAuB,CAAC;AACvF,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* error-renderer — send formatted errors to Telegram via the existing queue.
|
|
3
|
-
*
|
|
4
|
-
* Takes a FormattedError (from error-formatter) and dispatches it via the
|
|
5
|
-
* live-card's telegramApi, with per-code 1h dedup to avoid noise.
|
|
6
|
-
* Reads BOT_TOKEN and chat routing from the live-card module's shared state.
|
|
7
|
-
*/
|
|
8
|
-
import type { FormattedError, Severity } from '../../lib/error-formatter.js';
|
|
9
|
-
/** Test-only reset. */
|
|
10
|
-
export declare function _resetDedupForTests(): void;
|
|
11
|
-
export interface RenderOptions {
|
|
12
|
-
/** Override chat ID (e.g. session-specific routing). */
|
|
13
|
-
chatId?: string;
|
|
14
|
-
/** Thread ID for Telegram topic groups. */
|
|
15
|
-
threadId?: string;
|
|
16
|
-
/** Skip dedup check — force send regardless of window. */
|
|
17
|
-
forceSend?: boolean;
|
|
18
|
-
/** Write to drift jsonl as well. Defaults to true for warning+ severity. */
|
|
19
|
-
writeJsonl?: boolean;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Send a FormattedError to Telegram.
|
|
23
|
-
*
|
|
24
|
-
* Returns true if the message was sent, false if deduped/silenced/no-token.
|
|
25
|
-
*/
|
|
26
|
-
export declare function renderError(formatted: FormattedError, opts?: RenderOptions): Promise<boolean>;
|
|
27
|
-
/** Only send if severity is 'critical' or 'error'. */
|
|
28
|
-
export declare function renderErrorIfSevere(formatted: FormattedError, opts?: RenderOptions): Promise<boolean>;
|
|
29
|
-
export type { Severity };
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
// phase: 4 | pillar: 2 | agent: P2.B
|
|
2
|
-
/**
|
|
3
|
-
* error-renderer — send formatted errors to Telegram via the existing queue.
|
|
4
|
-
*
|
|
5
|
-
* Takes a FormattedError (from error-formatter) and dispatches it via the
|
|
6
|
-
* live-card's telegramApi, with per-code 1h dedup to avoid noise.
|
|
7
|
-
* Reads BOT_TOKEN and chat routing from the live-card module's shared state.
|
|
8
|
-
*/
|
|
9
|
-
import { appendFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
10
|
-
import { join } from 'node:path';
|
|
11
|
-
import { homedir } from 'node:os';
|
|
12
|
-
import { telegramApi, BOT_TOKEN } from './live-card.js';
|
|
13
|
-
// ─── Config ───────────────────────────────────────────────────────────────────
|
|
14
|
-
/** Milliseconds between repeated Telegram alerts for the same error code. */
|
|
15
|
-
function getDedupWindowMs() {
|
|
16
|
-
const v = process.env.OPENCLAW_CC_OPENCLAW_DRIFT_DEDUPE_WINDOW_MS;
|
|
17
|
-
const n = v !== undefined ? parseInt(v, 10) : NaN;
|
|
18
|
-
return Number.isFinite(n) && n > 0 ? n : 3_600_000; // default 1h
|
|
19
|
-
}
|
|
20
|
-
/** Path for drift/error jsonl log. */
|
|
21
|
-
const DRIFT_JSONL_PATH = join(homedir(), '.openclaw', 'workspace', 'memory', 'cc-openclaw-drift.jsonl');
|
|
22
|
-
// ─── Dedup state ─────────────────────────────────────────────────────────────
|
|
23
|
-
/**
|
|
24
|
-
* Per-code last-sent timestamps for dedup. Module-level singleton so it
|
|
25
|
-
* persists across calls within a process lifetime.
|
|
26
|
-
*/
|
|
27
|
-
const _lastSentAt = new Map();
|
|
28
|
-
/** Returns true if this code was sent within the dedup window. */
|
|
29
|
-
function isDupe(code) {
|
|
30
|
-
const last = _lastSentAt.get(code);
|
|
31
|
-
if (last === undefined)
|
|
32
|
-
return false;
|
|
33
|
-
return Date.now() - last < getDedupWindowMs();
|
|
34
|
-
}
|
|
35
|
-
/** Mark a code as sent now. */
|
|
36
|
-
function markSent(code) {
|
|
37
|
-
_lastSentAt.set(code, Date.now());
|
|
38
|
-
}
|
|
39
|
-
/** Test-only reset. */
|
|
40
|
-
export function _resetDedupForTests() {
|
|
41
|
-
_lastSentAt.clear();
|
|
42
|
-
}
|
|
43
|
-
// ─── Chat ID resolution ───────────────────────────────────────────────────────
|
|
44
|
-
/**
|
|
45
|
-
* Resolve the Telegram chat ID to send error alerts to.
|
|
46
|
-
* Prefers OPENCLAW_ERROR_CHAT_ID env var, falls back to
|
|
47
|
-
* OPENCLAW_ADMIN_CHAT_ID, falls back to null (silenced).
|
|
48
|
-
*/
|
|
49
|
-
function resolveErrorChatId() {
|
|
50
|
-
const v = process.env.OPENCLAW_ERROR_CHAT_ID || process.env.OPENCLAW_ADMIN_CHAT_ID;
|
|
51
|
-
return v && v.trim() ? v.trim() : null;
|
|
52
|
-
}
|
|
53
|
-
// ─── JSONL writer ─────────────────────────────────────────────────────────────
|
|
54
|
-
function writeDriftJsonl(formatted) {
|
|
55
|
-
try {
|
|
56
|
-
const dir = join(homedir(), '.openclaw', 'workspace', 'memory');
|
|
57
|
-
if (!existsSync(dir))
|
|
58
|
-
mkdirSync(dir, { recursive: true });
|
|
59
|
-
appendFileSync(DRIFT_JSONL_PATH, JSON.stringify(formatted.jsonlRow) + '\n');
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
// Must never crash the plugin — stderr only
|
|
63
|
-
process.stderr.write(`[cc-openclaw/error-renderer] jsonl write failed: ${err.message}\n`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Send a FormattedError to Telegram.
|
|
68
|
-
*
|
|
69
|
-
* Returns true if the message was sent, false if deduped/silenced/no-token.
|
|
70
|
-
*/
|
|
71
|
-
export async function renderError(formatted, opts = {}) {
|
|
72
|
-
const { jsonlRow, telegramText } = formatted;
|
|
73
|
-
// Always write jsonl for warning/critical/error unless explicitly disabled
|
|
74
|
-
const shouldWriteJsonl = opts.writeJsonl !== false && jsonlRow.severity !== 'info';
|
|
75
|
-
if (shouldWriteJsonl) {
|
|
76
|
-
writeDriftJsonl(formatted);
|
|
77
|
-
}
|
|
78
|
-
// Check dedup
|
|
79
|
-
if (!opts.forceSend && isDupe(jsonlRow.code)) {
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
// Resolve destination
|
|
83
|
-
const chatId = opts.chatId ?? resolveErrorChatId();
|
|
84
|
-
if (!chatId)
|
|
85
|
-
return false;
|
|
86
|
-
// Require bot token
|
|
87
|
-
if (!BOT_TOKEN)
|
|
88
|
-
return false;
|
|
89
|
-
const params = {
|
|
90
|
-
chat_id: chatId,
|
|
91
|
-
text: telegramText,
|
|
92
|
-
parse_mode: 'MarkdownV2',
|
|
93
|
-
};
|
|
94
|
-
if (opts.threadId) {
|
|
95
|
-
params.message_thread_id = opts.threadId;
|
|
96
|
-
}
|
|
97
|
-
try {
|
|
98
|
-
const res = await telegramApi('sendMessage', params);
|
|
99
|
-
if (res.ok) {
|
|
100
|
-
markSent(jsonlRow.code);
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
// If MarkdownV2 fails (parse error), fall back to plain text
|
|
104
|
-
if (res.error_code === 400) {
|
|
105
|
-
const fallback = await telegramApi('sendMessage', {
|
|
106
|
-
chat_id: chatId,
|
|
107
|
-
text: `${jsonlRow.code}: ${jsonlRow.message} (${jsonlRow.ts.slice(0, 19)})`,
|
|
108
|
-
...(opts.threadId ? { message_thread_id: opts.threadId } : {}),
|
|
109
|
-
});
|
|
110
|
-
if (fallback.ok) {
|
|
111
|
-
markSent(jsonlRow.code);
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
catch (err) {
|
|
118
|
-
process.stderr.write(`[cc-openclaw/error-renderer] send failed: ${err.message}\n`);
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
// ─── Severity-filtered convenience ───────────────────────────────────────────
|
|
123
|
-
/** Only send if severity is 'critical' or 'error'. */
|
|
124
|
-
export async function renderErrorIfSevere(formatted, opts = {}) {
|
|
125
|
-
const sev = formatted.jsonlRow.severity;
|
|
126
|
-
if (sev === 'info' || sev === 'warning') {
|
|
127
|
-
// Still write jsonl
|
|
128
|
-
writeDriftJsonl(formatted);
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
return renderError(formatted, opts);
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=error-renderer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-renderer.js","sourceRoot":"","sources":["../../../../src/channels/telegram/error-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* telegram event-reducer — TypeScript port of savvy-claude-code/ux-bridge.js
|
|
3
|
-
*
|
|
4
|
-
* Central register() that wires all remaining api.on() hooks:
|
|
5
|
-
* before_dispatch ×4 — /quota command, /sessions command, claude-local UX
|
|
6
|
-
* feed, callback_query routing
|
|
7
|
-
* before_model_resolve — per-chat model override (F5)
|
|
8
|
-
* before_tool_call — Stage 4 gateway UX metadata injection
|
|
9
|
-
* MiniMax usage tracking (before_dispatch)
|
|
10
|
-
*
|
|
11
|
-
* Depends on: live-card, tool-tracker, completion-summary, state-machine
|
|
12
|
-
* (all must be registered before or alongside this module).
|
|
13
|
-
*
|
|
14
|
-
* Source lines: 1042–1615 of ux-bridge.js
|
|
15
|
-
*/
|
|
16
|
-
export interface PluginApi {
|
|
17
|
-
on(event: string, handler: (...args: unknown[]) => unknown | Promise<unknown>): void;
|
|
18
|
-
logger?: Console;
|
|
19
|
-
config?: Record<string, unknown>;
|
|
20
|
-
runtime?: {
|
|
21
|
-
subagent?: {
|
|
22
|
-
run?(opts: Record<string, unknown>): Promise<{
|
|
23
|
-
runId?: string;
|
|
24
|
-
}>;
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Register all event-reducer hooks (command dispatch, model override,
|
|
30
|
-
* callback routing, Stage 4 injection).
|
|
31
|
-
* Idempotent — subsequent calls are no-ops.
|
|
32
|
-
*/
|
|
33
|
-
export declare function register(api: PluginApi): void;
|