@probelabs/visor 0.1.182-ee → 0.1.183-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 (205) hide show
  1. package/defaults/assistant.yaml +2 -1
  2. package/defaults/code-talk.yaml +6 -0
  3. package/defaults/skills/task-progress.yaml +39 -0
  4. package/dist/agent-protocol/task-evaluator.d.ts +2 -1
  5. package/dist/agent-protocol/task-evaluator.d.ts.map +1 -1
  6. package/dist/agent-protocol/task-progress-tool.d.ts +29 -0
  7. package/dist/agent-protocol/task-progress-tool.d.ts.map +1 -0
  8. package/dist/agent-protocol/task-store.d.ts +8 -0
  9. package/dist/agent-protocol/task-store.d.ts.map +1 -1
  10. package/dist/agent-protocol/tasks-cli-handler.d.ts.map +1 -1
  11. package/dist/agent-protocol/trace-serializer.d.ts +5 -2
  12. package/dist/agent-protocol/trace-serializer.d.ts.map +1 -1
  13. package/dist/agent-protocol/track-execution.d.ts +1 -1
  14. package/dist/agent-protocol/track-execution.d.ts.map +1 -1
  15. package/dist/ai-review-service.d.ts.map +1 -1
  16. package/dist/cli-main.d.ts.map +1 -1
  17. package/dist/debug-visualizer/trace-reader.d.ts.map +1 -1
  18. package/dist/defaults/assistant.yaml +2 -1
  19. package/dist/defaults/code-talk.yaml +6 -0
  20. package/dist/defaults/skills/task-progress.yaml +39 -0
  21. package/dist/docs/telemetry-live-spans-plan.md +510 -0
  22. package/dist/generated/config-schema.json +43 -6
  23. package/dist/index.js +3545 -701
  24. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  25. package/dist/providers/git-checkout-provider.d.ts.map +1 -1
  26. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
  27. package/dist/reviewer.d.ts +2 -0
  28. package/dist/reviewer.d.ts.map +1 -1
  29. package/dist/runners/process-cli-handler.d.ts +2 -0
  30. package/dist/runners/process-cli-handler.d.ts.map +1 -0
  31. package/dist/runners/process-discovery.d.ts +29 -0
  32. package/dist/runners/process-discovery.d.ts.map +1 -0
  33. package/dist/sandbox/check-runner.d.ts.map +1 -1
  34. package/dist/sandbox/sandbox-telemetry.d.ts +7 -0
  35. package/dist/sandbox/sandbox-telemetry.d.ts.map +1 -1
  36. package/dist/sandbox/trace-ingester.d.ts +28 -15
  37. package/dist/sandbox/trace-ingester.d.ts.map +1 -1
  38. package/dist/scheduler/schedule-tool.d.ts +5 -0
  39. package/dist/scheduler/schedule-tool.d.ts.map +1 -1
  40. package/dist/sdk/{a2a-frontend-MU5EO2HZ.mjs → a2a-frontend-5YDHFQXD.mjs} +47 -8
  41. package/dist/sdk/{a2a-frontend-MU5EO2HZ.mjs.map → a2a-frontend-5YDHFQXD.mjs.map} +1 -1
  42. package/dist/sdk/{a2a-frontend-4LP3MLTS.mjs → a2a-frontend-6LWBIPMS.mjs} +19 -3
  43. package/dist/sdk/a2a-frontend-6LWBIPMS.mjs.map +1 -0
  44. package/dist/sdk/check-provider-registry-WSEVHJEV.mjs +31 -0
  45. package/dist/sdk/{check-provider-registry-I4BCWKRU.mjs → check-provider-registry-YRADEEQY.mjs} +6 -6
  46. package/dist/sdk/chunk-4BN2XI4X.mjs +459 -0
  47. package/dist/sdk/chunk-4BN2XI4X.mjs.map +1 -0
  48. package/dist/sdk/chunk-54KOAC4W.mjs +665 -0
  49. package/dist/sdk/chunk-54KOAC4W.mjs.map +1 -0
  50. package/dist/sdk/chunk-6C3R6E42.mjs +1700 -0
  51. package/dist/sdk/chunk-6C3R6E42.mjs.map +1 -0
  52. package/dist/sdk/{chunk-4I3TJ7UJ.mjs → chunk-7W5QCO4Y.mjs} +47 -10
  53. package/dist/sdk/chunk-7W5QCO4Y.mjs.map +1 -0
  54. package/dist/sdk/chunk-B2OUZAWY.mjs +237 -0
  55. package/dist/sdk/chunk-B2OUZAWY.mjs.map +1 -0
  56. package/dist/sdk/chunk-FWWLD555.mjs +244 -0
  57. package/dist/sdk/chunk-FWWLD555.mjs.map +1 -0
  58. package/dist/sdk/{chunk-QXT47ZHR.mjs → chunk-G7GSN3SK.mjs} +2 -2
  59. package/dist/sdk/{chunk-QXT47ZHR.mjs.map → chunk-G7GSN3SK.mjs.map} +1 -1
  60. package/dist/sdk/{chunk-DHETLQIX.mjs → chunk-GA2TYKSR.mjs} +5 -5
  61. package/dist/sdk/{chunk-6DPPP7LD.mjs → chunk-IDL3AA3G.mjs} +203 -42
  62. package/dist/sdk/chunk-IDL3AA3G.mjs.map +1 -0
  63. package/dist/sdk/chunk-MEB2TTIE.mjs +157 -0
  64. package/dist/sdk/chunk-MEB2TTIE.mjs.map +1 -0
  65. package/dist/sdk/{chunk-3JFK6KCD.mjs → chunk-MFXPJUUE.mjs} +150 -280
  66. package/dist/sdk/chunk-MFXPJUUE.mjs.map +1 -0
  67. package/dist/sdk/{chunk-KBGQJKIZ.mjs → chunk-NPSLGKXB.mjs} +3 -3
  68. package/dist/sdk/chunk-P2K4VOMU.mjs +825 -0
  69. package/dist/sdk/chunk-P2K4VOMU.mjs.map +1 -0
  70. package/dist/sdk/chunk-RI4ONH5X.mjs +482 -0
  71. package/dist/sdk/chunk-RI4ONH5X.mjs.map +1 -0
  72. package/dist/sdk/chunk-S5FSRHMY.mjs +139 -0
  73. package/dist/sdk/chunk-S5FSRHMY.mjs.map +1 -0
  74. package/dist/sdk/{chunk-7ERVRLDV.mjs → chunk-TFUQ2D5L.mjs} +13 -2
  75. package/dist/sdk/chunk-TFUQ2D5L.mjs.map +1 -0
  76. package/dist/sdk/{chunk-TQQNSHQV.mjs → chunk-UXB4XWEE.mjs} +1044 -179
  77. package/dist/sdk/chunk-UXB4XWEE.mjs.map +1 -0
  78. package/dist/sdk/{chunk-U6K5SK7X.mjs → chunk-V45TITKX.mjs} +2 -2
  79. package/dist/sdk/{chunk-ANUT54HW.mjs → chunk-WKLJ57WF.mjs} +6 -6
  80. package/dist/sdk/chunk-XOAEKFKB.mjs +1150 -0
  81. package/dist/sdk/chunk-XOAEKFKB.mjs.map +1 -0
  82. package/dist/sdk/chunk-ZPYODGYA.mjs +251 -0
  83. package/dist/sdk/chunk-ZPYODGYA.mjs.map +1 -0
  84. package/dist/sdk/command-executor-YNJOS77A.mjs +14 -0
  85. package/dist/sdk/{config-2STD74CJ.mjs → config-PCP6O6Y6.mjs} +4 -4
  86. package/dist/sdk/{failure-condition-evaluator-FFWJRAEQ.mjs → failure-condition-evaluator-H3PBFBYT.mjs} +4 -4
  87. package/dist/sdk/failure-condition-evaluator-IRFKTYZD.mjs +18 -0
  88. package/dist/sdk/github-auth-BJQBLK2V.mjs +196 -0
  89. package/dist/sdk/github-auth-BJQBLK2V.mjs.map +1 -0
  90. package/dist/sdk/{github-frontend-L3F5JXPJ.mjs → github-frontend-DECYOBRN.mjs} +8 -8
  91. package/dist/sdk/{github-frontend-KGV2R5Z6.mjs → github-frontend-TZRBOQCN.mjs} +4 -4
  92. package/dist/sdk/{host-QBJ7TOWG.mjs → host-CFM2ASDI.mjs} +4 -4
  93. package/dist/sdk/{host-X5ZZCEWN.mjs → host-T4LNVU2H.mjs} +3 -3
  94. package/dist/sdk/{knex-store-QCEW4I4R.mjs → knex-store-OEWSZEBY.mjs} +3 -3
  95. package/dist/sdk/lazy-otel-5RDTVS5L.mjs +24 -0
  96. package/dist/sdk/liquid-extensions-E3AKRX7P.mjs +25 -0
  97. package/dist/sdk/{loader-ZNKKJEZ3.mjs → loader-WRGI244P.mjs} +5 -5
  98. package/dist/sdk/memory-store-OHUIXCWJ.mjs +12 -0
  99. package/dist/sdk/metrics-MYUPQBBV.mjs +41 -0
  100. package/dist/sdk/{opa-policy-engine-QCSSIMUF.mjs → opa-policy-engine-IVMCGVNA.mjs} +3 -3
  101. package/dist/sdk/prompt-state-LN57DQF3.mjs +16 -0
  102. package/dist/sdk/renderer-schema-BT2IXMLW.mjs +51 -0
  103. package/dist/sdk/renderer-schema-BT2IXMLW.mjs.map +1 -0
  104. package/dist/sdk/routing-H2PQ57OA.mjs +26 -0
  105. package/dist/sdk/{routing-CVQT4KHX.mjs → routing-JMZ7HDCC.mjs} +5 -5
  106. package/dist/sdk/schedule-tool-2DPNSU63.mjs +37 -0
  107. package/dist/sdk/{schedule-tool-AECLFHSY.mjs → schedule-tool-4M45RK3E.mjs} +6 -6
  108. package/dist/sdk/{schedule-tool-handler-6QLZRTQA.mjs → schedule-tool-handler-KLHE2SOW.mjs} +6 -6
  109. package/dist/sdk/schedule-tool-handler-KLHE2SOW.mjs.map +1 -0
  110. package/dist/sdk/{schedule-tool-handler-J4NUETJ6.mjs → schedule-tool-handler-NBEO46RV.mjs} +16 -16
  111. package/dist/sdk/schedule-tool-handler-NBEO46RV.mjs.map +1 -0
  112. package/dist/sdk/sdk.d.mts +2 -0
  113. package/dist/sdk/sdk.d.ts +2 -0
  114. package/dist/sdk/sdk.js +3125 -666
  115. package/dist/sdk/sdk.js.map +1 -1
  116. package/dist/sdk/sdk.mjs +15 -15
  117. package/dist/sdk/slack-frontend-DF5VL4OF.mjs +929 -0
  118. package/dist/sdk/slack-frontend-DF5VL4OF.mjs.map +1 -0
  119. package/dist/sdk/{task-evaluator-HLNXKKVV.mjs → task-evaluator-GQYDOSGT.mjs} +138 -24
  120. package/dist/sdk/task-evaluator-GQYDOSGT.mjs.map +1 -0
  121. package/dist/sdk/task-evaluator-OVMG7S56.mjs +263 -0
  122. package/dist/sdk/task-evaluator-OVMG7S56.mjs.map +1 -0
  123. package/dist/sdk/{trace-helpers-WJXYVV4S.mjs → trace-helpers-26ZCAE2V.mjs} +7 -5
  124. package/dist/sdk/trace-helpers-26ZCAE2V.mjs.map +1 -0
  125. package/dist/sdk/{trace-helpers-3FFAI7X3.mjs → trace-helpers-XV5GAX5L.mjs} +3 -3
  126. package/dist/sdk/trace-helpers-XV5GAX5L.mjs.map +1 -0
  127. package/dist/sdk/{trace-reader-ZY77OFNM.mjs → trace-reader-OVE4DL2D.mjs} +6 -2
  128. package/dist/sdk/trace-reader-OVE4DL2D.mjs.map +1 -0
  129. package/dist/sdk/trace-serializer-KKBJHM7J.mjs +24 -0
  130. package/dist/sdk/trace-serializer-KKBJHM7J.mjs.map +1 -0
  131. package/dist/sdk/{track-execution-AMQQNXKE.mjs → track-execution-3EC24C2X.mjs} +68 -7
  132. package/dist/sdk/track-execution-3EC24C2X.mjs.map +1 -0
  133. package/dist/sdk/{track-execution-MKIQXP2C.mjs → track-execution-66RLL6QT.mjs} +10 -3
  134. package/dist/sdk/track-execution-66RLL6QT.mjs.map +1 -0
  135. package/dist/sdk/utcp-check-provider-WI3QZ3W6.mjs +16 -0
  136. package/dist/sdk/utcp-check-provider-WI3QZ3W6.mjs.map +1 -0
  137. package/dist/sdk/workflow-check-provider-X2UREEH7.mjs +31 -0
  138. package/dist/sdk/workflow-check-provider-X2UREEH7.mjs.map +1 -0
  139. package/dist/sdk/{workflow-check-provider-EXMC6JIS.mjs → workflow-check-provider-YXALZNAQ.mjs} +6 -6
  140. package/dist/sdk/workflow-check-provider-YXALZNAQ.mjs.map +1 -0
  141. package/dist/sdk/workflow-registry-YCZ3FCJC.mjs +12 -0
  142. package/dist/sdk/workflow-registry-YCZ3FCJC.mjs.map +1 -0
  143. package/dist/slack/socket-runner.d.ts.map +1 -1
  144. package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -1
  145. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
  146. package/dist/telemetry/fallback-ndjson.d.ts +21 -0
  147. package/dist/telemetry/fallback-ndjson.d.ts.map +1 -1
  148. package/dist/telemetry/lazy-otel.d.ts +2 -0
  149. package/dist/telemetry/lazy-otel.d.ts.map +1 -1
  150. package/dist/telemetry/opentelemetry.d.ts +5 -0
  151. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  152. package/dist/telemetry/trace-helpers.d.ts +10 -0
  153. package/dist/telemetry/trace-helpers.d.ts.map +1 -1
  154. package/dist/test-runner/conversation-sugar.d.ts +7 -0
  155. package/dist/test-runner/conversation-sugar.d.ts.map +1 -1
  156. package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
  157. package/dist/test-runner/index.d.ts.map +1 -1
  158. package/dist/test-runner/validator.d.ts.map +1 -1
  159. package/dist/types/git-checkout.d.ts +2 -0
  160. package/dist/types/git-checkout.d.ts.map +1 -1
  161. package/dist/utils/script-tool-environment.d.ts.map +1 -1
  162. package/package.json +2 -2
  163. package/dist/sdk/a2a-frontend-4LP3MLTS.mjs.map +0 -1
  164. package/dist/sdk/check-provider-registry-RRWCXSTG.mjs +0 -31
  165. package/dist/sdk/chunk-3JFK6KCD.mjs.map +0 -1
  166. package/dist/sdk/chunk-4I3TJ7UJ.mjs.map +0 -1
  167. package/dist/sdk/chunk-6DPPP7LD.mjs.map +0 -1
  168. package/dist/sdk/chunk-6VVXKXTI.mjs +0 -164
  169. package/dist/sdk/chunk-6VVXKXTI.mjs.map +0 -1
  170. package/dist/sdk/chunk-7ERVRLDV.mjs.map +0 -1
  171. package/dist/sdk/chunk-TQQNSHQV.mjs.map +0 -1
  172. package/dist/sdk/failure-condition-evaluator-5DZYMCGW.mjs +0 -18
  173. package/dist/sdk/routing-XALEDC2G.mjs +0 -26
  174. package/dist/sdk/schedule-tool-Z6QYL2B3.mjs +0 -37
  175. package/dist/sdk/task-evaluator-HLNXKKVV.mjs.map +0 -1
  176. package/dist/sdk/trace-reader-ZY77OFNM.mjs.map +0 -1
  177. package/dist/sdk/track-execution-AMQQNXKE.mjs.map +0 -1
  178. package/dist/sdk/track-execution-MKIQXP2C.mjs.map +0 -1
  179. package/dist/sdk/workflow-check-provider-VKYGI5GK.mjs +0 -31
  180. /package/dist/sdk/{check-provider-registry-I4BCWKRU.mjs.map → check-provider-registry-WSEVHJEV.mjs.map} +0 -0
  181. /package/dist/sdk/{check-provider-registry-RRWCXSTG.mjs.map → check-provider-registry-YRADEEQY.mjs.map} +0 -0
  182. /package/dist/sdk/{chunk-DHETLQIX.mjs.map → chunk-GA2TYKSR.mjs.map} +0 -0
  183. /package/dist/sdk/{chunk-ANUT54HW.mjs.map → chunk-NPSLGKXB.mjs.map} +0 -0
  184. /package/dist/sdk/{chunk-U6K5SK7X.mjs.map → chunk-V45TITKX.mjs.map} +0 -0
  185. /package/dist/sdk/{chunk-KBGQJKIZ.mjs.map → chunk-WKLJ57WF.mjs.map} +0 -0
  186. /package/dist/sdk/{config-2STD74CJ.mjs.map → command-executor-YNJOS77A.mjs.map} +0 -0
  187. /package/dist/sdk/{failure-condition-evaluator-5DZYMCGW.mjs.map → config-PCP6O6Y6.mjs.map} +0 -0
  188. /package/dist/sdk/{failure-condition-evaluator-FFWJRAEQ.mjs.map → failure-condition-evaluator-H3PBFBYT.mjs.map} +0 -0
  189. /package/dist/sdk/{routing-CVQT4KHX.mjs.map → failure-condition-evaluator-IRFKTYZD.mjs.map} +0 -0
  190. /package/dist/sdk/{github-frontend-KGV2R5Z6.mjs.map → github-frontend-DECYOBRN.mjs.map} +0 -0
  191. /package/dist/sdk/{github-frontend-L3F5JXPJ.mjs.map → github-frontend-TZRBOQCN.mjs.map} +0 -0
  192. /package/dist/sdk/{host-QBJ7TOWG.mjs.map → host-CFM2ASDI.mjs.map} +0 -0
  193. /package/dist/sdk/{host-X5ZZCEWN.mjs.map → host-T4LNVU2H.mjs.map} +0 -0
  194. /package/dist/sdk/{knex-store-QCEW4I4R.mjs.map → knex-store-OEWSZEBY.mjs.map} +0 -0
  195. /package/dist/sdk/{routing-XALEDC2G.mjs.map → lazy-otel-5RDTVS5L.mjs.map} +0 -0
  196. /package/dist/sdk/{schedule-tool-AECLFHSY.mjs.map → liquid-extensions-E3AKRX7P.mjs.map} +0 -0
  197. /package/dist/sdk/{loader-ZNKKJEZ3.mjs.map → loader-WRGI244P.mjs.map} +0 -0
  198. /package/dist/sdk/{schedule-tool-Z6QYL2B3.mjs.map → memory-store-OHUIXCWJ.mjs.map} +0 -0
  199. /package/dist/sdk/{schedule-tool-handler-6QLZRTQA.mjs.map → metrics-MYUPQBBV.mjs.map} +0 -0
  200. /package/dist/sdk/{opa-policy-engine-QCSSIMUF.mjs.map → opa-policy-engine-IVMCGVNA.mjs.map} +0 -0
  201. /package/dist/sdk/{schedule-tool-handler-J4NUETJ6.mjs.map → prompt-state-LN57DQF3.mjs.map} +0 -0
  202. /package/dist/sdk/{trace-helpers-3FFAI7X3.mjs.map → routing-H2PQ57OA.mjs.map} +0 -0
  203. /package/dist/sdk/{trace-helpers-WJXYVV4S.mjs.map → routing-JMZ7HDCC.mjs.map} +0 -0
  204. /package/dist/sdk/{workflow-check-provider-EXMC6JIS.mjs.map → schedule-tool-2DPNSU63.mjs.map} +0 -0
  205. /package/dist/sdk/{workflow-check-provider-VKYGI5GK.mjs.map → schedule-tool-4M45RK3E.mjs.map} +0 -0
