@wrongstack/plugins 0.284.1 → 0.285.0

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 (263) hide show
  1. package/README.md +18 -14
  2. package/dist/accessibility-auditor/index.d.ts +38 -0
  3. package/dist/accessibility-auditor/index.d.ts.map +1 -0
  4. package/dist/accessibility-auditor.d.ts +2 -40
  5. package/dist/accessibility-auditor.js +5 -5
  6. package/dist/agent-handoff/index.d.ts +35 -0
  7. package/dist/agent-handoff/index.d.ts.map +1 -0
  8. package/dist/agent-handoff.d.ts +2 -37
  9. package/dist/agent-handoff.js +3 -2
  10. package/dist/api-compatibility-gate/index.d.ts +36 -0
  11. package/dist/api-compatibility-gate/index.d.ts.map +1 -0
  12. package/dist/api-compatibility-gate.d.ts +2 -38
  13. package/dist/api-compatibility-gate.js +6 -6
  14. package/dist/auto-doc/index.d.ts +20 -0
  15. package/dist/auto-doc/index.d.ts.map +1 -0
  16. package/dist/auto-doc.d.ts +2 -22
  17. package/dist/auto-doc.js +5 -5
  18. package/dist/auto-escalate/index.d.ts +43 -0
  19. package/dist/auto-escalate/index.d.ts.map +1 -0
  20. package/dist/auto-escalate.d.ts +2 -45
  21. package/dist/auto-escalate.js +5 -2
  22. package/dist/auto-i18n-extractor/index.d.ts +34 -0
  23. package/dist/auto-i18n-extractor/index.d.ts.map +1 -0
  24. package/dist/auto-i18n-extractor.d.ts +2 -36
  25. package/dist/auto-i18n-extractor.js +5 -5
  26. package/dist/branch-guard/index.d.ts +32 -0
  27. package/dist/branch-guard/index.d.ts.map +1 -0
  28. package/dist/branch-guard.d.ts +2 -34
  29. package/dist/branch-guard.js +4 -4
  30. package/dist/catalog.d.ts +39 -0
  31. package/dist/catalog.d.ts.map +1 -0
  32. package/dist/changelog-writer/index.d.ts +71 -0
  33. package/dist/changelog-writer/index.d.ts.map +1 -0
  34. package/dist/changelog-writer.d.ts +2 -73
  35. package/dist/changelog-writer.js +9 -5
  36. package/dist/checkpoint/index.d.ts +53 -0
  37. package/dist/checkpoint/index.d.ts.map +1 -0
  38. package/dist/checkpoint.d.ts +2 -55
  39. package/dist/checkpoint.js +6 -6
  40. package/dist/code-metrics/index.d.ts +29 -0
  41. package/dist/code-metrics/index.d.ts.map +1 -0
  42. package/dist/code-metrics.d.ts +2 -31
  43. package/dist/code-metrics.js +5 -5
  44. package/dist/commit-validator/index.d.ts +31 -0
  45. package/dist/commit-validator/index.d.ts.map +1 -0
  46. package/dist/commit-validator.d.ts +2 -33
  47. package/dist/commit-validator.js +5 -3
  48. package/dist/config-validator/index.d.ts +46 -0
  49. package/dist/config-validator/index.d.ts.map +1 -0
  50. package/dist/config-validator.d.ts +2 -48
  51. package/dist/config-validator.js +8 -4
  52. package/dist/context-pins/index.d.ts +43 -0
  53. package/dist/context-pins/index.d.ts.map +1 -0
  54. package/dist/context-pins.d.ts +2 -45
  55. package/dist/context-pins.js +5 -5
  56. package/dist/cost-tracker/index.d.ts +51 -0
  57. package/dist/cost-tracker/index.d.ts.map +1 -0
  58. package/dist/cost-tracker.d.ts +2 -53
  59. package/dist/cost-tracker.js +4 -4
  60. package/dist/cron/index.d.ts +12 -0
  61. package/dist/cron/index.d.ts.map +1 -0
  62. package/dist/cron.d.ts +2 -14
  63. package/dist/cron.js +3 -2
  64. package/dist/dead-code-detector/index.d.ts +32 -0
  65. package/dist/dead-code-detector/index.d.ts.map +1 -0
  66. package/dist/dead-code-detector.d.ts +2 -34
  67. package/dist/dead-code-detector.js +5 -5
  68. package/dist/dep-guard/index.d.ts +63 -0
  69. package/dist/dep-guard/index.d.ts.map +1 -0
  70. package/dist/dep-guard.d.ts +2 -65
  71. package/dist/dep-guard.js +6 -2
  72. package/dist/dependency-vulnerability-gate/index.d.ts +33 -0
  73. package/dist/dependency-vulnerability-gate/index.d.ts.map +1 -0
  74. package/dist/dependency-vulnerability-gate.d.ts +2 -35
  75. package/dist/dependency-vulnerability-gate.js +5 -5
  76. package/dist/diff-summary/index.d.ts +34 -0
  77. package/dist/diff-summary/index.d.ts.map +1 -0
  78. package/dist/diff-summary.d.ts +2 -36
  79. package/dist/diff-summary.js +5 -5
  80. package/dist/doc-sync-guard/index.d.ts +31 -0
  81. package/dist/doc-sync-guard/index.d.ts.map +1 -0
  82. package/dist/doc-sync-guard.d.ts +2 -33
  83. package/dist/doc-sync-guard.js +4 -4
  84. package/dist/duplicate-code-detector/index.d.ts +31 -0
  85. package/dist/duplicate-code-detector/index.d.ts.map +1 -0
  86. package/dist/duplicate-code-detector.d.ts +2 -33
  87. package/dist/duplicate-code-detector.js +5 -5
  88. package/dist/error-lens/index.d.ts +65 -0
  89. package/dist/error-lens/index.d.ts.map +1 -0
  90. package/dist/error-lens.d.ts +2 -67
  91. package/dist/error-lens.js +5 -2
  92. package/dist/feature-flag-tracker/index.d.ts +36 -0
  93. package/dist/feature-flag-tracker/index.d.ts.map +1 -0
  94. package/dist/feature-flag-tracker.d.ts +2 -38
  95. package/dist/feature-flag-tracker.js +5 -5
  96. package/dist/file-watcher/index.d.ts +12 -0
  97. package/dist/file-watcher/index.d.ts.map +1 -0
  98. package/dist/file-watcher.d.ts +2 -14
  99. package/dist/file-watcher.js +7 -7
  100. package/dist/format-on-save/index.d.ts +33 -0
  101. package/dist/format-on-save/index.d.ts.map +1 -0
  102. package/dist/format-on-save.d.ts +2 -35
  103. package/dist/format-on-save.js +6 -6
  104. package/dist/git-autocommit/index.d.ts +15 -0
  105. package/dist/git-autocommit/index.d.ts.map +1 -0
  106. package/dist/git-autocommit.d.ts +2 -17
  107. package/dist/git-autocommit.js +5 -5
  108. package/dist/import-organizer/index.d.ts +50 -0
  109. package/dist/import-organizer/index.d.ts.map +1 -0
  110. package/dist/import-organizer.d.ts +2 -52
  111. package/dist/import-organizer.js +6 -6
  112. package/dist/index.d.ts +186 -64
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +946 -394
  115. package/dist/injection-shield/index.d.ts +47 -0
  116. package/dist/injection-shield/index.d.ts.map +1 -0
  117. package/dist/injection-shield.d.ts +2 -49
  118. package/dist/injection-shield.js +4 -2
  119. package/dist/interface-contract-guard/index.d.ts +35 -0
  120. package/dist/interface-contract-guard/index.d.ts.map +1 -0
  121. package/dist/interface-contract-guard.d.ts +2 -37
  122. package/dist/interface-contract-guard.js +5 -5
  123. package/dist/knowledge-graph/index.d.ts +43 -0
  124. package/dist/knowledge-graph/index.d.ts.map +1 -0
  125. package/dist/knowledge-graph.d.ts +2 -45
  126. package/dist/knowledge-graph.js +5 -5
  127. package/dist/license-audit-gate/index.d.ts +32 -0
  128. package/dist/license-audit-gate/index.d.ts.map +1 -0
  129. package/dist/license-audit-gate.d.ts +2 -34
  130. package/dist/license-audit-gate.js +5 -5
  131. package/dist/lint-gate/index.d.ts +31 -0
  132. package/dist/lint-gate/index.d.ts.map +1 -0
  133. package/dist/lint-gate.d.ts +2 -33
  134. package/dist/lint-gate.js +7 -7
  135. package/dist/llm-cache/index.d.ts +54 -0
  136. package/dist/llm-cache/index.d.ts.map +1 -0
  137. package/dist/llm-cache.d.ts +2 -56
  138. package/dist/llm-cache.js +6 -4
  139. package/dist/loop-breaker/index.d.ts +4 -0
  140. package/dist/loop-breaker/index.d.ts.map +1 -0
  141. package/dist/loop-breaker.d.ts +2 -5
  142. package/dist/loop-breaker.js +4 -4
  143. package/dist/migration-planner/index.d.ts +28 -0
  144. package/dist/migration-planner/index.d.ts.map +1 -0
  145. package/dist/migration-planner.d.ts +2 -30
  146. package/dist/migration-planner.js +5 -5
  147. package/dist/model-router/index.d.ts +67 -0
  148. package/dist/model-router/index.d.ts.map +1 -0
  149. package/dist/model-router.d.ts +2 -69
  150. package/dist/model-router.js +5 -2
  151. package/dist/notify-hub/index.d.ts +43 -0
  152. package/dist/notify-hub/index.d.ts.map +1 -0
  153. package/dist/notify-hub.d.ts +2 -45
  154. package/dist/notify-hub.js +3 -2
  155. package/dist/path-guard/index.d.ts +52 -0
  156. package/dist/path-guard/index.d.ts.map +1 -0
  157. package/dist/path-guard.d.ts +2 -54
  158. package/dist/path-guard.js +5 -2
  159. package/dist/performance-regression-gate/index.d.ts +31 -0
  160. package/dist/performance-regression-gate/index.d.ts.map +1 -0
  161. package/dist/performance-regression-gate.d.ts +2 -33
  162. package/dist/performance-regression-gate.js +5 -5
  163. package/dist/plugin-stack-observer/index.d.ts +33 -0
  164. package/dist/plugin-stack-observer/index.d.ts.map +1 -0
  165. package/dist/plugin-stack-observer.d.ts +2 -35
  166. package/dist/plugin-stack-observer.js +3 -2
  167. package/dist/pr-drafter/index.d.ts +33 -0
  168. package/dist/pr-drafter/index.d.ts.map +1 -0
  169. package/dist/pr-drafter.d.ts +2 -35
  170. package/dist/pr-drafter.js +6 -6
  171. package/dist/prompt-firewall/index.d.ts +55 -0
  172. package/dist/prompt-firewall/index.d.ts.map +1 -0
  173. package/dist/prompt-firewall.d.ts +2 -57
  174. package/dist/prompt-firewall.js +5 -2
  175. package/dist/refactor-suggester/index.d.ts +36 -0
  176. package/dist/refactor-suggester/index.d.ts.map +1 -0
  177. package/dist/refactor-suggester.d.ts +2 -38
  178. package/dist/refactor-suggester.js +5 -5
  179. package/dist/release-notes-generator/index.d.ts +25 -0
  180. package/dist/release-notes-generator/index.d.ts.map +1 -0
  181. package/dist/release-notes-generator.d.ts +2 -27
  182. package/dist/release-notes-generator.js +28 -10
  183. package/dist/runtime/index.d.ts +124 -0
  184. package/dist/runtime/index.d.ts.map +1 -0
  185. package/dist/runtime.d.ts +1 -0
  186. package/dist/runtime.js +216 -0
  187. package/dist/schema-evolution-guard/index.d.ts +40 -0
  188. package/dist/schema-evolution-guard/index.d.ts.map +1 -0
  189. package/dist/schema-evolution-guard.d.ts +2 -42
  190. package/dist/schema-evolution-guard.js +5 -5
  191. package/dist/secret-scanner/index.d.ts +32 -0
  192. package/dist/secret-scanner/index.d.ts.map +1 -0
  193. package/dist/secret-scanner.d.ts +2 -34
  194. package/dist/secret-scanner.js +3 -2
  195. package/dist/security-hotspot-scanner/index.d.ts +28 -0
  196. package/dist/security-hotspot-scanner/index.d.ts.map +1 -0
  197. package/dist/security-hotspot-scanner.d.ts +2 -30
  198. package/dist/security-hotspot-scanner.js +5 -5
  199. package/dist/semantic-search-indexer/index.d.ts +36 -0
  200. package/dist/semantic-search-indexer/index.d.ts.map +1 -0
  201. package/dist/semantic-search-indexer.d.ts +2 -38
  202. package/dist/semantic-search-indexer.js +22 -6
  203. package/dist/semver-bump/index.d.ts +24 -0
  204. package/dist/semver-bump/index.d.ts.map +1 -0
  205. package/dist/semver-bump.d.ts +2 -26
  206. package/dist/semver-bump.js +10 -8
  207. package/dist/session-recap/index.d.ts +48 -0
  208. package/dist/session-recap/index.d.ts.map +1 -0
  209. package/dist/session-recap.d.ts +2 -50
  210. package/dist/session-recap.js +6 -4
  211. package/dist/shell-check/index.d.ts +14 -0
  212. package/dist/shell-check/index.d.ts.map +1 -0
  213. package/dist/shell-check.d.ts +2 -16
  214. package/dist/shell-check.js +6 -6
  215. package/dist/smart-rename/index.d.ts +24 -0
  216. package/dist/smart-rename/index.d.ts.map +1 -0
  217. package/dist/smart-rename.d.ts +2 -26
  218. package/dist/smart-rename.js +5 -5
  219. package/dist/spec-linker/index.d.ts +49 -0
  220. package/dist/spec-linker/index.d.ts.map +1 -0
  221. package/dist/spec-linker.d.ts +2 -51
  222. package/dist/spec-linker.js +20100 -244
  223. package/dist/template-engine/index.d.ts +13 -0
  224. package/dist/template-engine/index.d.ts.map +1 -0
  225. package/dist/template-engine.d.ts +2 -15
  226. package/dist/template-engine.js +7 -7
  227. package/dist/test-coverage-gate/index.d.ts +35 -0
  228. package/dist/test-coverage-gate/index.d.ts.map +1 -0
  229. package/dist/test-coverage-gate.d.ts +2 -37
  230. package/dist/test-coverage-gate.js +5 -5
  231. package/dist/test-flake-detector/index.d.ts +25 -0
  232. package/dist/test-flake-detector/index.d.ts.map +1 -0
  233. package/dist/test-flake-detector.d.ts +2 -27
  234. package/dist/test-flake-detector.js +98 -13
  235. package/dist/test-generator/index.d.ts +30 -0
  236. package/dist/test-generator/index.d.ts.map +1 -0
  237. package/dist/test-generator.d.ts +2 -32
  238. package/dist/test-generator.js +5 -5
  239. package/dist/test-runner-gate/index.d.ts +35 -0
  240. package/dist/test-runner-gate/index.d.ts.map +1 -0
  241. package/dist/test-runner-gate.d.ts +2 -37
  242. package/dist/test-runner-gate.js +6 -6
  243. package/dist/todo-listener/index.d.ts +35 -0
  244. package/dist/todo-listener/index.d.ts.map +1 -0
  245. package/dist/todo-listener.d.ts +2 -37
  246. package/dist/todo-listener.js +3 -2
  247. package/dist/todo-tracker/index.d.ts +4 -0
  248. package/dist/todo-tracker/index.d.ts.map +1 -0
  249. package/dist/todo-tracker.d.ts +2 -5
  250. package/dist/todo-tracker.js +5 -5
  251. package/dist/token-budget/index.d.ts +38 -0
  252. package/dist/token-budget/index.d.ts.map +1 -0
  253. package/dist/token-budget.d.ts +2 -40
  254. package/dist/token-budget.js +3 -2
  255. package/dist/token-throttle/index.d.ts +52 -0
  256. package/dist/token-throttle/index.d.ts.map +1 -0
  257. package/dist/token-throttle.d.ts +2 -54
  258. package/dist/token-throttle.js +6 -2
  259. package/dist/type-gate/index.d.ts +35 -0
  260. package/dist/type-gate/index.d.ts.map +1 -0
  261. package/dist/type-gate.d.ts +2 -37
  262. package/dist/type-gate.js +236 -43
  263. package/package.json +10 -7
