@probelabs/visor 0.1.107 → 0.1.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/defaults/task-refinement.yaml +7 -3
- package/defaults/visor.tests.yaml +13 -2
- package/defaults/visor.yaml +1 -0
- package/dist/663.index.js +3 -2
- package/dist/80.index.js +3 -2
- package/dist/ai-review-service.d.ts +13 -9
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/debug-visualizer/ws-server.d.ts +7 -1
- package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
- package/dist/defaults/task-refinement.yaml +7 -3
- package/dist/defaults/visor.tests.yaml +13 -2
- package/dist/defaults/visor.yaml +1 -0
- package/dist/docs/advanced-ai.md +60 -1
- package/dist/docs/ai-configuration.md +67 -0
- package/dist/docs/ai-custom-tools-usage.md +261 -0
- package/dist/docs/ai-custom-tools.md +392 -0
- package/dist/docs/bot-transports-rfc.md +23 -0
- package/dist/docs/configuration.md +21 -0
- package/dist/docs/engine-pause-resume-rfc.md +192 -0
- package/dist/docs/lifecycle-hooks.md +253 -0
- package/dist/docs/liquid-templates.md +143 -0
- package/dist/docs/providers/git-checkout.md +589 -0
- package/dist/docs/recipes.md +458 -5
- package/dist/docs/rfc/git-checkout-step.md +601 -0
- package/dist/docs/rfc/on_init-hook.md +1294 -0
- package/dist/docs/rfc/workspace-isolation.md +216 -0
- package/dist/docs/router-patterns.md +339 -0
- package/dist/event-bus/types.d.ts +14 -0
- package/dist/event-bus/types.d.ts.map +1 -1
- package/dist/examples/ai-custom-tools-example.yaml +206 -0
- package/dist/examples/ai-custom-tools-simple.yaml +76 -0
- package/dist/examples/git-checkout-basic.yaml +32 -0
- package/dist/examples/git-checkout-compare.yaml +59 -0
- package/dist/examples/git-checkout-cross-repo.yaml +76 -0
- package/dist/examples/on-init-import-demo.yaml +179 -0
- package/dist/examples/reusable-tools.yaml +92 -0
- package/dist/examples/reusable-workflows.yaml +88 -0
- package/dist/examples/session-reuse-self.yaml +81 -0
- package/dist/examples/slack-simple-chat.yaml +775 -0
- package/dist/failure-condition-evaluator.d.ts +2 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/frontends/github-frontend.d.ts +20 -0
- package/dist/frontends/github-frontend.d.ts.map +1 -1
- package/dist/frontends/host.d.ts +4 -0
- package/dist/frontends/host.d.ts.map +1 -1
- package/dist/frontends/slack-frontend.d.ts +58 -0
- package/dist/frontends/slack-frontend.d.ts.map +1 -0
- package/dist/generated/config-schema.d.ts +409 -41
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +436 -47
- package/dist/github-comments.d.ts +2 -0
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83587 -56085
- package/dist/liquid-extensions.d.ts.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/output/traces/{run-2025-11-21T11-50-46-505Z.ndjson → run-2026-01-20T19-22-58-043Z.ndjson} +91 -91
- package/dist/output/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
- package/dist/output-formatters.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.d.ts +12 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/check-provider-registry.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts +9 -0
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/custom-tool-executor.d.ts.map +1 -1
- package/dist/providers/git-checkout-provider.d.ts +25 -0
- package/dist/providers/git-checkout-provider.d.ts.map +1 -0
- package/dist/providers/http-client-provider.d.ts +3 -0
- package/dist/providers/http-client-provider.d.ts.map +1 -1
- package/dist/providers/human-input-check-provider.d.ts +2 -0
- package/dist/providers/human-input-check-provider.d.ts.map +1 -1
- package/dist/providers/log-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-check-provider.d.ts +1 -1
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
- package/dist/providers/memory-check-provider.d.ts.map +1 -1
- package/dist/providers/script-check-provider.d.ts.map +1 -1
- package/dist/providers/workflow-check-provider.d.ts.map +1 -1
- package/dist/reviewer.d.ts.map +1 -1
- package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
- package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
- package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
- package/dist/sdk/{chunk-OOZITMRU.mjs → chunk-3OMWVM6J.mjs} +11 -1
- package/dist/sdk/{chunk-OOZITMRU.mjs.map → chunk-3OMWVM6J.mjs.map} +1 -1
- package/dist/sdk/{chunk-37ZSCMFC.mjs → chunk-7UK3NIIT.mjs} +2 -2
- package/dist/sdk/{chunk-VMPLF6FT.mjs → chunk-AGIZJ4UZ.mjs} +50 -4
- package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
- package/dist/sdk/{chunk-IEO6CFLG.mjs → chunk-AIVFBIS4.mjs} +161 -5
- package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
- package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
- package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
- package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
- package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
- package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
- package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
- package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
- package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
- package/dist/sdk/{chunk-6Y4YTKCF.mjs → chunk-NAW3DB3I.mjs} +2 -2
- package/dist/sdk/{chunk-OWUVOILT.mjs → chunk-QR7MOMJH.mjs} +4 -3
- package/dist/sdk/{chunk-OWUVOILT.mjs.map → chunk-QR7MOMJH.mjs.map} +1 -1
- package/dist/sdk/{chunk-PTL3K3PN.mjs → chunk-QY2XYPEV.mjs} +488 -60
- package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
- package/dist/sdk/{chunk-OZJ263FM.mjs → chunk-SIWNBRTK.mjs} +29 -215
- package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
- package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
- package/dist/sdk/{config-M4ZNO6NU.mjs → config-YNC2EOOT.mjs} +5 -3
- package/dist/sdk/{failure-condition-evaluator-NBO5YRXW.mjs → failure-condition-evaluator-YGTF2GHG.mjs} +6 -5
- package/dist/sdk/{github-frontend-4AWRJT7D.mjs → github-frontend-SIAEOCON.mjs} +190 -12
- package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
- package/dist/sdk/{host-7GBC3S7L.mjs → host-DXUYTNMU.mjs} +5 -2
- package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
- package/dist/sdk/{liquid-extensions-C7EG3YKH.mjs → liquid-extensions-PKWCKK7E.mjs} +5 -4
- package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
- package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
- package/dist/sdk/{renderer-schema-6RF26VUS.mjs → renderer-schema-LPKN5UJS.mjs} +3 -2
- package/dist/sdk/{renderer-schema-6RF26VUS.mjs.map → renderer-schema-LPKN5UJS.mjs.map} +1 -1
- package/dist/sdk/{routing-RP56JTV2.mjs → routing-6N45MJ4F.mjs} +7 -6
- package/dist/sdk/sdk.d.mts +219 -5
- package/dist/sdk/sdk.d.ts +219 -5
- package/dist/sdk/sdk.js +21329 -14908
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +407 -12874
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/{session-registry-N5FFYFTM.mjs → session-registry-4E6YRQ77.mjs} +2 -2
- package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
- package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
- package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
- package/dist/sdk/{tracer-init-WP4X46IF.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
- package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
- package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
- package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
- package/dist/slack/adapter.d.ts +36 -0
- package/dist/slack/adapter.d.ts.map +1 -0
- package/dist/slack/cache-prewarmer.d.ts +31 -0
- package/dist/slack/cache-prewarmer.d.ts.map +1 -0
- package/dist/slack/client.d.ts +77 -0
- package/dist/slack/client.d.ts.map +1 -0
- package/dist/slack/markdown.d.ts +45 -0
- package/dist/slack/markdown.d.ts.map +1 -0
- package/dist/slack/prompt-state.d.ts +33 -0
- package/dist/slack/prompt-state.d.ts.map +1 -0
- package/dist/slack/rate-limiter.d.ts +56 -0
- package/dist/slack/rate-limiter.d.ts.map +1 -0
- package/dist/slack/signature.d.ts +2 -0
- package/dist/slack/signature.d.ts.map +1 -0
- package/dist/slack/socket-runner.d.ts +42 -0
- package/dist/slack/socket-runner.d.ts.map +1 -0
- package/dist/slack/thread-cache.d.ts +51 -0
- package/dist/slack/thread-cache.d.ts.map +1 -0
- package/dist/state-machine/context/build-engine-context.d.ts +8 -0
- package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
- package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
- package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
- package/dist/state-machine/dispatch/on-init-handlers.d.ts +43 -0
- package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
- package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -1
- package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -1
- package/dist/state-machine/runner.d.ts +6 -0
- package/dist/state-machine/runner.d.ts.map +1 -1
- package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
- package/dist/state-machine/states/plan-ready.d.ts.map +1 -1
- package/dist/state-machine/states/routing.d.ts.map +1 -1
- package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
- package/dist/state-machine/workflow-projection.d.ts.map +1 -1
- package/dist/state-machine-execution-engine.d.ts +21 -9
- package/dist/state-machine-execution-engine.d.ts.map +1 -1
- package/dist/telemetry/state-capture.d.ts +5 -0
- package/dist/telemetry/state-capture.d.ts.map +1 -1
- package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
- package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -1
- package/dist/test-runner/evaluators.d.ts +37 -4
- package/dist/test-runner/evaluators.d.ts.map +1 -1
- package/dist/test-runner/index.d.ts +7 -0
- package/dist/test-runner/index.d.ts.map +1 -1
- package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
- package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
- package/dist/test-runner/validator.d.ts.map +1 -1
- package/dist/traces/{run-2025-11-21T11-50-46-505Z.ndjson → run-2026-01-20T19-22-58-043Z.ndjson} +91 -91
- package/dist/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
- package/dist/types/bot.d.ts +109 -0
- package/dist/types/bot.d.ts.map +1 -0
- package/dist/types/cli.d.ts +4 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts +182 -5
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts +5 -0
- package/dist/types/engine.d.ts.map +1 -1
- package/dist/types/git-checkout.d.ts +76 -0
- package/dist/types/git-checkout.d.ts.map +1 -0
- package/dist/utils/json-text-extractor.d.ts +17 -0
- package/dist/utils/json-text-extractor.d.ts.map +1 -0
- package/dist/utils/sandbox.d.ts +10 -0
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/template-context.d.ts +1 -0
- package/dist/utils/template-context.d.ts.map +1 -1
- package/dist/utils/tracer-init.d.ts.map +1 -1
- package/dist/utils/workspace-manager.d.ts +118 -0
- package/dist/utils/workspace-manager.d.ts.map +1 -0
- package/dist/utils/worktree-cleanup.d.ts +33 -0
- package/dist/utils/worktree-cleanup.d.ts.map +1 -0
- package/dist/utils/worktree-manager.d.ts +153 -0
- package/dist/utils/worktree-manager.d.ts.map +1 -0
- package/dist/webhook-server.d.ts.map +1 -1
- package/dist/workflow-executor.d.ts.map +1 -1
- package/dist/workflow-registry.d.ts.map +1 -1
- package/package.json +4 -2
- package/dist/output/traces/run-2025-11-21T11-51-33-674Z.ndjson +0 -839
- package/dist/sdk/chunk-IEO6CFLG.mjs.map +0 -1
- package/dist/sdk/chunk-JEHPDJIF.mjs +0 -223
- package/dist/sdk/chunk-JEHPDJIF.mjs.map +0 -1
- package/dist/sdk/chunk-OZJ263FM.mjs.map +0 -1
- package/dist/sdk/chunk-PTL3K3PN.mjs.map +0 -1
- package/dist/sdk/chunk-VMPLF6FT.mjs.map +0 -1
- package/dist/sdk/github-frontend-4AWRJT7D.mjs.map +0 -1
- package/dist/sdk/host-7GBC3S7L.mjs.map +0 -1
- package/dist/sdk/memory-store-GJACZC2A.mjs +0 -11
- package/dist/sdk/workflow-registry-2YIIXQCK.mjs +0 -11
- package/dist/traces/run-2025-11-21T11-51-33-674Z.ndjson +0 -839
- /package/dist/sdk/{config-M4ZNO6NU.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
- /package/dist/sdk/{chunk-37ZSCMFC.mjs.map → chunk-7UK3NIIT.mjs.map} +0 -0
- /package/dist/sdk/{chunk-6Y4YTKCF.mjs.map → chunk-NAW3DB3I.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-NBO5YRXW.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-C7EG3YKH.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
- /package/dist/sdk/{memory-store-GJACZC2A.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
- /package/dist/sdk/{routing-RP56JTV2.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
- /package/dist/sdk/{session-registry-N5FFYFTM.mjs.map → memory-store-XGBB7LX7.mjs.map} +0 -0
- /package/dist/sdk/{tracer-init-WP4X46IF.mjs.map → prompt-state-YRJY6QAL.mjs.map} +0 -0
- /package/dist/sdk/{workflow-registry-2YIIXQCK.mjs.map → routing-6N45MJ4F.mjs.map} +0 -0
|
@@ -42,6 +42,16 @@ async function initializeTracer(sessionId, checkName) {
|
|
|
42
42
|
enableConsole: false
|
|
43
43
|
});
|
|
44
44
|
const tracer = new SimpleAppTracer(telemetry, sessionId);
|
|
45
|
+
if (typeof tracer.recordEvent !== "function") {
|
|
46
|
+
tracer.recordEvent = (name, attributes) => {
|
|
47
|
+
try {
|
|
48
|
+
if (telemetry.record) {
|
|
49
|
+
telemetry.record({ event: name, ...attributes });
|
|
50
|
+
}
|
|
51
|
+
} catch {
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
45
55
|
console.error(`\u{1F4CA} Simple tracing enabled, will save to: ${traceFilePath}`);
|
|
46
56
|
if (process.env.GITHUB_ACTIONS) {
|
|
47
57
|
console.log(`::notice title=AI Trace::Trace will be saved to ${traceFilePath}`);
|
|
@@ -69,4 +79,4 @@ export {
|
|
|
69
79
|
initializeTracer,
|
|
70
80
|
init_tracer_init
|
|
71
81
|
};
|
|
72
|
-
//# sourceMappingURL=chunk-
|
|
82
|
+
//# sourceMappingURL=chunk-3OMWVM6J.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/tracer-init.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fs from 'fs';\n\n/**\n * Safely initialize a tracer for ProbeAgent with proper path sanitization\n * Uses SimpleTelemetry for lightweight tracing\n * This prevents path traversal vulnerabilities by sanitizing the checkName\n */\ntype ProbeModule =\n | {\n SimpleTelemetry?: new (opts: {\n enableFile: boolean;\n filePath: string;\n enableConsole?: boolean;\n }) => unknown;\n SimpleAppTracer?: new (telemetry: unknown, sessionId: string) => unknown;\n }\n | undefined;\n\nexport async function initializeTracer(\n sessionId: string,\n checkName?: string\n): Promise<{ tracer: unknown; telemetryConfig: unknown; filePath: string } | null> {\n try {\n // Load Probe lib in a way that works in both ESM and CJS bundles\n let ProbeLib: ProbeModule;\n try {\n ProbeLib = (await import('@probelabs/probe')) as ProbeModule;\n } catch {\n try {\n // Fallback to CJS require if available\n\n ProbeLib = require('@probelabs/probe') as ProbeModule;\n } catch {\n ProbeLib = {} as unknown as ProbeModule;\n }\n }\n\n // Use SimpleTelemetry (probe no longer exports full OpenTelemetry classes)\n const SimpleTelemetry = ProbeLib?.SimpleTelemetry;\n const SimpleAppTracer = ProbeLib?.SimpleAppTracer;\n if (SimpleTelemetry && SimpleAppTracer) {\n // SECURITY: Sanitize checkName to prevent path traversal attacks\n const sanitizedCheckName = checkName ? path.basename(checkName) : 'check';\n\n // Create trace file path in debug-artifacts directory\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const traceDir = process.env.GITHUB_WORKSPACE\n ? path.join(process.env.GITHUB_WORKSPACE, 'debug-artifacts')\n : path.join(process.cwd(), 'debug-artifacts');\n\n // Create traces directory if it doesn't exist\n if (!fs.existsSync(traceDir)) {\n fs.mkdirSync(traceDir, { recursive: true });\n }\n\n // SECURITY: Use path.join to safely construct the path\n const traceFilePath = path.join(traceDir, `trace-${sanitizedCheckName}-${timestamp}.jsonl`);\n\n // SECURITY: Verify the resolved path is within the intended directory\n const resolvedTracePath = path.resolve(traceFilePath);\n const resolvedTraceDir = path.resolve(traceDir);\n if (!resolvedTracePath.startsWith(resolvedTraceDir)) {\n console.error(\n `⚠️ Security: Attempted path traversal detected. Check name: ${checkName}, resolved path: ${resolvedTracePath}`\n );\n return null;\n }\n\n // Initialize simple telemetry\n const telemetry = new SimpleTelemetry({\n enableFile: true,\n filePath: traceFilePath,\n enableConsole: false,\n });\n\n const tracer = new SimpleAppTracer(telemetry, sessionId);\n\n console.error(`📊 Simple tracing enabled, will save to: ${traceFilePath}`);\n\n // If in GitHub Actions, log the path for artifact upload\n if (process.env.GITHUB_ACTIONS) {\n console.log(`::notice title=AI Trace::Trace will be saved to ${traceFilePath}`);\n console.log(`::set-output name=trace-path::${traceFilePath}`);\n }\n\n // Return with SimpleTelemetry\n return {\n tracer,\n telemetryConfig: telemetry,\n filePath: traceFilePath,\n };\n }\n\n console.error('⚠️ Telemetry classes not available in ProbeAgent, skipping tracing');\n return null;\n } catch (error) {\n console.error('⚠️ Warning: Failed to initialize tracing:', error);\n return null;\n }\n}\n"],"mappings":";;;;;;AAAA,YAAY,UAAU;AACtB,YAAY,QAAQ;AAkBpB,eAAsB,iBACpB,WACA,WACiF;AACjF,MAAI;AAEF,QAAI;AACJ,QAAI;AACF,iBAAY,MAAM,OAAO,kBAAkB;AAAA,IAC7C,QAAQ;AACN,UAAI;AAGF,mBAAW,UAAQ,kBAAkB;AAAA,MACvC,QAAQ;AACN,mBAAW,CAAC;AAAA,MACd;AAAA,IACF;AAGA,UAAM,kBAAkB,UAAU;AAClC,UAAM,kBAAkB,UAAU;AAClC,QAAI,mBAAmB,iBAAiB;AAEtC,YAAM,qBAAqB,YAAiB,cAAS,SAAS,IAAI;AAGlE,YAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AAC/D,YAAM,WAAW,QAAQ,IAAI,mBACpB,UAAK,QAAQ,IAAI,kBAAkB,iBAAiB,IACpD,UAAK,QAAQ,IAAI,GAAG,iBAAiB;AAG9C,UAAI,CAAI,cAAW,QAAQ,GAAG;AAC5B,QAAG,aAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,MAC5C;AAGA,YAAM,gBAAqB,UAAK,UAAU,SAAS,kBAAkB,IAAI,SAAS,QAAQ;AAG1F,YAAM,oBAAyB,aAAQ,aAAa;AACpD,YAAM,mBAAwB,aAAQ,QAAQ;AAC9C,UAAI,CAAC,kBAAkB,WAAW,gBAAgB,GAAG;AACnD,gBAAQ;AAAA,UACN,yEAA+D,SAAS,oBAAoB,iBAAiB;AAAA,QAC/G;AACA,eAAO;AAAA,MACT;AAGA,YAAM,YAAY,IAAI,gBAAgB;AAAA,QACpC,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,SAAS,IAAI,gBAAgB,WAAW,SAAS;
|
|
1
|
+
{"version":3,"sources":["../../src/utils/tracer-init.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fs from 'fs';\n\n/**\n * Safely initialize a tracer for ProbeAgent with proper path sanitization\n * Uses SimpleTelemetry for lightweight tracing\n * This prevents path traversal vulnerabilities by sanitizing the checkName\n */\ntype ProbeModule =\n | {\n SimpleTelemetry?: new (opts: {\n enableFile: boolean;\n filePath: string;\n enableConsole?: boolean;\n }) => unknown;\n SimpleAppTracer?: new (telemetry: unknown, sessionId: string) => unknown;\n }\n | undefined;\n\nexport async function initializeTracer(\n sessionId: string,\n checkName?: string\n): Promise<{ tracer: unknown; telemetryConfig: unknown; filePath: string } | null> {\n try {\n // Load Probe lib in a way that works in both ESM and CJS bundles\n let ProbeLib: ProbeModule;\n try {\n ProbeLib = (await import('@probelabs/probe')) as ProbeModule;\n } catch {\n try {\n // Fallback to CJS require if available\n\n ProbeLib = require('@probelabs/probe') as ProbeModule;\n } catch {\n ProbeLib = {} as unknown as ProbeModule;\n }\n }\n\n // Use SimpleTelemetry (probe no longer exports full OpenTelemetry classes)\n const SimpleTelemetry = ProbeLib?.SimpleTelemetry;\n const SimpleAppTracer = ProbeLib?.SimpleAppTracer;\n if (SimpleTelemetry && SimpleAppTracer) {\n // SECURITY: Sanitize checkName to prevent path traversal attacks\n const sanitizedCheckName = checkName ? path.basename(checkName) : 'check';\n\n // Create trace file path in debug-artifacts directory\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const traceDir = process.env.GITHUB_WORKSPACE\n ? path.join(process.env.GITHUB_WORKSPACE, 'debug-artifacts')\n : path.join(process.cwd(), 'debug-artifacts');\n\n // Create traces directory if it doesn't exist\n if (!fs.existsSync(traceDir)) {\n fs.mkdirSync(traceDir, { recursive: true });\n }\n\n // SECURITY: Use path.join to safely construct the path\n const traceFilePath = path.join(traceDir, `trace-${sanitizedCheckName}-${timestamp}.jsonl`);\n\n // SECURITY: Verify the resolved path is within the intended directory\n const resolvedTracePath = path.resolve(traceFilePath);\n const resolvedTraceDir = path.resolve(traceDir);\n if (!resolvedTracePath.startsWith(resolvedTraceDir)) {\n console.error(\n `⚠️ Security: Attempted path traversal detected. Check name: ${checkName}, resolved path: ${resolvedTracePath}`\n );\n return null;\n }\n\n // Initialize simple telemetry\n const telemetry = new SimpleTelemetry({\n enableFile: true,\n filePath: traceFilePath,\n enableConsole: false,\n });\n\n const tracer = new SimpleAppTracer(telemetry, sessionId);\n\n // WORKAROUND: Add missing recordEvent method for completionPrompt feature (probe #321)\n // SimpleAppTracer doesn't have recordEvent but completionPrompt requires it\n if (typeof (tracer as any).recordEvent !== 'function') {\n (tracer as any).recordEvent = (name: string, attributes?: Record<string, unknown>) => {\n // Log completion events to telemetry for debugging\n try {\n if ((telemetry as any).record) {\n (telemetry as any).record({ event: name, ...attributes });\n }\n } catch {\n // Best-effort only\n }\n };\n }\n\n console.error(`📊 Simple tracing enabled, will save to: ${traceFilePath}`);\n\n // If in GitHub Actions, log the path for artifact upload\n if (process.env.GITHUB_ACTIONS) {\n console.log(`::notice title=AI Trace::Trace will be saved to ${traceFilePath}`);\n console.log(`::set-output name=trace-path::${traceFilePath}`);\n }\n\n // Return with SimpleTelemetry\n return {\n tracer,\n telemetryConfig: telemetry,\n filePath: traceFilePath,\n };\n }\n\n console.error('⚠️ Telemetry classes not available in ProbeAgent, skipping tracing');\n return null;\n } catch (error) {\n console.error('⚠️ Warning: Failed to initialize tracing:', error);\n return null;\n }\n}\n"],"mappings":";;;;;;AAAA,YAAY,UAAU;AACtB,YAAY,QAAQ;AAkBpB,eAAsB,iBACpB,WACA,WACiF;AACjF,MAAI;AAEF,QAAI;AACJ,QAAI;AACF,iBAAY,MAAM,OAAO,kBAAkB;AAAA,IAC7C,QAAQ;AACN,UAAI;AAGF,mBAAW,UAAQ,kBAAkB;AAAA,MACvC,QAAQ;AACN,mBAAW,CAAC;AAAA,MACd;AAAA,IACF;AAGA,UAAM,kBAAkB,UAAU;AAClC,UAAM,kBAAkB,UAAU;AAClC,QAAI,mBAAmB,iBAAiB;AAEtC,YAAM,qBAAqB,YAAiB,cAAS,SAAS,IAAI;AAGlE,YAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AAC/D,YAAM,WAAW,QAAQ,IAAI,mBACpB,UAAK,QAAQ,IAAI,kBAAkB,iBAAiB,IACpD,UAAK,QAAQ,IAAI,GAAG,iBAAiB;AAG9C,UAAI,CAAI,cAAW,QAAQ,GAAG;AAC5B,QAAG,aAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,MAC5C;AAGA,YAAM,gBAAqB,UAAK,UAAU,SAAS,kBAAkB,IAAI,SAAS,QAAQ;AAG1F,YAAM,oBAAyB,aAAQ,aAAa;AACpD,YAAM,mBAAwB,aAAQ,QAAQ;AAC9C,UAAI,CAAC,kBAAkB,WAAW,gBAAgB,GAAG;AACnD,gBAAQ;AAAA,UACN,yEAA+D,SAAS,oBAAoB,iBAAiB;AAAA,QAC/G;AACA,eAAO;AAAA,MACT;AAGA,YAAM,YAAY,IAAI,gBAAgB;AAAA,QACpC,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,SAAS,IAAI,gBAAgB,WAAW,SAAS;AAIvD,UAAI,OAAQ,OAAe,gBAAgB,YAAY;AACrD,QAAC,OAAe,cAAc,CAAC,MAAc,eAAyC;AAEpF,cAAI;AACF,gBAAK,UAAkB,QAAQ;AAC7B,cAAC,UAAkB,OAAO,EAAE,OAAO,MAAM,GAAG,WAAW,CAAC;AAAA,YAC1D;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAEA,cAAQ,MAAM,mDAA4C,aAAa,EAAE;AAGzE,UAAI,QAAQ,IAAI,gBAAgB;AAC9B,gBAAQ,IAAI,mDAAmD,aAAa,EAAE;AAC9E,gBAAQ,IAAI,iCAAiC,aAAa,EAAE;AAAA,MAC9D;AAGA,aAAO;AAAA,QACL;AAAA,QACA,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,YAAQ,MAAM,8EAAoE;AAClF,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,uDAA6C,KAAK;AAChE,WAAO;AAAA,EACT;AACF;AAnHA;AAAA;AAAA;AAAA;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
init_logger,
|
|
3
3
|
logger
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AGIZJ4UZ.mjs";
|
|
5
5
|
import {
|
|
6
6
|
__esm,
|
|
7
7
|
__export
|
|
@@ -479,4 +479,4 @@ export {
|
|
|
479
479
|
memory_store_exports,
|
|
480
480
|
init_memory_store
|
|
481
481
|
};
|
|
482
|
-
//# sourceMappingURL=chunk-
|
|
482
|
+
//# sourceMappingURL=chunk-7UK3NIIT.mjs.map
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import {
|
|
2
|
+
context,
|
|
3
|
+
init_lazy_otel,
|
|
4
|
+
trace
|
|
5
|
+
} from "./chunk-YSN4G6CI.mjs";
|
|
1
6
|
import {
|
|
2
7
|
__esm,
|
|
3
8
|
__export
|
|
@@ -44,6 +49,7 @@ var Logger, logger;
|
|
|
44
49
|
var init_logger = __esm({
|
|
45
50
|
"src/logger.ts"() {
|
|
46
51
|
"use strict";
|
|
52
|
+
init_lazy_otel();
|
|
47
53
|
Logger = class {
|
|
48
54
|
level = "info";
|
|
49
55
|
isJsonLike = false;
|
|
@@ -79,16 +85,56 @@ var init_logger = __esm({
|
|
|
79
85
|
}
|
|
80
86
|
return true;
|
|
81
87
|
}
|
|
88
|
+
getTraceSuffix(msg) {
|
|
89
|
+
if (!msg) return "";
|
|
90
|
+
if (msg.includes("trace_id=") || msg.includes("trace_id:")) return "";
|
|
91
|
+
try {
|
|
92
|
+
const span = trace.getSpan(context.active()) || trace.getActiveSpan();
|
|
93
|
+
const ctx = span?.spanContext?.();
|
|
94
|
+
if (!ctx?.traceId) return "";
|
|
95
|
+
return ` [trace_id=${ctx.traceId} span_id=${ctx.spanId}]`;
|
|
96
|
+
} catch {
|
|
97
|
+
return "";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
82
100
|
write(msg, level) {
|
|
83
101
|
try {
|
|
102
|
+
const suffix = this.getTraceSuffix(msg);
|
|
103
|
+
const decoratedMsg = suffix ? `${msg}${suffix}` : msg;
|
|
84
104
|
if (this.showTimestamps) {
|
|
85
105
|
const ts = (/* @__PURE__ */ new Date()).toISOString();
|
|
86
106
|
const lvl = level ? level : void 0;
|
|
87
|
-
|
|
88
|
-
|
|
107
|
+
let tsToken = `[${ts}]`;
|
|
108
|
+
let lvlToken = lvl ? `[${lvl}]` : "";
|
|
109
|
+
if (this.isTTY && !this.isJsonLike) {
|
|
110
|
+
const reset = "\x1B[0m";
|
|
111
|
+
const dim = "\x1B[2m";
|
|
112
|
+
const colours = {
|
|
113
|
+
silent: "",
|
|
114
|
+
error: "\x1B[31m",
|
|
115
|
+
// red
|
|
116
|
+
warn: "\x1B[33m",
|
|
117
|
+
// yellow
|
|
118
|
+
info: "\x1B[36m",
|
|
119
|
+
// cyan
|
|
120
|
+
verbose: "\x1B[35m",
|
|
121
|
+
// magenta
|
|
122
|
+
debug: "\x1B[90m"
|
|
123
|
+
// bright black / gray
|
|
124
|
+
};
|
|
125
|
+
tsToken = `${dim}${tsToken}${reset}`;
|
|
126
|
+
if (lvl) {
|
|
127
|
+
const colour = colours[lvl] || "";
|
|
128
|
+
if (colour) {
|
|
129
|
+
lvlToken = `${colour}${lvlToken}${reset}`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const prefix = lvl ? `${tsToken} ${lvlToken}` : tsToken;
|
|
134
|
+
process.stderr.write(`${prefix} ${decoratedMsg}
|
|
89
135
|
`);
|
|
90
136
|
} else {
|
|
91
|
-
process.stderr.write(
|
|
137
|
+
process.stderr.write(decoratedMsg + "\n");
|
|
92
138
|
}
|
|
93
139
|
} catch {
|
|
94
140
|
}
|
|
@@ -124,4 +170,4 @@ export {
|
|
|
124
170
|
logger_exports,
|
|
125
171
|
init_logger
|
|
126
172
|
};
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
173
|
+
//# sourceMappingURL=chunk-AGIZJ4UZ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/logger.ts"],"sourcesContent":["/*\n * Centralized logger for Visor CLI and Action modes.\n * - Respects output format (suppresses info in JSON/SARIF unless debug)\n * - Supports levels: silent < error < warn < info < verbose < debug\n * - Routes logs to stderr to keep stdout clean for machine-readable output\n */\nimport { context as otContext, trace } from './telemetry/lazy-otel';\n\nexport type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'verbose' | 'debug';\n\nfunction levelToNumber(level: LogLevel): number {\n switch (level) {\n case 'silent':\n return 0;\n case 'error':\n return 10;\n case 'warn':\n return 20;\n case 'info':\n return 30;\n case 'verbose':\n return 40;\n case 'debug':\n return 50;\n }\n}\n\nclass Logger {\n private level: LogLevel = 'info';\n private isJsonLike: boolean = false;\n private isTTY: boolean = typeof process !== 'undefined' ? !!process.stderr.isTTY : false;\n private showTimestamps: boolean = true; // default: always show timestamps\n\n configure(\n opts: {\n outputFormat?: string;\n level?: LogLevel;\n debug?: boolean;\n verbose?: boolean;\n quiet?: boolean;\n } = {}\n ): void {\n // Determine base level\n let lvl: LogLevel = 'info';\n\n if (opts.debug || process.env.VISOR_DEBUG === 'true') {\n lvl = 'debug';\n } else if (opts.verbose || process.env.VISOR_LOG_LEVEL === 'verbose') {\n lvl = 'verbose';\n } else if (opts.quiet || process.env.VISOR_LOG_LEVEL === 'quiet') {\n lvl = 'warn';\n } else if (opts.level) {\n lvl = opts.level;\n } else if (process.env.VISOR_LOG_LEVEL) {\n const envLvl = process.env.VISOR_LOG_LEVEL as LogLevel;\n if (['silent', 'error', 'warn', 'info', 'verbose', 'debug'].includes(envLvl)) {\n lvl = envLvl as LogLevel;\n }\n }\n\n this.level = lvl;\n const output = opts.outputFormat || process.env.VISOR_OUTPUT_FORMAT || 'table';\n // In JSON/SARIF we suppress non-error logs unless explicitly verbose/debug\n this.isJsonLike = output === 'json' || output === 'sarif';\n }\n\n private shouldLog(level: LogLevel): boolean {\n const desired = levelToNumber(level);\n const current = levelToNumber(this.level);\n if (desired > current) return false;\n if (\n this.isJsonLike &&\n desired < levelToNumber('error') &&\n this.level !== 'debug' &&\n this.level !== 'verbose'\n ) {\n // In JSON/SARIF, hide info/warn unless explicitly verbose/debug\n return false;\n }\n return true;\n }\n\n private getTraceSuffix(msg: string): string {\n if (!msg) return '';\n if (msg.includes('trace_id=') || msg.includes('trace_id:')) return '';\n try {\n const span = trace.getSpan(otContext.active()) || trace.getActiveSpan();\n const ctx = span?.spanContext?.();\n if (!ctx?.traceId) return '';\n return ` [trace_id=${ctx.traceId} span_id=${ctx.spanId}]`;\n } catch {\n return '';\n }\n }\n\n private write(msg: string, level?: LogLevel): void {\n // Always route to stderr to keep stdout clean for results\n try {\n const suffix = this.getTraceSuffix(msg);\n const decoratedMsg = suffix ? `${msg}${suffix}` : msg;\n if (this.showTimestamps) {\n const ts = new Date().toISOString();\n const lvl = level ? level : undefined;\n\n let tsToken = `[${ts}]`;\n let lvlToken = lvl ? `[${lvl}]` : '';\n\n // Add simple ANSI colour when running in a TTY and not emitting\n // JSON/SARIF. Colours are intentionally minimal and only applied\n // to the prefix markers, not the full line.\n if (this.isTTY && !this.isJsonLike) {\n const reset = '\\x1b[0m';\n const dim = '\\x1b[2m';\n const colours: Record<LogLevel, string> = {\n silent: '',\n error: '\\x1b[31m', // red\n warn: '\\x1b[33m', // yellow\n info: '\\x1b[36m', // cyan\n verbose: '\\x1b[35m', // magenta\n debug: '\\x1b[90m', // bright black / gray\n };\n\n tsToken = `${dim}${tsToken}${reset}`;\n\n if (lvl) {\n const colour = colours[lvl] || '';\n if (colour) {\n lvlToken = `${colour}${lvlToken}${reset}`;\n }\n }\n }\n\n const prefix = lvl ? `${tsToken} ${lvlToken}` : tsToken;\n process.stderr.write(`${prefix} ${decoratedMsg}\\n`);\n } else {\n process.stderr.write(decoratedMsg + '\\n');\n }\n } catch {\n // Ignore write errors\n }\n }\n\n info(msg: string): void {\n if (this.shouldLog('info')) this.write(msg, 'info');\n }\n\n warn(msg: string): void {\n if (this.shouldLog('warn')) this.write(msg, 'warn');\n }\n\n error(msg: string): void {\n if (this.shouldLog('error')) this.write(msg, 'error');\n }\n\n verbose(msg: string): void {\n if (this.shouldLog('verbose')) this.write(msg, 'verbose');\n }\n\n debug(msg: string): void {\n if (this.shouldLog('debug')) this.write(msg, 'debug');\n }\n\n step(msg: string): void {\n // High-level phase indicator\n if (this.shouldLog('info')) this.write(`▶ ${msg}`, 'info');\n }\n\n success(msg: string): void {\n if (this.shouldLog('info')) this.write(`✔ ${msg}`, 'info');\n }\n}\n\n// Singleton instance\nexport const logger = new Logger();\n\n// Helper to configure from CLI options in a single place\nexport function configureLoggerFromCli(options: {\n output?: string;\n debug?: boolean;\n verbose?: boolean;\n quiet?: boolean;\n}): void {\n logger.configure({\n outputFormat: options.output,\n debug: options.debug,\n verbose: options.verbose,\n quiet: options.quiet,\n });\n\n // Expose output format and debug to process env for modules that need to gate\n // stdout emissions without plumbing the value through every call site.\n try {\n if (options.output) process.env.VISOR_OUTPUT_FORMAT = String(options.output);\n if (typeof options.debug === 'boolean') {\n process.env.VISOR_DEBUG = options.debug ? 'true' : 'false';\n }\n } catch {\n // ignore\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FailureConditionEvaluator,
|
|
3
|
+
init_failure_condition_evaluator
|
|
4
|
+
} from "./chunk-SIWNBRTK.mjs";
|
|
5
|
+
import {
|
|
3
6
|
compileAndRun,
|
|
4
7
|
createSecureSandbox,
|
|
5
|
-
init_failure_condition_evaluator,
|
|
6
8
|
init_sandbox
|
|
7
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-BOVFH3LI.mjs";
|
|
10
|
+
import {
|
|
11
|
+
addEvent,
|
|
12
|
+
init_trace_helpers
|
|
13
|
+
} from "./chunk-ZYAUYXSW.mjs";
|
|
8
14
|
import {
|
|
9
15
|
MemoryStore,
|
|
10
16
|
init_memory_store
|
|
11
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-7UK3NIIT.mjs";
|
|
12
18
|
import {
|
|
13
19
|
init_logger,
|
|
14
20
|
logger
|
|
15
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-AGIZJ4UZ.mjs";
|
|
16
22
|
import {
|
|
17
23
|
__esm,
|
|
18
24
|
__export,
|
|
@@ -204,6 +210,23 @@ function createMemoryHelpers() {
|
|
|
204
210
|
}
|
|
205
211
|
};
|
|
206
212
|
}
|
|
213
|
+
function formatScopeLabel(scope) {
|
|
214
|
+
if (!scope || scope.length === 0) return "";
|
|
215
|
+
return scope.map((item) => `${item.check}:${item.index}`).join("|");
|
|
216
|
+
}
|
|
217
|
+
function recordRoutingEvent(args) {
|
|
218
|
+
const attrs = {
|
|
219
|
+
check_id: args.checkId,
|
|
220
|
+
trigger: args.trigger,
|
|
221
|
+
action: args.action
|
|
222
|
+
};
|
|
223
|
+
if (args.target) attrs.target = args.target;
|
|
224
|
+
if (args.source) attrs.source = args.source;
|
|
225
|
+
const scopeLabel = formatScopeLabel(args.scope);
|
|
226
|
+
if (scopeLabel) attrs.scope = scopeLabel;
|
|
227
|
+
if (args.gotoEvent) attrs.goto_event = args.gotoEvent;
|
|
228
|
+
addEvent("visor.routing", attrs);
|
|
229
|
+
}
|
|
207
230
|
async function handleRouting(context, state, transition, emitEvent, routingContext) {
|
|
208
231
|
const { checkId, scope, result, checkConfig, success } = routingContext;
|
|
209
232
|
logger.info(`[Routing] Evaluating routing for check: ${checkId}, success: ${success}`);
|
|
@@ -266,6 +289,14 @@ async function processOnFinish(checkId, scope, result, checkConfig, context, sta
|
|
|
266
289
|
const itemScope = [
|
|
267
290
|
{ check: checkId, index: itemIndex }
|
|
268
291
|
];
|
|
292
|
+
recordRoutingEvent({
|
|
293
|
+
checkId,
|
|
294
|
+
trigger: "on_finish",
|
|
295
|
+
action: "run",
|
|
296
|
+
target: targetCheck,
|
|
297
|
+
source: "run",
|
|
298
|
+
scope: itemScope
|
|
299
|
+
});
|
|
269
300
|
emitEvent({
|
|
270
301
|
type: "ForwardRunRequested",
|
|
271
302
|
target: targetCheck,
|
|
@@ -276,6 +307,14 @@ async function processOnFinish(checkId, scope, result, checkConfig, context, sta
|
|
|
276
307
|
}
|
|
277
308
|
} else {
|
|
278
309
|
state.routingLoopCount++;
|
|
310
|
+
recordRoutingEvent({
|
|
311
|
+
checkId,
|
|
312
|
+
trigger: "on_finish",
|
|
313
|
+
action: "run",
|
|
314
|
+
target: targetCheck,
|
|
315
|
+
source: "run",
|
|
316
|
+
scope: []
|
|
317
|
+
});
|
|
279
318
|
emitEvent({
|
|
280
319
|
type: "ForwardRunRequested",
|
|
281
320
|
target: targetCheck,
|
|
@@ -312,6 +351,14 @@ async function processOnFinish(checkId, scope, result, checkConfig, context, sta
|
|
|
312
351
|
logger.info(`[Routing] on_finish.run_js: scheduling ${targetCheck}`);
|
|
313
352
|
}
|
|
314
353
|
state.routingLoopCount++;
|
|
354
|
+
recordRoutingEvent({
|
|
355
|
+
checkId,
|
|
356
|
+
trigger: "on_finish",
|
|
357
|
+
action: "run",
|
|
358
|
+
target: targetCheck,
|
|
359
|
+
source: "run_js",
|
|
360
|
+
scope
|
|
361
|
+
});
|
|
315
362
|
emitEvent({
|
|
316
363
|
type: "ForwardRunRequested",
|
|
317
364
|
target: targetCheck,
|
|
@@ -344,6 +391,15 @@ async function processOnFinish(checkId, scope, result, checkConfig, context, sta
|
|
|
344
391
|
return;
|
|
345
392
|
}
|
|
346
393
|
state.routingLoopCount++;
|
|
394
|
+
recordRoutingEvent({
|
|
395
|
+
checkId,
|
|
396
|
+
trigger: "on_finish",
|
|
397
|
+
action: "goto",
|
|
398
|
+
target: finishTransTarget.to,
|
|
399
|
+
source: "transitions",
|
|
400
|
+
scope,
|
|
401
|
+
gotoEvent: finishTransTarget.goto_event
|
|
402
|
+
});
|
|
347
403
|
emitEvent({
|
|
348
404
|
type: "ForwardRunRequested",
|
|
349
405
|
target: finishTransTarget.to,
|
|
@@ -380,6 +436,14 @@ async function processOnFinish(checkId, scope, result, checkConfig, context, sta
|
|
|
380
436
|
logger.info(`[Routing] on_finish.goto: ${gotoTarget}`);
|
|
381
437
|
}
|
|
382
438
|
state.routingLoopCount++;
|
|
439
|
+
recordRoutingEvent({
|
|
440
|
+
checkId,
|
|
441
|
+
trigger: "on_finish",
|
|
442
|
+
action: "goto",
|
|
443
|
+
target: gotoTarget,
|
|
444
|
+
source: onFinish.goto_js ? "goto_js" : "goto",
|
|
445
|
+
scope
|
|
446
|
+
});
|
|
383
447
|
emitEvent({
|
|
384
448
|
type: "ForwardRunRequested",
|
|
385
449
|
target: gotoTarget,
|
|
@@ -528,6 +592,14 @@ async function processOnSuccess(checkId, scope, result, checkConfig, context, st
|
|
|
528
592
|
const itemScope = [
|
|
529
593
|
{ check: checkId, index: itemIndex }
|
|
530
594
|
];
|
|
595
|
+
recordRoutingEvent({
|
|
596
|
+
checkId,
|
|
597
|
+
trigger: "on_success",
|
|
598
|
+
action: "run",
|
|
599
|
+
target: targetCheck,
|
|
600
|
+
source: "run",
|
|
601
|
+
scope: itemScope
|
|
602
|
+
});
|
|
531
603
|
emitEvent({
|
|
532
604
|
type: "ForwardRunRequested",
|
|
533
605
|
target: targetCheck,
|
|
@@ -537,6 +609,14 @@ async function processOnSuccess(checkId, scope, result, checkConfig, context, st
|
|
|
537
609
|
}
|
|
538
610
|
} else {
|
|
539
611
|
state.routingLoopCount++;
|
|
612
|
+
recordRoutingEvent({
|
|
613
|
+
checkId,
|
|
614
|
+
trigger: "on_success",
|
|
615
|
+
action: "run",
|
|
616
|
+
target: targetCheck,
|
|
617
|
+
source: "run",
|
|
618
|
+
scope
|
|
619
|
+
});
|
|
540
620
|
emitEvent({
|
|
541
621
|
type: "ForwardRunRequested",
|
|
542
622
|
target: targetCheck,
|
|
@@ -572,6 +652,14 @@ async function processOnSuccess(checkId, scope, result, checkConfig, context, st
|
|
|
572
652
|
logger.info(`[Routing] on_success.run_js: scheduling ${targetCheck}`);
|
|
573
653
|
}
|
|
574
654
|
state.routingLoopCount++;
|
|
655
|
+
recordRoutingEvent({
|
|
656
|
+
checkId,
|
|
657
|
+
trigger: "on_success",
|
|
658
|
+
action: "run",
|
|
659
|
+
target: targetCheck,
|
|
660
|
+
source: "run_js",
|
|
661
|
+
scope
|
|
662
|
+
});
|
|
575
663
|
emitEvent({
|
|
576
664
|
type: "ForwardRunRequested",
|
|
577
665
|
target: targetCheck,
|
|
@@ -603,6 +691,15 @@ async function processOnSuccess(checkId, scope, result, checkConfig, context, st
|
|
|
603
691
|
return;
|
|
604
692
|
}
|
|
605
693
|
state.routingLoopCount++;
|
|
694
|
+
recordRoutingEvent({
|
|
695
|
+
checkId,
|
|
696
|
+
trigger: "on_success",
|
|
697
|
+
action: "goto",
|
|
698
|
+
target: successTransTarget.to,
|
|
699
|
+
source: "transitions",
|
|
700
|
+
scope,
|
|
701
|
+
gotoEvent: successTransTarget.goto_event
|
|
702
|
+
});
|
|
606
703
|
emitEvent({
|
|
607
704
|
type: "ForwardRunRequested",
|
|
608
705
|
target: successTransTarget.to,
|
|
@@ -640,6 +737,15 @@ async function processOnSuccess(checkId, scope, result, checkConfig, context, st
|
|
|
640
737
|
logger.info(`[Routing] on_success.goto: ${gotoTarget}`);
|
|
641
738
|
}
|
|
642
739
|
state.routingLoopCount++;
|
|
740
|
+
recordRoutingEvent({
|
|
741
|
+
checkId,
|
|
742
|
+
trigger: "on_success",
|
|
743
|
+
action: "goto",
|
|
744
|
+
target: gotoTarget,
|
|
745
|
+
source: onSuccess.goto_js ? "goto_js" : "goto",
|
|
746
|
+
scope,
|
|
747
|
+
gotoEvent: onSuccess.goto_event
|
|
748
|
+
});
|
|
643
749
|
emitEvent({
|
|
644
750
|
type: "ForwardRunRequested",
|
|
645
751
|
target: gotoTarget,
|
|
@@ -692,6 +798,14 @@ async function processOnFail(checkId, scope, result, checkConfig, context, state
|
|
|
692
798
|
const itemScope = [
|
|
693
799
|
{ check: checkId, index: itemIndex }
|
|
694
800
|
];
|
|
801
|
+
recordRoutingEvent({
|
|
802
|
+
checkId,
|
|
803
|
+
trigger: "on_fail",
|
|
804
|
+
action: "run",
|
|
805
|
+
target: targetCheck,
|
|
806
|
+
source: "run",
|
|
807
|
+
scope: itemScope
|
|
808
|
+
});
|
|
695
809
|
emitEvent({
|
|
696
810
|
type: "ForwardRunRequested",
|
|
697
811
|
target: targetCheck,
|
|
@@ -701,6 +815,14 @@ async function processOnFail(checkId, scope, result, checkConfig, context, state
|
|
|
701
815
|
}
|
|
702
816
|
} else {
|
|
703
817
|
state.routingLoopCount++;
|
|
818
|
+
recordRoutingEvent({
|
|
819
|
+
checkId,
|
|
820
|
+
trigger: "on_fail",
|
|
821
|
+
action: "run",
|
|
822
|
+
target: targetCheck,
|
|
823
|
+
source: "run",
|
|
824
|
+
scope
|
|
825
|
+
});
|
|
704
826
|
emitEvent({
|
|
705
827
|
type: "ForwardRunRequested",
|
|
706
828
|
target: targetCheck,
|
|
@@ -736,6 +858,14 @@ async function processOnFail(checkId, scope, result, checkConfig, context, state
|
|
|
736
858
|
logger.info(`[Routing] on_fail.run_js: scheduling ${targetCheck}`);
|
|
737
859
|
}
|
|
738
860
|
state.routingLoopCount++;
|
|
861
|
+
recordRoutingEvent({
|
|
862
|
+
checkId,
|
|
863
|
+
trigger: "on_fail",
|
|
864
|
+
action: "run",
|
|
865
|
+
target: targetCheck,
|
|
866
|
+
source: "run_js",
|
|
867
|
+
scope
|
|
868
|
+
});
|
|
739
869
|
emitEvent({
|
|
740
870
|
type: "ForwardRunRequested",
|
|
741
871
|
target: targetCheck,
|
|
@@ -767,6 +897,13 @@ async function processOnFail(checkId, scope, result, checkConfig, context, state
|
|
|
767
897
|
if (used >= max) return;
|
|
768
898
|
attemptsMap.set(key, used + 1);
|
|
769
899
|
state.routingLoopCount++;
|
|
900
|
+
recordRoutingEvent({
|
|
901
|
+
checkId,
|
|
902
|
+
trigger: "on_fail",
|
|
903
|
+
action: "retry",
|
|
904
|
+
source: "retry",
|
|
905
|
+
scope: sc || []
|
|
906
|
+
});
|
|
770
907
|
emitEvent({
|
|
771
908
|
type: "ForwardRunRequested",
|
|
772
909
|
target: checkId,
|
|
@@ -812,6 +949,15 @@ async function processOnFail(checkId, scope, result, checkConfig, context, state
|
|
|
812
949
|
return;
|
|
813
950
|
}
|
|
814
951
|
state.routingLoopCount++;
|
|
952
|
+
recordRoutingEvent({
|
|
953
|
+
checkId,
|
|
954
|
+
trigger: "on_fail",
|
|
955
|
+
action: "goto",
|
|
956
|
+
target: failTransTarget.to,
|
|
957
|
+
source: "transitions",
|
|
958
|
+
scope,
|
|
959
|
+
gotoEvent: failTransTarget.goto_event
|
|
960
|
+
});
|
|
815
961
|
emitEvent({
|
|
816
962
|
type: "ForwardRunRequested",
|
|
817
963
|
target: failTransTarget.to,
|
|
@@ -849,6 +995,15 @@ async function processOnFail(checkId, scope, result, checkConfig, context, state
|
|
|
849
995
|
logger.info(`[Routing] on_fail.goto: ${gotoTarget}`);
|
|
850
996
|
}
|
|
851
997
|
state.routingLoopCount++;
|
|
998
|
+
recordRoutingEvent({
|
|
999
|
+
checkId,
|
|
1000
|
+
trigger: "on_fail",
|
|
1001
|
+
action: "goto",
|
|
1002
|
+
target: gotoTarget,
|
|
1003
|
+
source: onFail.goto_js ? "goto_js" : "goto",
|
|
1004
|
+
scope,
|
|
1005
|
+
gotoEvent: onFail.goto_event
|
|
1006
|
+
});
|
|
852
1007
|
emitEvent({
|
|
853
1008
|
type: "ForwardRunRequested",
|
|
854
1009
|
target: gotoTarget,
|
|
@@ -1195,6 +1350,7 @@ var DEFAULT_MAX_LOOPS;
|
|
|
1195
1350
|
var init_routing = __esm({
|
|
1196
1351
|
"src/state-machine/states/routing.ts"() {
|
|
1197
1352
|
init_logger();
|
|
1353
|
+
init_trace_helpers();
|
|
1198
1354
|
init_failure_condition_evaluator();
|
|
1199
1355
|
init_sandbox();
|
|
1200
1356
|
init_memory_store();
|
|
@@ -1212,4 +1368,4 @@ export {
|
|
|
1212
1368
|
evaluateTransitions,
|
|
1213
1369
|
init_routing
|
|
1214
1370
|
};
|
|
1215
|
-
//# sourceMappingURL=chunk-
|
|
1371
|
+
//# sourceMappingURL=chunk-AIVFBIS4.mjs.map
|