@probelabs/visor 0.1.187-ee → 0.1.187

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/dist/{102.index.js → 140.index.js} +3 -3
  2. package/dist/{736.index.js → 142.index.js} +36 -36
  3. package/dist/{961.index.js → 223.index.js} +16 -16
  4. package/dist/{840.index.js → 676.index.js} +12 -12
  5. package/dist/{663.index.js → 85.index.js} +15 -15
  6. package/dist/action-cli-bridge.d.ts.map +1 -1
  7. package/dist/agent-protocol/a2a-frontend.d.ts.map +1 -1
  8. package/dist/agent-protocol/index.d.ts.map +1 -1
  9. package/dist/agent-protocol/push-notification-manager.d.ts.map +1 -1
  10. package/dist/agent-protocol/state-transitions.d.ts.map +1 -1
  11. package/dist/agent-protocol/task-evaluator.d.ts.map +1 -1
  12. package/dist/agent-protocol/task-live-update-slack.d.ts.map +1 -1
  13. package/dist/agent-protocol/task-live-update-teams.d.ts.map +1 -1
  14. package/dist/agent-protocol/task-live-update-telegram.d.ts.map +1 -1
  15. package/dist/agent-protocol/task-live-updates.d.ts.map +1 -1
  16. package/dist/agent-protocol/task-progress-tool.d.ts.map +1 -1
  17. package/dist/agent-protocol/task-queue.d.ts.map +1 -1
  18. package/dist/agent-protocol/task-store.d.ts.map +1 -1
  19. package/dist/agent-protocol/task-stream-manager.d.ts.map +1 -1
  20. package/dist/agent-protocol/task-trace-resolution.d.ts.map +1 -1
  21. package/dist/agent-protocol/tasks-cli-handler.d.ts.map +1 -1
  22. package/dist/agent-protocol/tasks-tui.d.ts.map +1 -1
  23. package/dist/agent-protocol/trace-serializer.d.ts.map +1 -1
  24. package/dist/agent-protocol/track-execution.d.ts.map +1 -1
  25. package/dist/agent-protocol/types.d.ts.map +1 -1
  26. package/dist/ai-review-service.d.ts.map +1 -1
  27. package/dist/check-execution-engine.d.ts.map +1 -1
  28. package/dist/cli-main.d.ts.map +1 -1
  29. package/dist/cli.d.ts.map +1 -1
  30. package/dist/commands.d.ts.map +1 -1
  31. package/dist/config/cli-handler.d.ts.map +1 -1
  32. package/dist/config/config-reloader.d.ts.map +1 -1
  33. package/dist/config/config-snapshot-store.d.ts.map +1 -1
  34. package/dist/config/config-watcher.d.ts.map +1 -1
  35. package/dist/config/types.d.ts.map +1 -1
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/cron-scheduler.d.ts.map +1 -1
  38. package/dist/debug-visualizer/debug-span-exporter.d.ts.map +1 -1
  39. package/dist/debug-visualizer/trace-reader.d.ts.map +1 -1
  40. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  41. package/dist/dependency-resolver.d.ts.map +1 -1
  42. package/dist/email/adapter.d.ts.map +1 -1
  43. package/dist/email/client.d.ts.map +1 -1
  44. package/dist/email/markdown.d.ts.map +1 -1
  45. package/dist/email/polling-runner.d.ts.map +1 -1
  46. package/dist/engine/on-finish/orchestrator.d.ts.map +1 -1
  47. package/dist/engine/on-finish/utils.d.ts.map +1 -1
  48. package/dist/event-bus/event-bus.d.ts.map +1 -1
  49. package/dist/event-bus/types.d.ts.map +1 -1
  50. package/dist/event-mapper.d.ts.map +1 -1
  51. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  52. package/dist/footer.d.ts.map +1 -1
  53. package/dist/frontends/email-frontend.d.ts.map +1 -1
  54. package/dist/frontends/github-frontend.d.ts.map +1 -1
  55. package/dist/frontends/host.d.ts.map +1 -1
  56. package/dist/frontends/ndjson-sink.d.ts.map +1 -1
  57. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  58. package/dist/frontends/teams-frontend.d.ts.map +1 -1
  59. package/dist/frontends/telegram-frontend.d.ts.map +1 -1
  60. package/dist/frontends/whatsapp-frontend.d.ts.map +1 -1
  61. package/dist/generated/config-schema.d.ts.map +1 -1
  62. package/dist/git-repository-analyzer.d.ts.map +1 -1
  63. package/dist/github-auth.d.ts.map +1 -1
  64. package/dist/github-check-service.d.ts.map +1 -1
  65. package/dist/github-comments.d.ts.map +1 -1
  66. package/dist/github-reactions.d.ts.map +1 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +8154 -9971
  69. package/dist/issue-filter.d.ts.map +1 -1
  70. package/dist/liquid-extensions.d.ts.map +1 -1
  71. package/dist/logger.d.ts.map +1 -1
  72. package/dist/mcp-job-manager.d.ts.map +1 -1
  73. package/dist/mcp-server.d.ts.map +1 -1
  74. package/dist/memory-store.d.ts.map +1 -1
  75. package/dist/output/traces/run-2026-08-20T13-50-06-218Z.ndjson +3148 -0
  76. package/dist/output-formatters.d.ts.map +1 -1
  77. package/dist/policy/default-engine.d.ts.map +1 -1
  78. package/dist/policy/index.d.ts.map +1 -1
  79. package/dist/policy/policy-check-command.d.ts.map +1 -1
  80. package/dist/policy/types.d.ts.map +1 -1
  81. package/dist/pr-analyzer.d.ts.map +1 -1
  82. package/dist/pr-detector.d.ts.map +1 -1
  83. package/dist/providers/a2a-check-provider.d.ts.map +1 -1
  84. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  85. package/dist/providers/api-tool-executor.d.ts.map +1 -1
  86. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  87. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  88. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  89. package/dist/providers/claude-code-types.d.ts.map +1 -1
  90. package/dist/providers/command-check-provider.d.ts.map +1 -1
  91. package/dist/providers/custom-tool-executor.d.ts.map +1 -1
  92. package/dist/providers/git-checkout-provider.d.ts.map +1 -1
  93. package/dist/providers/github-ops-provider.d.ts.map +1 -1
  94. package/dist/providers/http-check-provider.d.ts.map +1 -1
  95. package/dist/providers/http-client-provider.d.ts.map +1 -1
  96. package/dist/providers/http-input-provider.d.ts.map +1 -1
  97. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  98. package/dist/providers/index.d.ts.map +1 -1
  99. package/dist/providers/log-check-provider.d.ts.map +1 -1
  100. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  101. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  102. package/dist/providers/mcp-tools.d.ts.map +1 -1
  103. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  104. package/dist/providers/noop-check-provider.d.ts.map +1 -1
  105. package/dist/providers/script-check-provider.d.ts.map +1 -1
  106. package/dist/providers/utcp-check-provider.d.ts.map +1 -1
  107. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  108. package/dist/providers/workflow-tool-executor.d.ts.map +1 -1
  109. package/dist/reviewer.d.ts.map +1 -1
  110. package/dist/runners/config-reload-runtime.d.ts.map +1 -1
  111. package/dist/runners/graceful-restart.d.ts.map +1 -1
  112. package/dist/runners/mcp-server-runner.d.ts.map +1 -1
  113. package/dist/runners/process-cli-handler.d.ts.map +1 -1
  114. package/dist/runners/process-discovery.d.ts.map +1 -1
  115. package/dist/runners/runner-factory.d.ts.map +1 -1
  116. package/dist/runners/runner-host.d.ts.map +1 -1
  117. package/dist/runners/runner.d.ts.map +1 -1
  118. package/dist/runners/telemetry-init.d.ts.map +1 -1
  119. package/dist/sandbox/bubblewrap-sandbox.d.ts.map +1 -1
  120. package/dist/sandbox/cache-volume-manager.d.ts.map +1 -1
  121. package/dist/sandbox/check-runner.d.ts.map +1 -1
  122. package/dist/sandbox/compose-generator.d.ts.map +1 -1
  123. package/dist/sandbox/docker-compose-sandbox.d.ts.map +1 -1
  124. package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -1
  125. package/dist/sandbox/env-filter.d.ts.map +1 -1
  126. package/dist/sandbox/index.d.ts.map +1 -1
  127. package/dist/sandbox/sandbox-manager.d.ts.map +1 -1
  128. package/dist/sandbox/sandbox-telemetry.d.ts.map +1 -1
  129. package/dist/sandbox/seatbelt-sandbox.d.ts.map +1 -1
  130. package/dist/sandbox/trace-ingester.d.ts.map +1 -1
  131. package/dist/sandbox/types.d.ts.map +1 -1
  132. package/dist/scheduler/cli-handler.d.ts.map +1 -1
  133. package/dist/scheduler/index.d.ts.map +1 -1
  134. package/dist/scheduler/message-trigger.d.ts.map +1 -1
  135. package/dist/scheduler/schedule-parser.d.ts.map +1 -1
  136. package/dist/scheduler/schedule-store.d.ts.map +1 -1
  137. package/dist/scheduler/schedule-tool.d.ts.map +1 -1
  138. package/dist/scheduler/scheduler.d.ts.map +1 -1
  139. package/dist/scheduler/store/index.d.ts.map +1 -1
  140. package/dist/scheduler/store/json-migrator.d.ts.map +1 -1
  141. package/dist/scheduler/store/sqlite-store.d.ts.map +1 -1
  142. package/dist/scheduler/store/types.d.ts.map +1 -1
  143. package/dist/sdk/{a2a-frontend-QVKJ7MVW.mjs → a2a-frontend-XCQ4CQUF.mjs} +3 -3
  144. package/dist/sdk/{check-provider-registry-QUUL6JI2.mjs → check-provider-registry-2D3MCWP3.mjs} +6 -6
  145. package/dist/sdk/{chunk-6LQEODDA.mjs → chunk-B2LQT6QU.mjs} +2 -2
  146. package/dist/sdk/chunk-B2LQT6QU.mjs.map +1 -0
  147. package/dist/sdk/{chunk-PZADRRLX.mjs → chunk-S3GSZRYC.mjs} +2 -2
  148. package/dist/sdk/{chunk-HQCCT6WP.mjs → chunk-TGQBEM3Y.mjs} +203 -203
  149. package/dist/sdk/chunk-TGQBEM3Y.mjs.map +1 -0
  150. package/dist/sdk/{chunk-BBLBZVWC.mjs → chunk-VS3JE2DL.mjs} +3 -3
  151. package/dist/sdk/{chunk-QLT42TX7.mjs → chunk-YETG675X.mjs} +2 -2
  152. package/dist/sdk/{dist-YLO6HUFD.mjs → dist-VBYEFQ6T.mjs} +85 -311
  153. package/dist/sdk/dist-VBYEFQ6T.mjs.map +1 -0
  154. package/dist/sdk/{email-frontend-6O454VL5.mjs → email-frontend-AE5TYWNC.mjs} +2 -2
  155. package/dist/sdk/{failure-condition-evaluator-USY3ISVA.mjs → failure-condition-evaluator-66PWLV3D.mjs} +4 -4
  156. package/dist/sdk/{github-frontend-2T5PWYD5.mjs → github-frontend-BBFKCY4M.mjs} +4 -4
  157. package/dist/sdk/{host-UZESVA6Z.mjs → host-UQRZDLT7.mjs} +4 -4
  158. package/dist/sdk/{routing-TYXT3STD.mjs → routing-Q647KUMO.mjs} +5 -5
  159. package/dist/sdk/{schedule-tool-ODMIDBMT.mjs → schedule-tool-WMGSM6IT.mjs} +6 -6
  160. package/dist/sdk/{schedule-tool-handler-IQSKBFLS.mjs → schedule-tool-handler-JMDHCGZ2.mjs} +6 -6
  161. package/dist/sdk/sdk.js +916 -2290
  162. package/dist/sdk/sdk.js.map +1 -1
  163. package/dist/sdk/sdk.mjs +5 -5
  164. package/dist/sdk/{trace-helpers-AM2QE5UZ.mjs → trace-helpers-AIUGQLK5.mjs} +3 -3
  165. package/dist/sdk/{track-execution-VJJVJH6K.mjs → track-execution-CFRZXMEC.mjs} +2 -2
  166. package/dist/sdk/{workflow-check-provider-XOWQYWTC.mjs → workflow-check-provider-G7A67EPP.mjs} +6 -6
  167. package/dist/sdk.d.ts.map +1 -1
  168. package/dist/session-registry.d.ts.map +1 -1
  169. package/dist/slack/adapter.d.ts.map +1 -1
  170. package/dist/slack/cache-prewarmer.d.ts.map +1 -1
  171. package/dist/slack/client.d.ts.map +1 -1
  172. package/dist/slack/markdown.d.ts.map +1 -1
  173. package/dist/slack/prompt-state.d.ts.map +1 -1
  174. package/dist/slack/rate-limiter.d.ts.map +1 -1
  175. package/dist/slack/schedule-tool-handler.d.ts.map +1 -1
  176. package/dist/slack/signature.d.ts.map +1 -1
  177. package/dist/slack/slack-output-adapter.d.ts.map +1 -1
  178. package/dist/slack/socket-runner.d.ts.map +1 -1
  179. package/dist/slack/thread-cache.d.ts.map +1 -1
  180. package/dist/snapshot-store.d.ts.map +1 -1
  181. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
  182. package/dist/state-machine/context/workflow-inputs.d.ts.map +1 -1
  183. package/dist/state-machine/dispatch/debounce-manager.d.ts.map +1 -1
  184. package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -1
  185. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
  186. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
  187. package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -1
  188. package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -1
  189. package/dist/state-machine/dispatch/policy-gate.d.ts.map +1 -1
  190. package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -1
  191. package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -1
  192. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -1
  193. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -1
  194. package/dist/state-machine/execution/summary.d.ts.map +1 -1
  195. package/dist/state-machine/runner.d.ts.map +1 -1
  196. package/dist/state-machine/states/check-running.d.ts.map +1 -1
  197. package/dist/state-machine/states/completed.d.ts.map +1 -1
  198. package/dist/state-machine/states/error.d.ts.map +1 -1
  199. package/dist/state-machine/states/init.d.ts.map +1 -1
  200. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
  201. package/dist/state-machine/states/plan-ready.d.ts.map +1 -1
  202. package/dist/state-machine/states/routing.d.ts.map +1 -1
  203. package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
  204. package/dist/state-machine/workflow-projection.d.ts.map +1 -1
  205. package/dist/state-machine-execution-engine.d.ts.map +1 -1
  206. package/dist/teams/adapter.d.ts.map +1 -1
  207. package/dist/teams/client.d.ts.map +1 -1
  208. package/dist/teams/markdown.d.ts.map +1 -1
  209. package/dist/teams/webhook-runner.d.ts.map +1 -1
  210. package/dist/telegram/adapter.d.ts.map +1 -1
  211. package/dist/telegram/client.d.ts.map +1 -1
  212. package/dist/telegram/markdown.d.ts.map +1 -1
  213. package/dist/telegram/polling-runner.d.ts.map +1 -1
  214. package/dist/telemetry/fallback-ndjson.d.ts.map +1 -1
  215. package/dist/telemetry/file-span-exporter.d.ts.map +1 -1
  216. package/dist/telemetry/lazy-otel.d.ts.map +1 -1
  217. package/dist/telemetry/metrics.d.ts.map +1 -1
  218. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  219. package/dist/telemetry/state-capture.d.ts.map +1 -1
  220. package/dist/telemetry/trace-helpers.d.ts.map +1 -1
  221. package/dist/telemetry/trace-report-exporter.d.ts.map +1 -1
  222. package/dist/test-runner/assertions.d.ts.map +1 -1
  223. package/dist/test-runner/conversation-sugar.d.ts.map +1 -1
  224. package/dist/test-runner/core/environment.d.ts.map +1 -1
  225. package/dist/test-runner/core/fixture.d.ts.map +1 -1
  226. package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
  227. package/dist/test-runner/core/mocks.d.ts.map +1 -1
  228. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -1
  229. package/dist/test-runner/evaluators.d.ts.map +1 -1
  230. package/dist/test-runner/fixture-loader.d.ts.map +1 -1
  231. package/dist/test-runner/index.d.ts.map +1 -1
  232. package/dist/test-runner/llm-judge.d.ts.map +1 -1
  233. package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -1
  234. package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -1
  235. package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -1
  236. package/dist/test-runner/utils/selectors.d.ts.map +1 -1
  237. package/dist/test-runner/validator.d.ts.map +1 -1
  238. package/dist/traces/run-2026-08-20T13-50-06-218Z.ndjson +3148 -0
  239. package/dist/tui/chat-runner.d.ts.map +1 -1
  240. package/dist/tui/chat-state.d.ts.map +1 -1
  241. package/dist/tui/chat-tui.d.ts.map +1 -1
  242. package/dist/tui/components/chat-box.d.ts.map +1 -1
  243. package/dist/tui/components/input-bar.d.ts.map +1 -1
  244. package/dist/tui/components/status-bar.d.ts.map +1 -1
  245. package/dist/tui/components/trace-viewer.d.ts.map +1 -1
  246. package/dist/tui/index.d.ts.map +1 -1
  247. package/dist/tui/tui-frontend.d.ts.map +1 -1
  248. package/dist/types/bot.d.ts.map +1 -1
  249. package/dist/types/cli.d.ts.map +1 -1
  250. package/dist/types/config.d.ts.map +1 -1
  251. package/dist/types/engine.d.ts.map +1 -1
  252. package/dist/types/execution.d.ts.map +1 -1
  253. package/dist/types/git-checkout.d.ts.map +1 -1
  254. package/dist/types/github.d.ts.map +1 -1
  255. package/dist/types/workflow.d.ts.map +1 -1
  256. package/dist/utils/author-permissions.d.ts.map +1 -1
  257. package/dist/utils/child-process-error-handler.d.ts.map +1 -1
  258. package/dist/utils/command-executor.d.ts.map +1 -1
  259. package/dist/utils/comment-metadata.d.ts.map +1 -1
  260. package/dist/utils/config-loader.d.ts.map +1 -1
  261. package/dist/utils/config-merger.d.ts.map +1 -1
  262. package/dist/utils/diff-processor.d.ts.map +1 -1
  263. package/dist/utils/env-exposure.d.ts.map +1 -1
  264. package/dist/utils/env-resolver.d.ts.map +1 -1
  265. package/dist/utils/fair-concurrency-limiter.d.ts.map +1 -1
  266. package/dist/utils/file-exclusion.d.ts.map +1 -1
  267. package/dist/utils/head-sha.d.ts.map +1 -1
  268. package/dist/utils/human-id.d.ts.map +1 -1
  269. package/dist/utils/instance-id.d.ts.map +1 -1
  270. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  271. package/dist/utils/issue-normalizer.d.ts.map +1 -1
  272. package/dist/utils/json-text-extractor.d.ts.map +1 -1
  273. package/dist/utils/mermaid-telemetry.d.ts.map +1 -1
  274. package/dist/utils/oauth2-token-cache.d.ts.map +1 -1
  275. package/dist/utils/rate-limiter.d.ts.map +1 -1
  276. package/dist/utils/sandbox.d.ts.map +1 -1
  277. package/dist/utils/script-memory-ops.d.ts.map +1 -1
  278. package/dist/utils/script-tool-environment.d.ts.map +1 -1
  279. package/dist/utils/stdin-reader.d.ts.map +1 -1
  280. package/dist/utils/template-context.d.ts.map +1 -1
  281. package/dist/utils/tool-resolver.d.ts.map +1 -1
  282. package/dist/utils/toolkit-expander.d.ts.map +1 -1
  283. package/dist/utils/tracer-init.d.ts.map +1 -1
  284. package/dist/utils/ui-helpers.d.ts.map +1 -1
  285. package/dist/utils/user-facing-error.d.ts.map +1 -1
  286. package/dist/utils/workspace-manager.d.ts.map +1 -1
  287. package/dist/utils/worktree-cleanup.d.ts.map +1 -1
  288. package/dist/utils/worktree-manager.d.ts.map +1 -1
  289. package/dist/webhook-server.d.ts.map +1 -1
  290. package/dist/whatsapp/adapter.d.ts.map +1 -1
  291. package/dist/whatsapp/client.d.ts.map +1 -1
  292. package/dist/whatsapp/markdown.d.ts.map +1 -1
  293. package/dist/whatsapp/webhook-runner.d.ts.map +1 -1
  294. package/dist/workflow-executor.d.ts.map +1 -1
  295. package/dist/workflow-registry.d.ts.map +1 -1
  296. package/package.json +1 -1
  297. package/dist/enterprise/license/validator.d.ts +0 -39
  298. package/dist/enterprise/license/validator.d.ts.map +0 -1
  299. package/dist/enterprise/loader.d.ts +0 -25
  300. package/dist/enterprise/loader.d.ts.map +0 -1
  301. package/dist/enterprise/policy/opa-compiler.d.ts +0 -37
  302. package/dist/enterprise/policy/opa-compiler.d.ts.map +0 -1
  303. package/dist/enterprise/policy/opa-http-evaluator.d.ts +0 -36
  304. package/dist/enterprise/policy/opa-http-evaluator.d.ts.map +0 -1
  305. package/dist/enterprise/policy/opa-policy-engine.d.ts +0 -48
  306. package/dist/enterprise/policy/opa-policy-engine.d.ts.map +0 -1
  307. package/dist/enterprise/policy/opa-wasm-evaluator.d.ts +0 -34
  308. package/dist/enterprise/policy/opa-wasm-evaluator.d.ts.map +0 -1
  309. package/dist/enterprise/policy/policy-input-builder.d.ts +0 -122
  310. package/dist/enterprise/policy/policy-input-builder.d.ts.map +0 -1
  311. package/dist/enterprise/scheduler/knex-store.d.ts +0 -47
  312. package/dist/enterprise/scheduler/knex-store.d.ts.map +0 -1
  313. package/dist/sdk/a2a-frontend-7EGXSULE.mjs +0 -1751
  314. package/dist/sdk/a2a-frontend-7EGXSULE.mjs.map +0 -1
  315. package/dist/sdk/check-provider-registry-IGNTM4MW.mjs +0 -32
  316. package/dist/sdk/chunk-6DDNEBZ7.mjs +0 -6119
  317. package/dist/sdk/chunk-6DDNEBZ7.mjs.map +0 -1
  318. package/dist/sdk/chunk-6LQEODDA.mjs.map +0 -1
  319. package/dist/sdk/chunk-7XKHFRPN.mjs +0 -739
  320. package/dist/sdk/chunk-D6O5SCPC.mjs +0 -621
  321. package/dist/sdk/chunk-D6O5SCPC.mjs.map +0 -1
  322. package/dist/sdk/chunk-H2ZWNJJO.mjs +0 -204
  323. package/dist/sdk/chunk-H2ZWNJJO.mjs.map +0 -1
  324. package/dist/sdk/chunk-HMVD3AEC.mjs +0 -47064
  325. package/dist/sdk/chunk-HMVD3AEC.mjs.map +0 -1
  326. package/dist/sdk/chunk-HQCCT6WP.mjs.map +0 -1
  327. package/dist/sdk/chunk-IY5PQ5EN.mjs +0 -1724
  328. package/dist/sdk/chunk-IY5PQ5EN.mjs.map +0 -1
  329. package/dist/sdk/chunk-PDQTEBOJ.mjs +0 -213
  330. package/dist/sdk/chunk-PDQTEBOJ.mjs.map +0 -1
  331. package/dist/sdk/chunk-PUHU6UY6.mjs +0 -391
  332. package/dist/sdk/chunk-PUHU6UY6.mjs.map +0 -1
  333. package/dist/sdk/chunk-PZADRRLX.mjs.map +0 -1
  334. package/dist/sdk/chunk-RQDLVMER.mjs +0 -1507
  335. package/dist/sdk/chunk-RQDLVMER.mjs.map +0 -1
  336. package/dist/sdk/chunk-TSX3YS3F.mjs +0 -825
  337. package/dist/sdk/chunk-TSX3YS3F.mjs.map +0 -1
  338. package/dist/sdk/chunk-WZQMTD7W.mjs +0 -33
  339. package/dist/sdk/chunk-WZQMTD7W.mjs.map +0 -1
  340. package/dist/sdk/chunk-XXAEN5KU.mjs +0 -197
  341. package/dist/sdk/chunk-XXAEN5KU.mjs.map +0 -1
  342. package/dist/sdk/chunk-ZCBVXBKG.mjs +0 -1150
  343. package/dist/sdk/chunk-ZCBVXBKG.mjs.map +0 -1
  344. package/dist/sdk/config-BI5ZXG6D.mjs +0 -16
  345. package/dist/sdk/dist-NERCHNRR.mjs +0 -7955
  346. package/dist/sdk/dist-NERCHNRR.mjs.map +0 -1
  347. package/dist/sdk/dist-YLO6HUFD.mjs.map +0 -1
  348. package/dist/sdk/email-frontend-JE7H3LBC.mjs +0 -701
  349. package/dist/sdk/email-frontend-JE7H3LBC.mjs.map +0 -1
  350. package/dist/sdk/failure-condition-evaluator-7WHZUYDC.mjs +0 -18
  351. package/dist/sdk/github-frontend-RGK4DPRI.mjs +0 -1394
  352. package/dist/sdk/github-frontend-RGK4DPRI.mjs.map +0 -1
  353. package/dist/sdk/host-YWXWROIE.mjs +0 -87
  354. package/dist/sdk/host-YWXWROIE.mjs.map +0 -1
  355. package/dist/sdk/knex-store-KCMFAMH5.mjs +0 -527
  356. package/dist/sdk/knex-store-KCMFAMH5.mjs.map +0 -1
  357. package/dist/sdk/loader-35YWX5UQ.mjs +0 -89
  358. package/dist/sdk/loader-35YWX5UQ.mjs.map +0 -1
  359. package/dist/sdk/opa-policy-engine-FY5D45YS.mjs +0 -655
  360. package/dist/sdk/opa-policy-engine-FY5D45YS.mjs.map +0 -1
  361. package/dist/sdk/routing-PHHRW2C7.mjs +0 -26
  362. package/dist/sdk/schedule-tool-ITD445EO.mjs +0 -38
  363. package/dist/sdk/schedule-tool-ITD445EO.mjs.map +0 -1
  364. package/dist/sdk/schedule-tool-ODMIDBMT.mjs.map +0 -1
  365. package/dist/sdk/schedule-tool-handler-5WPHFBOG.mjs +0 -42
  366. package/dist/sdk/schedule-tool-handler-5WPHFBOG.mjs.map +0 -1
  367. package/dist/sdk/schedule-tool-handler-IQSKBFLS.mjs.map +0 -1
  368. package/dist/sdk/session-registry-6PV6SGEJ.mjs +0 -10
  369. package/dist/sdk/session-registry-6PV6SGEJ.mjs.map +0 -1
  370. package/dist/sdk/slack-frontend-H7PX5GE7.mjs +0 -985
  371. package/dist/sdk/slack-frontend-H7PX5GE7.mjs.map +0 -1
  372. package/dist/sdk/task-evaluator-H3BXC7SE.mjs +0 -263
  373. package/dist/sdk/task-evaluator-H3BXC7SE.mjs.map +0 -1
  374. package/dist/sdk/teams-frontend-HCT4MTY4.mjs +0 -342
  375. package/dist/sdk/teams-frontend-HCT4MTY4.mjs.map +0 -1
  376. package/dist/sdk/telegram-frontend-YQRYDKPN.mjs +0 -586
  377. package/dist/sdk/telegram-frontend-YQRYDKPN.mjs.map +0 -1
  378. package/dist/sdk/trace-helpers-AM2QE5UZ.mjs.map +0 -1
  379. package/dist/sdk/trace-helpers-OMF4C24T.mjs +0 -31
  380. package/dist/sdk/trace-helpers-OMF4C24T.mjs.map +0 -1
  381. package/dist/sdk/trace-reader-OVE4DL2D.mjs +0 -270
  382. package/dist/sdk/trace-reader-OVE4DL2D.mjs.map +0 -1
  383. package/dist/sdk/trace-serializer-EBHTHZYT.mjs +0 -24
  384. package/dist/sdk/trace-serializer-EBHTHZYT.mjs.map +0 -1
  385. package/dist/sdk/track-execution-BULXL2XD.mjs +0 -249
  386. package/dist/sdk/track-execution-BULXL2XD.mjs.map +0 -1
  387. package/dist/sdk/utcp-check-provider-Q4PD5EP2.mjs +0 -16
  388. package/dist/sdk/utcp-check-provider-Q4PD5EP2.mjs.map +0 -1
  389. package/dist/sdk/validator-XTZJZZJH.mjs +0 -134
  390. package/dist/sdk/validator-XTZJZZJH.mjs.map +0 -1
  391. package/dist/sdk/whatsapp-frontend-72XEIUIR.mjs +0 -438
  392. package/dist/sdk/whatsapp-frontend-72XEIUIR.mjs.map +0 -1
  393. package/dist/sdk/workflow-check-provider-OVZDCL4E.mjs +0 -32
  394. package/dist/sdk/workflow-check-provider-OVZDCL4E.mjs.map +0 -1
  395. package/dist/sdk/workflow-check-provider-XOWQYWTC.mjs.map +0 -1
  396. /package/dist/sdk/{a2a-frontend-QVKJ7MVW.mjs.map → a2a-frontend-XCQ4CQUF.mjs.map} +0 -0
  397. /package/dist/sdk/{check-provider-registry-IGNTM4MW.mjs.map → check-provider-registry-2D3MCWP3.mjs.map} +0 -0
  398. /package/dist/sdk/{chunk-7XKHFRPN.mjs.map → chunk-S3GSZRYC.mjs.map} +0 -0
  399. /package/dist/sdk/{chunk-BBLBZVWC.mjs.map → chunk-VS3JE2DL.mjs.map} +0 -0
  400. /package/dist/sdk/{chunk-QLT42TX7.mjs.map → chunk-YETG675X.mjs.map} +0 -0
  401. /package/dist/sdk/{email-frontend-6O454VL5.mjs.map → email-frontend-AE5TYWNC.mjs.map} +0 -0
  402. /package/dist/sdk/{check-provider-registry-QUUL6JI2.mjs.map → failure-condition-evaluator-66PWLV3D.mjs.map} +0 -0
  403. /package/dist/sdk/{github-frontend-2T5PWYD5.mjs.map → github-frontend-BBFKCY4M.mjs.map} +0 -0
  404. /package/dist/sdk/{host-UZESVA6Z.mjs.map → host-UQRZDLT7.mjs.map} +0 -0
  405. /package/dist/sdk/{config-BI5ZXG6D.mjs.map → routing-Q647KUMO.mjs.map} +0 -0
  406. /package/dist/sdk/{failure-condition-evaluator-7WHZUYDC.mjs.map → schedule-tool-WMGSM6IT.mjs.map} +0 -0
  407. /package/dist/sdk/{failure-condition-evaluator-USY3ISVA.mjs.map → schedule-tool-handler-JMDHCGZ2.mjs.map} +0 -0
  408. /package/dist/sdk/{routing-PHHRW2C7.mjs.map → trace-helpers-AIUGQLK5.mjs.map} +0 -0
  409. /package/dist/sdk/{track-execution-VJJVJH6K.mjs.map → track-execution-CFRZXMEC.mjs.map} +0 -0
  410. /package/dist/sdk/{routing-TYXT3STD.mjs.map → workflow-check-provider-G7A67EPP.mjs.map} +0 -0
