@probelabs/visor 0.1.90 → 0.1.93

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 (131) hide show
  1. package/README.md +68 -2
  2. package/action.yml +1 -1
  3. package/defaults/.visor.yaml +133 -168
  4. package/dist/13.index.js +82 -0
  5. package/dist/159.index.js +38 -0
  6. package/dist/168.index.js +82 -0
  7. package/dist/201.index.js +82 -0
  8. package/dist/262.index.js +48 -0
  9. package/dist/272.index.js +82 -0
  10. package/dist/273.index.js +48 -0
  11. package/dist/320.index.js +38 -0
  12. package/dist/34.index.js +81 -0
  13. package/dist/421.index.js +48 -0
  14. package/dist/437.index.js +82 -0
  15. package/dist/441.index.js +81 -0
  16. package/dist/450.index.js +82 -0
  17. package/dist/54.index.js +81 -0
  18. package/dist/544.index.js +38 -0
  19. package/dist/558.index.js +82 -0
  20. package/dist/715.index.js +38 -0
  21. package/dist/737.index.js +82 -0
  22. package/dist/834.index.js +48 -0
  23. package/dist/85.index.js +82 -0
  24. package/dist/861.index.js +48 -0
  25. package/dist/878.index.js +81 -0
  26. package/dist/940.index.js +38 -0
  27. package/dist/989.index.js +81 -0
  28. package/dist/996.index.js +82 -0
  29. package/dist/ai-review-service.d.ts +11 -1
  30. package/dist/ai-review-service.d.ts.map +1 -1
  31. package/dist/check-execution-engine.d.ts +15 -2
  32. package/dist/check-execution-engine.d.ts.map +1 -1
  33. package/dist/cli-main.d.ts.map +1 -1
  34. package/dist/cli.d.ts.map +1 -1
  35. package/dist/config.d.ts.map +1 -1
  36. package/dist/defaults/.visor.yaml +133 -168
  37. package/dist/failure-condition-evaluator.d.ts +3 -2
  38. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  39. package/dist/generated/config-schema.d.ts +89 -2
  40. package/dist/generated/config-schema.d.ts.map +1 -1
  41. package/dist/generated/config-schema.json +109 -1
  42. package/dist/git-repository-analyzer.d.ts +17 -1
  43. package/dist/git-repository-analyzer.d.ts.map +1 -1
  44. package/dist/github-comments.d.ts.map +1 -1
  45. package/dist/github-reactions.d.ts +36 -0
  46. package/dist/github-reactions.d.ts.map +1 -0
  47. package/dist/index.d.ts +2 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +173112 -46133
  50. package/dist/liquid-extensions.d.ts +15 -0
  51. package/dist/liquid-extensions.d.ts.map +1 -1
  52. package/dist/memory-store.d.ts +129 -0
  53. package/dist/memory-store.d.ts.map +1 -0
  54. package/dist/output/issue-assistant/schema.json +42 -0
  55. package/dist/output/issue-assistant/template.liquid +1 -0
  56. package/dist/output/overview/schema.json +33 -0
  57. package/dist/output/overview/template.liquid +16 -0
  58. package/dist/output-formatters.d.ts +1 -0
  59. package/dist/output-formatters.d.ts.map +1 -1
  60. package/dist/pr-analyzer.d.ts +2 -0
  61. package/dist/pr-analyzer.d.ts.map +1 -1
  62. package/dist/proto/channelz.proto +564 -0
  63. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  64. package/dist/providers/command-check-provider.d.ts.map +1 -1
  65. package/dist/providers/github-ops-provider.d.ts +18 -0
  66. package/dist/providers/github-ops-provider.d.ts.map +1 -0
  67. package/dist/providers/memory-check-provider.d.ts +56 -0
  68. package/dist/providers/memory-check-provider.d.ts.map +1 -0
  69. package/dist/reviewer.d.ts +2 -0
  70. package/dist/reviewer.d.ts.map +1 -1
  71. package/dist/sdk/check-execution-engine-RORGGGGP.mjs +11 -0
  72. package/dist/sdk/chunk-I3GQJIR7.mjs +752 -0
  73. package/dist/sdk/chunk-I3GQJIR7.mjs.map +1 -0
  74. package/dist/sdk/chunk-KVHVCGY6.mjs +103 -0
  75. package/dist/sdk/chunk-KVHVCGY6.mjs.map +1 -0
  76. package/dist/sdk/chunk-TWJKAYT6.mjs +1124 -0
  77. package/dist/sdk/chunk-TWJKAYT6.mjs.map +1 -0
  78. package/dist/sdk/{chunk-N2PPFOSF.mjs → chunk-Z47UECAT.mjs} +2593 -264
  79. package/dist/sdk/chunk-Z47UECAT.mjs.map +1 -0
  80. package/dist/sdk/liquid-extensions-GMEGEGC3.mjs +18 -0
  81. package/dist/sdk/mermaid-telemetry-LZGDD35I.mjs +61 -0
  82. package/dist/sdk/mermaid-telemetry-LZGDD35I.mjs.map +1 -0
  83. package/dist/sdk/sdk.d.mts +48 -2
  84. package/dist/sdk/sdk.d.ts +48 -2
  85. package/dist/sdk/sdk.js +5372 -781
  86. package/dist/sdk/sdk.js.map +1 -1
  87. package/dist/sdk/sdk.mjs +112 -7
  88. package/dist/sdk/sdk.mjs.map +1 -1
  89. package/dist/sdk/tracer-init-O7RLXMJ3.mjs +10 -0
  90. package/dist/sdk/tracer-init-O7RLXMJ3.mjs.map +1 -0
  91. package/dist/session-registry.d.ts +19 -5
  92. package/dist/session-registry.d.ts.map +1 -1
  93. package/dist/telemetry/fallback-ndjson.d.ts +7 -0
  94. package/dist/telemetry/fallback-ndjson.d.ts.map +1 -0
  95. package/dist/telemetry/file-span-exporter.d.ts +17 -0
  96. package/dist/telemetry/file-span-exporter.d.ts.map +1 -0
  97. package/dist/telemetry/metrics.d.ts +13 -0
  98. package/dist/telemetry/metrics.d.ts.map +1 -0
  99. package/dist/telemetry/opentelemetry.d.ts +26 -0
  100. package/dist/telemetry/opentelemetry.d.ts.map +1 -0
  101. package/dist/telemetry/trace-helpers.d.ts +9 -0
  102. package/dist/telemetry/trace-helpers.d.ts.map +1 -0
  103. package/dist/telemetry/trace-report-exporter.d.ts +17 -0
  104. package/dist/telemetry/trace-report-exporter.d.ts.map +1 -0
  105. package/dist/traces/run-2025-10-15T11-54-04-087Z.ndjson +33 -0
  106. package/dist/traces/run-2025-10-15T11-54-14-046Z.ndjson +33 -0
  107. package/dist/traces/run-2025-10-15T11-54-14-575Z.ndjson +33 -0
  108. package/dist/traces/run-2025-10-15T11-54-15-082Z.ndjson +33 -0
  109. package/dist/traces/run-2025-10-15T11-54-15-561Z.ndjson +12 -0
  110. package/dist/types/cli.d.ts +4 -0
  111. package/dist/types/cli.d.ts.map +1 -1
  112. package/dist/types/config.d.ts +56 -2
  113. package/dist/types/config.d.ts.map +1 -1
  114. package/dist/utils/author-permissions.d.ts +74 -0
  115. package/dist/utils/author-permissions.d.ts.map +1 -0
  116. package/dist/utils/head-sha.d.ts +8 -0
  117. package/dist/utils/head-sha.d.ts.map +1 -0
  118. package/dist/utils/mermaid-telemetry.d.ts +3 -0
  119. package/dist/utils/mermaid-telemetry.d.ts.map +1 -0
  120. package/dist/utils/tracer-init.d.ts +12 -0
  121. package/dist/utils/tracer-init.d.ts.map +1 -0
  122. package/dist/utils/ui-helpers.d.ts +3 -0
  123. package/dist/utils/ui-helpers.d.ts.map +1 -0
  124. package/package.json +2 -2
  125. package/dist/sdk/check-execution-engine-Z2USLMN5.mjs +0 -9
  126. package/dist/sdk/chunk-FIL2OGF6.mjs +0 -68
  127. package/dist/sdk/chunk-FIL2OGF6.mjs.map +0 -1
  128. package/dist/sdk/chunk-N2PPFOSF.mjs.map +0 -1
  129. package/dist/sdk/liquid-extensions-KDECAJTV.mjs +0 -12
  130. /package/dist/sdk/{check-execution-engine-Z2USLMN5.mjs.map → check-execution-engine-RORGGGGP.mjs.map} +0 -0
  131. /package/dist/sdk/{liquid-extensions-KDECAJTV.mjs.map → liquid-extensions-GMEGEGC3.mjs.map} +0 -0
