@probelabs/visor 0.1.183-ee → 0.1.184-ee
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-protocol/task-live-update-slack.d.ts +24 -0
- package/dist/agent-protocol/task-live-update-slack.d.ts.map +1 -0
- package/dist/agent-protocol/task-live-update-teams.d.ts +25 -0
- package/dist/agent-protocol/task-live-update-teams.d.ts.map +1 -0
- package/dist/agent-protocol/task-live-update-telegram.d.ts +25 -0
- package/dist/agent-protocol/task-live-update-telegram.d.ts.map +1 -0
- package/dist/agent-protocol/task-live-updates.d.ts +102 -0
- package/dist/agent-protocol/task-live-updates.d.ts.map +1 -0
- package/dist/agent-protocol/task-progress-tool.d.ts.map +1 -1
- package/dist/agent-protocol/task-trace-resolution.d.ts +11 -0
- package/dist/agent-protocol/task-trace-resolution.d.ts.map +1 -0
- package/dist/agent-protocol/trace-serializer.d.ts.map +1 -1
- package/dist/agent-protocol/track-execution.d.ts +8 -0
- package/dist/agent-protocol/track-execution.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/frontends/slack-frontend.d.ts +2 -0
- package/dist/frontends/slack-frontend.d.ts.map +1 -1
- package/dist/frontends/teams-frontend.d.ts.map +1 -1
- package/dist/frontends/telegram-frontend.d.ts.map +1 -1
- package/dist/generated/config-schema.d.ts +110 -6
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/index.js +2239 -261
- package/dist/logger.d.ts +4 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/mcp-job-manager.d.ts +70 -0
- package/dist/mcp-job-manager.d.ts.map +1 -0
- package/dist/mcp-server.d.ts +6 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/runners/mcp-server-runner.d.ts +4 -0
- package/dist/runners/mcp-server-runner.d.ts.map +1 -1
- package/dist/runners/runner-factory.d.ts.map +1 -1
- package/dist/sdk/{a2a-frontend-5YDHFQXD.mjs → a2a-frontend-OI4OVSKC.mjs} +4 -4
- package/dist/sdk/check-provider-registry-RITJW67U.mjs +32 -0
- package/dist/sdk/check-provider-registry-ZZ6N4GDP.mjs +32 -0
- package/dist/sdk/{chunk-4BN2XI4X.mjs → chunk-4HIWZA6M.mjs} +2 -2
- package/dist/sdk/{chunk-RI4ONH5X.mjs → chunk-4MHHELVZ.mjs} +2 -2
- package/dist/sdk/{chunk-J27D43HS.mjs → chunk-4ZLYHSN4.mjs} +2 -2
- package/dist/sdk/{chunk-ZPYODGYA.mjs → chunk-6E625R3C.mjs} +19 -4
- package/dist/sdk/chunk-6E625R3C.mjs.map +1 -0
- package/dist/sdk/{chunk-GA2TYKSR.mjs → chunk-7XKHFRPN.mjs} +4 -4
- package/dist/sdk/{chunk-6C3R6E42.mjs → chunk-IY5PQ5EN.mjs} +30 -6
- package/dist/sdk/chunk-IY5PQ5EN.mjs.map +1 -0
- package/dist/sdk/{chunk-MFXPJUUE.mjs → chunk-PUHU6UY6.mjs} +4 -3
- package/dist/sdk/chunk-PUHU6UY6.mjs.map +1 -0
- package/dist/sdk/{chunk-XOAEKFKB.mjs → chunk-QLT42TX7.mjs} +2 -2
- package/dist/sdk/chunk-SRU5TFNY.mjs +620 -0
- package/dist/sdk/chunk-SRU5TFNY.mjs.map +1 -0
- package/dist/sdk/{chunk-P2K4VOMU.mjs → chunk-TSX3YS3F.mjs} +3 -3
- package/dist/sdk/{chunk-WKLJ57WF.mjs → chunk-UM7LGO2P.mjs} +6 -6
- package/dist/sdk/{chunk-7VTZDC2X.mjs → chunk-VPPBOKBQ.mjs} +2 -2
- package/dist/sdk/chunk-WZQMTD7W.mjs +33 -0
- package/dist/sdk/chunk-WZQMTD7W.mjs.map +1 -0
- package/dist/sdk/{chunk-ZOF5QT6U.mjs → chunk-YBXNG75V.mjs} +118 -10
- package/dist/sdk/chunk-YBXNG75V.mjs.map +1 -0
- package/dist/sdk/{chunk-UXB4XWEE.mjs → chunk-YYFSAAD6.mjs} +53 -51
- package/dist/sdk/chunk-YYFSAAD6.mjs.map +1 -0
- package/dist/sdk/{chunk-RHKPFJLG.mjs → chunk-ZNKL6ESZ.mjs} +2 -2
- package/dist/sdk/{chunk-IDL3AA3G.mjs → chunk-ZYDRR6PZ.mjs} +1150 -403
- package/dist/sdk/chunk-ZYDRR6PZ.mjs.map +1 -0
- package/dist/sdk/{command-executor-YNJOS77A.mjs → command-executor-LHUW77GR.mjs} +3 -3
- package/dist/sdk/{config-PCP6O6Y6.mjs → config-TVU5RWR5.mjs} +3 -3
- package/dist/sdk/{dist-3UGGEZB3.mjs → dist-PN5UHL6A.mjs} +429 -429
- package/dist/sdk/dist-PN5UHL6A.mjs.map +1 -0
- package/dist/sdk/{email-frontend-WSNADJPI.mjs → email-frontend-ECHQCFTR.mjs} +2 -2
- package/dist/sdk/{failure-condition-evaluator-IRFKTYZD.mjs → failure-condition-evaluator-USY3ISVA.mjs} +6 -6
- package/dist/sdk/{github-auth-BJQBLK2V.mjs → github-auth-UO4DMNCC.mjs} +2 -2
- package/dist/sdk/{github-frontend-DECYOBRN.mjs → github-frontend-2T5PWYD5.mjs} +6 -6
- package/dist/sdk/{host-CFM2ASDI.mjs → host-OJSMCLKK.mjs} +6 -6
- package/dist/sdk/{host-T4LNVU2H.mjs → host-RM6UJEPP.mjs} +7 -7
- package/dist/sdk/{knex-store-OEWSZEBY.mjs → knex-store-KCMFAMH5.mjs} +2 -2
- package/dist/sdk/{liquid-extensions-E3AKRX7P.mjs → liquid-extensions-KZIRR4OY.mjs} +4 -4
- package/dist/sdk/{loader-WRGI244P.mjs → loader-35YWX5UQ.mjs} +4 -4
- package/dist/sdk/{memory-store-OHUIXCWJ.mjs → memory-store-3JONK7AF.mjs} +3 -3
- package/dist/sdk/{opa-policy-engine-IVMCGVNA.mjs → opa-policy-engine-FY5D45YS.mjs} +2 -2
- package/dist/sdk/{prompt-state-LN57DQF3.mjs → prompt-state-VVJMONT3.mjs} +3 -3
- package/dist/sdk/{renderer-schema-BT2IXMLW.mjs → renderer-schema-JZRRU5CW.mjs} +2 -2
- package/dist/sdk/{routing-H2PQ57OA.mjs → routing-NNQQSLWA.mjs} +8 -8
- package/dist/sdk/{schedule-tool-2DPNSU63.mjs → schedule-tool-ADZ2ON4I.mjs} +15 -14
- package/dist/sdk/schedule-tool-EMNF3FPQ.mjs +38 -0
- package/dist/sdk/{schedule-tool-handler-NBEO46RV.mjs → schedule-tool-handler-3R3IC6VA.mjs} +15 -14
- package/dist/sdk/{schedule-tool-handler-KLHE2SOW.mjs → schedule-tool-handler-F76ZD2WU.mjs} +17 -16
- package/dist/sdk/sdk.d.mts +40 -0
- package/dist/sdk/sdk.d.ts +40 -0
- package/dist/sdk/sdk.js +1154 -176
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +14 -13
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/{slack-frontend-DF5VL4OF.mjs → slack-frontend-K3TPGERM.mjs} +65 -9
- package/dist/sdk/slack-frontend-K3TPGERM.mjs.map +1 -0
- package/dist/sdk/{task-evaluator-OVMG7S56.mjs → task-evaluator-H3BXC7SE.mjs} +3 -3
- package/dist/sdk/{teams-frontend-DNW5GZP3.mjs → teams-frontend-6RRW533K.mjs} +54 -1
- package/dist/sdk/teams-frontend-6RRW533K.mjs.map +1 -0
- package/dist/sdk/{telegram-frontend-GA7OLADB.mjs → telegram-frontend-5UA77YAT.mjs} +48 -1
- package/dist/sdk/telegram-frontend-5UA77YAT.mjs.map +1 -0
- package/dist/sdk/{trace-helpers-26ZCAE2V.mjs → trace-helpers-OMF4C24T.mjs} +3 -3
- package/dist/sdk/{trace-serializer-KKBJHM7J.mjs → trace-serializer-EBHTHZYT.mjs} +3 -3
- package/dist/sdk/track-execution-3CHMGEPH.mjs +249 -0
- package/dist/sdk/track-execution-3CHMGEPH.mjs.map +1 -0
- package/dist/sdk/{utcp-check-provider-WI3QZ3W6.mjs → utcp-check-provider-Q4PD5EP2.mjs} +5 -5
- package/dist/sdk/workflow-check-provider-TC2G33WF.mjs +32 -0
- package/dist/sdk/workflow-check-provider-U4UXZ5YS.mjs +32 -0
- package/dist/sdk/{workflow-registry-YCZ3FCJC.mjs → workflow-registry-K56UTX36.mjs} +3 -3
- package/dist/slack/client.d.ts +14 -0
- package/dist/slack/client.d.ts.map +1 -1
- package/dist/slack/socket-runner.d.ts.map +1 -1
- package/dist/teams/client.d.ts +16 -0
- package/dist/teams/client.d.ts.map +1 -1
- package/dist/teams/webhook-runner.d.ts.map +1 -1
- package/dist/telegram/client.d.ts +17 -0
- package/dist/telegram/client.d.ts.map +1 -1
- package/dist/telegram/polling-runner.d.ts.map +1 -1
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts +40 -0
- package/dist/types/config.d.ts.map +1 -1
- package/package.json +4 -3
- package/dist/generated/config-schema.json +0 -4027
- package/dist/sdk/a2a-frontend-6LWBIPMS.mjs +0 -1734
- package/dist/sdk/a2a-frontend-6LWBIPMS.mjs.map +0 -1
- package/dist/sdk/check-provider-registry-WSEVHJEV.mjs +0 -31
- package/dist/sdk/check-provider-registry-YRADEEQY.mjs +0 -31
- package/dist/sdk/chunk-34QX63WK.mjs +0 -244
- package/dist/sdk/chunk-34QX63WK.mjs.map +0 -1
- package/dist/sdk/chunk-54KOAC4W.mjs +0 -665
- package/dist/sdk/chunk-6C3R6E42.mjs.map +0 -1
- package/dist/sdk/chunk-7W5QCO4Y.mjs +0 -5943
- package/dist/sdk/chunk-7W5QCO4Y.mjs.map +0 -1
- package/dist/sdk/chunk-7XRSCOKE.mjs +0 -825
- package/dist/sdk/chunk-FT3I25QV.mjs +0 -251
- package/dist/sdk/chunk-FT3I25QV.mjs.map +0 -1
- package/dist/sdk/chunk-G7GSN3SK.mjs +0 -390
- package/dist/sdk/chunk-G7GSN3SK.mjs.map +0 -1
- package/dist/sdk/chunk-IDL3AA3G.mjs.map +0 -1
- package/dist/sdk/chunk-J27D43HS.mjs.map +0 -1
- package/dist/sdk/chunk-MEB2TTIE.mjs +0 -157
- package/dist/sdk/chunk-MEB2TTIE.mjs.map +0 -1
- package/dist/sdk/chunk-MFXPJUUE.mjs.map +0 -1
- package/dist/sdk/chunk-NPSLGKXB.mjs +0 -1502
- package/dist/sdk/chunk-P2K4VOMU.mjs.map +0 -1
- package/dist/sdk/chunk-PQWZ6NFL.mjs +0 -459
- package/dist/sdk/chunk-PQWZ6NFL.mjs.map +0 -1
- package/dist/sdk/chunk-S5FSRHMY.mjs +0 -139
- package/dist/sdk/chunk-S5FSRHMY.mjs.map +0 -1
- package/dist/sdk/chunk-TFUQ2D5L.mjs +0 -307
- package/dist/sdk/chunk-TFUQ2D5L.mjs.map +0 -1
- package/dist/sdk/chunk-UCMJJ3IM.mjs +0 -227
- package/dist/sdk/chunk-UCMJJ3IM.mjs.map +0 -1
- package/dist/sdk/chunk-UFHOIB3R.mjs +0 -482
- package/dist/sdk/chunk-UFHOIB3R.mjs.map +0 -1
- package/dist/sdk/chunk-UXB4XWEE.mjs.map +0 -1
- package/dist/sdk/chunk-V45TITKX.mjs +0 -739
- package/dist/sdk/chunk-V45TITKX.mjs.map +0 -1
- package/dist/sdk/chunk-WKLJ57WF.mjs.map +0 -1
- package/dist/sdk/chunk-ZOF5QT6U.mjs.map +0 -1
- package/dist/sdk/chunk-ZPYODGYA.mjs.map +0 -1
- package/dist/sdk/command-executor-3AHGIYQG.mjs +0 -14
- package/dist/sdk/config-JE4HKTWW.mjs +0 -16
- package/dist/sdk/dist-3UGGEZB3.mjs.map +0 -1
- package/dist/sdk/failure-condition-evaluator-H3PBFBYT.mjs +0 -18
- package/dist/sdk/github-auth-27SZGPEC.mjs +0 -196
- package/dist/sdk/github-auth-BJQBLK2V.mjs.map +0 -1
- package/dist/sdk/github-frontend-TZRBOQCN.mjs +0 -1394
- package/dist/sdk/github-frontend-TZRBOQCN.mjs.map +0 -1
- package/dist/sdk/lazy-otel-5NH4ZJJM.mjs +0 -24
- package/dist/sdk/liquid-extensions-P6KDYILF.mjs +0 -25
- package/dist/sdk/memory-store-K5N7MC7U.mjs +0 -12
- package/dist/sdk/metrics-JTOG2HNO.mjs +0 -41
- package/dist/sdk/prompt-state-YPICX7PI.mjs +0 -16
- package/dist/sdk/renderer-schema-KOIH75RZ.mjs +0 -51
- package/dist/sdk/renderer-schema-KOIH75RZ.mjs.map +0 -1
- package/dist/sdk/routing-JMZ7HDCC.mjs +0 -26
- package/dist/sdk/schedule-tool-4M45RK3E.mjs +0 -37
- package/dist/sdk/schedule-tool-4M45RK3E.mjs.map +0 -1
- package/dist/sdk/schedule-tool-handler-KLHE2SOW.mjs.map +0 -1
- package/dist/sdk/schedule-tool-handler-NBEO46RV.mjs.map +0 -1
- package/dist/sdk/slack-frontend-BPWXNIHE.mjs +0 -929
- package/dist/sdk/slack-frontend-BPWXNIHE.mjs.map +0 -1
- package/dist/sdk/slack-frontend-DF5VL4OF.mjs.map +0 -1
- package/dist/sdk/task-evaluator-GQYDOSGT.mjs +0 -1392
- package/dist/sdk/task-evaluator-GQYDOSGT.mjs.map +0 -1
- package/dist/sdk/teams-frontend-DNW5GZP3.mjs.map +0 -1
- package/dist/sdk/telegram-frontend-GA7OLADB.mjs.map +0 -1
- package/dist/sdk/trace-helpers-26ZCAE2V.mjs.map +0 -1
- package/dist/sdk/trace-helpers-XV5GAX5L.mjs +0 -29
- package/dist/sdk/trace-helpers-XV5GAX5L.mjs.map +0 -1
- package/dist/sdk/trace-serializer-KKBJHM7J.mjs.map +0 -1
- package/dist/sdk/track-execution-3EC24C2X.mjs +0 -163
- package/dist/sdk/track-execution-3EC24C2X.mjs.map +0 -1
- package/dist/sdk/track-execution-66RLL6QT.mjs +0 -143
- package/dist/sdk/track-execution-66RLL6QT.mjs.map +0 -1
- package/dist/sdk/utcp-check-provider-JLIYF5HH.mjs +0 -16
- package/dist/sdk/utcp-check-provider-JLIYF5HH.mjs.map +0 -1
- package/dist/sdk/utcp-check-provider-WI3QZ3W6.mjs.map +0 -1
- package/dist/sdk/workflow-check-provider-X2UREEH7.mjs +0 -31
- package/dist/sdk/workflow-check-provider-X2UREEH7.mjs.map +0 -1
- package/dist/sdk/workflow-check-provider-YXALZNAQ.mjs +0 -31
- package/dist/sdk/workflow-check-provider-YXALZNAQ.mjs.map +0 -1
- package/dist/sdk/workflow-registry-X2IPY35M.mjs +0 -12
- package/dist/sdk/workflow-registry-X2IPY35M.mjs.map +0 -1
- package/dist/sdk/workflow-registry-YCZ3FCJC.mjs.map +0 -1
- /package/dist/sdk/{a2a-frontend-5YDHFQXD.mjs.map → a2a-frontend-OI4OVSKC.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-WSEVHJEV.mjs.map → check-provider-registry-RITJW67U.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-YRADEEQY.mjs.map → check-provider-registry-ZZ6N4GDP.mjs.map} +0 -0
- /package/dist/sdk/{chunk-4BN2XI4X.mjs.map → chunk-4HIWZA6M.mjs.map} +0 -0
- /package/dist/sdk/{chunk-RI4ONH5X.mjs.map → chunk-4MHHELVZ.mjs.map} +0 -0
- /package/dist/sdk/{chunk-54KOAC4W.mjs.map → chunk-4ZLYHSN4.mjs.map} +0 -0
- /package/dist/sdk/{chunk-GA2TYKSR.mjs.map → chunk-7XKHFRPN.mjs.map} +0 -0
- /package/dist/sdk/{chunk-XOAEKFKB.mjs.map → chunk-QLT42TX7.mjs.map} +0 -0
- /package/dist/sdk/{chunk-7XRSCOKE.mjs.map → chunk-TSX3YS3F.mjs.map} +0 -0
- /package/dist/sdk/{chunk-NPSLGKXB.mjs.map → chunk-UM7LGO2P.mjs.map} +0 -0
- /package/dist/sdk/{chunk-7VTZDC2X.mjs.map → chunk-VPPBOKBQ.mjs.map} +0 -0
- /package/dist/sdk/{chunk-RHKPFJLG.mjs.map → chunk-ZNKL6ESZ.mjs.map} +0 -0
- /package/dist/sdk/{command-executor-3AHGIYQG.mjs.map → command-executor-LHUW77GR.mjs.map} +0 -0
- /package/dist/sdk/{command-executor-YNJOS77A.mjs.map → config-TVU5RWR5.mjs.map} +0 -0
- /package/dist/sdk/{email-frontend-WSNADJPI.mjs.map → email-frontend-ECHQCFTR.mjs.map} +0 -0
- /package/dist/sdk/{config-JE4HKTWW.mjs.map → failure-condition-evaluator-USY3ISVA.mjs.map} +0 -0
- /package/dist/sdk/{github-auth-27SZGPEC.mjs.map → github-auth-UO4DMNCC.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-DECYOBRN.mjs.map → github-frontend-2T5PWYD5.mjs.map} +0 -0
- /package/dist/sdk/{host-CFM2ASDI.mjs.map → host-OJSMCLKK.mjs.map} +0 -0
- /package/dist/sdk/{host-T4LNVU2H.mjs.map → host-RM6UJEPP.mjs.map} +0 -0
- /package/dist/sdk/{knex-store-OEWSZEBY.mjs.map → knex-store-KCMFAMH5.mjs.map} +0 -0
- /package/dist/sdk/{config-PCP6O6Y6.mjs.map → liquid-extensions-KZIRR4OY.mjs.map} +0 -0
- /package/dist/sdk/{loader-WRGI244P.mjs.map → loader-35YWX5UQ.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-H3PBFBYT.mjs.map → memory-store-3JONK7AF.mjs.map} +0 -0
- /package/dist/sdk/{opa-policy-engine-IVMCGVNA.mjs.map → opa-policy-engine-FY5D45YS.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-IRFKTYZD.mjs.map → prompt-state-VVJMONT3.mjs.map} +0 -0
- /package/dist/sdk/{renderer-schema-BT2IXMLW.mjs.map → renderer-schema-JZRRU5CW.mjs.map} +0 -0
- /package/dist/sdk/{lazy-otel-5NH4ZJJM.mjs.map → routing-NNQQSLWA.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-E3AKRX7P.mjs.map → schedule-tool-ADZ2ON4I.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-P6KDYILF.mjs.map → schedule-tool-EMNF3FPQ.mjs.map} +0 -0
- /package/dist/sdk/{memory-store-K5N7MC7U.mjs.map → schedule-tool-handler-3R3IC6VA.mjs.map} +0 -0
- /package/dist/sdk/{memory-store-OHUIXCWJ.mjs.map → schedule-tool-handler-F76ZD2WU.mjs.map} +0 -0
- /package/dist/sdk/{task-evaluator-OVMG7S56.mjs.map → task-evaluator-H3BXC7SE.mjs.map} +0 -0
- /package/dist/sdk/{metrics-JTOG2HNO.mjs.map → trace-helpers-OMF4C24T.mjs.map} +0 -0
- /package/dist/sdk/{prompt-state-LN57DQF3.mjs.map → trace-serializer-EBHTHZYT.mjs.map} +0 -0
- /package/dist/sdk/{prompt-state-YPICX7PI.mjs.map → utcp-check-provider-Q4PD5EP2.mjs.map} +0 -0
- /package/dist/sdk/{routing-H2PQ57OA.mjs.map → workflow-check-provider-TC2G33WF.mjs.map} +0 -0
- /package/dist/sdk/{routing-JMZ7HDCC.mjs.map → workflow-check-provider-U4UXZ5YS.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-2DPNSU63.mjs.map → workflow-registry-K56UTX36.mjs.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/liquid-extensions.ts"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports -- this is the extensions file that wraps liquidjs\nimport { Liquid, TagToken, Context, TopLevelToken, Tag, Value, Emitter } from 'liquidjs';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport path from 'path';\nimport {\n hasMinPermission,\n isOwner,\n isMember,\n isCollaborator,\n isContributor,\n isFirstTimer,\n detectLocalMode,\n} from './utils/author-permissions';\nimport { MemoryStore } from './memory-store';\nimport { createSecureSandbox, compileAndRun } from './utils/sandbox';\n\n/**\n * Sanitize label strings to only allow [A-Za-z0-9:/\\- ] characters (including spaces and hyphens)\n * @param value - Label value to sanitize\n * @returns Sanitized label string\n */\nexport function sanitizeLabel(value: unknown): string {\n if (value == null) return '';\n const s = String(value);\n // Keep only alphanumerics, colon, slash, hyphen, and space; collapse repeated slashes and trim\n return s\n .replace(/[^A-Za-z0-9:\\/\\- ]/g, '')\n .replace(/\\/{2,}/g, '/')\n .trim();\n}\n\n/**\n * Sanitize an array of labels\n * @param labels - Array of label values\n * @returns Array of sanitized, non-empty label strings\n */\nexport function sanitizeLabelList(labels: unknown): string[] {\n if (!Array.isArray(labels)) return [];\n return (labels as unknown[]).map(v => sanitizeLabel(v)).filter(s => s.length > 0);\n}\n\n/**\n * Custom ReadFile tag for Liquid templates\n * Usage: {% readfile \"path/to/file.txt\" %}\n * or with variable: {% readfile filename %}\n *\n * AUTOMATIC INDENTATION: The tag automatically detects its position in the output\n * and indents subsequent lines to match. This makes it safe to use inside YAML\n * literal blocks (|) without manual indent parameters.\n *\n * Manual override: {% readfile \"path/to/file.txt\" indent: 4 %}\n */\nexport class ReadFileTag extends Tag {\n private filepath: Value;\n private indentValue: Value | null = null;\n\n constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {\n super(token, remainTokens, liquid);\n // Parse args: could be just filepath or filepath with indent: N\n // Format: \"path/to/file\" or \"path/to/file\" indent: 4\n const argsStr = token.args.trim();\n\n // Check if there's an indent parameter\n const indentMatch = argsStr.match(/^(.+?)\\s+indent:\\s*(\\d+)\\s*$/);\n if (indentMatch) {\n this.filepath = new Value(indentMatch[1].trim(), liquid);\n this.indentValue = new Value(indentMatch[2], liquid);\n } else {\n this.filepath = new Value(argsStr, liquid);\n }\n }\n\n *render(ctx: Context, emitter: Emitter): Generator<unknown, void, unknown> {\n const filePath = yield this.filepath.value(ctx, false);\n\n // Determine indentation: manual override or auto-detect from output buffer\n let indent = 0;\n if (this.indentValue) {\n const indentAmount = yield this.indentValue.value(ctx, false);\n indent =\n typeof indentAmount === 'number' ? indentAmount : parseInt(String(indentAmount), 10) || 0;\n } else {\n // Auto-detect indentation by looking at current output position\n // Find the column position by counting characters since the last newline\n const output = (emitter as any).buffer || '';\n const lastNewline = output.lastIndexOf('\\n');\n if (lastNewline >= 0) {\n // Count characters (spaces/tabs) from last newline to current position\n const lineStart = output.substring(lastNewline + 1);\n // Count leading whitespace that will be our indent\n const match = lineStart.match(/^(\\s*)/);\n indent = match ? match[1].length : 0;\n }\n }\n\n // Validate the path\n if (!filePath || typeof filePath !== 'string') {\n emitter.write('[Error: Invalid file path]');\n return;\n }\n\n // Security: Resolve path relative to basePath (from context) or project root\n // basePath can be passed via context globals for loadConfig scenarios\n const basePath = (ctx.globals as Record<string, unknown>)?.basePath;\n const projectRoot = typeof basePath === 'string' ? basePath : process.cwd();\n\n // Normalize paths to prevent traversal attacks (e.g., ../../../etc/passwd)\n const normalizedRoot = path.normalize(projectRoot + path.sep);\n const resolvedPath = path.normalize(path.resolve(projectRoot, filePath.toString()));\n\n // Ensure the resolved path is within the allowed directory\n // Use normalized paths with separator to prevent prefix attacks (e.g., /foo vs /foobar)\n if (!resolvedPath.startsWith(normalizedRoot) && resolvedPath !== path.normalize(projectRoot)) {\n emitter.write('[Error: File path escapes project directory]');\n return;\n }\n\n // Read the file content synchronously to support both parseAndRender and parseAndRenderSync\n // Using readFileSync ensures compatibility with sync rendering (e.g., loadConfig in expressions)\n try {\n let content = require('fs').readFileSync(resolvedPath, 'utf-8');\n\n // Apply indentation to all lines after the first\n // This is needed for YAML literal blocks where continuation lines must be indented\n if (indent > 0) {\n const indentStr = ' '.repeat(indent);\n const lines = content.split('\\n');\n content = lines\n .map((line: string, i: number) => (i === 0 ? line : indentStr + line))\n .join('\\n');\n }\n\n emitter.write(content);\n } catch (error) {\n // Handle file read errors gracefully\n const errorMessage =\n error instanceof Error\n ? error.message\n : (error as NodeJS.ErrnoException)?.code || 'Unknown error';\n emitter.write(`[Error reading file: ${errorMessage}]`);\n }\n }\n}\n\n// Async-local permissions context for filters (per-render)\nconst permissionsALS = new AsyncLocalStorage<{ authorAssociation?: string }>();\n\nexport async function withPermissionsContext<T>(\n ctx: { authorAssociation?: string },\n fn: () => Promise<T>\n): Promise<T> {\n return await permissionsALS.run(ctx, fn as any);\n}\n\n/**\n * Configure a Liquid instance with custom extensions\n */\nexport function configureLiquidWithExtensions(liquid: Liquid): void {\n // Register the readfile tag\n liquid.registerTag('readfile', ReadFileTag);\n\n // Register parse_json filter to parse JSON strings into objects\n liquid.registerFilter('parse_json', (value: string) => {\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(value);\n } catch {\n // Return original value if parsing fails\n return value;\n }\n });\n\n // Register to_json filter as alias for json (for consistency)\n liquid.registerFilter('to_json', (value: unknown) => {\n try {\n return JSON.stringify(value);\n } catch {\n return '[Error: Unable to serialize to JSON]';\n }\n });\n\n // Register base64 filter for encoding strings\n // Usage: {{ \"user:password\" | base64 }}\n liquid.registerFilter('base64', (value: unknown) => {\n if (value == null) return '';\n const str = String(value);\n return Buffer.from(str).toString('base64');\n });\n\n // Register base64_decode filter for decoding base64 strings\n // Usage: {{ encoded_value | base64_decode }}\n liquid.registerFilter('base64_decode', (value: unknown) => {\n if (value == null) return '';\n const str = String(value);\n try {\n return Buffer.from(str, 'base64').toString('utf-8');\n } catch {\n return '[Error: Invalid base64 string]';\n }\n });\n\n // Sanitize a label to allowed characters only: [A-Za-z0-9:/]\n liquid.registerFilter('safe_label', (value: unknown) => sanitizeLabel(value));\n\n // Sanitize an array of labels\n liquid.registerFilter('safe_label_list', (value: unknown) => sanitizeLabelList(value));\n\n // Convert literal escape sequences (e.g., \"\\n\") into actual newlines\n liquid.registerFilter('unescape_newlines', (value: unknown) => {\n if (value == null) return '';\n const s = String(value);\n return s.replace(/\\\\n/g, '\\n').replace(/\\\\r/g, '\\r').replace(/\\\\t/g, '\\t');\n });\n\n // JSON escape filter - escapes a string for use inside a JSON string value\n // This escapes special characters like quotes, backslashes, and control characters\n // Usage: \"jql\": \"{{ myValue | json_escape }}\"\n liquid.registerFilter('json_escape', (value: unknown) => {\n if (value == null) return '';\n const s = String(value);\n // Use JSON.stringify which handles all escaping, then strip the surrounding quotes\n const jsonStr = JSON.stringify(s);\n // Remove the first and last character (the quotes added by JSON.stringify)\n return jsonStr.slice(1, -1);\n });\n\n // Shell escape filter - wraps value in single quotes with proper escaping\n // Usage: {{ value | shell_escape }}\n // Example: \"hello'world\" becomes \"'hello'\\''world'\"\n // This is POSIX-compliant and safe for arbitrary text including mermaid diagrams\n liquid.registerFilter('shell_escape', (value: unknown) => {\n if (value == null) return \"''\";\n const s = String(value);\n // Replace single quotes with: end quote, escaped quote, start quote\n // Then wrap the entire thing in single quotes\n return \"'\" + s.replace(/'/g, \"'\\\\''\") + \"'\";\n });\n\n // Alias for shell_escape\n liquid.registerFilter('escape_shell', (value: unknown) => {\n if (value == null) return \"''\";\n const s = String(value);\n return \"'\" + s.replace(/'/g, \"'\\\\''\") + \"'\";\n });\n\n // Shell escape for double quotes (less safe but sometimes needed)\n // Usage: {{ value | shell_escape_double }}\n // Escapes: $, `, \\, \", and !\n liquid.registerFilter('shell_escape_double', (value: unknown) => {\n if (value == null) return '\"\"';\n const s = String(value);\n // Escape characters that have special meaning inside double quotes\n const escaped = s\n .replace(/\\\\/g, '\\\\\\\\') // backslash first\n .replace(/\\$/g, '\\\\$') // dollar sign\n .replace(/`/g, '\\\\`') // backticks\n .replace(/\"/g, '\\\\\"') // double quotes\n .replace(/!/g, '\\\\!'); // history expansion\n return '\"' + escaped + '\"';\n });\n\n // Register author permission filters (from main)\n // These filters check the author's permission level; detect local mode for tests\n const isLocal = detectLocalMode();\n\n const resolveAssoc = (val: unknown): string | undefined => {\n if (typeof val === 'string' && val.length > 0) return val;\n const store = permissionsALS.getStore();\n return store?.authorAssociation;\n };\n\n liquid.registerFilter('has_min_permission', (authorAssociation: unknown, level: string) => {\n return hasMinPermission(resolveAssoc(authorAssociation), level as any, isLocal);\n });\n\n liquid.registerFilter('is_owner', (authorAssociation: unknown) => {\n return isOwner(resolveAssoc(authorAssociation), isLocal);\n });\n\n liquid.registerFilter('is_member', (authorAssociation: unknown) => {\n return isMember(resolveAssoc(authorAssociation), isLocal);\n });\n\n liquid.registerFilter('is_collaborator', (authorAssociation: unknown) => {\n return isCollaborator(resolveAssoc(authorAssociation), isLocal);\n });\n\n liquid.registerFilter('is_contributor', (authorAssociation: unknown) => {\n return isContributor(resolveAssoc(authorAssociation), isLocal);\n });\n\n liquid.registerFilter('is_first_timer', (authorAssociation: unknown) => {\n return isFirstTimer(resolveAssoc(authorAssociation), isLocal);\n });\n\n // Register memory filters for accessing memory store\n const memoryStore = MemoryStore.getInstance();\n\n liquid.registerFilter('memory_get', (key: string, namespace?: string) => {\n if (typeof key !== 'string') {\n return undefined;\n }\n return memoryStore.get(key, namespace);\n });\n\n liquid.registerFilter('memory_has', (key: string, namespace?: string) => {\n if (typeof key !== 'string') {\n return false;\n }\n const has = memoryStore.has(key, namespace);\n try {\n if (process.env.VISOR_DEBUG === 'true' && key === 'fact_validation_issues') {\n console.error(\n `[liquid] memory_has('${key}', ns='${namespace || memoryStore.getDefaultNamespace()}') => ${String(\n has\n )}`\n );\n }\n } catch {}\n return has;\n });\n\n liquid.registerFilter('memory_list', (namespace?: string) => {\n return memoryStore.list(namespace);\n });\n\n // Generic helpers to radically simplify templates\n\n // get: safe nested access using dot-path (e.g., obj | get: 'a.b.c')\n liquid.registerFilter('get', (obj: any, pathExpr: unknown) => {\n if (obj == null) return undefined;\n const path = typeof pathExpr === 'string' ? pathExpr : String(pathExpr || '');\n if (!path) return obj;\n const parts = path.split('.');\n let cur: any = obj;\n for (const p of parts) {\n if (cur == null) return undefined;\n cur = cur[p as keyof typeof cur];\n }\n return cur;\n });\n\n // not_empty: true when value is a non-empty array/string/object with keys\n liquid.registerFilter('not_empty', (v: unknown) => {\n if (Array.isArray(v)) return v.length > 0;\n if (typeof v === 'string') return v.length > 0;\n if (v && typeof v === 'object') return Object.keys(v as object).length > 0;\n return false;\n });\n\n // coalesce: pick first argument (value or candidates) that is a non-empty array/object/string\n // Usage: a | coalesce: b, c, d\n liquid.registerFilter('coalesce', (first: unknown, ...rest: unknown[]) => {\n const all = [first, ...rest];\n for (const v of all) {\n if (Array.isArray(v) && v.length > 0) return v;\n if (typeof v === 'string' && v.length > 0) return v;\n if (v && typeof v === 'object' && Object.keys(v as object).length > 0) return v;\n }\n return Array.isArray(first) ? [] : (first ?? undefined);\n });\n\n // where_exp: generic expression-based filter (Shopify-style)\n // Usage: array | where_exp: 'i', 'i.is_valid != true and i.confidence != \"high\"'\n liquid.registerFilter('where_exp', (items: unknown, varName: string, expr: string) => {\n const arr = Array.isArray(items) ? (items as any[]) : [];\n const name = typeof varName === 'string' && varName.trim() ? varName.trim() : 'i';\n const body = String(expr || '');\n try {\n // Use sandbox for secure evaluation\n const sandbox = createSecureSandbox();\n const out: any[] = [];\n for (let idx = 0; idx < arr.length; idx++) {\n const item = arr[idx];\n let ok = false;\n try {\n const scope: Record<string, unknown> = { [name]: item, idx, arr };\n ok = !!compileAndRun<boolean>(sandbox, body, scope, {\n injectLog: false,\n wrapFunction: true,\n });\n } catch {\n ok = false;\n }\n if (ok) out.push(item);\n }\n return out;\n } catch {\n return [];\n }\n });\n\n // chat_history: merge outputs_history from multiple steps into a normalized,\n // timestamp-sorted chat transcript.\n //\n // Usage:\n // {% assign history = '' | chat_history: 'ask', 'reply' %}\n // {% for m in history %}\n // {{ m.role }}: {{ m.text }}\n // {% endfor %}\n //\n // Advanced usage with options:\n // '' | chat_history: 'ask', 'reply',\n // direction: 'desc',\n // limit: 50,\n // roles: { by_type: { 'human-input': 'user', 'ai': 'assistant' } },\n // text: { default_field: 'text', by_step: { reply: 'text' } }\n liquid.registerFilter(\n 'chat_history',\n function (this: unknown, value: unknown, ...args: unknown[]): unknown {\n try {\n // Access Liquid rendering context to read globals like outputs_history\n const impl = this as { context?: { get: (key: string[] | string) => unknown } } | undefined;\n const ctx = impl?.context;\n\n // Parse arguments: one or more step names, optional options hash as last arg\n const allArgs = Array.isArray(args) ? args : [];\n\n if (allArgs.length === 0) {\n return [];\n }\n\n // Liquid passes keyword arguments as trailing [\"key\", value] pairs.\n // Split positional step names from an optional options hash built from those pairs.\n const positional: unknown[] = [];\n const options: any = {};\n for (const arg of allArgs) {\n if (\n Array.isArray(arg) &&\n arg.length === 2 &&\n typeof arg[0] === 'string' &&\n arg[0].length > 0\n ) {\n options[arg[0]] = arg[1];\n } else {\n positional.push(arg);\n }\n }\n const stepArgs: unknown[] = positional;\n\n const steps = stepArgs.map(s => String(s ?? '').trim()).filter(s => s.length > 0);\n if (steps.length === 0) return [];\n\n // Resolve history source: prefer outputs_history, fall back to outputs.history\n const outputsHistoryVar = (ctx?.get(['outputs_history']) || {}) as Record<\n string,\n unknown[]\n >;\n const outputsVar = (ctx?.get(['outputs']) || {}) as { history?: Record<string, unknown[]> };\n const outputsHistory: Record<string, unknown[]> =\n outputsHistoryVar && Object.keys(outputsHistoryVar).length > 0\n ? outputsHistoryVar\n : outputsVar?.history || {};\n\n // Optional checks metadata: used to infer roles by check type\n const checksMeta =\n (ctx?.get(['checks_meta']) as Record<string, { type?: string; group?: string }>) ||\n ((ctx?.get(['event']) as any)?.payload?.__checksMeta as Record<\n string,\n { type?: string; group?: string }\n >) ||\n undefined;\n\n // Direction and limit\n const directionRaw =\n typeof options.direction === 'string' ? options.direction.toLowerCase() : '';\n const direction: 'asc' | 'desc' = directionRaw === 'desc' ? 'desc' : 'asc';\n const limit =\n typeof options.limit === 'number' && options.limit > 0\n ? Math.floor(options.limit)\n : undefined;\n\n // Text mapping configuration\n const textCfg = options.text && typeof options.text === 'object' ? options.text : {};\n const defaultField =\n typeof textCfg.default_field === 'string' && textCfg.default_field.trim()\n ? textCfg.default_field.trim()\n : 'text';\n const byStepText: Record<string, string> = {};\n if (textCfg.by_step && typeof textCfg.by_step === 'object') {\n for (const [k, v] of Object.entries(textCfg.by_step)) {\n if (typeof v === 'string' && v.trim()) {\n byStepText[k] = v.trim();\n }\n }\n }\n\n // Role mapping configuration\n const rolesCfg = options.roles && typeof options.roles === 'object' ? options.roles : {};\n const byTypeRole: Record<string, string> = {};\n if (rolesCfg.by_type && typeof rolesCfg.by_type === 'object') {\n for (const [k, v] of Object.entries(rolesCfg.by_type)) {\n if (typeof v === 'string' && v.trim()) {\n byTypeRole[k] = v.trim();\n }\n }\n }\n const byStepRole: Record<string, string> = {};\n if (rolesCfg.by_step && typeof rolesCfg.by_step === 'object') {\n for (const [k, v] of Object.entries(rolesCfg.by_step)) {\n if (typeof v === 'string' && v.trim()) {\n byStepRole[k] = v.trim();\n }\n }\n }\n // Optional: step-level role map provided as a compact string, e.g. \"ask=user,reply=assistant\"\n if (typeof options.role_map === 'string' && options.role_map.trim().length > 0) {\n const parts = String(options.role_map)\n .split(',')\n .map(p => p.trim())\n .filter(Boolean);\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx > 0) {\n const k = part.slice(0, eqIdx).trim();\n const v = part.slice(eqIdx + 1).trim();\n if (k && v) {\n byStepRole[k] = v;\n }\n }\n }\n }\n const defaultRole =\n typeof rolesCfg.default === 'string' && rolesCfg.default.trim()\n ? rolesCfg.default.trim()\n : undefined;\n\n const getNested = (obj: any, path: string): unknown => {\n if (!obj || !path) return undefined;\n const parts = path.split('.');\n let cur = obj;\n for (const p of parts) {\n if (cur == null) return undefined;\n cur = cur[p];\n }\n return cur;\n };\n\n const normalizeText = (step: string, raw: any): string => {\n try {\n const overrideField = byStepText[step];\n if (overrideField) {\n const val = getNested(raw, overrideField);\n if (val !== undefined && val !== null) {\n const s = String(val);\n if (s.trim().length > 0) return s;\n }\n }\n\n if (raw && typeof raw === 'object') {\n if (typeof (raw as any).text === 'string' && (raw as any).text.trim().length > 0) {\n return (raw as any).text;\n }\n if (\n typeof (raw as any).content === 'string' &&\n (raw as any).content.trim().length > 0\n ) {\n return (raw as any).content;\n }\n const dfVal = (raw as any)[defaultField];\n if (dfVal !== undefined && dfVal !== null) {\n const s = String(dfVal);\n if (s.trim().length > 0) return s;\n }\n }\n\n if (typeof raw === 'string') return raw;\n if (raw == null) return '';\n try {\n return JSON.stringify(raw);\n } catch {\n return String(raw);\n }\n } catch {\n if (typeof raw === 'string') return raw;\n return '';\n }\n };\n\n const normalizeRole = (step: string): string => {\n try {\n if (byStepRole[step]) return byStepRole[step];\n const meta = checksMeta ? (checksMeta as any)[step] : undefined;\n const type = meta?.type as string | undefined;\n if (type && byTypeRole[type]) return byTypeRole[type];\n if (type === 'human-input') return 'user';\n if (type === 'ai') return 'assistant';\n if (defaultRole) return defaultRole;\n if (type) {\n if (type === 'human-input') return 'user';\n if (type === 'ai') return 'assistant';\n }\n } catch {\n // fall through\n }\n return 'assistant';\n };\n\n type ChatMessage = {\n step: string;\n role: string;\n text: string;\n ts: number;\n raw: unknown;\n };\n\n const messages: ChatMessage[] = [];\n const tsBase = Date.now();\n let counter = 0;\n\n for (const step of steps) {\n const arr = (outputsHistory as any)?.[step] as unknown[];\n if (!Array.isArray(arr)) continue;\n for (const raw of arr) {\n let ts: number | undefined;\n if (raw && typeof raw === 'object' && typeof (raw as any).ts === 'number') {\n ts = (raw as any).ts;\n }\n if (!Number.isFinite(ts as number)) {\n ts = tsBase + counter++;\n }\n const text = normalizeText(step, raw);\n const role = normalizeRole(step);\n messages.push({ step, role, text, ts: ts as number, raw });\n }\n }\n\n // Sort by timestamp and apply direction/limit\n messages.sort((a, b) => a.ts - b.ts);\n if (direction === 'desc') {\n messages.reverse();\n }\n\n if (limit && limit > 0 && messages.length > limit) {\n if (direction === 'asc') {\n return messages.slice(messages.length - limit);\n }\n return messages.slice(0, limit);\n }\n\n return messages;\n } catch {\n return [];\n }\n }\n );\n\n // Removed: merge_sort_by filter (unused)\n}\n\n/**\n * Create a new Liquid instance with custom extensions\n */\nexport function createExtendedLiquid(options: Record<string, unknown> = {}): Liquid {\n const liquid = new Liquid({\n cache: false,\n strictFilters: false,\n strictVariables: false,\n ...options,\n });\n\n configureLiquidWithExtensions(liquid);\n return liquid;\n}\n"],"mappings":"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","names":["path"]}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
init_logger,
|
|
3
|
-
logger
|
|
4
|
-
} from "./chunk-ZPYODGYA.mjs";
|
|
5
|
-
import {
|
|
6
|
-
__esm
|
|
7
|
-
} from "./chunk-J7LXIPZS.mjs";
|
|
8
|
-
|
|
9
|
-
// src/utils/command-executor.ts
|
|
10
|
-
import { exec } from "child_process";
|
|
11
|
-
import { promisify } from "util";
|
|
12
|
-
var CommandExecutor, commandExecutor;
|
|
13
|
-
var init_command_executor = __esm({
|
|
14
|
-
"src/utils/command-executor.ts"() {
|
|
15
|
-
init_logger();
|
|
16
|
-
CommandExecutor = class _CommandExecutor {
|
|
17
|
-
static instance;
|
|
18
|
-
constructor() {
|
|
19
|
-
}
|
|
20
|
-
static getInstance() {
|
|
21
|
-
if (!_CommandExecutor.instance) {
|
|
22
|
-
_CommandExecutor.instance = new _CommandExecutor();
|
|
23
|
-
}
|
|
24
|
-
return _CommandExecutor.instance;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Execute a shell command with optional stdin, environment, and timeout
|
|
28
|
-
*/
|
|
29
|
-
async execute(command, options = {}) {
|
|
30
|
-
const execAsync = promisify(exec);
|
|
31
|
-
const timeout = options.timeout || 3e4;
|
|
32
|
-
if (options.stdin) {
|
|
33
|
-
return this.executeWithStdin(command, options);
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
const result = await execAsync(command, {
|
|
37
|
-
cwd: options.cwd,
|
|
38
|
-
env: options.env,
|
|
39
|
-
timeout
|
|
40
|
-
});
|
|
41
|
-
return {
|
|
42
|
-
stdout: result.stdout || "",
|
|
43
|
-
stderr: result.stderr || "",
|
|
44
|
-
exitCode: 0
|
|
45
|
-
};
|
|
46
|
-
} catch (error) {
|
|
47
|
-
return this.handleExecutionError(error, timeout);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Execute command with stdin input
|
|
52
|
-
*/
|
|
53
|
-
executeWithStdin(command, options) {
|
|
54
|
-
return new Promise((resolve, reject) => {
|
|
55
|
-
const childProcess = exec(
|
|
56
|
-
command,
|
|
57
|
-
{
|
|
58
|
-
cwd: options.cwd,
|
|
59
|
-
env: options.env,
|
|
60
|
-
timeout: options.timeout || 3e4
|
|
61
|
-
},
|
|
62
|
-
(error, stdout, stderr) => {
|
|
63
|
-
if (error && error.killed && (error.code === "ETIMEDOUT" || error.signal === "SIGTERM")) {
|
|
64
|
-
reject(new Error(`Command timed out after ${options.timeout || 3e4}ms`));
|
|
65
|
-
} else {
|
|
66
|
-
resolve({
|
|
67
|
-
stdout: stdout || "",
|
|
68
|
-
stderr: stderr || "",
|
|
69
|
-
exitCode: error ? error.code || 1 : 0
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
);
|
|
74
|
-
if (options.stdin && childProcess.stdin) {
|
|
75
|
-
childProcess.stdin.write(options.stdin);
|
|
76
|
-
childProcess.stdin.end();
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Handle execution errors consistently
|
|
82
|
-
*/
|
|
83
|
-
handleExecutionError(error, timeout) {
|
|
84
|
-
const execError = error;
|
|
85
|
-
if (execError.killed && (execError.code === "ETIMEDOUT" || execError.signal === "SIGTERM")) {
|
|
86
|
-
throw new Error(`Command timed out after ${timeout}ms`);
|
|
87
|
-
}
|
|
88
|
-
let exitCode = 1;
|
|
89
|
-
if (execError.code) {
|
|
90
|
-
exitCode = typeof execError.code === "string" ? parseInt(execError.code, 10) : execError.code;
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
stdout: execError.stdout || "",
|
|
94
|
-
stderr: execError.stderr || "",
|
|
95
|
-
exitCode
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Build safe environment variables by merging process.env with custom env
|
|
100
|
-
* Ensures all values are strings (no undefined)
|
|
101
|
-
*/
|
|
102
|
-
buildEnvironment(baseEnv = process.env, ...customEnvs) {
|
|
103
|
-
const result = {};
|
|
104
|
-
for (const [key, value] of Object.entries(baseEnv)) {
|
|
105
|
-
if (value !== void 0) {
|
|
106
|
-
result[key] = value;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
for (const customEnv of customEnvs) {
|
|
110
|
-
if (customEnv) {
|
|
111
|
-
Object.assign(result, customEnv);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return result;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Log command execution for debugging
|
|
118
|
-
*/
|
|
119
|
-
logExecution(command, options) {
|
|
120
|
-
const debugInfo = [
|
|
121
|
-
`Executing command: ${command}`,
|
|
122
|
-
options.cwd ? `cwd: ${options.cwd}` : null,
|
|
123
|
-
options.stdin ? "with stdin" : null,
|
|
124
|
-
options.timeout ? `timeout: ${options.timeout}ms` : null,
|
|
125
|
-
options.env ? `env vars: ${Object.keys(options.env).length}` : null
|
|
126
|
-
].filter(Boolean).join(", ");
|
|
127
|
-
logger.debug(debugInfo);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
commandExecutor = CommandExecutor.getInstance();
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
export {
|
|
135
|
-
CommandExecutor,
|
|
136
|
-
commandExecutor,
|
|
137
|
-
init_command_executor
|
|
138
|
-
};
|
|
139
|
-
//# sourceMappingURL=chunk-S5FSRHMY.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/command-executor.ts"],"sourcesContent":["import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { logger } from '../logger';\n\nexport interface CommandExecutionOptions {\n stdin?: string;\n cwd?: string;\n env?: Record<string, string>;\n timeout?: number;\n}\n\nexport interface CommandExecutionResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\n/**\n * Shared utility for executing shell commands\n * Used by both CommandCheckProvider and CustomToolExecutor\n */\nexport class CommandExecutor {\n private static instance: CommandExecutor;\n\n private constructor() {}\n\n static getInstance(): CommandExecutor {\n if (!CommandExecutor.instance) {\n CommandExecutor.instance = new CommandExecutor();\n }\n return CommandExecutor.instance;\n }\n\n /**\n * Execute a shell command with optional stdin, environment, and timeout\n */\n async execute(\n command: string,\n options: CommandExecutionOptions = {}\n ): Promise<CommandExecutionResult> {\n const execAsync = promisify(exec);\n const timeout = options.timeout || 30000;\n\n // If stdin is provided, we need to handle it differently\n if (options.stdin) {\n return this.executeWithStdin(command, options);\n }\n\n // For commands without stdin, use the simpler promisified version\n try {\n const result = await execAsync(command, {\n cwd: options.cwd,\n env: options.env as NodeJS.ProcessEnv,\n timeout,\n });\n\n return {\n stdout: result.stdout || '',\n stderr: result.stderr || '',\n exitCode: 0,\n };\n } catch (error) {\n return this.handleExecutionError(error, timeout);\n }\n }\n\n /**\n * Execute command with stdin input\n */\n private executeWithStdin(\n command: string,\n options: CommandExecutionOptions\n ): Promise<CommandExecutionResult> {\n return new Promise((resolve, reject) => {\n const childProcess = exec(\n command,\n {\n cwd: options.cwd,\n env: options.env as NodeJS.ProcessEnv,\n timeout: options.timeout || 30000,\n },\n (error, stdout, stderr) => {\n // Check if the process was killed due to timeout\n if (\n error &&\n error.killed &&\n ((error as NodeJS.ErrnoException).code === 'ETIMEDOUT' || error.signal === 'SIGTERM')\n ) {\n reject(new Error(`Command timed out after ${options.timeout || 30000}ms`));\n } else {\n resolve({\n stdout: stdout || '',\n stderr: stderr || '',\n exitCode: error ? error.code || 1 : 0,\n });\n }\n }\n );\n\n // Write stdin and close\n if (options.stdin && childProcess.stdin) {\n childProcess.stdin.write(options.stdin);\n childProcess.stdin.end();\n }\n });\n }\n\n /**\n * Handle execution errors consistently\n */\n private handleExecutionError(error: unknown, timeout: number): CommandExecutionResult {\n const execError = error as NodeJS.ErrnoException & {\n stdout?: string;\n stderr?: string;\n killed?: boolean;\n code?: string | number;\n signal?: string;\n };\n\n // Check if the process was killed due to timeout\n // Node.js sets killed: true and signal: 'SIGTERM' when timeout expires\n if (execError.killed && (execError.code === 'ETIMEDOUT' || execError.signal === 'SIGTERM')) {\n throw new Error(`Command timed out after ${timeout}ms`);\n }\n\n // Extract exit code - it might be a string or number\n let exitCode = 1;\n if (execError.code) {\n exitCode = typeof execError.code === 'string' ? parseInt(execError.code, 10) : execError.code;\n }\n\n return {\n stdout: execError.stdout || '',\n stderr: execError.stderr || '',\n exitCode,\n };\n }\n\n /**\n * Build safe environment variables by merging process.env with custom env\n * Ensures all values are strings (no undefined)\n */\n buildEnvironment(\n baseEnv: NodeJS.ProcessEnv = process.env,\n ...customEnvs: Array<Record<string, string> | undefined>\n ): Record<string, string> {\n const result: Record<string, string> = {};\n\n // Start with base environment, filtering out undefined values\n for (const [key, value] of Object.entries(baseEnv)) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n\n // Merge custom environments\n for (const customEnv of customEnvs) {\n if (customEnv) {\n Object.assign(result, customEnv);\n }\n }\n\n return result;\n }\n\n /**\n * Log command execution for debugging\n */\n logExecution(command: string, options: CommandExecutionOptions): void {\n const debugInfo = [\n `Executing command: ${command}`,\n options.cwd ? `cwd: ${options.cwd}` : null,\n options.stdin ? 'with stdin' : null,\n options.timeout ? `timeout: ${options.timeout}ms` : null,\n options.env ? `env vars: ${Object.keys(options.env).length}` : null,\n ]\n .filter(Boolean)\n .join(', ');\n\n logger.debug(debugInfo);\n }\n}\n\n// Export singleton instance for convenience\nexport const commandExecutor = CommandExecutor.getInstance();\n"],"mappings":"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","names":[]}
|
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getInstanceId,
|
|
3
|
-
init_instance_id,
|
|
4
|
-
require_package
|
|
5
|
-
} from "./chunk-MFXPJUUE.mjs";
|
|
6
|
-
import {
|
|
7
|
-
init_metrics,
|
|
8
|
-
metrics_exports
|
|
9
|
-
} from "./chunk-34QX63WK.mjs";
|
|
10
|
-
import {
|
|
11
|
-
SpanStatusCode,
|
|
12
|
-
context,
|
|
13
|
-
init_lazy_otel,
|
|
14
|
-
trace
|
|
15
|
-
} from "./chunk-UCMJJ3IM.mjs";
|
|
16
|
-
import {
|
|
17
|
-
__esm,
|
|
18
|
-
__export,
|
|
19
|
-
__require,
|
|
20
|
-
__toCommonJS
|
|
21
|
-
} from "./chunk-J7LXIPZS.mjs";
|
|
22
|
-
|
|
23
|
-
// src/telemetry/fallback-ndjson.ts
|
|
24
|
-
var fallback_ndjson_exports = {};
|
|
25
|
-
__export(fallback_ndjson_exports, {
|
|
26
|
-
emitNdjsonFallback: () => emitNdjsonFallback,
|
|
27
|
-
emitNdjsonFullSpan: () => emitNdjsonFullSpan,
|
|
28
|
-
emitNdjsonSpanWithEvents: () => emitNdjsonSpanWithEvents,
|
|
29
|
-
flushNdjson: () => flushNdjson
|
|
30
|
-
});
|
|
31
|
-
import * as fs from "fs";
|
|
32
|
-
import * as path from "path";
|
|
33
|
-
function resolveTargetPath(outDir) {
|
|
34
|
-
if (process.env.VISOR_FALLBACK_TRACE_FILE) {
|
|
35
|
-
CURRENT_FILE = process.env.VISOR_FALLBACK_TRACE_FILE;
|
|
36
|
-
return CURRENT_FILE;
|
|
37
|
-
}
|
|
38
|
-
if (CURRENT_FILE) return CURRENT_FILE;
|
|
39
|
-
const ts = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
40
|
-
CURRENT_FILE = path.join(outDir, `${ts}.ndjson`);
|
|
41
|
-
return CURRENT_FILE;
|
|
42
|
-
}
|
|
43
|
-
function isEnabled() {
|
|
44
|
-
if (process.env.VISOR_FALLBACK_TRACE_FILE) return true;
|
|
45
|
-
return process.env.VISOR_TELEMETRY_ENABLED === "true" && (process.env.VISOR_TELEMETRY_SINK || "file") === "file";
|
|
46
|
-
}
|
|
47
|
-
function appendAsync(outDir, line) {
|
|
48
|
-
writeChain = writeChain.then(async () => {
|
|
49
|
-
if (!dirReady) {
|
|
50
|
-
try {
|
|
51
|
-
await fs.promises.mkdir(outDir, { recursive: true });
|
|
52
|
-
} catch {
|
|
53
|
-
}
|
|
54
|
-
dirReady = true;
|
|
55
|
-
}
|
|
56
|
-
const target = resolveTargetPath(outDir);
|
|
57
|
-
await fs.promises.appendFile(target, line, "utf8");
|
|
58
|
-
}).catch(() => {
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
async function flushNdjson() {
|
|
62
|
-
try {
|
|
63
|
-
await writeChain;
|
|
64
|
-
} catch {
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
function emitNdjsonFallback(name, attrs) {
|
|
68
|
-
try {
|
|
69
|
-
if (!isEnabled()) return;
|
|
70
|
-
const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), "output", "traces");
|
|
71
|
-
const line = JSON.stringify({ name, attributes: attrs }) + "\n";
|
|
72
|
-
appendAsync(outDir, line);
|
|
73
|
-
} catch {
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function emitNdjsonSpanWithEvents(name, attrs, events) {
|
|
77
|
-
try {
|
|
78
|
-
if (!isEnabled()) return;
|
|
79
|
-
const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), "output", "traces");
|
|
80
|
-
const line = JSON.stringify({ name, attributes: attrs, events }) + "\n";
|
|
81
|
-
appendAsync(outDir, line);
|
|
82
|
-
} catch {
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
function emitNdjsonFullSpan(record) {
|
|
86
|
-
try {
|
|
87
|
-
if (!isEnabled()) return;
|
|
88
|
-
const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), "output", "traces");
|
|
89
|
-
const line = JSON.stringify(record) + "\n";
|
|
90
|
-
appendAsync(outDir, line);
|
|
91
|
-
} catch {
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
var CURRENT_FILE, dirReady, writeChain;
|
|
95
|
-
var init_fallback_ndjson = __esm({
|
|
96
|
-
"src/telemetry/fallback-ndjson.ts"() {
|
|
97
|
-
"use strict";
|
|
98
|
-
CURRENT_FILE = null;
|
|
99
|
-
dirReady = false;
|
|
100
|
-
writeChain = Promise.resolve();
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
// src/telemetry/trace-helpers.ts
|
|
105
|
-
var trace_helpers_exports = {};
|
|
106
|
-
__export(trace_helpers_exports, {
|
|
107
|
-
__getOrCreateNdjsonPath: () => __getOrCreateNdjsonPath,
|
|
108
|
-
_appendRunMarker: () => _appendRunMarker,
|
|
109
|
-
addEvent: () => addEvent,
|
|
110
|
-
getTracer: () => getTracer,
|
|
111
|
-
getVisorRunAttributes: () => getVisorRunAttributes,
|
|
112
|
-
setSpanAttributes: () => setSpanAttributes,
|
|
113
|
-
setSpanError: () => setSpanError,
|
|
114
|
-
withActiveSpan: () => withActiveSpan,
|
|
115
|
-
withVisorRun: () => withVisorRun
|
|
116
|
-
});
|
|
117
|
-
function getTracer() {
|
|
118
|
-
return trace.getTracer("visor");
|
|
119
|
-
}
|
|
120
|
-
async function withActiveSpan(name, attrs, fn) {
|
|
121
|
-
const tracer = getTracer();
|
|
122
|
-
return await new Promise((resolve, reject) => {
|
|
123
|
-
const callback = async (span) => {
|
|
124
|
-
try {
|
|
125
|
-
const res = await fn(span);
|
|
126
|
-
resolve(res);
|
|
127
|
-
} catch (err) {
|
|
128
|
-
try {
|
|
129
|
-
if (err instanceof Error) span.recordException(err);
|
|
130
|
-
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
131
|
-
} catch {
|
|
132
|
-
}
|
|
133
|
-
reject(err);
|
|
134
|
-
} finally {
|
|
135
|
-
try {
|
|
136
|
-
span.end();
|
|
137
|
-
} catch {
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
const options = attrs ? { attributes: attrs } : {};
|
|
142
|
-
tracer.startActiveSpan(name, options, callback);
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
function addEvent(name, attrs) {
|
|
146
|
-
const span = trace.getSpan(context.active());
|
|
147
|
-
if (span) {
|
|
148
|
-
try {
|
|
149
|
-
span.addEvent(name, attrs);
|
|
150
|
-
} catch {
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
try {
|
|
154
|
-
const { emitNdjsonSpanWithEvents: emitNdjsonSpanWithEvents2 } = (init_fallback_ndjson(), __toCommonJS(fallback_ndjson_exports));
|
|
155
|
-
emitNdjsonSpanWithEvents2("visor.event", {}, [{ name, attrs }]);
|
|
156
|
-
if (name === "fail_if.triggered") {
|
|
157
|
-
emitNdjsonSpanWithEvents2("visor.event", {}, [
|
|
158
|
-
{ name: "fail_if.evaluated", attrs },
|
|
159
|
-
{ name: "fail_if.triggered", attrs }
|
|
160
|
-
]);
|
|
161
|
-
}
|
|
162
|
-
} catch {
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
function setSpanAttributes(attrs) {
|
|
166
|
-
const span = trace.getSpan(context.active());
|
|
167
|
-
if (!span) return;
|
|
168
|
-
try {
|
|
169
|
-
for (const [k, v] of Object.entries(attrs)) span.setAttribute(k, v);
|
|
170
|
-
} catch {
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
function setSpanError(err) {
|
|
174
|
-
const span = trace.getSpan(context.active());
|
|
175
|
-
if (!span) return;
|
|
176
|
-
try {
|
|
177
|
-
if (err instanceof Error) span.recordException(err);
|
|
178
|
-
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
179
|
-
} catch {
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
function getVisorRunAttributes() {
|
|
183
|
-
const attrs = {};
|
|
184
|
-
try {
|
|
185
|
-
attrs["visor.version"] = process.env.VISOR_VERSION || (require_package()?.version ?? "dev");
|
|
186
|
-
} catch {
|
|
187
|
-
attrs["visor.version"] = "dev";
|
|
188
|
-
}
|
|
189
|
-
const commitShort = process.env.VISOR_COMMIT_SHORT || "";
|
|
190
|
-
const commitFull = process.env.VISOR_COMMIT_SHA || process.env.VISOR_COMMIT || "";
|
|
191
|
-
if (commitShort) {
|
|
192
|
-
attrs["visor.commit"] = commitShort;
|
|
193
|
-
}
|
|
194
|
-
if (commitFull) {
|
|
195
|
-
attrs["visor.commit.sha"] = commitFull;
|
|
196
|
-
}
|
|
197
|
-
attrs["visor.instance_id"] = getInstanceId();
|
|
198
|
-
return attrs;
|
|
199
|
-
}
|
|
200
|
-
async function withVisorRun(attrs, runMeta, fn) {
|
|
201
|
-
const {
|
|
202
|
-
recordRunStart,
|
|
203
|
-
recordRunDuration,
|
|
204
|
-
resetRunAiCalls,
|
|
205
|
-
recordRunAiCalls,
|
|
206
|
-
getRunAiCalls
|
|
207
|
-
} = (init_metrics(), __toCommonJS(metrics_exports));
|
|
208
|
-
const instanceId = getInstanceId();
|
|
209
|
-
recordRunStart({
|
|
210
|
-
source: runMeta.source,
|
|
211
|
-
userId: runMeta.userId,
|
|
212
|
-
userName: runMeta.userName,
|
|
213
|
-
workflowId: runMeta.workflowId,
|
|
214
|
-
instanceId
|
|
215
|
-
});
|
|
216
|
-
resetRunAiCalls();
|
|
217
|
-
const startMs = Date.now();
|
|
218
|
-
let success = true;
|
|
219
|
-
try {
|
|
220
|
-
return await withActiveSpan("visor.run", attrs, async (span) => {
|
|
221
|
-
try {
|
|
222
|
-
return await fn(span);
|
|
223
|
-
} finally {
|
|
224
|
-
try {
|
|
225
|
-
span.setAttribute("visor.run.ai_calls", getRunAiCalls());
|
|
226
|
-
span.setAttribute("visor.run.duration_ms", Date.now() - startMs);
|
|
227
|
-
} catch {
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
} catch (err) {
|
|
232
|
-
success = false;
|
|
233
|
-
throw err;
|
|
234
|
-
} finally {
|
|
235
|
-
recordRunAiCalls({
|
|
236
|
-
source: runMeta.source,
|
|
237
|
-
workflowId: runMeta.workflowId
|
|
238
|
-
});
|
|
239
|
-
recordRunDuration(Date.now() - startMs, {
|
|
240
|
-
source: runMeta.source,
|
|
241
|
-
userId: runMeta.userId,
|
|
242
|
-
workflowId: runMeta.workflowId,
|
|
243
|
-
success
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
function __getOrCreateNdjsonPath() {
|
|
248
|
-
try {
|
|
249
|
-
if (process.env.VISOR_TELEMETRY_SINK && process.env.VISOR_TELEMETRY_SINK !== "file")
|
|
250
|
-
return null;
|
|
251
|
-
const path2 = __require("path");
|
|
252
|
-
const fs2 = __require("fs");
|
|
253
|
-
if (process.env.VISOR_FALLBACK_TRACE_FILE) {
|
|
254
|
-
__ndjsonPath = process.env.VISOR_FALLBACK_TRACE_FILE;
|
|
255
|
-
const dir = path2.dirname(__ndjsonPath);
|
|
256
|
-
if (!fs2.existsSync(dir)) fs2.mkdirSync(dir, { recursive: true });
|
|
257
|
-
return __ndjsonPath;
|
|
258
|
-
}
|
|
259
|
-
const outDir = process.env.VISOR_TRACE_DIR || path2.join(process.cwd(), "output", "traces");
|
|
260
|
-
if (!fs2.existsSync(outDir)) fs2.mkdirSync(outDir, { recursive: true });
|
|
261
|
-
if (!__ndjsonPath) {
|
|
262
|
-
const ts = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
263
|
-
__ndjsonPath = path2.join(outDir, `${ts}.ndjson`);
|
|
264
|
-
}
|
|
265
|
-
return __ndjsonPath;
|
|
266
|
-
} catch {
|
|
267
|
-
return null;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
function _appendRunMarker() {
|
|
271
|
-
try {
|
|
272
|
-
const fs2 = __require("fs");
|
|
273
|
-
const p = __getOrCreateNdjsonPath();
|
|
274
|
-
if (!p) return;
|
|
275
|
-
const line = { name: "visor.run", attributes: { started: true } };
|
|
276
|
-
fs2.appendFileSync(p, JSON.stringify(line) + "\n", "utf8");
|
|
277
|
-
} catch {
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
var __ndjsonPath;
|
|
281
|
-
var init_trace_helpers = __esm({
|
|
282
|
-
"src/telemetry/trace-helpers.ts"() {
|
|
283
|
-
init_lazy_otel();
|
|
284
|
-
init_instance_id();
|
|
285
|
-
__ndjsonPath = null;
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
export {
|
|
290
|
-
emitNdjsonFallback,
|
|
291
|
-
emitNdjsonSpanWithEvents,
|
|
292
|
-
emitNdjsonFullSpan,
|
|
293
|
-
fallback_ndjson_exports,
|
|
294
|
-
init_fallback_ndjson,
|
|
295
|
-
getTracer,
|
|
296
|
-
withActiveSpan,
|
|
297
|
-
addEvent,
|
|
298
|
-
setSpanAttributes,
|
|
299
|
-
setSpanError,
|
|
300
|
-
getVisorRunAttributes,
|
|
301
|
-
withVisorRun,
|
|
302
|
-
__getOrCreateNdjsonPath,
|
|
303
|
-
_appendRunMarker,
|
|
304
|
-
trace_helpers_exports,
|
|
305
|
-
init_trace_helpers
|
|
306
|
-
};
|
|
307
|
-
//# sourceMappingURL=chunk-TFUQ2D5L.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/telemetry/fallback-ndjson.ts","../../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/**\n * Emit a full span record to fallback NDJSON including traceId, spanId,\n * parentSpanId, and timing — compatible with the trace serializer's\n * parseLocalNDJSONSpans format.\n */\nexport function emitNdjsonFullSpan(record: {\n name: string;\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n startTime?: [number, number];\n endTime?: [number, number];\n attributes?: Record<string, unknown>;\n events?: Array<{ name: string; attributes?: Record<string, unknown> }>;\n status?: { code?: number };\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(record) + '\\n';\n appendAsync(outDir, line);\n } catch {\n // ignore\n }\n}\n","import { context as otContext, Span, SpanStatusCode, trace, Attributes } from './lazy-otel';\nimport { getInstanceId } from '../utils/instance-id';\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 attrs['visor.instance_id'] = getInstanceId();\n return attrs;\n}\n\n/**\n * Wraps a visor.run span with automatic run metrics (counter + duration histogram).\n * Use this instead of raw `withActiveSpan('visor.run', ...)` to get metrics for free.\n */\nexport async function withVisorRun<T>(\n attrs: Record<string, unknown>,\n runMeta: {\n source?: string;\n userId?: string;\n userName?: string;\n workflowId?: string;\n },\n fn: (span: Span) => Promise<T>\n): Promise<T> {\n const {\n recordRunStart,\n recordRunDuration,\n resetRunAiCalls,\n recordRunAiCalls,\n getRunAiCalls,\n } = require('./metrics');\n const instanceId = getInstanceId();\n recordRunStart({\n source: runMeta.source,\n userId: runMeta.userId,\n userName: runMeta.userName,\n workflowId: runMeta.workflowId,\n instanceId,\n });\n resetRunAiCalls();\n const startMs = Date.now();\n let success = true;\n try {\n return await withActiveSpan('visor.run', attrs, async span => {\n try {\n return await fn(span);\n } finally {\n // Record AI call count as span attribute for trace visibility\n try {\n span.setAttribute('visor.run.ai_calls', getRunAiCalls());\n span.setAttribute('visor.run.duration_ms', Date.now() - startMs);\n } catch {}\n }\n });\n } catch (err) {\n success = false;\n throw err;\n } finally {\n recordRunAiCalls({\n source: runMeta.source,\n workflowId: runMeta.workflowId,\n });\n recordRunDuration(Date.now() - startMs, {\n source: runMeta.source,\n userId: runMeta.userId,\n workflowId: runMeta.workflowId,\n success,\n });\n }\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":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAKtB,SAAS,kBAAkB,QAAwB;AACjD,MAAI,QAAQ,IAAI,2BAA2B;AACzC,mBAAe,QAAQ,IAAI;AAC3B,WAAO;AAAA,EACT;AACA,MAAI,aAAc,QAAO;AACzB,QAAM,MAAK,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AACxD,iBAAoB,UAAK,QAAQ,GAAG,EAAE,SAAS;AAC/C,SAAO;AACT;AAEA,SAAS,YAAqB;AAE5B,MAAI,QAAQ,IAAI,0BAA2B,QAAO;AAClD,SACE,QAAQ,IAAI,4BAA4B,WACvC,QAAQ,IAAI,wBAAwB,YAAY;AAErD;AAEA,SAAS,YAAY,QAAgB,MAAoB;AACvD,eAAa,WACV,KAAK,YAAY;AAChB,QAAI,CAAC,UAAU;AACb,UAAI;AACF,cAAS,YAAS,MAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,MACrD,QAAQ;AAAA,MAAC;AACT,iBAAW;AAAA,IACb;AACA,UAAM,SAAS,kBAAkB,MAAM;AACvC,UAAS,YAAS,WAAW,QAAQ,MAAM,MAAM;AAAA,EACnD,CAAC,EACA,MAAM,MAAM;AAAA,EAAC,CAAC;AACnB;AAEA,eAAsB,cAA6B;AACjD,MAAI;AACF,UAAM;AAAA,EACR,QAAQ;AAAA,EAAC;AACX;AAEO,SAAS,mBAAmB,MAAc,OAAsC;AACrF,MAAI;AACF,QAAI,CAAC,UAAU,EAAG;AAClB,UAAM,SAAS,QAAQ,IAAI,mBAAwB,UAAK,QAAQ,IAAI,GAAG,UAAU,QAAQ;AACzF,UAAM,OAAO,KAAK,UAAU,EAAE,MAAM,YAAY,MAAM,CAAC,IAAI;AAC3D,gBAAY,QAAQ,IAAI;AAAA,EAC1B,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,yBACd,MACA,OACA,QACM;AACN,MAAI;AACF,QAAI,CAAC,UAAU,EAAG;AAClB,UAAM,SAAS,QAAQ,IAAI,mBAAwB,UAAK,QAAQ,IAAI,GAAG,UAAU,QAAQ;AACzF,UAAM,OAAO,KAAK,UAAU,EAAE,MAAM,YAAY,OAAO,OAAO,CAAC,IAAI;AACnE,gBAAY,QAAQ,IAAI;AAAA,EAC1B,QAAQ;AAAA,EAER;AACF;AAOO,SAAS,mBAAmB,QAU1B;AACP,MAAI;AACF,QAAI,CAAC,UAAU,EAAG;AAClB,UAAM,SAAS,QAAQ,IAAI,mBAAwB,UAAK,QAAQ,IAAI,GAAG,UAAU,QAAQ;AACzF,UAAM,OAAO,KAAK,UAAU,MAAM,IAAI;AACtC,gBAAY,QAAQ,IAAI;AAAA,EAC1B,QAAQ;AAAA,EAER;AACF;AAjGA,IAGI,cACA,UACA;AALJ;AAAA;AAAA;AAGA,IAAI,eAA8B;AAClC,IAAI,WAAW;AACf,IAAI,aAA4B,QAAQ,QAAQ;AAAA;AAAA;;;ACLhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,SAAS,YAAY;AAC1B,SAAO,MAAM,UAAU,OAAO;AAChC;AAEA,eAAsB,eACpB,MACA,OACA,IACY;AACZ,QAAM,SAAS,UAAU;AAGzB,SAAO,MAAM,IAAI,QAAW,CAAC,SAAS,WAAW;AAC/C,UAAM,WAAW,OAAO,SAAe;AAErC,UAAI;AACF,cAAM,MAAM,MAAM,GAAG,IAAI;AAEzB,gBAAQ,GAAG;AAAA,MACb,SAAS,KAAK;AAEZ,YAAI;AACF,cAAI,eAAe,MAAO,MAAK,gBAAgB,GAAG;AAClD,eAAK,UAAU,EAAE,MAAM,eAAe,MAAM,CAAC;AAAA,QAC/C,QAAQ;AAAA,QAAC;AACT,eAAO,GAAG;AAAA,MACZ,UAAE;AACA,YAAI;AAEF,eAAK,IAAI;AAAA,QACX,QAAQ;AAAA,QAAC;AAAA,MACX;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ,EAAE,YAAY,MAAoB,IAAI,CAAC;AAC/D,WAAO,gBAAgB,MAAM,SAAS,QAAQ;AAAA,EAChD,CAAC;AACH;AAEO,SAAS,SAAS,MAAc,OAAuC;AAC5E,QAAM,OAAO,MAAM,QAAQ,QAAU,OAAO,CAAC;AAC7C,MAAI,MAAM;AACR,QAAI;AACF,WAAK,SAAS,MAAM,KAAmB;AAAA,IACzC,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,MAAI;AACF,UAAM,EAAE,0BAAAA,0BAAyB,IAAI;AACrC,IAAAA,0BAAyB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC,CAAC;AAC7D,QAAI,SAAS,qBAAqB;AAChC,MAAAA,0BAAyB,eAAe,CAAC,GAAG;AAAA,QAC1C,EAAE,MAAM,qBAAqB,MAAM;AAAA,QACnC,EAAE,MAAM,qBAAqB,MAAM;AAAA,MACrC,CAAC;AAAA,IACH;AAAA,EACF,QAAQ;AAAA,EAAC;AACX;AAEO,SAAS,kBAAkB,OAAsC;AACtE,QAAM,OAAO,MAAM,QAAQ,QAAU,OAAO,CAAC;AAC7C,MAAI,CAAC,KAAM;AACX,MAAI;AACF,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,EAAG,MAAK,aAAa,GAAG,CAAU;AAAA,EAC7E,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,aAAa,KAAoB;AAC/C,QAAM,OAAO,MAAM,QAAQ,QAAU,OAAO,CAAC;AAC7C,MAAI,CAAC,KAAM;AACX,MAAI;AACF,QAAI,eAAe,MAAO,MAAK,gBAAgB,GAAG;AAClD,SAAK,UAAU,EAAE,MAAM,eAAe,MAAM,CAAC;AAAA,EAC/C,QAAQ;AAAA,EAER;AACF;AAMO,SAAS,wBAAgD;AAC9D,QAAM,QAAgC,CAAC;AACvC,MAAI;AACF,UAAM,eAAe,IACnB,QAAQ,IAAI,kBAAkB,mBAA+B,WAAW;AAAA,EAC5E,QAAQ;AACN,UAAM,eAAe,IAAI;AAAA,EAC3B;AACA,QAAM,cAAc,QAAQ,IAAI,sBAAsB;AACtD,QAAM,aAAa,QAAQ,IAAI,oBAAoB,QAAQ,IAAI,gBAAgB;AAC/E,MAAI,aAAa;AACf,UAAM,cAAc,IAAI;AAAA,EAC1B;AACA,MAAI,YAAY;AACd,UAAM,kBAAkB,IAAI;AAAA,EAC9B;AACA,QAAM,mBAAmB,IAAI,cAAc;AAC3C,SAAO;AACT;AAMA,eAAsB,aACpB,OACA,SAMA,IACY;AACZ,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM,aAAa,cAAc;AACjC,iBAAe;AAAA,IACb,QAAQ,QAAQ;AAAA,IAChB,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,YAAY,QAAQ;AAAA,IACpB;AAAA,EACF,CAAC;AACD,kBAAgB;AAChB,QAAM,UAAU,KAAK,IAAI;AACzB,MAAI,UAAU;AACd,MAAI;AACF,WAAO,MAAM,eAAe,aAAa,OAAO,OAAM,SAAQ;AAC5D,UAAI;AACF,eAAO,MAAM,GAAG,IAAI;AAAA,MACtB,UAAE;AAEA,YAAI;AACF,eAAK,aAAa,sBAAsB,cAAc,CAAC;AACvD,eAAK,aAAa,yBAAyB,KAAK,IAAI,IAAI,OAAO;AAAA,QACjE,QAAQ;AAAA,QAAC;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,cAAU;AACV,UAAM;AAAA,EACR,UAAE;AACA,qBAAiB;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,IACtB,CAAC;AACD,sBAAkB,KAAK,IAAI,IAAI,SAAS;AAAA,MACtC,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAIO,SAAS,0BAAyC;AACvD,MAAI;AAEF,QAAI,QAAQ,IAAI,wBAAwB,QAAQ,IAAI,yBAAyB;AAC3E,aAAO;AACT,UAAMC,QAAO,UAAQ,MAAM;AAC3B,UAAMC,MAAK,UAAQ,IAAI;AAEvB,QAAI,QAAQ,IAAI,2BAA2B;AACzC,qBAAe,QAAQ,IAAI;AAC3B,YAAM,MAAMD,MAAK,QAAQ,YAAY;AACrC,UAAI,CAACC,IAAG,WAAW,GAAG,EAAG,CAAAA,IAAG,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAC9D,aAAO;AAAA,IACT;AACA,UAAM,SAAS,QAAQ,IAAI,mBAAmBD,MAAK,KAAK,QAAQ,IAAI,GAAG,UAAU,QAAQ;AACzF,QAAI,CAACC,IAAG,WAAW,MAAM,EAAG,CAAAA,IAAG,UAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AACpE,QAAI,CAAC,cAAc;AACjB,YAAM,MAAK,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AACxD,qBAAeD,MAAK,KAAK,QAAQ,GAAG,EAAE,SAAS;AAAA,IACjD;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AACO,SAAS,mBAAyB;AACvC,MAAI;AACF,UAAMC,MAAK,UAAQ,IAAI;AACvB,UAAM,IAAI,wBAAwB;AAClC,QAAI,CAAC,EAAG;AACR,UAAM,OAAO,EAAE,MAAM,aAAa,YAAY,EAAE,SAAS,KAAK,EAAE;AAChE,IAAAA,IAAG,eAAe,GAAG,KAAK,UAAU,IAAI,IAAI,MAAM,MAAM;AAAA,EAC1D,QAAQ;AAAA,EAAC;AACX;AA7MA,IA2KI;AA3KJ;AAAA;AAAA;AACA;AA0KA,IAAI,eAA8B;AAAA;AAAA;","names":["emitNdjsonSpanWithEvents","path","fs"]}
|