@probelabs/visor 0.1.183-ee → 0.1.184-ee

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 (241) hide show
  1. package/dist/agent-protocol/task-live-update-slack.d.ts +24 -0
  2. package/dist/agent-protocol/task-live-update-slack.d.ts.map +1 -0
  3. package/dist/agent-protocol/task-live-update-teams.d.ts +25 -0
  4. package/dist/agent-protocol/task-live-update-teams.d.ts.map +1 -0
  5. package/dist/agent-protocol/task-live-update-telegram.d.ts +25 -0
  6. package/dist/agent-protocol/task-live-update-telegram.d.ts.map +1 -0
  7. package/dist/agent-protocol/task-live-updates.d.ts +102 -0
  8. package/dist/agent-protocol/task-live-updates.d.ts.map +1 -0
  9. package/dist/agent-protocol/task-progress-tool.d.ts.map +1 -1
  10. package/dist/agent-protocol/task-trace-resolution.d.ts +11 -0
  11. package/dist/agent-protocol/task-trace-resolution.d.ts.map +1 -0
  12. package/dist/agent-protocol/trace-serializer.d.ts.map +1 -1
  13. package/dist/agent-protocol/track-execution.d.ts +8 -0
  14. package/dist/agent-protocol/track-execution.d.ts.map +1 -1
  15. package/dist/cli-main.d.ts.map +1 -1
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/frontends/slack-frontend.d.ts +2 -0
  19. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  20. package/dist/frontends/teams-frontend.d.ts.map +1 -1
  21. package/dist/frontends/telegram-frontend.d.ts.map +1 -1
  22. package/dist/generated/config-schema.d.ts +110 -6
  23. package/dist/generated/config-schema.d.ts.map +1 -1
  24. package/dist/index.js +2239 -261
  25. package/dist/logger.d.ts +4 -1
  26. package/dist/logger.d.ts.map +1 -1
  27. package/dist/mcp-job-manager.d.ts +70 -0
  28. package/dist/mcp-job-manager.d.ts.map +1 -0
  29. package/dist/mcp-server.d.ts +6 -0
  30. package/dist/mcp-server.d.ts.map +1 -1
  31. package/dist/runners/mcp-server-runner.d.ts +4 -0
  32. package/dist/runners/mcp-server-runner.d.ts.map +1 -1
  33. package/dist/runners/runner-factory.d.ts.map +1 -1
  34. package/dist/sdk/{a2a-frontend-5YDHFQXD.mjs → a2a-frontend-OI4OVSKC.mjs} +4 -4
  35. package/dist/sdk/check-provider-registry-RITJW67U.mjs +32 -0
  36. package/dist/sdk/check-provider-registry-ZZ6N4GDP.mjs +32 -0
  37. package/dist/sdk/{chunk-4BN2XI4X.mjs → chunk-4HIWZA6M.mjs} +2 -2
  38. package/dist/sdk/{chunk-RI4ONH5X.mjs → chunk-4MHHELVZ.mjs} +2 -2
  39. package/dist/sdk/{chunk-J27D43HS.mjs → chunk-4ZLYHSN4.mjs} +2 -2
  40. package/dist/sdk/{chunk-ZPYODGYA.mjs → chunk-6E625R3C.mjs} +19 -4
  41. package/dist/sdk/chunk-6E625R3C.mjs.map +1 -0
  42. package/dist/sdk/{chunk-GA2TYKSR.mjs → chunk-7XKHFRPN.mjs} +4 -4
  43. package/dist/sdk/{chunk-6C3R6E42.mjs → chunk-IY5PQ5EN.mjs} +30 -6
  44. package/dist/sdk/chunk-IY5PQ5EN.mjs.map +1 -0
  45. package/dist/sdk/{chunk-MFXPJUUE.mjs → chunk-PUHU6UY6.mjs} +4 -3
  46. package/dist/sdk/chunk-PUHU6UY6.mjs.map +1 -0
  47. package/dist/sdk/{chunk-XOAEKFKB.mjs → chunk-QLT42TX7.mjs} +2 -2
  48. package/dist/sdk/chunk-SRU5TFNY.mjs +620 -0
  49. package/dist/sdk/chunk-SRU5TFNY.mjs.map +1 -0
  50. package/dist/sdk/{chunk-P2K4VOMU.mjs → chunk-TSX3YS3F.mjs} +3 -3
  51. package/dist/sdk/{chunk-WKLJ57WF.mjs → chunk-UM7LGO2P.mjs} +6 -6
  52. package/dist/sdk/{chunk-7VTZDC2X.mjs → chunk-VPPBOKBQ.mjs} +2 -2
  53. package/dist/sdk/chunk-WZQMTD7W.mjs +33 -0
  54. package/dist/sdk/chunk-WZQMTD7W.mjs.map +1 -0
  55. package/dist/sdk/{chunk-ZOF5QT6U.mjs → chunk-YBXNG75V.mjs} +118 -10
  56. package/dist/sdk/chunk-YBXNG75V.mjs.map +1 -0
  57. package/dist/sdk/{chunk-UXB4XWEE.mjs → chunk-YYFSAAD6.mjs} +53 -51
  58. package/dist/sdk/chunk-YYFSAAD6.mjs.map +1 -0
  59. package/dist/sdk/{chunk-RHKPFJLG.mjs → chunk-ZNKL6ESZ.mjs} +2 -2
  60. package/dist/sdk/{chunk-IDL3AA3G.mjs → chunk-ZYDRR6PZ.mjs} +1150 -403
  61. package/dist/sdk/chunk-ZYDRR6PZ.mjs.map +1 -0
  62. package/dist/sdk/{command-executor-YNJOS77A.mjs → command-executor-LHUW77GR.mjs} +3 -3
  63. package/dist/sdk/{config-PCP6O6Y6.mjs → config-TVU5RWR5.mjs} +3 -3
  64. package/dist/sdk/{dist-3UGGEZB3.mjs → dist-PN5UHL6A.mjs} +429 -429
  65. package/dist/sdk/dist-PN5UHL6A.mjs.map +1 -0
  66. package/dist/sdk/{email-frontend-WSNADJPI.mjs → email-frontend-ECHQCFTR.mjs} +2 -2
  67. package/dist/sdk/{failure-condition-evaluator-IRFKTYZD.mjs → failure-condition-evaluator-USY3ISVA.mjs} +6 -6
  68. package/dist/sdk/{github-auth-BJQBLK2V.mjs → github-auth-UO4DMNCC.mjs} +2 -2
  69. package/dist/sdk/{github-frontend-DECYOBRN.mjs → github-frontend-2T5PWYD5.mjs} +6 -6
  70. package/dist/sdk/{host-CFM2ASDI.mjs → host-OJSMCLKK.mjs} +6 -6
  71. package/dist/sdk/{host-T4LNVU2H.mjs → host-RM6UJEPP.mjs} +7 -7
  72. package/dist/sdk/{knex-store-OEWSZEBY.mjs → knex-store-KCMFAMH5.mjs} +2 -2
  73. package/dist/sdk/{liquid-extensions-E3AKRX7P.mjs → liquid-extensions-KZIRR4OY.mjs} +4 -4
  74. package/dist/sdk/{loader-WRGI244P.mjs → loader-35YWX5UQ.mjs} +4 -4
  75. package/dist/sdk/{memory-store-OHUIXCWJ.mjs → memory-store-3JONK7AF.mjs} +3 -3
  76. package/dist/sdk/{opa-policy-engine-IVMCGVNA.mjs → opa-policy-engine-FY5D45YS.mjs} +2 -2
  77. package/dist/sdk/{prompt-state-LN57DQF3.mjs → prompt-state-VVJMONT3.mjs} +3 -3
  78. package/dist/sdk/{renderer-schema-BT2IXMLW.mjs → renderer-schema-JZRRU5CW.mjs} +2 -2
  79. package/dist/sdk/{routing-H2PQ57OA.mjs → routing-NNQQSLWA.mjs} +8 -8
  80. package/dist/sdk/{schedule-tool-2DPNSU63.mjs → schedule-tool-ADZ2ON4I.mjs} +15 -14
  81. package/dist/sdk/schedule-tool-EMNF3FPQ.mjs +38 -0
  82. package/dist/sdk/{schedule-tool-handler-NBEO46RV.mjs → schedule-tool-handler-3R3IC6VA.mjs} +15 -14
  83. package/dist/sdk/{schedule-tool-handler-KLHE2SOW.mjs → schedule-tool-handler-F76ZD2WU.mjs} +17 -16
  84. package/dist/sdk/sdk.d.mts +40 -0
  85. package/dist/sdk/sdk.d.ts +40 -0
  86. package/dist/sdk/sdk.js +1154 -176
  87. package/dist/sdk/sdk.js.map +1 -1
  88. package/dist/sdk/sdk.mjs +14 -13
  89. package/dist/sdk/sdk.mjs.map +1 -1
  90. package/dist/sdk/{slack-frontend-DF5VL4OF.mjs → slack-frontend-K3TPGERM.mjs} +65 -9
  91. package/dist/sdk/slack-frontend-K3TPGERM.mjs.map +1 -0
  92. package/dist/sdk/{task-evaluator-OVMG7S56.mjs → task-evaluator-H3BXC7SE.mjs} +3 -3
  93. package/dist/sdk/{teams-frontend-DNW5GZP3.mjs → teams-frontend-6RRW533K.mjs} +54 -1
  94. package/dist/sdk/teams-frontend-6RRW533K.mjs.map +1 -0
  95. package/dist/sdk/{telegram-frontend-GA7OLADB.mjs → telegram-frontend-5UA77YAT.mjs} +48 -1
  96. package/dist/sdk/telegram-frontend-5UA77YAT.mjs.map +1 -0
  97. package/dist/sdk/{trace-helpers-26ZCAE2V.mjs → trace-helpers-OMF4C24T.mjs} +3 -3
  98. package/dist/sdk/{trace-serializer-KKBJHM7J.mjs → trace-serializer-EBHTHZYT.mjs} +3 -3
  99. package/dist/sdk/track-execution-3CHMGEPH.mjs +249 -0
  100. package/dist/sdk/track-execution-3CHMGEPH.mjs.map +1 -0
  101. package/dist/sdk/{utcp-check-provider-WI3QZ3W6.mjs → utcp-check-provider-Q4PD5EP2.mjs} +5 -5
  102. package/dist/sdk/workflow-check-provider-TC2G33WF.mjs +32 -0
  103. package/dist/sdk/workflow-check-provider-U4UXZ5YS.mjs +32 -0
  104. package/dist/sdk/{workflow-registry-YCZ3FCJC.mjs → workflow-registry-K56UTX36.mjs} +3 -3
  105. package/dist/slack/client.d.ts +14 -0
  106. package/dist/slack/client.d.ts.map +1 -1
  107. package/dist/slack/socket-runner.d.ts.map +1 -1
  108. package/dist/teams/client.d.ts +16 -0
  109. package/dist/teams/client.d.ts.map +1 -1
  110. package/dist/teams/webhook-runner.d.ts.map +1 -1
  111. package/dist/telegram/client.d.ts +17 -0
  112. package/dist/telegram/client.d.ts.map +1 -1
  113. package/dist/telegram/polling-runner.d.ts.map +1 -1
  114. package/dist/types/cli.d.ts +2 -0
  115. package/dist/types/cli.d.ts.map +1 -1
  116. package/dist/types/config.d.ts +40 -0
  117. package/dist/types/config.d.ts.map +1 -1
  118. package/package.json +4 -3
  119. package/dist/generated/config-schema.json +0 -4027
  120. package/dist/sdk/a2a-frontend-6LWBIPMS.mjs +0 -1734
  121. package/dist/sdk/a2a-frontend-6LWBIPMS.mjs.map +0 -1
  122. package/dist/sdk/check-provider-registry-WSEVHJEV.mjs +0 -31
  123. package/dist/sdk/check-provider-registry-YRADEEQY.mjs +0 -31
  124. package/dist/sdk/chunk-34QX63WK.mjs +0 -244
  125. package/dist/sdk/chunk-34QX63WK.mjs.map +0 -1
  126. package/dist/sdk/chunk-54KOAC4W.mjs +0 -665
  127. package/dist/sdk/chunk-6C3R6E42.mjs.map +0 -1
  128. package/dist/sdk/chunk-7W5QCO4Y.mjs +0 -5943
  129. package/dist/sdk/chunk-7W5QCO4Y.mjs.map +0 -1
  130. package/dist/sdk/chunk-7XRSCOKE.mjs +0 -825
  131. package/dist/sdk/chunk-FT3I25QV.mjs +0 -251
  132. package/dist/sdk/chunk-FT3I25QV.mjs.map +0 -1
  133. package/dist/sdk/chunk-G7GSN3SK.mjs +0 -390
  134. package/dist/sdk/chunk-G7GSN3SK.mjs.map +0 -1
  135. package/dist/sdk/chunk-IDL3AA3G.mjs.map +0 -1
  136. package/dist/sdk/chunk-J27D43HS.mjs.map +0 -1
  137. package/dist/sdk/chunk-MEB2TTIE.mjs +0 -157
  138. package/dist/sdk/chunk-MEB2TTIE.mjs.map +0 -1
  139. package/dist/sdk/chunk-MFXPJUUE.mjs.map +0 -1
  140. package/dist/sdk/chunk-NPSLGKXB.mjs +0 -1502
  141. package/dist/sdk/chunk-P2K4VOMU.mjs.map +0 -1
  142. package/dist/sdk/chunk-PQWZ6NFL.mjs +0 -459
  143. package/dist/sdk/chunk-PQWZ6NFL.mjs.map +0 -1
  144. package/dist/sdk/chunk-S5FSRHMY.mjs +0 -139
  145. package/dist/sdk/chunk-S5FSRHMY.mjs.map +0 -1
  146. package/dist/sdk/chunk-TFUQ2D5L.mjs +0 -307
  147. package/dist/sdk/chunk-TFUQ2D5L.mjs.map +0 -1
  148. package/dist/sdk/chunk-UCMJJ3IM.mjs +0 -227
  149. package/dist/sdk/chunk-UCMJJ3IM.mjs.map +0 -1
  150. package/dist/sdk/chunk-UFHOIB3R.mjs +0 -482
  151. package/dist/sdk/chunk-UFHOIB3R.mjs.map +0 -1
  152. package/dist/sdk/chunk-UXB4XWEE.mjs.map +0 -1
  153. package/dist/sdk/chunk-V45TITKX.mjs +0 -739
  154. package/dist/sdk/chunk-V45TITKX.mjs.map +0 -1
  155. package/dist/sdk/chunk-WKLJ57WF.mjs.map +0 -1
  156. package/dist/sdk/chunk-ZOF5QT6U.mjs.map +0 -1
  157. package/dist/sdk/chunk-ZPYODGYA.mjs.map +0 -1
  158. package/dist/sdk/command-executor-3AHGIYQG.mjs +0 -14
  159. package/dist/sdk/config-JE4HKTWW.mjs +0 -16
  160. package/dist/sdk/dist-3UGGEZB3.mjs.map +0 -1
  161. package/dist/sdk/failure-condition-evaluator-H3PBFBYT.mjs +0 -18
  162. package/dist/sdk/github-auth-27SZGPEC.mjs +0 -196
  163. package/dist/sdk/github-auth-BJQBLK2V.mjs.map +0 -1
  164. package/dist/sdk/github-frontend-TZRBOQCN.mjs +0 -1394
  165. package/dist/sdk/github-frontend-TZRBOQCN.mjs.map +0 -1
  166. package/dist/sdk/lazy-otel-5NH4ZJJM.mjs +0 -24
  167. package/dist/sdk/liquid-extensions-P6KDYILF.mjs +0 -25
  168. package/dist/sdk/memory-store-K5N7MC7U.mjs +0 -12
  169. package/dist/sdk/metrics-JTOG2HNO.mjs +0 -41
  170. package/dist/sdk/prompt-state-YPICX7PI.mjs +0 -16
  171. package/dist/sdk/renderer-schema-KOIH75RZ.mjs +0 -51
  172. package/dist/sdk/renderer-schema-KOIH75RZ.mjs.map +0 -1
  173. package/dist/sdk/routing-JMZ7HDCC.mjs +0 -26
  174. package/dist/sdk/schedule-tool-4M45RK3E.mjs +0 -37
  175. package/dist/sdk/schedule-tool-4M45RK3E.mjs.map +0 -1
  176. package/dist/sdk/schedule-tool-handler-KLHE2SOW.mjs.map +0 -1
  177. package/dist/sdk/schedule-tool-handler-NBEO46RV.mjs.map +0 -1
  178. package/dist/sdk/slack-frontend-BPWXNIHE.mjs +0 -929
  179. package/dist/sdk/slack-frontend-BPWXNIHE.mjs.map +0 -1
  180. package/dist/sdk/slack-frontend-DF5VL4OF.mjs.map +0 -1
  181. package/dist/sdk/task-evaluator-GQYDOSGT.mjs +0 -1392
  182. package/dist/sdk/task-evaluator-GQYDOSGT.mjs.map +0 -1
  183. package/dist/sdk/teams-frontend-DNW5GZP3.mjs.map +0 -1
  184. package/dist/sdk/telegram-frontend-GA7OLADB.mjs.map +0 -1
  185. package/dist/sdk/trace-helpers-26ZCAE2V.mjs.map +0 -1
  186. package/dist/sdk/trace-helpers-XV5GAX5L.mjs +0 -29
  187. package/dist/sdk/trace-helpers-XV5GAX5L.mjs.map +0 -1
  188. package/dist/sdk/trace-serializer-KKBJHM7J.mjs.map +0 -1
  189. package/dist/sdk/track-execution-3EC24C2X.mjs +0 -163
  190. package/dist/sdk/track-execution-3EC24C2X.mjs.map +0 -1
  191. package/dist/sdk/track-execution-66RLL6QT.mjs +0 -143
  192. package/dist/sdk/track-execution-66RLL6QT.mjs.map +0 -1
  193. package/dist/sdk/utcp-check-provider-JLIYF5HH.mjs +0 -16
  194. package/dist/sdk/utcp-check-provider-JLIYF5HH.mjs.map +0 -1
  195. package/dist/sdk/utcp-check-provider-WI3QZ3W6.mjs.map +0 -1
  196. package/dist/sdk/workflow-check-provider-X2UREEH7.mjs +0 -31
  197. package/dist/sdk/workflow-check-provider-X2UREEH7.mjs.map +0 -1
  198. package/dist/sdk/workflow-check-provider-YXALZNAQ.mjs +0 -31
  199. package/dist/sdk/workflow-check-provider-YXALZNAQ.mjs.map +0 -1
  200. package/dist/sdk/workflow-registry-X2IPY35M.mjs +0 -12
  201. package/dist/sdk/workflow-registry-X2IPY35M.mjs.map +0 -1
  202. package/dist/sdk/workflow-registry-YCZ3FCJC.mjs.map +0 -1
  203. /package/dist/sdk/{a2a-frontend-5YDHFQXD.mjs.map → a2a-frontend-OI4OVSKC.mjs.map} +0 -0
  204. /package/dist/sdk/{check-provider-registry-WSEVHJEV.mjs.map → check-provider-registry-RITJW67U.mjs.map} +0 -0
  205. /package/dist/sdk/{check-provider-registry-YRADEEQY.mjs.map → check-provider-registry-ZZ6N4GDP.mjs.map} +0 -0
  206. /package/dist/sdk/{chunk-4BN2XI4X.mjs.map → chunk-4HIWZA6M.mjs.map} +0 -0
  207. /package/dist/sdk/{chunk-RI4ONH5X.mjs.map → chunk-4MHHELVZ.mjs.map} +0 -0
  208. /package/dist/sdk/{chunk-54KOAC4W.mjs.map → chunk-4ZLYHSN4.mjs.map} +0 -0
  209. /package/dist/sdk/{chunk-GA2TYKSR.mjs.map → chunk-7XKHFRPN.mjs.map} +0 -0
  210. /package/dist/sdk/{chunk-XOAEKFKB.mjs.map → chunk-QLT42TX7.mjs.map} +0 -0
  211. /package/dist/sdk/{chunk-7XRSCOKE.mjs.map → chunk-TSX3YS3F.mjs.map} +0 -0
  212. /package/dist/sdk/{chunk-NPSLGKXB.mjs.map → chunk-UM7LGO2P.mjs.map} +0 -0
  213. /package/dist/sdk/{chunk-7VTZDC2X.mjs.map → chunk-VPPBOKBQ.mjs.map} +0 -0
  214. /package/dist/sdk/{chunk-RHKPFJLG.mjs.map → chunk-ZNKL6ESZ.mjs.map} +0 -0
  215. /package/dist/sdk/{command-executor-3AHGIYQG.mjs.map → command-executor-LHUW77GR.mjs.map} +0 -0
  216. /package/dist/sdk/{command-executor-YNJOS77A.mjs.map → config-TVU5RWR5.mjs.map} +0 -0
  217. /package/dist/sdk/{email-frontend-WSNADJPI.mjs.map → email-frontend-ECHQCFTR.mjs.map} +0 -0
  218. /package/dist/sdk/{config-JE4HKTWW.mjs.map → failure-condition-evaluator-USY3ISVA.mjs.map} +0 -0
  219. /package/dist/sdk/{github-auth-27SZGPEC.mjs.map → github-auth-UO4DMNCC.mjs.map} +0 -0
  220. /package/dist/sdk/{github-frontend-DECYOBRN.mjs.map → github-frontend-2T5PWYD5.mjs.map} +0 -0
  221. /package/dist/sdk/{host-CFM2ASDI.mjs.map → host-OJSMCLKK.mjs.map} +0 -0
  222. /package/dist/sdk/{host-T4LNVU2H.mjs.map → host-RM6UJEPP.mjs.map} +0 -0
  223. /package/dist/sdk/{knex-store-OEWSZEBY.mjs.map → knex-store-KCMFAMH5.mjs.map} +0 -0
  224. /package/dist/sdk/{config-PCP6O6Y6.mjs.map → liquid-extensions-KZIRR4OY.mjs.map} +0 -0
  225. /package/dist/sdk/{loader-WRGI244P.mjs.map → loader-35YWX5UQ.mjs.map} +0 -0
  226. /package/dist/sdk/{failure-condition-evaluator-H3PBFBYT.mjs.map → memory-store-3JONK7AF.mjs.map} +0 -0
  227. /package/dist/sdk/{opa-policy-engine-IVMCGVNA.mjs.map → opa-policy-engine-FY5D45YS.mjs.map} +0 -0
  228. /package/dist/sdk/{failure-condition-evaluator-IRFKTYZD.mjs.map → prompt-state-VVJMONT3.mjs.map} +0 -0
  229. /package/dist/sdk/{renderer-schema-BT2IXMLW.mjs.map → renderer-schema-JZRRU5CW.mjs.map} +0 -0
  230. /package/dist/sdk/{lazy-otel-5NH4ZJJM.mjs.map → routing-NNQQSLWA.mjs.map} +0 -0
  231. /package/dist/sdk/{liquid-extensions-E3AKRX7P.mjs.map → schedule-tool-ADZ2ON4I.mjs.map} +0 -0
  232. /package/dist/sdk/{liquid-extensions-P6KDYILF.mjs.map → schedule-tool-EMNF3FPQ.mjs.map} +0 -0
  233. /package/dist/sdk/{memory-store-K5N7MC7U.mjs.map → schedule-tool-handler-3R3IC6VA.mjs.map} +0 -0
  234. /package/dist/sdk/{memory-store-OHUIXCWJ.mjs.map → schedule-tool-handler-F76ZD2WU.mjs.map} +0 -0
  235. /package/dist/sdk/{task-evaluator-OVMG7S56.mjs.map → task-evaluator-H3BXC7SE.mjs.map} +0 -0
  236. /package/dist/sdk/{metrics-JTOG2HNO.mjs.map → trace-helpers-OMF4C24T.mjs.map} +0 -0
  237. /package/dist/sdk/{prompt-state-LN57DQF3.mjs.map → trace-serializer-EBHTHZYT.mjs.map} +0 -0
  238. /package/dist/sdk/{prompt-state-YPICX7PI.mjs.map → utcp-check-provider-Q4PD5EP2.mjs.map} +0 -0
  239. /package/dist/sdk/{routing-H2PQ57OA.mjs.map → workflow-check-provider-TC2G33WF.mjs.map} +0 -0
  240. /package/dist/sdk/{routing-JMZ7HDCC.mjs.map → workflow-check-provider-U4UXZ5YS.mjs.map} +0 -0
  241. /package/dist/sdk/{schedule-tool-2DPNSU63.mjs.map → workflow-registry-K56UTX36.mjs.map} +0 -0
