@probelabs/visor 0.1.186-ee → 0.1.187-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 (194) hide show
  1. package/defaults/assistant.yaml +31 -0
  2. package/defaults/code-talk.yaml +32 -0
  3. package/defaults/skills/code-explorer.yaml +6 -0
  4. package/dist/agent-protocol/task-live-update-slack.d.ts +10 -0
  5. package/dist/agent-protocol/task-live-update-slack.d.ts.map +1 -1
  6. package/dist/agent-protocol/task-live-updates.d.ts +10 -0
  7. package/dist/agent-protocol/task-live-updates.d.ts.map +1 -1
  8. package/dist/agent-protocol/tasks-cli-handler.d.ts.map +1 -1
  9. package/dist/agent-protocol/trace-serializer.d.ts +43 -1
  10. package/dist/agent-protocol/trace-serializer.d.ts.map +1 -1
  11. package/dist/agent-protocol/track-execution.d.ts.map +1 -1
  12. package/dist/ai-review-service.d.ts +22 -1
  13. package/dist/ai-review-service.d.ts.map +1 -1
  14. package/dist/cli-main.d.ts +1 -0
  15. package/dist/cli-main.d.ts.map +1 -1
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/defaults/assistant.yaml +31 -0
  18. package/dist/defaults/code-talk.yaml +32 -0
  19. package/dist/defaults/skills/code-explorer.yaml +6 -0
  20. package/dist/docs/telemetry-setup.md +18 -2
  21. package/dist/email/polling-runner.d.ts +1 -0
  22. package/dist/email/polling-runner.d.ts.map +1 -1
  23. package/dist/frontends/email-frontend.d.ts.map +1 -1
  24. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  25. package/dist/frontends/teams-frontend.d.ts.map +1 -1
  26. package/dist/frontends/telegram-frontend.d.ts.map +1 -1
  27. package/dist/frontends/whatsapp-frontend.d.ts.map +1 -1
  28. package/dist/generated/config-schema.d.ts +16 -8
  29. package/dist/generated/config-schema.d.ts.map +1 -1
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +7658 -1460
  33. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  34. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  35. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  36. package/dist/providers/script-check-provider.d.ts.map +1 -1
  37. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  38. package/dist/runners/mcp-server-runner.d.ts.map +1 -1
  39. package/dist/scheduler/scheduler.d.ts.map +1 -1
  40. package/dist/sdk/a2a-frontend-7EGXSULE.mjs +1751 -0
  41. package/dist/sdk/a2a-frontend-7EGXSULE.mjs.map +1 -0
  42. package/dist/sdk/{a2a-frontend-OI4OVSKC.mjs → a2a-frontend-QVKJ7MVW.mjs} +3 -3
  43. package/dist/sdk/{check-provider-registry-TQR32QBD.mjs → check-provider-registry-IGNTM4MW.mjs} +5 -5
  44. package/dist/sdk/{check-provider-registry-7T2AEWLU.mjs → check-provider-registry-QUUL6JI2.mjs} +14 -11
  45. package/dist/sdk/chunk-2LLKENYD.mjs +33 -0
  46. package/dist/sdk/chunk-2LLKENYD.mjs.map +1 -0
  47. package/dist/sdk/{chunk-XX6WT332.mjs → chunk-6DDNEBZ7.mjs} +2 -1
  48. package/dist/sdk/{chunk-XX6WT332.mjs.map → chunk-6DDNEBZ7.mjs.map} +1 -1
  49. package/dist/sdk/chunk-6LQEODDA.mjs +391 -0
  50. package/dist/sdk/chunk-6LQEODDA.mjs.map +1 -0
  51. package/dist/sdk/chunk-77AKSSW2.mjs +175 -0
  52. package/dist/sdk/chunk-77AKSSW2.mjs.map +1 -0
  53. package/dist/sdk/chunk-7QI6F66G.mjs +145 -0
  54. package/dist/sdk/chunk-7QI6F66G.mjs.map +1 -0
  55. package/dist/sdk/{chunk-UM7LGO2P.mjs → chunk-BBLBZVWC.mjs} +3 -3
  56. package/dist/sdk/chunk-BVEATT5V.mjs +2495 -0
  57. package/dist/sdk/chunk-BVEATT5V.mjs.map +1 -0
  58. package/dist/sdk/{chunk-SRU5TFNY.mjs → chunk-D6O5SCPC.mjs} +2 -1
  59. package/dist/sdk/{chunk-SRU5TFNY.mjs.map → chunk-D6O5SCPC.mjs.map} +1 -1
  60. package/dist/sdk/chunk-H2ZWNJJO.mjs +204 -0
  61. package/dist/sdk/chunk-H2ZWNJJO.mjs.map +1 -0
  62. package/dist/sdk/{chunk-TAOGXCWT.mjs → chunk-HMVD3AEC.mjs} +16 -16
  63. package/dist/sdk/{chunk-LWH6CVLZ.mjs → chunk-HQCCT6WP.mjs} +570 -259
  64. package/dist/sdk/chunk-HQCCT6WP.mjs.map +1 -0
  65. package/dist/sdk/chunk-HW4MPCOW.mjs +691 -0
  66. package/dist/sdk/chunk-HW4MPCOW.mjs.map +1 -0
  67. package/dist/sdk/chunk-PGBV3VZB.mjs +122 -0
  68. package/dist/sdk/chunk-PGBV3VZB.mjs.map +1 -0
  69. package/dist/sdk/chunk-PZADRRLX.mjs +739 -0
  70. package/dist/sdk/chunk-PZADRRLX.mjs.map +1 -0
  71. package/dist/sdk/chunk-QT766ZLD.mjs +217 -0
  72. package/dist/sdk/chunk-QT766ZLD.mjs.map +1 -0
  73. package/dist/sdk/chunk-RQDLVMER.mjs +1507 -0
  74. package/dist/sdk/chunk-RQDLVMER.mjs.map +1 -0
  75. package/dist/sdk/chunk-TL3ZTYFY.mjs +141 -0
  76. package/dist/sdk/chunk-TL3ZTYFY.mjs.map +1 -0
  77. package/dist/sdk/{chunk-YBXNG75V.mjs → chunk-YTG5DN72.mjs} +103 -28
  78. package/dist/sdk/chunk-YTG5DN72.mjs.map +1 -0
  79. package/dist/sdk/chunk-YU3VR5SZ.mjs +749 -0
  80. package/dist/sdk/chunk-YU3VR5SZ.mjs.map +1 -0
  81. package/dist/sdk/chunk-ZCBVXBKG.mjs +1150 -0
  82. package/dist/sdk/chunk-ZCBVXBKG.mjs.map +1 -0
  83. package/dist/sdk/{config-BCYAVJ5S.mjs → config-BI5ZXG6D.mjs} +2 -2
  84. package/dist/sdk/{config-TVU5RWR5.mjs → config-H5IOLBFA.mjs} +2 -2
  85. package/dist/sdk/{dist-PN5UHL6A.mjs → dist-YLO6HUFD.mjs} +238 -65
  86. package/dist/sdk/dist-YLO6HUFD.mjs.map +1 -0
  87. package/dist/sdk/{email-frontend-6JU4L33L.mjs → email-frontend-6O454VL5.mjs} +18 -3
  88. package/dist/sdk/{email-frontend-ECHQCFTR.mjs.map → email-frontend-6O454VL5.mjs.map} +1 -1
  89. package/dist/sdk/{email-frontend-ECHQCFTR.mjs → email-frontend-JE7H3LBC.mjs} +2 -2
  90. package/dist/sdk/failure-condition-evaluator-7WHZUYDC.mjs +18 -0
  91. package/dist/sdk/github-frontend-RGK4DPRI.mjs +1394 -0
  92. package/dist/sdk/github-frontend-RGK4DPRI.mjs.map +1 -0
  93. package/dist/sdk/{host-RM6UJEPP.mjs → host-UZESVA6Z.mjs} +8 -8
  94. package/dist/sdk/{host-OJSMCLKK.mjs → host-YWXWROIE.mjs} +6 -6
  95. package/dist/sdk/oauth2-token-cache-OS7WHLDI.mjs +13 -0
  96. package/dist/sdk/{routing-NNQQSLWA.mjs → routing-PHHRW2C7.mjs} +2 -2
  97. package/dist/sdk/routing-TYXT3STD.mjs +26 -0
  98. package/dist/sdk/{schedule-tool-7IQI6MID.mjs → schedule-tool-ITD445EO.mjs} +5 -5
  99. package/dist/sdk/{schedule-tool-25C5NMDG.mjs → schedule-tool-ODMIDBMT.mjs} +14 -11
  100. package/dist/sdk/{schedule-tool-handler-IYBNJLTV.mjs → schedule-tool-handler-5WPHFBOG.mjs} +5 -5
  101. package/dist/sdk/{schedule-tool-handler-VWGTVSB6.mjs → schedule-tool-handler-IQSKBFLS.mjs} +14 -11
  102. package/dist/sdk/schedule-tool-handler-IQSKBFLS.mjs.map +1 -0
  103. package/dist/sdk/sdk.d.mts +14 -2
  104. package/dist/sdk/sdk.d.ts +14 -2
  105. package/dist/sdk/sdk.js +1926 -642
  106. package/dist/sdk/sdk.js.map +1 -1
  107. package/dist/sdk/sdk.mjs +13 -10
  108. package/dist/sdk/sdk.mjs.map +1 -1
  109. package/dist/sdk/session-registry-CENXWIFR.mjs +12 -0
  110. package/dist/sdk/session-registry-CENXWIFR.mjs.map +1 -0
  111. package/dist/sdk/{slack-frontend-K3TPGERM.mjs → slack-frontend-H7PX5GE7.mjs} +2 -2
  112. package/dist/sdk/slack-frontend-JMX5MUVZ.mjs +1015 -0
  113. package/dist/sdk/slack-frontend-JMX5MUVZ.mjs.map +1 -0
  114. package/dist/sdk/task-evaluator-4QG4CYQA.mjs +264 -0
  115. package/dist/sdk/task-evaluator-4QG4CYQA.mjs.map +1 -0
  116. package/dist/sdk/teams-frontend-6MDAN7OR.mjs +355 -0
  117. package/dist/sdk/teams-frontend-6MDAN7OR.mjs.map +1 -0
  118. package/dist/sdk/{teams-frontend-6RRW533K.mjs → teams-frontend-HCT4MTY4.mjs} +2 -2
  119. package/dist/sdk/telegram-frontend-NLX2ZHS4.mjs +599 -0
  120. package/dist/sdk/telegram-frontend-NLX2ZHS4.mjs.map +1 -0
  121. package/dist/sdk/{telegram-frontend-5UA77YAT.mjs → telegram-frontend-YQRYDKPN.mjs} +2 -2
  122. package/dist/sdk/trace-helpers-AM2QE5UZ.mjs +31 -0
  123. package/dist/sdk/trace-helpers-AM2QE5UZ.mjs.map +1 -0
  124. package/dist/sdk/trace-serializer-4TOIAVQL.mjs +32 -0
  125. package/dist/sdk/trace-serializer-4TOIAVQL.mjs.map +1 -0
  126. package/dist/sdk/{track-execution-3CHMGEPH.mjs → track-execution-BULXL2XD.mjs} +2 -2
  127. package/dist/sdk/track-execution-VJJVJH6K.mjs +320 -0
  128. package/dist/sdk/track-execution-VJJVJH6K.mjs.map +1 -0
  129. package/dist/sdk/utcp-check-provider-WDTSQ7DZ.mjs +17 -0
  130. package/dist/sdk/utcp-check-provider-WDTSQ7DZ.mjs.map +1 -0
  131. package/dist/sdk/whatsapp-frontend-3EMMNC7R.mjs +451 -0
  132. package/dist/sdk/whatsapp-frontend-3EMMNC7R.mjs.map +1 -0
  133. package/dist/sdk/{workflow-check-provider-FOWDJUO3.mjs → workflow-check-provider-OVZDCL4E.mjs} +5 -5
  134. package/dist/sdk/workflow-check-provider-OVZDCL4E.mjs.map +1 -0
  135. package/dist/sdk/{workflow-check-provider-MRP3C2NC.mjs → workflow-check-provider-XOWQYWTC.mjs} +14 -11
  136. package/dist/sdk/workflow-check-provider-XOWQYWTC.mjs.map +1 -0
  137. package/dist/session-registry.d.ts +2 -7
  138. package/dist/session-registry.d.ts.map +1 -1
  139. package/dist/slack/client.d.ts +8 -0
  140. package/dist/slack/client.d.ts.map +1 -1
  141. package/dist/slack/markdown.d.ts.map +1 -1
  142. package/dist/slack/slack-output-adapter.d.ts.map +1 -1
  143. package/dist/slack/socket-runner.d.ts +1 -0
  144. package/dist/slack/socket-runner.d.ts.map +1 -1
  145. package/dist/state-machine/dispatch/debounce-manager.d.ts +44 -0
  146. package/dist/state-machine/dispatch/debounce-manager.d.ts.map +1 -0
  147. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
  148. package/dist/state-machine-execution-engine.d.ts +1 -0
  149. package/dist/state-machine-execution-engine.d.ts.map +1 -1
  150. package/dist/teams/webhook-runner.d.ts +1 -0
  151. package/dist/teams/webhook-runner.d.ts.map +1 -1
  152. package/dist/telegram/polling-runner.d.ts +1 -0
  153. package/dist/telegram/polling-runner.d.ts.map +1 -1
  154. package/dist/types/config.d.ts +14 -2
  155. package/dist/types/config.d.ts.map +1 -1
  156. package/dist/utils/child-process-error-handler.d.ts +19 -0
  157. package/dist/utils/child-process-error-handler.d.ts.map +1 -0
  158. package/dist/utils/user-facing-error.d.ts +4 -0
  159. package/dist/utils/user-facing-error.d.ts.map +1 -0
  160. package/dist/utils/workspace-manager.d.ts +5 -0
  161. package/dist/utils/workspace-manager.d.ts.map +1 -1
  162. package/dist/utils/worktree-cleanup.d.ts +28 -0
  163. package/dist/utils/worktree-cleanup.d.ts.map +1 -1
  164. package/dist/utils/worktree-manager.d.ts +6 -0
  165. package/dist/utils/worktree-manager.d.ts.map +1 -1
  166. package/dist/whatsapp/webhook-runner.d.ts +1 -0
  167. package/dist/whatsapp/webhook-runner.d.ts.map +1 -1
  168. package/dist/workflow-executor.d.ts +7 -0
  169. package/dist/workflow-executor.d.ts.map +1 -1
  170. package/package.json +3 -3
  171. package/dist/sdk/chunk-LWH6CVLZ.mjs.map +0 -1
  172. package/dist/sdk/chunk-YBXNG75V.mjs.map +0 -1
  173. package/dist/sdk/dist-PN5UHL6A.mjs.map +0 -1
  174. /package/dist/sdk/{a2a-frontend-OI4OVSKC.mjs.map → a2a-frontend-QVKJ7MVW.mjs.map} +0 -0
  175. /package/dist/sdk/{check-provider-registry-7T2AEWLU.mjs.map → check-provider-registry-IGNTM4MW.mjs.map} +0 -0
  176. /package/dist/sdk/{check-provider-registry-TQR32QBD.mjs.map → check-provider-registry-QUUL6JI2.mjs.map} +0 -0
  177. /package/dist/sdk/{chunk-UM7LGO2P.mjs.map → chunk-BBLBZVWC.mjs.map} +0 -0
  178. /package/dist/sdk/{chunk-TAOGXCWT.mjs.map → chunk-HMVD3AEC.mjs.map} +0 -0
  179. /package/dist/sdk/{config-BCYAVJ5S.mjs.map → config-BI5ZXG6D.mjs.map} +0 -0
  180. /package/dist/sdk/{config-TVU5RWR5.mjs.map → config-H5IOLBFA.mjs.map} +0 -0
  181. /package/dist/sdk/{email-frontend-6JU4L33L.mjs.map → email-frontend-JE7H3LBC.mjs.map} +0 -0
  182. /package/dist/sdk/{routing-NNQQSLWA.mjs.map → failure-condition-evaluator-7WHZUYDC.mjs.map} +0 -0
  183. /package/dist/sdk/{host-OJSMCLKK.mjs.map → host-UZESVA6Z.mjs.map} +0 -0
  184. /package/dist/sdk/{host-RM6UJEPP.mjs.map → host-YWXWROIE.mjs.map} +0 -0
  185. /package/dist/sdk/{schedule-tool-25C5NMDG.mjs.map → oauth2-token-cache-OS7WHLDI.mjs.map} +0 -0
  186. /package/dist/sdk/{schedule-tool-7IQI6MID.mjs.map → routing-PHHRW2C7.mjs.map} +0 -0
  187. /package/dist/sdk/{schedule-tool-handler-IYBNJLTV.mjs.map → routing-TYXT3STD.mjs.map} +0 -0
  188. /package/dist/sdk/{schedule-tool-handler-VWGTVSB6.mjs.map → schedule-tool-ITD445EO.mjs.map} +0 -0
  189. /package/dist/sdk/{workflow-check-provider-FOWDJUO3.mjs.map → schedule-tool-ODMIDBMT.mjs.map} +0 -0
  190. /package/dist/sdk/{workflow-check-provider-MRP3C2NC.mjs.map → schedule-tool-handler-5WPHFBOG.mjs.map} +0 -0
  191. /package/dist/sdk/{slack-frontend-K3TPGERM.mjs.map → slack-frontend-H7PX5GE7.mjs.map} +0 -0
  192. /package/dist/sdk/{teams-frontend-6RRW533K.mjs.map → teams-frontend-HCT4MTY4.mjs.map} +0 -0
  193. /package/dist/sdk/{telegram-frontend-5UA77YAT.mjs.map → telegram-frontend-YQRYDKPN.mjs.map} +0 -0
  194. /package/dist/sdk/{track-execution-3CHMGEPH.mjs.map → track-execution-BULXL2XD.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_task_live_updates,
3
3
  isFrontendLiveUpdatesEnabled
4
- } from "./chunk-SRU5TFNY.mjs";
4
+ } from "./chunk-D6O5SCPC.mjs";
5
5
  import "./chunk-IY5PQ5EN.mjs";
