@probelabs/visor 0.1.166 → 0.1.167-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.
Files changed (79) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/frontends/github-frontend.d.ts.map +1 -1
  3. package/dist/index.js +2182 -50
  4. package/dist/sdk/{check-provider-registry-V6C4LUYJ.mjs → check-provider-registry-6WR2SG66.mjs} +3 -3
  5. package/dist/sdk/{check-provider-registry-TGPICTHD.mjs → check-provider-registry-CWLPAM5U.mjs} +3 -3
  6. package/dist/sdk/{chunk-WSYVK6ML.mjs → chunk-2G2PJKHM.mjs} +297 -31
  7. package/dist/sdk/chunk-2G2PJKHM.mjs.map +1 -0
  8. package/dist/sdk/{chunk-KKGMGB4X.mjs → chunk-3LXYZ2OQ.mjs} +298 -32
  9. package/dist/sdk/chunk-3LXYZ2OQ.mjs.map +1 -0
  10. package/dist/sdk/{chunk-DEAPFYNX.mjs → chunk-KYBKVKBS.mjs} +7 -1
  11. package/dist/sdk/{chunk-DEAPFYNX.mjs.map → chunk-KYBKVKBS.mjs.map} +1 -1
  12. package/dist/sdk/{config-D6WF2U4B.mjs → config-DP5QU3XC.mjs} +2 -2
  13. package/dist/sdk/{github-frontend-P274ISBJ.mjs → github-frontend-VM52NX7N.mjs} +19 -1
  14. package/dist/sdk/{github-frontend-BPRRUIGB.mjs.map → github-frontend-VM52NX7N.mjs.map} +1 -1
  15. package/dist/sdk/{host-753E6PKF.mjs → host-7MGCKSHM.mjs} +2 -2
  16. package/dist/sdk/{host-AIMRV5YL.mjs → host-BTHRY6NS.mjs} +2 -2
  17. package/dist/sdk/knex-store-CRORFJE6.mjs +527 -0
  18. package/dist/sdk/knex-store-CRORFJE6.mjs.map +1 -0
  19. package/dist/sdk/loader-NJCF7DUS.mjs +89 -0
  20. package/dist/sdk/loader-NJCF7DUS.mjs.map +1 -0
  21. package/dist/sdk/opa-policy-engine-S2S2ULEI.mjs +655 -0
  22. package/dist/sdk/opa-policy-engine-S2S2ULEI.mjs.map +1 -0
  23. package/dist/sdk/{schedule-tool-OCZGLKMJ.mjs → schedule-tool-KKQ4W7KU.mjs} +3 -3
  24. package/dist/sdk/{schedule-tool-MQHISNJ6.mjs → schedule-tool-MPHHE2IM.mjs} +3 -3
  25. package/dist/sdk/{schedule-tool-handler-BGOL2TOP.mjs → schedule-tool-handler-6NUB2IHV.mjs} +3 -3
  26. package/dist/sdk/{schedule-tool-handler-TZYXM664.mjs → schedule-tool-handler-V7A4AQGS.mjs} +3 -3
  27. package/dist/sdk/sdk.js +1940 -276
  28. package/dist/sdk/sdk.js.map +1 -1
  29. package/dist/sdk/sdk.mjs +5 -5
  30. package/dist/sdk/validator-XTZJZZJH.mjs +134 -0
  31. package/dist/sdk/validator-XTZJZZJH.mjs.map +1 -0
  32. package/dist/sdk/{workflow-check-provider-3M5LXLLX.mjs → workflow-check-provider-N4ZTFOH6.mjs} +3 -3
  33. package/dist/sdk/{workflow-check-provider-QKHL6AFT.mjs → workflow-check-provider-PI7VJT25.mjs} +3 -3
  34. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
  35. package/dist/utils/fair-concurrency-limiter.d.ts +56 -0
  36. package/dist/utils/fair-concurrency-limiter.d.ts.map +1 -0
  37. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/output/traces/run-2026-03-06T13-08-34-152Z.ndjson +0 -138
  40. package/dist/output/traces/run-2026-03-06T13-09-10-593Z.ndjson +0 -2235
  41. package/dist/sdk/check-provider-registry-WXEBJWXY.mjs +0 -29
  42. package/dist/sdk/chunk-HFCOZPAS.mjs +0 -443
  43. package/dist/sdk/chunk-HFCOZPAS.mjs.map +0 -1
  44. package/dist/sdk/chunk-KBTFMYZQ.mjs +0 -739
  45. package/dist/sdk/chunk-KBTFMYZQ.mjs.map +0 -1
  46. package/dist/sdk/chunk-KKGMGB4X.mjs.map +0 -1
  47. package/dist/sdk/chunk-OQ3CML4F.mjs +0 -1502
  48. package/dist/sdk/chunk-OQ3CML4F.mjs.map +0 -1
  49. package/dist/sdk/chunk-WSYVK6ML.mjs.map +0 -1
  50. package/dist/sdk/chunk-ZQR4AGS3.mjs +0 -44057
  51. package/dist/sdk/chunk-ZQR4AGS3.mjs.map +0 -1
  52. package/dist/sdk/failure-condition-evaluator-5EAESM44.mjs +0 -17
  53. package/dist/sdk/github-frontend-BPRRUIGB.mjs +0 -1368
  54. package/dist/sdk/github-frontend-P274ISBJ.mjs.map +0 -1
  55. package/dist/sdk/routing-QHWSMAIH.mjs +0 -25
  56. package/dist/sdk/schedule-tool-ZVOSSFN2.mjs +0 -35
  57. package/dist/sdk/schedule-tool-handler-4NCS4ARE.mjs +0 -39
  58. package/dist/sdk/schedule-tool-handler-4NCS4ARE.mjs.map +0 -1
  59. package/dist/sdk/schedule-tool-handler-BGOL2TOP.mjs.map +0 -1
  60. package/dist/sdk/schedule-tool-handler-TZYXM664.mjs.map +0 -1
  61. package/dist/sdk/trace-helpers-CTHTK6V5.mjs +0 -25
  62. package/dist/sdk/trace-helpers-CTHTK6V5.mjs.map +0 -1
  63. package/dist/sdk/workflow-check-provider-3M5LXLLX.mjs.map +0 -1
  64. package/dist/sdk/workflow-check-provider-QKHL6AFT.mjs.map +0 -1
  65. package/dist/sdk/workflow-check-provider-UTNO6XN6.mjs +0 -29
  66. package/dist/sdk/workflow-check-provider-UTNO6XN6.mjs.map +0 -1
  67. package/dist/traces/run-2026-03-06T13-08-34-152Z.ndjson +0 -138
  68. package/dist/traces/run-2026-03-06T13-09-10-593Z.ndjson +0 -2235
  69. /package/dist/sdk/{check-provider-registry-TGPICTHD.mjs.map → check-provider-registry-6WR2SG66.mjs.map} +0 -0
  70. /package/dist/sdk/{check-provider-registry-V6C4LUYJ.mjs.map → check-provider-registry-CWLPAM5U.mjs.map} +0 -0
  71. /package/dist/sdk/{check-provider-registry-WXEBJWXY.mjs.map → config-DP5QU3XC.mjs.map} +0 -0
  72. /package/dist/sdk/{host-753E6PKF.mjs.map → host-7MGCKSHM.mjs.map} +0 -0
  73. /package/dist/sdk/{host-AIMRV5YL.mjs.map → host-BTHRY6NS.mjs.map} +0 -0
  74. /package/dist/sdk/{config-D6WF2U4B.mjs.map → schedule-tool-KKQ4W7KU.mjs.map} +0 -0
  75. /package/dist/sdk/{failure-condition-evaluator-5EAESM44.mjs.map → schedule-tool-MPHHE2IM.mjs.map} +0 -0
  76. /package/dist/sdk/{routing-QHWSMAIH.mjs.map → schedule-tool-handler-6NUB2IHV.mjs.map} +0 -0
  77. /package/dist/sdk/{schedule-tool-MQHISNJ6.mjs.map → schedule-tool-handler-V7A4AQGS.mjs.map} +0 -0
  78. /package/dist/sdk/{schedule-tool-OCZGLKMJ.mjs.map → workflow-check-provider-N4ZTFOH6.mjs.map} +0 -0
  79. /package/dist/sdk/{schedule-tool-ZVOSSFN2.mjs.map → workflow-check-provider-PI7VJT25.mjs.map} +0 -0