@@ -0,0 +1 @@
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":[]}
@@ -10,8 +10,8 @@ import {
10
10
  setSpanError,
11
11
  withActiveSpan,
12
12
  withVisorRun
13
- } from "./chunk-XOAEKFKB.mjs";
14
- import "./chunk-G7GSN3SK.mjs";
13
+ } from "./chunk-QLT42TX7.mjs";
14
+ import "./chunk-PUHU6UY6.mjs";
15
15
  import "./chunk-FWWLD555.mjs";
16
16
  import "./chunk-B2OUZAWY.mjs";
17
17
  import "./chunk-J7LXIPZS.mjs";
@@ -28,4 +28,4 @@ export {
28
28
  withActiveSpan,
29
29
  withVisorRun
30
30
  };
31
- //# sourceMappingURL=trace-helpers-26ZCAE2V.mjs.map
31
+ //# sourceMappingURL=trace-helpers-OMF4C24T.mjs.map
@@ -7,8 +7,8 @@ import {
7
7
  renderSpanYaml,
8
8
  renderTraceTree,
9
9
  serializeTraceForPrompt
10
- } from "./chunk-6C3R6E42.mjs";
11
- import "./chunk-ZPYODGYA.mjs";
10
+ } from "./chunk-IY5PQ5EN.mjs";
11
+ import "./chunk-6E625R3C.mjs";
12
12
  import "./chunk-B2OUZAWY.mjs";