@@ -2,6 +2,7 @@ import {
2
2
  __getOrCreateNdjsonPath,
3
3
  _appendRunMarker,
4
4
  addEvent,
5
+ emitImmediateSpan,
5
6
  getTracer,
6
7
  getVisorRunAttributes,
7
8
  init_trace_helpers,
@@ -9,16 +10,17 @@ import {
9
10
  setSpanError,
10
11
  withActiveSpan,
11
12
  withVisorRun
12
- } from "./chunk-7ERVRLDV.mjs";
13
- import "./chunk-QXT47ZHR.mjs";
14
- import "./chunk-34QX63WK.mjs";
15
- import "./chunk-UCMJJ3IM.mjs";
13
+ } from "./chunk-XOAEKFKB.mjs";
14
+ import "./chunk-G7GSN3SK.mjs";
15
+ import "./chunk-FWWLD555.mjs";
16
+ import "./chunk-B2OUZAWY.mjs";
16
17
  import "./chunk-J7LXIPZS.mjs";
17
18
  init_trace_helpers();
18
19
  export {
19
20
  __getOrCreateNdjsonPath,
20
21
  _appendRunMarker,
21
22
  addEvent,
23
+ emitImmediateSpan,
22
24
  getTracer,
23
25
  getVisorRunAttributes,
24
26
  setSpanAttributes,
@@ -26,4 +28,4 @@ export {
26
28
  withActiveSpan,
27
29
  withVisorRun
28
30
  };
29
- //# sourceMappingURL=trace-helpers-WJXYVV4S.mjs.map
31
+ //# sourceMappingURL=trace-helpers-26ZCAE2V.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -9,8 +9,8 @@ import {
9
9
  setSpanError,
10
10
  withActiveSpan,
11
11
  withVisorRun
12
- } from "./chunk-3JFK6KCD.mjs";
13
- import "./chunk-6VVXKXTI.mjs";
12
+ } from "./chunk-TFUQ2D5L.mjs";
13
+ import "./chunk-MFXPJUUE.mjs";
14
14
  import "./chunk-34QX63WK.mjs";