@@ -0,0 +1,18 @@
1
+ import {
2
+ ReadFileTag,
3
+ configureLiquidWithExtensions,
4
+ createExtendedLiquid,
5
+ sanitizeLabel,
6
+ sanitizeLabelList,
7
+ withPermissionsContext
8
+ } from "./chunk-I3GQJIR7.mjs";
9
+ import "./chunk-WMJKH4XE.mjs";
10
+ export {
11
+ ReadFileTag,
12
+ configureLiquidWithExtensions,
13
+ createExtendedLiquid,
14
+ sanitizeLabel,
15
+ sanitizeLabelList,
16
+ withPermissionsContext
17
+ };
18
+ //# sourceMappingURL=liquid-extensions-GMEGEGC3.mjs.map
@@ -0,0 +1,61 @@
1
+ import {
2
+ addDiagramBlock,
3
+ addEvent
4
+ } from "./chunk-TWJKAYT6.mjs";
5
+ import "./chunk-WMJKH4XE.mjs";
6
+
7
+ // src/utils/mermaid-telemetry.ts
8
+ import * as fs from "fs";
9
+ import * as path from "path";
10
+ var MERMAID_RE = /```mermaid\s*\n([\s\S]*?)\n```/gi;
11
+ function emitMermaidFromMarkdown(checkName, markdown, origin) {
12
+ if (!markdown || typeof markdown !== "string") return 0;
13
+ let m;
14
+ let count = 0;
15
+ MERMAID_RE.lastIndex = 0;
16
+ while ((m = MERMAID_RE.exec(markdown)) != null) {
17
+ const code = (m[1] || "").trim();
18
+ if (code) {
19
+ try {
20
+ addEvent("diagram.block", { check: checkName, origin, code });
21
+ addDiagramBlock(origin);
22
+ if (process.env.VISOR_TRACE_REPORT === "true") {
23
+ const outDir = process.env.VISOR_TRACE_DIR || path.join(process.cwd(), "output", "traces");
24
+ try {
25
+ if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });
26
+ const ts = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
27
+ const jsonPath = path.join(outDir, `${ts}.trace.json`);
28
+ const htmlPath = path.join(outDir, `${ts}.report.html`);
29
+ let data = { spans: [] };
30
+ if (fs.existsSync(jsonPath)) {
31
+ try {
32
+ data = JSON.parse(fs.readFileSync(jsonPath, "utf8"));
33
+ } catch {
34
+ data = { spans: [] };
35
+ }
36
+ }
37
+ data.spans.push({
38
+ events: [{ name: "diagram.block", attrs: { check: checkName, origin, code } }]
39
+ });
40
+ fs.writeFileSync(jsonPath, JSON.stringify(data, null, 2), "utf8");
41
+ if (!fs.existsSync(htmlPath)) {
42
+ fs.writeFileSync(
43
+ htmlPath,
44
+ '<!doctype html><html><head><meta charset="utf-8"/><title>Visor Trace Report</title></head><body><h2>Visor Trace Report</h2></body></html>',
45
+ "utf8"
46
+ );
47
+ }
48
+ } catch {
49
+ }
50
+ }
51
+ count++;
52
+ } catch {
53
+ }
54
+ }
55
+ }
56
+ return count;
57
+ }
58
+ export {
59
+ emitMermaidFromMarkdown
60
+ };
61
+ //# sourceMappingURL=mermaid-telemetry-LZGDD35I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/mermaid-telemetry.ts"],"sourcesContent":["import { addEvent } from '../telemetry/trace-helpers';\nimport { addDiagramBlock } from '../telemetry/metrics';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nconst MERMAID_RE = /```mermaid\\s*\\n([\\s\\S]*?)\\n```/gi;\n\nexport type DiagramOrigin = 'content' | 'issue';\n\nexport function emitMermaidFromMarkdown(\n checkName: string,\n markdown: string,\n origin: DiagramOrigin\n): number {\n if (!markdown || typeof markdown !== 'string') return 0;\n let m: RegExpExecArray | null;\n let count = 0;\n MERMAID_RE.lastIndex = 0;\n while ((m = MERMAID_RE.exec(markdown)) != null) {\n const code = (m[1] || '').trim();\n if (code) {\n try {\n addEvent('diagram.block', { check: checkName, origin, code });\n addDiagramBlock(origin);\n // Fallback writer for environments where OTel SDK isn't active\n if (process.env.VISOR_TRACE_REPORT === 'true') {\n const outDir =\n process.env.VISOR_TRACE_DIR || path.join(process.cwd(), 'output', 'traces');\n try {\n if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });\n const ts = new Date().toISOString().replace(/[:.]/g, '-');\n const jsonPath = path.join(outDir, `${ts}.trace.json`);\n const htmlPath = path.join(outDir, `${ts}.report.html`);\n // Append or create minimal trace JSON\n let data: {\n spans: Array<{ events: Array<{ name: string; attrs: Record<string, unknown> }> }>;\n } = { spans: [] };\n if (fs.existsSync(jsonPath)) {\n try {\n data = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));\n } catch {\n data = { spans: [] };\n }\n }\n data.spans.push({\n events: [{ name: 'diagram.block', attrs: { check: checkName, origin, code } }],\n });\n fs.writeFileSync(jsonPath, JSON.stringify(data, null, 2), 'utf8');\n // Ensure minimal HTML report exists\n if (!fs.existsSync(htmlPath)) {\n fs.writeFileSync(\n htmlPath,\n '<!doctype html><html><head><meta charset=\"utf-8\"/><title>Visor Trace Report</title></head><body><h2>Visor Trace Report</h2></body></html>',\n 'utf8'\n );\n }\n } catch {}\n }\n count++;\n } catch {\n // ignore telemetry failures\n }\n }\n }\n return count;\n}\n"],"mappings":";;;;;;;AAEA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAEtB,IAAM,aAAa;AAIZ,SAAS,wBACd,WACA,UACA,QACQ;AACR,MAAI,CAAC,YAAY,OAAO,aAAa,SAAU,QAAO;AACtD,MAAI;AACJ,MAAI,QAAQ;AACZ,aAAW,YAAY;AACvB,UAAQ,IAAI,WAAW,KAAK,QAAQ,MAAM,MAAM;AAC9C,UAAM,QAAQ,EAAE,CAAC,KAAK,IAAI,KAAK;AAC/B,QAAI,MAAM;AACR,UAAI;AACF,iBAAS,iBAAiB,EAAE,OAAO,WAAW,QAAQ,KAAK,CAAC;AAC5D,wBAAgB,MAAM;AAEtB,YAAI,QAAQ,IAAI,uBAAuB,QAAQ;AAC7C,gBAAM,SACJ,QAAQ,IAAI,mBAAwB,UAAK,QAAQ,IAAI,GAAG,UAAU,QAAQ;AAC5E,cAAI;AACF,gBAAI,CAAI,cAAW,MAAM,EAAG,CAAG,aAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AACpE,kBAAM,MAAK,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AACxD,kBAAM,WAAgB,UAAK,QAAQ,GAAG,EAAE,aAAa;AACrD,kBAAM,WAAgB,UAAK,QAAQ,GAAG,EAAE,cAAc;AAEtD,gBAAI,OAEA,EAAE,OAAO,CAAC,EAAE;AAChB,gBAAO,cAAW,QAAQ,GAAG;AAC3B,kBAAI;AACF,uBAAO,KAAK,MAAS,gBAAa,UAAU,MAAM,CAAC;AAAA,cACrD,QAAQ;AACN,uBAAO,EAAE,OAAO,CAAC,EAAE;AAAA,cACrB;AAAA,YACF;AACA,iBAAK,MAAM,KAAK;AAAA,cACd,QAAQ,CAAC,EAAE,MAAM,iBAAiB,OAAO,EAAE,OAAO,WAAW,QAAQ,KAAK,EAAE,CAAC;AAAA,YAC/E,CAAC;AACD,YAAG,iBAAc,UAAU,KAAK,UAAU,MAAM,MAAM,CAAC,GAAG,MAAM;AAEhE,gBAAI,CAAI,cAAW,QAAQ,GAAG;AAC5B,cAAG;AAAA,gBACD;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,QAAQ;AAAA,UAAC;AAAA,QACX;AACA;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -120,7 +120,7 @@ interface FailureConditionResult {
120
120
  /**
121
121
  * Valid check types in configuration
122
122
  */