13
13
  import "./chunk-J7LXIPZS.mjs";
14
14
  init_trace_serializer();
@@ -21,4 +21,4 @@ export {
21
21
  renderTraceTree,
22
22
  serializeTraceForPrompt
23
23
  };
24
- //# sourceMappingURL=trace-serializer-KKBJHM7J.mjs.map
24
+ //# sourceMappingURL=trace-serializer-EBHTHZYT.mjs.map
@@ -0,0 +1,249 @@
1
+ import {
2
+ TaskLiveUpdateManager,
3
+ init_task_live_updates,
4
+ resolveTaskLiveUpdatesConfig
5
+ } from "./chunk-SRU5TFNY.mjs";
6
+ import "./chunk-IY5PQ5EN.mjs";
7
+ import {
8
+ init_task_trace_resolution,
9
+ resolveTaskTraceReference
10
+ } from "./chunk-WZQMTD7W.mjs";
11
+ import {
12
+ getInstanceId,
13
+ init_instance_id,
14
+ require_package
15
+ } from "./chunk-PUHU6UY6.mjs";
16
+ import {
17
+ init_logger,
18
+ logger
19
+ } from "./chunk-6E625R3C.mjs";
20
+ import {
21
+ init_lazy_otel,
22
+ trace
23
+ } from "./chunk-B2OUZAWY.mjs";
24
+ import {
25
+ __esm
26
+ } from "./chunk-J7LXIPZS.mjs";
27
+
28
+ // src/agent-protocol/track-execution.ts
29
+ import crypto from "crypto";
30
+ import fs from "fs";
31
+ import path from "path";
32
+ function getPackageVersion() {
33
+ try {
34
+ return require_package()?.version || "dev";
35
+ } catch {
36
+ return "dev";
37
+ }
38
+ }
39
+ async function readTraceIdFromFallbackFile(traceFile) {
40
+ if (!traceFile || !fs.existsSync(traceFile)) return void 0;
41
+ try {
42
+ const { readTraceIdFromFile } = await import("./trace-serializer-EBHTHZYT.mjs");
43
+ return await readTraceIdFromFile(traceFile) || void 0;
44
+ } catch {
45
+ return void 0;
46
+ }
47
+ }
48
+ async function trackExecution(opts, executor) {
49
+ const { taskStore, source, configPath, metadata, messageText } = opts;
50
+ const configName = configPath ? path.basename(configPath, path.extname(configPath)) : void 0;
51
+ const workflowId = configName && opts.workflowId ? `${configName}#${opts.workflowId}` : opts.workflowId;
52
+ const requestMessage = {
53
+ message_id: crypto.randomUUID(),
54
+ role: "user",
55
+ parts: [{ text: messageText }]
56
+ };
57
+ const traceFile = process.env.VISOR_FALLBACK_TRACE_FILE || void 0;
58
+ const task = taskStore.createTask({
59
+ contextId: crypto.randomUUID(),
60
+ requestMessage,
61
+ workflowId,
62
+ requestMetadata: {
63
+ source,
64
+ instance_id: getInstanceId(),
65
+ visor_version: process.env.VISOR_VERSION || getPackageVersion(),
66
+ ...process.env.VISOR_COMMIT_SHORT ? { visor_commit: process.env.VISOR_COMMIT_SHORT } : {},
67
+ trace_id: trace.getActiveSpan()?.spanContext().traceId || void 0,
68
+ ...traceFile ? { trace_file: traceFile } : {},
69
+ ...metadata
70
+ }
71
+ });
72
+ const instanceId = getInstanceId();
73
+ return await logger.withTaskContext(task.id, async () => {
74
+ taskStore.updateTaskState(task.id, "working");
75
+ taskStore.claimTask(task.id, instanceId);
76
+ logger.info(
77
+ `[TaskTracking] Task ${task.id} started (source=${source}, workflow=${workflowId || "-"}, instance=${instanceId})`
78
+ );
79
+ const liveUpdateConfig = resolveTaskLiveUpdatesConfig(opts.liveUpdates?.config);
80
+ const initialTraceId = trace.getActiveSpan()?.spanContext().traceId || task.metadata?.trace_id;
81
+ if (initialTraceId && !task.metadata?.trace_id) {
82
+ try {
83
+ taskStore.updateMetadata(task.id, { trace_id: initialTraceId });
84
+ } catch {
85
+ }
86
+ }
87
+ const initialResolvedTrace = await resolveTaskTraceReference({
88
+ trace_id: initialTraceId || task.metadata?.trace_id,
89
+ trace_file: task.metadata?.trace_file
90
+ });
91
+ const liveUpdateManager = liveUpdateConfig && opts.liveUpdates?.sink ? new TaskLiveUpdateManager({
92
+ taskId: task.id,
93
+ requestText: messageText,
94
+ traceRef: initialResolvedTrace.primaryRef,
95
+ traceId: initialResolvedTrace.traceId,
96
+ includeTraceId: opts.liveUpdates?.includeTraceId === true,
97
+ sink: opts.liveUpdates.sink,
98
+ config: liveUpdateConfig,
99
+ resolveTraceState: () => {
100
+ let current;
101
+ try {
102
+ current = taskStore.getTask(task.id);
103
+ } catch {
104
+ return {
105
+ traceRef: initialResolvedTrace.primaryRef,
106
+ traceId: initialResolvedTrace.traceId
107
+ };
108
+ }
109
+ return {
110
+ traceRef: current?.metadata?.trace_id || current?.metadata?.trace_file || initialResolvedTrace.primaryRef,
111
+ traceId: current?.metadata?.trace_id
112
+ };
113
+ },
114
+ onPostedRef: (ref) => {
115
+ try {
116
+ taskStore.updateMetadata(task.id, ref);
117
+ } catch {
118
+ }
119
+ },
120
+ appendHistory: (text, stage) => {
121
+ try {
122
+ taskStore.appendHistory(task.id, {
123
+ message_id: crypto.randomUUID(),
124
+ role: "agent",
125
+ parts: [{ text }],
126
+ metadata: { kind: "task_live_update", stage, source }
127
+ });
128
+ } catch {
129
+ }
130
+ }
131
+ }) : null;
132
+ if (liveUpdateConfig && !opts.liveUpdates?.sink) {
133
+ logger.debug(
134
+ `[TaskTracking] Live updates requested for task ${task.id} but no sink is available for source=${source}`
135
+ );
136
+ } else if (liveUpdateManager) {
137
+ logger.info(`[TaskTracking] Live updates enabled for task ${task.id} (source=${source})`);
138
+ }
139
+ const HEARTBEAT_INTERVAL = 6e4;
140
+ const heartbeatTimer = setInterval(() => {
141
+ try {
142
+ taskStore.heartbeat(task.id);
143
+ } catch {
144
+ }
145
+ }, HEARTBEAT_INTERVAL);
146
+ try {
147
+ if (liveUpdateManager) {
148
+ await liveUpdateManager.start();
149
+ }
150
+ const result = await executor();
151
+ try {
152
+ const activeTraceId = trace.getActiveSpan()?.spanContext().traceId;
153
+ const persistedTraceId = (activeTraceId && activeTraceId !== "" ? activeTraceId : void 0) || await readTraceIdFromFallbackFile(traceFile);
154
+ if (persistedTraceId && !task.metadata?.trace_id) {
155
+ taskStore.updateMetadata(task.id, { trace_id: persistedTraceId });
156
+ }
157
+ } catch {
158
+ }
159
+ let responseText = "Execution completed";
160
+ try {
161
+ const history = result?.reviewSummary?.history;
162
+ if (history) {
163
+ const entries = Object.values(history);
164
+ for (let i = entries.length - 1; i >= 0; i--) {
165
+ const outputs = entries[i];
166
+ if (!Array.isArray(outputs)) continue;
167
+ for (let j = outputs.length - 1; j >= 0; j--) {
168
+ const text = outputs[j]?.text;
169
+ if (typeof text === "string" && text.trim().length > 0) {
170
+ responseText = text.trim();
171
+ break;
172
+ }
173
+ }
174
+ if (responseText !== "Execution completed") break;
175
+ }
176
+ }
177
+ } catch {
178
+ }
179
+ const completedMsg = {
180
+ message_id: crypto.randomUUID(),
181
+ role: "agent",
182
+ parts: [{ text: responseText }]
183
+ };
184
+ try {
185
+ taskStore.updateTaskState(task.id, "completed", completedMsg);
186
+ logger.info(`[TaskTracking] Task ${task.id} completed`);
187
+ } catch (stateErr) {
188
+ logger.warn(
189
+ `[TaskTracking] Task ${task.id} completed but state transition failed: ${stateErr instanceof Error ? stateErr.message : stateErr}`
190
+ );
191
+ }
192
+ if (opts.autoEvaluate || process.env.VISOR_TASK_EVALUATE === "true") {
193
+ scheduleEvaluation(task.id, taskStore);
194
+ }
195
+ if (liveUpdateManager) {
196
+ await liveUpdateManager.complete(responseText);
197
+ }
198
+ return { task, result };
199
+ } catch (err) {
200
+ const errorText = err instanceof Error ? err.message : String(err);
201
+ const failMessage = {
202
+ message_id: crypto.randomUUID(),
203
+ role: "agent",
204
+ parts: [{ text: errorText }]
205
+ };
206
+ try {
207
+ taskStore.updateTaskState(task.id, "failed", failMessage);
208
+ logger.info(`[TaskTracking] Task ${task.id} failed: ${errorText}`);
209
+ } catch {
210
+ }
211
+ if (liveUpdateManager) {
212
+ await liveUpdateManager.fail(`:warning: ${errorText}`);
213
+ }
214
+ throw err;
215
+ } finally {
216
+ clearInterval(heartbeatTimer);
217
+ liveUpdateManager?.stop();
218
+ }
219
+ });
220
+ }
221
+ function scheduleEvaluation(taskId, taskStore) {
222
+ setTimeout(async () => {
223
+ await logger.withTaskContext(taskId, async () => {
224
+ try {
225
+ const { evaluateAndStore } = await import("./task-evaluator-H3BXC7SE.mjs");
226
+ await evaluateAndStore(taskId, taskStore);
227
+ logger.info(`[TaskEvaluator] Auto-evaluation completed for task ${taskId}`);
228
+ } catch (err) {
229
+ logger.warn(
230
+ `[TaskEvaluator] Auto-evaluation failed for task ${taskId}: ${err instanceof Error ? err.message : err}`
231
+ );
232
+ }
233
+ });
234
+ }, 5e3);
235
+ }
236
+ var init_track_execution = __esm({
237
+ "src/agent-protocol/track-execution.ts"() {
238
+ init_logger();
239
+ init_lazy_otel();
240
+ init_instance_id();
241
+ init_task_live_updates();
242
+ init_task_trace_resolution();
243
+ }
244
+ });
245
+ init_track_execution();
246
+ export {
247
+ trackExecution
248
+ };
249
+ //# sourceMappingURL=track-execution-3CHMGEPH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/agent-protocol/track-execution.ts"],"sourcesContent":["/**\n * Shared execution tracking helper.\n *\n * Wraps any engine execution call with task lifecycle management:\n * creates a task in 'submitted' state, transitions to 'working',\n * runs the executor, then sets terminal state (completed/failed).\n *\n * Used by CLI, Slack, TUI, and Scheduler frontends when task_tracking is enabled.\n */\n\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport path from 'path';\nimport { logger } from '../logger';\nimport { trace } from '../telemetry/lazy-otel';\nimport { getInstanceId } from '../utils/instance-id';\nimport type { TaskLiveUpdatesConfig } from '../types/config';\nimport type { TaskStore } from './task-store';\nimport type { AgentMessage, AgentTask } from './types';\nimport {\n resolveTaskLiveUpdatesConfig,\n TaskLiveUpdateManager,\n type TaskLiveUpdateSink,\n} from './task-live-updates';\nimport { resolveTaskTraceReference } from './task-trace-resolution';\n\nfunction getPackageVersion(): string {\n try {\n return require('../../package.json')?.version || 'dev';\n } catch {\n return 'dev';\n }\n}\n\nasync function readTraceIdFromFallbackFile(traceFile?: string): Promise<string | undefined> {\n if (!traceFile || !fs.existsSync(traceFile)) return undefined;\n\n try {\n const { readTraceIdFromFile } = await import('./trace-serializer');\n return (await readTraceIdFromFile(traceFile)) || undefined;\n } catch {\n return undefined;\n }\n}\n\nexport type TaskSource =\n | 'cli'\n | 'slack'\n | 'telegram'\n | 'email'\n | 'whatsapp'\n | 'teams'\n | 'a2a'\n | 'mcp'\n | 'tui'\n | 'scheduler'\n | 'webhook'\n | 'test';\n\nexport interface TrackExecutionOptions {\n taskStore: TaskStore;\n source: TaskSource;\n workflowId?: string;\n /** Config file path — used to prefix workflowId as \"config.yaml#workflow\" */\n configPath?: string;\n metadata?: Record<string, unknown>;\n /** Human-readable description of what's being executed */\n messageText: string;\n /** Run LLM evaluation after task completion (non-blocking). */\n autoEvaluate?: boolean;\n /** Optional live progress updates for supported interactive frontends. */\n liveUpdates?: {\n config?: boolean | TaskLiveUpdatesConfig;\n sink?: TaskLiveUpdateSink;\n includeTraceId?: boolean;\n };\n}\n\n/**\n * Wrap an engine execution call with task lifecycle tracking.\n *\n * Creates a task, transitions to 'working', runs the executor,\n * then sets terminal state. Returns both the task and the original result.\n * Re-throws any executor error after marking the task as failed.\n */\nexport async function trackExecution<T>(\n opts: TrackExecutionOptions,\n executor: () => Promise<T>\n): Promise<{ task: AgentTask; result: T }> {\n const { taskStore, source, configPath, metadata, messageText } = opts;\n const configName = configPath ? path.basename(configPath, path.extname(configPath)) : undefined;\n const workflowId =\n configName && opts.workflowId ? `${configName}#${opts.workflowId}` : opts.workflowId;\n\n const requestMessage: AgentMessage = {\n message_id: crypto.randomUUID(),\n role: 'user',\n parts: [{ text: messageText }],\n };\n\n // Capture trace file path if telemetry is writing to a file\n const traceFile = process.env.VISOR_FALLBACK_TRACE_FILE || undefined;\n\n const task = taskStore.createTask({\n contextId: crypto.randomUUID(),\n requestMessage,\n workflowId,\n requestMetadata: {\n source,\n instance_id: getInstanceId(),\n visor_version: process.env.VISOR_VERSION || getPackageVersion(),\n ...(process.env.VISOR_COMMIT_SHORT ? { visor_commit: process.env.VISOR_COMMIT_SHORT } : {}),\n trace_id: trace.getActiveSpan()?.spanContext().traceId || undefined,\n ...(traceFile ? { trace_file: traceFile } : {}),\n ...metadata,\n },\n });\n\n const instanceId = getInstanceId();\n return await logger.withTaskContext(task.id, async () => {\n taskStore.updateTaskState(task.id, 'working');\n taskStore.claimTask(task.id, instanceId);\n logger.info(\n `[TaskTracking] Task ${task.id} started (source=${source}, workflow=${workflowId || '-'}, instance=${instanceId})`\n );\n\n const liveUpdateConfig = resolveTaskLiveUpdatesConfig(opts.liveUpdates?.config);\n const initialTraceId =\n trace.getActiveSpan()?.spanContext().traceId ||\n (task.metadata?.trace_id as string | undefined);\n if (initialTraceId && !task.metadata?.trace_id) {\n try {\n taskStore.updateMetadata(task.id, { trace_id: initialTraceId });\n } catch {\n // best-effort only\n }\n }\n const initialResolvedTrace = await resolveTaskTraceReference({\n trace_id: initialTraceId || (task.metadata?.trace_id as string | undefined),\n trace_file: task.metadata?.trace_file as string | undefined,\n });\n const liveUpdateManager =\n liveUpdateConfig && opts.liveUpdates?.sink\n ? new TaskLiveUpdateManager({\n taskId: task.id,\n requestText: messageText,\n traceRef: initialResolvedTrace.primaryRef,\n traceId: initialResolvedTrace.traceId,\n includeTraceId: opts.liveUpdates?.includeTraceId === true,\n sink: opts.liveUpdates.sink,\n config: liveUpdateConfig,\n resolveTraceState: () => {\n let current;\n try {\n current = taskStore.getTask(task.id);\n } catch {\n return {\n traceRef: initialResolvedTrace.primaryRef,\n traceId: initialResolvedTrace.traceId,\n };\n }\n return {\n traceRef:\n (current?.metadata?.trace_id as string | undefined) ||\n (current?.metadata?.trace_file as string | undefined) ||\n initialResolvedTrace.primaryRef,\n traceId: current?.metadata?.trace_id as string | undefined,\n };\n },\n onPostedRef: ref => {\n try {\n taskStore.updateMetadata(task.id, ref);\n } catch {\n // best-effort only\n }\n },\n appendHistory: (text, stage) => {\n try {\n taskStore.appendHistory(task.id, {\n message_id: crypto.randomUUID(),\n role: 'agent',\n parts: [{ text }],\n metadata: { kind: 'task_live_update', stage, source },\n });\n } catch {\n // best-effort only\n }\n },\n })\n : null;\n if (liveUpdateConfig && !opts.liveUpdates?.sink) {\n logger.debug(\n `[TaskTracking] Live updates requested for task ${task.id} but no sink is available for source=${source}`\n );\n } else if (liveUpdateManager) {\n logger.info(`[TaskTracking] Live updates enabled for task ${task.id} (source=${source})`);\n }\n\n // Heartbeat: periodically touch updated_at so stale-task detection\n // can distinguish live tasks from orphans (works across nodes).\n const HEARTBEAT_INTERVAL = 60_000; // 1 minute\n const heartbeatTimer = setInterval(() => {\n try {\n taskStore.heartbeat(task.id);\n } catch {\n // best-effort — don't crash the task over a heartbeat failure\n }\n }, HEARTBEAT_INTERVAL);\n\n try {\n if (liveUpdateManager) {\n await liveUpdateManager.start();\n }\n const result = await executor();\n\n // Now that execution is done, capture the trace ID from the active span.\n // At task creation time the span may not have been active yet, so we\n // update metadata post-execution to ensure trace_id is stored.\n try {\n const activeTraceId = trace.getActiveSpan()?.spanContext().traceId;\n const persistedTraceId =\n (activeTraceId && activeTraceId !== '' ? activeTraceId : undefined) ||\n (await readTraceIdFromFallbackFile(traceFile));\n if (persistedTraceId && !task.metadata?.trace_id) {\n taskStore.updateMetadata(task.id, { trace_id: persistedTraceId });\n }\n } catch {\n // best-effort — don't fail the task over metadata\n }\n\n // Extract AI response text from the result.\n // result.reviewSummary.history is keyed by checkId with arrays of outputs.\n // We want the LAST check's text output (the final AI response), not the\n // first (which is typically the intent router).\n let responseText = 'Execution completed';\n try {\n const history = (result as any)?.reviewSummary?.history as\n | Record<string, unknown[]>\n | undefined;\n if (history) {\n const entries = Object.values(history);\n // Iterate in reverse — last check output is the final response\n for (let i = entries.length - 1; i >= 0; i--) {\n const outputs = entries[i];\n if (!Array.isArray(outputs)) continue;\n // Within a check, look at the last output first too\n for (let j = outputs.length - 1; j >= 0; j--) {\n const text = (outputs[j] as any)?.text;\n if (typeof text === 'string' && text.trim().length > 0) {\n responseText = text.trim();\n break;\n }\n }\n if (responseText !== 'Execution completed') break;\n }\n }\n } catch {\n // ignore extraction errors\n }\n\n const completedMsg: AgentMessage = {\n message_id: crypto.randomUUID(),\n role: 'agent',\n parts: [{ text: responseText }],\n };\n try {\n taskStore.updateTaskState(task.id, 'completed', completedMsg);\n logger.info(`[TaskTracking] Task ${task.id} completed`);\n } catch (stateErr) {\n // Another process (e.g. stale sweep) may have already marked this task as failed.\n // Log a warning but do NOT re-throw — the execution itself succeeded.\n logger.warn(\n `[TaskTracking] Task ${task.id} completed but state transition failed: ${stateErr instanceof Error ? stateErr.message : stateErr}`\n );\n }\n\n // Fire-and-forget LLM evaluation (non-blocking)\n // Enabled via opts.autoEvaluate (from config.task_evaluate) or VISOR_TASK_EVALUATE env var\n if (opts.autoEvaluate || process.env.VISOR_TASK_EVALUATE === 'true') {\n scheduleEvaluation(task.id, taskStore);\n }\n\n if (liveUpdateManager) {\n await liveUpdateManager.complete(responseText);\n }\n\n return { task, result };\n } catch (err) {\n const errorText = err instanceof Error ? err.message : String(err);\n const failMessage: AgentMessage = {\n message_id: crypto.randomUUID(),\n role: 'agent',\n parts: [{ text: errorText }],\n };\n try {\n taskStore.updateTaskState(task.id, 'failed', failMessage);\n logger.info(`[TaskTracking] Task ${task.id} failed: ${errorText}`);\n } catch {\n // ignore double-failure\n }\n if (liveUpdateManager) {\n await liveUpdateManager.fail(`:warning: ${errorText}`);\n }\n throw err; // re-throw to preserve original behavior\n } finally {\n clearInterval(heartbeatTimer);\n liveUpdateManager?.stop();\n }\n });\n}\n\n// ---------------------------------------------------------------------------\n// Non-blocking auto-evaluation\n// ---------------------------------------------------------------------------\n\nfunction scheduleEvaluation(taskId: string, taskStore: TaskStore): void {\n // Delay slightly to let OTEL spans flush before we try to read the trace\n setTimeout(async () => {\n await logger.withTaskContext(taskId, async () => {\n try {\n const { evaluateAndStore } = await import('./task-evaluator');\n await evaluateAndStore(taskId, taskStore as any);\n logger.info(`[TaskEvaluator] Auto-evaluation completed for task ${taskId}`);\n } catch (err) {\n logger.warn(\n `[TaskEvaluator] Auto-evaluation failed for task ${taskId}: ${err instanceof Error ? err.message : err}`\n );\n }\n });\n }, 5000);\n}\n"],"mappings":"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","names":[]}
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  UtcpCheckProvider,
3
3
  init_utcp_check_provider