15
15
  import "./chunk-UCMJJ3IM.mjs";
16
16
  import "./chunk-J7LXIPZS.mjs";
@@ -26,4 +26,4 @@ export {
26
26
  withActiveSpan,
27
27
  withVisorRun
28
28
  };
29
- //# sourceMappingURL=trace-helpers-3FFAI7X3.mjs.map
29
+ //# sourceMappingURL=trace-helpers-XV5GAX5L.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -91,6 +91,7 @@ function buildExecutionTree(spans) {
91
91
  nodeMap.set(span.spanId, node);
92
92
  }
93
93
  let rootNode;
94
+ const orphans = [];
94
95
  for (const span of spans) {
95
96
  const node = nodeMap.get(span.spanId);
96
97
  if (!span.parentSpanId) {
@@ -100,7 +101,7 @@ function buildExecutionTree(spans) {
100
101
  if (parent) {
101
102
  parent.children.push(node);
102
103
  } else {
103
- console.warn(`[trace-reader] Orphaned span: ${span.spanId} (parent: ${span.parentSpanId})`);
104
+ orphans.push(node);
104
105
  }
105
106
  }
106
107
  }
@@ -116,6 +117,9 @@ function buildExecutionTree(spans) {
116
117
  state: {}
117
118
  };
118
119
  }
