@kryptosai/mcp-observatory 1.28.1 → 1.28.3

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 (134) hide show
  1. package/CONTRIBUTORS.md +4 -1
  2. package/README.md +109 -14
  3. package/README.zh-CN.md +654 -0
  4. package/dist/src/adapters/http.js +13 -4
  5. package/dist/src/adapters/http.js.map +1 -1
  6. package/dist/src/checks/runtime-profile.d.ts +5 -0
  7. package/dist/src/checks/runtime-profile.js +214 -0
  8. package/dist/src/checks/runtime-profile.js.map +1 -0
  9. package/dist/src/checks/security-rules.js +18 -0
  10. package/dist/src/checks/security-rules.js.map +1 -1
  11. package/dist/src/checks/security.js +33 -65
  12. package/dist/src/checks/security.js.map +1 -1
  13. package/dist/src/checks/skill-scan.d.ts +46 -0
  14. package/dist/src/checks/skill-scan.js +665 -0
  15. package/dist/src/checks/skill-scan.js.map +1 -0
  16. package/dist/src/cli.js +15 -2
  17. package/dist/src/cli.js.map +1 -1
  18. package/dist/src/commands/enforce.d.ts +12 -0
  19. package/dist/src/commands/enforce.js +187 -0
  20. package/dist/src/commands/enforce.js.map +1 -0
  21. package/dist/src/commands/helpers.d.ts +2 -1
  22. package/dist/src/commands/helpers.js +9 -1
  23. package/dist/src/commands/helpers.js.map +1 -1
  24. package/dist/src/commands/legacy.js +3 -0
  25. package/dist/src/commands/legacy.js.map +1 -1
  26. package/dist/src/commands/risk-graph.d.ts +2 -0
  27. package/dist/src/commands/risk-graph.js +64 -0
  28. package/dist/src/commands/risk-graph.js.map +1 -0
  29. package/dist/src/commands/scan.js +36 -9
  30. package/dist/src/commands/scan.js.map +1 -1
  31. package/dist/src/commands/score.js.map +1 -1
  32. package/dist/src/commands/skill-scan.d.ts +6 -0
  33. package/dist/src/commands/skill-scan.js +62 -0
  34. package/dist/src/commands/skill-scan.js.map +1 -0
  35. package/dist/src/commands/test.js +13 -0
  36. package/dist/src/commands/test.js.map +1 -1
  37. package/dist/src/commands/watch.js +13 -8
  38. package/dist/src/commands/watch.js.map +1 -1
  39. package/dist/src/discovery.d.ts +15 -1
  40. package/dist/src/discovery.js +251 -35
  41. package/dist/src/discovery.js.map +1 -1
  42. package/dist/src/index.d.ts +3 -1
  43. package/dist/src/index.js +3 -1
  44. package/dist/src/index.js.map +1 -1
  45. package/dist/src/receipt.d.ts +4 -1
  46. package/dist/src/receipt.js +85 -0
  47. package/dist/src/receipt.js.map +1 -1
  48. package/dist/src/reporters/markdown.js +39 -0
  49. package/dist/src/reporters/markdown.js.map +1 -1
  50. package/dist/src/reporters/terminal.d.ts +2 -0
  51. package/dist/src/reporters/terminal.js +55 -2
  52. package/dist/src/reporters/terminal.js.map +1 -1
  53. package/dist/src/risk-graph.d.ts +64 -0
  54. package/dist/src/risk-graph.js +452 -0
  55. package/dist/src/risk-graph.js.map +1 -0
  56. package/dist/src/runner.js +6 -0
  57. package/dist/src/runner.js.map +1 -1
  58. package/dist/src/server.d.ts +1 -3
  59. package/dist/src/server.js +29 -645
  60. package/dist/src/server.js.map +1 -1
  61. package/dist/src/storage.js +13 -9
  62. package/dist/src/storage.js.map +1 -1
  63. package/dist/src/telemetry.d.ts +7 -0
  64. package/dist/src/telemetry.js.map +1 -1
  65. package/dist/src/tools/check-server.d.ts +27 -0
  66. package/dist/src/tools/check-server.js +46 -0
  67. package/dist/src/tools/check-server.js.map +1 -0
  68. package/dist/src/tools/ci-report.d.ts +21 -0
  69. package/dist/src/tools/ci-report.js +38 -0
  70. package/dist/src/tools/ci-report.js.map +1 -0
  71. package/dist/src/tools/diff-runs.d.ts +28 -0
  72. package/dist/src/tools/diff-runs.js +39 -0
  73. package/dist/src/tools/diff-runs.js.map +1 -0
  74. package/dist/src/tools/get-history.d.ts +21 -0
  75. package/dist/src/tools/get-history.js +37 -0
  76. package/dist/src/tools/get-history.js.map +1 -0
  77. package/dist/src/tools/get-last-run.d.ts +21 -0
  78. package/dist/src/tools/get-last-run.js +47 -0
  79. package/dist/src/tools/get-last-run.js.map +1 -0
  80. package/dist/src/tools/helpers.d.ts +8 -0
  81. package/dist/src/tools/helpers.js +32 -0
  82. package/dist/src/tools/helpers.js.map +1 -0
  83. package/dist/src/tools/lock-verify.d.ts +21 -0
  84. package/dist/src/tools/lock-verify.js +47 -0
  85. package/dist/src/tools/lock-verify.js.map +1 -0
  86. package/dist/src/tools/record.d.ts +23 -0
  87. package/dist/src/tools/record.js +48 -0
  88. package/dist/src/tools/record.js.map +1 -0
  89. package/dist/src/tools/replay.d.ts +21 -0
  90. package/dist/src/tools/replay.js +54 -0
  91. package/dist/src/tools/replay.js.map +1 -0
  92. package/dist/src/tools/scan.d.ts +18 -0
  93. package/dist/src/tools/scan.js +43 -0
  94. package/dist/src/tools/scan.js.map +1 -0
  95. package/dist/src/tools/score-server.d.ts +23 -0
  96. package/dist/src/tools/score-server.js +53 -0
  97. package/dist/src/tools/score-server.js.map +1 -0
  98. package/dist/src/tools/suggest-servers.d.ts +21 -0
  99. package/dist/src/tools/suggest-servers.js +114 -0
  100. package/dist/src/tools/suggest-servers.js.map +1 -0
  101. package/dist/src/tools/verify-tool.d.ts +25 -0
  102. package/dist/src/tools/verify-tool.js +48 -0
  103. package/dist/src/tools/verify-tool.js.map +1 -0
  104. package/dist/src/tools/watch.d.ts +23 -0
  105. package/dist/src/tools/watch.js +67 -0
  106. package/dist/src/tools/watch.js.map +1 -0
  107. package/dist/src/types.d.ts +26 -1
  108. package/dist/src/utils/security.d.ts +3 -0
  109. package/dist/src/utils/security.js +37 -0
  110. package/dist/src/utils/security.js.map +1 -0
  111. package/dist/src/validate.d.ts +1 -0
  112. package/dist/src/validate.js +119 -35
  113. package/dist/src/validate.js.map +1 -1
  114. package/docs/agent-tasks.md +1 -1
  115. package/docs/commercial-boundary.md +9 -1
  116. package/docs/contributor-recognition.md +2 -0
  117. package/docs/demo.svg +1 -59
  118. package/docs/mcp-receipts.md +9 -0
  119. package/docs/mcp-server-safety-index.md +21 -16
  120. package/docs/metrics-dashboard.md +17 -1
  121. package/docs/private-mcp-fleet-risk-graph.md +69 -0
  122. package/docs/receipt-graph.md +118 -31
  123. package/docs/safety-index/artifacts/chrome-devtools-mcp-server.json +1745 -0
  124. package/docs/safety-index/artifacts/chrome-devtools-mcp-server.md +169 -0
  125. package/docs/safety-index/artifacts/filesystem-mcp-server.json +786 -0
  126. package/docs/safety-index/artifacts/filesystem-mcp-server.md +169 -0
  127. package/docs/safety-index/artifacts/github-mcp-server.json +1707 -0
  128. package/docs/safety-index/artifacts/github-mcp-server.md +169 -0
  129. package/docs/safety-index/mcp-risk-graph.html +167 -0
  130. package/docs/safety-index/mcp-risk-graph.json +669 -0
  131. package/docs/safety-index/mcp-risk-graph.md +47 -0
  132. package/docs/safety-index/targets.json +57 -0
  133. package/docs/sample-private-fleet-risk-graph.md +90 -0
  134. package/package.json +21 -11