@@ -1,586 +0,0 @@
1
- import {
2
- init_task_live_updates,
3
- isFrontendLiveUpdatesEnabled
4
- } from "./chunk-D6O5SCPC.mjs";
5
- import "./chunk-IY5PQ5EN.mjs";
6
- import "./chunk-6E625R3C.mjs";
7
- import "./chunk-B2OUZAWY.mjs";
8
- import {
9
- __esm
10
- } from "./chunk-J7LXIPZS.mjs";
11
-
12
- // src/telegram/markdown.ts
13
- function escapeHtml(text) {
14
- return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
15
- }
16
- function markdownToTelegramHtml(text) {
17
- if (!text || typeof text !== "string") return "";
18
- const lines = text.split(/\r?\n/);
19
- const result = [];
20
- let inCodeBlock = false;
21
- let codeBlockLang = "";
22
- let codeLines = [];
23
- let inBlockquote = false;
24
- let blockquoteLines = [];
25
- const flushBlockquote = () => {
26
- if (blockquoteLines.length > 0) {
27
- result.push(`<blockquote>${blockquoteLines.join("\n")}</blockquote>`);
28
- blockquoteLines = [];
29
- inBlockquote = false;
30
- }
31
- };
32
- for (let i = 0; i < lines.length; i++) {
33
- const trimmed = lines[i].trimStart();
34
- if (/^```/.test(trimmed)) {
35
- if (!inCodeBlock) {
36
- flushBlockquote();
37
- inCodeBlock = true;
38
- codeBlockLang = trimmed.slice(3).trim();
39
- codeLines = [];
40
- } else {
41
- const escaped = codeLines.map((l) => escapeHtml(l)).join("\n");
42
- if (codeBlockLang && codeBlockLang !== "mermaid") {
43
- result.push(
44
- `<pre><code class="language-${escapeHtml(codeBlockLang)}">${escaped}</code></pre>`
45
- );
46
- } else {
47
- result.push(`<pre>${escaped}</pre>`);
48
- }
49
- inCodeBlock = false;
50
- codeBlockLang = "";
51
- codeLines = [];
52
- }
53
- continue;
54
- }
55
- if (inCodeBlock) {
56
- codeLines.push(lines[i]);
57
- continue;
58
- }
59
- const bqMatch = /^>\s?(.*)$/.exec(trimmed);
60
- if (bqMatch) {
61
- inBlockquote = true;
62
- blockquoteLines.push(convertInline(bqMatch[1]));
63
- continue;
64
- } else if (inBlockquote) {
65
- flushBlockquote();
66
- }
67
- const line = lines[i];
68
- const headerMatch = /^(#{1,6})\s+(.+)$/.exec(line.trimStart());
69
- if (headerMatch) {
70
- result.push(`<b>${convertInline(headerMatch[2].trim())}</b>`);
71
- continue;
72
- }
73
- if (/^[-*_]{3,}\s*$/.test(trimmed)) {
74
- result.push("\u2014\u2014\u2014");
75
- continue;
76
- }
77
- const bulletMatch = /^(\s*)([-*])\s+(.+)$/.exec(line);
78
- if (bulletMatch) {
79
- const indent = bulletMatch[1];
80
- result.push(`${indent}\u2022 ${convertInline(bulletMatch[3])}`);
81
- continue;
82
- }
83
- const numMatch = /^(\s*)(\d+\.)\s+(.+)$/.exec(line);
84
- if (numMatch) {
85
- result.push(`${numMatch[1]}${numMatch[2]} ${convertInline(numMatch[3])}`);
86
- continue;
87
- }
88
- result.push(convertInline(line));
89
- }
90
- if (inCodeBlock && codeLines.length > 0) {
91
- const escaped = codeLines.map((l) => escapeHtml(l)).join("\n");
92
- result.push(`<pre>${escaped}</pre>`);
93
- }
94
- flushBlockquote();
95
- return result.join("\n");
96
- }
97
- function convertInline(line) {
98
- const codeSpans = [];
99
- let processed = line.replace(/`([^`]+)`/g, (_m, code) => {
100
- const idx = codeSpans.length;
101
- codeSpans.push(`<code>${escapeHtml(code)}</code>`);
102
- return `\0CODE${idx}\0`;
103
- });
104
- processed = escapeHtml(processed);
105
- processed = processed.replace(
106
- /!\[([^\]]*)\]\(([^)\s]+)(?:\s+&quot;[^&]*&quot;)?\)/g,
107
- (_m, alt, url) => `<a href="${url}">${alt || "image"}</a>`
108
- );
109
- processed = processed.replace(
110
- /\[([^\]]+)\]\(([^)\s]+)(?:\s+&quot;[^&]*&quot;)?\)/g,
111
- (_m, label, url) => `<a href="${url}">${label}</a>`
112
- );
113
- processed = processed.replace(/\*\*([^*]+)\*\*/g, "<b>$1</b>");
114
- processed = processed.replace(/__([^_]+)__/g, "<b>$1</b>");
115
- processed = processed.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g, "<i>$1</i>");
116
- processed = processed.replace(/~~([^~]+)~~/g, "<s>$1</s>");
117
- processed = processed.replace(
118
- /\x00CODE(\d+)\x00/g,
119
- (_m, idx) => codeSpans[parseInt(idx)]
120
- );
121
- return processed;
122
- }
123
- function chunkText(text, limit = 4096) {
124
- if (text.length <= limit) return [text];
125
- const chunks = [];
126
- const lines = text.split("\n");
127
- let current = "";
128
- for (const line of lines) {
129
- const candidate = current ? current + "\n" + line : line;
130
- if (candidate.length > limit) {
131
- if (current) {
132
- chunks.push(current);
133
- current = line;
134
- } else {
135
- let remaining = line;
136
- while (remaining.length > limit) {
137
- chunks.push(remaining.slice(0, limit));
138
- remaining = remaining.slice(limit);
139
- }
140
- current = remaining;
141
- }
142
- } else {
143
- current = candidate;
144
- }
145
- }
146
- if (current) chunks.push(current);
147
- return chunks;
148
- }
149
- function formatTelegramText(text) {
150
- return markdownToTelegramHtml(text);
151
- }
152
- var init_markdown = __esm({
153
- "src/telegram/markdown.ts"() {
154
- "use strict";
155
- }
156
- });
157
-
158
- // src/telegram/client.ts
159
- import { Bot } from "grammy";
160
- var TelegramClient;
161
- var init_client = __esm({
162
- "src/telegram/client.ts"() {
163
- "use strict";
164
- init_markdown();
165
- TelegramClient = class {
166
- bot;
167
- _botInfo = null;
168
- constructor(botToken) {
169
- if (!botToken || typeof botToken !== "string") {
170
- throw new Error("TelegramClient: botToken is required");
171
- }
172
- this.bot = new Bot(botToken);
173
- }
174
- /** Get the underlying grammy Bot instance (for polling runner) */
175
- getBot() {
176
- return this.bot;
177
- }
178
- /** Get the underlying grammy API instance */
179
- get api() {
180
- return this.bot.api;
181
- }
182
- /** Initialize bot info (call before using) */
183
- async init() {
184
- const me = await this.bot.api.getMe();
185
- this._botInfo = {
186
- id: me.id,
187
- is_bot: me.is_bot,
188
- first_name: me.first_name,
189
- username: me.username
190
- };
191
- return this._botInfo;
192
- }
193
- /** Get cached bot info */
194
- getBotInfo() {
195
- return this._botInfo;
196
- }
197
- /**
198
- * Send a text message with optional HTML parse mode.
199
- * Auto-chunks messages exceeding 4096 characters.
200
- * Falls back to plain text if HTML parsing fails.
201
- */
202
- async sendMessage(opts) {
203
- try {
204
- const { chat_id, text, parse_mode, reply_to_message_id, message_thread_id } = opts;
205
- const chunks = chunkText(text, 4096);
206
- let firstMessageId;
207
- for (let i = 0; i < chunks.length; i++) {
208
- const params = {
209
- // disable_web_page_preview is deprecated, use link_preview_options
210
- link_preview_options: { is_disabled: true }
211
- };
212
- if (parse_mode) params.parse_mode = parse_mode;
213
- if (i === 0 && reply_to_message_id)
214
- params.reply_parameters = { message_id: reply_to_message_id };
215
- if (message_thread_id) params.message_thread_id = message_thread_id;
216
- try {
217
- const msg = await this.bot.api.sendMessage(chat_id, chunks[i], params);
218
- if (i === 0) firstMessageId = msg.message_id;
219
- } catch (err) {
220
- if (parse_mode === "HTML" && err?.description?.includes("can't parse entities")) {
221
- const plainParams = { ...params };
222
- delete plainParams.parse_mode;
223
- const msg = await this.bot.api.sendMessage(chat_id, chunks[i], plainParams);
224
- if (i === 0) firstMessageId = msg.message_id;
225
- } else {
226
- throw err;
227
- }
228
- }
229
- }
230
- return { ok: true, message_id: firstMessageId };
231
- } catch (err) {
232
- const errMsg = err?.description || err?.message || String(err);
233
- console.warn(`Telegram sendMessage failed (non-fatal): ${errMsg}`);
234
- return { ok: false, error: errMsg };
235
- }
236
- }
237
- /**
238
- * Edit an existing text message.
239
- * Returns ok=false if Telegram rejects the edit (e.g. message too old or unchanged).
240
- */
241
- async editMessageText(opts) {
242
- try {
243
- const params = {
244
- link_preview_options: { is_disabled: true }
245
- };
246
- if (opts.parse_mode) params.parse_mode = opts.parse_mode;
247
- const msg = await this.bot.api.editMessageText(
248
- opts.chat_id,
249
- opts.message_id,
250
- opts.text,
251
- params
252
- );
253
- const messageId = msg?.message_id || opts.message_id;
254
- return { ok: true, message_id: messageId };
255
- } catch (err) {
256
- const errMsg = err?.description || err?.message || String(err);
257
- console.warn(`Telegram editMessageText failed (non-fatal): ${errMsg}`);
258
- return { ok: false, error: errMsg };
259
- }
260
- }
261
- /**
262
- * Delete a message.
263
- */
264
- async deleteMessage(opts) {
265
- try {
266
- await this.bot.api.deleteMessage(opts.chat_id, opts.message_id);
267
- return true;
268
- } catch (err) {
269
- console.warn(
270
- `Telegram deleteMessage failed (non-fatal): ${err?.description || err?.message || String(err)}`
271
- );
272
- return false;
273
- }
274
- }
275
- /**
276
- * Send a document/file.
277
- */
278
- async sendDocument(opts) {
279
- try {
280
- const {
281
- chat_id,
282
- document,
283
- filename,
284
- caption,
285
- parse_mode,
286
- reply_to_message_id,
287
- message_thread_id
288
- } = opts;
289
- const params = {};
290
- if (caption) params.caption = caption.slice(0, 1024);
291
- if (parse_mode) params.parse_mode = parse_mode;
292
- if (reply_to_message_id) params.reply_parameters = { message_id: reply_to_message_id };
293
- if (message_thread_id) params.message_thread_id = message_thread_id;
294
- const file = new (await import("grammy")).InputFile(document, filename);
295
- const msg = await this.bot.api.sendDocument(chat_id, file, params);
296
- return { ok: true, message_id: msg.message_id };
297
- } catch (err) {
298
- const errMsg = err?.description || err?.message || String(err);
299
- console.warn(`Telegram sendDocument failed (non-fatal): ${errMsg}`);
300
- return { ok: false, error: errMsg };
301
- }
302
- }
303
- /**
304
- * Add an emoji reaction to a message.
305
- * Note: Bot must be admin in groups to set reactions.
306
- */
307
- async setMessageReaction(opts) {
308
- try {
309
- await this.bot.api.setMessageReaction(opts.chat_id, opts.message_id, [
310
- { type: "emoji", emoji: opts.emoji }
311
- ]);
312
- return true;
313
- } catch (err) {
314
- console.warn(
315
- `Telegram setMessageReaction failed (non-fatal): ${err?.description || err?.message || String(err)}`
316
- );
317
- return false;
318
- }
319
- }
320
- };
321
- }
322
- });
323
-
324
- // src/frontends/telegram-frontend.ts
325
- var TelegramFrontend;
326
- var init_telegram_frontend = __esm({
327
- "src/frontends/telegram-frontend.ts"() {
328
- init_client();
329
- init_markdown();
330
- init_task_live_updates();
331
- TelegramFrontend = class {
332
- name = "telegram";
333
- subs = [];
334
- cfg;
335
- acked = false;
336
- ackRef = null;
337
- errorNotified = false;
338
- constructor(config) {
339
- this.cfg = config || {};
340
- }
341
- start(ctx) {
342
- const bus = ctx.eventBus;
343
- try {
344
- ctx.logger.info(`[telegram-frontend] started`);
345
- } catch {
346
- }
347
- try {
348
- const payload = this.getInboundTelegramPayload(ctx);
349
- if (payload) {
350
- const ev = payload.event || {};
351
- const chatId = String(ev.chat_id || "-");
352
- const msgId = String(ev.message_id || "-");
353
- ctx.logger.info(`[telegram-frontend] inbound event: chat_id=${chatId} message_id=${msgId}`);
354
- }
355
- } catch {
356
- }
357
- this.subs.push(
358
- bus.on("CheckCompleted", async (env) => {
359
- const ev = env && env.payload || env;
360
- await this.maybePostDirectReply(ctx, ev.checkId, ev.result).catch(() => {
361
- });
362
- })
363
- );
364
- this.subs.push(
365
- bus.on("CheckErrored", async (env) => {
366
- const ev = env && env.payload || env;
367
- const message = ev?.error?.message || "Execution error";
368
- await this.maybePostError(ctx, "Check failed", message, ev?.checkId).catch(() => {
369
- });
370
- })
371
- );
372
- this.subs.push(
373
- bus.on("StateTransition", async (env) => {
374
- const ev = env && env.payload || env;
375
- if (ev && (ev.to === "Completed" || ev.to === "Error")) {
376
- await this.finalizeReactions(ctx).catch(() => {
377
- });
378
- }
379
- })
380
- );
381
- this.subs.push(
382
- bus.on("Shutdown", async (env) => {
383
- const ev = env && env.payload || env;
384
- const message = ev?.error?.message || "Fatal error";
385
- await this.maybePostError(ctx, "Run failed", message).catch(() => {
386
- });
387
- })
388
- );
389
- this.subs.push(
390
- bus.on("CheckScheduled", async () => {
391
- await this.ensureAcknowledgement(ctx).catch(() => {
392
- });
393
- })
394
- );
395
- }
396
- stop() {
397
- for (const s of this.subs) s.unsubscribe();
398
- this.subs = [];
399
- }
400
- getTelegram(ctx) {
401
- const injected = ctx.telegram || ctx.telegramClient;
402
- if (injected) return injected;
403
- try {
404
- const token = this.cfg.botToken || process.env.TELEGRAM_BOT_TOKEN;
405
- if (typeof token === "string" && token.trim()) {
406
- return new TelegramClient(token.trim());
407
- }
408
- } catch {
409
- }
410
- return void 0;
411
- }
412
- getInboundTelegramPayload(ctx) {
413
- try {
414
- const endpoint = "/bots/telegram/message";
415
- return ctx.webhookContext?.webhookData?.get(endpoint) || null;
416
- } catch {
417
- return null;
418
- }
419
- }
420
- getInboundTelegramEvent(ctx) {
421
- try {
422
- const payload = this.getInboundTelegramPayload(ctx);
423
- const ev = payload?.event;
424
- const chatId = ev?.chat_id;
425
- const messageId = ev?.message_id;
426
- if (chatId !== void 0 && messageId !== void 0) {
427
- return { chatId, messageId };
428
- }
429
- } catch {
430
- }
431
- return null;
432
- }
433
- async ensureAcknowledgement(ctx) {
434
- if (this.acked) return;
435
- const ref = this.getInboundTelegramEvent(ctx);
436
- if (!ref) return;
437
- const telegram = this.getTelegram(ctx);
438
- if (!telegram) return;
439
- try {
440
- const payload = this.getInboundTelegramPayload(ctx);
441
- const ev = payload?.event;
442
- const botInfo = telegram.getBotInfo();
443
- if (botInfo && ev?.from?.id === botInfo.id) return;
444
- } catch {
445
- }
446
- await telegram.setMessageReaction({
447
- chat_id: ref.chatId,
448
- message_id: ref.messageId,
449
- emoji: "\u{1F440}"
450
- });
451
- try {
452
- ctx.logger.info(
453
- `[telegram-frontend] added ack reaction chat_id=${ref.chatId} message_id=${ref.messageId}`
454
- );
455
- } catch {
456
- }
457
- this.acked = true;
458
- this.ackRef = ref;
459
- }
460
- async finalizeReactions(ctx) {
461
- if (!this.acked || !this.ackRef) return;
462
- const telegram = this.getTelegram(ctx);
463
- if (!telegram) return;
464
- try {
465
- await telegram.setMessageReaction({
466
- chat_id: this.ackRef.chatId,
467
- message_id: this.ackRef.messageId,
468
- emoji: "\u{1F44D}"
469
- });
470
- try {
471
- ctx.logger.info(
472
- `[telegram-frontend] finalized reaction chat_id=${this.ackRef.chatId} message_id=${this.ackRef.messageId}`
473
- );
474
- } catch {
475
- }
476
- } finally {
477
- this.acked = false;
478
- this.ackRef = null;
479
- }
480
- }
481
- async maybePostError(ctx, title, message, checkId) {
482
- if (this.errorNotified) return;
483
- const telegram = this.getTelegram(ctx);
484
- if (!telegram) return;
485
- const payload = this.getInboundTelegramPayload(ctx);
486
- const ev = payload?.event;
487
- const chatId = ev?.chat_id;
488
- const messageId = ev?.message_id;
489
- if (chatId === void 0) return;
490
- let text = `\u274C ${title}`;
491
- if (checkId) text += `
492
- Check: ${checkId}`;
493
- if (message) text += `
494
- ${message}`;
495
- await telegram.sendMessage({
496
- chat_id: chatId,
497
- text,
498
- reply_to_message_id: messageId
499
- });
500
- this.errorNotified = true;
501
- }
502
- async maybePostDirectReply(ctx, checkId, result) {
503
- try {
504
- const cfg = ctx.config || {};
505
- const checkCfg = cfg.checks?.[checkId];
506
- if (!checkCfg) return;
507
- const providerType = checkCfg.type || "";
508
- const isAi = providerType === "ai";
509
- const isLogChat = providerType === "log" && checkCfg.group === "chat";
510
- const isWorkflow = providerType === "workflow";
511
- if (!isAi && !isLogChat && !isWorkflow) return;
512
- if (checkCfg.criticality === "internal") return;
513
- if (isFrontendLiveUpdatesEnabled(cfg.task_live_updates, "telegram")) return;
514
- if (isAi) {
515
- const schema = checkCfg.schema;
516
- if (typeof schema === "string") {
517
- const simpleSchemas = ["code-review", "markdown", "text", "plain"];
518
- if (!simpleSchemas.includes(schema)) return;
519
- }
520
- }
521
- const telegram = this.getTelegram(ctx);
522
- if (!telegram) return;
523
- const payload = this.getInboundTelegramPayload(ctx);
524
- const ev = payload?.event;
525
- const chatId = ev?.chat_id;
526
- const messageId = ev?.message_id;
527
- if (chatId === void 0) {
528
- ctx.logger.warn(`[telegram-frontend] skip posting reply for ${checkId}: missing chat_id`);
529
- return;
530
- }
531
- const out = result?.output;
532
- let text;
533
- if (out && typeof out.text === "string" && out.text.trim().length > 0) {
534
- text = out.text.trim();
535
- } else if (isAi && typeof checkCfg.schema === "string") {
536
- if (typeof result?.content === "string" && result.content.trim().length > 0) {
537
- text = result.content.trim();
538
- }
539
- } else if (isLogChat && typeof result?.logOutput === "string") {
540
- const raw = result.logOutput;
541
- if (raw.trim().length > 0) text = raw.trim();
542
- }
543
- if (out && typeof out._rawOutput === "string" && out._rawOutput.trim().length > 0) {
544
- text = (text || "") + "\n\n" + out._rawOutput.trim();
545
- }
546
- if (!text) {
547
- ctx.logger.info(
548
- `[telegram-frontend] skip posting reply for ${checkId}: no renderable text`
549
- );
550
- return;
551
- }
552
- text = text.replace(/\\n/g, "\n");
553
- const formattedText = formatTelegramText(text);
554
- const postResult = await telegram.sendMessage({
555
- chat_id: chatId,
556
- text: formattedText,
557
- parse_mode: "HTML",
558
- reply_to_message_id: messageId,
559
- message_thread_id: ev?.message_thread_id
560
- });
561
- if (!postResult.ok) {
562
- ctx.logger.warn(
563
- `[telegram-frontend] failed to post reply for ${checkId}: ${postResult.error}`
564
- );
565
- return;
566
- }
567
- ctx.logger.info(
568
- `[telegram-frontend] posted reply for ${checkId} to chat_id=${chatId} message_id=${postResult.message_id}`
569
- );
570
- } catch (err) {
571
- try {
572
- ctx.logger.warn(
573
- `[telegram-frontend] maybePostDirectReply failed for ${checkId}: ${err instanceof Error ? err.message : String(err)}`
574
- );
575
- } catch {
576
- }
577
- }
578
- }
579
- };
580
- }
581
- });
582
- init_telegram_frontend();
583
- export {
584
- TelegramFrontend
585
- };
586
- //# sourceMappingURL=telegram-frontend-YQRYDKPN.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/telegram/markdown.ts","../../src/telegram/client.ts","../../src/frontends/telegram-frontend.ts"],"sourcesContent":["// Lightweight Markdown → Telegram HTML formatter.\n// Converts common Markdown output from AI steps to Telegram-compatible HTML.\n//\n// Supported conversions:\n// - # Header / ## Header → <b>Header</b>\n// - **bold** / __bold__ → <b>bold</b>\n// - *italic* → <i>italic</i>\n// - ~~strike~~ → <s>strike</s>\n// - `code` → <code>code</code>\n// - ```block``` → <pre>block</pre>\n// - [label](url) → <a href=\"url\">label</a>\n// - > blockquote → <blockquote>text</blockquote>\n// - HTML entities escaped: & < >\n//\n// Code blocks are passed through with entity escaping only (no other transforms).\n\n/** Escape HTML entities in text */\nexport function escapeHtml(text: string): string {\n return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\n/**\n * Convert Markdown text to Telegram-compatible HTML.\n * Processes line-by-line, respecting fenced code blocks.\n */\nexport function markdownToTelegramHtml(text: string): string {\n if (!text || typeof text !== 'string') return '';\n\n const lines = text.split(/\\r?\\n/);\n const result: string[] = [];\n let inCodeBlock = false;\n let codeBlockLang = '';\n let codeLines: string[] = [];\n let inBlockquote = false;\n let blockquoteLines: string[] = [];\n\n const flushBlockquote = () => {\n if (blockquoteLines.length > 0) {\n result.push(`<blockquote>${blockquoteLines.join('\\n')}</blockquote>`);\n blockquoteLines = [];\n inBlockquote = false;\n }\n };\n\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i].trimStart();\n\n // Track fenced code blocks\n if (/^```/.test(trimmed)) {\n if (!inCodeBlock) {\n flushBlockquote();\n inCodeBlock = true;\n codeBlockLang = trimmed.slice(3).trim();\n codeLines = [];\n } else {\n // Close code block\n const escaped = codeLines.map(l => escapeHtml(l)).join('\\n');\n if (codeBlockLang && codeBlockLang !== 'mermaid') {\n result.push(\n `<pre><code class=\"language-${escapeHtml(codeBlockLang)}\">${escaped}</code></pre>`\n );\n } else {\n result.push(`<pre>${escaped}</pre>`);\n }\n inCodeBlock = false;\n codeBlockLang = '';\n codeLines = [];\n }\n continue;\n }\n if (inCodeBlock) {\n codeLines.push(lines[i]);\n continue;\n }\n\n // Blockquotes: > text\n const bqMatch = /^>\\s?(.*)$/.exec(trimmed);\n if (bqMatch) {\n inBlockquote = true;\n blockquoteLines.push(convertInline(bqMatch[1]));\n continue;\n } else if (inBlockquote) {\n flushBlockquote();\n }\n\n const line = lines[i];\n\n // Headers: # Header → <b>Header</b>\n const headerMatch = /^(#{1,6})\\s+(.+)$/.exec(line.trimStart());\n if (headerMatch) {\n result.push(`<b>${convertInline(headerMatch[2].trim())}</b>`);\n continue;\n }\n\n // Horizontal rules\n if (/^[-*_]{3,}\\s*$/.test(trimmed)) {\n result.push('———');\n continue;\n }\n\n // Bullet lists: \"- item\" or \"* item\" → \"• item\"\n const bulletMatch = /^(\\s*)([-*])\\s+(.+)$/.exec(line);\n if (bulletMatch) {\n const indent = bulletMatch[1];\n result.push(`${indent}• ${convertInline(bulletMatch[3])}`);\n continue;\n }\n\n // Numbered lists: preserve as-is but convert inline\n const numMatch = /^(\\s*)(\\d+\\.)\\s+(.+)$/.exec(line);\n if (numMatch) {\n result.push(`${numMatch[1]}${numMatch[2]} ${convertInline(numMatch[3])}`);\n continue;\n }\n\n // Regular line: apply inline conversions\n result.push(convertInline(line));\n }\n\n // Close any unclosed code block\n if (inCodeBlock && codeLines.length > 0) {\n const escaped = codeLines.map(l => escapeHtml(l)).join('\\n');\n result.push(`<pre>${escaped}</pre>`);\n }\n flushBlockquote();\n\n return result.join('\\n');\n}\n\n/**\n * Apply inline Markdown conversions to a single line.\n * Order matters: escape HTML first, then apply formatting.\n */\nfunction convertInline(line: string): string {\n // First, identify and protect inline code spans\n const codeSpans: string[] = [];\n let processed = line.replace(/`([^`]+)`/g, (_m, code: string) => {\n const idx = codeSpans.length;\n codeSpans.push(`<code>${escapeHtml(code)}</code>`);\n return `\\x00CODE${idx}\\x00`;\n });\n\n // Escape HTML in non-code portions\n processed = escapeHtml(processed);\n\n // Images: ![alt](url) → (just show as link)\n processed = processed.replace(\n /!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+&quot;[^&]*&quot;)?\\)/g,\n (_m, alt: string, url: string) => `<a href=\"${url}\">${alt || 'image'}</a>`\n );\n\n // Links: [label](url) → <a href=\"url\">label</a>\n processed = processed.replace(\n /\\[([^\\]]+)\\]\\(([^)\\s]+)(?:\\s+&quot;[^&]*&quot;)?\\)/g,\n (_m, label: string, url: string) => `<a href=\"${url}\">${label}</a>`\n );\n\n // Bold: **text** or __text__ → <b>text</b>\n processed = processed.replace(/\\*\\*([^*]+)\\*\\*/g, '<b>$1</b>');\n processed = processed.replace(/__([^_]+)__/g, '<b>$1</b>');\n\n // Italic: *text* → <i>text</i> (but not inside bold)\n processed = processed.replace(/(?<!\\*)\\*([^*]+)\\*(?!\\*)/g, '<i>$1</i>');\n\n // Strikethrough: ~~text~~ → <s>text</s>\n processed = processed.replace(/~~([^~]+)~~/g, '<s>$1</s>');\n\n // Restore code spans\n processed = processed.replace(\n /\\x00CODE(\\d+)\\x00/g,\n (_m, idx: string) => codeSpans[parseInt(idx)]\n );\n\n return processed;\n}\n\n/**\n * Chunk text into segments no larger than limit, splitting at newlines.\n * Respects code block boundaries where possible.\n */\nexport function chunkText(text: string, limit: number = 4096): string[] {\n if (text.length <= limit) return [text];\n\n const chunks: string[] = [];\n const lines = text.split('\\n');\n let current = '';\n\n for (const line of lines) {\n const candidate = current ? current + '\\n' + line : line;\n if (candidate.length > limit) {\n if (current) {\n chunks.push(current);\n current = line;\n } else {\n // Single line exceeds limit — force split\n let remaining = line;\n while (remaining.length > limit) {\n chunks.push(remaining.slice(0, limit));\n remaining = remaining.slice(limit);\n }\n current = remaining;\n }\n } else {\n current = candidate;\n }\n }\n if (current) chunks.push(current);\n\n return chunks;\n}\n\n/**\n * Main entry point: convert Markdown to Telegram HTML.\n */\nexport function formatTelegramText(text: string): string {\n return markdownToTelegramHtml(text);\n}\n","// Telegram Bot API wrapper built on grammy.\n// Exposes Visor-friendly methods matching the SlackClient pattern\n// while leveraging grammy for transport, rate limiting, and middleware.\n\nimport { Bot, type Api } from 'grammy';\nimport { chunkText } from './markdown';\n\nexport interface TelegramUser {\n id: number;\n is_bot: boolean;\n first_name: string;\n username?: string;\n}\n\nexport interface TelegramSendResult {\n ok: boolean;\n message_id?: number;\n error?: string;\n}\n\nexport class TelegramClient {\n private bot: Bot;\n private _botInfo: TelegramUser | null = null;\n\n constructor(botToken: string) {\n if (!botToken || typeof botToken !== 'string') {\n throw new Error('TelegramClient: botToken is required');\n }\n this.bot = new Bot(botToken);\n }\n\n /** Get the underlying grammy Bot instance (for polling runner) */\n getBot(): Bot {\n return this.bot;\n }\n\n /** Get the underlying grammy API instance */\n get api(): Api {\n return this.bot.api;\n }\n\n /** Initialize bot info (call before using) */\n async init(): Promise<TelegramUser> {\n const me = await this.bot.api.getMe();\n this._botInfo = {\n id: me.id,\n is_bot: me.is_bot,\n first_name: me.first_name,\n username: me.username,\n };\n return this._botInfo;\n }\n\n /** Get cached bot info */\n getBotInfo(): TelegramUser | null {\n return this._botInfo;\n }\n\n /**\n * Send a text message with optional HTML parse mode.\n * Auto-chunks messages exceeding 4096 characters.\n * Falls back to plain text if HTML parsing fails.\n */\n async sendMessage(opts: {\n chat_id: number | string;\n text: string;\n parse_mode?: 'HTML';\n reply_to_message_id?: number;\n message_thread_id?: number;\n }): Promise<TelegramSendResult> {\n try {\n const { chat_id, text, parse_mode, reply_to_message_id, message_thread_id } = opts;\n const chunks = chunkText(text, 4096);\n let firstMessageId: number | undefined;\n\n for (let i = 0; i < chunks.length; i++) {\n const params: Record<string, unknown> = {\n // disable_web_page_preview is deprecated, use link_preview_options\n link_preview_options: { is_disabled: true },\n };\n if (parse_mode) params.parse_mode = parse_mode;\n if (i === 0 && reply_to_message_id)\n params.reply_parameters = { message_id: reply_to_message_id };\n if (message_thread_id) params.message_thread_id = message_thread_id;\n\n try {\n const msg = await this.bot.api.sendMessage(chat_id, chunks[i], params as any);\n if (i === 0) firstMessageId = msg.message_id;\n } catch (err: any) {\n // If HTML parse fails, retry without parse_mode\n if (parse_mode === 'HTML' && err?.description?.includes(\"can't parse entities\")) {\n const plainParams = { ...params };\n delete plainParams.parse_mode;\n const msg = await this.bot.api.sendMessage(chat_id, chunks[i], plainParams as any);\n if (i === 0) firstMessageId = msg.message_id;\n } else {\n throw err;\n }\n }\n }\n\n return { ok: true, message_id: firstMessageId };\n } catch (err: any) {\n const errMsg = err?.description || err?.message || String(err);\n console.warn(`Telegram sendMessage failed (non-fatal): ${errMsg}`);\n return { ok: false, error: errMsg };\n }\n }\n\n /**\n * Edit an existing text message.\n * Returns ok=false if Telegram rejects the edit (e.g. message too old or unchanged).\n */\n async editMessageText(opts: {\n chat_id: number | string;\n message_id: number;\n text: string;\n parse_mode?: 'HTML';\n }): Promise<TelegramSendResult> {\n try {\n const params: Record<string, unknown> = {\n link_preview_options: { is_disabled: true },\n };\n if (opts.parse_mode) params.parse_mode = opts.parse_mode;\n const msg = await this.bot.api.editMessageText(\n opts.chat_id,\n opts.message_id,\n opts.text,\n params as any\n );\n const messageId = (msg as any)?.message_id || opts.message_id;\n return { ok: true, message_id: messageId };\n } catch (err: any) {\n const errMsg = err?.description || err?.message || String(err);\n console.warn(`Telegram editMessageText failed (non-fatal): ${errMsg}`);\n return { ok: false, error: errMsg };\n }\n }\n\n /**\n * Delete a message.\n */\n async deleteMessage(opts: { chat_id: number | string; message_id: number }): Promise<boolean> {\n try {\n await this.bot.api.deleteMessage(opts.chat_id, opts.message_id);\n return true;\n } catch (err: any) {\n console.warn(\n `Telegram deleteMessage failed (non-fatal): ${err?.description || err?.message || String(err)}`\n );\n return false;\n }\n }\n\n /**\n * Send a document/file.\n */\n async sendDocument(opts: {\n chat_id: number | string;\n document: Buffer;\n filename: string;\n caption?: string;\n parse_mode?: 'HTML';\n reply_to_message_id?: number;\n message_thread_id?: number;\n }): Promise<TelegramSendResult> {\n try {\n const {\n chat_id,\n document,\n filename,\n caption,\n parse_mode,\n reply_to_message_id,\n message_thread_id,\n } = opts;\n const params: Record<string, unknown> = {};\n if (caption) params.caption = caption.slice(0, 1024); // Telegram caption limit\n if (parse_mode) params.parse_mode = parse_mode;\n if (reply_to_message_id) params.reply_parameters = { message_id: reply_to_message_id };\n if (message_thread_id) params.message_thread_id = message_thread_id;\n\n const file = new (await import('grammy')).InputFile(document, filename);\n const msg = await this.bot.api.sendDocument(chat_id, file, params as any);\n return { ok: true, message_id: msg.message_id };\n } catch (err: any) {\n const errMsg = err?.description || err?.message || String(err);\n console.warn(`Telegram sendDocument failed (non-fatal): ${errMsg}`);\n return { ok: false, error: errMsg };\n }\n }\n\n /**\n * Add an emoji reaction to a message.\n * Note: Bot must be admin in groups to set reactions.\n */\n async setMessageReaction(opts: {\n chat_id: number | string;\n message_id: number;\n emoji: string;\n }): Promise<boolean> {\n try {\n await this.bot.api.setMessageReaction(opts.chat_id, opts.message_id, [\n { type: 'emoji', emoji: opts.emoji as any },\n ]);\n return true;\n } catch (err: any) {\n // Non-fatal: reactions may fail if bot lacks permissions\n console.warn(\n `Telegram setMessageReaction failed (non-fatal): ${err?.description || err?.message || String(err)}`\n );\n return false;\n }\n }\n}\n","/**\n * Telegram Frontend for Visor workflows.\n *\n * Mirrors the SlackFrontend pattern:\n * - Posts AI replies to Telegram chats\n * - Converts Markdown to Telegram HTML format\n * - Manages emoji reactions for acknowledgement (👀 → 👍)\n */\nimport type { Frontend, FrontendContext } from './host';\nimport { TelegramClient } from '../telegram/client';\nimport { formatTelegramText } from '../telegram/markdown';\nimport { isFrontendLiveUpdatesEnabled } from '../agent-protocol/task-live-updates';\n\ntype TelegramFrontendConfig = {\n defaultChatId?: string | number;\n botToken?: string;\n};\n\nexport class TelegramFrontend implements Frontend {\n public readonly name = 'telegram';\n private subs: Array<{ unsubscribe(): void }> = [];\n private cfg: TelegramFrontendConfig;\n private acked: boolean = false;\n private ackRef: { chatId: number | string; messageId: number } | null = null;\n private errorNotified: boolean = false;\n\n constructor(config?: TelegramFrontendConfig) {\n this.cfg = config || {};\n }\n\n start(ctx: FrontendContext): void {\n const bus = ctx.eventBus;\n\n try {\n ctx.logger.info(`[telegram-frontend] started`);\n } catch {}\n\n // Log inbound event if triggered from Telegram\n try {\n const payload = this.getInboundTelegramPayload(ctx);\n if (payload) {\n const ev: any = payload.event || {};\n const chatId = String(ev.chat_id || '-');\n const msgId = String(ev.message_id || '-');\n ctx.logger.info(`[telegram-frontend] inbound event: chat_id=${chatId} message_id=${msgId}`);\n }\n } catch {}\n\n // CheckCompleted: post AI replies\n this.subs.push(\n bus.on('CheckCompleted', async (env: any) => {\n const ev = (env && env.payload) || env;\n await this.maybePostDirectReply(ctx, ev.checkId, ev.result).catch(() => {});\n })\n );\n\n // CheckErrored: post error notice\n this.subs.push(\n bus.on('CheckErrored', async (env: any) => {\n const ev = (env && env.payload) || env;\n const message = ev?.error?.message || 'Execution error';\n await this.maybePostError(ctx, 'Check failed', message, ev?.checkId).catch(() => {});\n })\n );\n\n // StateTransition: finalize reactions on terminal state\n this.subs.push(\n bus.on('StateTransition', async (env: any) => {\n const ev = (env && env.payload) || env;\n if (ev && (ev.to === 'Completed' || ev.to === 'Error')) {\n await this.finalizeReactions(ctx).catch(() => {});\n }\n })\n );\n\n // Shutdown: post error\n this.subs.push(\n bus.on('Shutdown', async (env: any) => {\n const ev = (env && env.payload) || env;\n const message = ev?.error?.message || 'Fatal error';\n await this.maybePostError(ctx, 'Run failed', message).catch(() => {});\n })\n );\n\n // CheckScheduled: add acknowledgement reaction\n this.subs.push(\n bus.on('CheckScheduled', async () => {\n await this.ensureAcknowledgement(ctx).catch(() => {});\n })\n );\n }\n\n stop(): void {\n for (const s of this.subs) s.unsubscribe();\n this.subs = [];\n }\n\n private getTelegram(ctx: FrontendContext): TelegramClient | undefined {\n // Prefer injected client (for tests or shared runner context)\n const injected = (ctx as any).telegram || (ctx as any).telegramClient;\n if (injected) return injected;\n // Lazy-create from env or frontend config\n try {\n const token = this.cfg.botToken || process.env.TELEGRAM_BOT_TOKEN;\n if (typeof token === 'string' && token.trim()) {\n return new TelegramClient(token.trim());\n }\n } catch {}\n return undefined;\n }\n\n private getInboundTelegramPayload(ctx: FrontendContext): any | null {\n try {\n const endpoint = '/bots/telegram/message';\n return (ctx as any).webhookContext?.webhookData?.get(endpoint) || null;\n } catch {\n return null;\n }\n }\n\n private getInboundTelegramEvent(\n ctx: FrontendContext\n ): { chatId: number | string; messageId: number } | null {\n try {\n const payload = this.getInboundTelegramPayload(ctx);\n const ev: any = payload?.event;\n const chatId = ev?.chat_id;\n const messageId = ev?.message_id;\n if (chatId !== undefined && messageId !== undefined) {\n return { chatId, messageId };\n }\n } catch {}\n return null;\n }\n\n private async ensureAcknowledgement(ctx: FrontendContext): Promise<void> {\n if (this.acked) return;\n const ref = this.getInboundTelegramEvent(ctx);\n if (!ref) return;\n const telegram = this.getTelegram(ctx);\n if (!telegram) return;\n\n // Skip ack for own bot messages\n try {\n const payload = this.getInboundTelegramPayload(ctx);\n const ev: any = payload?.event;\n const botInfo = telegram.getBotInfo();\n if (botInfo && ev?.from?.id === botInfo.id) return;\n } catch {}\n\n await telegram.setMessageReaction({\n chat_id: ref.chatId,\n message_id: ref.messageId,\n emoji: '👀',\n });\n try {\n ctx.logger.info(\n `[telegram-frontend] added ack reaction chat_id=${ref.chatId} message_id=${ref.messageId}`\n );\n } catch {}\n this.acked = true;\n this.ackRef = ref;\n }\n\n private async finalizeReactions(ctx: FrontendContext): Promise<void> {\n if (!this.acked || !this.ackRef) return;\n const telegram = this.getTelegram(ctx);\n if (!telegram) return;\n try {\n await telegram.setMessageReaction({\n chat_id: this.ackRef.chatId,\n message_id: this.ackRef.messageId,\n emoji: '👍',\n });\n try {\n ctx.logger.info(\n `[telegram-frontend] finalized reaction chat_id=${this.ackRef.chatId} message_id=${this.ackRef.messageId}`\n );\n } catch {}\n } finally {\n this.acked = false;\n this.ackRef = null;\n }\n }\n\n private async maybePostError(\n ctx: FrontendContext,\n title: string,\n message: string,\n checkId?: string\n ): Promise<void> {\n if (this.errorNotified) return;\n const telegram = this.getTelegram(ctx);\n if (!telegram) return;\n const payload = this.getInboundTelegramPayload(ctx);\n const ev: any = payload?.event;\n const chatId = ev?.chat_id;\n const messageId = ev?.message_id;\n if (chatId === undefined) return;\n\n let text = `❌ ${title}`;\n if (checkId) text += `\\nCheck: ${checkId}`;\n if (message) text += `\\n${message}`;\n\n await telegram.sendMessage({\n chat_id: chatId,\n text,\n reply_to_message_id: messageId,\n });\n this.errorNotified = true;\n }\n\n private async maybePostDirectReply(\n ctx: FrontendContext,\n checkId: string,\n result: { output?: any; content?: string }\n ): Promise<void> {\n try {\n const cfg: any = ctx.config || {};\n const checkCfg: any = cfg.checks?.[checkId];\n if (!checkCfg) return;\n\n const providerType = (checkCfg.type as string) || '';\n const isAi = providerType === 'ai';\n const isLogChat = providerType === 'log' && checkCfg.group === 'chat';\n const isWorkflow = providerType === 'workflow';\n if (!isAi && !isLogChat && !isWorkflow) return;\n if (checkCfg.criticality === 'internal') return;\n if (isFrontendLiveUpdatesEnabled((cfg as any).task_live_updates, 'telegram')) return;\n\n // For AI checks, only post simple schemas\n if (isAi) {\n const schema = checkCfg.schema;\n if (typeof schema === 'string') {\n const simpleSchemas = ['code-review', 'markdown', 'text', 'plain'];\n if (!simpleSchemas.includes(schema)) return;\n }\n }\n\n const telegram = this.getTelegram(ctx);\n if (!telegram) return;\n\n const payload = this.getInboundTelegramPayload(ctx);\n const ev: any = payload?.event;\n const chatId = ev?.chat_id;\n const messageId = ev?.message_id;\n if (chatId === undefined) {\n ctx.logger.warn(`[telegram-frontend] skip posting reply for ${checkId}: missing chat_id`);\n return;\n }\n\n // Extract text (same logic as SlackFrontend)\n const out: any = (result as any)?.output;\n let text: string | undefined;\n if (out && typeof out.text === 'string' && out.text.trim().length > 0) {\n text = out.text.trim();\n } else if (isAi && typeof checkCfg.schema === 'string') {\n if (\n typeof (result as any)?.content === 'string' &&\n (result as any).content.trim().length > 0\n ) {\n text = (result as any).content.trim();\n }\n } else if (isLogChat && typeof (result as any)?.logOutput === 'string') {\n const raw = (result as any).logOutput;\n if (raw.trim().length > 0) text = raw.trim();\n }\n\n // Append raw output\n if (out && typeof out._rawOutput === 'string' && out._rawOutput.trim().length > 0) {\n text = (text || '') + '\\n\\n' + out._rawOutput.trim();\n }\n\n if (!text) {\n ctx.logger.info(\n `[telegram-frontend] skip posting reply for ${checkId}: no renderable text`\n );\n return;\n }\n\n // Normalize literal \\n escape sequences\n text = text.replace(/\\\\n/g, '\\n');\n\n const formattedText = formatTelegramText(text);\n const postResult = await telegram.sendMessage({\n chat_id: chatId,\n text: formattedText,\n parse_mode: 'HTML',\n reply_to_message_id: messageId,\n message_thread_id: ev?.message_thread_id,\n });\n\n if (!postResult.ok) {\n ctx.logger.warn(\n `[telegram-frontend] failed to post reply for ${checkId}: ${postResult.error}`\n );\n return;\n }\n ctx.logger.info(\n `[telegram-frontend] posted reply for ${checkId} to chat_id=${chatId} message_id=${postResult.message_id}`\n );\n } catch (err) {\n try {\n ctx.logger.warn(\n `[telegram-frontend] maybePostDirectReply failed for ${checkId}: ${\n err instanceof Error ? err.message : String(err)\n }`\n );\n } catch {}\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}