@wrongstack/plugins 0.293.0 → 0.295.1

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 (211) hide show
  1. package/README.md +7 -71
  2. package/dist/accessibility-auditor/index.d.ts +1 -1
  3. package/dist/accessibility-auditor/index.d.ts.map +1 -1
  4. package/dist/accessibility-auditor.js +50 -33
  5. package/dist/agent-handoff/index.d.ts +1 -1
  6. package/dist/agent-handoff/index.d.ts.map +1 -1
  7. package/dist/agent-handoff.js +30 -1
  8. package/dist/api-compatibility-gate/index.d.ts +1 -1
  9. package/dist/api-compatibility-gate/index.d.ts.map +1 -1
  10. package/dist/api-compatibility-gate.js +21 -16
  11. package/dist/audit/index.d.ts +386 -0
  12. package/dist/audit/index.d.ts.map +1 -0
  13. package/dist/audit.d.ts +1 -0
  14. package/dist/audit.js +454 -0
  15. package/dist/auto-doc/index.d.ts +1 -1
  16. package/dist/auto-doc/index.d.ts.map +1 -1
  17. package/dist/auto-doc.js +3 -1
  18. package/dist/auto-escalate/index.d.ts +1 -1
  19. package/dist/auto-escalate/index.d.ts.map +1 -1
  20. package/dist/auto-i18n-extractor/index.d.ts +1 -1
  21. package/dist/auto-i18n-extractor/index.d.ts.map +1 -1
  22. package/dist/auto-i18n-extractor.js +7 -1
  23. package/dist/branch-guard/index.d.ts +1 -1
  24. package/dist/branch-guard/index.d.ts.map +1 -1
  25. package/dist/branch-guard.js +111 -1
  26. package/dist/catalog.d.ts +5 -30
  27. package/dist/catalog.d.ts.map +1 -1
  28. package/dist/changelog-writer/index.d.ts +1 -1
  29. package/dist/changelog-writer/index.d.ts.map +1 -1
  30. package/dist/changelog-writer.js +137 -3
  31. package/dist/checkpoint/index.d.ts +3 -1
  32. package/dist/checkpoint/index.d.ts.map +1 -1
  33. package/dist/checkpoint.js +41 -16
  34. package/dist/code-metrics/index.d.ts +1 -1
  35. package/dist/code-metrics/index.d.ts.map +1 -1
  36. package/dist/code-metrics.js +34 -29
  37. package/dist/commit-validator/index.d.ts +1 -1
  38. package/dist/commit-validator/index.d.ts.map +1 -1
  39. package/dist/commit-validator.js +17 -7
  40. package/dist/config-validator/index.d.ts +1 -1
  41. package/dist/config-validator/index.d.ts.map +1 -1
  42. package/dist/context-pins/index.d.ts +1 -1
  43. package/dist/context-pins/index.d.ts.map +1 -1
  44. package/dist/context-pins.js +6 -5
  45. package/dist/cost-tracker/index.d.ts +1 -1
  46. package/dist/cost-tracker/index.d.ts.map +1 -1
  47. package/dist/cost-tracker.js +109 -2
  48. package/dist/cron/index.d.ts +1 -1
  49. package/dist/cron/index.d.ts.map +1 -1
  50. package/dist/cron.js +1 -0
  51. package/dist/dead-code-detector/index.d.ts +1 -1
  52. package/dist/dead-code-detector/index.d.ts.map +1 -1
  53. package/dist/dead-code-detector.js +31 -18
  54. package/dist/dep-guard/index.d.ts +1 -1
  55. package/dist/dep-guard/index.d.ts.map +1 -1
  56. package/dist/dependency-vulnerability-gate/index.d.ts +1 -1
  57. package/dist/dependency-vulnerability-gate/index.d.ts.map +1 -1
  58. package/dist/dependency-vulnerability-gate.js +67 -20
  59. package/dist/diff-summary/index.d.ts +1 -1
  60. package/dist/diff-summary/index.d.ts.map +1 -1
  61. package/dist/diff-summary.js +128 -30
  62. package/dist/doc-sync-guard/index.d.ts +1 -1
  63. package/dist/doc-sync-guard/index.d.ts.map +1 -1
  64. package/dist/doc-sync-guard.js +7 -1
  65. package/dist/duplicate-code-detector/index.d.ts +26 -1
  66. package/dist/duplicate-code-detector/index.d.ts.map +1 -1
  67. package/dist/duplicate-code-detector.js +280 -69
  68. package/dist/error-lens/index.d.ts +1 -1
  69. package/dist/error-lens/index.d.ts.map +1 -1
  70. package/dist/factories/index.d.ts +4 -0
  71. package/dist/factories/index.d.ts.map +1 -0
  72. package/dist/factories.d.ts +1 -0
  73. package/dist/factories.js +74 -0
  74. package/dist/feature-flag-tracker/index.d.ts +1 -1
  75. package/dist/feature-flag-tracker/index.d.ts.map +1 -1
  76. package/dist/feature-flag-tracker.js +59 -33
  77. package/dist/file-watcher/index.d.ts +1 -1
  78. package/dist/file-watcher/index.d.ts.map +1 -1
  79. package/dist/file-watcher.js +6 -7
  80. package/dist/format-on-save/index.d.ts +3 -1
  81. package/dist/format-on-save/index.d.ts.map +1 -1
  82. package/dist/format-on-save.js +289 -59
  83. package/dist/generated-plugin-exports.d.ts +65 -0
  84. package/dist/generated-plugin-exports.d.ts.map +1 -0
  85. package/dist/git-autocommit/index.d.ts +1 -1
  86. package/dist/git-autocommit/index.d.ts.map +1 -1
  87. package/dist/import-organizer/index.d.ts +1 -1
  88. package/dist/import-organizer/index.d.ts.map +1 -1
  89. package/dist/import-organizer.js +141 -20
  90. package/dist/index.d.ts +4 -183
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +18298 -17279
  93. package/dist/injection-shield/index.d.ts +1 -1
  94. package/dist/injection-shield/index.d.ts.map +1 -1
  95. package/dist/interface-contract-guard/index.d.ts +1 -1
  96. package/dist/interface-contract-guard/index.d.ts.map +1 -1
  97. package/dist/interface-contract-guard.js +87 -53
  98. package/dist/knowledge-graph/index.d.ts +1 -1
  99. package/dist/knowledge-graph/index.d.ts.map +1 -1
  100. package/dist/knowledge-graph.js +7 -6
  101. package/dist/license-audit-gate/index.d.ts +1 -1
  102. package/dist/license-audit-gate/index.d.ts.map +1 -1
  103. package/dist/lint-gate/index.d.ts +1 -1
  104. package/dist/lint-gate/index.d.ts.map +1 -1
  105. package/dist/lint-gate.js +112 -1
  106. package/dist/llm-cache/index.d.ts +5 -1
  107. package/dist/llm-cache/index.d.ts.map +1 -1
  108. package/dist/llm-cache.js +16 -8
  109. package/dist/loop-breaker/index.d.ts +1 -1
  110. package/dist/loop-breaker/index.d.ts.map +1 -1
  111. package/dist/loop-breaker.js +25 -9
  112. package/dist/manifest/index.d.ts +16 -0
  113. package/dist/manifest/index.d.ts.map +1 -0
  114. package/dist/manifest.d.ts +1 -0
  115. package/dist/manifest.js +152 -0
  116. package/dist/migration-planner/index.d.ts +1 -1
  117. package/dist/migration-planner/index.d.ts.map +1 -1
  118. package/dist/migration-planner.js +5 -1
  119. package/dist/model-router/index.d.ts +1 -1
  120. package/dist/model-router/index.d.ts.map +1 -1
  121. package/dist/notify-hub/index.d.ts +1 -1
  122. package/dist/notify-hub/index.d.ts.map +1 -1
  123. package/dist/notify-hub/webhook-channel.d.ts +1 -1
  124. package/dist/notify-hub/webhook-channel.d.ts.map +1 -1
  125. package/dist/notify-hub.js +41 -4
  126. package/dist/path-guard/index.d.ts +1 -1
  127. package/dist/path-guard/index.d.ts.map +1 -1
  128. package/dist/performance-regression-gate/index.d.ts +1 -1
  129. package/dist/performance-regression-gate/index.d.ts.map +1 -1
  130. package/dist/plugin-stack-observer/index.d.ts +1 -1
  131. package/dist/plugin-stack-observer/index.d.ts.map +1 -1
  132. package/dist/pr-drafter/index.d.ts +1 -1
  133. package/dist/pr-drafter/index.d.ts.map +1 -1
  134. package/dist/pr-drafter.js +28 -29
  135. package/dist/process-guard/index.d.ts +1 -1
  136. package/dist/process-guard/index.d.ts.map +1 -1
  137. package/dist/prompt-firewall/index.d.ts +1 -1
  138. package/dist/prompt-firewall/index.d.ts.map +1 -1
  139. package/dist/prompt-firewall.js +140 -11
  140. package/dist/refactor-suggester/index.d.ts +1 -1
  141. package/dist/refactor-suggester/index.d.ts.map +1 -1
  142. package/dist/refactor-suggester.js +148 -33
  143. package/dist/release-notes-generator/index.d.ts +1 -1
  144. package/dist/release-notes-generator/index.d.ts.map +1 -1
  145. package/dist/release-notes-generator.js +29 -22
  146. package/dist/runtime/bounded-map.d.ts +86 -0
  147. package/dist/runtime/bounded-map.d.ts.map +1 -0
  148. package/dist/runtime/credential-patterns.d.ts +42 -0
  149. package/dist/runtime/credential-patterns.d.ts.map +1 -0
  150. package/dist/runtime/index.d.ts +18 -0
  151. package/dist/runtime/index.d.ts.map +1 -1
  152. package/dist/runtime/llm.d.ts +1 -1
  153. package/dist/runtime/llm.d.ts.map +1 -1
  154. package/dist/runtime/local-bin.d.ts +120 -0
  155. package/dist/runtime/local-bin.d.ts.map +1 -0
  156. package/dist/runtime/safe-json.d.ts +25 -0
  157. package/dist/runtime/safe-json.d.ts.map +1 -0
  158. package/dist/runtime.js +332 -22
  159. package/dist/schema-evolution-guard/index.d.ts +1 -1
  160. package/dist/schema-evolution-guard/index.d.ts.map +1 -1
  161. package/dist/schema-evolution-guard.js +7 -1
  162. package/dist/secret-scanner/index.d.ts +1 -1
  163. package/dist/secret-scanner/index.d.ts.map +1 -1
  164. package/dist/secret-scanner.js +181 -48
  165. package/dist/security-hotspot-scanner/index.d.ts +1 -1
  166. package/dist/security-hotspot-scanner/index.d.ts.map +1 -1
  167. package/dist/security-hotspot-scanner.js +158 -20
  168. package/dist/semantic-search-indexer/index.d.ts +1 -1
  169. package/dist/semantic-search-indexer/index.d.ts.map +1 -1
  170. package/dist/semantic-search-indexer.js +7 -1
  171. package/dist/semver-bump/index.d.ts +1 -1
  172. package/dist/semver-bump/index.d.ts.map +1 -1
  173. package/dist/semver-bump.js +97 -43
  174. package/dist/session-recap/index.d.ts +1 -1
  175. package/dist/session-recap/index.d.ts.map +1 -1
  176. package/dist/shell-check/index.d.ts +1 -1
  177. package/dist/shell-check/index.d.ts.map +1 -1
  178. package/dist/smart-rename/index.d.ts +1 -1
  179. package/dist/smart-rename/index.d.ts.map +1 -1
  180. package/dist/spec-linker/index.d.ts +1 -1
  181. package/dist/spec-linker/index.d.ts.map +1 -1
  182. package/dist/spec-linker.js +222 -20772
  183. package/dist/template-engine/index.d.ts +1 -1
  184. package/dist/template-engine/index.d.ts.map +1 -1
  185. package/dist/template-engine.js +34 -8
  186. package/dist/test-coverage-gate/index.d.ts +1 -1
  187. package/dist/test-coverage-gate/index.d.ts.map +1 -1
  188. package/dist/test-coverage-gate.js +34 -14
  189. package/dist/test-flake-detector/index.d.ts +1 -1
  190. package/dist/test-flake-detector/index.d.ts.map +1 -1
  191. package/dist/test-flake-detector.js +31 -20
  192. package/dist/test-generator/index.d.ts +1 -1
  193. package/dist/test-generator/index.d.ts.map +1 -1
  194. package/dist/test-runner-gate/index.d.ts +1 -1
  195. package/dist/test-runner-gate/index.d.ts.map +1 -1
  196. package/dist/test-runner-gate.js +132 -9
  197. package/dist/todo-listener/index.d.ts +1 -32
  198. package/dist/todo-listener/index.d.ts.map +1 -1
  199. package/dist/todo-listener.js +30 -1
  200. package/dist/todo-tracker/index.d.ts +1 -1
  201. package/dist/todo-tracker/index.d.ts.map +1 -1
  202. package/dist/todo-tracker.js +3 -4
  203. package/dist/token-budget/index.d.ts +1 -1
  204. package/dist/token-budget/index.d.ts.map +1 -1
  205. package/dist/token-throttle/index.d.ts +1 -1
  206. package/dist/token-throttle/index.d.ts.map +1 -1
  207. package/dist/token-throttle.js +17 -2
  208. package/dist/type-gate/index.d.ts +1 -1
  209. package/dist/type-gate/index.d.ts.map +1 -1
  210. package/dist/type-gate.js +106 -19
  211. package/package.json +80 -68
