@probelabs/visor 0.1.132 → 0.1.137
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/config/config-reloader.d.ts +1 -0
- package/dist/config/config-reloader.d.ts.map +1 -1
- package/dist/config/config-watcher.d.ts +1 -0
- package/dist/config/config-watcher.d.ts.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/docs/ai-custom-tools-usage.md +37 -0
- package/dist/docs/ai-custom-tools.md +43 -1
- package/dist/docs/custom-tools.md +70 -1
- package/dist/docs/script.md +542 -27
- package/dist/docs/testing/cookbook.md +47 -0
- package/dist/examples/README.md +4 -0
- package/dist/examples/api-tools-ai-example.yaml +63 -0
- package/dist/examples/api-tools-inline-overlay-example.yaml +126 -0
- package/dist/examples/api-tools-library.yaml +18 -0
- package/dist/examples/api-tools-mcp-example.yaml +55 -0
- package/dist/examples/openapi/profiles-overlay-rename.yaml +3 -0
- package/dist/examples/openapi/users-api.json +91 -0
- package/dist/examples/openapi/users-overlay-rename.yaml +3 -0
- package/dist/generated/config-schema.d.ts +223 -74
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +251 -79
- package/dist/index.js +45128 -25001
- package/dist/output/traces/{run-2026-02-18T11-06-48-673Z.ndjson → run-2026-02-23T08-59-32-321Z.ndjson} +84 -84
- package/dist/{traces/run-2026-02-18T11-07-37-310Z.ndjson → output/traces/run-2026-02-23T09-00-20-148Z.ndjson} +1148 -1063
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/api-tool-executor.d.ts +43 -0
- package/dist/providers/api-tool-executor.d.ts.map +1 -0
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/custom-tool-executor.d.ts +21 -0
- package/dist/providers/custom-tool-executor.d.ts.map +1 -1
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
- package/dist/providers/script-check-provider.d.ts +18 -2
- package/dist/providers/script-check-provider.d.ts.map +1 -1
- package/dist/sdk/{check-provider-registry-7TCA3NSG.mjs → check-provider-registry-BCGP62RY.mjs} +9 -8
- package/dist/sdk/{check-provider-registry-RRUZHGJI.mjs → check-provider-registry-SA2WHPLO.mjs} +9 -8
- package/dist/sdk/{check-provider-registry-4WLTLPMU.mjs → check-provider-registry-SCL4KP55.mjs} +9 -8
- package/dist/sdk/{chunk-LMJNI6RM.mjs → chunk-ALB3N4ZQ.mjs} +12 -5
- package/dist/sdk/{chunk-LMJNI6RM.mjs.map → chunk-ALB3N4ZQ.mjs.map} +1 -1
- package/dist/sdk/{chunk-27RV5RR2.mjs → chunk-BRD36I43.mjs} +3 -3
- package/dist/sdk/{chunk-5VY5QJTY.mjs → chunk-DFKP7LY6.mjs} +1896 -1762
- package/dist/sdk/chunk-DFKP7LY6.mjs.map +1 -0
- package/dist/sdk/{chunk-UBDHAGYY.mjs → chunk-E2N3U5HU.mjs} +5 -5
- package/dist/sdk/{chunk-XGI47XIH.mjs → chunk-F4K5WFSM.mjs} +1896 -1762
- package/dist/sdk/chunk-F4K5WFSM.mjs.map +1 -0
- package/dist/sdk/{chunk-BOGVSF57.mjs → chunk-J6F5K5EG.mjs} +1896 -1762
- package/dist/sdk/chunk-J6F5K5EG.mjs.map +1 -0
- package/dist/sdk/{chunk-U3BLLEW3.mjs → chunk-KPRFDKQX.mjs} +329 -80
- package/dist/sdk/chunk-KPRFDKQX.mjs.map +1 -0
- package/dist/sdk/{chunk-VF6XIUE4.mjs → chunk-LW3INISN.mjs} +32 -1
- package/dist/sdk/{chunk-VF6XIUE4.mjs.map → chunk-LW3INISN.mjs.map} +1 -1
- package/dist/sdk/{chunk-VG7FWDC2.mjs → chunk-QUEWQWDX.mjs} +11 -4
- package/dist/sdk/{chunk-VG7FWDC2.mjs.map → chunk-QUEWQWDX.mjs.map} +1 -1
- package/dist/sdk/{chunk-BGBXLPLL.mjs → chunk-UMFEBYCN.mjs} +5 -5
- package/dist/sdk/chunk-XKCER23W.mjs +1490 -0
- package/dist/sdk/chunk-XKCER23W.mjs.map +1 -0
- package/dist/sdk/{chunk-FAKITJ3J.mjs → chunk-YTAGJZHN.mjs} +3 -3
- package/dist/sdk/{chunk-XJQKTK6V.mjs → chunk-ZUEQNCKB.mjs} +2 -2
- package/dist/sdk/{config-FMIIATKX.mjs → config-3UIU4TMP.mjs} +3 -3
- package/dist/sdk/{failure-condition-evaluator-PNONVBXD.mjs → failure-condition-evaluator-3B3G5NYW.mjs} +4 -4
- package/dist/sdk/{failure-condition-evaluator-MUUAK7MN.mjs → failure-condition-evaluator-B5JJFYKU.mjs} +4 -4
- package/dist/sdk/{github-frontend-DWF6BLZH.mjs → github-frontend-VAWVSCNX.mjs} +4 -4
- package/dist/sdk/{github-frontend-WR4S3NG5.mjs → github-frontend-ZOVXPPHQ.mjs} +4 -4
- package/dist/sdk/{host-S3LSWESP.mjs → host-LOQWBHWT.mjs} +2 -2
- package/dist/sdk/{host-U7V54J2H.mjs → host-TEQ7HKKH.mjs} +2 -2
- package/dist/sdk/{liquid-extensions-YDIIH33Q.mjs → liquid-extensions-PLBOMRLI.mjs} +3 -3
- package/dist/sdk/{routing-MVDVJDYJ.mjs → routing-HR6N43RQ.mjs} +6 -6
- package/dist/sdk/{routing-F4FOWVKF.mjs → routing-SEQYM4N6.mjs} +6 -6
- package/dist/sdk/schedule-tool-2COUUTF7.mjs +18 -0
- package/dist/sdk/{schedule-tool-handler-FRN3KKRM.mjs → schedule-tool-handler-5BDMLHS5.mjs} +9 -8
- package/dist/sdk/{schedule-tool-handler-VFES42DD.mjs → schedule-tool-handler-OXGTPLST.mjs} +9 -8
- package/dist/sdk/{schedule-tool-handler-7DNEGDZC.mjs → schedule-tool-handler-Y2UABBXN.mjs} +9 -8
- package/dist/sdk/sdk.d.mts +55 -2
- package/dist/sdk/sdk.d.ts +55 -2
- package/dist/sdk/sdk.js +2367 -482
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +8 -7
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/{trace-helpers-RDPXIN4S.mjs → trace-helpers-FAAGLXBI.mjs} +2 -2
- package/dist/sdk/{trace-helpers-KSPGA24B.mjs → trace-helpers-IGMH7ZPP.mjs} +2 -2
- package/dist/sdk/{workflow-check-provider-BMVJ6X7N.mjs → workflow-check-provider-7SR7ZWSV.mjs} +9 -8
- package/dist/sdk/{workflow-check-provider-CPGIRZMH.mjs → workflow-check-provider-L2ZUOMJR.mjs} +9 -8
- package/dist/sdk/{workflow-check-provider-4NFWH6YO.mjs → workflow-check-provider-WLA7LO56.mjs} +9 -8
- package/dist/sdk/workflow-check-provider-WLA7LO56.mjs.map +1 -0
- package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
- package/dist/state-machine-execution-engine.d.ts.map +1 -1
- package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -1
- package/dist/test-runner/index.d.ts.map +1 -1
- package/dist/test-runner/validator.d.ts.map +1 -1
- package/dist/traces/{run-2026-02-18T11-06-48-673Z.ndjson → run-2026-02-23T08-59-32-321Z.ndjson} +84 -84
- package/dist/{output/traces/run-2026-02-18T11-07-37-310Z.ndjson → traces/run-2026-02-23T09-00-20-148Z.ndjson} +1148 -1063
- package/dist/types/config.d.ts +55 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/config-loader.d.ts +5 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/sandbox.d.ts +8 -0
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/script-tool-environment.d.ts +90 -0
- package/dist/utils/script-tool-environment.d.ts.map +1 -0
- package/dist/utils/tool-resolver.d.ts +18 -0
- package/dist/utils/tool-resolver.d.ts.map +1 -0
- package/package.json +11 -4
- package/dist/sdk/chunk-5VY5QJTY.mjs.map +0 -1
- package/dist/sdk/chunk-BOGVSF57.mjs.map +0 -1
- package/dist/sdk/chunk-U3BLLEW3.mjs.map +0 -1
- package/dist/sdk/chunk-XGI47XIH.mjs.map +0 -1
- /package/dist/sdk/{check-provider-registry-4WLTLPMU.mjs.map → check-provider-registry-BCGP62RY.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-7TCA3NSG.mjs.map → check-provider-registry-SA2WHPLO.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-RRUZHGJI.mjs.map → check-provider-registry-SCL4KP55.mjs.map} +0 -0
- /package/dist/sdk/{chunk-27RV5RR2.mjs.map → chunk-BRD36I43.mjs.map} +0 -0
- /package/dist/sdk/{chunk-BGBXLPLL.mjs.map → chunk-E2N3U5HU.mjs.map} +0 -0
- /package/dist/sdk/{chunk-UBDHAGYY.mjs.map → chunk-UMFEBYCN.mjs.map} +0 -0
- /package/dist/sdk/{chunk-FAKITJ3J.mjs.map → chunk-YTAGJZHN.mjs.map} +0 -0
- /package/dist/sdk/{chunk-XJQKTK6V.mjs.map → chunk-ZUEQNCKB.mjs.map} +0 -0
- /package/dist/sdk/{config-FMIIATKX.mjs.map → config-3UIU4TMP.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-MUUAK7MN.mjs.map → failure-condition-evaluator-3B3G5NYW.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-PNONVBXD.mjs.map → failure-condition-evaluator-B5JJFYKU.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-DWF6BLZH.mjs.map → github-frontend-VAWVSCNX.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-WR4S3NG5.mjs.map → github-frontend-ZOVXPPHQ.mjs.map} +0 -0
- /package/dist/sdk/{host-S3LSWESP.mjs.map → host-LOQWBHWT.mjs.map} +0 -0
- /package/dist/sdk/{host-U7V54J2H.mjs.map → host-TEQ7HKKH.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-YDIIH33Q.mjs.map → liquid-extensions-PLBOMRLI.mjs.map} +0 -0
- /package/dist/sdk/{routing-F4FOWVKF.mjs.map → routing-HR6N43RQ.mjs.map} +0 -0
- /package/dist/sdk/{routing-MVDVJDYJ.mjs.map → routing-SEQYM4N6.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-7DNEGDZC.mjs.map → schedule-tool-2COUUTF7.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-FRN3KKRM.mjs.map → schedule-tool-handler-5BDMLHS5.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-VFES42DD.mjs.map → schedule-tool-handler-OXGTPLST.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-KSPGA24B.mjs.map → schedule-tool-handler-Y2UABBXN.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-RDPXIN4S.mjs.map → trace-helpers-FAAGLXBI.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-4NFWH6YO.mjs.map → trace-helpers-IGMH7ZPP.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-BMVJ6X7N.mjs.map → workflow-check-provider-7SR7ZWSV.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-CPGIRZMH.mjs.map → workflow-check-provider-L2ZUOMJR.mjs.map} +0 -0
|
@@ -228,6 +228,36 @@ ${src}
|
|
|
228
228
|
}
|
|
229
229
|
return out;
|
|
230
230
|
}
|
|
231
|
+
async function compileAndRunAsync(sandbox, transformedCode, scope, opts = { injectLog: true, logPrefix: "[async-sandbox]" }) {
|
|
232
|
+
const inject = opts?.injectLog === true;
|
|
233
|
+
let safePrefix = String(opts?.logPrefix ?? "[async-sandbox]");
|
|
234
|
+
safePrefix = safePrefix.replace(/[\r\n\t\0]/g, "").replace(/[`$\\]/g, "").replace(/\$\{/g, "").slice(0, 64);
|
|
235
|
+
const scopeWithLog = inject ? {
|
|
236
|
+
...scope,
|
|
237
|
+
log: (...args) => {
|
|
238
|
+
try {
|
|
239
|
+
console.log(safePrefix, ...args);
|
|
240
|
+
} catch {
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
} : scope;
|
|
244
|
+
const codePreview = transformedCode.replace(/\s+/g, " ").trim().slice(0, 100);
|
|
245
|
+
const contextInfo = safePrefix !== "[async-sandbox]" ? ` [${safePrefix}]` : "";
|
|
246
|
+
let exec;
|
|
247
|
+
try {
|
|
248
|
+
exec = sandbox.compileAsync(transformedCode);
|
|
249
|
+
} catch (e) {
|
|
250
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
251
|
+
throw new Error(`async_sandbox_compile_error${contextInfo}: ${msg} | code: ${codePreview}`);
|
|
252
|
+
}
|
|
253
|
+
try {
|
|
254
|
+
const result = await exec(scopeWithLog).run();
|
|
255
|
+
return result;
|
|
256
|
+
} catch (e) {
|
|
257
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
258
|
+
throw new Error(`async_sandbox_execution_error${contextInfo}: ${msg} | code: ${codePreview}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
231
261
|
var init_sandbox = __esm({
|
|
232
262
|
"src/utils/sandbox.ts"() {
|
|
233
263
|
"use strict";
|
|
@@ -238,6 +268,7 @@ export {
|
|
|
238
268
|
validateJsSyntax,
|
|
239
269
|
createSecureSandbox,
|
|
240
270
|
compileAndRun,
|
|
271
|
+
compileAndRunAsync,
|
|
241
272
|
init_sandbox
|
|
242
273
|
};
|
|
243
|
-
//# sourceMappingURL=chunk-
|
|
274
|
+
//# sourceMappingURL=chunk-LW3INISN.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/sandbox.ts"],"sourcesContent":["import Sandbox from '@nyariv/sandboxjs';\n\n/**\n * Centralized helpers for creating and using SandboxJS instances consistently\n * across providers. The goal is to have one place to define allowed globals\n * and prototype whitelists, and to offer a small helper to inject a `log`\n * utility inside user-provided JS snippets.\n */\n\nexport interface CompileOptions {\n injectLog?: boolean;\n logPrefix?: string;\n /** When true, wrap the code in a function and `return` its result */\n wrapFunction?: boolean;\n}\n\nexport interface JsSyntaxValidationResult {\n valid: boolean;\n error?: string;\n}\n\n/**\n * Validate JavaScript syntax without executing it.\n * Uses the sandbox's compile method to check for syntax errors.\n * Returns validation result with error message if invalid.\n */\nexport function validateJsSyntax(code: string): JsSyntaxValidationResult {\n if (!code || typeof code !== 'string') {\n return { valid: false, error: 'Code must be a non-empty string' };\n }\n\n const trimmed = code.trim();\n if (trimmed.length === 0) {\n return { valid: false, error: 'Code cannot be empty' };\n }\n\n // Create a minimal sandbox instance for syntax checking\n const sandbox = createSecureSandbox();\n\n // Wrap code similar to compileAndRun to catch the same syntax issues\n const looksLikeBlock = /\\breturn\\b/.test(trimmed) || /;/.test(trimmed) || /\\n/.test(trimmed);\n const looksLikeIife = /\\)\\s*\\(\\s*\\)\\s*;?$/.test(trimmed);\n const body = looksLikeBlock\n ? looksLikeIife\n ? `return (\\n${trimmed}\\n);\\n`\n : `return (() => {\\n${trimmed}\\n})();\\n`\n : `return (\\n${trimmed}\\n);\\n`;\n\n // For syntax validation, we just need to ensure 'log' is defined so code using it parses correctly\n // No need for unique IDs since validation creates a fresh sandbox and only compiles (no execution)\n const header = `var log = function() {};\\n`;\n const fullCode = `${header}${body}`;\n\n try {\n sandbox.compile(fullCode);\n return { valid: true };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return { valid: false, error: msg };\n }\n}\n\n/**\n * Create a hardened Sandbox with a consistent set of globals and prototype\n * whitelists. This is a superset of the sets previously used by individual\n * providers, kept intentionally minimal and side‑effect free.\n */\nexport function createSecureSandbox(): Sandbox {\n const globals = {\n ...Sandbox.SAFE_GLOBALS,\n Math,\n JSON,\n // Provide console with limited surface. Use trampolines so that any test\n // spies (e.g., jest.spyOn(console, 'log')) see calls made inside the sandbox.\n console: {\n log: (...args: unknown[]) => {\n try {\n (console as any).log(...args);\n } catch {}\n },\n warn: (...args: unknown[]) => {\n try {\n (console as any).warn(...args);\n } catch {}\n },\n error: (...args: unknown[]) => {\n try {\n (console as any).error(...args);\n } catch {}\n },\n },\n } as Record<string, unknown>;\n\n const prototypeWhitelist = new Map(Sandbox.SAFE_PROTOTYPES);\n\n // Arrays — union of methods used around the codebase\n const arrayMethods = new Set<string>([\n // Query/iteration\n 'some',\n 'every',\n 'filter',\n 'map',\n 'reduce',\n 'reduceRight',\n 'find',\n 'findIndex',\n 'findLast',\n 'findLastIndex',\n 'includes',\n 'indexOf',\n 'lastIndexOf',\n 'keys',\n 'values',\n 'entries',\n 'forEach',\n // Non‑mutating ES2023 additions\n 'toReversed',\n 'toSorted',\n 'toSpliced',\n 'with',\n 'at',\n // Mutators and common ops\n 'slice',\n 'concat',\n 'join',\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'sort',\n 'reverse',\n 'copyWithin',\n 'fill',\n // Flattening\n 'flat',\n 'flatMap',\n // Meta\n 'length',\n ]);\n prototypeWhitelist.set(Array.prototype, arrayMethods);\n\n // Strings — allow common, safe manipulation helpers\n const stringMethods = new Set<string>([\n 'toLowerCase',\n 'toUpperCase',\n 'includes',\n 'indexOf',\n 'lastIndexOf',\n 'startsWith',\n 'endsWith',\n 'slice',\n 'substring',\n 'substr',\n 'trim',\n 'trimStart',\n 'trimEnd',\n 'split',\n 'replace',\n 'replaceAll',\n 'match',\n 'matchAll',\n 'charAt',\n 'charCodeAt',\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'padStart',\n 'padEnd',\n 'at',\n 'length',\n ]);\n prototypeWhitelist.set(String.prototype, stringMethods);\n\n // Objects — keep to basic safe operations\n const objectMethods = new Set<string>([\n 'hasOwnProperty',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n ]);\n prototypeWhitelist.set(Object.prototype, objectMethods);\n\n // Keep native constructors from SAFE_GLOBALS; rely on prototype whitelists above.\n\n // Maps and Sets — allow common, safe operations\n const mapMethods = new Set<string>([\n 'get',\n 'set',\n 'has',\n 'delete',\n 'entries',\n 'keys',\n 'values',\n 'forEach',\n ]);\n // @ts-ignore - sandbox typings accept Map.prototype as a key\n prototypeWhitelist.set((Map as any).prototype, mapMethods);\n\n const setMethods = new Set<string>([\n 'add',\n 'has',\n 'delete',\n 'entries',\n 'keys',\n 'values',\n 'forEach',\n ]);\n // @ts-ignore\n prototypeWhitelist.set((Set as any).prototype, setMethods);\n\n // Date and RegExp — read‑only helpers\n const dateMethods = new Set<string>(['toISOString', 'toJSON', 'getTime']);\n // @ts-ignore\n prototypeWhitelist.set((Date as any).prototype, dateMethods);\n\n const regexpMethods = new Set<string>(['test', 'exec']);\n // @ts-ignore\n prototypeWhitelist.set((RegExp as any).prototype, regexpMethods);\n\n return new Sandbox({ globals, prototypeWhitelist });\n}\n\n/**\n * Compile and execute user-provided JS inside the sandbox with optional\n * helper injection. By default, code is wrapped in a function to keep the\n * global scope clean.\n */\nexport function compileAndRun<T = unknown>(\n sandbox: Sandbox,\n userCode: string,\n scope: Record<string, unknown>,\n opts: CompileOptions = { injectLog: true, wrapFunction: true, logPrefix: '[sandbox]' }\n): T {\n const inject = opts?.injectLog === true;\n let safePrefix = String(opts?.logPrefix ?? '[sandbox]');\n // Sanitize prefix aggressively: drop control chars and risky tokens, limit length\n safePrefix = safePrefix\n .replace(/[\\r\\n\\t\\0]/g, '')\n .replace(/[`$\\\\]/g, '') // strip backticks, dollar (template) and backslashes\n .replace(/\\$\\{/g, '') // remove template openings if present\n .slice(0, 64);\n // Inject log function through scope to avoid \"already declared\" errors\n // when multiple sandbox executions run in parallel with shared global state.\n // Only add log when injectLog is true - when false, user code may declare its own log.\n const scopeWithLog = inject\n ? {\n ...scope,\n log: (...args: unknown[]) => {\n try {\n console.log(safePrefix, ...args);\n } catch {}\n },\n }\n : scope;\n // No header needed - log is passed through scope\n const header = '';\n // When wrapping, execute user code inside an IIFE and return its value.\n // This reliably captures the value of the last expression or any explicit\n // return statements inside the script, without requiring the caller to\n // manually `return` at top level.\n // Wrapper heuristic:\n // - If the snippet contains an explicit `return`, semicolons or newlines (likely a block),\n // run it inside an IIFE so `return` works: (() => { code })()\n // - Otherwise treat it as a pure expression and return its value directly.\n const src = String(userCode);\n const looksLikeBlock = /\\breturn\\b/.test(src) || /;/.test(src) || /\\n/.test(src);\n // Heuristic: if the snippet itself looks like an IIFE/callable expression\n // (e.g., `(() => { ... })()` or `(function(){ ... })()`), return its value\n // directly to avoid swallowing the result by nesting it inside another block.\n const looksLikeIife = /\\)\\s*\\(\\s*\\)\\s*;?$/.test(src.trim());\n // Default wrapFunction to true if not explicitly set to false\n const shouldWrap = opts.wrapFunction !== false;\n const body = shouldWrap\n ? looksLikeBlock\n ? looksLikeIife\n ? `return (\\n${src}\\n);\\n`\n : `return (() => {\\n${src}\\n})();\\n`\n : `return (\\n${src}\\n);\\n`\n : `${src}`;\n const code = `${header}${body}`;\n\n // Create code preview for error messages (first 100 chars, single line)\n const codePreview = src.replace(/\\s+/g, ' ').trim().slice(0, 100);\n const contextInfo = safePrefix !== '[sandbox]' ? ` [${safePrefix}]` : '';\n\n let exec: ReturnType<typeof sandbox.compile>;\n try {\n exec = sandbox.compile(code);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`sandbox_compile_error${contextInfo}: ${msg} | code: ${codePreview}`);\n }\n\n let out: any;\n try {\n out = exec(scopeWithLog);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`sandbox_execution_error${contextInfo}: ${msg} | code: ${codePreview}`);\n }\n\n if (out && typeof out.run === 'function') {\n try {\n return out.run();\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`sandbox_runner_error${contextInfo}: ${msg} | code: ${codePreview}`);\n }\n }\n return out as T;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/sandbox.ts"],"sourcesContent":["import Sandbox from '@nyariv/sandboxjs';\n\n/**\n * Centralized helpers for creating and using SandboxJS instances consistently\n * across providers. The goal is to have one place to define allowed globals\n * and prototype whitelists, and to offer a small helper to inject a `log`\n * utility inside user-provided JS snippets.\n */\n\nexport interface CompileOptions {\n injectLog?: boolean;\n logPrefix?: string;\n /** When true, wrap the code in a function and `return` its result */\n wrapFunction?: boolean;\n}\n\nexport interface JsSyntaxValidationResult {\n valid: boolean;\n error?: string;\n}\n\n/**\n * Validate JavaScript syntax without executing it.\n * Uses the sandbox's compile method to check for syntax errors.\n * Returns validation result with error message if invalid.\n */\nexport function validateJsSyntax(code: string): JsSyntaxValidationResult {\n if (!code || typeof code !== 'string') {\n return { valid: false, error: 'Code must be a non-empty string' };\n }\n\n const trimmed = code.trim();\n if (trimmed.length === 0) {\n return { valid: false, error: 'Code cannot be empty' };\n }\n\n // Create a minimal sandbox instance for syntax checking\n const sandbox = createSecureSandbox();\n\n // Wrap code similar to compileAndRun to catch the same syntax issues\n const looksLikeBlock = /\\breturn\\b/.test(trimmed) || /;/.test(trimmed) || /\\n/.test(trimmed);\n const looksLikeIife = /\\)\\s*\\(\\s*\\)\\s*;?$/.test(trimmed);\n const body = looksLikeBlock\n ? looksLikeIife\n ? `return (\\n${trimmed}\\n);\\n`\n : `return (() => {\\n${trimmed}\\n})();\\n`\n : `return (\\n${trimmed}\\n);\\n`;\n\n // For syntax validation, we just need to ensure 'log' is defined so code using it parses correctly\n // No need for unique IDs since validation creates a fresh sandbox and only compiles (no execution)\n const header = `var log = function() {};\\n`;\n const fullCode = `${header}${body}`;\n\n try {\n sandbox.compile(fullCode);\n return { valid: true };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return { valid: false, error: msg };\n }\n}\n\n/**\n * Create a hardened Sandbox with a consistent set of globals and prototype\n * whitelists. This is a superset of the sets previously used by individual\n * providers, kept intentionally minimal and side‑effect free.\n */\nexport function createSecureSandbox(): Sandbox {\n const globals = {\n ...Sandbox.SAFE_GLOBALS,\n Math,\n JSON,\n // Provide console with limited surface. Use trampolines so that any test\n // spies (e.g., jest.spyOn(console, 'log')) see calls made inside the sandbox.\n console: {\n log: (...args: unknown[]) => {\n try {\n (console as any).log(...args);\n } catch {}\n },\n warn: (...args: unknown[]) => {\n try {\n (console as any).warn(...args);\n } catch {}\n },\n error: (...args: unknown[]) => {\n try {\n (console as any).error(...args);\n } catch {}\n },\n },\n } as Record<string, unknown>;\n\n const prototypeWhitelist = new Map(Sandbox.SAFE_PROTOTYPES);\n\n // Arrays — union of methods used around the codebase\n const arrayMethods = new Set<string>([\n // Query/iteration\n 'some',\n 'every',\n 'filter',\n 'map',\n 'reduce',\n 'reduceRight',\n 'find',\n 'findIndex',\n 'findLast',\n 'findLastIndex',\n 'includes',\n 'indexOf',\n 'lastIndexOf',\n 'keys',\n 'values',\n 'entries',\n 'forEach',\n // Non‑mutating ES2023 additions\n 'toReversed',\n 'toSorted',\n 'toSpliced',\n 'with',\n 'at',\n // Mutators and common ops\n 'slice',\n 'concat',\n 'join',\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'sort',\n 'reverse',\n 'copyWithin',\n 'fill',\n // Flattening\n 'flat',\n 'flatMap',\n // Meta\n 'length',\n ]);\n prototypeWhitelist.set(Array.prototype, arrayMethods);\n\n // Strings — allow common, safe manipulation helpers\n const stringMethods = new Set<string>([\n 'toLowerCase',\n 'toUpperCase',\n 'includes',\n 'indexOf',\n 'lastIndexOf',\n 'startsWith',\n 'endsWith',\n 'slice',\n 'substring',\n 'substr',\n 'trim',\n 'trimStart',\n 'trimEnd',\n 'split',\n 'replace',\n 'replaceAll',\n 'match',\n 'matchAll',\n 'charAt',\n 'charCodeAt',\n 'codePointAt',\n 'normalize',\n 'repeat',\n 'padStart',\n 'padEnd',\n 'at',\n 'length',\n ]);\n prototypeWhitelist.set(String.prototype, stringMethods);\n\n // Objects — keep to basic safe operations\n const objectMethods = new Set<string>([\n 'hasOwnProperty',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n ]);\n prototypeWhitelist.set(Object.prototype, objectMethods);\n\n // Keep native constructors from SAFE_GLOBALS; rely on prototype whitelists above.\n\n // Maps and Sets — allow common, safe operations\n const mapMethods = new Set<string>([\n 'get',\n 'set',\n 'has',\n 'delete',\n 'entries',\n 'keys',\n 'values',\n 'forEach',\n ]);\n // @ts-ignore - sandbox typings accept Map.prototype as a key\n prototypeWhitelist.set((Map as any).prototype, mapMethods);\n\n const setMethods = new Set<string>([\n 'add',\n 'has',\n 'delete',\n 'entries',\n 'keys',\n 'values',\n 'forEach',\n ]);\n // @ts-ignore\n prototypeWhitelist.set((Set as any).prototype, setMethods);\n\n // Date and RegExp — read‑only helpers\n const dateMethods = new Set<string>(['toISOString', 'toJSON', 'getTime']);\n // @ts-ignore\n prototypeWhitelist.set((Date as any).prototype, dateMethods);\n\n const regexpMethods = new Set<string>(['test', 'exec']);\n // @ts-ignore\n prototypeWhitelist.set((RegExp as any).prototype, regexpMethods);\n\n return new Sandbox({ globals, prototypeWhitelist });\n}\n\n/**\n * Compile and execute user-provided JS inside the sandbox with optional\n * helper injection. By default, code is wrapped in a function to keep the\n * global scope clean.\n */\nexport function compileAndRun<T = unknown>(\n sandbox: Sandbox,\n userCode: string,\n scope: Record<string, unknown>,\n opts: CompileOptions = { injectLog: true, wrapFunction: true, logPrefix: '[sandbox]' }\n): T {\n const inject = opts?.injectLog === true;\n let safePrefix = String(opts?.logPrefix ?? '[sandbox]');\n // Sanitize prefix aggressively: drop control chars and risky tokens, limit length\n safePrefix = safePrefix\n .replace(/[\\r\\n\\t\\0]/g, '')\n .replace(/[`$\\\\]/g, '') // strip backticks, dollar (template) and backslashes\n .replace(/\\$\\{/g, '') // remove template openings if present\n .slice(0, 64);\n // Inject log function through scope to avoid \"already declared\" errors\n // when multiple sandbox executions run in parallel with shared global state.\n // Only add log when injectLog is true - when false, user code may declare its own log.\n const scopeWithLog = inject\n ? {\n ...scope,\n log: (...args: unknown[]) => {\n try {\n console.log(safePrefix, ...args);\n } catch {}\n },\n }\n : scope;\n // No header needed - log is passed through scope\n const header = '';\n // When wrapping, execute user code inside an IIFE and return its value.\n // This reliably captures the value of the last expression or any explicit\n // return statements inside the script, without requiring the caller to\n // manually `return` at top level.\n // Wrapper heuristic:\n // - If the snippet contains an explicit `return`, semicolons or newlines (likely a block),\n // run it inside an IIFE so `return` works: (() => { code })()\n // - Otherwise treat it as a pure expression and return its value directly.\n const src = String(userCode);\n const looksLikeBlock = /\\breturn\\b/.test(src) || /;/.test(src) || /\\n/.test(src);\n // Heuristic: if the snippet itself looks like an IIFE/callable expression\n // (e.g., `(() => { ... })()` or `(function(){ ... })()`), return its value\n // directly to avoid swallowing the result by nesting it inside another block.\n const looksLikeIife = /\\)\\s*\\(\\s*\\)\\s*;?$/.test(src.trim());\n // Default wrapFunction to true if not explicitly set to false\n const shouldWrap = opts.wrapFunction !== false;\n const body = shouldWrap\n ? looksLikeBlock\n ? looksLikeIife\n ? `return (\\n${src}\\n);\\n`\n : `return (() => {\\n${src}\\n})();\\n`\n : `return (\\n${src}\\n);\\n`\n : `${src}`;\n const code = `${header}${body}`;\n\n // Create code preview for error messages (first 100 chars, single line)\n const codePreview = src.replace(/\\s+/g, ' ').trim().slice(0, 100);\n const contextInfo = safePrefix !== '[sandbox]' ? ` [${safePrefix}]` : '';\n\n let exec: ReturnType<typeof sandbox.compile>;\n try {\n exec = sandbox.compile(code);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`sandbox_compile_error${contextInfo}: ${msg} | code: ${codePreview}`);\n }\n\n let out: any;\n try {\n out = exec(scopeWithLog);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`sandbox_execution_error${contextInfo}: ${msg} | code: ${codePreview}`);\n }\n\n if (out && typeof out.run === 'function') {\n try {\n return out.run();\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`sandbox_runner_error${contextInfo}: ${msg} | code: ${codePreview}`);\n }\n }\n return out as T;\n}\n\n/**\n * Compile and execute user-provided JS with async support.\n *\n * Uses sandbox.compileAsync() + .run() (same pattern as Probe's DSL runtime).\n * The code must already be transformed (async IIFE wrapped) by the caller —\n * this function does NOT apply wrapping heuristics like compileAndRun does.\n */\nexport async function compileAndRunAsync<T = unknown>(\n sandbox: Sandbox,\n transformedCode: string,\n scope: Record<string, unknown>,\n opts: CompileOptions = { injectLog: true, logPrefix: '[async-sandbox]' }\n): Promise<T> {\n const inject = opts?.injectLog === true;\n let safePrefix = String(opts?.logPrefix ?? '[async-sandbox]');\n safePrefix = safePrefix\n .replace(/[\\r\\n\\t\\0]/g, '')\n .replace(/[`$\\\\]/g, '')\n .replace(/\\$\\{/g, '')\n .slice(0, 64);\n\n const scopeWithLog = inject\n ? {\n ...scope,\n log: (...args: unknown[]) => {\n try {\n console.log(safePrefix, ...args);\n } catch {}\n },\n }\n : scope;\n\n const codePreview = transformedCode.replace(/\\s+/g, ' ').trim().slice(0, 100);\n const contextInfo = safePrefix !== '[async-sandbox]' ? ` [${safePrefix}]` : '';\n\n let exec: ReturnType<typeof sandbox.compileAsync>;\n try {\n exec = sandbox.compileAsync(transformedCode);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`async_sandbox_compile_error${contextInfo}: ${msg} | code: ${codePreview}`);\n }\n\n try {\n const result = await exec(scopeWithLog).run();\n return result as T;\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`async_sandbox_execution_error${contextInfo}: ${msg} | code: ${codePreview}`);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -135,9 +135,10 @@ var require_package = __commonJS({
|
|
|
135
135
|
format: "prettier --write src tests",
|
|
136
136
|
"format:check": "prettier --check src tests",
|
|
137
137
|
clean: "",
|
|
138
|
+
"clean:traces": "node scripts/clean-traces.js",
|
|
138
139
|
prebuild: "npm run clean && node scripts/generate-config-schema.js",
|
|
139
|
-
pretest: "node scripts/generate-config-schema.js && npm run build:cli",
|
|
140
|
-
"pretest:unit": "node scripts/generate-config-schema.js && npm run build:cli",
|
|
140
|
+
pretest: "npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli",
|
|
141
|
+
"pretest:unit": "npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli",
|
|
141
142
|
"test:with-build": "npm run build:cli && jest",
|
|
142
143
|
"test:yaml": "node dist/index.js test --progress compact",
|
|
143
144
|
"test:yaml:parallel": "node dist/index.js test --progress compact --max-parallel 4",
|
|
@@ -184,25 +185,31 @@ var require_package = __commonJS({
|
|
|
184
185
|
homepage: "https://github.com/probelabs/visor#readme",
|
|
185
186
|
dependencies: {
|
|
186
187
|
"@actions/core": "^1.11.1",
|
|
188
|
+
"@apidevtools/swagger-parser": "^12.1.0",
|
|
187
189
|
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
188
190
|
"@nyariv/sandboxjs": "github:probelabs/SandboxJS#f1c13b8eee98734a8ea024061eada4aa9a9ff2e9",
|
|
189
191
|
"@octokit/action": "^8.0.2",
|
|
190
192
|
"@octokit/auth-app": "^8.1.0",
|
|
191
193
|
"@octokit/core": "^7.0.3",
|
|
192
194
|
"@octokit/rest": "^22.0.0",
|
|
193
|
-
"@probelabs/probe": "^0.6.0-
|
|
195
|
+
"@probelabs/probe": "^0.6.0-rc255",
|
|
194
196
|
"@types/commander": "^2.12.0",
|
|
195
197
|
"@types/uuid": "^10.0.0",
|
|
198
|
+
acorn: "^8.16.0",
|
|
199
|
+
"acorn-walk": "^8.3.5",
|
|
196
200
|
ajv: "^8.17.1",
|
|
197
201
|
"ajv-formats": "^3.0.1",
|
|
198
202
|
"better-sqlite3": "^11.0.0",
|
|
199
203
|
blessed: "^0.1.81",
|
|
200
204
|
"cli-table3": "^0.6.5",
|
|
201
205
|
commander: "^14.0.0",
|
|
206
|
+
deepmerge: "^4.3.1",
|
|
202
207
|
dotenv: "^17.2.3",
|
|
203
208
|
ignore: "^7.0.5",
|
|
204
209
|
"js-yaml": "^4.1.0",
|
|
210
|
+
"jsonpath-plus": "^10.4.0",
|
|
205
211
|
liquidjs: "^10.21.1",
|
|
212
|
+
minimatch: "^10.2.2",
|
|
206
213
|
"node-cron": "^3.0.3",
|
|
207
214
|
open: "^9.1.0",
|
|
208
215
|
"simple-git": "^3.28.0",
|
|
@@ -433,4 +440,4 @@ export {
|
|
|
433
440
|
trace_helpers_exports,
|
|
434
441
|
init_trace_helpers
|
|
435
442
|
};
|
|
436
|
-
//# sourceMappingURL=chunk-
|
|
443
|
+
//# sourceMappingURL=chunk-QUEWQWDX.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 \"prebuild\": \"npm run clean && node scripts/generate-config-schema.js\",\n \"pretest\": \"node scripts/generate-config-schema.js && npm run build:cli\",\n \"pretest:unit\": \"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 \"@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 \"@probelabs/probe\": \"^0.6.0-rc245\",\n \"@types/commander\": \"^2.12.0\",\n \"@types/uuid\": \"^10.0.0\",\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 \"dotenv\": \"^17.2.3\",\n \"ignore\": \"^7.0.5\",\n \"js-yaml\": \"^4.1.0\",\n \"liquidjs\": \"^10.21.1\",\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 \"@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 \"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 \"@probelabs/probe\": \"^0.6.0-rc255\",\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 \"@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 \"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,20 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FailureConditionEvaluator,
|
|
3
3
|
init_failure_condition_evaluator
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YTAGJZHN.mjs";
|
|
5
5
|
import {
|
|
6
6
|
addEvent,
|
|
7
7
|
init_trace_helpers
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-ALB3N4ZQ.mjs";
|
|
9
9
|
import {
|
|
10
10
|
createExtendedLiquid,
|
|
11
11
|
init_liquid_extensions
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZUEQNCKB.mjs";
|
|
13
13
|
import {
|
|
14
14
|
compileAndRun,
|
|
15
15
|
createSecureSandbox,
|
|
16
16
|
init_sandbox
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-LW3INISN.mjs";
|
|
18
18
|
import {
|
|
19
19
|
MemoryStore,
|
|
20
20
|
init_memory_store
|
|
@@ -1499,4 +1499,4 @@ export {
|
|
|
1499
1499
|
evaluateTransitions,
|
|
1500
1500
|
init_routing
|
|
1501
1501
|
};
|
|
1502
|
-
//# sourceMappingURL=chunk-
|
|
1502
|
+
//# sourceMappingURL=chunk-UMFEBYCN.mjs.map
|