package/dist/sdk/sdk.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  StateMachineExecutionEngine,
3
3
  init_state_machine_execution_engine
4
- } from "./chunk-ZQR4AGS3.mjs";
4
+ } from "./chunk-3LXYZ2OQ.mjs";
5
5
  import "./chunk-KFKHU6CM.mjs";
6
6
  import "./chunk-AVMMKGLQ.mjs";
7
7
  import "./chunk-LG4AUKHB.mjs";
@@ -12,11 +12,11 @@ import "./chunk-NZADFXHE.mjs";
12
12
  import {
13
13
  ConfigManager,
14
14
  init_config
15
- } from "./chunk-DEAPFYNX.mjs";
15
+ } from "./chunk-KYBKVKBS.mjs";
16
16
  import "./chunk-NCWIZVOT.mjs";
17
- import "./chunk-OQ3CML4F.mjs";
18
- import "./chunk-KBTFMYZQ.mjs";
19
- import "./chunk-HFCOZPAS.mjs";
17
+ import "./chunk-RV5SK4FZ.mjs";
18
+ import "./chunk-E7NRUDWL.mjs";
19
+ import "./chunk-T5USZCCM.mjs";
20
20
  import "./chunk-JL7JXCET.mjs";
21
21
  import "./chunk-ZUEQNCKB.mjs";
22
22
  import "./chunk-25IC7KXZ.mjs";