@@ -1,7 +1,6 @@
1
- import { watch } from 'fs';
2
- import { isAbsolute, resolve, relative } from 'path';
3
-
4
1
  // src/file-watcher/index.ts
2
+ import { watch as fsWatch } from "node:fs";
3
+ import { isAbsolute, relative, resolve } from "node:path";
5
4
  var API_VERSION = "^0.1.10";
6
5
  function withinProject(p) {
7
6
  if (typeof p !== "string" || p.length === 0 || p.length > 4096) return false;
@@ -108,7 +107,7 @@ var plugin = {
108
107
  }
109
108
  function safeWatchDir(dirPath, recursive, handle) {
110
109
  try {
111
- const watcher = watch(dirPath, { recursive }, (eventType, filename) => {
110
+ const watcher = fsWatch(dirPath, { recursive }, (eventType, filename) => {
112
111
  if (!filename) return;
113
112
  const fullPath = `${dirPath}/${filename}`;
114
113
  const key = `${handle.id}:${fullPath}:${eventType}`;
@@ -129,7 +128,7 @@ var plugin = {
129
128
  `index:${fullPath}`,
130
129
  async () => {
131
130
  try {
132
- const { enqueueReindex } = await import('@wrongstack/tools/codebase-index');
131
+ const { enqueueReindex } = await import("@wrongstack/tools/codebase-index");
133
132
  const root = safeIndexRoot || dirPath;
134
133
  enqueueReindex({
135
134
  projectRoot: root,
@@ -313,5 +312,6 @@ var plugin = {
313
312
  }
314
313
  };
315
314
  var file_watcher_default = plugin;
316
-
317
- export { file_watcher_default as default };
315
+ export {
316
+ file_watcher_default as default
317
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * auto-format-on-save plugin — PostToolUse hook that runs biome
3
+ * `format --write` on the file after every `write` or `edit`.
4
+ *
5
+ * Unlike lint-gate (which lints BEFORE the tool runs and can block),
6
+ * this plugin formats AFTER the write/edit commits — ensuring the
7
+ * file on disk always matches the project's formatting rules. No
8
+ * blocking, no warnings — just silently formats in-place.
9
+ *
10
+ * Tools registered:
11
+ * - format_on_save_status : Show config + per-session counters.
12
+ *
13
+ * Hooks registered:
14
+ * - PostToolUse with matcher `write|edit`. After the tool completes,
15
+ * runs `biome format --write <path>` on the actual file on disk.
16
+ * If the file changed (formatting was applied), logs the diff size.
17
+ * If biome fails or the file doesn't exist, silent fallback.
18
+ *
19
+ * Config (`config.extensions['format-on-save']`):
20
+ *
21
+ * ```jsonc
22
+ * {
23
+ * "enabled": true, // master switch
24
+ * "timeoutMs": 5000 // biome process timeout
25
+ * }
26
+ * ```
27
+ *
28
+ * @public
29
+ */
30
+ import type { Plugin } from '@wrongstack/core';
31
+ declare const plugin: Plugin;
32
+ export default plugin;
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/format-on-save/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmO/C,QAAA,MAAM,MAAM,EAAE,MA2Ob,CAAC;eAEa,MAAM"}
@@ -1,35 +1,2 @@
1
- import { Plugin } from '@wrongstack/core';
2
-
3
- /**
4
- * auto-format-on-save plugin — PostToolUse hook that runs biome
5
- * `format --write` on the file after every `write` or `edit`.
6
- *
7
- * Unlike lint-gate (which lints BEFORE the tool runs and can block),
8
- * this plugin formats AFTER the write/edit commits — ensuring the
9
- * file on disk always matches the project's formatting rules. No
10
- * blocking, no warnings — just silently formats in-place.
11
- *
12
- * Tools registered:
13
- * - format_on_save_status : Show config + per-session counters.
14
- *
15
- * Hooks registered:
16
- * - PostToolUse with matcher `write|edit`. After the tool completes,
17
- * runs `biome format --write <path>` on the actual file on disk.
18
- * If the file changed (formatting was applied), logs the diff size.
19
- * If biome fails or the file doesn't exist, silent fallback.
20
- *
21
- * Config (`config.extensions['format-on-save']`):
22
- *
23
- * ```jsonc
24
- * {
25
- * "enabled": true, // master switch
26
- * "timeoutMs": 5000 // biome process timeout
27
- * }
28
- * ```
29
- *
30
- * @public
31
- */
32
-
33
- declare const plugin: Plugin;
34
-
35
- export { plugin as default };
1
+ export * from './format-on-save/index.js';
2
+ export { default } from './format-on-save/index.js';
@@ -1,8 +1,7 @@
1
- import { execSync, execFileSync } from 'child_process';
2
- import { existsSync, statSync } from 'fs';
3
- import { isAbsolute, resolve, relative } from 'path';
4
-
5
1
  // src/format-on-save/index.ts
2
+ import { execFileSync, execSync } from "node:child_process";
3
+ import { existsSync, statSync } from "node:fs";
4
+ import { isAbsolute, relative, resolve } from "node:path";
6
5
  var API_VERSION = "^0.1.10";
7
6
  function withinProject(p) {
8
7
  if (typeof p !== "string" || p.length === 0 || p.length > 4096) return false;
@@ -296,5 +295,6 @@ var plugin = {
296
295
  }
297
296
  };
298
297
  var format_on_save_default = plugin;
299
-
300
- export { format_on_save_default as default };
298
+ export {
299
+ format_on_save_default as default
300
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * git-autocommit plugin — AI-powered git staging and commit message generation.
3
+ *
4
+ * Tools registered:
5
+ * - git_autocommit: Stage files and create a commit with AI-written conventional commit messages.
6
+ * Supports `files` for specific staging and `dry_run` for preview.
7
+ *
8
+ * Note: The former `git_autocommit` and `git_autocommit` tools have been removed.
9
+ * - For staging: use `git_autocommit` with `files` (it stages automatically), or `bash` with `git add`.
10
+ * - For status: use the built-in `git` tool with `command: "status"` or `command: "diff"`.
11
+ */
12
+ import type { Plugin } from '@wrongstack/core';
13
+ declare const plugin: Plugin;
14
+ export default plugin;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/git-autocommit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA+R/C,QAAA,MAAM,MAAM,EAAE,MAqXb,CAAC;eAEa,MAAM"}
@@ -1,17 +1,2 @@
1
- import { Plugin } from '@wrongstack/core';
2
-
3
- /**
4
- * git-autocommit plugin — AI-powered git staging and commit message generation.
5
- *
6
- * Tools registered:
7
- * - git_autocommit: Stage files and create a commit with AI-written conventional commit messages.
8
- * Supports `files` for specific staging and `dry_run` for preview.
9
- *
10
- * Note: The former `git_autocommit` and `git_autocommit` tools have been removed.
11
- * - For staging: use `git_autocommit` with `files` (it stages automatically), or `bash` with `git add`.
12
- * - For status: use the built-in `git` tool with `command: "status"` or `command: "diff"`.
13
- */
14
-
15
- declare const plugin: Plugin;
16
-
17
- export { plugin as default };
1
+ export * from './git-autocommit/index.js';
2
+ export { default } from './git-autocommit/index.js';
@@ -1,7 +1,6 @@
1
- import { execFileSync } from 'child_process';
2
- import { existsSync } from 'fs';
3
-
4
1
  // src/git-autocommit/index.ts
2
+ import { execFileSync } from "node:child_process";
3
+ import { existsSync } from "node:fs";
5
4
  var API_VERSION = "^0.1.10";
6
5
  var commitCount = { value: 0 };
7
6
  var lastCommit = { hash: null, at: null };
@@ -458,5 +457,6 @@ ${preCommitDiff}
458
457
  }
459
458
  };
460
459
  var git_autocommit_default = plugin;
461
-
462
- export { git_autocommit_default as default };
460
+ export {
461
+ git_autocommit_default as default
462
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * import-organizer plugin — PostToolUse hook that re-sorts and
3
+ * de-duplicates imports in a file after every `write` or `edit`.
4
+ *
5
+ * This is a heavier, post-write step than `format-on-save` (which only
6
+ * handles whitespace/formatting). It runs `biome check --write --unsafe`
7
+ * (or `eslint --fix` as a fallback) on the saved file. The `--unsafe`
8
+ * flag enables import-organization rules:
9
+ * - Sort imports alphabetically within import groups
10
+ * - Group by source (builtin, external, internal, relative)
11
+ * - Remove unused imports
12
+ * - Merge duplicate imports from the same module
13
+ *
14
+ * Tools registered:
15
+ * - import_organizer_status : Show config + per-session counters
16
+ * (invocations / organized / clean / errors + lastResult).
17
+ *
18
+ * Hooks registered:
19
+ * - PostToolUse with matcher `write|edit`. After the tool completes,
20
+ * runs the configured command on the file on disk. The hook reads
21
+ * the file fresh from disk (so `edit` tool's post-edit state is
22
+ * captured) and detects whether the file changed via byte-count
23
+ * comparison. If the file was modified, returns `additionalContext`
24
+ * so the LLM sees that imports were reorganized.
25
+ *
26
+ * Linter detection is lazy: on the first hook invocation, the plugin
27
+ * tries `biome` first (since `--unsafe` is required for import
28
+ * organization), then falls back to `eslint --fix`. If neither
29
+ * succeeds, the hook logs a one-time warning and becomes a no-op for
30
+ * the rest of the session. Linter presence is re-checked on every
31
+ * setup() call so plugin reload can recover if a linter is installed
32
+ * mid-session.
33
+ *
34
+ * Config (`config.extensions['import-organizer']`):
35
+ *
36
+ * ```jsonc
37
+ * {
38
+ * "enabled": true,
39
+ * "command": "npx @biomejs/biome check --write --unsafe",
40
+ * "fallbackCommand": "npx eslint --fix",
41
+ * "timeoutMs": 10000
42
+ * }
43
+ * ```
44
+ *
45
+ * @public
46
+ */
47
+ import type { Plugin } from '@wrongstack/core';
48
+ declare const plugin: Plugin;
49
+ export default plugin;
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/import-organizer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA4R/C,QAAA,MAAM,MAAM,EAAE,MA8Nb,CAAC;eAEa,MAAM"}
@@ -1,52 +1,2 @@
1
- import { Plugin } from '@wrongstack/core';
2
-
3
- /**
4
- * import-organizer plugin — PostToolUse hook that re-sorts and
5
- * de-duplicates imports in a file after every `write` or `edit`.
6
- *
7
- * This is a heavier, post-write step than `format-on-save` (which only
8
- * handles whitespace/formatting). It runs `biome check --write --unsafe`
9
- * (or `eslint --fix` as a fallback) on the saved file. The `--unsafe`
10
- * flag enables import-organization rules:
11
- * - Sort imports alphabetically within import groups
12
- * - Group by source (builtin, external, internal, relative)
13
- * - Remove unused imports
14
- * - Merge duplicate imports from the same module
15
- *
16
- * Tools registered:
17
- * - import_organizer_status : Show config + per-session counters
18
- * (invocations / organized / clean / errors + lastResult).
19
- *
20
- * Hooks registered:
21
- * - PostToolUse with matcher `write|edit`. After the tool completes,
22
- * runs the configured command on the file on disk. The hook reads
23
- * the file fresh from disk (so `edit` tool's post-edit state is
24
- * captured) and detects whether the file changed via byte-count
25
- * comparison. If the file was modified, returns `additionalContext`
26
- * so the LLM sees that imports were reorganized.
27
- *
28
- * Linter detection is lazy: on the first hook invocation, the plugin
29
- * tries `biome` first (since `--unsafe` is required for import
30
- * organization), then falls back to `eslint --fix`. If neither
31
- * succeeds, the hook logs a one-time warning and becomes a no-op for
32
- * the rest of the session. Linter presence is re-checked on every
33
- * setup() call so plugin reload can recover if a linter is installed
34
- * mid-session.
35
- *
36
- * Config (`config.extensions['import-organizer']`):
37
- *
38
- * ```jsonc
39
- * {
40
- * "enabled": true,
41
- * "command": "npx @biomejs/biome check --write --unsafe",
42
- * "fallbackCommand": "npx eslint --fix",
43
- * "timeoutMs": 10000
44
- * }
45
- * ```
46
- *
47
- * @public
48
- */
49
-
50
- declare const plugin: Plugin;
51
-
52
- export { plugin as default };
1
+ export * from './import-organizer/index.js';
2
+ export { default } from './import-organizer/index.js';
@@ -1,8 +1,7 @@
1
- import { spawn } from 'child_process';
2
- import { existsSync, statSync } from 'fs';
3
- import { isAbsolute, resolve, relative, basename } from 'path';
4
-
5
1
  // src/import-organizer/index.ts
2
+ import { spawn } from "node:child_process";
3
+ import { existsSync, statSync } from "node:fs";
4
+ import { basename, isAbsolute, relative, resolve } from "node:path";
6
5
  function withinProject(p) {
7
6
  if (typeof p !== "string" || p.length === 0 || p.length > 4096) return false;
8
7
  const root = process.cwd();
@@ -329,5 +328,6 @@ ${result.stderr.trim()}`
329
328
  }
330
329
  };
331
330
  var import_organizer_default = plugin;
332
-
333
- export { import_organizer_default as default };
331
+ export {
332
+ import_organizer_default as default
333
+ };
package/dist/index.d.ts CHANGED
@@ -1,64 +1,186 @@
1
- export { default as agentHandoffPlugin } from './agent-handoff.js';
2
- export { default as autoDocPlugin } from './auto-doc.js';
3
- export { default as autoEscalatePlugin } from './auto-escalate.js';
4
- export { default as branchGuardPlugin } from './branch-guard.js';
5
- export { default as changelogWriterPlugin } from './changelog-writer.js';
6
- export { default as checkpointPlugin } from './checkpoint.js';
7
- export { default as commitValidatorPlugin } from './commit-validator.js';
8
- export { default as configValidatorPlugin } from './config-validator.js';
9
- export { default as contextPinsPlugin } from './context-pins.js';
10
- export { default as costTrackerPlugin } from './cost-tracker.js';
11
- export { default as cronPlugin } from './cron.js';
12
- export { default as depGuardPlugin } from './dep-guard.js';
13
- export { default as diffSummaryPlugin } from './diff-summary.js';
14
- export { default as errorLensPlugin } from './error-lens.js';
15
- export { default as fileWatcherPlugin } from './file-watcher.js';
16
- export { default as formatOnSavePlugin } from './format-on-save.js';
17
- export { default as gitAutocommitPlugin } from './git-autocommit.js';
18
- export { default as importOrganizerPlugin } from './import-organizer.js';
19
- export { default as injectionShieldPlugin } from './injection-shield.js';
20
- export { default as knowledgeGraphPlugin } from './knowledge-graph.js';
21
- export { default as lintGatePlugin } from './lint-gate.js';
22
- export { default as llmCachePlugin } from './llm-cache.js';
23
- export { default as loopBreakerPlugin } from './loop-breaker.js';
24
- export { default as modelRouterPlugin } from './model-router.js';
25
- export { default as notifyHubPlugin } from './notify-hub.js';
26
- export { default as pathGuardPlugin } from './path-guard.js';
27
- export { default as pluginStackObserverPlugin } from './plugin-stack-observer.js';
28
- export { default as prDrafterPlugin } from './pr-drafter.js';
29
- export { default as promptFirewallPlugin } from './prompt-firewall.js';
30
- export { default as secretScannerPlugin } from './secret-scanner.js';
31
- export { default as semverBumpPlugin } from './semver-bump.js';
32
- export { default as sessionRecapPlugin } from './session-recap.js';
33
- export { default as shellCheckPlugin } from './shell-check.js';
34
- export { default as specLinkerPlugin } from './spec-linker.js';
35
- export { default as templateEnginePlugin } from './template-engine.js';
36
- export { default as testCoverageGatePlugin } from './test-coverage-gate.js';
37
- export { default as testRunnerGatePlugin } from './test-runner-gate.js';
38
- export { default as typeGatePlugin } from './type-gate.js';
39
- export { default as accessibilityAuditorPlugin } from './accessibility-auditor.js';
40
- export { default as apiCompatibilityGatePlugin } from './api-compatibility-gate.js';
41
- export { default as autoI18nExtractorPlugin } from './auto-i18n-extractor.js';
42
- export { default as codeMetricsPlugin } from './code-metrics.js';
43
- export { default as deadCodeDetectorPlugin } from './dead-code-detector.js';
44
- export { default as dependencyVulnerabilityGatePlugin } from './dependency-vulnerability-gate.js';
45
- export { default as docSyncGuardPlugin } from './doc-sync-guard.js';
46
- export { default as duplicateCodeDetectorPlugin } from './duplicate-code-detector.js';
47
- export { default as featureFlagTrackerPlugin } from './feature-flag-tracker.js';
48
- export { default as interfaceContractGuardPlugin } from './interface-contract-guard.js';
49
- export { default as licenseAuditGatePlugin } from './license-audit-gate.js';
50
- export { default as migrationPlannerPlugin } from './migration-planner.js';
51
- export { default as performanceRegressionGatePlugin } from './performance-regression-gate.js';
52
- export { default as refactorSuggesterPlugin } from './refactor-suggester.js';
53
- export { default as releaseNotesGeneratorPlugin } from './release-notes-generator.js';
54
- export { default as schemaEvolutionGuardPlugin } from './schema-evolution-guard.js';
55
- export { default as securityHotspotScannerPlugin } from './security-hotspot-scanner.js';
56
- export { default as semanticSearchIndexerPlugin } from './semantic-search-indexer.js';
57
- export { default as smartRenamePlugin } from './smart-rename.js';
58
- export { default as testFlakeDetectorPlugin } from './test-flake-detector.js';
59
- export { default as testGeneratorPlugin } from './test-generator.js';
60
- export { default as todoListenerPlugin } from './todo-listener.js';
61
- export { default as todoTrackerPlugin } from './todo-tracker.js';
62
- export { default as tokenBudgetPlugin } from './token-budget.js';
63
- export { default as tokenThrottlePlugin } from './token-throttle.js';
64
- import '@wrongstack/core';
1
+ /**
2
+ * @wrongstack/plugins Official WrongStack Plugin Suite
3
+ *
4
+ * Exported plugins (63 total; most use tools or lifecycle hooks, while
5
+ * provider-wire plugins register a full AgentExtension
6
+ * wrapProviderRunner / onError wrapping the provider call itself):
7
+ * 1. auto-doc — Auto-generates JSDoc/TSDoc (dryRun for preview)
8
+ * 2. git-autocommit — AI-powered commit messages (git_autocommit/status_summary removed)
9
+ * 3. shell-check — Runs shellcheck on files or directories (merged)
10
+ * 4. cost-tracker — Tracks LLM token usage and estimated cost per session
11
+ * 5. file-watcher — Watches project files and emits events on changes
12
+ * 6. cron — Schedules recurring tasks via extension hooks
13
+ * 7. template-engine Expands file templates with variable substitution
14
+ * 8. semver-bump — Conventional-commit-driven semver version bumps
15
+ * 9. secret-scanner — Pre+post-tool hooks that block, redact, or warn
16
+ * about plaintext credentials flowing into/out of tools
17
+ * 10. todo-tracker — Persistent, project-scoped todo backlog that
18
+ * survives across sessions
19
+ * 11. token-budget — Enforces a per-session token budget — warns at a
20
+ * threshold and stops the agent loop when the limit is hit
21
+ * 12. lint-gate — Pre-tool hook that runs biome/eslint on would-be
22
+ * file content before write or edit commits it
23
+ * 13. branch-guard — Pre-tool hook that blocks commits, pushes, and
24
+ * merges to protected branches (default: main, master)
25
+ * 14. diff-summary — Post-tool hook that injects a compact git diff
26
+ * into the LLM context after every write or edit
27
+ * 15. commit-validator Pre-tool hook that validates conventional-commit
28
+ * format before git_autocommit or bash git commit runs
29
+ * 16. format-on-save — Post-tool hook that runs biome format --write
30
+ * on the file after every write or edit
31
+ * 17. test-runner-gate Post-tool hook that runs the relevant test
32
+ * file after every write or edit to a source file
33
+ * 18. import-organizer Post-tool hook that runs biome check --write --unsafe
34
+ * on the file after write or edit, re-sorting imports
35
+ * and applying safe fixes (falls back to eslint --fix)
36
+ * 19. todo-listener — Post-tool hook on `todo` that broadcasts the new list
37
+ * to the project mailbox (api.mailbox.send) so other
38
+ * agents can see what this one is working on
39
+ * 20. session-recap — Stop hook that posts a one-page session summary
40
+ * (tokens, tool calls, commits, transcript tail) to
41
+ * the project mailbox when the agent loop ends
42
+ * 21. spec-linker — Post-tool hook on write/edit that scans markdown
43
+ * files for unlinked plugin references and surfaces
44
+ * them to the LLM via additionalContext
45
+ * 22. loop-breaker — Pre-tool hook that detects runaway tool-call loops
46
+ * (identical repeats + A-B-A-B oscillation), warns
47
+ * the model, then blocks
48
+ * 23. path-guard — Pre-tool hook that blocks writes/edits/destructive
49
+ * shell commands touching protected paths (lockfiles,
50
+ * .env, .git, migrations)
51
+ * 24. context-pins — pin_add/pin_remove/pin_list tools + system prompt
52
+ * contributor: pinned facts survive compaction and
53
+ * persist across sessions
54
+ * 25. checkpoint — In-session file snapshots: auto-captures content
55
+ * before write/edit; checkpoint_restore rolls any
56
+ * file back to a pre-edit state
57
+ * 26. error-lens — Post-tool hook that distills failed command output
58
+ * into a compact digest (error line + project stack
59
+ * frames) and flags repeated failures
60
+ * 27. dep-guard — Pre-tool hook that supervises dependency installs:
61
+ * deny list, typosquat lookalike warnings, unpinned
62
+ * version warnings
63
+ * 28. config-validator Post-tool hook that validates JSON/JSONC/YAML/TOML
64
+ * files right after write/edit and reports syntax
65
+ * problems in the same turn
66
+ * 29. notify-hub — POSTs session events (stop, tool errors, budget
67
+ * thresholds) and ad-hoc notify_send messages to a
68
+ * configurable webhook
69
+ * 30. changelog-writer — Collects session work (commits, edits, manual
70
+ * notes) and writes Keep-a-Changelog entries under
71
+ * [Unreleased] on demand
72
+ * 31. injection-shield — Post-tool hook that scans tool output for
73
+ * prompt-injection patterns and warns the model that
74
+ * content is data, not instructions
75
+ * 32. llm-cache — wrapProviderRunner: caches identical deterministic
76
+ * provider requests and short-circuits the call on a hit
77
+ * 33. model-router — wrapProviderRunner: routes each call to a different
78
+ * model by declarative size/tool rules (within the provider)
79
+ * 34. prompt-firewall — wrapProviderRunner: detects/redacts/blocks credential
80
+ * leaks on the provider wire (warn/redact/block)
81
+ * 35. auto-escalate — onError: retries with the next model in an escalation
82
+ * ladder on transient provider errors
83
+ * 36. token-throttle — wrapProviderRunner: rolling-window tokens/min budget
84
+ * that delays provider calls to stay under a rate limit
85
+ *
86
+ * New plugins (2026-07 follow-up batch):
87
+ * 37. duplicate-code-detector — Detects duplicate/similar code blocks across
88
+ * source files using normalized-line fingerprints
89
+ * 38. code-metrics — Computes lines-of-code, comment ratio, function
90
+ * count, and approximate cyclomatic complexity
91
+ * 39. refactor-suggester — Flags long functions, deep nesting, many
92
+ * parameters, magic numbers, and console.log usage
93
+ * 40. test-generator — Generates a unit-test skeleton from exported
94
+ * functions/classes in a source file
95
+ * 41. release-notes-generator — Groups conventional commits into a release
96
+ * notes markdown draft
97
+ * 42. smart-rename — Whole-word symbol rename with preview and
98
+ * optional apply
99
+ * 43. feature-flag-tracker — Scans source files for feature-flag usage and
100
+ * reports flag inventory
101
+ * 44. interface-contract-guard — Warns when TypeScript interfaces change or
102
+ * lack implementers
103
+ *
104
+ * Plugins 32–36 are OPT-IN (enabled:false by default) because they change
105
+ * provider-call semantics.
106
+ *
107
+ * Removed (use the equivalent built-in tools instead — see
108
+ * `DEPRECATED_PLUGIN_NAMES` in `packages/cli/src/wiring/plugins.ts`
109
+ * for the loader-level migration warning):
110
+ * - web-search → built-in `search` + `fetch`
111
+ * - json-path → built-in `json` tool (action: query|validate|transform|merge)
112
+ *
113
+ * Usage in WrongStack config:
114
+ * ```json
115
+ * {
116
+ * "plugins": {
117
+ * "auto-doc": { "enabled": true },
118
+ * "git-autocommit": { "conventionalCommits": true }
119
+ * }
120
+ * }
121
+ * ```
122
+ */
123
+ export { default as agentHandoffPlugin } from './agent-handoff/index.js';
124
+ export { default as autoDocPlugin } from './auto-doc/index.js';
125
+ export { default as autoEscalatePlugin } from './auto-escalate/index.js';
126
+ export { default as branchGuardPlugin } from './branch-guard/index.js';
127
+ export { default as changelogWriterPlugin } from './changelog-writer/index.js';
128
+ export { default as checkpointPlugin } from './checkpoint/index.js';
129
+ export { default as commitValidatorPlugin } from './commit-validator/index.js';
130
+ export { default as configValidatorPlugin } from './config-validator/index.js';
131
+ export { default as contextPinsPlugin } from './context-pins/index.js';
132
+ export { default as costTrackerPlugin } from './cost-tracker/index.js';
133
+ export { default as cronPlugin } from './cron/index.js';
134
+ export { default as depGuardPlugin } from './dep-guard/index.js';
135
+ export { default as diffSummaryPlugin } from './diff-summary/index.js';
136
+ export { default as errorLensPlugin } from './error-lens/index.js';
137
+ export { default as fileWatcherPlugin } from './file-watcher/index.js';
138
+ export { default as formatOnSavePlugin } from './format-on-save/index.js';
139
+ export { default as gitAutocommitPlugin } from './git-autocommit/index.js';
140
+ export { default as importOrganizerPlugin } from './import-organizer/index.js';
141
+ export { default as injectionShieldPlugin } from './injection-shield/index.js';
142
+ export { default as knowledgeGraphPlugin } from './knowledge-graph/index.js';
143
+ export { default as lintGatePlugin } from './lint-gate/index.js';
144
+ export { default as llmCachePlugin } from './llm-cache/index.js';
145
+ export { default as loopBreakerPlugin } from './loop-breaker/index.js';
146
+ export { default as modelRouterPlugin } from './model-router/index.js';
147
+ export { default as notifyHubPlugin } from './notify-hub/index.js';
148
+ export { default as pathGuardPlugin } from './path-guard/index.js';
149
+ export { default as pluginStackObserverPlugin } from './plugin-stack-observer/index.js';
150
+ export { default as prDrafterPlugin } from './pr-drafter/index.js';
151
+ export { default as promptFirewallPlugin } from './prompt-firewall/index.js';
152
+ export { default as secretScannerPlugin } from './secret-scanner/index.js';
153
+ export { default as semverBumpPlugin } from './semver-bump/index.js';
154
+ export { default as sessionRecapPlugin } from './session-recap/index.js';
155
+ export { default as shellCheckPlugin } from './shell-check/index.js';
156
+ export { default as specLinkerPlugin } from './spec-linker/index.js';
157
+ export { default as templateEnginePlugin } from './template-engine/index.js';
158
+ export { default as testCoverageGatePlugin } from './test-coverage-gate/index.js';
159
+ export { default as testRunnerGatePlugin } from './test-runner-gate/index.js';
160
+ export { default as typeGatePlugin } from './type-gate/index.js';
161
+ export { default as accessibilityAuditorPlugin } from './accessibility-auditor/index.js';
162
+ export { default as apiCompatibilityGatePlugin } from './api-compatibility-gate/index.js';
163
+ export { default as autoI18nExtractorPlugin } from './auto-i18n-extractor/index.js';
164
+ export { default as codeMetricsPlugin } from './code-metrics/index.js';
165
+ export { default as deadCodeDetectorPlugin } from './dead-code-detector/index.js';
166
+ export { default as dependencyVulnerabilityGatePlugin } from './dependency-vulnerability-gate/index.js';
167
+ export { default as docSyncGuardPlugin } from './doc-sync-guard/index.js';
168
+ export { default as duplicateCodeDetectorPlugin } from './duplicate-code-detector/index.js';
169
+ export { default as featureFlagTrackerPlugin } from './feature-flag-tracker/index.js';
170
+ export { default as interfaceContractGuardPlugin } from './interface-contract-guard/index.js';
171
+ export { default as licenseAuditGatePlugin } from './license-audit-gate/index.js';
172
+ export { default as migrationPlannerPlugin } from './migration-planner/index.js';
173
+ export { default as performanceRegressionGatePlugin } from './performance-regression-gate/index.js';
174
+ export { default as refactorSuggesterPlugin } from './refactor-suggester/index.js';
175
+ export { default as releaseNotesGeneratorPlugin } from './release-notes-generator/index.js';
176
+ export { default as schemaEvolutionGuardPlugin } from './schema-evolution-guard/index.js';
177
+ export { default as securityHotspotScannerPlugin } from './security-hotspot-scanner/index.js';
178
+ export { default as semanticSearchIndexerPlugin } from './semantic-search-indexer/index.js';
179
+ export { default as smartRenamePlugin } from './smart-rename/index.js';
180
+ export { default as testFlakeDetectorPlugin } from './test-flake-detector/index.js';
181
+ export { default as testGeneratorPlugin } from './test-generator/index.js';
182
+ export { default as todoListenerPlugin } from './todo-listener/index.js';
183
+ export { default as todoTrackerPlugin } from './todo-tracker/index.js';
184
+ export { default as tokenBudgetPlugin } from './token-budget/index.js';
185
+ export { default as tokenThrottlePlugin } from './token-throttle/index.js';
186
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}