120
+ if (orphans.length > 0 && rootNode) {
121
+ rootNode.children.push(...orphans);
122
+ }
119
123
  return rootNode;
120
124
  }
121
125
  function createExecutionNode(span) {
@@ -263,4 +267,4 @@ export {
263
267
  extractStateSnapshots,
264
268
  parseNDJSONTrace
265
269
  };
266
- //# sourceMappingURL=trace-reader-ZY77OFNM.mjs.map
270
+ //# sourceMappingURL=trace-reader-OVE4DL2D.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/debug-visualizer/trace-reader.ts"],"sourcesContent":["/**\n * Trace File Reader & Processor\n *\n * Reads OpenTelemetry NDJSON trace files and reconstructs execution tree structure\n * for the Debug Visualizer.\n *\n * Milestone 2: Trace File Reader\n */\n\nimport * as fs from 'fs';\nimport * as readline from 'readline';\n\n// ============================================================================\n// Core Data Structures\n// ============================================================================\n\n/**\n * OTEL span event with attributes\n */\nexport interface SpanEvent {\n name: string;\n time: [number, number]; // [seconds, nanoseconds]\n timestamp?: string; // ISO timestamp for convenience\n attributes?: Record<string, any>;\n}\n\n/**\n * Processed OTEL span with clean structure\n */\nexport interface ProcessedSpan {\n traceId: string;\n spanId: string;\n parentSpanId?: string;\n name: string;\n startTime: [number, number]; // [seconds, nanoseconds]\n endTime: [number, number]; // [seconds, nanoseconds]\n duration: number; // milliseconds\n attributes: Record<string, any>;\n events: SpanEvent[];\n status: 'ok' | 'error';\n}\n\n/**\n * Hierarchical execution tree node\n */\nexport interface ExecutionNode {\n checkId: string;\n type: string; // 'run', 'check', 'provider'\n status: 'pending' | 'running' | 'completed' | 'error' | 'skipped';\n children: ExecutionNode[];\n span: ProcessedSpan;\n state: {\n inputContext?: any;\n output?: any;\n errors?: string[];\n metadata?: Record<string, any>;\n };\n}\n\n/**\n * State snapshot for time-travel debugging\n */\nexport interface StateSnapshot {\n checkId: string;\n timestamp: string;\n timestampNanos: [number, number];\n outputs: Record<string, any>;\n memory: Record<string, any>;\n}\n\n/**\n * Timeline event for visualization\n */\nexport interface TimelineEvent {\n type: 'check.started' | 'check.completed' | 'check.failed' | 'state.snapshot' | 'event';\n checkId?: string;\n timestamp: string;\n timestampNanos: [number, number];\n duration?: number;\n status?: string;\n metadata?: Record<string, any>;\n}\n\n/**\n * Complete parsed execution trace\n */\nexport interface ExecutionTrace {\n runId: string;\n traceId: string;\n spans: ProcessedSpan[];\n tree: ExecutionNode;\n timeline: TimelineEvent[];\n snapshots: StateSnapshot[];\n metadata: {\n startTime: string;\n endTime: string;\n duration: number; // milliseconds\n totalSpans: number;\n totalSnapshots: number;\n };\n}\n\n// ============================================================================\n// NDJSON Parser\n// ============================================================================\n\n/**\n * Parse NDJSON trace file and return structured execution trace\n *\n * @param filePath - Path to NDJSON trace file\n * @returns Parsed execution trace with tree, timeline, and snapshots\n */\nexport async function parseNDJSONTrace(filePath: string): Promise<ExecutionTrace> {\n const spans: ProcessedSpan[] = [];\n let lineNumber = 0;\n\n // Read file line by line\n const fileStream = fs.createReadStream(filePath);\n const rl = readline.createInterface({\n input: fileStream,\n crlfDelay: Infinity,\n });\n\n for await (const line of rl) {\n lineNumber++;\n\n // Skip empty lines\n if (!line.trim()) {\n continue;\n }\n\n try {\n const rawSpan = JSON.parse(line);\n const processedSpan = processRawSpan(rawSpan);\n spans.push(processedSpan);\n } catch (error) {\n console.warn(`[trace-reader] Malformed JSON at line ${lineNumber}: ${error}`);\n // Continue parsing remaining lines\n }\n }\n\n if (spans.length === 0) {\n throw new Error('No valid spans found in trace file');\n }\n\n // Build execution tree\n const tree = buildExecutionTree(spans);\n\n // Extract state snapshots\n const snapshots = extractStateSnapshots(spans);\n\n // Compute timeline\n const timeline = computeTimeline(spans);\n\n // Calculate metadata\n const sortedSpans = [...spans].sort((a, b) => compareTimeValues(a.startTime, b.startTime));\n const firstSpan = sortedSpans[0];\n const lastSpan = sortedSpans[sortedSpans.length - 1];\n\n const startTimeMs = timeValueToMillis(firstSpan.startTime);\n const endTimeMs = timeValueToMillis(lastSpan.endTime);\n\n return {\n runId: tree.checkId,\n traceId: firstSpan.traceId,\n spans,\n tree,\n timeline,\n snapshots,\n metadata: {\n startTime: timeValueToISO(firstSpan.startTime),\n endTime: timeValueToISO(lastSpan.endTime),\n duration: endTimeMs - startTimeMs,\n totalSpans: spans.length,\n totalSnapshots: snapshots.length,\n },\n };\n}\n\n/**\n * Process raw OTEL span into clean structure\n */\nfunction processRawSpan(rawSpan: any): ProcessedSpan {\n // Extract span IDs\n const traceId = rawSpan.traceId || '';\n const spanId = rawSpan.spanId || '';\n const parentSpanId = rawSpan.parentSpanId || undefined;\n\n // Extract name\n const name = rawSpan.name || 'unknown';\n\n // Extract times\n const startTime = rawSpan.startTime || [0, 0];\n const endTime = rawSpan.endTime || rawSpan.startTime || [0, 0];\n\n // Calculate duration in milliseconds\n const startMs = timeValueToMillis(startTime);\n const endMs = timeValueToMillis(endTime);\n const duration = endMs - startMs;\n\n // Extract attributes\n const attributes = rawSpan.attributes || {};\n\n // Extract events\n const events: SpanEvent[] = (rawSpan.events || []).map((evt: any) => ({\n name: evt.name || 'unknown',\n time: evt.time || [0, 0],\n timestamp: evt.timestamp || timeValueToISO(evt.time || [0, 0]),\n attributes: evt.attributes || {},\n }));\n\n // Determine status\n const status = rawSpan.status?.code === 2 ? 'error' : 'ok';\n\n return {\n traceId,\n spanId,\n parentSpanId,\n name,\n startTime,\n endTime,\n duration,\n attributes,\n events,\n status,\n };\n}\n\n// ============================================================================\n// Execution Tree Builder\n// ============================================================================\n\n/**\n * Build hierarchical execution tree from flat list of spans\n *\n * @param spans - List of processed spans\n * @returns Root execution node with children\n */\nexport function buildExecutionTree(spans: ProcessedSpan[]): ExecutionNode {\n // Create map of spanId -> ExecutionNode\n const nodeMap = new Map<string, ExecutionNode>();\n\n // First pass: create all nodes\n for (const span of spans) {\n const node = createExecutionNode(span);\n nodeMap.set(span.spanId, node);\n }\n\n // Second pass: build parent-child relationships\n let rootNode: ExecutionNode | undefined;\n const orphans: ExecutionNode[] = [];\n\n for (const span of spans) {\n const node = nodeMap.get(span.spanId)!;\n\n if (!span.parentSpanId) {\n // This is the root node (visor.run)\n rootNode = node;\n } else {\n // Find parent and add as child\n const parent = nodeMap.get(span.parentSpanId);\n if (parent) {\n parent.children.push(node);\n } else {\n // Orphaned span — parent not in this trace; attach to root later\n orphans.push(node);\n }\n }\n }\n\n if (!rootNode) {\n // No root found, create synthetic root\n console.warn('[trace-reader] No root span found, creating synthetic root');\n rootNode = {\n checkId: 'synthetic-root',\n type: 'run',\n status: 'completed',\n children: Array.from(nodeMap.values()).filter(n => !n.span.parentSpanId),\n span: spans[0], // Use first span as placeholder\n state: {},\n };\n }\n\n // Attach orphaned spans (e.g. probe-internal spans whose parent is outside\n // this trace) to the root so they appear in the visualization.\n if (orphans.length > 0 && rootNode) {\n rootNode.children.push(...orphans);\n }\n\n return rootNode;\n}\n\n/**\n * Create execution node from span\n */\nfunction createExecutionNode(span: ProcessedSpan): ExecutionNode {\n const attrs = span.attributes;\n\n // Extract check ID\n const checkId = attrs['visor.check.id'] || attrs['visor.run.id'] || span.spanId;\n\n // Determine type\n let type = 'unknown';\n if (span.name === 'visor.run') {\n type = 'run';\n } else if (span.name === 'visor.check') {\n type = 'check';\n } else if (span.name.startsWith('visor.provider.')) {\n type = 'provider';\n }\n\n // Determine status\n let status: ExecutionNode['status'] = 'completed';\n if (span.status === 'error') {\n status = 'error';\n } else if (attrs['visor.check.skipped'] === true) {\n status = 'skipped';\n }\n\n // Extract state\n const state: ExecutionNode['state'] = {};\n\n // Input context\n if (attrs['visor.check.input.context']) {\n try {\n state.inputContext = JSON.parse(attrs['visor.check.input.context']);\n } catch {\n state.inputContext = attrs['visor.check.input.context'];\n }\n }\n\n // Output\n if (attrs['visor.check.output']) {\n try {\n state.output = JSON.parse(attrs['visor.check.output']);\n } catch {\n state.output = attrs['visor.check.output'];\n }\n }\n\n // Errors\n if (span.status === 'error' || attrs['visor.check.error']) {\n state.errors = [attrs['visor.check.error'] || 'Unknown error'];\n }\n\n // Additional metadata\n state.metadata = {\n type: attrs['visor.check.type'],\n duration: span.duration,\n provider: attrs['visor.provider.type'],\n };\n\n return {\n checkId,\n type,\n status,\n children: [],\n span,\n state,\n };\n}\n\n// ============================================================================\n// State Snapshot Extractor\n// ============================================================================\n\n/**\n * Extract state snapshots from spans for time-travel debugging\n *\n * @param spans - List of processed spans\n * @returns Array of state snapshots sorted by timestamp\n */\nexport function extractStateSnapshots(spans: ProcessedSpan[]): StateSnapshot[] {\n const snapshots: StateSnapshot[] = [];\n\n for (const span of spans) {\n // Find state.snapshot events\n for (const event of span.events) {\n if (event.name === 'state.snapshot') {\n const attrs = event.attributes || {};\n\n const snapshot: StateSnapshot = {\n checkId:\n attrs['visor.snapshot.check_id'] || span.attributes['visor.check.id'] || 'unknown',\n timestamp:\n attrs['visor.snapshot.timestamp'] || event.timestamp || timeValueToISO(event.time),\n timestampNanos: event.time,\n outputs: parseJSON(attrs['visor.snapshot.outputs'], {}),\n memory: parseJSON(attrs['visor.snapshot.memory'], {}),\n };\n\n snapshots.push(snapshot);\n }\n }\n }\n\n // Sort by timestamp\n snapshots.sort((a, b) => compareTimeValues(a.timestampNanos, b.timestampNanos));\n\n return snapshots;\n}\n\n// ============================================================================\n// Timeline Generator\n// ============================================================================\n\n/**\n * Compute chronological timeline of execution events\n *\n * @param spans - List of processed spans\n * @returns Array of timeline events sorted chronologically\n */\nexport function computeTimeline(spans: ProcessedSpan[]): TimelineEvent[] {\n const events: TimelineEvent[] = [];\n\n for (const span of spans) {\n const checkId = span.attributes['visor.check.id'] || span.spanId;\n\n // Check started event\n events.push({\n type: 'check.started',\n checkId,\n timestamp: timeValueToISO(span.startTime),\n timestampNanos: span.startTime,\n metadata: {\n name: span.name,\n type: span.attributes['visor.check.type'],\n },\n });\n\n // Check completed/failed event\n events.push({\n type: span.status === 'error' ? 'check.failed' : 'check.completed',\n checkId,\n timestamp: timeValueToISO(span.endTime),\n timestampNanos: span.endTime,\n duration: span.duration,\n status: span.status,\n metadata: {\n name: span.name,\n },\n });\n\n // Add span events (state.snapshot, etc.)\n for (const evt of span.events) {\n events.push({\n type: evt.name === 'state.snapshot' ? 'state.snapshot' : 'event',\n checkId: evt.attributes?.['visor.snapshot.check_id'] || checkId,\n timestamp: evt.timestamp || timeValueToISO(evt.time),\n timestampNanos: evt.time,\n metadata: {\n eventName: evt.name,\n attributes: evt.attributes,\n },\n });\n }\n }\n\n // Sort chronologically\n events.sort((a, b) => compareTimeValues(a.timestampNanos, b.timestampNanos));\n\n return events;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Convert OTEL time value [seconds, nanoseconds] to milliseconds\n */\nfunction timeValueToMillis(timeValue: [number, number]): number {\n const [seconds, nanos] = timeValue;\n return seconds * 1000 + nanos / 1_000_000;\n}\n\n/**\n * Convert OTEL time value to ISO timestamp string\n */\nfunction timeValueToISO(timeValue: [number, number]): string {\n const millis = timeValueToMillis(timeValue);\n return new Date(millis).toISOString();\n}\n\n/**\n * Compare two time values for sorting\n * Returns: -1 if a < b, 0 if a === b, 1 if a > b\n */\nfunction compareTimeValues(a: [number, number], b: [number, number]): number {\n if (a[0] !== b[0]) {\n return a[0] - b[0];\n }\n return a[1] - b[1];\n}\n\n/**\n * Safely parse JSON string, return default on error\n */\nfunction parseJSON<T>(value: any, defaultValue: T): T {\n if (typeof value !== 'string') {\n return defaultValue;\n }\n\n try {\n return JSON.parse(value);\n } catch {\n return defaultValue;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,24 @@
1
+ import {
2
+ fetchTraceSpans,
3
+ findTraceFile,
4
+ init_trace_serializer,
5
+ readTraceIdFromFile,
6
+ renderSpanTree,
7
+ renderSpanYaml,
8
+ renderTraceTree,
9
+ serializeTraceForPrompt
10
+ } from "./chunk-6C3R6E42.mjs";
11
+ import "./chunk-ZPYODGYA.mjs";
12
+ import "./chunk-B2OUZAWY.mjs";
13
+ import "./chunk-J7LXIPZS.mjs";
14
+ init_trace_serializer();
15
+ export {
16
+ fetchTraceSpans,
17
+ findTraceFile,
18
+ readTraceIdFromFile,
19
+ renderSpanTree,
20
+ renderSpanYaml,
21
+ renderTraceTree,
22
+ serializeTraceForPrompt
23
+ };
24
+ //# sourceMappingURL=trace-serializer-KKBJHM7J.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,22 +1,40 @@
1
1
  import {
2
2
  getInstanceId,
3
- init_instance_id
4
- } from "./chunk-6VVXKXTI.mjs";
3
+ init_instance_id,
4
+ require_package
5
+ } from "./chunk-G7GSN3SK.mjs";
5
6
  import {
6
7
  init_logger,
7
8
  logger
8
- } from "./chunk-FT3I25QV.mjs";
9
+ } from "./chunk-ZPYODGYA.mjs";
9
10
  import {
10
11
  init_lazy_otel,
11
12
  trace
12
- } from "./chunk-UCMJJ3IM.mjs";
13
+ } from "./chunk-B2OUZAWY.mjs";
13
14
  import {
14
15
  __esm
15
16
  } from "./chunk-J7LXIPZS.mjs";