6
6
  import "./chunk-6E625R3C.mjs";
7
7
  import "./chunk-B2OUZAWY.mjs";
@@ -583,4 +583,4 @@ init_telegram_frontend();
583
583
  export {
584
584
  TelegramFrontend
585
585
  };
586
- //# sourceMappingURL=telegram-frontend-5UA77YAT.mjs.map
586
+ //# sourceMappingURL=telegram-frontend-YQRYDKPN.mjs.map
@@ -0,0 +1,31 @@
1
+ import {
2
+ __getOrCreateNdjsonPath,
3
+ _appendRunMarker,
4
+ addEvent,
5
+ emitImmediateSpan,
6
+ getTracer,
7
+ getVisorRunAttributes,
8
+ init_trace_helpers,
9
+ setSpanAttributes,
10
+ setSpanError,
11
+ withActiveSpan,
12
+ withVisorRun
13
+ } from "./chunk-ZCBVXBKG.mjs";
14
+ import "./chunk-6LQEODDA.mjs";
15
+ import "./chunk-FWWLD555.mjs";
16
+ import "./chunk-B2OUZAWY.mjs";
17
+ import "./chunk-J7LXIPZS.mjs";
18
+ init_trace_helpers();
19
+ export {
20
+ __getOrCreateNdjsonPath,
21
+ _appendRunMarker,
22
+ addEvent,
23
+ emitImmediateSpan,
24
+ getTracer,
25
+ getVisorRunAttributes,
26
+ setSpanAttributes,
27
+ setSpanError,
28
+ withActiveSpan,
29
+ withVisorRun
30
+ };
31
+ //# sourceMappingURL=trace-helpers-AM2QE5UZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,32 @@
1
+ import {
2
+ buildTraceHeaderLines,
3
+ buildTraceReport,
4
+ extractProbeTaskSummary,
5
+ fetchTraceSpans,
6
+ findTraceFile,
7
+ init_trace_serializer,
8
+ readTraceIdFromFile,
9
+ renderSpanTree,
10
+ renderSpanYaml,
11
+ renderTraceTree,
12
+ resolveTraceSpans,
13
+ serializeTraceForPrompt
14
+ } from "./chunk-BVEATT5V.mjs";
15
+ import "./chunk-6E625R3C.mjs";
16
+ import "./chunk-B2OUZAWY.mjs";
17
+ import "./chunk-J7LXIPZS.mjs";
18
+ init_trace_serializer();
19
+ export {
20
+ buildTraceHeaderLines,
21
+ buildTraceReport,
22
+ extractProbeTaskSummary,
23
+ fetchTraceSpans,
24
+ findTraceFile,
25
+ readTraceIdFromFile,
26
+ renderSpanTree,
27
+ renderSpanYaml,
28
+ renderTraceTree,
29
+ resolveTraceSpans,
30
+ serializeTraceForPrompt
31
+ };
32
+ //# sourceMappingURL=trace-serializer-4TOIAVQL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  TaskLiveUpdateManager,
3
3
  init_task_live_updates,
