@probelabs/visor 0.1.35 → 0.1.37

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.
Files changed (47) hide show
  1. package/README.md +355 -1
  2. package/defaults/.visor.yaml +69 -13
  3. package/dist/ai-review-service.d.ts +1 -1
  4. package/dist/ai-review-service.d.ts.map +1 -1
  5. package/dist/check-execution-engine.d.ts +8 -0
  6. package/dist/check-execution-engine.d.ts.map +1 -1
  7. package/dist/cli-main.d.ts.map +1 -1
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/config.d.ts +4 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/cron-scheduler.d.ts +66 -0
  12. package/dist/cron-scheduler.d.ts.map +1 -0
  13. package/dist/defaults/.visor.yaml +69 -13
  14. package/dist/event-mapper.d.ts.map +1 -1
  15. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +107207 -76050
  18. package/dist/output/code-review/schema.json +1 -1
  19. package/dist/pr-analyzer.d.ts +8 -0
  20. package/dist/pr-analyzer.d.ts.map +1 -1
  21. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  22. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  23. package/dist/providers/check-provider.interface.d.ts +6 -0
  24. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  25. package/dist/providers/claude-code-check-provider.d.ts +68 -0
  26. package/dist/providers/claude-code-check-provider.d.ts.map +1 -0
  27. package/dist/providers/claude-code-types.d.ts +68 -0
  28. package/dist/providers/claude-code-types.d.ts.map +1 -0
  29. package/dist/providers/{webhook-check-provider.d.ts → http-check-provider.d.ts} +6 -4
  30. package/dist/providers/http-check-provider.d.ts.map +1 -0
  31. package/dist/providers/http-client-provider.d.ts +22 -0
  32. package/dist/providers/http-client-provider.d.ts.map +1 -0
  33. package/dist/providers/http-input-provider.d.ts +27 -0
  34. package/dist/providers/http-input-provider.d.ts.map +1 -0
  35. package/dist/providers/index.d.ts +5 -1
  36. package/dist/providers/index.d.ts.map +1 -1
  37. package/dist/providers/mcp-tools.d.ts +106 -0
  38. package/dist/providers/mcp-tools.d.ts.map +1 -0
  39. package/dist/providers/tool-check-provider.d.ts.map +1 -1
  40. package/dist/types/config.d.ts +115 -8
  41. package/dist/types/config.d.ts.map +1 -1
  42. package/dist/utils/config-loader.d.ts.map +1 -1
  43. package/dist/utils/config-merger.d.ts.map +1 -1
  44. package/dist/webhook-server.d.ts +93 -0
  45. package/dist/webhook-server.d.ts.map +1 -0
  46. package/package.json +16 -2
  47. package/dist/providers/webhook-check-provider.d.ts.map +0 -1
@@ -39,7 +39,7 @@
39
39
  "severity": {
40
40
  "type": "string",
41
41
  "enum": ["info", "warning", "error", "critical"],
42
- "description": "Issue severity level"
42
+ "description": "Issue severity level: info (suggestions/improvements), warning (should fix), error (must fix), critical (blocks deployment)"
43
43
  },