@@ -0,0 +1,134 @@
1
+ import {
2
+ __esm
3
+ } from "./chunk-J7LXIPZS.mjs";
4
+
5
+ // src/enterprise/license/validator.ts
6
+ import * as crypto from "crypto";
7
+ import * as fs from "fs";
8
+ import * as path from "path";
9
+ var LicenseValidator;
10
+ var init_validator = __esm({
11
+ "src/enterprise/license/validator.ts"() {
12
+ LicenseValidator = class _LicenseValidator {
13
+ /** Ed25519 public key for license verification (PEM format). */
14
+ static PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAI/Zd08EFmgIdrDm/HXd0l3/5GBt7R1PrdvhdmEXhJlU=\n-----END PUBLIC KEY-----\n";
15
+ cache = null;
16
+ static CACHE_TTL = 5 * 60 * 1e3;
17
+ // 5 minutes
18
+ static GRACE_PERIOD = 72 * 3600 * 1e3;
19
+ // 72 hours after expiry
20
+ /**
21
+ * Load and validate license from environment or file.
22
+ *
23
+ * Resolution order:
24
+ * 1. VISOR_LICENSE env var (JWT string)
25
+ * 2. VISOR_LICENSE_FILE env var (path to file)
26
+ * 3. .visor-license in project root (cwd)
27
+ * 4. .visor-license in ~/.config/visor/
28
+ */
29
+ async loadAndValidate() {
30
+ if (this.cache && Date.now() - this.cache.validatedAt < _LicenseValidator.CACHE_TTL) {
31
+ return this.cache.payload;
32
+ }
33
+ const token = this.resolveToken();
34
+ if (!token) return null;
35
+ const payload = this.verifyAndDecode(token);
36
+ if (!payload) return null;
37
+ this.cache = { payload, validatedAt: Date.now() };
38
+ return payload;
39
+ }
40
+ /** Check if a specific feature is licensed */
41
+ hasFeature(feature) {
42
+ if (!this.cache) return false;
43
+ return this.cache.payload.features.includes(feature);
44
+ }
45
+ /** Check if license is valid (with grace period) */
46
+ isValid() {
47
+ if (!this.cache) return false;
48
+ const now = Date.now();
49
+ const expiryMs = this.cache.payload.exp * 1e3;
50
+ return now < expiryMs + _LicenseValidator.GRACE_PERIOD;
51
+ }
52
+ /** Check if the license is within its grace period (expired but still valid) */
53
+ isInGracePeriod() {
54
+ if (!this.cache) return false;
55
+ const now = Date.now();
56
+ const expiryMs = this.cache.payload.exp * 1e3;
57
+ return now >= expiryMs && now < expiryMs + _LicenseValidator.GRACE_PERIOD;
58
+ }
59
+ resolveToken() {
60
+ if (process.env.VISOR_LICENSE) {
61
+ return process.env.VISOR_LICENSE.trim();
62
+ }
63
+ if (process.env.VISOR_LICENSE_FILE) {
64
+ const resolved = path.resolve(process.env.VISOR_LICENSE_FILE);
65
+ const home2 = process.env.HOME || process.env.USERPROFILE || "";
66
+ const allowedPrefixes = [path.normalize(process.cwd())];
67
+ if (home2) allowedPrefixes.push(path.normalize(path.join(home2, ".config", "visor")));
68
+ let realPath;
69
+ try {
70
+ realPath = fs.realpathSync(resolved);
71
+ } catch {
72
+ return null;
73
+ }
74
+ const isSafe = allowedPrefixes.some(
75
+ (prefix) => realPath === prefix || realPath.startsWith(prefix + path.sep)
76
+ );
77
+ if (!isSafe) return null;
78
+ return this.readFile(realPath);
79
+ }
80
+ const cwdPath = path.join(process.cwd(), ".visor-license");
81
+ const cwdToken = this.readFile(cwdPath);
82
+ if (cwdToken) return cwdToken;
83
+ const home = process.env.HOME || process.env.USERPROFILE || "";
84
+ if (home) {
85
+ const configPath = path.join(home, ".config", "visor", ".visor-license");
86
+ const configToken = this.readFile(configPath);
87
+ if (configToken) return configToken;
88
+ }
89
+ return null;
90
+ }
91
+ readFile(filePath) {
92
+ try {
93
+ return fs.readFileSync(filePath, "utf-8").trim();
94
+ } catch {
95
+ return null;
96
+ }
97
+ }
98
+ verifyAndDecode(token) {
99
+ try {
100
+ const parts = token.split(".");
101
+ if (parts.length !== 3) return null;
102
+ const [headerB64, payloadB64, signatureB64] = parts;
103
+ const header = JSON.parse(Buffer.from(headerB64, "base64url").toString());
104
+ if (header.alg !== "EdDSA") return null;
105
+ const data = `${headerB64}.${payloadB64}`;
106
+ const signature = Buffer.from(signatureB64, "base64url");
107
+ const publicKey = crypto.createPublicKey(_LicenseValidator.PUBLIC_KEY);
108
+ if (publicKey.asymmetricKeyType !== "ed25519") {
109
+ return null;
110
+ }
111
+ const isValid = crypto.verify(null, Buffer.from(data), publicKey, signature);
112
+ if (!isValid) return null;
113
+ const payload = JSON.parse(Buffer.from(payloadB64, "base64url").toString());
114
+ if (!payload.org || !Array.isArray(payload.features) || typeof payload.exp !== "number" || typeof payload.iat !== "number" || !payload.sub) {
115
+ return null;
116
+ }
117
+ const now = Date.now();
118
+ const expiryMs = payload.exp * 1e3;
119
+ if (now >= expiryMs + _LicenseValidator.GRACE_PERIOD) {
120
+ return null;
121
+ }
122
+ return payload;
123
+ } catch {
124
+ return null;
125
+ }
126
+ }
127
+ };
128
+ }
129
+ });
130
+ init_validator();
131
+ export {
132
+ LicenseValidator
133
+ };
134
+ //# sourceMappingURL=validator-XTZJZZJH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/enterprise/license/validator.ts"],"sourcesContent":["/**\n * Copyright (c) ProbeLabs. All rights reserved.\n * Licensed under the Elastic License 2.0; you may not use this file except\n * in compliance with the Elastic License 2.0.\n */\n\nimport * as crypto from 'crypto';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface LicensePayload {\n org: string;\n features: string[];\n exp: number;\n iat: number;\n sub: string;\n}\n\nexport class LicenseValidator {\n /** Ed25519 public key for license verification (PEM format). */\n private static PUBLIC_KEY =\n '-----BEGIN PUBLIC KEY-----\\n' +\n 'MCowBQYDK2VwAyEAI/Zd08EFmgIdrDm/HXd0l3/5GBt7R1PrdvhdmEXhJlU=\\n' +\n '-----END PUBLIC KEY-----\\n';\n\n private cache: { payload: LicensePayload; validatedAt: number } | null = null;\n private static CACHE_TTL = 5 * 60 * 1000; // 5 minutes\n private static GRACE_PERIOD = 72 * 3600 * 1000; // 72 hours after expiry\n\n /**\n * Load and validate license from environment or file.\n *\n * Resolution order:\n * 1. VISOR_LICENSE env var (JWT string)\n * 2. VISOR_LICENSE_FILE env var (path to file)\n * 3. .visor-license in project root (cwd)\n * 4. .visor-license in ~/.config/visor/\n */\n async loadAndValidate(): Promise<LicensePayload | null> {\n // Return cached result if still fresh\n if (this.cache && Date.now() - this.cache.validatedAt < LicenseValidator.CACHE_TTL) {\n return this.cache.payload;\n }\n\n const token = this.resolveToken();\n if (!token) return null;\n\n const payload = this.verifyAndDecode(token);\n if (!payload) return null;\n\n this.cache = { payload, validatedAt: Date.now() };\n return payload;\n }\n\n /** Check if a specific feature is licensed */\n hasFeature(feature: string): boolean {\n if (!this.cache) return false;\n return this.cache.payload.features.includes(feature);\n }\n\n /** Check if license is valid (with grace period) */\n isValid(): boolean {\n if (!this.cache) return false;\n const now = Date.now();\n const expiryMs = this.cache.payload.exp * 1000;\n return now < expiryMs + LicenseValidator.GRACE_PERIOD;\n }\n\n /** Check if the license is within its grace period (expired but still valid) */\n isInGracePeriod(): boolean {\n if (!this.cache) return false;\n const now = Date.now();\n const expiryMs = this.cache.payload.exp * 1000;\n return now >= expiryMs && now < expiryMs + LicenseValidator.GRACE_PERIOD;\n }\n\n private resolveToken(): string | null {\n // 1. Direct env var\n if (process.env.VISOR_LICENSE) {\n return process.env.VISOR_LICENSE.trim();\n }\n\n // 2. File path from env (validate against path traversal)\n if (process.env.VISOR_LICENSE_FILE) {\n // path.resolve() produces an absolute path with all '..' segments resolved,\n // so a separate resolved.includes('..') check is unnecessary.\n const resolved = path.resolve(process.env.VISOR_LICENSE_FILE);\n const home = process.env.HOME || process.env.USERPROFILE || '';\n const allowedPrefixes = [path.normalize(process.cwd())];\n if (home) allowedPrefixes.push(path.normalize(path.join(home, '.config', 'visor')));\n\n // Resolve symlinks so an attacker cannot create a symlink inside an\n // allowed prefix that points to an arbitrary file outside it.\n let realPath: string;\n try {\n realPath = fs.realpathSync(resolved);\n } catch {\n return null; // File doesn't exist or isn't accessible\n }\n\n const isSafe = allowedPrefixes.some(\n prefix => realPath === prefix || realPath.startsWith(prefix + path.sep)\n );\n if (!isSafe) return null;\n return this.readFile(realPath);\n }\n\n // 3. .visor-license in cwd\n const cwdPath = path.join(process.cwd(), '.visor-license');\n const cwdToken = this.readFile(cwdPath);\n if (cwdToken) return cwdToken;\n\n // 4. ~/.config/visor/.visor-license\n const home = process.env.HOME || process.env.USERPROFILE || '';\n if (home) {\n const configPath = path.join(home, '.config', 'visor', '.visor-license');\n const configToken = this.readFile(configPath);\n if (configToken) return configToken;\n }\n\n return null;\n }\n\n private readFile(filePath: string): string | null {\n try {\n return fs.readFileSync(filePath, 'utf-8').trim();\n } catch {\n return null;\n }\n }\n\n private verifyAndDecode(token: string): LicensePayload | null {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) return null;\n\n const [headerB64, payloadB64, signatureB64] = parts;\n\n // Decode header to verify algorithm\n const header = JSON.parse(Buffer.from(headerB64, 'base64url').toString());\n if (header.alg !== 'EdDSA') return null;\n\n // Verify signature\n const data = `${headerB64}.${payloadB64}`;\n const signature = Buffer.from(signatureB64, 'base64url');\n\n const publicKey = crypto.createPublicKey(LicenseValidator.PUBLIC_KEY);\n\n // Validate that the loaded public key is actually Ed25519 (OID 1.3.101.112).\n // This prevents algorithm-confusion attacks if the embedded key were ever\n // swapped to a different type.\n if (publicKey.asymmetricKeyType !== 'ed25519') {\n return null;\n }\n\n // Ed25519 verification: algorithm must be null because EdDSA performs its\n // own internal hashing (SHA-512) — passing a digest algorithm here would\n // cause Node.js to throw. The key type is validated above.\n const isValid = crypto.verify(null, Buffer.from(data), publicKey, signature);\n if (!isValid) return null;\n\n // Decode payload\n const payload: LicensePayload = JSON.parse(Buffer.from(payloadB64, 'base64url').toString());\n\n // Validate required fields\n if (\n !payload.org ||\n !Array.isArray(payload.features) ||\n typeof payload.exp !== 'number' ||\n typeof payload.iat !== 'number' ||\n !payload.sub\n ) {\n return null;\n }\n\n // Check expiry (with grace period)\n const now = Date.now();\n const expiryMs = payload.exp * 1000;\n if (now >= expiryMs + LicenseValidator.GRACE_PERIOD) {\n return null;\n }\n\n return payload;\n } catch {\n return null;\n }\n }\n}\n"],"mappings":"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","names":["home"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  WorkflowCheckProvider,
3
3
  init_workflow_check_provider
