@probelabs/visor 0.1.165 → 0.1.166
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/dist/index.js +525 -120
- package/dist/output/traces/{run-2026-03-06T06-08-10-897Z.ndjson → run-2026-03-06T13-08-34-152Z.ndjson} +84 -84
- package/dist/output/traces/{run-2026-03-06T06-08-55-016Z.ndjson → run-2026-03-06T13-09-10-593Z.ndjson} +1894 -1894
- package/dist/pr-analyzer.d.ts +2 -1
- package/dist/pr-analyzer.d.ts.map +1 -1
- package/dist/providers/http-client-provider.d.ts.map +1 -1
- package/dist/sdk/{check-provider-registry-6P2KJ423.mjs → check-provider-registry-TGPICTHD.mjs} +5 -5
- package/dist/sdk/{check-provider-registry-TTVN3V2O.mjs → check-provider-registry-V6C4LUYJ.mjs} +5 -5
- package/dist/sdk/{check-provider-registry-4SHN3GSH.mjs → check-provider-registry-WXEBJWXY.mjs} +5 -5
- package/dist/sdk/{chunk-EO4IJNM7.mjs → chunk-E7NRUDWL.mjs} +2 -2
- package/dist/sdk/{chunk-LDE33FGE.mjs → chunk-HFCOZPAS.mjs} +3 -3
- package/dist/sdk/{chunk-LDE33FGE.mjs.map → chunk-HFCOZPAS.mjs.map} +1 -1
- package/dist/sdk/{chunk-XDIBL7QB.mjs → chunk-KBTFMYZQ.mjs} +2 -2
- package/dist/sdk/{chunk-G5JBWW3O.mjs → chunk-KKGMGB4X.mjs} +160 -20
- package/dist/sdk/chunk-KKGMGB4X.mjs.map +1 -0
- package/dist/sdk/{chunk-GMHSXC5K.mjs → chunk-OQ3CML4F.mjs} +3 -3
- package/dist/sdk/{chunk-J236ZVYX.mjs → chunk-RV5SK4FZ.mjs} +3 -3
- package/dist/sdk/{chunk-S47KBQQK.mjs → chunk-T5USZCCM.mjs} +2 -2
- package/dist/sdk/{chunk-S47KBQQK.mjs.map → chunk-T5USZCCM.mjs.map} +1 -1
- package/dist/sdk/{chunk-GOJRNYTV.mjs → chunk-WSYVK6ML.mjs} +188 -22
- package/dist/sdk/chunk-WSYVK6ML.mjs.map +1 -0
- package/dist/sdk/{chunk-MYROK4LB.mjs → chunk-ZQR4AGS3.mjs} +160 -20
- package/dist/sdk/chunk-ZQR4AGS3.mjs.map +1 -0
- package/dist/sdk/{failure-condition-evaluator-N3VNLWZD.mjs → failure-condition-evaluator-5EAESM44.mjs} +3 -3
- package/dist/sdk/{failure-condition-evaluator-M6SIUQF4.mjs → failure-condition-evaluator-GPANOHP2.mjs} +3 -3
- package/dist/sdk/{github-frontend-ATORHHF6.mjs → github-frontend-BPRRUIGB.mjs} +3 -3
- package/dist/sdk/{github-frontend-MHXL2Q2V.mjs → github-frontend-P274ISBJ.mjs} +3 -3
- package/dist/sdk/{host-JROON6IT.mjs → host-753E6PKF.mjs} +2 -2
- package/dist/sdk/{host-OBXKDFT7.mjs → host-AIMRV5YL.mjs} +2 -2
- package/dist/sdk/{routing-QCDX43XD.mjs → routing-BXHP2E62.mjs} +4 -4
- package/dist/sdk/{routing-TGJD66Q5.mjs → routing-QHWSMAIH.mjs} +4 -4
- package/dist/sdk/{schedule-tool-D5TSTGP2.mjs → schedule-tool-MQHISNJ6.mjs} +5 -5
- package/dist/sdk/{schedule-tool-XCGJI2VB.mjs → schedule-tool-OCZGLKMJ.mjs} +5 -5
- package/dist/sdk/{schedule-tool-C5QN5OQU.mjs → schedule-tool-ZVOSSFN2.mjs} +5 -5
- package/dist/sdk/{schedule-tool-handler-DKHHPZAG.mjs → schedule-tool-handler-4NCS4ARE.mjs} +5 -5
- package/dist/sdk/{schedule-tool-handler-OKZ53WMC.mjs → schedule-tool-handler-BGOL2TOP.mjs} +5 -5
- package/dist/sdk/{schedule-tool-handler-ZUMPNAVY.mjs → schedule-tool-handler-TZYXM664.mjs} +5 -5
- package/dist/sdk/sdk.js +147 -7
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +4 -4
- package/dist/sdk/{trace-helpers-J5CJ4PUN.mjs → trace-helpers-CTHTK6V5.mjs} +2 -2
- package/dist/sdk/{trace-helpers-KFQJ7IAG.mjs → trace-helpers-UG6FOWVV.mjs} +2 -2
- package/dist/sdk/{workflow-check-provider-T6WFK4RB.mjs → workflow-check-provider-3M5LXLLX.mjs} +5 -5
- package/dist/sdk/{workflow-check-provider-WLUAJPAS.mjs → workflow-check-provider-QKHL6AFT.mjs} +5 -5
- package/dist/sdk/{workflow-check-provider-RBYA6ZGU.mjs → workflow-check-provider-UTNO6XN6.mjs} +5 -5
- package/dist/slack/socket-runner.d.ts +14 -0
- package/dist/slack/socket-runner.d.ts.map +1 -1
- package/dist/traces/{run-2026-03-06T06-08-10-897Z.ndjson → run-2026-03-06T13-08-34-152Z.ndjson} +84 -84
- package/dist/traces/{run-2026-03-06T06-08-55-016Z.ndjson → run-2026-03-06T13-09-10-593Z.ndjson} +1894 -1894
- package/dist/utils/oauth2-token-cache.d.ts +44 -0
- package/dist/utils/oauth2-token-cache.d.ts.map +1 -0
- package/package.json +2 -2
- package/dist/sdk/chunk-G5JBWW3O.mjs.map +0 -1
- package/dist/sdk/chunk-GOJRNYTV.mjs.map +0 -1
- package/dist/sdk/chunk-MYROK4LB.mjs.map +0 -1
- /package/dist/sdk/{check-provider-registry-4SHN3GSH.mjs.map → check-provider-registry-TGPICTHD.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-6P2KJ423.mjs.map → check-provider-registry-V6C4LUYJ.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-TTVN3V2O.mjs.map → check-provider-registry-WXEBJWXY.mjs.map} +0 -0
- /package/dist/sdk/{chunk-EO4IJNM7.mjs.map → chunk-E7NRUDWL.mjs.map} +0 -0
- /package/dist/sdk/{chunk-XDIBL7QB.mjs.map → chunk-KBTFMYZQ.mjs.map} +0 -0
- /package/dist/sdk/{chunk-GMHSXC5K.mjs.map → chunk-OQ3CML4F.mjs.map} +0 -0
- /package/dist/sdk/{chunk-J236ZVYX.mjs.map → chunk-RV5SK4FZ.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-M6SIUQF4.mjs.map → failure-condition-evaluator-5EAESM44.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-N3VNLWZD.mjs.map → failure-condition-evaluator-GPANOHP2.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-ATORHHF6.mjs.map → github-frontend-BPRRUIGB.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-MHXL2Q2V.mjs.map → github-frontend-P274ISBJ.mjs.map} +0 -0
- /package/dist/sdk/{host-JROON6IT.mjs.map → host-753E6PKF.mjs.map} +0 -0
- /package/dist/sdk/{host-OBXKDFT7.mjs.map → host-AIMRV5YL.mjs.map} +0 -0
- /package/dist/sdk/{routing-QCDX43XD.mjs.map → routing-BXHP2E62.mjs.map} +0 -0
- /package/dist/sdk/{routing-TGJD66Q5.mjs.map → routing-QHWSMAIH.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-C5QN5OQU.mjs.map → schedule-tool-MQHISNJ6.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-D5TSTGP2.mjs.map → schedule-tool-OCZGLKMJ.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-XCGJI2VB.mjs.map → schedule-tool-ZVOSSFN2.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-DKHHPZAG.mjs.map → schedule-tool-handler-4NCS4ARE.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-OKZ53WMC.mjs.map → schedule-tool-handler-BGOL2TOP.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-ZUMPNAVY.mjs.map → schedule-tool-handler-TZYXM664.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-J5CJ4PUN.mjs.map → trace-helpers-CTHTK6V5.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-KFQJ7IAG.mjs.map → trace-helpers-UG6FOWVV.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-RBYA6ZGU.mjs.map → workflow-check-provider-3M5LXLLX.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-T6WFK4RB.mjs.map → workflow-check-provider-QKHL6AFT.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-WLUAJPAS.mjs.map → workflow-check-provider-UTNO6XN6.mjs.map} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FailureConditionEvaluator,
|
|
3
3
|
init_failure_condition_evaluator
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KBTFMYZQ.mjs";
|
|
5
5
|
import {
|
|
6
6
|
addEvent,
|
|
7
7
|
init_trace_helpers
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HFCOZPAS.mjs";
|
|
9
9
|
import {
|
|
10
10
|
createExtendedLiquid,
|
|
11
11
|
init_liquid_extensions
|
|
@@ -1499,4 +1499,4 @@ export {
|
|
|
1499
1499
|
evaluateTransitions,
|
|
1500
1500
|
init_routing
|
|
1501
1501
|
};
|
|
1502
|
-
//# sourceMappingURL=chunk-
|
|
1502
|
+
//# sourceMappingURL=chunk-OQ3CML4F.mjs.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FailureConditionEvaluator,
|
|
3
3
|
init_failure_condition_evaluator
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-E7NRUDWL.mjs";
|
|
5
5
|
import {
|
|
6
6
|
addEvent,
|
|
7
7
|
init_trace_helpers
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-T5USZCCM.mjs";
|
|
9
9
|
import {
|
|
10
10
|
createExtendedLiquid,
|
|
11
11
|
init_liquid_extensions
|
|
@@ -1499,4 +1499,4 @@ export {
|
|
|
1499
1499
|
evaluateTransitions,
|
|
1500
1500
|
init_routing
|
|
1501
1501
|
};
|
|
1502
|
-
//# sourceMappingURL=chunk-
|
|
1502
|
+
//# sourceMappingURL=chunk-RV5SK4FZ.mjs.map
|
|
@@ -202,7 +202,7 @@ var require_package = __commonJS({
|
|
|
202
202
|
"@opentelemetry/sdk-node": "^0.203.0",
|
|
203
203
|
"@opentelemetry/sdk-trace-base": "^1.30.1",
|
|
204
204
|
"@opentelemetry/semantic-conventions": "^1.30.1",
|
|
205
|
-
"@probelabs/probe": "^0.6.0-
|
|
205
|
+
"@probelabs/probe": "^0.6.0-rc280",
|
|
206
206
|
"@types/commander": "^2.12.0",
|
|
207
207
|
"@types/uuid": "^10.0.0",
|
|
208
208
|
acorn: "^8.16.0",
|
|
@@ -440,4 +440,4 @@ export {
|
|
|
440
440
|
trace_helpers_exports,
|
|
441
441
|
init_trace_helpers
|
|
442
442
|
};
|
|
443
|
-
//# sourceMappingURL=chunk-
|
|
443
|
+
//# sourceMappingURL=chunk-T5USZCCM.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/telemetry/fallback-ndjson.ts","../../package.json","../../src/telemetry/trace-helpers.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nlet CURRENT_FILE: string | null = null;\nlet dirReady = false;\nlet writeChain: Promise<void> = Promise.resolve();\nfunction resolveTargetPath(outDir: string): string {\n if (process.env.VISOR_FALLBACK_TRACE_FILE) {\n CURRENT_FILE = process.env.VISOR_FALLBACK_TRACE_FILE;\n return CURRENT_FILE;\n }\n if (CURRENT_FILE) return CURRENT_FILE;\n const ts = new Date().toISOString().replace(/[:.]/g, '-');\n CURRENT_FILE = path.join(outDir, `${ts}.ndjson`);\n return CURRENT_FILE;\n}\n\nfunction isEnabled(): boolean {\n // Enable when CLI set a fallback file (serverless mode), or when explicit file sink is enabled\n if (process.env.VISOR_FALLBACK_TRACE_FILE) return true;\n return (\n process.env.VISOR_TELEMETRY_ENABLED === 'true' &&\n (process.env.VISOR_TELEMETRY_SINK || 'file') === 'file'\n );\n}\n\nfunction appendAsync(outDir: string, line: string): void {\n writeChain = writeChain\n .then(async () => {\n if (!dirReady) {\n try {\n await fs.promises.mkdir(outDir, { recursive: true });\n } catch {}\n dirReady = true;\n }\n const target = resolveTargetPath(outDir);\n await fs.promises.appendFile(target, line, 'utf8');\n })\n .catch(() => {});\n}\n\nexport async function flushNdjson(): Promise<void> {\n try {\n await writeChain;\n } catch {}\n}\n\nexport function emitNdjsonFallback(name: string, attrs: Record<string, unknown>): void {\n try {\n if (!isEnabled()) return;\n const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), 'output', 'traces');\n const line = JSON.stringify({ name, attributes: attrs }) + '\\n';\n appendAsync(outDir, line);\n } catch {\n // ignore\n }\n}\n\nexport function emitNdjsonSpanWithEvents(\n name: string,\n attrs: Record<string, unknown>,\n events: Array<{ name: string; attrs?: Record<string, unknown> }>\n): void {\n try {\n if (!isEnabled()) return;\n const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), 'output', 'traces');\n const line = JSON.stringify({ name, attributes: attrs, events }) + '\\n';\n appendAsync(outDir, line);\n } catch {\n // ignore\n }\n}\n","{\n \"name\": \"@probelabs/visor\",\n \"version\": \"0.1.42\",\n \"main\": \"dist/index.js\",\n \"bin\": {\n \"visor\": \"./dist/index.js\"\n },\n \"exports\": {\n \".\": {\n \"require\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\"\n },\n \"./sdk\": {\n \"types\": \"./dist/sdk/sdk.d.ts\",\n \"import\": \"./dist/sdk/sdk.mjs\",\n \"require\": \"./dist/sdk/sdk.js\"\n },\n \"./cli\": {\n \"require\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist/\",\n \"defaults/\",\n \"action.yml\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n },\n \"scripts\": {\n \"build:cli\": \"ncc build src/index.ts -o dist && cp -r defaults dist/ && cp -r output dist/ && cp -r docs dist/ && cp -r examples dist/ && cp -r src/debug-visualizer/ui dist/debug-visualizer/ && node scripts/inject-version.js && echo '#!/usr/bin/env node' | cat - dist/index.js > temp && mv temp dist/index.js && chmod +x dist/index.js\",\n \"build:sdk\": \"tsup src/sdk.ts --dts --sourcemap --format esm,cjs --out-dir dist/sdk\",\n \"build\": \"./scripts/build-oss.sh\",\n \"build:ee\": \"npm run build:cli && npm run build:sdk\",\n \"test\": \"jest && npm run test:yaml\",\n \"test:unit\": \"jest\",\n \"prepublishOnly\": \"npm run build\",\n \"test:watch\": \"jest --watch\",\n \"test:coverage\": \"jest --coverage\",\n \"test:ee\": \"jest --testPathPatterns='tests/ee' --testPathIgnorePatterns='/node_modules/' --no-coverage\",\n \"test:manual:bash\": \"RUN_MANUAL_TESTS=true jest tests/manual/bash-config-manual.test.ts\",\n \"lint\": \"eslint src tests --ext .ts\",\n \"lint:fix\": \"eslint src tests --ext .ts --fix\",\n \"format\": \"prettier --write src tests\",\n \"format:check\": \"prettier --check src tests\",\n \"clean\": \"\",\n \"clean:traces\": \"node scripts/clean-traces.js\",\n \"prebuild\": \"npm run clean && node scripts/generate-config-schema.js\",\n \"pretest\": \"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli\",\n \"pretest:unit\": \"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli\",\n \"test:with-build\": \"npm run build:cli && jest\",\n \"test:yaml\": \"node dist/index.js test --progress compact\",\n \"test:yaml:parallel\": \"node dist/index.js test --progress compact --max-parallel 4\",\n \"prepare\": \"husky\",\n \"pre-commit\": \"lint-staged\",\n \"deploy:site\": \"cd site && npx wrangler pages deploy . --project-name=visor-site --commit-dirty=true\",\n \"deploy:worker\": \"npx wrangler deploy\",\n \"deploy\": \"npm run deploy:site && npm run deploy:worker\",\n \"publish:ee\": \"./scripts/publish-ee.sh\",\n \"release\": \"./scripts/release.sh\",\n \"release:patch\": \"./scripts/release.sh patch\",\n \"release:minor\": \"./scripts/release.sh minor\",\n \"release:major\": \"./scripts/release.sh major\",\n \"release:prerelease\": \"./scripts/release.sh prerelease\",\n \"docs:validate\": \"node scripts/validate-readme-links.js\",\n \"workshop:setup\": \"npm install -D reveal-md@6.1.2\",\n \"workshop:serve\": \"cd workshop && reveal-md slides.md -w\",\n \"workshop:export\": \"reveal-md workshop/slides.md --static workshop/build\",\n \"workshop:pdf\": \"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter\",\n \"workshop:pdf:ci\": \"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter --puppeteer-launch-args=\\\"--no-sandbox --disable-dev-shm-usage\\\"\",\n \"workshop:pdf:a4\": \"reveal-md workshop/slides.md --print workshop/Visor-Workshop-A4.pdf --print-size A4\",\n \"workshop:build\": \"npm run workshop:export && npm run workshop:pdf\",\n \"simulate:issue\": \"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issues --action opened --debug\",\n \"simulate:comment\": \"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issue_comment --action created --debug\"\n },\n \"keywords\": [\n \"code-review\",\n \"ai\",\n \"github-action\",\n \"cli\",\n \"pr-review\",\n \"visor\"\n ],\n \"author\": \"Probe Labs\",\n \"license\": \"MIT\",\n \"description\": \"AI workflow engine for code review, assistants, and automation — orchestrate checks, MCP tools, and AI providers with YAML-driven pipelines\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/probelabs/visor.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/probelabs/visor/issues\"\n },\n \"homepage\": \"https://github.com/probelabs/visor#readme\",\n \"dependencies\": {\n \"@actions/core\": \"^1.11.1\",\n \"@apidevtools/swagger-parser\": \"^12.1.0\",\n \"@modelcontextprotocol/sdk\": \"^1.25.3\",\n \"@nyariv/sandboxjs\": \"github:probelabs/SandboxJS#f1c13b8eee98734a8ea024061eada4aa9a9ff2e9\",\n \"@octokit/action\": \"^8.0.2\",\n \"@octokit/auth-app\": \"^8.1.0\",\n \"@octokit/core\": \"^7.0.3\",\n \"@octokit/rest\": \"^22.0.0\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/core\": \"^1.30.1\",\n \"@opentelemetry/exporter-trace-otlp-grpc\": \"^0.203.0\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"^0.203.0\",\n \"@opentelemetry/instrumentation\": \"^0.203.0\",\n \"@opentelemetry/resources\": \"^1.30.1\",\n \"@opentelemetry/sdk-metrics\": \"^1.30.1\",\n \"@opentelemetry/sdk-node\": \"^0.203.0\",\n \"@opentelemetry/sdk-trace-base\": \"^1.30.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.30.1\",\n \"@probelabs/probe\": \"^0.6.0-rc278\",\n \"@types/commander\": \"^2.12.0\",\n \"@types/uuid\": \"^10.0.0\",\n \"acorn\": \"^8.16.0\",\n \"acorn-walk\": \"^8.3.5\",\n \"ajv\": \"^8.17.1\",\n \"ajv-formats\": \"^3.0.1\",\n \"better-sqlite3\": \"^11.0.0\",\n \"blessed\": \"^0.1.81\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^14.0.0\",\n \"deepmerge\": \"^4.3.1\",\n \"dotenv\": \"^17.2.3\",\n \"ignore\": \"^7.0.5\",\n \"js-yaml\": \"^4.1.0\",\n \"jsonpath-plus\": \"^10.4.0\",\n \"liquidjs\": \"^10.21.1\",\n \"minimatch\": \"^10.2.2\",\n \"node-cron\": \"^3.0.3\",\n \"open\": \"^9.1.0\",\n \"simple-git\": \"^3.28.0\",\n \"uuid\": \"^11.1.0\",\n \"ws\": \"^8.18.3\"\n },\n \"optionalDependencies\": {\n \"@anthropic/claude-code-sdk\": \"npm:null@*\",\n \"@open-policy-agent/opa-wasm\": \"^1.10.0\",\n \"knex\": \"^3.1.0\",\n \"mysql2\": \"^3.11.0\",\n \"pg\": \"^8.13.0\",\n \"tedious\": \"^19.0.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.34.0\",\n \"@kie/act-js\": \"^2.6.2\",\n \"@kie/mock-github\": \"^2.0.1\",\n \"@swc/core\": \"^1.13.2\",\n \"@swc/jest\": \"^0.2.37\",\n \"@types/better-sqlite3\": \"^7.6.0\",\n \"@types/blessed\": \"^0.1.27\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.3.0\",\n \"@types/node-cron\": \"^3.0.11\",\n \"@types/ws\": \"^8.18.1\",\n \"@typescript-eslint/eslint-plugin\": \"^8.42.0\",\n \"@typescript-eslint/parser\": \"^8.42.0\",\n \"@vercel/ncc\": \"^0.38.4\",\n \"eslint\": \"^9.34.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-prettier\": \"^5.5.4\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^30.1.3\",\n \"lint-staged\": \"^16.1.6\",\n \"prettier\": \"^3.6.2\",\n \"reveal-md\": \"^6.1.2\",\n \"ts-json-schema-generator\": \"^1.5.1\",\n \"ts-node\": \"^10.9.2\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.9.2\",\n \"wrangler\": \"^3.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@anthropic/claude-code-sdk\": {\n \"optional\": true\n }\n },\n \"directories\": {\n \"test\": \"tests\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"tests/**/*.{ts,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"*.{json,md,yml,yaml}\": [\n \"prettier --write\"\n ]\n }\n}\n","import { context as otContext, Span, SpanStatusCode, trace, Attributes } from './lazy-otel';\n\nexport function getTracer() {\n return trace.getTracer('visor');\n}\n\nexport async function withActiveSpan<T>(\n name: string,\n attrs: Record<string, unknown> | undefined,\n fn: (span: Span) => Promise<T>\n): Promise<T> {\n const tracer = getTracer();\n // Preserve parent context via tracer API; avoid logging parent IDs to stdout\n // Avoid noisy stdout logs that break JSON consumers\n return await new Promise<T>((resolve, reject) => {\n const callback = async (span: Span) => {\n // console.debug(`[trace] Span callback invoked for: [trace_id=${ctx.traceId} span_id=${ctx.spanId}] ${name} span: true`);\n try {\n const res = await fn(span);\n // console.debug('[trace] Span execution completed for:', name);\n resolve(res);\n } catch (err) {\n // console.debug('[trace] Span execution errored for:', name, err);\n try {\n if (err instanceof Error) span.recordException(err);\n span.setStatus({ code: SpanStatusCode.ERROR });\n } catch {}\n reject(err);\n } finally {\n try {\n // console.debug('[trace] Ending span:', name);\n span.end();\n } catch {}\n }\n };\n // startActiveSpan should use the current active context to set parent automatically\n const options = attrs ? { attributes: attrs as Attributes } : {};\n tracer.startActiveSpan(name, options, callback);\n });\n}\n\nexport function addEvent(name: string, attrs?: Record<string, unknown>): void {\n const span = trace.getSpan(otContext.active());\n if (span) {\n try {\n span.addEvent(name, attrs as Attributes);\n } catch {\n // ignore\n }\n }\n // Fallback NDJSON emission for serverless/file sink when SDK may be inactive\n try {\n const { emitNdjsonSpanWithEvents } = require('./fallback-ndjson');\n emitNdjsonSpanWithEvents('visor.event', {}, [{ name, attrs }]);\n if (name === 'fail_if.triggered') {\n emitNdjsonSpanWithEvents('visor.event', {}, [\n { name: 'fail_if.evaluated', attrs },\n { name: 'fail_if.triggered', attrs },\n ]);\n }\n } catch {}\n}\n\nexport function setSpanAttributes(attrs: Record<string, unknown>): void {\n const span = trace.getSpan(otContext.active());\n if (!span) return;\n try {\n for (const [k, v] of Object.entries(attrs)) span.setAttribute(k, v as never);\n } catch {\n // ignore\n }\n}\n\nexport function setSpanError(err: unknown): void {\n const span = trace.getSpan(otContext.active());\n if (!span) return;\n try {\n if (err instanceof Error) span.recordException(err);\n span.setStatus({ code: SpanStatusCode.ERROR });\n } catch {\n // ignore\n }\n}\n\n/**\n * Return standard visor.* resource attributes for the root `visor.run` span.\n * Reads version from package.json / env and git commit short SHA from env.\n */\nexport function getVisorRunAttributes(): Record<string, string> {\n const attrs: Record<string, string> = {};\n try {\n attrs['visor.version'] =\n process.env.VISOR_VERSION || (require('../../package.json')?.version ?? 'dev');\n } catch {\n attrs['visor.version'] = 'dev';\n }\n const commitShort = process.env.VISOR_COMMIT_SHORT || '';\n const commitFull = process.env.VISOR_COMMIT_SHA || process.env.VISOR_COMMIT || '';\n if (commitShort) {\n attrs['visor.commit'] = commitShort;\n }\n if (commitFull) {\n attrs['visor.commit.sha'] = commitFull;\n }\n return attrs;\n}\n\n// Internal helper for tests: write a minimal run marker to NDJSON when using file sink\nlet __ndjsonPath: string | null = null;\nexport function __getOrCreateNdjsonPath(): string | null {\n try {\n // If sink is explicitly set to non-file, skip. If unset, still allow when a trace dir/file is configured.\n if (process.env.VISOR_TELEMETRY_SINK && process.env.VISOR_TELEMETRY_SINK !== 'file')\n return null;\n const path = require('path');\n const fs = require('fs');\n // Prefer explicit fallback file path if set by the CLI\n if (process.env.VISOR_FALLBACK_TRACE_FILE) {\n __ndjsonPath = process.env.VISOR_FALLBACK_TRACE_FILE;\n const dir = path.dirname(__ndjsonPath);\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n return __ndjsonPath;\n }\n const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), 'output', 'traces');\n if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });\n if (!__ndjsonPath) {\n const ts = new Date().toISOString().replace(/[:.]/g, '-');\n __ndjsonPath = path.join(outDir, `${ts}.ndjson`);\n }\n return __ndjsonPath;\n } catch {\n return null;\n }\n}\nexport function _appendRunMarker(): void {\n try {\n const fs = require('fs');\n const p = __getOrCreateNdjsonPath();\n if (!p) return;\n const line = { name: 'visor.run', attributes: { started: true } };\n fs.appendFileSync(p, JSON.stringify(line) + '\\n', 'utf8');\n } catch {}\n}\n"],"mappings":"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","names":["emitNdjsonSpanWithEvents","path","fs"]}
|
|
1
|
+
{"version":3,"sources":["../../src/telemetry/fallback-ndjson.ts","../../package.json","../../src/telemetry/trace-helpers.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nlet CURRENT_FILE: string | null = null;\nlet dirReady = false;\nlet writeChain: Promise<void> = Promise.resolve();\nfunction resolveTargetPath(outDir: string): string {\n if (process.env.VISOR_FALLBACK_TRACE_FILE) {\n CURRENT_FILE = process.env.VISOR_FALLBACK_TRACE_FILE;\n return CURRENT_FILE;\n }\n if (CURRENT_FILE) return CURRENT_FILE;\n const ts = new Date().toISOString().replace(/[:.]/g, '-');\n CURRENT_FILE = path.join(outDir, `${ts}.ndjson`);\n return CURRENT_FILE;\n}\n\nfunction isEnabled(): boolean {\n // Enable when CLI set a fallback file (serverless mode), or when explicit file sink is enabled\n if (process.env.VISOR_FALLBACK_TRACE_FILE) return true;\n return (\n process.env.VISOR_TELEMETRY_ENABLED === 'true' &&\n (process.env.VISOR_TELEMETRY_SINK || 'file') === 'file'\n );\n}\n\nfunction appendAsync(outDir: string, line: string): void {\n writeChain = writeChain\n .then(async () => {\n if (!dirReady) {\n try {\n await fs.promises.mkdir(outDir, { recursive: true });\n } catch {}\n dirReady = true;\n }\n const target = resolveTargetPath(outDir);\n await fs.promises.appendFile(target, line, 'utf8');\n })\n .catch(() => {});\n}\n\nexport async function flushNdjson(): Promise<void> {\n try {\n await writeChain;\n } catch {}\n}\n\nexport function emitNdjsonFallback(name: string, attrs: Record<string, unknown>): void {\n try {\n if (!isEnabled()) return;\n const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), 'output', 'traces');\n const line = JSON.stringify({ name, attributes: attrs }) + '\\n';\n appendAsync(outDir, line);\n } catch {\n // ignore\n }\n}\n\nexport function emitNdjsonSpanWithEvents(\n name: string,\n attrs: Record<string, unknown>,\n events: Array<{ name: string; attrs?: Record<string, unknown> }>\n): void {\n try {\n if (!isEnabled()) return;\n const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), 'output', 'traces');\n const line = JSON.stringify({ name, attributes: attrs, events }) + '\\n';\n appendAsync(outDir, line);\n } catch {\n // ignore\n }\n}\n","{\n \"name\": \"@probelabs/visor\",\n \"version\": \"0.1.42\",\n \"main\": \"dist/index.js\",\n \"bin\": {\n \"visor\": \"./dist/index.js\"\n },\n \"exports\": {\n \".\": {\n \"require\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\"\n },\n \"./sdk\": {\n \"types\": \"./dist/sdk/sdk.d.ts\",\n \"import\": \"./dist/sdk/sdk.mjs\",\n \"require\": \"./dist/sdk/sdk.js\"\n },\n \"./cli\": {\n \"require\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist/\",\n \"defaults/\",\n \"action.yml\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n },\n \"scripts\": {\n \"build:cli\": \"ncc build src/index.ts -o dist && cp -r defaults dist/ && cp -r output dist/ && cp -r docs dist/ && cp -r examples dist/ && cp -r src/debug-visualizer/ui dist/debug-visualizer/ && node scripts/inject-version.js && echo '#!/usr/bin/env node' | cat - dist/index.js > temp && mv temp dist/index.js && chmod +x dist/index.js\",\n \"build:sdk\": \"tsup src/sdk.ts --dts --sourcemap --format esm,cjs --out-dir dist/sdk\",\n \"build\": \"./scripts/build-oss.sh\",\n \"build:ee\": \"npm run build:cli && npm run build:sdk\",\n \"test\": \"jest && npm run test:yaml\",\n \"test:unit\": \"jest\",\n \"prepublishOnly\": \"npm run build\",\n \"test:watch\": \"jest --watch\",\n \"test:coverage\": \"jest --coverage\",\n \"test:ee\": \"jest --testPathPatterns='tests/ee' --testPathIgnorePatterns='/node_modules/' --no-coverage\",\n \"test:manual:bash\": \"RUN_MANUAL_TESTS=true jest tests/manual/bash-config-manual.test.ts\",\n \"lint\": \"eslint src tests --ext .ts\",\n \"lint:fix\": \"eslint src tests --ext .ts --fix\",\n \"format\": \"prettier --write src tests\",\n \"format:check\": \"prettier --check src tests\",\n \"clean\": \"\",\n \"clean:traces\": \"node scripts/clean-traces.js\",\n \"prebuild\": \"npm run clean && node scripts/generate-config-schema.js\",\n \"pretest\": \"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli\",\n \"pretest:unit\": \"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli\",\n \"test:with-build\": \"npm run build:cli && jest\",\n \"test:yaml\": \"node dist/index.js test --progress compact\",\n \"test:yaml:parallel\": \"node dist/index.js test --progress compact --max-parallel 4\",\n \"prepare\": \"husky\",\n \"pre-commit\": \"lint-staged\",\n \"deploy:site\": \"cd site && npx wrangler pages deploy . --project-name=visor-site --commit-dirty=true\",\n \"deploy:worker\": \"npx wrangler deploy\",\n \"deploy\": \"npm run deploy:site && npm run deploy:worker\",\n \"publish:ee\": \"./scripts/publish-ee.sh\",\n \"release\": \"./scripts/release.sh\",\n \"release:patch\": \"./scripts/release.sh patch\",\n \"release:minor\": \"./scripts/release.sh minor\",\n \"release:major\": \"./scripts/release.sh major\",\n \"release:prerelease\": \"./scripts/release.sh prerelease\",\n \"docs:validate\": \"node scripts/validate-readme-links.js\",\n \"workshop:setup\": \"npm install -D reveal-md@6.1.2\",\n \"workshop:serve\": \"cd workshop && reveal-md slides.md -w\",\n \"workshop:export\": \"reveal-md workshop/slides.md --static workshop/build\",\n \"workshop:pdf\": \"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter\",\n \"workshop:pdf:ci\": \"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter --puppeteer-launch-args=\\\"--no-sandbox --disable-dev-shm-usage\\\"\",\n \"workshop:pdf:a4\": \"reveal-md workshop/slides.md --print workshop/Visor-Workshop-A4.pdf --print-size A4\",\n \"workshop:build\": \"npm run workshop:export && npm run workshop:pdf\",\n \"simulate:issue\": \"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issues --action opened --debug\",\n \"simulate:comment\": \"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issue_comment --action created --debug\"\n },\n \"keywords\": [\n \"code-review\",\n \"ai\",\n \"github-action\",\n \"cli\",\n \"pr-review\",\n \"visor\"\n ],\n \"author\": \"Probe Labs\",\n \"license\": \"MIT\",\n \"description\": \"AI workflow engine for code review, assistants, and automation — orchestrate checks, MCP tools, and AI providers with YAML-driven pipelines\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/probelabs/visor.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/probelabs/visor/issues\"\n },\n \"homepage\": \"https://github.com/probelabs/visor#readme\",\n \"dependencies\": {\n \"@actions/core\": \"^1.11.1\",\n \"@apidevtools/swagger-parser\": \"^12.1.0\",\n \"@modelcontextprotocol/sdk\": \"^1.25.3\",\n \"@nyariv/sandboxjs\": \"github:probelabs/SandboxJS#f1c13b8eee98734a8ea024061eada4aa9a9ff2e9\",\n \"@octokit/action\": \"^8.0.2\",\n \"@octokit/auth-app\": \"^8.1.0\",\n \"@octokit/core\": \"^7.0.3\",\n \"@octokit/rest\": \"^22.0.0\",\n \"@opentelemetry/api\": \"^1.9.0\",\n \"@opentelemetry/core\": \"^1.30.1\",\n \"@opentelemetry/exporter-trace-otlp-grpc\": \"^0.203.0\",\n \"@opentelemetry/exporter-trace-otlp-http\": \"^0.203.0\",\n \"@opentelemetry/instrumentation\": \"^0.203.0\",\n \"@opentelemetry/resources\": \"^1.30.1\",\n \"@opentelemetry/sdk-metrics\": \"^1.30.1\",\n \"@opentelemetry/sdk-node\": \"^0.203.0\",\n \"@opentelemetry/sdk-trace-base\": \"^1.30.1\",\n \"@opentelemetry/semantic-conventions\": \"^1.30.1\",\n \"@probelabs/probe\": \"^0.6.0-rc280\",\n \"@types/commander\": \"^2.12.0\",\n \"@types/uuid\": \"^10.0.0\",\n \"acorn\": \"^8.16.0\",\n \"acorn-walk\": \"^8.3.5\",\n \"ajv\": \"^8.17.1\",\n \"ajv-formats\": \"^3.0.1\",\n \"better-sqlite3\": \"^11.0.0\",\n \"blessed\": \"^0.1.81\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^14.0.0\",\n \"deepmerge\": \"^4.3.1\",\n \"dotenv\": \"^17.2.3\",\n \"ignore\": \"^7.0.5\",\n \"js-yaml\": \"^4.1.0\",\n \"jsonpath-plus\": \"^10.4.0\",\n \"liquidjs\": \"^10.21.1\",\n \"minimatch\": \"^10.2.2\",\n \"node-cron\": \"^3.0.3\",\n \"open\": \"^9.1.0\",\n \"simple-git\": \"^3.28.0\",\n \"uuid\": \"^11.1.0\",\n \"ws\": \"^8.18.3\"\n },\n \"optionalDependencies\": {\n \"@anthropic/claude-code-sdk\": \"npm:null@*\",\n \"@open-policy-agent/opa-wasm\": \"^1.10.0\",\n \"knex\": \"^3.1.0\",\n \"mysql2\": \"^3.11.0\",\n \"pg\": \"^8.13.0\",\n \"tedious\": \"^19.0.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.34.0\",\n \"@kie/act-js\": \"^2.6.2\",\n \"@kie/mock-github\": \"^2.0.1\",\n \"@swc/core\": \"^1.13.2\",\n \"@swc/jest\": \"^0.2.37\",\n \"@types/better-sqlite3\": \"^7.6.0\",\n \"@types/blessed\": \"^0.1.27\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.3.0\",\n \"@types/node-cron\": \"^3.0.11\",\n \"@types/ws\": \"^8.18.1\",\n \"@typescript-eslint/eslint-plugin\": \"^8.42.0\",\n \"@typescript-eslint/parser\": \"^8.42.0\",\n \"@vercel/ncc\": \"^0.38.4\",\n \"eslint\": \"^9.34.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-prettier\": \"^5.5.4\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^30.1.3\",\n \"lint-staged\": \"^16.1.6\",\n \"prettier\": \"^3.6.2\",\n \"reveal-md\": \"^6.1.2\",\n \"ts-json-schema-generator\": \"^1.5.1\",\n \"ts-node\": \"^10.9.2\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.9.2\",\n \"wrangler\": \"^3.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@anthropic/claude-code-sdk\": {\n \"optional\": true\n }\n },\n \"directories\": {\n \"test\": \"tests\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"tests/**/*.{ts,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"*.{json,md,yml,yaml}\": [\n \"prettier --write\"\n ]\n }\n}\n","import { context as otContext, Span, SpanStatusCode, trace, Attributes } from './lazy-otel';\n\nexport function getTracer() {\n return trace.getTracer('visor');\n}\n\nexport async function withActiveSpan<T>(\n name: string,\n attrs: Record<string, unknown> | undefined,\n fn: (span: Span) => Promise<T>\n): Promise<T> {\n const tracer = getTracer();\n // Preserve parent context via tracer API; avoid logging parent IDs to stdout\n // Avoid noisy stdout logs that break JSON consumers\n return await new Promise<T>((resolve, reject) => {\n const callback = async (span: Span) => {\n // console.debug(`[trace] Span callback invoked for: [trace_id=${ctx.traceId} span_id=${ctx.spanId}] ${name} span: true`);\n try {\n const res = await fn(span);\n // console.debug('[trace] Span execution completed for:', name);\n resolve(res);\n } catch (err) {\n // console.debug('[trace] Span execution errored for:', name, err);\n try {\n if (err instanceof Error) span.recordException(err);\n span.setStatus({ code: SpanStatusCode.ERROR });\n } catch {}\n reject(err);\n } finally {\n try {\n // console.debug('[trace] Ending span:', name);\n span.end();\n } catch {}\n }\n };\n // startActiveSpan should use the current active context to set parent automatically\n const options = attrs ? { attributes: attrs as Attributes } : {};\n tracer.startActiveSpan(name, options, callback);\n });\n}\n\nexport function addEvent(name: string, attrs?: Record<string, unknown>): void {\n const span = trace.getSpan(otContext.active());\n if (span) {\n try {\n span.addEvent(name, attrs as Attributes);\n } catch {\n // ignore\n }\n }\n // Fallback NDJSON emission for serverless/file sink when SDK may be inactive\n try {\n const { emitNdjsonSpanWithEvents } = require('./fallback-ndjson');\n emitNdjsonSpanWithEvents('visor.event', {}, [{ name, attrs }]);\n if (name === 'fail_if.triggered') {\n emitNdjsonSpanWithEvents('visor.event', {}, [\n { name: 'fail_if.evaluated', attrs },\n { name: 'fail_if.triggered', attrs },\n ]);\n }\n } catch {}\n}\n\nexport function setSpanAttributes(attrs: Record<string, unknown>): void {\n const span = trace.getSpan(otContext.active());\n if (!span) return;\n try {\n for (const [k, v] of Object.entries(attrs)) span.setAttribute(k, v as never);\n } catch {\n // ignore\n }\n}\n\nexport function setSpanError(err: unknown): void {\n const span = trace.getSpan(otContext.active());\n if (!span) return;\n try {\n if (err instanceof Error) span.recordException(err);\n span.setStatus({ code: SpanStatusCode.ERROR });\n } catch {\n // ignore\n }\n}\n\n/**\n * Return standard visor.* resource attributes for the root `visor.run` span.\n * Reads version from package.json / env and git commit short SHA from env.\n */\nexport function getVisorRunAttributes(): Record<string, string> {\n const attrs: Record<string, string> = {};\n try {\n attrs['visor.version'] =\n process.env.VISOR_VERSION || (require('../../package.json')?.version ?? 'dev');\n } catch {\n attrs['visor.version'] = 'dev';\n }\n const commitShort = process.env.VISOR_COMMIT_SHORT || '';\n const commitFull = process.env.VISOR_COMMIT_SHA || process.env.VISOR_COMMIT || '';\n if (commitShort) {\n attrs['visor.commit'] = commitShort;\n }\n if (commitFull) {\n attrs['visor.commit.sha'] = commitFull;\n }\n return attrs;\n}\n\n// Internal helper for tests: write a minimal run marker to NDJSON when using file sink\nlet __ndjsonPath: string | null = null;\nexport function __getOrCreateNdjsonPath(): string | null {\n try {\n // If sink is explicitly set to non-file, skip. If unset, still allow when a trace dir/file is configured.\n if (process.env.VISOR_TELEMETRY_SINK && process.env.VISOR_TELEMETRY_SINK !== 'file')\n return null;\n const path = require('path');\n const fs = require('fs');\n // Prefer explicit fallback file path if set by the CLI\n if (process.env.VISOR_FALLBACK_TRACE_FILE) {\n __ndjsonPath = process.env.VISOR_FALLBACK_TRACE_FILE;\n const dir = path.dirname(__ndjsonPath);\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n return __ndjsonPath;\n }\n const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), 'output', 'traces');\n if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });\n if (!__ndjsonPath) {\n const ts = new Date().toISOString().replace(/[:.]/g, '-');\n __ndjsonPath = path.join(outDir, `${ts}.ndjson`);\n }\n return __ndjsonPath;\n } catch {\n return null;\n }\n}\nexport function _appendRunMarker(): void {\n try {\n const fs = require('fs');\n const p = __getOrCreateNdjsonPath();\n if (!p) return;\n const line = { name: 'visor.run', attributes: { started: true } };\n fs.appendFileSync(p, JSON.stringify(line) + '\\n', 'utf8');\n } catch {}\n}\n"],"mappings":"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","names":["emitNdjsonSpanWithEvents","path","fs"]}
|
|
@@ -42,11 +42,11 @@ import {
|
|
|
42
42
|
init_routing,
|
|
43
43
|
init_snapshot_store,
|
|
44
44
|
snapshot_store_exports
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-RV5SK4FZ.mjs";
|
|
46
46
|
import {
|
|
47
47
|
FailureConditionEvaluator,
|
|
48
48
|
init_failure_condition_evaluator
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-E7NRUDWL.mjs";
|
|
50
50
|
import {
|
|
51
51
|
addEvent,
|
|
52
52
|
emitNdjsonFallback,
|
|
@@ -57,7 +57,7 @@ import {
|
|
|
57
57
|
setSpanAttributes,
|
|
58
58
|
trace_helpers_exports,
|
|
59
59
|
withActiveSpan
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-T5USZCCM.mjs";
|
|
61
61
|
import {
|
|
62
62
|
addDiagramBlock,
|
|
63
63
|
init_metrics
|
|
@@ -3965,7 +3965,7 @@ async function executeWorkflowAsTool(workflowId, args, context2, argsOverrides)
|
|
|
3965
3965
|
...args,
|
|
3966
3966
|
...argsOverrides
|
|
3967
3967
|
};
|
|
3968
|
-
const { WorkflowCheckProvider: WorkflowCheckProvider2 } = await import("./workflow-check-provider-
|
|
3968
|
+
const { WorkflowCheckProvider: WorkflowCheckProvider2 } = await import("./workflow-check-provider-QKHL6AFT.mjs");
|
|
3969
3969
|
const provider = new WorkflowCheckProvider2();
|
|
3970
3970
|
const checkConfig = {
|
|
3971
3971
|
type: "workflow",
|
|
@@ -9261,7 +9261,7 @@ async function executeCheckWithForEachItems2(checkId, forEachParent, forEachItem
|
|
|
9261
9261
|
}
|
|
9262
9262
|
}
|
|
9263
9263
|
try {
|
|
9264
|
-
const { evaluateTransitions } = await import("./routing-
|
|
9264
|
+
const { evaluateTransitions } = await import("./routing-BXHP2E62.mjs");
|
|
9265
9265
|
const transTarget = await evaluateTransitions(
|
|
9266
9266
|
onFinish.transitions,
|
|
9267
9267
|
forEachParent,
|
|
@@ -9321,7 +9321,7 @@ async function executeCheckWithForEachItems2(checkId, forEachParent, forEachItem
|
|
|
9321
9321
|
`[LevelDispatch] Error evaluating on_finish transitions for ${forEachParent}: ${e instanceof Error ? e.message : String(e)}`
|
|
9322
9322
|
);
|
|
9323
9323
|
}
|
|
9324
|
-
const { evaluateGoto: evaluateGoto2 } = await import("./routing-
|
|
9324
|
+
const { evaluateGoto: evaluateGoto2 } = await import("./routing-BXHP2E62.mjs");
|
|
9325
9325
|
if (context2.debug) {
|
|
9326
9326
|
logger.info(
|
|
9327
9327
|
`[LevelDispatch] Evaluating on_finish.goto_js for forEach parent: ${forEachParent}`
|
|
@@ -13033,7 +13033,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13033
13033
|
try {
|
|
13034
13034
|
const map = options?.webhookContext?.webhookData;
|
|
13035
13035
|
if (map) {
|
|
13036
|
-
const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-
|
|
13036
|
+
const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-TGPICTHD.mjs");
|
|
13037
13037
|
const reg = CheckProviderRegistry2.getInstance();
|
|
13038
13038
|
const p = reg.getProvider("http_input");
|
|
13039
13039
|
if (p && typeof p.setWebhookContext === "function") p.setWebhookContext(map);
|
|
@@ -13156,7 +13156,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13156
13156
|
tag_filter: tagFilter
|
|
13157
13157
|
} : config;
|
|
13158
13158
|
try {
|
|
13159
|
-
const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-
|
|
13159
|
+
const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-TGPICTHD.mjs");
|
|
13160
13160
|
const registry = CheckProviderRegistry2.getInstance();
|
|
13161
13161
|
registry.setCustomTools(configWithTagFilter.tools || {});
|
|
13162
13162
|
} catch (error) {
|
|
@@ -13220,7 +13220,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13220
13220
|
try {
|
|
13221
13221
|
const webhookData = this.executionContext?.webhookContext?.webhookData;
|
|
13222
13222
|
if (webhookData instanceof Map) {
|
|
13223
|
-
const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-
|
|
13223
|
+
const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-TZYXM664.mjs");
|
|
13224
13224
|
const slackCtx = extractSlackContext2(webhookData);
|
|
13225
13225
|
if (slackCtx) {
|
|
13226
13226
|
const payload = Array.from(webhookData.values())[0];
|
|
@@ -13249,7 +13249,7 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13249
13249
|
if (Array.isArray(configWithTagFilter.frontends) && configWithTagFilter.frontends.length > 0) {
|
|
13250
13250
|
try {
|
|
13251
13251
|
const { EventBus } = await import("./event-bus-5K3Y2FCS.mjs");
|
|
13252
|
-
const { FrontendsHost } = await import("./host-
|
|
13252
|
+
const { FrontendsHost } = await import("./host-AIMRV5YL.mjs");
|
|
13253
13253
|
const bus = new EventBus();
|
|
13254
13254
|
context2.eventBus = bus;
|
|
13255
13255
|
frontendsHost = new FrontendsHost(bus, logger);
|
|
@@ -13599,9 +13599,9 @@ var init_state_machine_execution_engine = __esm({
|
|
|
13599
13599
|
* @returns Array of failure condition evaluation results
|
|
13600
13600
|
*/
|
|
13601
13601
|
async evaluateFailureConditions(checkName, reviewSummary, config, previousOutputs, authorAssociation) {
|
|
13602
|
-
const { FailureConditionEvaluator: FailureConditionEvaluator2 } = await import("./failure-condition-evaluator-
|
|
13602
|
+
const { FailureConditionEvaluator: FailureConditionEvaluator2 } = await import("./failure-condition-evaluator-GPANOHP2.mjs");
|
|
13603
13603
|
const evaluator = new FailureConditionEvaluator2();
|
|
13604
|
-
const { addEvent: addEvent3 } = await import("./trace-helpers-
|
|
13604
|
+
const { addEvent: addEvent3 } = await import("./trace-helpers-UG6FOWVV.mjs");
|
|
13605
13605
|
const { addFailIfTriggered } = await import("./metrics-I6A7IHG4.mjs");
|
|
13606
13606
|
const checkConfig = config.checks?.[checkName];
|
|
13607
13607
|
if (!checkConfig) {
|
|
@@ -17056,7 +17056,20 @@ ${preview}`);
|
|
|
17056
17056
|
aiConfig.apiKey = aiAny2.apiKey;
|
|
17057
17057
|
}
|
|
17058
17058
|
if (aiAny2.model !== void 0) {
|
|
17059
|
-
|
|
17059
|
+
let modelVal = String(aiAny2.model);
|
|
17060
|
+
if (modelVal.includes("{{")) {
|
|
17061
|
+
try {
|
|
17062
|
+
const rendered = await this.liquidEngine.parseAndRender(modelVal, {
|
|
17063
|
+
inputs: config.workflowInputs || {},
|
|
17064
|
+
env: process.env
|
|
17065
|
+
});
|
|
17066
|
+
modelVal = rendered.trim();
|
|
17067
|
+
} catch {
|
|
17068
|
+
}
|
|
17069
|
+
}
|
|
17070
|
+
if (modelVal) {
|
|
17071
|
+
aiConfig.model = modelVal;
|
|
17072
|
+
}
|
|
17060
17073
|
}
|
|
17061
17074
|
if (aiAny2.timeout !== void 0) {
|
|
17062
17075
|
aiConfig.timeout = aiAny2.timeout;
|
|
@@ -17066,7 +17079,20 @@ ${preview}`);
|
|
|
17066
17079
|
aiConfig.maxIterations = Number(raw);
|
|
17067
17080
|
}
|
|
17068
17081
|
if (aiAny2.provider !== void 0) {
|
|
17069
|
-
|
|
17082
|
+
let providerVal = String(aiAny2.provider);
|
|
17083
|
+
if (providerVal.includes("{{")) {
|
|
17084
|
+
try {
|
|
17085
|
+
const rendered = await this.liquidEngine.parseAndRender(providerVal, {
|
|
17086
|
+
inputs: config.workflowInputs || {},
|
|
17087
|
+
env: process.env
|
|
17088
|
+
});
|
|
17089
|
+
providerVal = rendered.trim();
|
|
17090
|
+
} catch {
|
|
17091
|
+
}
|
|
17092
|
+
}
|
|
17093
|
+
if (providerVal) {
|
|
17094
|
+
aiConfig.provider = providerVal;
|
|
17095
|
+
}
|
|
17070
17096
|
}
|
|
17071
17097
|
if (aiAny2.debug !== void 0) {
|
|
17072
17098
|
aiConfig.debug = aiAny2.debug;
|
|
@@ -18737,6 +18763,112 @@ var init_template_context = __esm({
|
|
|
18737
18763
|
}
|
|
18738
18764
|
});
|
|
18739
18765
|
|
|
18766
|
+
// src/utils/oauth2-token-cache.ts
|
|
18767
|
+
var OAuth2TokenCache;
|
|
18768
|
+
var init_oauth2_token_cache = __esm({
|
|
18769
|
+
"src/utils/oauth2-token-cache.ts"() {
|
|
18770
|
+
"use strict";
|
|
18771
|
+
init_logger();
|
|
18772
|
+
init_env_resolver();
|
|
18773
|
+
OAuth2TokenCache = class _OAuth2TokenCache {
|
|
18774
|
+
static instance;
|
|
18775
|
+
cache = /* @__PURE__ */ new Map();
|
|
18776
|
+
static getInstance() {
|
|
18777
|
+
if (!_OAuth2TokenCache.instance) {
|
|
18778
|
+
_OAuth2TokenCache.instance = new _OAuth2TokenCache();
|
|
18779
|
+
}
|
|
18780
|
+
return _OAuth2TokenCache.instance;
|
|
18781
|
+
}
|
|
18782
|
+
/** Visible for testing */
|
|
18783
|
+
static resetInstance() {
|
|
18784
|
+
_OAuth2TokenCache.instance = void 0;
|
|
18785
|
+
}
|
|
18786
|
+
/**
|
|
18787
|
+
* Get a valid Bearer token for the given config.
|
|
18788
|
+
* Returns a cached token if still valid, otherwise fetches a new one.
|
|
18789
|
+
*/
|
|
18790
|
+
async getToken(config) {
|
|
18791
|
+
const clientId = String(EnvironmentResolver.resolveValue(config.client_id));
|
|
18792
|
+
const clientSecret = String(EnvironmentResolver.resolveValue(config.client_secret));
|
|
18793
|
+
const tokenUrl = String(EnvironmentResolver.resolveValue(config.token_url));
|
|
18794
|
+
const bufferMs = (config.token_ttl_buffer ?? 300) * 1e3;
|
|
18795
|
+
const cacheKey = `${tokenUrl}|${clientId}`;
|
|
18796
|
+
const cached = this.cache.get(cacheKey);
|
|
18797
|
+
if (cached && cached.expires_at - bufferMs > Date.now()) {
|
|
18798
|
+
logger.verbose("[oauth2] Using cached token");
|
|
18799
|
+
return cached.access_token;
|
|
18800
|
+
}
|
|
18801
|
+
if (cached?.refreshPromise) {
|
|
18802
|
+
logger.verbose("[oauth2] Awaiting in-flight token refresh");
|
|
18803
|
+
return cached.refreshPromise;
|
|
18804
|
+
}
|
|
18805
|
+
const refreshPromise = this.fetchToken(tokenUrl, clientId, clientSecret, config.scopes);
|
|
18806
|
+
if (cached) {
|
|
18807
|
+
cached.refreshPromise = refreshPromise;
|
|
18808
|
+
} else {
|
|
18809
|
+
this.cache.set(cacheKey, {
|
|
18810
|
+
access_token: "",
|
|
18811
|
+
expires_at: 0,
|
|
18812
|
+
refreshPromise
|
|
18813
|
+
});
|
|
18814
|
+
}
|
|
18815
|
+
try {
|
|
18816
|
+
const token = await refreshPromise;
|
|
18817
|
+
return token;
|
|
18818
|
+
} finally {
|
|
18819
|
+
const entry = this.cache.get(cacheKey);
|
|
18820
|
+
if (entry) {
|
|
18821
|
+
entry.refreshPromise = void 0;
|
|
18822
|
+
}
|
|
18823
|
+
}
|
|
18824
|
+
}
|
|
18825
|
+
async fetchToken(tokenUrl, clientId, clientSecret, scopes) {
|
|
18826
|
+
logger.verbose(`[oauth2] Fetching token from ${tokenUrl}`);
|
|
18827
|
+
const credentials = Buffer.from(`${clientId}:${clientSecret}`).toString("base64");
|
|
18828
|
+
const bodyParams = new URLSearchParams({ grant_type: "client_credentials" });
|
|
18829
|
+
if (scopes?.length) {
|
|
18830
|
+
bodyParams.set("scope", scopes.join(" "));
|
|
18831
|
+
}
|
|
18832
|
+
const response = await fetch(tokenUrl, {
|
|
18833
|
+
method: "POST",
|
|
18834
|
+
headers: {
|
|
18835
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
18836
|
+
Authorization: `Basic ${credentials}`
|
|
18837
|
+
},
|
|
18838
|
+
body: bodyParams.toString()
|
|
18839
|
+
});
|
|
18840
|
+
if (!response.ok) {
|
|
18841
|
+
let errorDetail = "";
|
|
18842
|
+
try {
|
|
18843
|
+
errorDetail = await response.text();
|
|
18844
|
+
} catch {
|
|
18845
|
+
}
|
|
18846
|
+
throw new Error(
|
|
18847
|
+
`OAuth2 token request failed: HTTP ${response.status} ${response.statusText}${errorDetail ? ` - ${errorDetail.substring(0, 200)}` : ""}`
|
|
18848
|
+
);
|
|
18849
|
+
}
|
|
18850
|
+
const data = await response.json();
|
|
18851
|
+
if (!data.access_token) {
|
|
18852
|
+
throw new Error("OAuth2 token response missing access_token");
|
|
18853
|
+
}
|
|
18854
|
+
const expiresIn = data.expires_in ?? 3600;
|
|
18855
|
+
const expiresAt = Date.now() + expiresIn * 1e3;
|
|
18856
|
+
const cacheKey = `${tokenUrl}|${clientId}`;
|
|
18857
|
+
this.cache.set(cacheKey, {
|
|
18858
|
+
access_token: data.access_token,
|
|
18859
|
+
expires_at: expiresAt
|
|
18860
|
+
});
|
|
18861
|
+
logger.verbose(`[oauth2] Token acquired, expires in ${expiresIn}s`);
|
|
18862
|
+
return data.access_token;
|
|
18863
|
+
}
|
|
18864
|
+
/** Clear all cached tokens (for testing or credential rotation) */
|
|
18865
|
+
clear() {
|
|
18866
|
+
this.cache.clear();
|
|
18867
|
+
}
|
|
18868
|
+
};
|
|
18869
|
+
}
|
|
18870
|
+
});
|
|
18871
|
+
|
|
18740
18872
|
// src/providers/http-client-provider.ts
|
|
18741
18873
|
import * as fs8 from "fs";
|
|
18742
18874
|
import * as path10 from "path";
|
|
@@ -18749,6 +18881,7 @@ var init_http_client_provider = __esm({
|
|
|
18749
18881
|
init_env_resolver();
|
|
18750
18882
|
init_sandbox();
|
|
18751
18883
|
init_template_context();
|
|
18884
|
+
init_oauth2_token_cache();
|
|
18752
18885
|
init_logger();
|
|
18753
18886
|
HttpClientProvider = class extends CheckProvider {
|
|
18754
18887
|
liquid;
|
|
@@ -18774,24 +18907,43 @@ var init_http_client_provider = __esm({
|
|
|
18774
18907
|
if (cfg.type !== "http_client") {
|
|
18775
18908
|
return false;
|
|
18776
18909
|
}
|
|
18777
|
-
|
|
18910
|
+
const hasUrl = typeof cfg.url === "string" && cfg.url;
|
|
18911
|
+
const hasBaseUrl = typeof cfg.base_url === "string" && cfg.base_url;
|
|
18912
|
+
if (!hasUrl && !hasBaseUrl) {
|
|
18778
18913
|
return false;
|
|
18779
18914
|
}
|
|
18780
18915
|
try {
|
|
18781
|
-
new URL(cfg.url);
|
|
18916
|
+
new URL(hasUrl ? cfg.url : cfg.base_url);
|
|
18782
18917
|
return true;
|
|
18783
18918
|
} catch {
|
|
18784
18919
|
return false;
|
|
18785
18920
|
}
|
|
18786
18921
|
}
|
|
18787
18922
|
async execute(prInfo, config, dependencyResults, context2) {
|
|
18788
|
-
const
|
|
18923
|
+
const baseUrl = config.base_url;
|
|
18924
|
+
const rawPath = config.path;
|
|
18925
|
+
const pathParams = config.params || {};
|
|
18926
|
+
const queryParams = config.query || {};
|
|
18927
|
+
const authConfig = config.auth;
|
|
18928
|
+
let url;
|
|
18929
|
+
if (baseUrl && rawPath) {
|
|
18930
|
+
let resolvedPath = rawPath;
|
|
18931
|
+
for (const [key, value] of Object.entries(pathParams)) {
|
|
18932
|
+
resolvedPath = resolvedPath.replace(`{${key}}`, encodeURIComponent(value));
|
|
18933
|
+
}
|
|
18934
|
+
url = `${baseUrl.replace(/\/+$/, "")}/${resolvedPath.replace(/^\/+/, "")}`;
|
|
18935
|
+
if (Object.keys(queryParams).length > 0) {
|
|
18936
|
+
const qs = new URLSearchParams(queryParams).toString();
|
|
18937
|
+
url += `${url.includes("?") ? "&" : "?"}${qs}`;
|
|
18938
|
+
}
|
|
18939
|
+
} else {
|
|
18940
|
+
url = config.url;
|
|
18941
|
+
}
|
|
18789
18942
|
const method = config.method || "GET";
|
|
18790
18943
|
const headers = config.headers || {};
|
|
18791
18944
|
const timeout = config.timeout || 3e4;
|
|
18792
18945
|
const transform = config.transform;
|
|
18793
18946
|
const transformJs = config.transform_js;
|
|
18794
|
-
const bodyTemplate = config.body;
|
|
18795
18947
|
const outputFileTemplate = config.output_file;
|
|
18796
18948
|
const skipIfExists = config.skip_if_exists !== false;
|
|
18797
18949
|
let resolvedUrlForErrors = url;
|
|
@@ -18815,7 +18967,11 @@ var init_http_client_provider = __esm({
|
|
|
18815
18967
|
resolvedUrlForErrors = renderedUrl;
|
|
18816
18968
|
}
|
|
18817
18969
|
let requestBody;
|
|
18818
|
-
|
|
18970
|
+
const rawBody = config.body;
|
|
18971
|
+
const bodyTemplate = typeof rawBody === "string" ? rawBody : void 0;
|
|
18972
|
+
if (rawBody && typeof rawBody === "object") {
|
|
18973
|
+
requestBody = JSON.stringify(rawBody);
|
|
18974
|
+
} else if (bodyTemplate) {
|
|
18819
18975
|
let resolvedBody = String(EnvironmentResolver.resolveValue(bodyTemplate));
|
|
18820
18976
|
if (resolvedBody.includes("{{") || resolvedBody.includes("{%")) {
|
|
18821
18977
|
resolvedBody = await this.liquid.parseAndRender(resolvedBody, templateContext);
|
|
@@ -18834,6 +18990,11 @@ var init_http_client_provider = __esm({
|
|
|
18834
18990
|
logger.verbose(`[http_client] ${key}: ${maskedValue}`);
|
|
18835
18991
|
}
|
|
18836
18992
|
}
|
|
18993
|
+
if (authConfig?.type === "oauth2_client_credentials") {
|
|
18994
|
+
const tokenCache = OAuth2TokenCache.getInstance();
|
|
18995
|
+
const token = await tokenCache.getToken(authConfig);
|
|
18996
|
+
resolvedHeaders["Authorization"] = `Bearer ${token}`;
|
|
18997
|
+
}
|
|
18837
18998
|
let resolvedOutputFile;
|
|
18838
18999
|
if (outputFileTemplate) {
|
|
18839
19000
|
let outputPath = String(EnvironmentResolver.resolveValue(outputFileTemplate));
|
|
@@ -19112,6 +19273,11 @@ var init_http_client_provider = __esm({
|
|
|
19112
19273
|
return [
|
|
19113
19274
|
"type",
|
|
19114
19275
|
"url",
|
|
19276
|
+
"base_url",
|
|
19277
|
+
"path",
|
|
19278
|
+
"params",
|
|
19279
|
+
"query",
|
|
19280
|
+
"auth",
|
|
19115
19281
|
"method",
|
|
19116
19282
|
"headers",
|
|
19117
19283
|
"body",
|
|
@@ -40742,8 +40908,8 @@ function buildBuiltinGlobals(opts) {
|
|
|
40742
40908
|
const asyncFunctionNames = /* @__PURE__ */ new Set();
|
|
40743
40909
|
const scheduleFn = async (args = {}) => {
|
|
40744
40910
|
try {
|
|
40745
|
-
const { handleScheduleAction: handleScheduleAction2, buildScheduleToolContext: buildScheduleToolContext2 } = await import("./schedule-tool-
|
|
40746
|
-
const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-
|
|
40911
|
+
const { handleScheduleAction: handleScheduleAction2, buildScheduleToolContext: buildScheduleToolContext2 } = await import("./schedule-tool-MQHISNJ6.mjs");
|
|
40912
|
+
const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-TZYXM664.mjs");
|
|
40747
40913
|
const parentCtx = opts.sessionInfo?._parentContext;
|
|
40748
40914
|
const webhookData = parentCtx?.prInfo?.eventContext?.webhookData;
|
|
40749
40915
|
const visorCfg = parentCtx?.config;
|
|
@@ -43888,4 +44054,4 @@ undici/lib/fetch/body.js:
|
|
|
43888
44054
|
undici/lib/websocket/frame.js:
|
|
43889
44055
|
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
|
|
43890
44056
|
*/
|
|
43891
|
-
//# sourceMappingURL=chunk-
|
|
44057
|
+
//# sourceMappingURL=chunk-WSYVK6ML.mjs.map
|