@@ -1,10 +1,14 @@
1
1
  // src/code-metrics/index.ts
2
- import { readFileSync } from "node:fs";
2
+ import { readFile } from "node:fs/promises";
3
3
  import { isAbsolute as isAbsolute2, relative as relative2, resolve as resolve2 } from "node:path";
4
4
 
5
5
  // src/runtime/index.ts
6
- import { existsSync, readdirSync, statSync } from "node:fs";
7
6
  import { basename, extname, isAbsolute, relative, resolve } from "node:path";
7
+
8
+ // src/runtime/local-bin.ts
9
+ import { buildWin32CmdShimInvocation, resolveWin32Command } from "@wrongstack/tools/win32";
10
+
11
+ // src/runtime/index.ts
8
12
  var MAX_BUFFER_BYTES = 16 * 1024 * 1024;
9
13
  function hasLeadingDash(arg) {
10
14
  return arg.length > 0 && arg.startsWith("-");
@@ -17,44 +21,45 @@ function withinProjectPath(projectRoot, candidate) {
17
21
  return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
18
22
  }
19
23
  function withinProject(p) {
20
- return withinProjectPath(process.cwd(), p) || relative(process.cwd(), p) === ".";
24
+ const cwd = process.cwd();
25
+ return withinProjectPath(cwd, p) || relative(cwd, p) === ".";
21
26
  }
22
27
  var DEFAULT_EXCLUDE_DIRS = ["node_modules", "dist", ".git", "coverage"];
23
- function collectSourceFiles(root, opts) {
28
+ async function collectSourceFilesAsync(root, opts) {
29
+ const { readdir, stat } = await import("node:fs/promises");
24
30
  const files = [];
25
- if (!existsSync(root)) return files;
26
- const s = statSync(root);
27
- if (s.isFile()) {
28
- if (matchesExtension(root, opts.extensions)) files.push(root);
31
+ try {
32
+ const s = await stat(root);
33
+ if (s.isFile()) {
34
+ if (matchesExtension(root, opts.extensions)) files.push(root);
35
+ return files;
36
+ }
37
+ if (!s.isDirectory()) return files;
38
+ } catch {
29
39
  return files;
30
40
  }
31
- if (!s.isDirectory()) return files;
32
41
  const exclude = opts.excludeDirs ?? DEFAULT_EXCLUDE_DIRS;
33
- function walk(dir, depth) {
42
+ const excludeSet = new Set(exclude);
43
+ async function walk(dir, depth) {
34
44
  if (opts.maxDepth !== void 0 && depth > opts.maxDepth) return;
35
45
  let entries;
36
46
  try {
37
- entries = readdirSync(dir);
47
+ entries = await readdir(dir, { withFileTypes: true });
38
48
  } catch {
39
49
  return;
40
50
  }
51
+ entries.sort((a, b) => a.name.localeCompare(b.name));
41
52
  for (const entry of entries) {
42
- if (exclude.includes(entry)) continue;
43
- const full = resolve(dir, entry);
44
- let st;
45
- try {
46
- st = statSync(full);
47
- } catch {
48
- continue;
49
- }
50
- if (st.isDirectory()) {
51
- walk(full, depth + 1);
52
- } else if (st.isFile() && matchesExtension(full, opts.extensions)) {
53
+ if (excludeSet.has(entry.name)) continue;
54
+ const full = resolve(dir, entry.name);
55
+ if (entry.isDirectory()) {
56
+ await walk(full, depth + 1);
57
+ } else if (entry.isFile() && matchesExtension(full, opts.extensions)) {
53
58
  files.push(full);
54
59
  }
55
60
  }
56
61
  }
57
- walk(root, 0);
62
+ await walk(root, 0);
58
63
  return files;
59
64
  }
60
65
  function matchesExtension(p, exts) {
@@ -166,16 +171,16 @@ function analyzeFile(filePath, content) {
166
171
  complexity: countComplexity(content)
167
172
  };
168
173
  }
169
- function measurePath(rawPath, cfg) {
174
+ async function measurePath(rawPath, cfg) {
170
175
  const root = process.cwd();
171
176
  const resolved = isAbsolute2(rawPath) ? resolve2(rawPath) : resolve2(root, rawPath);
172
177
  const exts = normalizeExtensions(cfg.extensions);
173
- const allFiles = collectSourceFiles(resolved, { extensions: exts });
178
+ const allFiles = await collectSourceFilesAsync(resolved, { extensions: exts });
174
179
  const files = allFiles.slice(0, cfg.maxFiles);
175
180
  const metrics = [];
176
181
  for (const p of files) {
177
182
  try {
178
- const content = readFileSync(p, "utf-8");
183
+ const content = await readFile(p, "utf-8");
179
184
  metrics.push(analyzeFile(p, content));
180
185
  } catch {
181
186
  }
@@ -221,7 +226,7 @@ var plugin = {
221
226
  state.hookUnregister = null;
222
227
  }
223
228
  const cfg = readConfig(api.config.extensions?.["code-metrics"]);
224
- const hook = (input) => {
229
+ const hook = async (input) => {
225
230
  if (!cfg.enabled) return;
226
231
  if (input.toolResult?.isError) return;
227
232
  const inp = input.toolInput ?? {};
@@ -234,7 +239,7 @@ var plugin = {
234
239
  const resolved = resolve2(process.cwd(), sourcePath);
235
240
  let content;
236
241
  try {
237
- content = readFileSync(resolved, "utf-8");
242
+ content = await readFile(resolved, "utf-8");
238
243
  } catch {
239
244
  state.errorCount += 1;
240
245
  return;
@@ -267,7 +272,7 @@ var plugin = {
267
272
  state.measureCount += 1;
268
273
  let result;
269
274
  try {
270
- result = measurePath(rawPath, cfg);
275
+ result = await measurePath(rawPath, cfg);
271
276
  } catch (err) {
272
277
  state.errorCount += 1;
273
278
  return { ok: false, error: String(err) };
@@ -25,7 +25,7 @@
25
25
  *
26
26
  * @public
27
27
  */
28
- import type { Plugin } from '@wrongstack/core';
28
+ import type { Plugin } from '@wrongstack/core/types';
29
29
  declare const plugin: Plugin;
30
30
  export default plugin;
31
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commit-validator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAsP/C,QAAA,MAAM,MAAM,EAAE,MAgSb,CAAC;eAEa,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commit-validator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAiRrD,QAAA,MAAM,MAAM,EAAE,MAgSb,CAAC;eAEa,MAAM"}
@@ -116,14 +116,24 @@ function parseCommitMessage(message, cfg) {
116
116
  errors
117
117
  };
118
118
  }
119
+ var GIT_MESSAGE_FLAG_RE = new RegExp(
120
+ [
121
+ // -m "…" | -m '…' | -m=… ; --message "…" | --message='…' | --message=…
122
+ String.raw`(?:^|\s)(?:-m|--message)(?:\s+|=)"([^"]*)"`,
123
+ String.raw`(?:^|\s)(?:-m|--message)(?:\s+|=)'([^']*)'`,
124
+ // Bare value: stops at whitespace or a shell separator.
125
+ String.raw`(?:^|\s)(?:-m|--message)(?:\s+|=)([^\s;&|"']+)`
126
+ ].join("|"),
127
+ "g"
128
+ );
119
129
  function extractMessageFromBash(command) {
120
- const flags = [];
121
- const doubleQuoted = command.matchAll(/-m\s+"([^"]*)"/g);
122
- const singleQuoted = command.matchAll(/-m\s+'([^']*)'/g);
123
- for (const m of doubleQuoted) flags.push(m[1] ?? "");
124
- for (const m of singleQuoted) flags.push(m[1] ?? "");
125
- if (flags.length === 0) return null;
126
- return flags.join("\n");
130
+ const parts = [];
131
+ for (const m of command.matchAll(GIT_MESSAGE_FLAG_RE)) {
132
+ const value = m[1] ?? m[2] ?? m[3];
133
+ if (value !== void 0) parts.push(value);
134
+ }
135
+ if (parts.length === 0) return null;
136
+ return parts.join("\n");
127
137
  }
128
138
  var plugin = {
129
139
  name: "commit-validator",
@@ -36,7 +36,7 @@
36
36
  *
37
37
  * @public
38
38
  */
39
- import type { Plugin } from '@wrongstack/core';
39
+ import type { Plugin } from '@wrongstack/core/types';
40
40
  export declare function validateJson(text: string, isJsonc: boolean, fileName: string): string[];
41
41
  export declare function validateYaml(text: string): string[];
42
42
  export declare function validateToml(text: string): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config-validator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA0H/C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA2CvF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuDnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuCnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAOjE;AAMD,QAAA,MAAM,MAAM,EAAE,MAqJb,CAAC;eAEa,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config-validator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA0HrD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA2CvF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuDnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuCnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAOjE;AAMD,QAAA,MAAM,MAAM,EAAE,MAqJb,CAAC;eAEa,MAAM"}
@@ -31,7 +31,7 @@
31
31
  *
32
32
  * @public
33
33
  */
34
- import type { Plugin } from '@wrongstack/core';
34
+ import type { Plugin } from '@wrongstack/core/types';
35
35
  export interface Pin {
36
36
  id: string;
37
37
  label: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context-pins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAM/C,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AA8GD,QAAA,MAAM,MAAM,EAAE,MA8Mb,CAAC;eAEa,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context-pins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAOrD,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAoHD,QAAA,MAAM,MAAM,EAAE,MA8Mb,CAAC;eAEa,MAAM"}
@@ -1,6 +1,7 @@
1
1
  // src/context-pins/index.ts
2
2
  import * as fs from "node:fs";
3
3
  import { dirname, isAbsolute, relative, resolve } from "node:path";
4
+ import { atomicWrite, ensureDir } from "@wrongstack/core/utils";
4
5
  var state = {
5
6
  pins: [],
6
7
  nextId: 1,
@@ -47,11 +48,11 @@ function loadPins(filePath) {
47
48
  return { pins: [], nextId: 1 };
48
49
  }
49
50
  }
50
- function persistPins(filePath) {
51
+ async function persistPins(filePath) {
51
52
  if (!filePath) return true;
52
53
  try {
53
- fs.mkdirSync(dirname(filePath), { recursive: true });
54
- fs.writeFileSync(filePath, JSON.stringify({ pins: state.pins, nextId: state.nextId }, null, 2));
54
+ await ensureDir(dirname(filePath));
55
+ await atomicWrite(filePath, JSON.stringify({ pins: state.pins, nextId: state.nextId }, null, 2));
55
56
  return true;
56
57
  } catch {
57
58
  state.persistErrors += 1;
@@ -149,7 +150,7 @@ var plugin = {
149
150
  state.pins.push(pin);
150
151
  state.adds += 1;
151
152
  api.metrics.counter("adds");
152
- const persisted = persistPins(cfg.filePath);
153
+ const persisted = await persistPins(cfg.filePath);
153
154
  return { ok: true, pin, persisted, totalPins: state.pins.length };
154
155
  }
155
156
  });
@@ -175,7 +176,7 @@ var plugin = {
175
176
  if (removed === 0) return { ok: false, error: `no pin matches "${key}"` };
176
177
  state.removals += removed;
177
178
  api.metrics.counter("removals", removed);
178
- const persisted = persistPins(cfg.filePath);
179
+ const persisted = await persistPins(cfg.filePath);
179
180
  return { ok: true, removed, persisted, totalPins: state.pins.length };
180
181
  }
181
182
  });
@@ -30,7 +30,7 @@
30
30
  *
31
31
  * @public
32
32
  */
33
- import type { Plugin } from '@wrongstack/core';
33
+ import type { Plugin } from '@wrongstack/core/types';
34
34
  /**
35
35
  * Per-model pricing in USD per 1 million tokens.
36
36
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cost-tracker/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK/C;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;CAChB;AAyKD,QAAA,MAAM,MAAM,EAAE,MA8Zb,CAAC;eAEa,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cost-tracker/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMrD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;CAChB;AAuLD,QAAA,MAAM,MAAM,EAAE,MAoab,CAAC;eAEa,MAAM"}
@@ -1,5 +1,105 @@
1
+ // src/runtime/local-bin.ts
2
+ import { buildWin32CmdShimInvocation, resolveWin32Command } from "@wrongstack/tools/win32";
3
+
4
+ // src/runtime/bounded-map.ts
5
+ var BoundedMap = class {
6
+ map = /* @__PURE__ */ new Map();
7
+ max;
8
+ ttlMs;
9
+ now;
10
+ /** Entries dropped to stay under `max`. Surfaced by plugin health(). */
11
+ evictions = 0;
12
+ constructor(options) {
13
+ const normalizedMax = Math.floor(options.max);
14
+ this.max = Number.isSafeInteger(normalizedMax) ? Math.max(1, normalizedMax) : 1;
15
+ this.ttlMs = options.ttlMs;
16
+ this.now = options.now ?? Date.now;
17
+ }
18
+ expired(entry) {
19
+ return this.ttlMs !== void 0 && this.now() - entry.storedAt > this.ttlMs;
20
+ }
21
+ get(key) {
22
+ const entry = this.map.get(key);
23
+ if (entry === void 0) return void 0;
24
+ if (this.expired(entry)) {
25
+ this.map.delete(key);
26
+ return void 0;
27
+ }
28
+ this.map.delete(key);
29
+ this.map.set(key, entry);
30
+ return entry.value;
31
+ }
32
+ /**
33
+ * Read without promoting the key to most-recently-used. Use for
34
+ * diagnostics that must not perturb the eviction order.
35
+ */
36
+ peek(key) {
37
+ const entry = this.map.get(key);
38
+ if (entry === void 0 || this.expired(entry)) return void 0;
39
+ return entry.value;
40
+ }
41
+ has(key) {
42
+ const entry = this.map.get(key);
43
+ if (entry === void 0) return false;
44
+ if (this.expired(entry)) {
45
+ this.map.delete(key);
46
+ return false;
47
+ }
48
+ return true;
49
+ }
50
+ set(key, value) {
51
+ this.map.delete(key);
52
+ this.map.set(key, { value, storedAt: this.now() });
53
+ while (this.map.size > this.max) {
54
+ const coldest = this.map.keys().next().value;
55
+ if (coldest === void 0) break;
56
+ this.map.delete(coldest);
57
+ this.evictions += 1;
58
+ }
59
+ return this;
60
+ }
61
+ delete(key) {
62
+ return this.map.delete(key);
63
+ }
64
+ clear() {
65
+ this.map.clear();
66
+ this.evictions = 0;
67
+ }
68
+ get size() {
69
+ return this.map.size;
70
+ }
71
+ /** How many entries have been dropped to respect `max`, since the last clear. */
72
+ get evictionCount() {
73
+ return this.evictions;
74
+ }
75
+ /** Drop every expired entry. Cheap enough to call from a status tool. */
76
+ prune() {
77
+ if (this.ttlMs === void 0) return 0;
78
+ let removed = 0;
79
+ for (const [key, entry] of this.map) {
80
+ if (this.expired(entry)) {
81
+ this.map.delete(key);
82
+ removed += 1;
83
+ }
84
+ }
85
+ return removed;
86
+ }
87
+ /** Live (non-expired) entries, coldest first. */
88
+ *entries() {
89
+ for (const [key, entry] of this.map) {
90
+ if (!this.expired(entry)) yield [key, entry.value];
91
+ }
92
+ }
93
+ [Symbol.iterator]() {
94
+ return this.entries();
95
+ }
96
+ };
97
+
98
+ // src/runtime/index.ts
99
+ var MAX_BUFFER_BYTES = 16 * 1024 * 1024;
100
+
1
101
  // src/cost-tracker/index.ts
2
- import { expectDefined } from "@wrongstack/core";
102
+ import { expectDefined } from "@wrongstack/core/utils";
3
103
  var API_VERSION = "^0.1.10";
4
104
  var PRICING = {
5
105
  "gpt-4o": { input: 5, output: 15 },
@@ -28,8 +128,13 @@ function readCostTrackerConfig(raw) {
28
128
  mailboxDigestTo: typeof digestTo === "string" && digestTo.length > 0 ? digestTo : "cost-tracker"
29
129
  };
30
130
  }
131
+ var modelKeyCache = new BoundedMap({ max: 256 });
31
132
  function estimateCost(model, promptTokens, completionTokens) {
32
- const key = model.toLowerCase();
133
+ let key = modelKeyCache.get(model);
134
+ if (!key) {
135
+ key = model.toLowerCase();
136
+ modelKeyCache.set(model, key);
137
+ }
33
138
  const pricing = pricingOverrides[key] ?? bundledFromRegistry[key] ?? PRICING[key] ?? DEFAULT_PRICING;
34
139
  const inputCost = promptTokens / 1e6 * pricing.input;
35
140
  const outputCost = completionTokens / 1e6 * pricing.output;
@@ -86,6 +191,7 @@ var plugin = {
86
191
  for (const k of Object.keys(bundledFromRegistry)) {
87
192
  delete bundledFromRegistry[k];
88
193
  }
194
+ modelKeyCache.clear();
89
195
  lastCost.usd = 0;
90
196
  lastCost.model = null;
91
197
  lastCost.at = null;
@@ -331,6 +437,7 @@ by model: ${top || "(none)"}`
331
437
  for (const k of Object.keys(bundledFromRegistry)) {
332
438
  delete bundledFromRegistry[k];
333
439
  }
440
+ modelKeyCache.clear();
334
441
  const finalLast = { ...lastCost };
335
442
  lastCost.usd = 0;
336
443
  lastCost.model = null;
@@ -6,7 +6,7 @@
6
6
  * - cron_list: List all scheduled jobs
7
7
  * - cron_cancel: Cancel a scheduled job
8
8
  */
9
- import type { Plugin } from '@wrongstack/core';
9
+ import type { Plugin } from '@wrongstack/core/types';
10
10
  declare const plugin: Plugin;
11
11
  export default plugin;
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cron/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA+F/C,QAAA,MAAM,MAAM,EAAE,MAqRb,CAAC;eAEa,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cron/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA+FrD,QAAA,MAAM,MAAM,EAAE,MA2Rb,CAAC;eAEa,MAAM"}
package/dist/cron.js CHANGED
@@ -82,6 +82,7 @@ var plugin = {
82
82
  api.metrics.histogram("cron_job_interval_ms", job.intervalMs, { job: name });
83
83
  scheduleNextRun(name);
84
84
  }, delay);
85
+ timer.unref?.();
85
86
  state.timers.set(name, timer);
86
87
  }
87
88
  function cancelJob(name) {
@@ -26,7 +26,7 @@
26
26
  *
27
27
  * @public
28
28
  */
29
- import type { Plugin } from '@wrongstack/core';
29
+ import type { Plugin } from '@wrongstack/core/types';
30
30
  declare const plugin: Plugin;
31
31
  export default plugin;
32
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dead-code-detector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAiQ/C,QAAA,MAAM,MAAM,EAAE,MAkOb,CAAC;eAEa,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dead-code-detector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAiSrD,QAAA,MAAM,MAAM,EAAE,MAkOb,CAAC;eAEa,MAAM"}
@@ -1,9 +1,14 @@
1
1
  // src/dead-code-detector/index.ts
2
- import { readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { readdir, readFile, stat } from "node:fs/promises";
3
3
  import { extname as extname2, join, relative as relative2, resolve as resolve2 } from "node:path";
4
4
 
5
5
  // src/runtime/index.ts
6
6
  import { basename, extname, isAbsolute, relative, resolve } from "node:path";
7
+
8
+ // src/runtime/local-bin.ts
9
+ import { buildWin32CmdShimInvocation, resolveWin32Command } from "@wrongstack/tools/win32";
10
+
11
+ // src/runtime/index.ts
7
12
  var MAX_BUFFER_BYTES = 16 * 1024 * 1024;
8
13
  function hasLeadingDash(arg) {
9
14
  return arg.length > 0 && arg.startsWith("-");
@@ -16,7 +21,8 @@ function withinProjectPath(projectRoot, candidate) {
16
21
  return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
17
22
  }
18
23
  function withinProject(p) {
19
- return withinProjectPath(process.cwd(), p) || relative(process.cwd(), p) === ".";
24
+ const cwd = process.cwd();
25
+ return withinProjectPath(cwd, p) || relative(cwd, p) === ".";
20
26
  }
21
27
 
22
28
  // src/dead-code-detector/index.ts
@@ -48,19 +54,21 @@ function readConfig(raw) {
48
54
  excludeDirs: Array.isArray(r["excludeDirs"]) ? r["excludeDirs"].filter((x) => typeof x === "string") : DEFAULTS.excludeDirs
49
55
  };
50
56
  }
51
- function gatherFiles(root, depth, cfg) {
57
+ async function gatherFiles(root, depth, cfg) {
52
58
  const files = [];
53
- function walk(dir, remaining) {
59
+ const excludeSet = new Set(cfg.excludeDirs);
60
+ async function walk(dir, remaining) {
54
61
  let entries;
55
62
  try {
56
- entries = readdirSync(dir, { withFileTypes: true });
63
+ entries = await readdir(dir, { withFileTypes: true });
57
64
  } catch {
58
65
  return;
59
66
  }
67
+ entries.sort((a, b) => a.name.localeCompare(b.name));
60
68
  for (const entry of entries) {
61
69
  if (entry.isDirectory()) {
62
- if (remaining > 0 && !cfg.excludeDirs.includes(entry.name)) {
63
- walk(join(dir, entry.name), remaining - 1);
70
+ if (remaining > 0 && !excludeSet.has(entry.name)) {
71
+ await walk(join(dir, entry.name), remaining - 1);
64
72
  }
65
73
  } else if (entry.isFile()) {
66
74
  const ext = extname2(entry.name).toLowerCase();
@@ -70,7 +78,7 @@ function gatherFiles(root, depth, cfg) {
70
78
  }
71
79
  }
72
80
  }
73
- walk(resolve2(root), depth);
81
+ await walk(resolve2(root), depth);
74
82
  return files;
75
83
  }
76
84
  function stripNoise(content) {
@@ -139,24 +147,29 @@ function findUnusedSymbols(files) {
139
147
  }
140
148
  }
141
149
  }
150
+ suspicious.sort((a, b) => {
151
+ const fileCompare = a.file.localeCompare(b.file);
152
+ if (fileCompare !== 0) return fileCompare;
153
+ return a.line - b.line;
154
+ });
142
155
  return suspicious;
143
156
  }
144
- function scan(root, depth, cfg) {
145
- const filePaths = gatherFiles(root, depth, cfg);
157
+ async function scan(root, depth, cfg) {
158
+ const filePaths = await gatherFiles(root, depth, cfg);
146
159
  const files = [];
147
160
  for (const p of filePaths) {
148
161
  try {
149
- const content = readFileSync(p, "utf-8");
162
+ const content = await readFile(p, "utf-8");
150
163
  files.push({ path: p, content, stripped: stripNoise(content) });
151
164
  } catch {
152
165
  }
153
166
  }
154
167
  return { findings: findUnusedSymbols(files), scannedFiles: files.length };
155
168
  }
156
- function resolveScanRoot(rawPath) {
169
+ async function resolveScanRoot(rawPath) {
157
170
  const resolved = resolve2(process.cwd(), rawPath);
158
171
  try {
159
- const stats = statSync(resolved);
172
+ const stats = await stat(resolved);
160
173
  if (!stats.isDirectory()) {
161
174
  return resolve2(resolved, "..");
162
175
  }
@@ -221,7 +234,7 @@ var plugin = {
221
234
  state.hookUnregister = null;
222
235
  }
223
236
  const cfg = readConfig(api.config.extensions?.["dead-code-detector"]);
224
- const hook = (input) => {
237
+ const hook = async (input) => {
225
238
  if (!cfg.enabled) return;
226
239
  if (input.toolResult?.isError) return;
227
240
  const inp = input.toolInput ?? {};
@@ -231,10 +244,10 @@ var plugin = {
231
244
  const ext = sourcePath.includes(".") ? sourcePath.slice(sourcePath.lastIndexOf(".")).toLowerCase() : "";
232
245
  if (!cfg.extensions.includes(ext)) return;
233
246
  state.hookInvocationCount += 1;
234
- const scanRoot = resolveScanRoot(sourcePath);
247
+ const scanRoot = await resolveScanRoot(sourcePath);
235
248
  let result;
236
249
  try {
237
- result = scan(scanRoot, 1, cfg);
250
+ result = await scan(scanRoot, 1, cfg);
238
251
  } catch {
239
252
  state.errorCount += 1;
240
253
  return;
@@ -289,10 +302,10 @@ Consider removing the export if it is not part of the public API.`;
289
302
  return { ok: false, error: "scan path is outside the project root" };
290
303
  }
291
304
  state.scanCount += 1;
292
- const scanRoot = resolveScanRoot(rawPath);
305
+ const scanRoot = await resolveScanRoot(rawPath);
293
306
  let result;
294
307
  try {
295
- result = scan(scanRoot, depth, cfg);
308
+ result = await scan(scanRoot, depth, cfg);
296
309
  } catch (err) {
297
310
  state.errorCount += 1;
298
311
  return { ok: false, error: String(err) };
@@ -35,7 +35,7 @@
35
35
  *
36
36
  * @public
37
37
  */
38
- import type { Plugin } from '@wrongstack/core';
38
+ import type { Plugin } from '@wrongstack/core/types';
39
39
  export interface ParsedInstall {
40
40
  manager: string;
41
41
  packages: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dep-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmF/C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAC3D;AAKD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAmCrE;AA0CD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBzD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvD;AAMD,QAAA,MAAM,MAAM,EAAE,MAwPb,CAAC;eAEa,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dep-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAmFrD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAC3D;AAKD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAmCrE;AA0CD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBzD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvD;AAMD,QAAA,MAAM,MAAM,EAAE,MAwPb,CAAC;eAEa,MAAM"}
@@ -27,7 +27,7 @@
27
27
  *
28
28
  * @public
29
29
  */
30
- import type { Plugin } from '@wrongstack/core';
30
+ import type { Plugin } from '@wrongstack/core/types';
31
31
  declare const plugin: Plugin;
32
32
  export default plugin;
33
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dependency-vulnerability-gate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAuO/C,QAAA,MAAM,MAAM,EAAE,MAwMb,CAAC;eAEa,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dependency-vulnerability-gate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA2RrD,QAAA,MAAM,MAAM,EAAE,MAwMb,CAAC;eAEa,MAAM"}