@probelabs/visor 0.1.130 → 0.1.131-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/README.md +7 -0
- package/defaults/visor.yaml +5 -2
- package/dist/ai-review-service.d.ts +2 -0
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/config/cli-handler.d.ts +5 -0
- package/dist/config/cli-handler.d.ts.map +1 -0
- package/dist/config/config-reloader.d.ts +24 -0
- package/dist/config/config-reloader.d.ts.map +1 -0
- package/dist/config/config-snapshot-store.d.ts +21 -0
- package/dist/config/config-snapshot-store.d.ts.map +1 -0
- package/dist/config/config-watcher.d.ts +19 -0
- package/dist/config/config-watcher.d.ts.map +1 -0
- package/dist/config/types.d.ts +16 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/defaults/visor.yaml +5 -2
- package/dist/docs/ai-configuration.md +139 -0
- package/dist/docs/ai-custom-tools.md +30 -0
- package/dist/docs/capacity-planning.md +359 -0
- package/dist/docs/commands.md +35 -0
- package/dist/docs/database-operations.md +487 -0
- package/dist/docs/index.md +6 -1
- package/dist/docs/licensing.md +372 -0
- package/dist/docs/production-deployment.md +583 -0
- package/dist/examples/ai-with-bash.yaml +17 -0
- package/dist/generated/config-schema.d.ts +4 -0
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/index.js +11663 -10928
- package/dist/liquid-extensions.d.ts +7 -0
- package/dist/liquid-extensions.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.d.ts +5 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/workflow-check-provider.d.ts.map +1 -1
- package/dist/scheduler/schedule-tool.d.ts.map +1 -1
- package/dist/sdk/{check-provider-registry-PANIXYRB.mjs → check-provider-registry-FMHECPI4.mjs} +8 -8
- package/dist/sdk/{check-provider-registry-M3Y6JMTW.mjs → check-provider-registry-ZOLEYDKM.mjs} +7 -7
- package/dist/sdk/{chunk-VMLORODQ.mjs → chunk-2GCSK3PD.mjs} +4 -4
- package/dist/sdk/{chunk-HOKQOO3G.mjs → chunk-EBTD2D4L.mjs} +2 -2
- package/dist/sdk/{chunk-UCNT3PDT.mjs → chunk-LQ5B4T6L.mjs} +5 -1
- package/dist/sdk/chunk-LQ5B4T6L.mjs.map +1 -0
- package/dist/sdk/{chunk-S6CD7GFM.mjs → chunk-MQ57AB4U.mjs} +211 -35
- package/dist/sdk/chunk-MQ57AB4U.mjs.map +1 -0
- package/dist/sdk/chunk-N4I6ZDCJ.mjs +436 -0
- package/dist/sdk/chunk-N4I6ZDCJ.mjs.map +1 -0
- package/dist/sdk/{chunk-EUUAQBTW.mjs → chunk-UXMMGCAS.mjs} +245 -53
- package/dist/sdk/chunk-UXMMGCAS.mjs.map +1 -0
- package/dist/sdk/{chunk-V2IV3ILA.mjs → chunk-XJQKTK6V.mjs} +31 -5
- package/dist/sdk/chunk-XJQKTK6V.mjs.map +1 -0
- package/dist/sdk/{config-OGOS4ZU4.mjs → config-4EG7IQIU.mjs} +2 -2
- package/dist/sdk/{failure-condition-evaluator-HC3M5377.mjs → failure-condition-evaluator-GLHZZF47.mjs} +3 -3
- package/dist/sdk/{github-frontend-E2KJSC3Y.mjs → github-frontend-F4TE2JY7.mjs} +3 -3
- package/dist/sdk/{host-EE6EJ2FM.mjs → host-GOOVFXW6.mjs} +2 -2
- package/dist/sdk/host-VA3ET7N6.mjs +63 -0
- package/dist/sdk/host-VA3ET7N6.mjs.map +1 -0
- package/dist/sdk/knex-store-HPXJILBL.mjs +411 -0
- package/dist/sdk/knex-store-HPXJILBL.mjs.map +1 -0
- package/dist/sdk/{liquid-extensions-E4EUOCES.mjs → liquid-extensions-YDIIH33Q.mjs} +2 -2
- package/dist/sdk/loader-ID5LMXOW.mjs +89 -0
- package/dist/sdk/loader-ID5LMXOW.mjs.map +1 -0
- package/dist/sdk/opa-policy-engine-UUPFN5CL.mjs +655 -0
- package/dist/sdk/opa-policy-engine-UUPFN5CL.mjs.map +1 -0
- package/dist/sdk/{routing-OZQWAGAI.mjs → routing-OXQKETSA.mjs} +5 -5
- package/dist/sdk/{schedule-tool-handler-IEB2VS7O.mjs → schedule-tool-handler-PJVKWSYX.mjs} +7 -7
- package/dist/sdk/{schedule-tool-handler-B7TMSG6A.mjs → schedule-tool-handler-YTBMLVEA.mjs} +8 -8
- package/dist/sdk/sdk.d.mts +15 -0
- package/dist/sdk/sdk.d.ts +15 -0
- package/dist/sdk/sdk.js +2089 -393
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +7 -7
- package/dist/sdk/{trace-helpers-PP3YHTAM.mjs → trace-helpers-R2ETIEC2.mjs} +4 -2
- package/dist/sdk/validator-XTZJZZJH.mjs +134 -0
- package/dist/sdk/validator-XTZJZZJH.mjs.map +1 -0
- package/dist/sdk/{workflow-check-provider-2ET3SFZH.mjs → workflow-check-provider-4SA32BO7.mjs} +8 -8
- package/dist/sdk/{workflow-check-provider-HB4XTD4Z.mjs → workflow-check-provider-57KAR4Y4.mjs} +7 -7
- package/dist/slack/socket-runner.d.ts.map +1 -1
- package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
- package/dist/state-machine/runner.d.ts.map +1 -1
- package/dist/state-machine/states/completed.d.ts.map +1 -1
- package/dist/telemetry/trace-helpers.d.ts +5 -0
- package/dist/telemetry/trace-helpers.d.ts.map +1 -1
- package/dist/test-runner/evaluators.d.ts.map +1 -1
- package/dist/test-runner/index.d.ts +7 -0
- package/dist/test-runner/index.d.ts.map +1 -1
- package/dist/test-runner/validator.d.ts.map +1 -1
- package/dist/tui/chat-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 +15 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts +2 -0
- package/dist/types/engine.d.ts.map +1 -1
- package/package.json +3 -3
- package/defaults/.visor.yaml +0 -420
- package/dist/output/traces/run-2026-02-11T16-20-59-999Z.ndjson +0 -138
- package/dist/output/traces/run-2026-02-11T16-21-47-711Z.ndjson +0 -1357
- package/dist/sdk/chunk-EUUAQBTW.mjs.map +0 -1
- package/dist/sdk/chunk-S6CD7GFM.mjs.map +0 -1
- package/dist/sdk/chunk-UCNT3PDT.mjs.map +0 -1
- package/dist/sdk/chunk-V2IV3ILA.mjs.map +0 -1
- package/dist/sdk/chunk-YJRBN3XS.mjs +0 -217
- package/dist/sdk/chunk-YJRBN3XS.mjs.map +0 -1
- package/dist/traces/run-2026-02-11T16-20-59-999Z.ndjson +0 -138
- package/dist/traces/run-2026-02-11T16-21-47-711Z.ndjson +0 -1357
- /package/dist/sdk/{check-provider-registry-M3Y6JMTW.mjs.map → check-provider-registry-FMHECPI4.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-PANIXYRB.mjs.map → check-provider-registry-ZOLEYDKM.mjs.map} +0 -0
- /package/dist/sdk/{chunk-VMLORODQ.mjs.map → chunk-2GCSK3PD.mjs.map} +0 -0
- /package/dist/sdk/{chunk-HOKQOO3G.mjs.map → chunk-EBTD2D4L.mjs.map} +0 -0
- /package/dist/sdk/{config-OGOS4ZU4.mjs.map → config-4EG7IQIU.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-HC3M5377.mjs.map → failure-condition-evaluator-GLHZZF47.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-E2KJSC3Y.mjs.map → github-frontend-F4TE2JY7.mjs.map} +0 -0
- /package/dist/sdk/{host-EE6EJ2FM.mjs.map → host-GOOVFXW6.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-E4EUOCES.mjs.map → liquid-extensions-YDIIH33Q.mjs.map} +0 -0
- /package/dist/sdk/{routing-OZQWAGAI.mjs.map → routing-OXQKETSA.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-B7TMSG6A.mjs.map → schedule-tool-handler-PJVKWSYX.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-IEB2VS7O.mjs.map → schedule-tool-handler-YTBMLVEA.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-PP3YHTAM.mjs.map → trace-helpers-R2ETIEC2.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-2ET3SFZH.mjs.map → workflow-check-provider-4SA32BO7.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-HB4XTD4Z.mjs.map → workflow-check-provider-57KAR4Y4.mjs.map} +0 -0
package/README.md
CHANGED
|
@@ -118,6 +118,13 @@ visor --check security --output json --output-file visor-results.json
|
|
|
118
118
|
# Visual debugger with web UI
|
|
119
119
|
visor --debug-server --debug-port 3456
|
|
120
120
|
|
|
121
|
+
# Config snapshots — list, diff, or restore saved configurations
|
|
122
|
+
visor config snapshots
|
|
123
|
+
visor config diff 1 2
|
|
124
|
+
|
|
125
|
+
# Live config reload in long-running modes (e.g. Slack)
|
|
126
|
+
visor --slack --config .visor.yaml --watch
|
|
127
|
+
|
|
121
128
|
# Discover options
|
|
122
129
|
visor --help
|
|
123
130
|
```
|
package/defaults/visor.yaml
CHANGED
|
@@ -8,8 +8,11 @@ include: "./code-review.yaml"
|
|
|
8
8
|
# Global AI provider settings - users should configure their preferred provider
|
|
9
9
|
# For CI testing, use --provider mock CLI flag instead
|
|
10
10
|
|
|
11
|
-
#
|
|
12
|
-
max_parallelism:
|
|
11
|
+
# Default parallelism for running checks concurrently
|
|
12
|
+
max_parallelism: 3
|
|
13
|
+
|
|
14
|
+
# Limit concurrent AI API calls across all checks
|
|
15
|
+
max_ai_concurrency: 3
|
|
13
16
|
|
|
14
17
|
# Global fail condition - fail if critical or error severity issues are found
|
|
15
18
|
fail_if: "output.issues && output.issues.some(i => i.severity === 'critical' || i.severity === 'error')"
|
|
@@ -36,6 +36,8 @@ export interface AIReviewConfig {
|
|
|
36
36
|
path?: string;
|
|
37
37
|
allowedFolders?: string[];
|
|
38
38
|
completionPrompt?: string;
|
|
39
|
+
/** Shared concurrency limiter for global AI call gating */
|
|
40
|
+
concurrencyLimiter?: any;
|
|
39
41
|
}
|
|
40
42
|
export interface AIDebugInfo {
|
|
41
43
|
/** The prompt sent to the AI */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/ai-review-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAe,MAAM,YAAY,CAAC;AA4JxD;;GAEG;AACH,UAAU,gBAAiB,SAAQ,UAAU;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAaD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IAExD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAEtE,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,KAAK,CAAC,EAAE,OAAO,gBAAgB,EAAE,aAAa,CAAC;IAE/C,QAAQ,CAAC,EAAE,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;IAErD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,UAAU,CAAC,EAAE,OAAO,gBAAgB,EAAE,UAAU,CAAC;IAIjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/ai-review-service.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/cli-main.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/cli-main.ts"],"names":[],"mappings":"AAmyBA;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAo5C1C"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA2B,MAAM,aAAa,CAAC;AAQlE;;GAEG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAA0D;IAG9E,OAAO,CAAC,WAAW,CAGR;;IAOX;;OAEG;IACH,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA2B,MAAM,aAAa,CAAC;AAQlE;;GAEG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAA0D;IAG9E,OAAO,CAAC,WAAW,CAGR;;IAOX;;OAEG;IACH,OAAO,CAAC,YAAY;IA0EpB;;OAEG;IACH,OAAO,CAAC,aAAa,CAEnB;IAEF;;OAEG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU;IAqL5C;;OAEG;IACH,OAAO,CAAC,eAAe;IAyCvB;;OAEG;IACI,WAAW,IAAI,MAAM;IAkE5B;;OAEG;IACI,UAAU,IAAI,MAAM;IAoC3B;;OAEG;IACI,eAAe,IAAI,MAAM;IAkBhC;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;OAEG;IACI,WAAW,IAAI,IAAI;CAG3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-handler.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config/cli-handler.ts"],"names":[],"mappings":"AA+CA;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BvE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ConfigManager } from '../config';
|
|
2
|
+
import type { VisorConfig } from '../types/config';
|
|
3
|
+
import { ConfigSnapshotStore } from './config-snapshot-store';
|
|
4
|
+
export interface ConfigReloaderOptions {
|
|
5
|
+
configPath: string;
|
|
6
|
+
configManager: ConfigManager;
|
|
7
|
+
snapshotStore: ConfigSnapshotStore;
|
|
8
|
+
onSwap: (newConfig: VisorConfig) => void;
|
|
9
|
+
onError?: (err: Error) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare class ConfigReloader {
|
|
12
|
+
private configPath;
|
|
13
|
+
private configManager;
|
|
14
|
+
private snapshotStore;
|
|
15
|
+
private onSwap;
|
|
16
|
+
private onError?;
|
|
17
|
+
constructor(options: ConfigReloaderOptions);
|
|
18
|
+
/**
|
|
19
|
+
* Attempt to reload the config file.
|
|
20
|
+
* Returns true if the config was successfully reloaded and swapped.
|
|
21
|
+
*/
|
|
22
|
+
reload(): Promise<boolean>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=config-reloader.d.ts.map
|
|
@@ -0,0 +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;gBAE3B,OAAO,EAAE,qBAAqB;IAQ1C;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CA4BjC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ConfigSnapshot, ConfigSnapshotSummary } from './types';
|
|
2
|
+
import type { VisorConfig } from '../types/config';
|
|
3
|
+
export declare class ConfigSnapshotStore {
|
|
4
|
+
private db;
|
|
5
|
+
private dbPath;
|
|
6
|
+
constructor(filename?: string);
|
|
7
|
+
initialize(): Promise<void>;
|
|
8
|
+
shutdown(): Promise<void>;
|
|
9
|
+
private migrateSchema;
|
|
10
|
+
private getDb;
|
|
11
|
+
save(snapshot: Omit<ConfigSnapshot, 'id'>, maxCount?: number): Promise<ConfigSnapshot>;
|
|
12
|
+
private getLastInsertId;
|
|
13
|
+
list(): Promise<ConfigSnapshotSummary[]>;
|
|
14
|
+
get(id: number): Promise<ConfigSnapshot | undefined>;
|
|
15
|
+
prune(maxCount?: number): Promise<number>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a snapshot record from a resolved VisorConfig.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createSnapshotFromConfig(config: VisorConfig, trigger: 'startup' | 'reload', sourcePath: string | null): Omit<ConfigSnapshot, 'id'>;
|
|
21
|
+
//# sourceMappingURL=config-snapshot-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-snapshot-store.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config/config-snapshot-store.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkBnD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,EAAE,CAAqC;IAC/C,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,CAAC,EAAE,MAAM;IAIvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,KAAK;IAOP,IAAI,CACR,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EACpC,QAAQ,GAAE,MAA8B,GACvC,OAAO,CAAC,cAAc,CAAC;IAqB1B,OAAO,CAAC,eAAe;IAKjB,IAAI,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAUxC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAQpD,KAAK,CAAC,QAAQ,GAAE,MAA8B,GAAG,OAAO,CAAC,MAAM,CAAC;CAevE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,SAAS,GAAG,QAAQ,EAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAY5B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ConfigReloader } from './config-reloader';
|
|
2
|
+
export declare class ConfigWatcher {
|
|
3
|
+
private configPath;
|
|
4
|
+
private reloader;
|
|
5
|
+
private debounceMs;
|
|
6
|
+
private watcher;
|
|
7
|
+
private debounceTimer;
|
|
8
|
+
private signalHandler;
|
|
9
|
+
constructor(configPath: string, reloader: ConfigReloader, debounceMs?: number);
|
|
10
|
+
start(): void;
|
|
11
|
+
stop(): void;
|
|
12
|
+
private debouncedReload;
|
|
13
|
+
/**
|
|
14
|
+
* Fire-and-forget reload with full error handling.
|
|
15
|
+
* Ensures unhandled promise rejections never escape.
|
|
16
|
+
*/
|
|
17
|
+
private safeReload;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=config-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-watcher.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config/config-watcher.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,aAAa,CAA6B;gBAEtC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM;IAM7E,KAAK,IAAI,IAAI;IA8Bb,IAAI,IAAI,IAAI;IAqBZ,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACH,OAAO,CAAC,UAAU;CAKnB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ConfigSnapshot {
|
|
2
|
+
id: number;
|
|
3
|
+
created_at: string;
|
|
4
|
+
trigger: 'startup' | 'reload';
|
|
5
|
+
config_hash: string;
|
|
6
|
+
config_yaml: string;
|
|
7
|
+
source_path: string | null;
|
|
8
|
+
}
|
|
9
|
+
export interface ConfigSnapshotSummary {
|
|
10
|
+
id: number;
|
|
11
|
+
created_at: string;
|
|
12
|
+
trigger: string;
|
|
13
|
+
config_hash: string;
|
|
14
|
+
source_path: string | null;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B"}
|
package/dist/defaults/visor.yaml
CHANGED
|
@@ -8,8 +8,11 @@ include: "./code-review.yaml"
|
|
|
8
8
|
# Global AI provider settings - users should configure their preferred provider
|
|
9
9
|
# For CI testing, use --provider mock CLI flag instead
|
|
10
10
|
|
|
11
|
-
#
|
|
12
|
-
max_parallelism:
|
|
11
|
+
# Default parallelism for running checks concurrently
|
|
12
|
+
max_parallelism: 3
|
|
13
|
+
|
|
14
|
+
# Limit concurrent AI API calls across all checks
|
|
15
|
+
max_ai_concurrency: 3
|
|
13
16
|
|
|
14
17
|
# Global fail condition - fail if critical or error severity issues are found
|
|
15
18
|
fail_if: "output.issues && output.issues.some(i => i.severity === 'critical' || i.severity === 'error')"
|
|
@@ -551,6 +551,44 @@ steps:
|
|
|
551
551
|
|
|
552
552
|
**Security Note:** Bash command execution respects existing security boundaries and permissions. Commands run with the same privileges as the Visor process. Always review and test bash configurations before deploying to production environments.
|
|
553
553
|
|
|
554
|
+
#### Dynamic Bash Configuration (`ai_bash_config_js`)
|
|
555
|
+
|
|
556
|
+
Use `ai_bash_config_js` to dynamically compute bash command permissions at runtime based on dependency outputs. This mirrors the `ai_mcp_servers_js` pattern and is useful for skill-based systems where different active skills need different bash command access.
|
|
557
|
+
|
|
558
|
+
```yaml
|
|
559
|
+
checks:
|
|
560
|
+
build-config:
|
|
561
|
+
type: script
|
|
562
|
+
content: |
|
|
563
|
+
// Collect allowed commands from active skills
|
|
564
|
+
return {
|
|
565
|
+
bash_config: {
|
|
566
|
+
allow: ['git:log:*', 'git:diff:*'],
|
|
567
|
+
deny: ['git:push:--force']
|
|
568
|
+
}
|
|
569
|
+
};
|
|
570
|
+
|
|
571
|
+
generate-response:
|
|
572
|
+
type: ai
|
|
573
|
+
depends_on: [build-config]
|
|
574
|
+
prompt: "Help the user with their request"
|
|
575
|
+
ai:
|
|
576
|
+
allowBash: true
|
|
577
|
+
bashConfig:
|
|
578
|
+
allow: ['gh:*'] # Static baseline
|
|
579
|
+
ai_bash_config_js: |
|
|
580
|
+
return outputs['build-config']?.bash_config ?? {};
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
The expression has access to the same context as other `_js` fields: `outputs`, `inputs`, `pr`, `files`, `env`, `memory`. It must return an object with optional `allow` and `deny` string arrays.
|
|
584
|
+
|
|
585
|
+
**Merge behavior:** Dynamic arrays are appended to static `bashConfig` arrays. This means:
|
|
586
|
+
- Static `bashConfig` sets the baseline permissions
|
|
587
|
+
- `ai_bash_config_js` extends with additional patterns from active skills
|
|
588
|
+
- The AI agent's internal precedence (deny > allow) handles conflicts
|
|
589
|
+
|
|
590
|
+
If `ai_bash_config_js` returns allow or deny patterns, `allowBash` is automatically set to `true`.
|
|
591
|
+
|
|
554
592
|
#### Retry Configuration (`retry`)
|
|
555
593
|
|
|
556
594
|
Configure automatic retries for AI provider calls when transient errors occur:
|
|
@@ -644,3 +682,104 @@ If no key is configured, Visor falls back to fast, heuristic checks (simple patt
|
|
|
644
682
|
|
|
645
683
|
### MCP (Tools) Support
|
|
646
684
|
See [mcp.md](./mcp.md) for adding MCP servers (Probe, Jira, Filesystem, etc.).
|
|
685
|
+
|
|
686
|
+
### Dynamic JavaScript Expressions (`_js` fields)
|
|
687
|
+
|
|
688
|
+
Several configuration fields support dynamic JavaScript expressions that are evaluated at runtime. These are useful in multi-step workflows where earlier steps produce configuration that later steps consume.
|
|
689
|
+
|
|
690
|
+
All `_js` expression fields share the same execution context:
|
|
691
|
+
- **`outputs`** — results from dependency steps (via `depends_on`)
|
|
692
|
+
- **`inputs`** — workflow inputs
|
|
693
|
+
- **`pr`** — PR metadata (`number`, `title`, `author`, `branch`, `base`)
|
|
694
|
+
- **`files`** — changed files (`filename`, `status`, `additions`, `deletions`)
|
|
695
|
+
- **`env`** — safe subset of environment variables (secrets are excluded)
|
|
696
|
+
- **`memory`** — memory accessor (if configured)
|
|
697
|
+
|
|
698
|
+
Expressions are wrapped in a function body — use `return` to return the result. The `log()` function is available for debugging.
|
|
699
|
+
|
|
700
|
+
#### `ai_mcp_servers_js`
|
|
701
|
+
|
|
702
|
+
Dynamically compute which MCP servers to connect to. Must return an object mapping server names to server configurations.
|
|
703
|
+
|
|
704
|
+
```yaml
|
|
705
|
+
checks:
|
|
706
|
+
build-config:
|
|
707
|
+
type: script
|
|
708
|
+
content: |
|
|
709
|
+
return {
|
|
710
|
+
mcp_servers: {
|
|
711
|
+
jira: { command: 'uvx', args: ['mcp-atlassian'] },
|
|
712
|
+
github: { command: 'npx', args: ['-y', '@modelcontextprotocol/server-github'] }
|
|
713
|
+
}
|
|
714
|
+
};
|
|
715
|
+
|
|
716
|
+
assistant:
|
|
717
|
+
type: ai
|
|
718
|
+
depends_on: [build-config]
|
|
719
|
+
prompt: "Help the user"
|
|
720
|
+
ai_mcp_servers_js: |
|
|
721
|
+
return outputs['build-config']?.mcp_servers ?? {};
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
Each server config can be:
|
|
725
|
+
- **Stdio MCP server**: `{ command, args, env }`
|
|
726
|
+
- **SSE/HTTP MCP server**: `{ url, transport }`
|
|
727
|
+
- **Workflow tool**: `{ workflow, inputs }`
|
|
728
|
+
- **Built-in tool**: `{ tool: 'schedule' }`
|
|
729
|
+
|
|
730
|
+
Dynamic servers are merged with any static `ai_mcp_servers` configuration.
|
|
731
|
+
|
|
732
|
+
#### `ai_custom_tools_js`
|
|
733
|
+
|
|
734
|
+
Dynamically compute which custom tools to expose. Must return an array of tool names (strings) or workflow tool references.
|
|
735
|
+
|
|
736
|
+
```yaml
|
|
737
|
+
checks:
|
|
738
|
+
route:
|
|
739
|
+
type: script
|
|
740
|
+
content: |
|
|
741
|
+
return { intent: 'engineer' };
|
|
742
|
+
|
|
743
|
+
assistant:
|
|
744
|
+
type: ai
|
|
745
|
+
depends_on: [route]
|
|
746
|
+
prompt: "Help the user"
|
|
747
|
+
ai_custom_tools_js: |
|
|
748
|
+
const tools = [];
|
|
749
|
+
if (outputs['route'].intent === 'engineer') {
|
|
750
|
+
tools.push({ workflow: 'engineer', args: { projects: ['my-repo'] } });
|
|
751
|
+
}
|
|
752
|
+
return tools;
|
|
753
|
+
```
|
|
754
|
+
|
|
755
|
+
Dynamic tools are merged with any static `ai_custom_tools` configuration (duplicates by name are skipped).
|
|
756
|
+
|
|
757
|
+
#### `ai_bash_config_js`
|
|
758
|
+
|
|
759
|
+
Dynamically compute bash command permissions. Must return an object with optional `allow` and `deny` string arrays.
|
|
760
|
+
|
|
761
|
+
```yaml
|
|
762
|
+
checks:
|
|
763
|
+
build-config:
|
|
764
|
+
type: script
|
|
765
|
+
content: |
|
|
766
|
+
return {
|
|
767
|
+
bash_config: {
|
|
768
|
+
allow: ['git:log:*', 'npm:test'],
|
|
769
|
+
deny: ['git:push:--force']
|
|
770
|
+
}
|
|
771
|
+
};
|
|
772
|
+
|
|
773
|
+
assistant:
|
|
774
|
+
type: ai
|
|
775
|
+
depends_on: [build-config]
|
|
776
|
+
prompt: "Help the user"
|
|
777
|
+
ai:
|
|
778
|
+
allowBash: true
|
|
779
|
+
bashConfig:
|
|
780
|
+
allow: ['gh:*'] # Static baseline
|
|
781
|
+
ai_bash_config_js: |
|
|
782
|
+
return outputs['build-config']?.bash_config ?? {};
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
Dynamic arrays are appended to static `bashConfig`. If dynamic config provides any allow/deny patterns, `allowBash` is automatically enabled.
|
|
@@ -182,6 +182,36 @@ steps:
|
|
|
182
182
|
debug: true
|
|
183
183
|
```
|
|
184
184
|
|
|
185
|
+
### Method 3: Using `ai_custom_tools_js` (Dynamic)
|
|
186
|
+
|
|
187
|
+
For multi-step workflows, use `ai_custom_tools_js` to dynamically select tools based on dependency outputs:
|
|
188
|
+
|
|
189
|
+
```yaml
|
|
190
|
+
checks:
|
|
191
|
+
route:
|
|
192
|
+
type: script
|
|
193
|
+
content: |
|
|
194
|
+
return { intent: 'engineer', tools: ['code-explorer'] };
|
|
195
|
+
|
|
196
|
+
assistant:
|
|
197
|
+
type: ai
|
|
198
|
+
depends_on: [route]
|
|
199
|
+
prompt: "Help the user with their request"
|
|
200
|
+
ai_custom_tools_js: |
|
|
201
|
+
// Dynamically select tools based on routing
|
|
202
|
+
const tools = outputs['route']?.tools ?? [];
|
|
203
|
+
if (outputs['route'].intent === 'engineer') {
|
|
204
|
+
tools.push({ workflow: 'engineer', args: { projects: ['my-repo'] } });
|
|
205
|
+
}
|
|
206
|
+
return tools;
|
|
207
|
+
ai:
|
|
208
|
+
provider: anthropic
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
The expression has access to `outputs`, `inputs`, `pr`, `files`, `env`, and `memory`. It must return an array of tool names (strings) or workflow tool references (`{ workflow, args }`). Dynamic tools are merged with static `ai_custom_tools` (duplicates by name are skipped).
|
|
212
|
+
|
|
213
|
+
Similarly, `ai_mcp_servers_js` dynamically computes MCP servers, and `ai_bash_config_js` dynamically computes bash command permissions. See [AI Configuration](./ai-configuration.md) for full documentation of all `_js` fields.
|
|
214
|
+
|
|
185
215
|
### Combining with External MCP Servers
|
|
186
216
|
|
|
187
217
|
You can combine custom tools with external MCP servers:
|