4
- } from "./chunk-P2K4VOMU.mjs";
5
- import "./chunk-4BN2XI4X.mjs";
4
+ } from "./chunk-TSX3YS3F.mjs";
5
+ import "./chunk-4HIWZA6M.mjs";
6
6
  import "./chunk-25IC7KXZ.mjs";
7
7
  import "./chunk-LW3INISN.mjs";
8
- import "./chunk-RI4ONH5X.mjs";
9
- import "./chunk-ZPYODGYA.mjs";
8
+ import "./chunk-4MHHELVZ.mjs";
9
+ import "./chunk-6E625R3C.mjs";
10
10
  import "./chunk-B2OUZAWY.mjs";
11
11
  import "./chunk-J7LXIPZS.mjs";
12
12
  init_utcp_check_provider();
13
13
  export {
14
14
  UtcpCheckProvider
15
15
  };
16
- //# sourceMappingURL=utcp-check-provider-WI3QZ3W6.mjs.map
16
+ //# sourceMappingURL=utcp-check-provider-Q4PD5EP2.mjs.map
@@ -0,0 +1,32 @@
1
+ import {
2
+ WorkflowCheckProvider,
3
+ init_workflow_check_provider
4
+ } from "./chunk-ZYDRR6PZ.mjs";
5
+ import "./chunk-YSOIR46P.mjs";
6
+ import "./chunk-PDQTEBOJ.mjs";
7
+ import "./chunk-WZQMTD7W.mjs";
8
+ import "./chunk-TSX3YS3F.mjs";
9
+ import "./chunk-VPPBOKBQ.mjs";
10
+ import "./chunk-B7BVQM5K.mjs";
11
+ import "./chunk-XXAEN5KU.mjs";
12
+ import "./chunk-ZNKL6ESZ.mjs";
13
+ import "./chunk-4ZLYHSN4.mjs";
14
+ import "./chunk-YBXNG75V.mjs";
15
+ import "./chunk-KWTCTEFT.mjs";
16
+ import "./chunk-UM7LGO2P.mjs";
17
+ import "./chunk-7XKHFRPN.mjs";
18
+ import "./chunk-QLT42TX7.mjs";
19
+ import "./chunk-PUHU6UY6.mjs";
20
+ import "./chunk-FWWLD555.mjs";
21
+ import "./chunk-4HIWZA6M.mjs";
22
+ import "./chunk-25IC7KXZ.mjs";
23
+ import "./chunk-LW3INISN.mjs";
24
+ import "./chunk-4MHHELVZ.mjs";
25
+ import "./chunk-6E625R3C.mjs";
26
+ import "./chunk-B2OUZAWY.mjs";
27
+ import "./chunk-J7LXIPZS.mjs";
28
+ init_workflow_check_provider();
29
+ export {
30
+ WorkflowCheckProvider
31
+ };
32
+ //# sourceMappingURL=workflow-check-provider-TC2G33WF.mjs.map
@@ -0,0 +1,32 @@
1
+ import {
2
+ WorkflowCheckProvider,
3
+ init_workflow_check_provider
4
+ } from "./chunk-YYFSAAD6.mjs";
5
+ import "./chunk-YSOIR46P.mjs";
6
+ import "./chunk-PDQTEBOJ.mjs";
7
+ import "./chunk-WZQMTD7W.mjs";
8
+ import "./chunk-TSX3YS3F.mjs";
9
+ import "./chunk-VPPBOKBQ.mjs";
10
+ import "./chunk-B7BVQM5K.mjs";
11
+ import "./chunk-XXAEN5KU.mjs";
12
+ import "./chunk-ZNKL6ESZ.mjs";
13
+ import "./chunk-4ZLYHSN4.mjs";
14
+ import "./chunk-YBXNG75V.mjs";
15
+ import "./chunk-KWTCTEFT.mjs";
16
+ import "./chunk-UM7LGO2P.mjs";
17
+ import "./chunk-7XKHFRPN.mjs";
18
+ import "./chunk-QLT42TX7.mjs";
19
+ import "./chunk-PUHU6UY6.mjs";
20
+ import "./chunk-FWWLD555.mjs";
21
+ import "./chunk-4HIWZA6M.mjs";
22
+ import "./chunk-25IC7KXZ.mjs";
23
+ import "./chunk-LW3INISN.mjs";
24
+ import "./chunk-4MHHELVZ.mjs";
25
+ import "./chunk-6E625R3C.mjs";
26
+ import "./chunk-B2OUZAWY.mjs";
27
+ import "./chunk-J7LXIPZS.mjs";
28
+ init_workflow_check_provider();
29
+ export {
30
+ WorkflowCheckProvider
31
+ };
32
+ //# sourceMappingURL=workflow-check-provider-U4UXZ5YS.mjs.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  WorkflowRegistry,
3
3
  init_workflow_registry