16
17
 
17
18
  // src/agent-protocol/track-execution.ts
18
19
  import crypto from "crypto";
20
+ import fs from "fs";
19
21
  import path from "path";
22
+ function getPackageVersion() {
23
+ try {
24
+ return require_package()?.version || "dev";
25
+ } catch {
26
+ return "dev";
27
+ }
28
+ }
29
+ async function readTraceIdFromFallbackFile(traceFile) {
30
+ if (!traceFile || !fs.existsSync(traceFile)) return void 0;
31
+ try {
32
+ const { readTraceIdFromFile } = await import("./trace-serializer-KKBJHM7J.mjs");
33
+ return await readTraceIdFromFile(traceFile) || void 0;
34
+ } catch {
35
+ return void 0;
36
+ }
37
+ }
20
38
  async function trackExecution(opts, executor) {
21
39
  const { taskStore, source, configPath, metadata, messageText } = opts;
22
40
  const configName = configPath ? path.basename(configPath, path.extname(configPath)) : void 0;
@@ -26,6 +44,7 @@ async function trackExecution(opts, executor) {
26
44
  role: "user",
27
45
  parts: [{ text: messageText }]
28
46
  };
47
+ const traceFile = process.env.VISOR_FALLBACK_TRACE_FILE || void 0;
29
48
  const task = taskStore.createTask({
30
49
  contextId: crypto.randomUUID(),
31
50
  requestMessage,
@@ -33,7 +52,10 @@ async function trackExecution(opts, executor) {
33
52
  requestMetadata: {
34
53
  source,
35
54
  instance_id: getInstanceId(),
55
+ visor_version: process.env.VISOR_VERSION || getPackageVersion(),
56
+ ...process.env.VISOR_COMMIT_SHORT ? { visor_commit: process.env.VISOR_COMMIT_SHORT } : {},
36
57
  trace_id: trace.getActiveSpan()?.spanContext().traceId || void 0,
58
+ ...traceFile ? { trace_file: traceFile } : {},
37
59
  ...metadata
38
60
  }
39
61
  });
@@ -43,8 +65,23 @@ async function trackExecution(opts, executor) {
43
65
  logger.info(
44
66
  `[TaskTracking] Task ${task.id} started (source=${source}, workflow=${workflowId || "-"}, instance=${instanceId})`
45
67
  );
68
+ const HEARTBEAT_INTERVAL = 6e4;
69
+ const heartbeatTimer = setInterval(() => {
70
+ try {
71
+ taskStore.heartbeat(task.id);
72
+ } catch {
73
+ }
74
+ }, HEARTBEAT_INTERVAL);
46
75
  try {
47
76
  const result = await executor();
77
+ try {
78
+ const activeTraceId = trace.getActiveSpan()?.spanContext().traceId;
79
+ const persistedTraceId = (activeTraceId && activeTraceId !== "" ? activeTraceId : void 0) || await readTraceIdFromFallbackFile(traceFile);
80
+ if (persistedTraceId && !task.metadata?.trace_id) {
81
+ taskStore.updateMetadata(task.id, { trace_id: persistedTraceId });
82
+ }
83
+ } catch {
84
+ }
48
85
  let responseText = "Execution completed";
49
86
  try {
50
87
  const history = result?.reviewSummary?.history;
@@ -70,8 +107,17 @@ async function trackExecution(opts, executor) {
70
107
  role: "agent",
71
108
  parts: [{ text: responseText }]
72
109
  };
73
- taskStore.updateTaskState(task.id, "completed", completedMsg);
74
- logger.info(`[TaskTracking] Task ${task.id} completed`);
110
+ try {
111
+ taskStore.updateTaskState(task.id, "completed", completedMsg);
112
+ logger.info(`[TaskTracking] Task ${task.id} completed`);
113
+ } catch (stateErr) {
114
+ logger.warn(
115
+ `[TaskTracking] Task ${task.id} completed but state transition failed: ${stateErr instanceof Error ? stateErr.message : stateErr}`
116
+ );
117
+ }
118
+ if (opts.autoEvaluate || process.env.VISOR_TASK_EVALUATE === "true") {
119
+ scheduleEvaluation(task.id, taskStore);
120
+ }
75
121
  return { task, result };
76
122
  } catch (err) {
77
123
  const errorText = err instanceof Error ? err.message : String(err);
@@ -86,8 +132,23 @@ async function trackExecution(opts, executor) {
86
132
  } catch {
87
133
  }
88
134
  throw err;
135
+ } finally {
136
+ clearInterval(heartbeatTimer);
89
137
  }
90
138
  }
139
+ function scheduleEvaluation(taskId, taskStore) {
140
+ setTimeout(async () => {
141
+ try {
142
+ const { evaluateAndStore } = await import("./task-evaluator-OVMG7S56.mjs");
143
+ await evaluateAndStore(taskId, taskStore);
144
+ logger.info(`[TaskEvaluator] Auto-evaluation completed for task ${taskId}`);
145
+ } catch (err) {
146
+ logger.warn(
147
+ `[TaskEvaluator] Auto-evaluation failed for task ${taskId}: ${err instanceof Error ? err.message : err}`
148
+ );
149
+ }
150
+ }, 5e3);
151
+ }
91
152
  var init_track_execution = __esm({
92
153
  "src/agent-protocol/track-execution.ts"() {
93
154
  init_logger();
@@ -99,4 +160,4 @@ init_track_execution();
99
160
  export {
100
161
  trackExecution
101
162
  };
102
- //# sourceMappingURL=track-execution-AMQQNXKE.mjs.map
163
+ //# sourceMappingURL=track-execution-3EC24C2X.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 { TaskStore } from './task-store';\nimport type { AgentMessage, AgentTask } from './types';\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}\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 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 // 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 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 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 throw err; // re-throw to preserve original behavior\n } finally {\n clearInterval(heartbeatTimer);\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 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 }, 5000);\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  getInstanceId,
3
3
  init_instance_id,
4
4
  require_package
5
- } from "./chunk-QXT47ZHR.mjs";
5
+ } from "./chunk-MFXPJUUE.mjs";
6
6
  import {
7
7
  init_logger,
8
8
  logger
@@ -57,6 +57,13 @@ async function trackExecution(opts, executor) {
57
57
  );
58
58
  try {
59
59
  const result = await executor();
60
+ try {
61
+ const activeTraceId = trace.getActiveSpan()?.spanContext().traceId;
62
+ if (activeTraceId && activeTraceId !== "" && !task.metadata?.trace_id) {
63
+ taskStore.updateMetadata(task.id, { trace_id: activeTraceId });
64
+ }
65
+ } catch {
66
+ }
60
67
  let responseText = "Execution completed";
61
68
  try {
62
69
  const history = result?.reviewSummary?.history;
@@ -112,7 +119,7 @@ async function trackExecution(opts, executor) {
112
119
  function scheduleEvaluation(taskId, taskStore) {
113
120
  setTimeout(async () => {
114
121
  try {
115
- const { evaluateAndStore } = await import("./task-evaluator-HLNXKKVV.mjs");
122
+ const { evaluateAndStore } = await import("./task-evaluator-GQYDOSGT.mjs");
116
123
  await evaluateAndStore(taskId, taskStore);
117
124
  logger.info(`[TaskEvaluator] Auto-evaluation completed for task ${taskId}`);
118
125
  } catch (err) {
@@ -133,4 +140,4 @@ init_track_execution();
133
140
  export {
134
141
  trackExecution
135
142
  };
136
- //# sourceMappingURL=track-execution-MKIQXP2C.mjs.map
143
+ //# sourceMappingURL=track-execution-66RLL6QT.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 path from 'path';\nimport { logger } from '../logger';\nimport { trace } from '../telemetry/lazy-otel';\nimport { getInstanceId } from '../utils/instance-id';\nimport type { TaskStore } from './task-store';\nimport type { AgentMessage, AgentTask } from './types';\n\nfunction getPackageVersion(): string {\n try {\n return require('../../package.json')?.version || 'dev';\n } catch {\n return 'dev';\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\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}\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 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 try {\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 if (activeTraceId && activeTraceId !== '' && !task.metadata?.trace_id) {\n taskStore.updateMetadata(task.id, { trace_id: activeTraceId });\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 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 throw err; // re-throw to preserve original behavior\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 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 }, 5000);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,16 @@
1
+ import {
2
+ UtcpCheckProvider,
3
+ init_utcp_check_provider
4
+ } from "./chunk-P2K4VOMU.mjs";
5
+ import "./chunk-4BN2XI4X.mjs";
6
+ import "./chunk-25IC7KXZ.mjs";
7
+ import "./chunk-LW3INISN.mjs";
8
+ import "./chunk-RI4ONH5X.mjs";
9
+ import "./chunk-ZPYODGYA.mjs";
10
+ import "./chunk-B2OUZAWY.mjs";
11
+ import "./chunk-J7LXIPZS.mjs";
12
+ init_utcp_check_provider();
13
+ export {
14
+ UtcpCheckProvider
15
+ };
16
+ //# sourceMappingURL=utcp-check-provider-WI3QZ3W6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,31 @@
1
+ import {
2
+ WorkflowCheckProvider,
3
+ init_workflow_check_provider
4
+ } from "./chunk-UXB4XWEE.mjs";
5
+ import "./chunk-YSOIR46P.mjs";
6
+ import "./chunk-PDQTEBOJ.mjs";
7
+ import "./chunk-P2K4VOMU.mjs";
8
+ import "./chunk-MEB2TTIE.mjs";
9
+ import "./chunk-B7BVQM5K.mjs";
10
+ import "./chunk-XXAEN5KU.mjs";
11
+ import "./chunk-S5FSRHMY.mjs";
12
+ import "./chunk-54KOAC4W.mjs";
13
+ import "./chunk-7W5QCO4Y.mjs";
14
+ import "./chunk-KWTCTEFT.mjs";
15
+ import "./chunk-WKLJ57WF.mjs";
16
+ import "./chunk-GA2TYKSR.mjs";
17
+ import "./chunk-XOAEKFKB.mjs";
18
+ import "./chunk-G7GSN3SK.mjs";
19
+ import "./chunk-FWWLD555.mjs";
20
+ import "./chunk-4BN2XI4X.mjs";
21
+ import "./chunk-25IC7KXZ.mjs";
22
+ import "./chunk-LW3INISN.mjs";
23
+ import "./chunk-RI4ONH5X.mjs";
24
+ import "./chunk-ZPYODGYA.mjs";
25
+ import "./chunk-B2OUZAWY.mjs";
26
+ import "./chunk-J7LXIPZS.mjs";
27
+ init_workflow_check_provider();
28
+ export {
29
+ WorkflowCheckProvider
30
+ };
31
+ //# sourceMappingURL=workflow-check-provider-X2UREEH7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  WorkflowCheckProvider,
3
3
  init_workflow_check_provider
4
- } from "./chunk-TQQNSHQV.mjs";
4
+ } from "./chunk-IDL3AA3G.mjs";
5
5
  import "./chunk-YSOIR46P.mjs";
6
6
  import "./chunk-PDQTEBOJ.mjs";
7
7
  import "./chunk-7XRSCOKE.mjs";
@@ -12,10 +12,10 @@ import "./chunk-RHKPFJLG.mjs";
12
12
  import "./chunk-J27D43HS.mjs";
13
13
  import "./chunk-ZOF5QT6U.mjs";
14
14
  import "./chunk-KWTCTEFT.mjs";
15
- import "./chunk-ANUT54HW.mjs";
16
- import "./chunk-DHETLQIX.mjs";
17
- import "./chunk-7ERVRLDV.mjs";
18
- import "./chunk-QXT47ZHR.mjs";
15
+ import "./chunk-NPSLGKXB.mjs";
16
+ import "./chunk-V45TITKX.mjs";
17
+ import "./chunk-TFUQ2D5L.mjs";
18
+ import "./chunk-MFXPJUUE.mjs";
19
19
  import "./chunk-34QX63WK.mjs";
20
20
  import "./chunk-PQWZ6NFL.mjs";
21
21
  import "./chunk-25IC7KXZ.mjs";
@@ -28,4 +28,4 @@ init_workflow_check_provider();
28
28
  export {
29
29
  WorkflowCheckProvider
30
30
  };
31
- //# sourceMappingURL=workflow-check-provider-EXMC6JIS.mjs.map
31
+ //# sourceMappingURL=workflow-check-provider-YXALZNAQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,12 @@
1
+ import {
2
+ WorkflowRegistry,
3
+ init_workflow_registry
4
+ } from "./chunk-54KOAC4W.mjs";
5
+ import "./chunk-ZPYODGYA.mjs";
6
+ import "./chunk-B2OUZAWY.mjs";
7
+ import "./chunk-J7LXIPZS.mjs";
8
+ init_workflow_registry();
9
+ export {
10
+ WorkflowRegistry
11
+ };
12
+ //# sourceMappingURL=workflow-registry-YCZ3FCJC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-routing.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/state-machine/dispatch/sandbox-routing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;IAC9E,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,WAAW,EAAE,CAqC/F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GAAG,GAAG,EACpB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC7C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EACzC,WAAW,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,GACxC,OAAO,CAAC,aAAa,CAAC,CA+ExB"}
1
+ {"version":3,"file":"sandbox-routing.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/state-machine/dispatch/sandbox-routing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIhD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;IAC9E,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,WAAW,EAAE,CAqC/F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GAAG,GAAG,EACpB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC7C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EACzC,WAAW,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,GACxC,OAAO,CAAC,aAAa,CAAC,CAsGxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"level-dispatch.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/state-machine/states/level-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,WAAW,EAEZ,MAAM,oBAAoB,CAAC;AAsR5B,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,EAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC,CAyFf"}
1
+ {"version":3,"file":"level-dispatch.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/state-machine/states/level-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,WAAW,EAEZ,MAAM,oBAAoB,CAAC;AA6T5B,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,EAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC,CAyFf"}
@@ -4,4 +4,25 @@ export declare function emitNdjsonSpanWithEvents(name: string, attrs: Record<str
4
4
  name: string;
5
5
  attrs?: Record<string, unknown>;
6
6
  }>): void;
7
+ /**
8
+ * Emit a full span record to fallback NDJSON including traceId, spanId,
9
+ * parentSpanId, and timing — compatible with the trace serializer's
10
+ * parseLocalNDJSONSpans format.
11
+ */
12
+ export declare function emitNdjsonFullSpan(record: {
13
+ name: string;
14
+ traceId?: string;
15
+ spanId?: string;
16
+ parentSpanId?: string;
17
+ startTime?: [number, number];
18
+ endTime?: [number, number];
19
+ attributes?: Record<string, unknown>;
20
+ events?: Array<{
21
+ name: string;
22
+ attributes?: Record<string, unknown>;
23
+ }>;
24
+ status?: {
25
+ code?: number;
26
+ };
27
+ }): void;
7
28
  //# sourceMappingURL=fallback-ndjson.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fallback-ndjson.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/telemetry/fallback-ndjson.ts"],"names":[],"mappings":"AAyCA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASrF;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAC/D,IAAI,CASN"}
1
+ {"version":3,"file":"fallback-ndjson.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/telemetry/fallback-ndjson.ts"],"names":[],"mappings":"AAyCA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASrF;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAC/D,IAAI,CASN;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACvE,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B,GAAG,IAAI,CASP"}
@@ -7,6 +7,8 @@ export declare const trace: {
7
7
  getTracer(name: string, version?: string): any;
8
8
  getSpan(context: any): any;
9
9
  getActiveSpan(): any;
10
+ setSpan(context: any, span: any): any;
11
+ setSpanContext(context: any, spanContext: any): any;
10
12
  };
11
13
  export declare const context: {
12
14
  active(): any;
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-otel.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/telemetry/lazy-otel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,eAAO,MAAM,KAAK;oBACA,MAAM,YAAY,MAAM;qBAKvB,GAAG;;CAUrB,CAAC;AAGF,eAAO,MAAM,OAAO;;kBAMJ,GAAG,MAAM,QAAQ,YAAY,GAAG,WAAW,GAAG,EAAE;CAK/D,CAAC;AAGF,eAAO,MAAM,OAAO;mBACH,MAAM,YAAY,MAAM;CAKxC,CAAC;AAGF,eAAO,MAAM,cAAc;;;;CAa1B,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;CAqBpB,CAAC;AAGF,eAAO,MAAM,IAAI;sBACG,GAAG,UAAU,GAAG;CAKnC,CAAC;AAGF,eAAO,MAAM,iBAAiB;;CAK7B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;CA6BxB,CAAC;AAGF,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC;AACvB,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7C,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"lazy-otel.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/telemetry/lazy-otel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,eAAO,MAAM,KAAK;oBACA,MAAM,YAAY,MAAM;qBAKvB,GAAG;;qBAUH,GAAG,QAAQ,GAAG;4BAKP,GAAG,eAAe,GAAG;CAK9C,CAAC;AAGF,eAAO,MAAM,OAAO;;kBAMJ,GAAG,MAAM,QAAQ,YAAY,GAAG,WAAW,GAAG,EAAE;CAK/D,CAAC;AAGF,eAAO,MAAM,OAAO;mBACH,MAAM,YAAY,MAAM;CAKxC,CAAC;AAGF,eAAO,MAAM,cAAc;;;;CAa1B,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;CAqBpB,CAAC;AAGF,eAAO,MAAM,IAAI;sBACG,GAAG,UAAU,GAAG;CAKnC,CAAC;AAGF,eAAO,MAAM,iBAAiB;;CAK7B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;CA6BxB,CAAC;AAGF,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC;AACvB,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7C,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
@@ -35,5 +35,10 @@ export declare function getOtelLoggerProvider(): any;
35
35
  * processes to ensure they are exported before the next batch interval.
36
36
  */
37
37
  export declare function forceFlushTelemetry(): Promise<void>;
38
+ /**
39
+ * Best-effort non-blocking flush for lifecycle/helper spans.
40
+ * Rate-limited to avoid exporter pressure in long-running processes.
41
+ */
42
+ export declare function requestThrottledTelemetryFlush(): void;
38
43
  export declare function shutdownTelemetry(): Promise<void>;
39
44
  //# sourceMappingURL=opentelemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"opentelemetry.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/telemetry/opentelemetry.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAQ3E,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC3E,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyQlF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,GAAG,CAE3C;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOzD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCvD"}
1
+ {"version":3,"file":"opentelemetry.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/telemetry/opentelemetry.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAQ3E,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC3E,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AASD;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyQlF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,GAAG,CAE3C;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CASzD;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAyBrD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCvD"}
@@ -1,6 +1,16 @@
1
1
  import { Span } from './lazy-otel';
2
2
  export declare function getTracer(): any;
3
3
  export declare function withActiveSpan<T>(name: string, attrs: Record<string, unknown> | undefined, fn: (span: Span) => Promise<T>): Promise<T>;
4
+ export declare function emitImmediateSpan(name: string, attrs?: Record<string, unknown>, options?: {
5
+ events?: Array<{
6
+ name: string;
7
+ attrs?: Record<string, unknown>;
8
+ }>;
9
+ status?: {
10
+ code?: number;
11
+ message?: string;
12
+ };
13
+ }): void;
4
14
  export declare function addEvent(name: string, attrs?: Record<string, unknown>): void;
5
15
  export declare function setSpanAttributes(attrs: Record<string, unknown>): void;
6
16
  export declare function setSpanError(err: unknown): void;