123
- type ConfigCheckType = 'ai' | 'command' | 'http' | 'http_input' | 'http_client' | 'noop' | 'log' | 'claude-code';
123
+ type ConfigCheckType = 'ai' | 'command' | 'http' | 'http_input' | 'http_client' | 'noop' | 'log' | 'memory' | 'github' | 'claude-code';
124
124
  /**
125
125
  * Valid event triggers for checks
126
126
  */
@@ -141,7 +141,7 @@ interface TagFilter {
141
141
  /**
142
142
  * Valid grouping options
143
143
  */
144
- type GroupByOption = 'check' | 'file' | 'severity';
144
+ type GroupByOption = 'check' | 'file' | 'severity' | 'group';
145
145
  /**
146
146
  * Environment variable reference configuration
147
147
  */
@@ -292,6 +292,28 @@ interface CheckConfig {
292
292
  include_dependencies?: boolean;
293
293
  /** Include execution metadata in log output */
294
294
  include_metadata?: boolean;
295
+ /**
296
+ * Memory provider specific options (optional, only used when type === 'memory').
297
+ */
298
+ /** Memory operation to perform */
299
+ operation?: 'get' | 'set' | 'append' | 'increment' | 'delete' | 'clear' | 'list' | 'exec_js';
300
+ /** Key for memory operation */
301
+ key?: string;
302
+ /** Value for set/append operations */
303
+ value?: unknown;
304
+ /** JavaScript expression to compute value dynamically */
305
+ value_js?: string;
306
+ /** JavaScript code for exec_js operation with full memory access */
307
+ memory_js?: string;
308
+ /** Override namespace for this check */
309
+ namespace?: string;
310
+ /**
311
+ * GitHub provider specific options (optional, only used when type === 'github').
312
+ */
313
+ /** GitHub operation to perform (e.g., 'labels.add', 'labels.remove', 'comment.create') */
314
+ op?: string;
315
+ /** Values for GitHub operations (can be array or single value) */
316
+ values?: string[] | string;
295
317
  }
296
318
  /**
297
319
  * Backoff policy for retries
@@ -321,6 +343,8 @@ interface OnFailConfig {
321
343
  run?: string[];
322
344
  /** Jump back to an ancestor step (by id) */
323
345
  goto?: string;
346
+ /** Simulate a different event when performing goto (e.g., 'pr_updated') */
347
+ goto_event?: EventTrigger;
324
348
  /** Dynamic goto: JS expression returning step id or null */
325
349
  goto_js?: string;
326
350
  /** Dynamic remediation list: JS expression returning string[] */
@@ -334,6 +358,8 @@ interface OnSuccessConfig {
334
358
  run?: string[];
335
359
  /** Optional jump back to ancestor step (by id) */
336
360
  goto?: string;
361
+ /** Simulate a different event when performing goto (e.g., 'pr_updated') */
362
+ goto_event?: EventTrigger;
337
363
  /** Dynamic goto: JS expression returning step id or null */
338
364
  goto_js?: string;
339
365
  /** Dynamic post-success steps: JS expression returning string[] */
@@ -476,6 +502,23 @@ interface HttpServerConfig {
476
502
  /** HTTP endpoints configuration */
477
503
  endpoints?: HttpEndpointConfig[];
478
504
  }
505
+ /**
506
+ * Memory storage configuration
507
+ */
508
+ interface MemoryConfig {
509
+ /** Storage mode: "memory" (in-memory, default) or "file" (persistent) */
510
+ storage?: 'memory' | 'file';
511
+ /** Storage format (only for file storage, default: json) */
512
+ format?: 'json' | 'csv';
513
+ /** File path (required if storage: file) */
514
+ file?: string;
515
+ /** Default namespace (default: "default") */
516
+ namespace?: string;
517
+ /** Auto-load on startup (default: true if storage: file) */
518
+ auto_load?: boolean;
519
+ /** Auto-save after operations (default: true if storage: file) */
520
+ auto_save?: boolean;
521
+ }
479
522
  /**
480
523
  * Main Visor configuration
481
524
  */
@@ -490,6 +533,8 @@ interface VisorConfig {
490
533
  output: OutputConfig;
491
534
  /** HTTP server configuration for receiving webhooks */
492
535
  http_server?: HttpServerConfig;
536
+ /** Memory storage configuration */
537
+ memory?: MemoryConfig;
493
538
  /** Global environment variables */
494
539
  env?: EnvConfig;
495
540
  /** Global AI model setting */
@@ -557,6 +602,7 @@ interface GitFileChange {
557
602
  changes: number;
558
603
  content?: string;
559
604
  patch?: string;
605
+ truncated?: boolean;
560
606
  }
561
607
  interface GitRepositoryInfo {
562
608
  title: string;
package/dist/sdk/sdk.d.ts CHANGED
@@ -120,7 +120,7 @@ interface FailureConditionResult {
120
120
  /**
121
121
  * Valid check types in configuration
122
122
  */
123
- type ConfigCheckType = 'ai' | 'command' | 'http' | 'http_input' | 'http_client' | 'noop' | 'log' | 'claude-code';
123
+ type ConfigCheckType = 'ai' | 'command' | 'http' | 'http_input' | 'http_client' | 'noop' | 'log' | 'memory' | 'github' | 'claude-code';
124
124
  /**
125
125
  * Valid event triggers for checks
126
126
  */
@@ -141,7 +141,7 @@ interface TagFilter {
141
141
  /**
142
142
  * Valid grouping options
143
143
  */
144
- type GroupByOption = 'check' | 'file' | 'severity';
144
+ type GroupByOption = 'check' | 'file' | 'severity' | 'group';
145
145
  /**
146
146
  * Environment variable reference configuration
147
147
  */
@@ -292,6 +292,28 @@ interface CheckConfig {
292
292
  include_dependencies?: boolean;
293
293
  /** Include execution metadata in log output */
294
294
  include_metadata?: boolean;
295
+ /**
296
+ * Memory provider specific options (optional, only used when type === 'memory').
297
+ */
298
+ /** Memory operation to perform */
299
+ operation?: 'get' | 'set' | 'append' | 'increment' | 'delete' | 'clear' | 'list' | 'exec_js';
300
+ /** Key for memory operation */
301
+ key?: string;
302
+ /** Value for set/append operations */
303
+ value?: unknown;
304
+ /** JavaScript expression to compute value dynamically */
305
+ value_js?: string;
306
+ /** JavaScript code for exec_js operation with full memory access */
307
+ memory_js?: string;
308
+ /** Override namespace for this check */
309
+ namespace?: string;
310
+ /**
311
+ * GitHub provider specific options (optional, only used when type === 'github').
312
+ */
313
+ /** GitHub operation to perform (e.g., 'labels.add', 'labels.remove', 'comment.create') */
314
+ op?: string;
315
+ /** Values for GitHub operations (can be array or single value) */
316
+ values?: string[] | string;
295
317
  }
296
318
  /**
297
319
  * Backoff policy for retries
@@ -321,6 +343,8 @@ interface OnFailConfig {
321
343
  run?: string[];
322
344
  /** Jump back to an ancestor step (by id) */
323
345
  goto?: string;
346
+ /** Simulate a different event when performing goto (e.g., 'pr_updated') */
347
+ goto_event?: EventTrigger;
324
348
  /** Dynamic goto: JS expression returning step id or null */
325
349
  goto_js?: string;
326
350
  /** Dynamic remediation list: JS expression returning string[] */
@@ -334,6 +358,8 @@ interface OnSuccessConfig {
334
358
  run?: string[];
335
359
  /** Optional jump back to ancestor step (by id) */
336
360
  goto?: string;
361
+ /** Simulate a different event when performing goto (e.g., 'pr_updated') */
362
+ goto_event?: EventTrigger;
337
363
  /** Dynamic goto: JS expression returning step id or null */
338
364
  goto_js?: string;
339
365
  /** Dynamic post-success steps: JS expression returning string[] */
@@ -476,6 +502,23 @@ interface HttpServerConfig {
476
502
  /** HTTP endpoints configuration */
477
503
  endpoints?: HttpEndpointConfig[];
478
504
  }
505
+ /**
506
+ * Memory storage configuration
507
+ */
508
+ interface MemoryConfig {
509
+ /** Storage mode: "memory" (in-memory, default) or "file" (persistent) */
510
+ storage?: 'memory' | 'file';
511
+ /** Storage format (only for file storage, default: json) */
512
+ format?: 'json' | 'csv';
513
+ /** File path (required if storage: file) */
514
+ file?: string;
515
+ /** Default namespace (default: "default") */
516
+ namespace?: string;
517
+ /** Auto-load on startup (default: true if storage: file) */
518
+ auto_load?: boolean;
519
+ /** Auto-save after operations (default: true if storage: file) */
520
+ auto_save?: boolean;
521
+ }
479
522
  /**
480
523
  * Main Visor configuration
481
524
  */
@@ -490,6 +533,8 @@ interface VisorConfig {
490
533
  output: OutputConfig;
491
534
  /** HTTP server configuration for receiving webhooks */
492
535
  http_server?: HttpServerConfig;
536
+ /** Memory storage configuration */
537
+ memory?: MemoryConfig;
493
538
  /** Global environment variables */
494
539
  env?: EnvConfig;
495
540
  /** Global AI model setting */
@@ -557,6 +602,7 @@ interface GitFileChange {
557
602
  changes: number;
558
603
  content?: string;
559
604
  patch?: string;
605
+ truncated?: boolean;
560
606
  }
561
607
  interface GitRepositoryInfo {
562
608
  title: string;