4
- } from "./chunk-KKGMGB4X.mjs";
4
+ } from "./chunk-2G2PJKHM.mjs";
5
5
  import "./chunk-KFKHU6CM.mjs";
6
6
  import "./chunk-AVMMKGLQ.mjs";
7
7
  import "./chunk-LG4AUKHB.mjs";
@@ -9,7 +9,7 @@ import "./chunk-B7BVQM5K.mjs";
9
9
  import "./chunk-XXAEN5KU.mjs";
10
10
  import "./chunk-GEW6LS32.mjs";
11
11
  import "./chunk-NZADFXHE.mjs";
12
- import "./chunk-DEAPFYNX.mjs";
12
+ import "./chunk-KYBKVKBS.mjs";
13
13
  import "./chunk-NCWIZVOT.mjs";
14
14
  import "./chunk-RV5SK4FZ.mjs";
15
15
  import "./chunk-E7NRUDWL.mjs";
@@ -26,4 +26,4 @@ init_workflow_check_provider();
26
26
  export {
27
27
  WorkflowCheckProvider
28
28
  };
29
- //# sourceMappingURL=workflow-check-provider-3M5LXLLX.mjs.map
29
+ //# sourceMappingURL=workflow-check-provider-N4ZTFOH6.mjs.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  WorkflowCheckProvider,
3
3
  init_workflow_check_provider