4
- } from "./chunk-54KOAC4W.mjs";
5
- import "./chunk-ZPYODGYA.mjs";
4
+ } from "./chunk-4ZLYHSN4.mjs";
5
+ import "./chunk-6E625R3C.mjs";
6
6
  import "./chunk-B2OUZAWY.mjs";
7
7
  import "./chunk-J7LXIPZS.mjs";
8
8
  init_workflow_registry();
9
9
  export {
10
10
  WorkflowRegistry
11
11
  };
12
- //# sourceMappingURL=workflow-registry-YCZ3FCJC.mjs.map
12
+ //# sourceMappingURL=workflow-registry-K56UTX36.mjs.map
@@ -54,6 +54,20 @@ export declare class SlackClient {
54
54
  error: undefined;
55
55
  data: any;
56
56
  }>;
57
+ delete: ({ channel, ts }: {
58
+ channel: string;
59
+ ts: string;
60
+ }) => Promise<{
61
+ ok: false;
62
+ ts: string;
63
+ error: any;
64
+ data: any;
65
+ } | {
66
+ ok: true;
67
+ ts: any;
68
+ error: undefined;
69
+ data: any;
70
+ }>;
57
71
  };
58
72
  getBotUserId(): Promise<string>;
59
73
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/slack/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/slack/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"socket-runner.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/slack/socket-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket-runner.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/slack/socket-runner.ts"],"names":[],"mappings":"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"}
@@ -29,5 +29,21 @@ export declare class TeamsClient {
29
29
  text: string;
30
30
  replyToActivityId?: string;
31
31
  }): Promise<TeamsSendResult>;