4
4
  resolveTaskLiveUpdatesConfig
5
- } from "./chunk-SRU5TFNY.mjs";
5
+ } from "./chunk-D6O5SCPC.mjs";
6
6
  import "./chunk-IY5PQ5EN.mjs";
7
7
  import {
8
8
  init_task_trace_resolution,
@@ -246,4 +246,4 @@ init_track_execution();
246
246
  export {
247
247
  trackExecution
248
248
  };
249
- //# sourceMappingURL=track-execution-3CHMGEPH.mjs.map
249
+ //# sourceMappingURL=track-execution-BULXL2XD.mjs.map
@@ -0,0 +1,320 @@
1
+ import {
2
+ TaskLiveUpdateManager,
3
+ init_task_live_updates,
4
+ resolveTaskLiveUpdatesConfig
5
+ } from "./chunk-YU3VR5SZ.mjs";
6
+ import "./chunk-BVEATT5V.mjs";
7
+ import {
8
+ init_task_trace_resolution,
9
+ resolveTaskTraceReference
10
+ } from "./chunk-2LLKENYD.mjs";
11
+ import {
12
+ init_user_facing_error,
13
+ summarizeUserFacingIssues
14
+ } from "./chunk-TL3ZTYFY.mjs";
15
+ import {
16
+ getInstanceId,
17
+ init_instance_id,
18
+ require_package
19
+ } from "./chunk-6LQEODDA.mjs";
20
+ import {
21
+ init_logger,
22
+ logger
23
+ } from "./chunk-6E625R3C.mjs";
24
+ import {
25
+ init_lazy_otel,
26
+ trace
27
+ } from "./chunk-B2OUZAWY.mjs";
28
+ import {
29
+ __esm
30
+ } from "./chunk-J7LXIPZS.mjs";
31
+
32
+ // src/agent-protocol/track-execution.ts
33
+ import crypto from "crypto";
34
+ import fs from "fs";
35
+ import path from "path";
36
+ function unwrapJsonText(text) {
37
+ if (text.startsWith("{") && text.includes('"text"')) {
38
+ try {
39
+ const parsed = JSON.parse(text);
40
+ if (typeof parsed?.text === "string" && parsed.text.trim().length > 0) {
41
+ return parsed.text.trim();
42
+ }
43
+ } catch {
44
+ try {
45
+ const sanitized = text.replace(
46
+ /[\x00-\x1F\x7F]/g,
47
+ (ch) => "\\u" + ch.charCodeAt(0).toString(16).padStart(4, "0")
48
+ );
49
+ const parsed = JSON.parse(sanitized);
50
+ if (typeof parsed?.text === "string" && parsed.text.trim().length > 0) {
51
+ return parsed.text.trim();
52
+ }
53
+ } catch {
54
+ }
55
+ }
56
+ }
57
+ return text;
58
+ }
59
+ function isToolOutput(text) {
60
+ if (/^[├│└─┬┘┤┼]{1,3}/.test(text)) return true;
61
+ if (text.startsWith("[task:")) return true;
62
+ return false;
63
+ }
64
+ function extractTextFromEntries(entries) {
65
+ for (let i = entries.length - 1; i >= 0; i--) {
66
+ const outputs = entries[i];
67
+ if (!Array.isArray(outputs)) continue;
68
+ for (let j = outputs.length - 1; j >= 0; j--) {
69
+ const text = outputs[j]?.text;
70
+ if (typeof text === "string" && text.trim().length > 0) {
71
+ return unwrapJsonText(text.trim());
72
+ }
73
+ }
74
+ }
75
+ return void 0;
76
+ }
77
+ function extractBestResponseText(history, allKeys) {
78
+ const topLevelEntries = Object.entries(history).filter(([key]) => !key.includes(".")).map(([, v]) => v);
79
+ const topLevelText = extractTextFromEntries(topLevelEntries);
80
+ if (topLevelText && !isToolOutput(topLevelText)) {
81
+ logger.info(
82
+ `[TaskTracking] Extracted responseText (${topLevelText.length} chars): "${topLevelText.substring(0, 100)}..."`
83
+ );
84
+ return topLevelText;
85
+ }
86
+ const genResponseKeys = allKeys.filter(
87
+ (k) => k.endsWith(".generate-response") || k === "generate-response"
88
+ );
89
+ if (genResponseKeys.length > 0) {
90
+ const genEntries = genResponseKeys.map((k) => history[k]);
91
+ const genText = extractTextFromEntries(genEntries);
92
+ if (genText && !isToolOutput(genText)) {
93
+ logger.info(
94
+ `[TaskTracking] Fallback to generate-response entry (${genText.length} chars): "${genText.substring(0, 100)}..."`
95
+ );
96
+ return genText;
97
+ }
98
+ }
99
+ if (topLevelText) {
100
+ logger.warn(
101
+ `[TaskTracking] Using tool output as responseText (${topLevelText.length} chars) \u2014 no better candidate found`
102
+ );
103
+ return topLevelText;
104
+ }
105
+ return "Execution completed";
106
+ }
107
+ function getPackageVersion() {
108
+ try {
109
+ return require_package()?.version || "dev";
110
+ } catch {
111
+ return "dev";
112
+ }
113
+ }
114
+ async function readTraceIdFromFallbackFile(traceFile) {
115
+ if (!traceFile || !fs.existsSync(traceFile)) return void 0;
116
+ try {
117
+ const { readTraceIdFromFile } = await import("./trace-serializer-4TOIAVQL.mjs");
118
+ return await readTraceIdFromFile(traceFile) || void 0;
119
+ } catch {
120
+ return void 0;
121
+ }
122
+ }
123
+ async function trackExecution(opts, executor) {
124
+ const { taskStore, source, configPath, metadata, messageText } = opts;
125
+ const configName = configPath ? path.basename(configPath, path.extname(configPath)) : void 0;
126
+ const workflowId = configName && opts.workflowId ? `${configName}#${opts.workflowId}` : opts.workflowId;
127
+ const requestMessage = {
128
+ message_id: crypto.randomUUID(),
129
+ role: "user",
130
+ parts: [{ text: messageText }]
131
+ };
132
+ const traceFile = process.env.VISOR_FALLBACK_TRACE_FILE || void 0;
133
+ const task = taskStore.createTask({
134
+ contextId: crypto.randomUUID(),
135
+ requestMessage,
136
+ workflowId,
137
+ requestMetadata: {
138
+ source,
139
+ instance_id: getInstanceId(),
140
+ visor_version: process.env.VISOR_VERSION || getPackageVersion(),
141
+ ...process.env.VISOR_COMMIT_SHORT ? { visor_commit: process.env.VISOR_COMMIT_SHORT } : {},
142
+ trace_id: trace.getActiveSpan()?.spanContext().traceId || void 0,
143
+ ...traceFile ? { trace_file: traceFile } : {},
144
+ ...metadata
145
+ }
146
+ });
147
+ const instanceId = getInstanceId();
148
+ return await logger.withTaskContext(task.id, async () => {
149
+ taskStore.updateTaskState(task.id, "working");
150
+ taskStore.claimTask(task.id, instanceId);
151
+ logger.info(
152
+ `[TaskTracking] Task ${task.id} started (source=${source}, workflow=${workflowId || "-"}, instance=${instanceId})`
153
+ );
154
+ const liveUpdateConfig = resolveTaskLiveUpdatesConfig(opts.liveUpdates?.config);
155
+ const initialTraceId = trace.getActiveSpan()?.spanContext().traceId || task.metadata?.trace_id;
156
+ if (initialTraceId && !task.metadata?.trace_id) {
157
+ try {
158
+ taskStore.updateMetadata(task.id, { trace_id: initialTraceId });
159
+ } catch {
160
+ }
161
+ }
162
+ const initialResolvedTrace = await resolveTaskTraceReference({
163
+ trace_id: initialTraceId || task.metadata?.trace_id,
164
+ trace_file: task.metadata?.trace_file
165
+ });
166
+ const liveUpdateManager = liveUpdateConfig && opts.liveUpdates?.sink ? new TaskLiveUpdateManager({
167
+ taskId: task.id,
168
+ requestText: messageText,
169
+ traceRef: initialResolvedTrace.primaryRef,
170
+ traceId: initialResolvedTrace.traceId,
171
+ includeTraceId: opts.liveUpdates?.includeTraceId === true,
172
+ sink: opts.liveUpdates.sink,
173
+ config: liveUpdateConfig,
174
+ resolveTraceState: () => {
175
+ let current;
176
+ try {
177
+ current = taskStore.getTask(task.id);
178
+ } catch {
179
+ return {
180
+ traceRef: initialResolvedTrace.primaryRef,
181
+ traceId: initialResolvedTrace.traceId
182
+ };
183
+ }
184
+ return {
185
+ traceRef: current?.metadata?.trace_file || current?.metadata?.trace_id || initialResolvedTrace.primaryRef,
186
+ traceId: current?.metadata?.trace_id
187
+ };
188
+ },
189
+ onPostedRef: (ref) => {
190
+ try {
191
+ taskStore.updateMetadata(task.id, ref);
192
+ } catch {
193
+ }
194
+ },
195
+ appendHistory: (text, stage) => {
196
+ try {
197
+ taskStore.appendHistory(task.id, {
198
+ message_id: crypto.randomUUID(),
199
+ role: "agent",
200
+ parts: [{ text }],
201
+ metadata: { kind: "task_live_update", stage, source }
202
+ });
203
+ } catch {
204
+ }
205
+ }
206
+ }) : null;
207
+ if (liveUpdateConfig && !opts.liveUpdates?.sink) {
208
+ logger.debug(
209
+ `[TaskTracking] Live updates requested for task ${task.id} but no sink is available for source=${source}`
210
+ );
211
+ } else if (liveUpdateManager) {
212
+ logger.info(`[TaskTracking] Live updates enabled for task ${task.id} (source=${source})`);
213
+ }
214
+ const HEARTBEAT_INTERVAL = 6e4;
215
+ const heartbeatTimer = setInterval(() => {
216
+ try {
217
+ taskStore.heartbeat(task.id);
218
+ } catch {
219
+ }
220
+ }, HEARTBEAT_INTERVAL);
221
+ try {
222
+ if (liveUpdateManager) {
223
+ await liveUpdateManager.start();
224
+ }
225
+ const result = await executor();
226
+ try {
227
+ const activeTraceId = trace.getActiveSpan()?.spanContext().traceId;
228
+ const persistedTraceId = (activeTraceId && activeTraceId !== "" ? activeTraceId : void 0) || await readTraceIdFromFallbackFile(traceFile);
229
+ if (persistedTraceId && !task.metadata?.trace_id) {
230
+ taskStore.updateMetadata(task.id, { trace_id: persistedTraceId });
231
+ }
232
+ } catch {
233
+ }
234
+ let responseText = "Execution completed";
235
+ try {
236
+ const history = result?.reviewSummary?.history;
237
+ if (history) {
238
+ const allKeys = Object.keys(history);
239
+ responseText = extractBestResponseText(history, allKeys);
240
+ }
241
+ if (responseText === "Execution completed") {
242
+ const issueSummary = summarizeUserFacingIssues(result?.reviewSummary?.issues);
243
+ if (issueSummary) {
244
+ responseText = issueSummary;
245
+ }
246
+ }
247
+ } catch {
248
+ }
249
+ const completedMsg = {
250
+ message_id: crypto.randomUUID(),
251
+ role: "agent",
252
+ parts: [{ text: responseText }]
253
+ };
254
+ try {
255
+ taskStore.updateTaskState(task.id, "completed", completedMsg);
256
+ logger.info(`[TaskTracking] Task ${task.id} completed`);
257
+ } catch (stateErr) {
258
+ logger.warn(
259
+ `[TaskTracking] Task ${task.id} completed but state transition failed: ${stateErr instanceof Error ? stateErr.message : stateErr}`
260
+ );
261
+ }
262
+ if (opts.autoEvaluate || process.env.VISOR_TASK_EVALUATE === "true") {
263
+ scheduleEvaluation(task.id, taskStore);
264
+ }
265
+ if (liveUpdateManager) {
266
+ await liveUpdateManager.complete(responseText);
267
+ }
268
+ return { task, result };
269
+ } catch (err) {
270
+ const errorText = err instanceof Error ? err.message : String(err);
271
+ const failMessage = {
272
+ message_id: crypto.randomUUID(),
273
+ role: "agent",
274
+ parts: [{ text: errorText }]
275
+ };
276
+ try {
277
+ taskStore.updateTaskState(task.id, "failed", failMessage);
278
+ logger.info(`[TaskTracking] Task ${task.id} failed: ${errorText}`);
279
+ } catch {
280
+ }
281
+ if (liveUpdateManager) {
282
+ await liveUpdateManager.fail(`:warning: ${errorText}`);
283
+ }
284
+ throw err;
285
+ } finally {
286
+ clearInterval(heartbeatTimer);
287
+ liveUpdateManager?.stop();
288
+ }
289
+ });
290
+ }
291
+ function scheduleEvaluation(taskId, taskStore) {
292
+ setTimeout(async () => {
293
+ await logger.withTaskContext(taskId, async () => {
294
+ try {
295
+ const { evaluateAndStore } = await import("./task-evaluator-4QG4CYQA.mjs");
296
+ await evaluateAndStore(taskId, taskStore);
297
+ logger.info(`[TaskEvaluator] Auto-evaluation completed for task ${taskId}`);
298
+ } catch (err) {
299
+ logger.warn(
300
+ `[TaskEvaluator] Auto-evaluation failed for task ${taskId}: ${err instanceof Error ? err.message : err}`
301
+ );
302
+ }
303
+ });
304
+ }, 5e3);
305
+ }
306
+ var init_track_execution = __esm({
307
+ "src/agent-protocol/track-execution.ts"() {
308
+ init_logger();
309
+ init_lazy_otel();
310
+ init_instance_id();
311
+ init_task_live_updates();
312
+ init_task_trace_resolution();
313
+ init_user_facing_error();
314
+ }
315
+ });
316
+ init_track_execution();
317
+ export {
318
+ trackExecution
319
+ };
320
+ //# sourceMappingURL=track-execution-VJJVJH6K.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';\nimport { summarizeUserFacingIssues } from '../utils/user-facing-error';\n\n/**\n * If `text` looks like a JSON object with a `.text` field, extract it.\n * Handles the edge case where the AI double-wraps its response as\n * `{\"text\":\"actual content\"}` instead of returning the string directly.\n */\nfunction unwrapJsonText(text: string): string {\n if (text.startsWith('{') && text.includes('\"text\"')) {\n try {\n const parsed = JSON.parse(text);\n if (typeof parsed?.text === 'string' && parsed.text.trim().length > 0) {\n return parsed.text.trim();\n }\n } catch {\n // JSON.parse fails when the string contains unescaped control characters\n // (newlines, tabs) inside JSON string values — common with markdown content.\n // Escape them and retry.\n try {\n const sanitized = text.replace(\n /[\\x00-\\x1F\\x7F]/g,\n ch => '\\\\u' + ch.charCodeAt(0).toString(16).padStart(4, '0')\n );\n const parsed = JSON.parse(sanitized);\n if (typeof parsed?.text === 'string' && parsed.text.trim().length > 0) {\n return parsed.text.trim();\n }\n } catch {\n // genuine malformed JSON — give up\n }\n }\n }\n return text;\n}\n\n/**\n * Detect text that is ProbeAgent tool/task management output rather than\n * the AI's actual response. This output leaks into .text when answer()\n * concatenates tool output with the response.\n */\nfunction isToolOutput(text: string): boolean {\n // ProbeAgent task tool tree output (├─┬, │, └─)\n if (/^[├│└─┬┘┤┼]{1,3}/.test(text)) return true;\n // Task tool markers\n if (text.startsWith('[task:')) return true;\n return false;\n}\n\n/**\n * Extract the last .text from a set of history entries (array of output arrays).\n * Returns undefined if no text found.\n */\nfunction extractTextFromEntries(entries: unknown[][]): string | undefined {\n for (let i = entries.length - 1; i >= 0; i--) {\n const outputs = entries[i];\n if (!Array.isArray(outputs)) continue;\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 return unwrapJsonText(text.trim());\n }\n }\n }\n return undefined;\n}\n\n/**\n * Multi-pass extraction: prefer top-level entries, but fall back to\n * generate-response entries if the top-level text is tool output.\n */\nfunction extractBestResponseText(history: Record<string, unknown[]>, allKeys: string[]): string {\n // Pass 1: top-level entries (no dots) — the workflow's computed output\n const topLevelEntries = Object.entries(history)\n .filter(([key]) => !key.includes('.'))\n .map(([, v]) => v);\n const topLevelText = extractTextFromEntries(topLevelEntries);\n\n if (topLevelText && !isToolOutput(topLevelText)) {\n logger.info(\n `[TaskTracking] Extracted responseText (${topLevelText.length} chars): \"${topLevelText.substring(0, 100)}...\"`\n );\n return topLevelText;\n }\n\n // Pass 2: look for generate-response entries specifically — the AI step\n // that produces the final user-facing response in assistant workflows.\n const genResponseKeys = allKeys.filter(\n k => k.endsWith('.generate-response') || k === 'generate-response'\n );\n if (genResponseKeys.length > 0) {\n const genEntries = genResponseKeys.map(k => history[k]);\n const genText = extractTextFromEntries(genEntries);\n if (genText && !isToolOutput(genText)) {\n logger.info(\n `[TaskTracking] Fallback to generate-response entry (${genText.length} chars): \"${genText.substring(0, 100)}...\"`\n );\n return genText;\n }\n }\n\n // Pass 3: if top-level text exists but was tool output, use it anyway\n // as a last resort — better than \"Execution completed\"\n if (topLevelText) {\n logger.warn(\n `[TaskTracking] Using tool output as responseText (${topLevelText.length} chars) — no better candidate found`\n );\n return topLevelText;\n }\n\n return 'Execution completed';\n}\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_file as string | undefined) ||\n (current?.metadata?.trace_id 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 response text via multi-pass extraction.\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 allKeys = Object.keys(history);\n responseText = extractBestResponseText(history, allKeys);\n }\n if (responseText === 'Execution completed') {\n const issueSummary = summarizeUserFacingIssues((result as any)?.reviewSummary?.issues);\n if (issueSummary) {\n responseText = issueSummary;\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":[]}
@@ -0,0 +1,17 @@
1
+ import {
2
+ UtcpCheckProvider,
3
+ init_utcp_check_provider
4
+ } from "./chunk-HW4MPCOW.mjs";
5
+ import "./chunk-7QI6F66G.mjs";
6
+ import "./chunk-4HIWZA6M.mjs";
7
+ import "./chunk-25IC7KXZ.mjs";
8
+ import "./chunk-LW3INISN.mjs";
9
+ import "./chunk-4MHHELVZ.mjs";
10
+ import "./chunk-6E625R3C.mjs";
11
+ import "./chunk-B2OUZAWY.mjs";
12
+ import "./chunk-J7LXIPZS.mjs";
13
+ init_utcp_check_provider();
14
+ export {
15
+ UtcpCheckProvider
16
+ };
17
+ //# sourceMappingURL=utcp-check-provider-WDTSQ7DZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}