4
- } from "./chunk-WSYVK6ML.mjs";
4
+ } from "./chunk-3LXYZ2OQ.mjs";
5
5
  import "./chunk-KFKHU6CM.mjs";
6
6
  import "./chunk-AVMMKGLQ.mjs";
7
7
  import "./chunk-LG4AUKHB.mjs";
@@ -9,7 +9,7 @@ import "./chunk-B7BVQM5K.mjs";
9
9
  import "./chunk-XXAEN5KU.mjs";
10
10
  import "./chunk-GEW6LS32.mjs";
11
11
  import "./chunk-NZADFXHE.mjs";
12
- import "./chunk-DEAPFYNX.mjs";
12
+ import "./chunk-KYBKVKBS.mjs";
13
13
  import "./chunk-NCWIZVOT.mjs";
14
14
  import "./chunk-RV5SK4FZ.mjs";
15
15
  import "./chunk-E7NRUDWL.mjs";
@@ -26,4 +26,4 @@ init_workflow_check_provider();
26
26
  export {
27
27
  WorkflowCheckProvider
28
28
  };
29
- //# sourceMappingURL=workflow-check-provider-QKHL6AFT.mjs.map
29
+ //# sourceMappingURL=workflow-check-provider-PI7VJT25.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-engine-context.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/state-machine/context/build-engine-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,oBAAoB,CAAC;AAwCvE;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,OAAO,EACf,cAAc,CAAC,EAAE,MAAM,EACvB,QAAQ,CAAC,EAAE,OAAO,EAClB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,aAAa,CA2Ff;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAiExF"}
1
+ {"version":3,"file":"build-engine-context.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/state-machine/context/build-engine-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,oBAAoB,CAAC;AA2BvE;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,OAAO,EACf,cAAc,CAAC,EAAE,MAAM,EACvB,QAAQ,CAAC,EAAE,OAAO,EAClB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,aAAa,CAmHf;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAiExF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Fair round-robin concurrency limiter.
3
+ *
4
+ * Single global limiter for all AI/delegation calls in the process.
5
+ * Instead of FIFO (which lets one session hog all slots), this grants
6
+ * slots in round-robin order across sessions so every user gets fair access.
7
+ *
8
+ * Usage:
9
+ * const limiter = FairConcurrencyLimiter.getInstance(maxConcurrent);
10
+ * await limiter.acquire(sessionId); // blocks until slot available
11
+ * try { ... } finally { limiter.release(sessionId); }
12
+ */
13
+ export declare class FairConcurrencyLimiter {
14
+ private maxConcurrent;
15
+ private globalActive;
16
+ private sessionQueues;
17
+ private roundRobinSessions;
18
+ private roundRobinIndex;
19
+ private sessionActive;
20
+ constructor(maxConcurrent: number);
21
+ static getInstance(maxConcurrent: number): FairConcurrencyLimiter;
22
+ /**
23
+ * Try to acquire a slot immediately (non-blocking).
24
+ */
25
+ tryAcquire(sessionId?: string | null): boolean;
26
+ /**
27
+ * Acquire a slot, waiting in a fair queue if necessary.
28
+ * Sessions are served round-robin so no single session can starve others.
29
+ */
30
+ acquire(sessionId?: string | null, _debug?: boolean, queueTimeout?: number | null): Promise<boolean>;
31
+ /**
32
+ * Release a slot and grant the next one fairly (round-robin across sessions).
33
+ */
34
+ release(sessionId?: string | null, _debug?: boolean): void;
35
+ /**
36
+ * Round-robin queue processing: cycle through sessions and grant one slot per session per round.
37
+ */
38
+ private _processQueue;
39
+ getStats(): {
40
+ globalActive: number;
41
+ maxConcurrent: number;
42
+ queueSize: number;
43
+ waitingSessions: number;
44
+ perSession: Record<string, {
45
+ active: number;
46
+ queued: number;
47
+ }>;
48
+ };
49
+ cleanup(): void;
50
+ shutdown(): void;
51
+ private _totalQueued;
52
+ private _waitingSessions;
53
+ private _removeFromRoundRobin;
54
+ private _clearReminder;
55
+ }
56
+ //# sourceMappingURL=fair-concurrency-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fair-concurrency-limiter.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/utils/fair-concurrency-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAK;IAGzB,OAAO,CAAC,aAAa,CAAkC;IAEvD,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,eAAe,CAAK;IAG5B,OAAO,CAAC,aAAa,CAA6B;gBAEtC,aAAa,EAAE,MAAM;IAIjC,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,sBAAsB;IAkBjE;;OAEG;IACH,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAU9C;;;OAGG;IACG,OAAO,CACX,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,MAAM,CAAC,EAAE,OAAO,EAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAAC,OAAO,CAAC;IAuEnB;;OAEG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAgB1D;;OAEG;IACH,OAAO,CAAC,aAAa;IAiDrB,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChE;IAkBD,OAAO,IAAI,IAAI;IAef,QAAQ,IAAI,IAAI;IAMhB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,cAAc;CAMvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-prompt.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/utils/interactive-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2BH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AACD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAoO/E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlE"}
1
+ {"version":3,"file":"interactive-prompt.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/utils/interactive-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+CH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AACD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAoO/E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@probelabs/visor",
3
- "version": "0.1.166",
3
+ "version": "0.1.167-ee",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "visor": "./dist/index.js"
@@ -1,138 +0,0 @@
1
- {"name":"visor.run","attributes":{"started":true}}
2
- {"name":"visor.run","attributes":{"started":true}}
3
- {"name":"visor.run","attributes":{"started":true}}
4
- {"name":"visor.run","attributes":{"started":true}}
5
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"Init","state_to":"PlanReady","engine_mode":"state-machine","wave":0,"session_id":"keen-tiger-cebn"}}]}
6
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"PlanReady","state_to":"WavePlanning","engine_mode":"state-machine","wave":0,"session_id":"keen-tiger-cebn"}}]}
7
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
8
- {"name":"visor.provider","attributes":{"visor.check.id":"overview","visor.provider.type":"ai"}}
9
- {"name":"visor.check","attributes":{"visor.check.id":"overview","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{},\"args\":{}}"},"events":[]}
10
- {"name":"visor.check","attributes":{"visor.check.id":"overview","visor.check.output":"{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\"}"},"events":[]}
11
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
12
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
13
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
14
- {"name":"visor.provider","attributes":{"visor.check.id":"security","visor.provider.type":"ai"}}
15
- {"name":"visor.check","attributes":{"visor.check.id":"security","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802514883}},\"args\":{}}"},"events":[]}
16
- {"name":"visor.provider","attributes":{"visor.check.id":"architecture","visor.provider.type":"ai"}}
17
- {"name":"visor.check","attributes":{"visor.check.id":"architecture","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802514883}},\"args\":{}}"},"events":[]}
18
- {"name":"visor.provider","attributes":{"visor.check.id":"performance","visor.provider.type":"ai"}}
19
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802514883}},\"args\":{}}"},"events":[]}
20
- {"name":"visor.provider","attributes":{"visor.check.id":"quality","visor.provider.type":"ai"}}
21
- {"name":"visor.check","attributes":{"visor.check.id":"quality","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802514883}},\"args\":{}}"},"events":[]}
22
- {"name":"visor.check","attributes":{"visor.check.id":"security","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-34-886Z-security\"}"},"events":[]}
23
- {"name":"visor.check","attributes":{"visor.check.id":"architecture","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-34-886Z-architecture\"}"},"events":[]}
24
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-34-887Z-performance\"}"},"events":[]}
25
- {"name":"visor.check","attributes":{"visor.check.id":"quality","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-34-887Z-quality\"}"},"events":[]}
26
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
27
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
28
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
29
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
30
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
31
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"Completed","engine_mode":"state-machine","wave":1,"session_id":"keen-tiger-cebn"}}]}
32
- {"name":"visor.run","attributes":{"started":true}}
33
- {"name":"visor.run","attributes":{"started":true}}
34
- {"name":"visor.run","attributes":{"started":true}}
35
- {"name":"visor.run","attributes":{"started":true}}
36
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"Init","state_to":"PlanReady","engine_mode":"state-machine","wave":0,"session_id":"wise-newt-r2xy"}}]}
37
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"PlanReady","state_to":"WavePlanning","engine_mode":"state-machine","wave":0,"session_id":"wise-newt-r2xy"}}]}
38
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
39
- {"name":"visor.provider","attributes":{"visor.check.id":"overview","visor.provider.type":"ai"}}
40
- {"name":"visor.check","attributes":{"visor.check.id":"overview","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{},\"args\":{}}"},"events":[]}
41
- {"name":"visor.check","attributes":{"visor.check.id":"overview","visor.check.output":"{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\"}"},"events":[]}
42
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
43
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
44
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
45
- {"name":"visor.provider","attributes":{"visor.check.id":"security","visor.provider.type":"ai"}}
46
- {"name":"visor.check","attributes":{"visor.check.id":"security","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802515431}},\"args\":{}}"},"events":[]}
47
- {"name":"visor.provider","attributes":{"visor.check.id":"architecture","visor.provider.type":"ai"}}
48
- {"name":"visor.check","attributes":{"visor.check.id":"architecture","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802515431}},\"args\":{}}"},"events":[]}
49
- {"name":"visor.provider","attributes":{"visor.check.id":"performance","visor.provider.type":"ai"}}
50
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802515431}},\"args\":{}}"},"events":[]}
51
- {"name":"visor.provider","attributes":{"visor.check.id":"quality","visor.provider.type":"ai"}}
52
- {"name":"visor.check","attributes":{"visor.check.id":"quality","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802515431}},\"args\":{}}"},"events":[]}
53
- {"name":"visor.check","attributes":{"visor.check.id":"security","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-35-433Z-security\"}"},"events":[]}
54
- {"name":"visor.check","attributes":{"visor.check.id":"architecture","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-35-434Z-architecture\"}"},"events":[]}
55
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-35-434Z-performance\"}"},"events":[]}
56
- {"name":"visor.check","attributes":{"visor.check.id":"quality","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-35-434Z-quality\"}"},"events":[]}
57
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
58
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
59
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
60
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
61
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
62
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"Completed","engine_mode":"state-machine","wave":1,"session_id":"wise-newt-r2xy"}}]}
63
- {"name":"visor.run","attributes":{"started":true}}
64
- {"name":"visor.run","attributes":{"started":true}}
65
- {"name":"visor.run","attributes":{"started":true}}
66
- {"name":"visor.run","attributes":{"started":true}}
67
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"Init","state_to":"PlanReady","engine_mode":"state-machine","wave":0,"session_id":"sleek-snail-ynmm"}}]}
68
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"PlanReady","state_to":"WavePlanning","engine_mode":"state-machine","wave":0,"session_id":"sleek-snail-ynmm"}}]}
69
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
70
- {"name":"visor.provider","attributes":{"visor.check.id":"overview","visor.provider.type":"ai"}}
71
- {"name":"visor.check","attributes":{"visor.check.id":"overview","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{},\"args\":{}}"},"events":[]}
72
- {"name":"visor.check","attributes":{"visor.check.id":"overview","visor.check.output":"{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\"}"},"events":[]}
73
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
74
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
75
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
76
- {"name":"visor.provider","attributes":{"visor.check.id":"security","visor.provider.type":"ai"}}
77
- {"name":"visor.check","attributes":{"visor.check.id":"security","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802515962}},\"args\":{}}"},"events":[]}
78
- {"name":"visor.provider","attributes":{"visor.check.id":"architecture","visor.provider.type":"ai"}}
79
- {"name":"visor.check","attributes":{"visor.check.id":"architecture","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802515962}},\"args\":{}}"},"events":[]}
80
- {"name":"visor.provider","attributes":{"visor.check.id":"performance","visor.provider.type":"ai"}}
81
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802515962}},\"args\":{}}"},"events":[]}
82
- {"name":"visor.provider","attributes":{"visor.check.id":"quality","visor.provider.type":"ai"}}
83
- {"name":"visor.check","attributes":{"visor.check.id":"quality","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802515962}},\"args\":{}}"},"events":[]}
84
- {"name":"visor.check","attributes":{"visor.check.id":"security","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-35-965Z-security\"}"},"events":[]}
85
- {"name":"visor.check","attributes":{"visor.check.id":"architecture","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-35-965Z-architecture\"}"},"events":[]}
86
- {"name":"visor.check","attributes":{"visor.check.id":"quality","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-35-965Z-quality\"}"},"events":[]}
87
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-35-965Z-performance\"}"},"events":[]}
88
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
89
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
90
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
91
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
92
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
93
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"Completed","engine_mode":"state-machine","wave":1,"session_id":"sleek-snail-ynmm"}}]}
94
- {"name":"visor.run","attributes":{"started":true}}
95
- {"name":"visor.run","attributes":{"started":true}}
96
- {"name":"visor.run","attributes":{"started":true}}
97
- {"name":"visor.run","attributes":{"started":true}}
98
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"Init","state_to":"PlanReady","engine_mode":"state-machine","wave":0,"session_id":"tall-dog-gcyz"}}]}
99
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"PlanReady","state_to":"WavePlanning","engine_mode":"state-machine","wave":0,"session_id":"tall-dog-gcyz"}}]}
100
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"tall-dog-gcyz"}}]}
101
- {"name":"visor.provider","attributes":{"visor.check.id":"overview","visor.provider.type":"ai"}}
102
- {"name":"visor.check","attributes":{"visor.check.id":"overview","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{},\"args\":{}}"},"events":[]}
103
- {"name":"visor.check","attributes":{"visor.check.id":"overview","visor.check.output":"{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\"}"},"events":[]}
104
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"tall-dog-gcyz"}}]}
105
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"tall-dog-gcyz"}}]}
106
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"tall-dog-gcyz"}}]}
107
- {"name":"visor.provider","attributes":{"visor.check.id":"performance","visor.provider.type":"ai"}}
108
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{\"overview\":{\"issues\":[],\"text\":\"{\\\"issues\\\":[]}\",\"ts\":1772802516494}},\"args\":{}}"},"events":[]}
109
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-36-495Z-performance\"}"},"events":[]}
110
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"tall-dog-gcyz"}}]}
111
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"tall-dog-gcyz"}}]}
112
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"Completed","engine_mode":"state-machine","wave":1,"session_id":"tall-dog-gcyz"}}]}
113
- {"name":"visor.run","attributes":{"started":true}}
114
- {"name":"visor.run","attributes":{"started":true}}
115
- {"name":"visor.run","attributes":{"started":true}}
116
- {"name":"visor.run","attributes":{"started":true}}
117
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"Init","state_to":"PlanReady","engine_mode":"state-machine","wave":0,"session_id":"crisp-mouse-re8d"}}]}
118
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"PlanReady","state_to":"WavePlanning","engine_mode":"state-machine","wave":0,"session_id":"crisp-mouse-re8d"}}]}
119
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"crisp-mouse-re8d"}}]}
120
- {"name":"visor.provider","attributes":{"visor.check.id":"invalid-type","visor.provider.type":"ai"}}
121
- {"name":"visor.check","attributes":{"visor.check.id":"invalid-type","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{},\"args\":{}}"},"events":[]}
122
- {"name":"visor.check","attributes":{"visor.check.id":"invalid-type","visor.check.output":"{\"text\":\"{\\\"issues\\\":[]}\"}"},"events":[]}
123
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"crisp-mouse-re8d"}}]}
124
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"crisp-mouse-re8d"}}]}
125
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"Completed","engine_mode":"state-machine","wave":1,"session_id":"crisp-mouse-re8d"}}]}
126
- {"name":"visor.run","attributes":{"started":true}}
127
- {"name":"visor.run","attributes":{"started":true}}
128
- {"name":"visor.run","attributes":{"started":true}}
129
- {"name":"visor.run","attributes":{"started":true}}
130
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"Init","state_to":"PlanReady","engine_mode":"state-machine","wave":0,"session_id":"swift-panda-a72r"}}]}
131
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"PlanReady","state_to":"WavePlanning","engine_mode":"state-machine","wave":0,"session_id":"swift-panda-a72r"}}]}
132
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"LevelDispatch","engine_mode":"state-machine","wave":1,"session_id":"swift-panda-a72r"}}]}
133
- {"name":"visor.provider","attributes":{"visor.check.id":"performance","visor.provider.type":"ai"}}
134
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.input.context":"{\"pr\":{\"number\":0,\"title\":\"Local Analysis: unknown (No changes)\",\"author\":\"unknown\",\"branch\":\"unknown\",\"base\":\"main\"},\"files\":[],\"outputs\":{},\"args\":{}}"},"events":[]}
135
- {"name":"visor.check","attributes":{"visor.check.id":"performance","visor.check.output":"{\"issues\":[],\"sessionId\":\"visor-2026-03-06T13-08-37-315Z-performance\"}"},"events":[]}
136
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"LevelDispatch","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"swift-panda-a72r"}}]}
137
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"WavePlanning","engine_mode":"state-machine","wave":1,"session_id":"swift-panda-a72r"}}]}
138
- {"name":"visor.event","attributes":{},"events":[{"name":"engine.state_transition","attrs":{"state_from":"WavePlanning","state_to":"Completed","engine_mode":"state-machine","wave":1,"session_id":"swift-panda-a72r"}}]}