32
+ /**
33
+ * Update an existing bot message.
34
+ * For safety, only supports single-activity payloads. Oversized content returns msg_too_long.
35
+ */
36
+ updateMessage(opts: {
37
+ conversationReference: ConversationReference;
38
+ activityId: string;
39
+ text: string;
40
+ }): Promise<TeamsSendResult>;
41
+ /**
42
+ * Delete a previously sent bot message.
43
+ */
44
+ deleteMessage(opts: {
45
+ conversationReference: ConversationReference;
46
+ activityId: string;
47
+ }): Promise<boolean>;
32
48
  }
33
49
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/teams/client.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EAIb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAe;gBAElB,IAAI,EAAE,kBAAkB;IAepC,sFAAsF;IACtF,UAAU,IAAI,YAAY;IAI1B,gCAAgC;IAChC,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE;QACtB,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,eAAe,CAAC;CA4B7B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/teams/client.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EAIb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAe;gBAElB,IAAI,EAAE,kBAAkB;IAepC,sFAAsF;IACtF,UAAU,IAAI,YAAY;IAI1B,gCAAgC;IAChC,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE;QACtB,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,eAAe,CAAC;IA6B5B;;;OAGG;IACG,aAAa,CAAC,IAAI,EAAE;QACxB,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,eAAe,CAAC;IAyB5B;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE;QACxB,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,OAAO,CAAC;CAcrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-runner.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/teams/webhook-runner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,QAAQ,CAAC,IAAI,WAAW;IACxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAC,CAAmD;IACrE,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAK;gBAEf,MAAM,EAAE,2BAA2B,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB;IAmB3F,uDAAuD;IACvD,SAAS,IAAI,WAAW;IAIxB,mDAAmD;IACnD,YAAY,CAAC,KAAK,EAAE,OAAO,8BAA8B,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhG,0CAA0C;IAC1C,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAI9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkEtB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B,KAAK,CAAC,SAAS,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAWb,aAAa;YASb,kBAAkB;IA4GhC,0DAA0D;IAC1D,OAAO,CAAC,mBAAmB;IAc3B,sDAAsD;IACtD,OAAO,CAAC,WAAW;CAWpB"}
1
+ {"version":3,"file":"webhook-runner.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/teams/webhook-runner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,QAAQ,CAAC,IAAI,WAAW;IACxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAC,CAAmD;IACrE,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAK;gBAEf,MAAM,EAAE,2BAA2B,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB;IAmB3F,uDAAuD;IACvD,SAAS,IAAI,WAAW;IAIxB,mDAAmD;IACnD,YAAY,CAAC,KAAK,EAAE,OAAO,8BAA8B,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhG,0CAA0C;IAC1C,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAI9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkEtB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B,KAAK,CAAC,SAAS,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAWb,aAAa;YASb,kBAAkB;IA4HhC,0DAA0D;IAC1D,OAAO,CAAC,mBAAmB;IAc3B,sDAAsD;IACtD,OAAO,CAAC,WAAW;CAWpB"}
@@ -34,6 +34,23 @@ export declare class TelegramClient {
34
34
  reply_to_message_id?: number;
35
35
  message_thread_id?: number;
36
36
  }): Promise<TelegramSendResult>;
37
+ /**
38
+ * Edit an existing text message.
39
+ * Returns ok=false if Telegram rejects the edit (e.g. message too old or unchanged).
40
+ */
41
+ editMessageText(opts: {
42
+ chat_id: number | string;
43
+ message_id: number;
44
+ text: string;
45
+ parse_mode?: 'HTML';
46
+ }): Promise<TelegramSendResult>;
47
+ /**
48
+ * Delete a message.
49
+ */
50
+ deleteMessage(opts: {
51
+ chat_id: number | string;
52
+ message_id: number;
53
+ }): Promise<boolean>;
37
54
  /**
38
55
  * Send a document/file.
39
56
  */