@probelabs/visor 0.1.132-ee → 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 +48417 -29987
- package/dist/output/traces/run-2026-02-23T08-59-32-321Z.ndjson +138 -0
- package/dist/output/traces/run-2026-02-23T09-00-20-148Z.ndjson +1442 -0
- 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-KUDVEKAC.mjs → check-provider-registry-SA2WHPLO.mjs} +10 -9
- package/dist/sdk/check-provider-registry-SCL4KP55.mjs +29 -0
- package/dist/sdk/chunk-ALB3N4ZQ.mjs +443 -0
- package/dist/sdk/chunk-ALB3N4ZQ.mjs.map +1 -0
- package/dist/sdk/{chunk-27RV5RR2.mjs → chunk-BRD36I43.mjs} +3 -3
- package/dist/sdk/{chunk-2RNTEWOA.mjs → chunk-DFKP7LY6.mjs} +1901 -1767
- package/dist/sdk/chunk-DFKP7LY6.mjs.map +1 -0
- package/dist/sdk/{chunk-BGBXLPLL.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-J6F5K5EG.mjs +40235 -0
- 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-UMFEBYCN.mjs +1502 -0
- package/dist/sdk/chunk-UMFEBYCN.mjs.map +1 -0
- package/dist/sdk/chunk-XKCER23W.mjs +1490 -0
- package/dist/sdk/chunk-XKCER23W.mjs.map +1 -0
- package/dist/sdk/chunk-YTAGJZHN.mjs +739 -0
- package/dist/sdk/chunk-YTAGJZHN.mjs.map +1 -0
- 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-B5JJFYKU.mjs +17 -0
- package/dist/sdk/{github-frontend-WR4S3NG5.mjs → github-frontend-VAWVSCNX.mjs} +4 -4
- package/dist/sdk/github-frontend-ZOVXPPHQ.mjs +1356 -0
- package/dist/sdk/github-frontend-ZOVXPPHQ.mjs.map +1 -0
- package/dist/sdk/{host-TROSAWTE.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-F4FOWVKF.mjs → routing-HR6N43RQ.mjs} +6 -6
- package/dist/sdk/routing-SEQYM4N6.mjs +25 -0
- package/dist/sdk/schedule-tool-2COUUTF7.mjs +18 -0
- package/dist/sdk/{schedule-tool-handler-ULNF7TZW.mjs → schedule-tool-handler-5BDMLHS5.mjs} +10 -9
- package/dist/sdk/{schedule-tool-handler-VFES42DD.mjs → schedule-tool-handler-OXGTPLST.mjs} +9 -8
- package/dist/sdk/schedule-tool-handler-OXGTPLST.mjs.map +1 -0
- package/dist/sdk/schedule-tool-handler-Y2UABBXN.mjs +39 -0
- package/dist/sdk/schedule-tool-handler-Y2UABBXN.mjs.map +1 -0
- package/dist/sdk/sdk.d.mts +55 -2
- package/dist/sdk/sdk.d.ts +55 -2
- package/dist/sdk/sdk.js +2532 -1905
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +9 -8
- 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-FAAGLXBI.mjs.map +1 -0
- package/dist/sdk/trace-helpers-IGMH7ZPP.mjs +25 -0
- package/dist/sdk/trace-helpers-IGMH7ZPP.mjs.map +1 -0
- package/dist/sdk/{workflow-check-provider-4NFWH6YO.mjs → workflow-check-provider-7SR7ZWSV.mjs} +9 -8
- package/dist/sdk/workflow-check-provider-7SR7ZWSV.mjs.map +1 -0
- package/dist/sdk/{workflow-check-provider-5XS62BCJ.mjs → workflow-check-provider-L2ZUOMJR.mjs} +10 -9
- package/dist/sdk/workflow-check-provider-L2ZUOMJR.mjs.map +1 -0
- package/dist/sdk/workflow-check-provider-WLA7LO56.mjs +29 -0
- 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-23T08-59-32-321Z.ndjson +138 -0
- package/dist/traces/run-2026-02-23T09-00-20-148Z.ndjson +1442 -0
- 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-2RNTEWOA.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/knex-store-HPXJILBL.mjs +0 -411
- package/dist/sdk/knex-store-HPXJILBL.mjs.map +0 -1
- package/dist/sdk/loader-ZC5G3JGJ.mjs +0 -89
- package/dist/sdk/loader-ZC5G3JGJ.mjs.map +0 -1
- package/dist/sdk/opa-policy-engine-S2S2ULEI.mjs +0 -655
- package/dist/sdk/opa-policy-engine-S2S2ULEI.mjs.map +0 -1
- package/dist/sdk/validator-XTZJZZJH.mjs +0 -134
- package/dist/sdk/validator-XTZJZZJH.mjs.map +0 -1
- /package/dist/sdk/{check-provider-registry-7TCA3NSG.mjs.map → check-provider-registry-BCGP62RY.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-KUDVEKAC.mjs.map → check-provider-registry-SA2WHPLO.mjs.map} +0 -0
- /package/dist/sdk/{config-FMIIATKX.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-XJQKTK6V.mjs.map → chunk-ZUEQNCKB.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-PNONVBXD.mjs.map → config-3UIU4TMP.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-YDIIH33Q.mjs.map → failure-condition-evaluator-3B3G5NYW.mjs.map} +0 -0
- /package/dist/sdk/{routing-F4FOWVKF.mjs.map → failure-condition-evaluator-B5JJFYKU.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-WR4S3NG5.mjs.map → github-frontend-VAWVSCNX.mjs.map} +0 -0
- /package/dist/sdk/{host-TROSAWTE.mjs.map → host-LOQWBHWT.mjs.map} +0 -0
- /package/dist/sdk/{host-U7V54J2H.mjs.map → host-TEQ7HKKH.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-ULNF7TZW.mjs.map → liquid-extensions-PLBOMRLI.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-VFES42DD.mjs.map → routing-HR6N43RQ.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-RDPXIN4S.mjs.map → routing-SEQYM4N6.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-4NFWH6YO.mjs.map → schedule-tool-2COUUTF7.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-5XS62BCJ.mjs.map → schedule-tool-handler-5BDMLHS5.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-reloader.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config/config-reloader.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAA4B,MAAM,yBAAyB,CAAC;AAExF,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,OAAO,CAAC,CAAuB;
|
|
1
|
+
{"version":3,"file":"config-reloader.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config/config-reloader.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAA4B,MAAM,yBAAyB,CAAC;AAExF,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,OAAO,CAAC,CAAuB;IACvC,OAAO,CAAC,cAAc,CAAuB;gBAEjC,OAAO,EAAE,qBAAqB;IAQ1C;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CAkCjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-watcher.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config/config-watcher.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAwE1F;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"config-watcher.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config/config-watcher.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAwE1F;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,mBAAmB,CAA6B;gBAE5C,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM;IAM7E,KAAK,IAAI,IAAI;IAyBb,IAAI,IAAI,IAAI;IAqBZ;;;OAGG;IACH,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,SAAS;IAyCjB,OAAO,CAAC,eAAe;IAqCvB;;;;OAIG;IACH,OAAO,CAAC,UAAU;CAYnB"}
|
package/dist/config.d.ts
CHANGED
|
@@ -13,6 +13,10 @@ export declare class ConfigManager {
|
|
|
13
13
|
private validEventTriggers;
|
|
14
14
|
private validOutputFormats;
|
|
15
15
|
private validGroupByOptions;
|
|
16
|
+
/**
|
|
17
|
+
* Annotate tools with the originating config directory for relative asset resolution.
|
|
18
|
+
*/
|
|
19
|
+
private annotateToolBaseDirs;
|
|
16
20
|
/**
|
|
17
21
|
* Load configuration from a file
|
|
18
22
|
*/
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAS9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAgBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAS9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAgBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAwHvB;;;OAGG;IACU,oBAAoB,CAC/B,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,CAAC;IAoDvB;;OAEG;IACU,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CrF;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBrD;;OAEG;IACI,wBAAwB,IAAI,WAAW,GAAG,IAAI;IA0FrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;OAGG;YACW,uBAAuB;IAkFrC;;OAEG;YACW,aAAa;IA6B3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY;IAqB9F;;OAEG;IACU,0BAA0B,IAAI,OAAO,CAAC;QACjD,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,CAAC;IA2BF;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,UAAQ,GAAG,IAAI;IA4VzE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoH7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8T3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmM5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0DhC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAqG7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6EhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA6B1B"}
|
|
@@ -55,6 +55,43 @@ When you use either `ai_custom_tools` or `tools: [...]` within an MCP server con
|
|
|
55
55
|
|
|
56
56
|
## Examples
|
|
57
57
|
|
|
58
|
+
### Example 0: OpenAPI API Bundle Tool
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
tools:
|
|
62
|
+
users-api:
|
|
63
|
+
type: api
|
|
64
|
+
name: users-api
|
|
65
|
+
spec: ./openapi/users.yaml
|
|
66
|
+
headers:
|
|
67
|
+
Authorization: "Bearer ${USERS_API_BEARER_TOKEN}"
|
|
68
|
+
X-Tenant-Id: "${USERS_API_TENANT_ID}"
|
|
69
|
+
overlays:
|
|
70
|
+
- ./openapi/users-overlay.yaml
|
|
71
|
+
- actions:
|
|
72
|
+
- target: "$.paths['/users/{id}'].get.operationId"
|
|
73
|
+
update: getUserFromInlineOverlay
|
|
74
|
+
whitelist: [get*]
|
|
75
|
+
targetUrl: https://api.example.com
|
|
76
|
+
|
|
77
|
+
steps:
|
|
78
|
+
api-assistant:
|
|
79
|
+
type: ai
|
|
80
|
+
prompt: Use users API tools to answer requests.
|
|
81
|
+
ai_custom_tools: [users-api]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`users-api` is a reusable tool bundle; each OpenAPI operation becomes an MCP tool exposed to AI.
|
|
85
|
+
`spec` and `overlays` support both inline objects and file/URL references.
|
|
86
|
+
`headers` also supports environment-variable interpolation (for example `Authorization: "Bearer ${USERS_API_BEARER_TOKEN}"`).
|
|
87
|
+
|
|
88
|
+
Repository examples:
|
|
89
|
+
|
|
90
|
+
- `examples/api-tools-library.yaml`
|
|
91
|
+
- `examples/api-tools-ai-example.yaml` (embedded tests)
|
|
92
|
+
- `examples/api-tools-mcp-example.yaml` (embedded tests)
|
|
93
|
+
- `examples/api-tools-inline-overlay-example.yaml` (embedded tests)
|
|
94
|
+
|
|
58
95
|
### Example 1: Security Scanning
|
|
59
96
|
|
|
60
97
|
```yaml
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
This feature allows AI checks to use custom
|
|
5
|
+
This feature allows AI checks to use custom tools defined in your Visor configuration:
|
|
6
|
+
|
|
7
|
+
- shell/command tools (`exec`)
|
|
8
|
+
- OpenAPI-backed API tool bundles (`type: api`)
|
|
9
|
+
|
|
10
|
+
Custom tools are automatically exposed to AI via ephemeral SSE (Server-Sent Events) MCP (Model Context Protocol) servers that start on-demand and clean up automatically.
|
|
6
11
|
|
|
7
12
|
## Key Benefits
|
|
8
13
|
|
|
@@ -120,6 +125,43 @@ steps:
|
|
|
120
125
|
|
|
121
126
|
### Basic Example
|
|
122
127
|
|
|
128
|
+
### API Bundle Example (`type: api`)
|
|
129
|
+
|
|
130
|
+
```yaml
|
|
131
|
+
tools:
|
|
132
|
+
users-api:
|
|
133
|
+
type: api
|
|
134
|
+
name: users-api
|
|
135
|
+
spec: ./openapi/users.yaml
|
|
136
|
+
headers:
|
|
137
|
+
Authorization: "Bearer ${USERS_API_BEARER_TOKEN}"
|
|
138
|
+
X-Tenant-Id: "${USERS_API_TENANT_ID}"
|
|
139
|
+
overlays:
|
|
140
|
+
- ./openapi/users-overlay.yaml
|
|
141
|
+
- actions:
|
|
142
|
+
- target: "$.paths['/users/{id}'].get.operationId"
|
|
143
|
+
update: getUserFromInlineOverlay
|
|
144
|
+
whitelist: [getUser*, GET:/users/*]
|
|
145
|
+
targetUrl: https://api.example.com
|
|
146
|
+
|
|
147
|
+
steps:
|
|
148
|
+
assistant:
|
|
149
|
+
type: ai
|
|
150
|
+
prompt: Use the users API tools to answer user questions.
|
|
151
|
+
ai_custom_tools: [users-api]
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Each OpenAPI operation with an `operationId` is exposed as an MCP tool for the AI check.
|
|
155
|
+
`spec` and `overlays` can both be loaded from file/URL or provided inline as YAML objects.
|
|
156
|
+
Custom `headers` are supported, and header values can use env interpolation (for example `${USERS_API_BEARER_TOKEN}`).
|
|
157
|
+
|
|
158
|
+
See runnable examples:
|
|
159
|
+
|
|
160
|
+
- `examples/api-tools-library.yaml`
|
|
161
|
+
- `examples/api-tools-ai-example.yaml` (embedded tests)
|
|
162
|
+
- `examples/api-tools-mcp-example.yaml` (embedded tests)
|
|
163
|
+
- `examples/api-tools-inline-overlay-example.yaml` (embedded tests)
|
|
164
|
+
|
|
123
165
|
### Advanced Example with Multiple Tools
|
|
124
166
|
|
|
125
167
|
```yaml
|
|
@@ -297,6 +297,75 @@ tools:
|
|
|
297
297
|
{% endcase %}
|
|
298
298
|
```
|
|
299
299
|
|
|
300
|
+
### 5. OpenAPI Tool Bundle (`type: api`)
|
|
301
|
+
|
|
302
|
+
You can expose an OpenAPI spec as MCP tools by defining a single reusable API bundle.
|
|
303
|
+
Both `spec` and `overlays` support file/URL and inline object forms:
|
|
304
|
+
|
|
305
|
+
```yaml
|
|
306
|
+
tools:
|
|
307
|
+
petstore-api:
|
|
308
|
+
type: api
|
|
309
|
+
name: petstore-api
|
|
310
|
+
description: Petstore API as MCP tools
|
|
311
|
+
spec: ./petstore-openapi.yaml
|
|
312
|
+
overlays:
|
|
313
|
+
- ./petstore-overlay.yaml
|
|
314
|
+
whitelist:
|
|
315
|
+
- "get*"
|
|
316
|
+
- "POST:/pets*"
|
|
317
|
+
targetUrl: https://petstore.example.com
|
|
318
|
+
headers:
|
|
319
|
+
X-Api-Version: "2026-01"
|
|
320
|
+
Authorization: "Bearer ${PETSTORE_BEARER_TOKEN}"
|
|
321
|
+
X-Tenant-Id: "${PETSTORE_TENANT_ID}"
|
|
322
|
+
apiKey: "${{ env.PETSTORE_API_KEY }}"
|
|
323
|
+
|
|
324
|
+
profiles-api:
|
|
325
|
+
type: api
|
|
326
|
+
name: profiles-api
|
|
327
|
+
spec:
|
|
328
|
+
openapi: "3.0.0"
|
|
329
|
+
info: { title: Profiles API, version: "1.0.0" }
|
|
330
|
+
servers: [{ url: "https://api.example.com" }]
|
|
331
|
+
paths:
|
|
332
|
+
/profiles/{id}:
|
|
333
|
+
get:
|
|
334
|
+
operationId: getProfile
|
|
335
|
+
parameters:
|
|
336
|
+
- name: id
|
|
337
|
+
in: path
|
|
338
|
+
required: true
|
|
339
|
+
schema: { type: string }
|
|
340
|
+
responses:
|
|
341
|
+
"200":
|
|
342
|
+
description: OK
|
|
343
|
+
overlays:
|
|
344
|
+
- ./profiles-overlay.yaml
|
|
345
|
+
- actions:
|
|
346
|
+
- target: "$.paths['/profiles/{id}'].get.operationId"
|
|
347
|
+
update: getProfileFromInlineOverlay
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Behavior:
|
|
351
|
+
|
|
352
|
+
- Each OpenAPI operation with an `operationId` is exposed as an MCP tool.
|
|
353
|
+
- Tool names/descriptions come from OpenAPI and support `x-mcp` overrides.
|
|
354
|
+
- Inputs include path/query/header parameters and `requestBody`.
|
|
355
|
+
- Security schemes from OpenAPI are applied at call time using `apiKey` / `securityCredentials`.
|
|
356
|
+
- `whitelist`/`blacklist` supports glob patterns for `operationId` and `METHOD:/path`.
|
|
357
|
+
- Overlay behavior matches `api-to-mcp`: action-based overlays (`actions[].target/update/remove`) plus deep-merge overlays when `actions` is omitted.
|
|
358
|
+
- `headers` values can reference environment variables (for example, `${PETSTORE_BEARER_TOKEN}` or `${{ env.PETSTORE_BEARER_TOKEN }}`).
|
|
359
|
+
|
|
360
|
+
This works with `ai_custom_tools`, `ai_mcp_servers.<name>.tools`, and `transport: custom` MCP execution.
|
|
361
|
+
|
|
362
|
+
Runnable examples in this repo:
|
|
363
|
+
|
|
364
|
+
- `examples/api-tools-library.yaml` (reusable API bundle in a separate file)
|
|
365
|
+
- `examples/api-tools-mcp-example.yaml` (includes embedded tests)
|
|
366
|
+
- `examples/api-tools-ai-example.yaml` (includes embedded tests)
|
|
367
|
+
- `examples/api-tools-inline-overlay-example.yaml` (includes embedded tests)
|
|
368
|
+
|
|
300
369
|
## Tool Libraries and Extends
|
|
301
370
|
|
|
302
371
|
### Creating a Tool Library
|
|
@@ -452,4 +521,4 @@ For JavaScript transform issues:
|
|
|
452
521
|
1. Ensure valid JavaScript syntax
|
|
453
522
|
2. Always return a value
|
|
454
523
|
3. Handle undefined/null cases
|
|
455
|
-
4. Use try-catch for error handling
|
|
524
|
+
4. Use try-catch for error handling
|