44
44
  "category": {
45
45
  "type": "string",
@@ -15,6 +15,13 @@ export interface PRDiff {
15
15
  patch?: string;
16
16
  status: 'added' | 'removed' | 'modified' | 'renamed';
17
17
  }
18
+ export interface PRComment {
19
+ id: number;
20
+ author: string;
21
+ body: string;
22
+ createdAt: string;
23
+ updatedAt: string;
24
+ }
18
25
  export interface PRInfo {
19
26
  number: number;
20
27
  title: string;
@@ -31,6 +38,7 @@ export interface PRInfo {
31
38
  isIncremental?: boolean;
32
39
  isIssue?: boolean;
33
40
  eventContext?: Record<string, unknown>;
41
+ comments?: PRComment[];
34
42
  }
35
43
  export declare class PRAnalyzer {
36
44
  private octokit;
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/pr-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAQD,qBAAa,UAAU;IAEnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBADV,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,MAAU;IAGhC;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOlB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,GAChD,OAAO,CAAC,MAAM,CAAC;IAkHZ,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;YAkBrD,SAAS;IAwCvB,OAAO,CAAC,gBAAgB;CAkBzB"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/pr-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAQD,qBAAa,UAAU;IAEnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBADV,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,MAAU;IAGhC;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOlB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,GAChD,OAAO,CAAC,MAAM,CAAC;IAkHZ,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;YAkBrD,SAAS;IAwCvB,OAAO,CAAC,gBAAgB;CAkBzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/ai-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAS;;IAQ7B,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCvD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,aAAa;IAmB3B;;OAEG;YACW,UAAU;IAsExB;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;YACW,oBAAoB;IA+J5B,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;YAiBX,iBAAiB;IA+H/B,sBAAsB,IAAI,MAAM,EAAE;IAiB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,eAAe,IAAI,MAAM,EAAE;CAO5B"}
1
+ {"version":3,"file":"ai-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/ai-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAS;;IAQ7B,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCvD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,aAAa;IAmB3B;;OAEG;YACW,UAAU;IAsExB;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;YACW,oBAAoB;IA+J5B,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;YAiBX,iBAAiB;IA0I/B,sBAAsB,IAAI,MAAM,EAAE;IAiB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,eAAe,IAAI,MAAM,EAAE;CAO5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"check-provider-registry.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/check-provider-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAM3D;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwB;IAE/C,OAAO;IAKP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAO3C;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAQhC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAUvC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIpD;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAU/C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACH,eAAe,IAAI,aAAa,EAAE;IAIlC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAapD;;OAEG;IACG,aAAa,IAAI,OAAO,CAC5B,KAAK,CAAC;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC,CACH;IAgBD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;CAG7B"}
1
+ {"version":3,"file":"check-provider-registry.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/check-provider-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAS3D;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwB;IAE/C,OAAO;IAKP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAO3C;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAYvC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIpD;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAU/C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACH,eAAe,IAAI,aAAa,EAAE;IAIlC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAapD;;OAEG;IACG,aAAa,IAAI,OAAO,CAC5B,KAAK,CAAC;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC,CACH;IAgBD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;CAG7B"}
@@ -84,5 +84,11 @@ export declare abstract class CheckProvider {
84
84
  * Get provider requirements (e.g., environment variables needed)
85
85
  */
86
86
  abstract getRequirements(): string[];
87
+ /**
88
+ * Set webhook context for providers that need access to webhook data
89
+ * This is optional and only used by http_input providers
90
+ * @param webhookContext Map of endpoint paths to webhook data
91
+ */
92
+ setWebhookContext?(webhookContext: Map<string, unknown>): void;
87
93
  }
88
94
  //# sourceMappingURL=check-provider.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-provider.interface.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/check-provider.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,EAAE,CAAC,EAAE;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACzD,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,8BAAsB,aAAa;IACjC;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;IAE1B;;OAEG;IACH,QAAQ,CAAC,cAAc,IAAI,MAAM;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAE1D;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAE3C;;;OAGG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,MAAM,EAAE;CACrC"}
1
+ {"version":3,"file":"check-provider.interface.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/check-provider.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,EAAE,CAAC,EAAE;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACzD,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,8BAAsB,aAAa;IACjC;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;IAE1B;;OAEG;IACH,QAAQ,CAAC,cAAc,IAAI,MAAM;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAE1D;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAE3C;;;OAGG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,MAAM,EAAE;IAEpC;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAC/D"}
@@ -0,0 +1,68 @@
1
+ import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
2
+ import { PRInfo } from '../pr-analyzer';
3
+ import { ReviewSummary } from '../reviewer';
4
+ /**
5
+ * Error thrown when Claude Code SDK is not installed
6
+ */
7
+ export declare class ClaudeCodeSDKNotInstalledError extends Error {
8
+ constructor();
9
+ }
10
+ /**
11
+ * Error thrown when Claude Code API key is not configured
12
+ */
13
+ export declare class ClaudeCodeAPIKeyMissingError extends Error {
14
+ constructor();
15
+ }
16
+ /**
17
+ * Claude Code check provider using the Claude Code TypeScript SDK
18
+ * Supports MCP tools and streaming responses
19
+ */
20
+ export declare class ClaudeCodeCheckProvider extends CheckProvider {
21
+ private liquidEngine;
22
+ private claudeCodeClient;
23
+ constructor();
24
+ getName(): string;
25
+ getDescription(): string;
26
+ validateConfig(config: unknown): Promise<boolean>;
27
+ /**
28
+ * Initialize Claude Code SDK client
29
+ */
30
+ private initializeClaudeCodeClient;
31
+ /**
32
+ * Setup MCP tools based on configuration
33
+ */
34
+ private setupMcpTools;
35
+ /**
36
+ * Group files by their file extension for template context
37
+ */
38
+ private groupFilesByExtension;
39
+ /**
40
+ * Process prompt configuration to resolve final prompt string
41
+ */
42
+ private processPrompt;
43
+ /**
44
+ * Detect if a string is likely a file path and if the file exists
45
+ */
46
+ private isFilePath;
47
+ /**
48
+ * Load prompt content from file with security validation
49
+ */
50
+ private loadPromptFromFile;
51
+ /**
52
+ * Render Liquid template in prompt with comprehensive context
53
+ */
54
+ private renderPromptTemplate;
55
+ /**
56
+ * Parse structured response from Claude Code
57
+ */
58
+ private parseStructuredResponse;
59
+ execute(prInfo: PRInfo, config: CheckProviderConfig, dependencyResults?: Map<string, ReviewSummary>, sessionInfo?: {
60
+ parentSessionId?: string;
61
+ reuseSession?: boolean;
62
+ }): Promise<ReviewSummary>;
63
+ private executeWithConfig;
64
+ getSupportedConfigKeys(): string[];
65
+ isAvailable(): Promise<boolean>;
66
+ getRequirements(): string[];
67
+ }
68
+ //# sourceMappingURL=claude-code-check-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/claude-code-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAc5C;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;;CAOxD;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;;CAOtD;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,aAAa;IACxD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAiC;;IAOzD,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAwDvD;;OAEG;YACW,0BAA0B;IAyCxC;;OAEG;YACW,aAAa;IAqE3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,aAAa;IAmB3B;;OAEG;YACW,UAAU;IAkExB;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;YACW,oBAAoB;IA+HlC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmBzB,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,WAAW,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,OAAO,CAAC,aAAa,CAAC;YAgBX,iBAAiB;IA8H/B,sBAAsB,IAAI,MAAM,EAAE;IAiB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA0BrC,eAAe,IAAI,MAAM,EAAE;CAQ5B"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Type definitions for Claude Code SDK and MCP SDK
3
+ * These are placeholder types for when the packages aren't installed
4
+ */
5
+ export interface ClaudeCodeQuery {
6
+ query: string;
7
+ tools?: Array<{
8
+ name: string;
9
+ [key: string]: unknown;
10
+ }>;
11
+ subagent?: string;
12
+ maxTurns?: number;
13
+ systemPrompt?: string;
14
+ sessionId?: string;
15
+ }
16
+ export interface ClaudeCodeResponse {
17
+ content: string;
18
+ usage?: {
19
+ input_tokens: number;
20
+ output_tokens: number;
21
+ };
22
+ turn_count?: number;
23
+ session_id?: string;
24
+ }
25
+ export interface ClaudeCodeClient {
26
+ query(options: ClaudeCodeQuery): Promise<ClaudeCodeResponse>;
27
+ }
28
+ export interface McpServerConfig {
29
+ command: string;
30
+ args?: string[];
31
+ env?: Record<string, string>;
32
+ }
33
+ export interface McpTool {
34
+ name: string;
35
+ description?: string;
36
+ inputSchema?: Record<string, unknown>;
37
+ handler?: (args: Record<string, unknown>) => Promise<unknown>;
38
+ }
39
+ export interface McpServer {
40
+ name: string;
41
+ command?: string;
42
+ args?: string[];
43
+ env?: Record<string, string>;
44
+ tools?: McpTool[];
45
+ }
46
+ export interface McpServerInstance {
47
+ name: string;
48
+ listTools(): Promise<McpTool[]>;
49
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
50
+ close(): Promise<void>;
51
+ }
52
+ export interface ClaudeCodeConfig {
53
+ allowedTools?: string[];
54
+ maxTurns?: number;
55
+ systemPrompt?: string;
56
+ mcpServers?: Record<string, McpServerConfig>;
57
+ subagent?: string;
58
+ hooks?: {
59
+ onStart?: string;
60
+ onEnd?: string;
61
+ onError?: string;
62
+ };
63
+ }
64
+ /**
65
+ * Utility function to safely import optional dependencies
66
+ */
67
+ export declare function safeImport<T>(moduleName: string): Promise<T | null>;
68
+ //# sourceMappingURL=claude-code-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-types.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/claude-code-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC9D;AAGD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAGD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAGD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAGD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAMzE"}
@@ -2,13 +2,15 @@ import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
2
2
  import { PRInfo } from '../pr-analyzer';
3
3
  import { ReviewSummary } from '../reviewer';
4
4
  /**
5
- * Check provider that sends PR info to a webhook for external analysis
5
+ * Check provider that sends data to an HTTP endpoint, typically used as an output/notification provider
6
6
  */
7
- export declare class WebhookCheckProvider extends CheckProvider {
7
+ export declare class HttpCheckProvider extends CheckProvider {
8
+ private liquid;
9
+ constructor();
8
10
  getName(): string;
9
11
  getDescription(): string;
10
12
  validateConfig(config: unknown): Promise<boolean>;
11
- execute(prInfo: PRInfo, config: CheckProviderConfig, _dependencyResults?: Map<string, ReviewSummary>, _sessionInfo?: {
13
+ execute(prInfo: PRInfo, config: CheckProviderConfig, dependencyResults?: Map<string, ReviewSummary>, _sessionInfo?: {
12
14
  parentSessionId?: string;
13
15
  reuseSession?: boolean;
14
16
  }): Promise<ReviewSummary>;
@@ -21,4 +23,4 @@ export declare class WebhookCheckProvider extends CheckProvider {
21
23
  isAvailable(): Promise<boolean>;
22
24
  getRequirements(): string[];
23
25
  }
24
- //# sourceMappingURL=webhook-check-provider.d.ts.map
26
+ //# sourceMappingURL=http-check-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/http-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAIzD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,OAAO,CAAC,MAAM,CAAS;;IAMvB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,aAAa,CAAC;YAuEX,kBAAkB;IA4ChC,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IASxB,sBAAsB,IAAI,MAAM,EAAE;IAiB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,eAAe,IAAI,MAAM,EAAE;CAQ5B"}
@@ -0,0 +1,22 @@
1
+ import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
2
+ import { PRInfo } from '../pr-analyzer';
3
+ import { ReviewSummary } from '../reviewer';
4
+ /**
5
+ * Check provider that fetches data from HTTP endpoints
6
+ */
7
+ export declare class HttpClientProvider extends CheckProvider {
8
+ private liquid;
9
+ constructor();
10
+ getName(): string;
11
+ getDescription(): string;
12
+ validateConfig(config: unknown): Promise<boolean>;
13
+ execute(prInfo: PRInfo, config: CheckProviderConfig, dependencyResults?: Map<string, ReviewSummary>, _sessionInfo?: {
14
+ parentSessionId?: string;
15
+ reuseSession?: boolean;
16
+ }): Promise<ReviewSummary>;
17
+ private fetchData;
18
+ getSupportedConfigKeys(): string[];
19
+ isAvailable(): Promise<boolean>;
20
+ getRequirements(): string[];
21
+ }
22
+ //# sourceMappingURL=http-client-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/http-client-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,MAAM,CAAS;;IAOvB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9C,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,aAAa,CAAC;YAkGX,SAAS;IA2EvB,sBAAsB,IAAI,MAAM,EAAE;IAiB5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,eAAe,IAAI,MAAM,EAAE;CAQ5B"}
@@ -0,0 +1,27 @@
1
+ import { CheckProvider, CheckProviderConfig } from './check-provider.interface';
2
+ import { PRInfo } from '../pr-analyzer';
3
+ import { ReviewSummary } from '../reviewer';
4
+ /**
5
+ * Check provider that receives input from HTTP webhooks and makes it available to dependent checks
6
+ */
7
+ export declare class HttpInputProvider extends CheckProvider {
8
+ private liquid;
9
+ private webhookContext?;
10
+ constructor();
11
+ /**
12
+ * Set webhook context for accessing webhook data
13
+ */
14
+ setWebhookContext(webhookContext: Map<string, unknown>): void;
15
+ getName(): string;
16
+ getDescription(): string;
17
+ validateConfig(config: unknown): Promise<boolean>;
18
+ execute(prInfo: PRInfo, config: CheckProviderConfig, _dependencyResults?: Map<string, ReviewSummary>, _sessionInfo?: {
19
+ parentSessionId?: string;
20
+ reuseSession?: boolean;
21
+ }): Promise<ReviewSummary>;
22
+ private getWebhookData;
23
+ getSupportedConfigKeys(): string[];
24
+ isAvailable(): Promise<boolean>;
25
+ getRequirements(): string[];
26
+ }
27
+ //# sourceMappingURL=http-input-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-input-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/http-input-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAC,CAAuB;;IAO9C;;OAEG;IACH,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7D,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,aAAa,CAAC;IAwDzB,OAAO,CAAC,cAAc;IAqBtB,sBAAsB,IAAI,MAAM,EAAE;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,eAAe,IAAI,MAAM,EAAE;CAO5B"}
@@ -5,6 +5,10 @@ export { CheckProvider, CheckProviderConfig } from './check-provider.interface';
5
5
  export { CheckProviderRegistry } from './check-provider-registry';
6
6
  export { AICheckProvider } from './ai-check-provider';
7
7
  export { ToolCheckProvider } from './tool-check-provider';
8
- export { WebhookCheckProvider } from './webhook-check-provider';
8
+ export { HttpCheckProvider } from './http-check-provider';
9
+ export { HttpInputProvider } from './http-input-provider';
10
+ export { HttpClientProvider } from './http-client-provider';
9
11
  export { NoopCheckProvider } from './noop-check-provider';
12
+ export { ClaudeCodeCheckProvider } from './claude-code-check-provider';
13
+ export { VisorMcpTools, McpServerManager, DEFAULT_MCP_TOOLS_CONFIG } from './mcp-tools';
10
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * MCP Tools Support for Visor
3
+ *
4
+ * This module provides MCP (Model Context Protocol) tools integration
5
+ * for the Claude Code check provider, enabling custom tools and
6
+ * in-process MCP server creation.
7
+ */
8
+ interface McpTool {
9
+ name: string;
10
+ description?: string;
11
+ inputSchema?: Record<string, unknown>;
12
+ handler?: (args: Record<string, unknown>) => Promise<unknown>;
13
+ }
14
+ interface McpServer {
15
+ name: string;
16
+ command?: string;
17
+ args?: string[];
18
+ env?: Record<string, string>;
19
+ tools?: McpTool[];
20
+ }
21
+ interface McpServerInstance {
22
+ name: string;
23
+ listTools(): Promise<McpTool[]>;
24
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
25
+ close(): Promise<void>;
26
+ }
27
+ /**
28
+ * Built-in MCP tools for Visor code analysis
29
+ */
30
+ export declare class VisorMcpTools {
31
+ /**
32
+ * Get built-in MCP tools for code analysis
33
+ */
34
+ static getBuiltInTools(): McpTool[];
35
+ /**
36
+ * Analyze file structure and organization
37
+ */
38
+ private static analyzeFileStructure;
39
+ /**
40
+ * Detect common code patterns and anti-patterns
41
+ */
42
+ private static detectPatterns;
43
+ /**
44
+ * Calculate code complexity metrics
45
+ */
46
+ private static calculateComplexity;
47
+ /**
48
+ * Suggest code improvements based on best practices
49
+ */
50
+ private static suggestImprovements;
51
+ /**
52
+ * Generate structure recommendations
53
+ */
54
+ private static generateStructureRecommendations;
55
+ /**
56
+ * Calculate cyclomatic complexity (simplified)
57
+ */
58
+ private static calculateCyclomaticComplexity;
59
+ /**
60
+ * Calculate nesting depth
61
+ */
62
+ private static calculateNestingDepth;
63
+ /**
64
+ * Generate complexity recommendations
65
+ */
66
+ private static generateComplexityRecommendations;
67
+ /**
68
+ * Calculate priority based on suggestions
69
+ */
70
+ private static calculatePriority;
71
+ }
72
+ /**
73
+ * MCP Server Manager for handling external MCP servers
74
+ */
75
+ export declare class McpServerManager {
76
+ private servers;
77
+ /**
78
+ * Create and register an MCP server
79
+ */
80
+ createServer(config: McpServer): Promise<McpServerInstance>;
81
+ /**
82
+ * Get a registered server by name
83
+ */
84
+ getServer(name: string): McpServerInstance | undefined;
85
+ /**
86
+ * List all available tools from all servers
87
+ */
88
+ listAllTools(): Promise<Array<{
89
+ serverName: string;
90
+ tool: McpTool;
91
+ }>>;
92
+ /**
93
+ * Close all servers
94
+ */
95
+ closeAll(): Promise<void>;
96
+ /**
97
+ * Create external MCP server instance
98
+ */
99
+ private createExternalServer;
100
+ }
101
+ /**
102
+ * Default MCP tools configuration for Visor
103
+ */
104
+ export declare const DEFAULT_MCP_TOOLS_CONFIG: McpServer[];
105
+ export {};
106
+ //# sourceMappingURL=mcp-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/mcp-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,OAAO,EAAE;IAmFnC;;OAEG;mBACkB,oBAAoB;IA8DzC;;OAEG;mBACkB,cAAc;IAqDnC;;OAEG;mBACkB,mBAAmB;IA6BxC;;OAEG;mBACkB,mBAAmB;IAwExC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gCAAgC;IA0B/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IAuB5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAgBpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iCAAiC;IAuBhD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAcjC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA6C;IAE5D;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuBjE;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAItD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAiB3E;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B;;OAEG;YACW,oBAAoB;CAKnC;AA4DD;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,EAK/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/tool-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAA8B,MAAM,aAAa,CAAC;AAKxE;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,OAAO,CAAC,MAAM,CAAS;;IASvB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,aAAa,CAAC;YAmEX,cAAc;IAwC5B,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,mBAAmB;IAe3B,sBAAsB,IAAI,MAAM,EAAE;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAMrC,eAAe,IAAI,MAAM,EAAE;CAO5B"}
1
+ {"version":3,"file":"tool-check-provider.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/providers/tool-check-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAA8B,MAAM,aAAa,CAAC;AAKxE;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,OAAO,CAAC,MAAM,CAAS;;IASvB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBjD,OAAO,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC/C,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,aAAa,CAAC;YAmEX,cAAc;IAwC5B,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,mBAAmB;IAe3B,sBAAsB,IAAI,MAAM,EAAE;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAMrC,eAAe,IAAI,MAAM,EAAE;CAO5B"}
@@ -164,11 +164,11 @@ export interface FailureConditionResult {
164
164
  /**
165
165
  * Valid check types in configuration
166
166
  */
167
- export type ConfigCheckType = 'ai' | 'tool' | 'webhook' | 'noop';
167
+ export type ConfigCheckType = 'ai' | 'tool' | 'http' | 'http_input' | 'http_client' | 'noop' | 'claude-code';
168
168
  /**
169
169
  * Valid event triggers for checks
170
170
  */
171
- export type EventTrigger = 'pr_opened' | 'pr_updated' | 'pr_closed' | 'issue_opened' | 'issue_comment' | 'manual';
171
+ export type EventTrigger = 'pr_opened' | 'pr_updated' | 'pr_closed' | 'issue_opened' | 'issue_comment' | 'manual' | 'schedule' | 'webhook_received';
172
172
  /**
173
173
  * Valid output formats
174
174
  */
@@ -196,12 +196,47 @@ export interface AIProviderConfig {
196
196
  /** Request timeout in milliseconds */
197
197
  timeout?: number;
198
198
  }
199
+ /**
200
+ * MCP Server configuration
201
+ */
202
+ export interface McpServerConfig {
203
+ /** Command to execute for the MCP server */
204
+ command: string;
205
+ /** Arguments to pass to the command */
206
+ args?: string[];
207
+ /** Environment variables for the MCP server */
208
+ env?: Record<string, string>;
209
+ }
210
+ /**
211
+ * Claude Code configuration
212
+ */
213
+ export interface ClaudeCodeConfig {
214
+ /** List of allowed tools for Claude Code to use */
215
+ allowedTools?: string[];
216
+ /** Maximum number of turns in conversation */
217
+ maxTurns?: number;
218
+ /** System prompt for Claude Code */
219
+ systemPrompt?: string;
220
+ /** MCP servers configuration */
221
+ mcpServers?: Record<string, McpServerConfig>;
222
+ /** Path to subagent script */
223
+ subagent?: string;
224
+ /** Event hooks for lifecycle management */
225
+ hooks?: {
226
+ /** Called when check starts */
227
+ onStart?: string;
228
+ /** Called when check ends */
229
+ onEnd?: string;
230
+ /** Called when check encounters an error */
231
+ onError?: string;
232
+ };
233
+ }
199
234
  /**
200
235
  * Configuration for a single check
201
236
  */
202
237
  export interface CheckConfig {
203
- /** Type of check to perform */
204
- type: ConfigCheckType;
238
+ /** Type of check to perform (defaults to 'ai' if not specified) */
239
+ type?: ConfigCheckType;
205
240
  /** AI prompt for the check - can be inline string or file path (auto-detected) - required for AI checks */
206
241
  prompt?: string;
207
242
  /** Additional prompt to append when extending configurations - merged with parent prompt */
@@ -210,14 +245,26 @@ export interface CheckConfig {
210
245
  exec?: string;
211
246
  /** Stdin input for tools with Liquid template support - optional for tool checks */
212
247
  stdin?: string;
213
- /** Webhook URL - required for webhook checks */
248
+ /** HTTP URL - required for http output checks */
214
249
  url?: string;
250
+ /** HTTP body template (Liquid) - required for http output checks */
251
+ body?: string;
252
+ /** HTTP method (defaults to POST) */
253
+ method?: string;
254
+ /** HTTP headers */
255
+ headers?: Record<string, string>;
256
+ /** HTTP endpoint path - required for http_input checks */
257
+ endpoint?: string;
258
+ /** Transform template for http_input data (Liquid) - optional */
259
+ transform?: string;
260
+ /** Cron schedule expression (e.g., "0 2 * * *") - optional for any check type */
261
+ schedule?: string;
215
262
  /** Focus area for the check (security/performance/style/architecture/all) - optional */
216
263
  focus?: string;
217
264
  /** Command that triggers this check (e.g., "review", "security-scan") - optional */
218
265
  command?: string;
219
- /** Events that trigger this check */
220
- on: EventTrigger[];
266
+ /** Events that trigger this check (defaults to ['manual'] if not specified) */
267
+ on?: EventTrigger[];
221
268
  /** File patterns that trigger this check (optional) */
222
269
  triggers?: string[];
223
270
  /** AI provider configuration (optional) */
@@ -226,6 +273,8 @@ export interface CheckConfig {
226
273
  ai_model?: string;
227
274
  /** AI provider to use for this check - overrides global setting */
228
275
  ai_provider?: 'google' | 'anthropic' | 'openai' | 'mock' | string;
276
+ /** Claude Code configuration (for claude-code type checks) */
277
+ claude_code?: ClaudeCodeConfig;
229
278
  /** Environment variables for this check */
230
279
  env?: EnvConfig;
231
280
  /** Check IDs that this check depends on (optional) */
@@ -324,6 +373,62 @@ export interface OutputConfig {
324
373
  /** Whether to enable issue suppression via visor-disable comments (default: true) */
325
374
  suppressionEnabled?: boolean;
326
375
  }
376
+ /**
377
+ * HTTP server authentication configuration
378
+ */
379
+ export interface HttpAuthConfig {
380
+ /** Authentication type */
381
+ type: 'bearer_token' | 'hmac' | 'basic' | 'none';
382
+ /** Secret or token for authentication */
383
+ secret?: string;
384
+ /** Username for basic auth */
385
+ username?: string;
386
+ /** Password for basic auth */
387
+ password?: string;
388
+ }
389
+ /**
390
+ * HTTP server endpoint configuration
391
+ */
392
+ export interface HttpEndpointConfig {
393
+ /** Path for the webhook endpoint */
394
+ path: string;
395
+ /** Optional transform template (Liquid) for the received data */
396
+ transform?: string;
397
+ /** Optional name/ID for this endpoint */
398
+ name?: string;
399
+ }
400
+ /**
401
+ * TLS/SSL configuration for HTTPS server
402
+ */
403
+ export interface TlsConfig {
404
+ /** Enable TLS/HTTPS */
405
+ enabled: boolean;
406
+ /** Path to TLS certificate file or certificate content */
407
+ cert?: string;
408
+ /** Path to TLS key file or key content */
409
+ key?: string;
410
+ /** Path to CA certificate file or CA content (optional) */
411
+ ca?: string;
412
+ /** Reject unauthorized connections (default: true) */
413
+ rejectUnauthorized?: boolean;
414
+ }
415
+ /**
416
+ * HTTP server configuration for receiving webhooks
417
+ */
418
+ export interface HttpServerConfig {
419
+ /** Whether HTTP server is enabled */
420
+ enabled: boolean;
421
+ /** Port to listen on */
422
+ port: number;
423
+ /** Host/IP to bind to (defaults to 0.0.0.0) */
424
+ host?: string;
425
+ /** TLS/SSL configuration for HTTPS */
426
+ tls?: TlsConfig;
427
+ /** Authentication configuration */
428
+ auth?: HttpAuthConfig;
429
+ /** HTTP endpoints configuration */
430
+ endpoints?: HttpEndpointConfig[];
431
+ }
327
432
  /**
328
433
  * Main Visor configuration
329
434
  */
@@ -336,12 +441,14 @@ export interface VisorConfig {
336
441
  checks: Record<string, CheckConfig>;
337
442
  /** Output configuration */
338
443
  output: OutputConfig;
444
+ /** HTTP server configuration for receiving webhooks */
445
+ http_server?: HttpServerConfig;
339
446
  /** Global environment variables */
340
447
  env?: EnvConfig;
341
448
  /** Global AI model setting */
342
449
  ai_model?: string;
343
450
  /** Global AI provider setting */
344
- ai_provider?: 'google' | 'anthropic' | 'openai' | 'mock' | string;
451
+ ai_provider?: 'google' | 'anthropic' | 'openai' | 'mock' | 'claude-code' | string;
345
452
  /** Maximum number of checks to run in parallel (default: 3) */
346
453
  max_parallelism?: number;
347
454
  /** Stop execution when any check fails (default: false) */