@@ -1,99 +1,232 @@
1
- import { readFile } from "node:fs/promises";
1
+ import { access, readFile } from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- function defaultConfigPaths() {
4
+ import { z } from "zod";
5
+ const mcpServerEntrySchema = z.object({
6
+ url: z.string().optional(),
7
+ command: z.string().optional(),
8
+ args: z.array(z.unknown()).optional(),
9
+ env: z.record(z.string(), z.unknown()).optional(),
10
+ authToken: z.string().optional(),
11
+ }).passthrough();
12
+ const mcpConfigSchema = z.object({
13
+ mcpServers: z.record(z.string(), z.unknown()),
14
+ }).passthrough();
15
+ // ── Per-agent config path functions ─────────────────────────────────────────
16
+ function claudeCodeConfigPaths() {
17
+ const home = os.homedir();
18
+ return [path.join(home, ".claude.json")];
19
+ }
20
+ function claudeDesktopConfigPaths() {
5
21
  const home = os.homedir();
6
22
  const paths = [];
7
- // Claude Code user config
8
- paths.push(path.join(home, ".claude.json"));
9
- // Claude Desktop (macOS)
10
23
  if (process.platform === "darwin") {
11
24
  paths.push(path.join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json"));
12
25
  }
13
- // Claude Desktop (Windows)
14
26
  if (process.platform === "win32") {
15
27
  const appData = process.env["APPDATA"];
16
28
  if (appData) {
17
29
  paths.push(path.join(appData, "Claude", "claude_desktop_config.json"));
18
30
  }
19
31
  }
20
- // Walk up from cwd to find .mcp.json and .claude.json in parent directories
21
- // (capped at 10 levels to avoid scanning the entire filesystem)
32
+ return paths;
33
+ }
34
+ function cursorConfigPaths() {
35
+ const home = os.homedir();
36
+ return [path.join(home, ".cursor", "mcp.json")];
37
+ }
38
+ function windsurfConfigPaths() {
39
+ const home = os.homedir();
40
+ return [path.join(home, ".windsurf", "mcp.json")];
41
+ }
42
+ function vscodeConfigPaths() {
43
+ const home = os.homedir();
44
+ return [path.join(home, ".vscode", "mcp.json")];
45
+ }
46
+ function opencodeConfigPaths() {
47
+ const home = os.homedir();
48
+ return [
49
+ path.join(home, ".config", "opencode", "opencode.json"),
50
+ path.join(home, ".opencode", "opencode.json"),
51
+ ];
52
+ }
53
+ function codexConfigPaths() {
54
+ const home = os.homedir();
55
+ return [path.join(home, ".codex", "config.json")];
56
+ }
57
+ function geminiCliConfigPaths() {
58
+ const home = os.homedir();
59
+ return [path.join(home, ".gemini", "mcp.json")];
60
+ }
61
+ function kiroConfigPaths() {
62
+ const home = os.homedir();
63
+ return [path.join(home, ".kiro", "mcp.json")];
64
+ }
65
+ function antigravityConfigPaths() {
66
+ const home = os.homedir();
67
+ return [path.join(home, ".antigravity", "mcp.json")];
68
+ }
69
+ function amazonQConfigPaths() {
70
+ const home = os.homedir();
71
+ return [path.join(home, ".amazonq", "mcp.json")];
72
+ }
73
+ // ── Per-agent skill path functions ──────────────────────────────────────────
74
+ function cursorSkillPaths() {
75
+ const home = os.homedir();
76
+ return [path.join(home, ".cursor", "skills")];
77
+ }
78
+ function opencodeSkillPaths() {
79
+ const home = os.homedir();
80
+ return [
81
+ path.join(home, ".config", "opencode", "skills"),
82
+ path.join(home, ".opencode", "skills"),
83
+ ];
84
+ }
85
+ function codexSkillPaths() {
86
+ const home = os.homedir();
87
+ return [
88
+ path.join(home, ".agents", "skills"),
89
+ path.join(home, ".codex", "skills"),
90
+ ];
91
+ }
92
+ function ampSkillPaths() {
93
+ const home = os.homedir();
94
+ return [
95
+ path.join(home, ".config", "agents", "skills"),
96
+ path.join(home, ".amp", "skills"),
97
+ ];
98
+ }
99
+ function openclawSkillPaths() {
100
+ const home = os.homedir();
101
+ return [
102
+ path.join(home, ".openclaw", "skills"),
103
+ path.join(home, ".openclaw", "workspace", "skills"),
104
+ path.join(home, ".clawdbot", "skills"),
105
+ ];
106
+ }
107
+ // ── Project-level config paths ──────────────────────────────────────────────
108
+ function projectConfigPaths() {
109
+ const paths = [];
22
110
  let dir = process.cwd();
23
111
  const root = path.parse(dir).root;
24
112
  let depth = 0;
25
113
  while (dir !== root && depth < 10) {
26
114
  paths.push(path.join(dir, ".claude.json"));
27
115
  paths.push(path.join(dir, ".mcp.json"));
28
- // Also check for Claude Code project-level config
29
116
  paths.push(path.join(dir, ".claude", "settings.local.json"));
117
+ paths.push(path.join(dir, ".cursor", "mcp.json"));
118
+ paths.push(path.join(dir, ".windsurf", "mcp.json"));
119
+ paths.push(path.join(dir, ".vscode", "mcp.json"));
120
+ paths.push(path.join(dir, ".opencode", "opencode.json"));
121
+ paths.push(path.join(dir, ".gemini", "mcp.json"));
122
+ paths.push(path.join(dir, ".kiro", "mcp.json"));
123
+ paths.push(path.join(dir, ".antigravity", "mcp.json"));
124
+ paths.push(path.join(dir, ".amazonq", "mcp.json"));
30
125
  dir = path.dirname(dir);
31
126
  depth++;
32
127
  }
33
128
  return paths;
34
129
  }
130
+ function projectSkillPaths() {
131
+ const paths = [];
132
+ let dir = process.cwd();
133
+ const root = path.parse(dir).root;
134
+ let depth = 0;
135
+ while (dir !== root && depth < 10) {
136
+ paths.push(path.join(dir, ".cursor", "skills"));
137
+ paths.push(path.join(dir, ".opencode", "skills"));
138
+ paths.push(path.join(dir, ".agents", "skills"));
139
+ paths.push(path.join(dir, ".codex", "skills"));
140
+ dir = path.dirname(dir);
141
+ depth++;
142
+ }
143
+ return paths;
144
+ }
145
+ // ── Aggregate path functions ────────────────────────────────────────────────
146
+ function defaultConfigPaths() {
147
+ return [
148
+ ...claudeCodeConfigPaths(),
149
+ ...claudeDesktopConfigPaths(),
150
+ ...cursorConfigPaths(),
151
+ ...windsurfConfigPaths(),
152
+ ...vscodeConfigPaths(),
153
+ ...opencodeConfigPaths(),
154
+ ...codexConfigPaths(),
155
+ ...geminiCliConfigPaths(),
156
+ ...kiroConfigPaths(),
157
+ ...antigravityConfigPaths(),
158
+ ...amazonQConfigPaths(),
159
+ ...projectConfigPaths(),
160
+ ];
161
+ }
162
+ function defaultSkillPaths() {
163
+ return [
164
+ ...cursorSkillPaths(),
165
+ ...opencodeSkillPaths(),
166
+ ...codexSkillPaths(),
167
+ ...ampSkillPaths(),
168
+ ...openclawSkillPaths(),
169
+ ...projectSkillPaths(),
170
+ ];
171
+ }
172
+ // ── Core scanning logic ─────────────────────────────────────────────────────
35
173
  async function tryReadJson(filePath) {
36
174
  try {
37
175
  const content = await readFile(filePath, "utf8");
38
- return JSON.parse(content);
176
+ return mcpConfigSchema.parse(JSON.parse(content));
39
177
  }
40
178
  catch {
41
179
  return undefined;
42
180
  }
43
181
  }
44
182
  function extractTargets(data, source) {
45
- if (typeof data !== "object" || data === null || Array.isArray(data)) {
46
- return [];
47
- }
48
- const obj = data;
49
- const servers = obj["mcpServers"];
50
- if (typeof servers !== "object" || servers === null || Array.isArray(servers)) {
51
- return [];
52
- }
53
183
  const results = [];
54
- for (const [name, entry] of Object.entries(servers)) {
55
- if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
184
+ for (const [name, entry] of Object.entries(data.mcpServers)) {
185
+ const parsed = mcpServerEntrySchema.safeParse(entry);
186
+ if (!parsed.success)
56
187
  continue;
57
- }
58
- const serverEntry = entry;
59
- const command = serverEntry["command"];
60
- const args = serverEntry["args"];
188
+ const serverEntry = parsed.data;
61
189
  // HTTP/SSE server (has url field)
62
- const url = serverEntry["url"];
63
- if (typeof url === "string" && url.length > 0) {
190
+ if (serverEntry.url) {
64
191
  results.push({
65
192
  source,
66
193
  config: {
67
194
  targetId: name,
68
195
  adapter: "http",
69
- url,
70
- authToken: typeof serverEntry["authToken"] === "string" ? serverEntry["authToken"] : undefined,
196
+ url: serverEntry.url,
197
+ authToken: serverEntry.authToken,
71
198
  timeoutMs: 15_000,
72
199
  }
73
200
  });
74
201
  continue;
75
202
  }
76
203
  // Local process server (has command field)
77
- if (typeof command !== "string" || command.length === 0) {
204
+ if (!serverEntry.command) {
78
205
  continue;
79
206
  }
80
207
  const parsedArgs = [];
81
- if (Array.isArray(args)) {
82
- for (const arg of args) {
208
+ if (serverEntry.args) {
209
+ for (const arg of serverEntry.args) {
83
210
  if (typeof arg === "string") {
84
211
  parsedArgs.push(arg);
85
212
  }
86
213
  }
87
214
  }
88
- const env = typeof serverEntry["env"] === "object" && serverEntry["env"] !== null && !Array.isArray(serverEntry["env"])
89
- ? serverEntry["env"]
90
- : undefined;
215
+ const envPairs = [];
216
+ if (serverEntry.env) {
217
+ for (const [key, value] of Object.entries(serverEntry.env)) {
218
+ if (typeof value === "string") {
219
+ envPairs.push([key, value]);
220
+ }
221
+ }
222
+ }
223
+ const env = envPairs.length > 0 ? Object.fromEntries(envPairs) : undefined;
91
224
  results.push({
92
225
  source,
93
226
  config: {
94
227
  targetId: name,
95
228
  adapter: "local-process",
96
- command,
229
+ command: serverEntry.command,
97
230
  args: parsedArgs,
98
231
  env,
99
232
  timeoutMs: 15_000,
@@ -102,6 +235,7 @@ function extractTargets(data, source) {
102
235
  }
103
236
  return results;
104
237
  }
238
+ // ── Public API ──────────────────────────────────────────────────────────────
105
239
  export async function scanForTargets(configPath) {
106
240
  const paths = configPath ? [configPath] : defaultConfigPaths();
107
241
  const allTargets = [];
@@ -123,4 +257,86 @@ export async function scanForTargets(configPath) {
123
257
  }
124
258
  return allTargets;
125
259
  }
260
+ export async function discoverSkillPaths(explicitPath) {
261
+ if (explicitPath) {
262
+ try {
263
+ await access(explicitPath);
264
+ return [explicitPath];
265
+ }
266
+ catch {
267
+ return [];
268
+ }
269
+ }
270
+ const paths = defaultSkillPaths();
271
+ const results = [];
272
+ const seen = new Set();
273
+ for (const p of paths) {
274
+ if (seen.has(p))
275
+ continue;
276
+ seen.add(p);
277
+ try {
278
+ await access(p);
279
+ results.push(p);
280
+ }
281
+ catch {
282
+ // Path doesn't exist, skip
283
+ }
284
+ }
285
+ return results;
286
+ }
287
+ // ── Per-agent discovery exports ─────────────────────────────────────────────
288
+ export async function discoverFromCursor() {
289
+ return scanForTargetsFromPaths(cursorConfigPaths());
290
+ }
291
+ export async function discoverFromWindsurf() {
292
+ return scanForTargetsFromPaths(windsurfConfigPaths());
293
+ }
294
+ export async function discoverFromVSCode() {
295
+ return scanForTargetsFromPaths(vscodeConfigPaths());
296
+ }
297
+ export async function discoverFromOpenCode() {
298
+ return scanForTargetsFromPaths(opencodeConfigPaths());
299
+ }
300
+ export async function discoverFromCodex() {
301
+ return scanForTargetsFromPaths(codexConfigPaths());
302
+ }
303
+ export async function discoverFromGeminiCli() {
304
+ return scanForTargetsFromPaths(geminiCliConfigPaths());
305
+ }
306
+ export async function discoverFromKiro() {
307
+ return scanForTargetsFromPaths(kiroConfigPaths());
308
+ }
309
+ export async function discoverFromAntigravity() {
310
+ return scanForTargetsFromPaths(antigravityConfigPaths());
311
+ }
312
+ export async function discoverFromAmazonQ() {
313
+ return scanForTargetsFromPaths(amazonQConfigPaths());
314
+ }
315
+ export async function discoverFromClaudeDesktop() {
316
+ return scanForTargetsFromPaths(claudeDesktopConfigPaths());
317
+ }
318
+ export async function discoverFromClaudeCode() {
319
+ return scanForTargetsFromPaths(claudeCodeConfigPaths());
320
+ }
321
+ async function scanForTargetsFromPaths(configPaths) {
322
+ const allTargets = [];
323
+ const seen = new Set();
324
+ for (const p of configPaths) {
325
+ const data = await tryReadJson(p);
326
+ if (data === undefined)
327
+ continue;
328
+ const targets = extractTargets(data, p);
329
+ for (const target of targets) {
330
+ const key = target.config.adapter === "http"
331
+ ? target.config.url
332
+ : `${target.config.command} ${target.config.args.join(" ")}`;
333
+ if (!seen.has(key)) {
334
+ seen.add(key);
335
+ allTargets.push(target);
336
+ }
337
+ }
338
+ }
339
+ return allTargets;
340
+ }
341
+ export { defaultConfigPaths, defaultSkillPaths };
126
342
  //# sourceMappingURL=discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,0BAA0B;IAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAE5C,yBAAyB;IACzB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,gEAAgE;IAChE,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QACxC,kDAAkD;QAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC7D,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,KAAK,EAAE,CAAC;IACV,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAa,EAAE,MAAc;IACnD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,EAAE,CAAC;QAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,KAAgC,CAAC;QACrD,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAEjC,kCAAkC;QAClC,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM;gBACN,MAAM,EAAE;oBACN,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,MAAM;oBACf,GAAG;oBACH,SAAS,EAAE,OAAO,WAAW,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC9F,SAAS,EAAE,MAAM;iBAClB;aACF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,2CAA2C;QAC3C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GACP,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzG,CAAC,CAAC,WAAW,CAAC,KAAK,CAA2B;YAC9C,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO,CAAC,IAAI,CAAC;YACX,MAAM;YACN,MAAM,EAAE;gBACN,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,eAAe;gBACxB,OAAO;gBACP,IAAI,EAAE,UAAU;gBAChB,GAAG;gBACH,SAAS,EAAE,MAAM;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAmB;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC/D,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAEjC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM;gBAC1C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;gBACnB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;CAC9C,CAAC,CAAC,WAAW,EAAE,CAAC;AAIjB,+EAA+E;AAE/E,SAAS,qBAAqB;IAC5B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,sBAAsB;IAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,+EAA+E;AAE/E,SAAS,gBAAgB;IACvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,SAAS,kBAAkB;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QACnD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/C,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAE/E,SAAS,kBAAkB;IACzB,OAAO;QACL,GAAG,qBAAqB,EAAE;QAC1B,GAAG,wBAAwB,EAAE;QAC7B,GAAG,iBAAiB,EAAE;QACtB,GAAG,mBAAmB,EAAE;QACxB,GAAG,iBAAiB,EAAE;QACtB,GAAG,mBAAmB,EAAE;QACxB,GAAG,gBAAgB,EAAE;QACrB,GAAG,oBAAoB,EAAE;QACzB,GAAG,eAAe,EAAE;QACpB,GAAG,sBAAsB,EAAE;QAC3B,GAAG,kBAAkB,EAAE;QACvB,GAAG,kBAAkB,EAAE;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;QACL,GAAG,gBAAgB,EAAE;QACrB,GAAG,kBAAkB,EAAE;QACvB,GAAG,eAAe,EAAE;QACpB,GAAG,aAAa,EAAE;QAClB,GAAG,kBAAkB,EAAE;QACvB,GAAG,iBAAiB,EAAE;KACvB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAe,EAAE,MAAc;IACrD,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,SAAS;QAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;QAEhC,kCAAkC;QAClC,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM;gBACN,MAAM,EAAE;oBACN,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,MAAM;oBACf,GAAG,EAAE,WAAW,CAAC,GAAG;oBACpB,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,SAAS,EAAE,MAAM;iBAClB;aACF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GACP,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjE,OAAO,CAAC,IAAI,CAAC;YACX,MAAM;YACN,MAAM,EAAE;gBACN,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,IAAI,EAAE,UAAU;gBAChB,GAAG;gBACH,SAAS,EAAE,MAAM;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAmB;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC/D,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAEjC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM;gBAC1C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;gBACnB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,YAAqB;IAC5D,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3B,OAAO,CAAC,YAAY,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,OAAO,uBAAuB,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,uBAAuB,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,OAAO,uBAAuB,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,OAAO,uBAAuB,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,uBAAuB,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,OAAO,uBAAuB,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,uBAAuB,CAAC,eAAe,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,OAAO,uBAAuB,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,OAAO,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,OAAO,uBAAuB,CAAC,wBAAwB,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,OAAO,uBAAuB,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,WAAqB;IAC1D,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAEjC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM;gBAC1C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;gBACnB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,CAAC"}
@@ -6,9 +6,11 @@ export { runConformanceCheck } from "./checks/conformance.js";
6
6
  export { runSchemaQualityCheck } from "./checks/schema-quality.js";
7
7
  export { runAttackSimulationCheck, type AttackSimulationFinding, type AttackSimulationOptions } from "./checks/attack-sim.js";
8
8
  export { runLightweightSecurityCheck, runSecurityCheck } from "./checks/security.js";
9
+ export { analyzeRuntimeProfile, runRuntimeProfileCheck } from "./checks/runtime-profile.js";
9
10
  export { SECURITY_RULES, type SecurityFinding, type SecurityRule, type ToolInfo } from "./checks/security-rules.js";
11
+ export { scanContent, scanFile, scanDirectory, scanPath, computeSkillHealthScore, summarizeScan, renderSkillScanTerminal, renderSkillScanMarkdown, renderSkillScanJson, renderSkillScanSarif, SKILL_SCAN_RULES, type SkillScanRule, type SkillScanFinding, type SkillScanResult, type SkillScanSummary, type SkillScanSeverity, } from "./checks/skill-scan.js";
10
12
  export { diffArtifacts } from "./diff.js";
11
- export { scanForTargets } from "./discovery.js";
13
+ export { scanForTargets, discoverSkillPaths, discoverFromCursor, discoverFromWindsurf, discoverFromVSCode, discoverFromOpenCode, discoverFromCodex, discoverFromGeminiCli, discoverFromKiro, discoverFromAntigravity, discoverFromAmazonQ, discoverFromClaudeDesktop, discoverFromClaudeCode, } from "./discovery.js";
12
14
  export { renderHtml } from "./reporters/html.js";
13
15
  export { renderJUnit } from "./reporters/junit.js";
14
16
  export { renderMarkdown } from "./reporters/markdown.js";
package/dist/src/index.js CHANGED
@@ -6,9 +6,11 @@ export { runConformanceCheck } from "./checks/conformance.js";
6
6
  export { runSchemaQualityCheck } from "./checks/schema-quality.js";
7
7
  export { runAttackSimulationCheck } from "./checks/attack-sim.js";
8
8
  export { runLightweightSecurityCheck, runSecurityCheck } from "./checks/security.js";
9
+ export { analyzeRuntimeProfile, runRuntimeProfileCheck } from "./checks/runtime-profile.js";
9
10
  export { SECURITY_RULES } from "./checks/security-rules.js";
11
+ export { scanContent, scanFile, scanDirectory, scanPath, computeSkillHealthScore, summarizeScan, renderSkillScanTerminal, renderSkillScanMarkdown, renderSkillScanJson, renderSkillScanSarif, SKILL_SCAN_RULES, } from "./checks/skill-scan.js";
10
12
  export { diffArtifacts } from "./diff.js";
11
- export { scanForTargets } from "./discovery.js";
13
+ export { scanForTargets, discoverSkillPaths, discoverFromCursor, discoverFromWindsurf, discoverFromVSCode, discoverFromOpenCode, discoverFromCodex, discoverFromGeminiCli, discoverFromKiro, discoverFromAntigravity, discoverFromAmazonQ, discoverFromClaudeDesktop, discoverFromClaudeCode, } from "./discovery.js";
12
14
  export { renderHtml } from "./reporters/html.js";
13
15
  export { renderJUnit } from "./reporters/junit.js";
14
16
  export { renderMarkdown } from "./reporters/markdown.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type AuditReport, type AuditSeverity, type TrustStatus } from "./audit.js";
2
- import type { TargetConfig } from "./types.js";
2
+ import type { NotObserved, RunArtifact, TargetConfig } from "./types.js";
3
3
  export type ReceiptEnvironmentClass = "local" | "ci" | "public_safety_index" | "private_fleet";
4
4
  export type ReceiptState = "ready_for_ci" | "needs_review" | "blocked" | "could_not_evaluate";
5
5
  export type ReceiptAction = "allow" | "gate" | "rerun" | "quarantine" | "escalate";
@@ -39,6 +39,7 @@ export interface ReceiptEvidence {
39
39
  tool_surface_summary: string;
40
40
  attack_simulation_summary: string;
41
41
  baseline_or_drift_summary: string;
42
+ runtime_profile_summary: string;
42
43
  }
43
44
  export interface ReceiptVerdict {
44
45
  score: number;
@@ -76,6 +77,7 @@ export interface McpReceipt {
76
77
  evidence: ReceiptEvidence;
77
78
  verdict: ReceiptVerdict;
78
79
  findings: ReceiptFinding[];
80
+ notObserved: NotObserved[];
79
81
  reproduction: ReceiptReproduction;
80
82
  maintainer_cta: ReceiptCta[];
81
83
  buyer_cta: ReceiptCta[];
@@ -93,6 +95,7 @@ export interface BuildReceiptOptions extends ReceiptEvidenceOptions {
93
95
  outputPath?: string;
94
96
  topFindingsLimit?: number;
95
97
  }
98
+ export declare function detectNotObserved(artifact: RunArtifact): NotObserved[];
96
99
  export declare function mapStatusToReceiptVerdict(report: AuditReport): ReceiptVerdict;
97
100
  export declare function buildMcpReceipt(report: AuditReport, target: TargetConfig, options?: BuildReceiptOptions): Promise<McpReceipt>;
98
101
  export declare function renderReceiptMarkdown(receipt: McpReceipt): string;
@@ -111,6 +111,81 @@ function driftSummary(report) {
111
111
  return "No baseline or drift finding was included in this receipt.";
112
112
  return `${driftFindings.length} baseline/drift finding(s) summarized.`;
113
113
  }
114
+ function runtimeProfileSummary(report) {
115
+ const profile = report.artifact.runtimeProfile;
116
+ if (!profile)
117
+ return "Runtime profile was not generated for this run.";
118
+ const egressCount = profile.egress?.length ?? 0;
119
+ const mutationCount = profile.stateMutations?.length ?? 0;
120
+ if (egressCount === 0 && mutationCount === 0) {
121
+ return `No egress or state mutation indicators detected (confidence: ${profile.confidence}).`;
122
+ }
123
+ const parts = [];
124
+ if (egressCount > 0)
125
+ parts.push(`${egressCount} egress target(s) detected`);
126
+ if (mutationCount > 0)
127
+ parts.push(`${mutationCount} state mutation(s) detected`);
128
+ return `${parts.join(", ")} (confidence: ${profile.confidence}).`;
129
+ }
130
+ export function detectNotObserved(artifact) {
131
+ const notObserved = [];
132
+ const allToolIds = new Set();
133
+ const networkPattern = /url|http|https|fetch|request|api|web|curl|wget|net|socket|connect|download|upload/i;
134
+ const fsPattern = /read|write|delete|remove|create|mkdir|rmdir|file[_-]|fs[_-]|^cp$|^mv$|^ln$|touch|chmod|chown|move|copy|rename|dir/i;
135
+ for (const check of artifact.checks) {
136
+ for (const ev of check.evidence) {
137
+ for (const id of ev.identifiers ?? []) {
138
+ allToolIds.add(id);
139
+ }
140
+ if (ev.endpoint === "tools/list" && typeof ev.responseSnapshots?.tools === "object") {
141
+ const tools = (ev.responseSnapshots).tools;
142
+ if (tools) {
143
+ for (const tool of tools) {
144
+ if (typeof tool.name === "string")
145
+ allToolIds.add(tool.name);
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ const hasNetworkTool = [...allToolIds].some((t) => networkPattern.test(t));
152
+ if (!hasNetworkTool) {
153
+ notObserved.push({
154
+ category: "network_egress",
155
+ detail: "No outbound network calls were attempted during scan",
156
+ severity: "warning",
157
+ });
158
+ }
159
+ const hasFsTool = [...allToolIds].some((t) => fsPattern.test(t));
160
+ if (!hasFsTool) {
161
+ notObserved.push({
162
+ category: "filesystem_mutation",
163
+ detail: "Filesystem write operations were not exercised",
164
+ severity: "warning",
165
+ });
166
+ }
167
+ const securityCheck = artifact.checks.find((c) => c.id === "security" || c.id === "security-lite");
168
+ if (!securityCheck) {
169
+ notObserved.push({
170
+ category: "credential_access",
171
+ detail: "Credential scanning was not performed",
172
+ severity: "warning",
173
+ });
174
+ }
175
+ else {
176
+ notObserved.push({
177
+ category: "credential_access",
178
+ detail: "Credential scanning was performed (see security findings)",
179
+ severity: "info",
180
+ });
181
+ }
182
+ notObserved.push({
183
+ category: "destructive_payloads",
184
+ detail: "Destructive payloads were not attempted (safe-mode only)",
185
+ severity: "info",
186
+ });
187
+ return notObserved;
188
+ }
114
189
  export function mapStatusToReceiptVerdict(report) {
115
190
  if (report.artifact.fatalError) {
116
191
  return {
@@ -219,9 +294,11 @@ export async function buildMcpReceipt(report, target, options = {}) {
219
294
  tool_surface_summary: toolSurfaceSummary(report),
220
295
  attack_simulation_summary: attackSimulationSummary(report),
221
296
  baseline_or_drift_summary: driftSummary(report),
297
+ runtime_profile_summary: runtimeProfileSummary(report),
222
298
  },
223
299
  verdict: mapStatusToReceiptVerdict(report),
224
300
  findings: receiptFindings(report, options.topFindingsLimit ?? 5),
301
+ notObserved: detectNotObserved(report.artifact),
225
302
  reproduction: {
226
303
  rerun_command: rerunCommand(target, report.summary.profile),
227
304
  ci_command: ciCommand(target),
@@ -315,6 +392,14 @@ export function renderReceiptMarkdown(receipt) {
315
392
  `- Tool surface summary: ${receipt.evidence.tool_surface_summary}`,
316
393
  `- Attack simulation summary: ${receipt.evidence.attack_simulation_summary}`,
317
394
  `- Baseline/drift summary: ${receipt.evidence.baseline_or_drift_summary}`,
395
+ `- Runtime profile summary: ${receipt.evidence.runtime_profile_summary}`,
396
+ "",
397
+ "## What Was Not Tested",
398
+ "",
399
+ ...receipt.notObserved.map((entry) => {
400
+ const icon = entry.severity === "warning" ? "🔒" : "â„šī¸";
401
+ return `- ${icon} ${entry.category}: ${entry.detail}`;
402
+ }),
318
403
  "",
319
404
  "## Top Findings",
320
405
  "",