@wrongstack/plugins 0.284.1 → 0.286.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 +10 -15
  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 +6 -7
  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 +13 -15
  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 +8 -9
  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 +6 -7
  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 +992 -454
  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 +6 -7
  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 +6 -7
  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 +16 -17
  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 +6 -6
  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 +20086 -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 +19 -20
  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
package/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # @wrongstack/plugins
2
2
 
3
3
  First-party plugin collection for [WrongStack](https://github.com/WrongStack/WrongStack).
4
- Sixty-three focused, single-purpose plugins ship in this package. Core safety
5
- plugins load automatically for every `wstack` session; provider-wire plugins
6
- are opt-in because they can change model-call semantics.
4
+ Sixty-three focused, single-purpose plugins ship in this package. Passive,
5
+ broadly applicable diagnostics and bounded safety checks load automatically;
6
+ plugins with automatic mutation, policy enforcement, network egress, background
7
+ work, or provider-call semantic changes are opt-in.
7
8
 
8
9
  ## What this is
9
10
 
@@ -15,8 +16,10 @@ exports a default `Plugin` object. The host's plugin loader
15
16
  `secret-scanner` registers `PreToolUse` + `PostToolUse` hooks).
16
17
 
17
18
  Plugins are loaded lazily by `packages/cli/src/wiring/plugins.ts`
18
- under the `BUILTIN_PLUGIN_FACTORIES` array. To opt out, add
19
- `{ name: '<plugin>', enabled: false }` to `config.plugins`.
19
+ under the `BUILTIN_PLUGIN_FACTORIES` array. The canonical default is
20
+ `PLUGIN_AUDIT_ENTRIES.defaultState`: list an inactive plugin with
21
+ `{ name: '<plugin>', enabled: true }` to opt in, or list an active plugin with
22
+ `enabled: false` to opt out.
20
23
 
21
24
  ## Plugin catalog
22
25
 
@@ -34,9 +37,9 @@ under the `BUILTIN_PLUGIN_FACTORIES` array. To opt out, add
34
37
  | 10 | [`todo-tracker`](./src/todo-tracker) | `todo_tracker_*` | — | Persistent project-scoped backlog that survives sessions |
35
38
  | 11 | [`token-budget`](./src/token-budget) | `token_budget_status` | `Stop` + `PostToolUse` | Tracks token use and can warn/stop at configured limits |
36
39
  | 12 | [`lint-gate`](./src/lint-gate) | `lint_gate_status` | `PreToolUse` | Lints would-be write/edit content before mutation |
37
- | 13 | [`branch-guard`](./src/branch-guard) | `branch_guard_status` | `PreToolUse` | Blocks or warns on commits, pushes, and merges on protected branches |
40
+ | 13 | [`branch-guard`](./src/branch-guard) | `branch_guard_status` | `PreToolUse` | Opt-in protected-branch policy for commits, pushes, and merges |
38
41
  | 14 | [`diff-summary`](./src/diff-summary) | `diff_summary_status` | `PostToolUse` | Injects compact git diff context after write/edit |
39
- | 15 | [`commit-validator`](./src/commit-validator) | `commit_validator_status` | `PreToolUse` | Validates conventional-commit messages |
42
+ | 15 | [`commit-validator`](./src/commit-validator) | `commit_validator_status` | `PreToolUse` | Opt-in conventional-commit policy |
40
43
  | 16 | [`format-on-save`](./src/format-on-save) | `format_on_save_status` | `PostToolUse` | Runs formatter after write/edit |
41
44
  | 17 | [`test-runner-gate`](./src/test-runner-gate) | `test_gate_status` | `PostToolUse` | Runs relevant tests after source edits |
42
45
  | 18 | [`import-organizer`](./src/import-organizer) | `import_organizer_status` | `PostToolUse` | Organizes imports and applies safe fixes after write/edit |
@@ -44,9 +47,9 @@ under the `BUILTIN_PLUGIN_FACTORIES` array. To opt out, add
44
47
  | 20 | [`session-recap`](./src/session-recap) | `session_recap_status` | `Stop` | Posts a compact session recap to the project mailbox |
45
48
  | 21 | [`spec-linker`](./src/spec-linker) | `spec_linker_status` | `PreToolUse` + `PostToolUse` | Detects unlinked plugin references in markdown docs |
46
49
  | 22 | [`loop-breaker`](./src/loop-breaker) | `loop_breaker_status` | `PreToolUse` | Detects repeated tool-call loops and oscillations |
47
- | 23 | [`path-guard`](./src/path-guard) | `path_guard_status` | `PreToolUse` | Guards protected paths from writes and destructive shell commands |
50
+ | 23 | [`path-guard`](./src/path-guard) | `path_guard_status` | `PreToolUse` | Opt-in protected-path policy for writes and destructive commands |
48
51
  | 24 | [`context-pins`](./src/context-pins) | `pin_add`, `pin_remove`, `pin_list` | System prompt contributor | Persists short pinned facts across compaction/session boundaries |
49
- | 25 | [`checkpoint`](./src/checkpoint) | `checkpoint_create`, `checkpoint_list`, `checkpoint_restore` | `PreToolUse` | Captures file snapshots before risky edits and restores them on demand |
52
+ | 25 | [`checkpoint`](./src/checkpoint) | `checkpoint_create`, `checkpoint_list`, `checkpoint_restore` | `PreToolUse` | Opt-in in-memory snapshots of pre-edit file contents |
50
53
  | 26 | [`error-lens`](./src/error-lens) | `error_lens_history` | `PostToolUse` | Summarizes failed tool output and repeated failure patterns |
51
54
  | 27 | [`dep-guard`](./src/dep-guard) | `dep_guard_status` | `PreToolUse` | Supervises dependency installs for deny-list and supply-chain warnings |
52
55
  | 28 | [`config-validator`](./src/config-validator) | `config_validator_status` | `PostToolUse` | Validates edited JSON/JSONC/YAML/TOML config files |
@@ -61,10 +64,10 @@ under the `BUILTIN_PLUGIN_FACTORIES` array. To opt out, add
61
64
  | 37 | [`type-gate`](./src/type-gate) | `type_gate_status` | `PostToolUse` | Runs `tsc --noEmit` after `write`/`edit` to catch type regressions |
62
65
  | 38 | [`test-coverage-gate`](./src/test-coverage-gate) | `coverage_gate_status` | `PostToolUse` | Detects test-coverage regressions after source-file edits |
63
66
  | 39 | [`pr-drafter`](./src/pr-drafter) | `pr_draft` | `Stop` + event subscriptions | Drafts a pull-request description from session commits/files/diff |
64
- | 40 | [`agent-handoff`](./src/agent-handoff) | `handoff_note`, `handoff_status` | `subagent.done` event listener | Posts structured handoff notes when subagents finish |
67
+ | 40 | [`agent-handoff`](./src/agent-handoff) | `handoff_note`, `handoff_status` | `subagent.done` event listener | Opt-in mailbox publication of subagent results |
65
68
  | 41 | [`knowledge-graph`](./src/knowledge-graph) | `kg_add_fact`, `kg_query`, `kg_remove_fact`, `kg_status` | System prompt contributor | Persistent structured (subject, relation, object) project facts |
66
69
  | 42 | [`dead-code-detector`](./src/dead-code-detector) | `dead_code_scan` | `PostToolUse` | Regex-based scan for exported identifiers that appear unused |
67
- | 43 | [`dependency-vulnerability-gate`](./src/dependency-vulnerability-gate) | `dependency_audit_status` | `PostToolUse` | Runs `npm/pnpm audit` after installs and blocks on severe vulnerabilities |
70
+ | 43 | [`dependency-vulnerability-gate`](./src/dependency-vulnerability-gate) | `dependency_audit_status` | `PostToolUse` | Opt-in blocking `npm/pnpm audit` after installs |
68
71
  | 44 | [`migration-planner`](./src/migration-planner) | `migration_plan`, `migration_status` | `PostToolUse` | Reads changelogs and produces version-migration checklists |
69
72
  | 45 | [`semantic-search-indexer`](./src/semantic-search-indexer) | `semantic_search`, `semantic_index_status` | — | Lightweight keyword index over project source files |
70
73
  | 46 | [`auto-i18n-extractor`](./src/auto-i18n-extractor) | `i18n_extract`, `i18n_status` | `PostToolUse` | Detects hardcoded user-facing strings and suggests i18n keys |
@@ -722,7 +725,7 @@ the PostToolUse context tells the LLM what to fix.
722
725
 
723
726
  **Detection rules** (both hooks):
724
727
  - Source matches `config.fileGlobs` (default: `**/*.md`, `**/*.mdx`)
725
- - The reference matches one of the 62 known plugin names
728
+ - The reference matches one of the 63 known plugin names
726
729
  (case-insensitive)
727
730
  - It is NOT already wrapped in a markdown link `[name](...)` or
728
731
  inline code `` `name` ``
@@ -1138,8 +1141,9 @@ const plugin: Plugin = {
1138
1141
  export default plugin;
1139
1142
  ```
1140
1143
 
1141
- Register the entry in `tsup.config.ts`, the subpath export in
1142
- `package.json#exports`, and the named re-export in `src/index.ts`.
1144
+ Register the subpath export in `package.json#exports` and the named re-export
1145
+ in `src/index.ts`. The centralized package builder discovers plugin entry
1146
+ points from the exports map, so no per-plugin build configuration is needed.
1143
1147
  Wire it into the CLI's `BUILTIN_PLUGIN_FACTORIES` if it should
1144
1148
  auto-load.
1145
1149
 
@@ -0,0 +1,38 @@
1
+ /**
2
+ * accessibility-auditor plugin — audits UI files for common accessibility
3
+ * issues using fast regex-based heuristics.
4
+ *
5
+ * Tools registered:
6
+ * - a11y_audit : Scan a file or directory for a11y issues.
7
+ * - a11y_status : Show config + per-session counters.
8
+ *
9
+ * Hooks registered:
10
+ * - PostToolUse with matcher `write|edit` to UI files, injecting a short
11
+ * additionalContext summary of any new accessibility issues.
12
+ *
13
+ * Config (`config.extensions['accessibility-auditor']`):
14
+ *
15
+ * ```jsonc
16
+ * {
17
+ * "enabled": true,
18
+ * "includeExtensions": [".tsx", ".jsx", ".html", ".vue"],
19
+ * "maxFindings": 50,
20
+ * "severity": "warn", // "warn" | "block"
21
+ * "onWriteEdit": true
22
+ * }
23
+ * ```
24
+ *
25
+ * @public
26
+ */
27
+ import type { Plugin } from '@wrongstack/core';
28
+ export type A11yRule = 'missing-alt' | 'missing-input-label' | 'low-contrast-placeholder' | 'missing-button-text' | 'duplicate-id';
29
+ export interface A11yFinding {
30
+ file: string;
31
+ line: number;
32
+ rule: A11yRule;
33
+ severity: 'error' | 'warning';
34
+ message: string;
35
+ }
36
+ declare const plugin: Plugin;
37
+ export default plugin;
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/accessibility-auditor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAQ/C,MAAM,MAAM,QAAQ,GAChB,aAAa,GACb,qBAAqB,GACrB,0BAA0B,GAC1B,qBAAqB,GACrB,cAAc,CAAC;AAEnB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAwSD,QAAA,MAAM,MAAM,EAAE,MA0Nb,CAAC;eAEa,MAAM"}
@@ -1,40 +1,2 @@
1
- import { Plugin } from '@wrongstack/core';
2
-
3
- /**
4
- * accessibility-auditor plugin — audits UI files for common accessibility
5
- * issues using fast regex-based heuristics.
6
- *
7
- * Tools registered:
8
- * - a11y_audit : Scan a file or directory for a11y issues.
9
- * - a11y_status : Show config + per-session counters.
10
- *
11
- * Hooks registered:
12
- * - PostToolUse with matcher `write|edit` to UI files, injecting a short
13
- * additionalContext summary of any new accessibility issues.
14
- *
15
- * Config (`config.extensions['accessibility-auditor']`):
16
- *
17
- * ```jsonc
18
- * {
19
- * "enabled": true,
20
- * "includeExtensions": [".tsx", ".jsx", ".html", ".vue"],
21
- * "maxFindings": 50,
22
- * "severity": "warn", // "warn" | "block"
23
- * "onWriteEdit": true
24
- * }
25
- * ```
26
- *
27
- * @public
28
- */
29
-
30
- type A11yRule = 'missing-alt' | 'missing-input-label' | 'low-contrast-placeholder' | 'missing-button-text' | 'duplicate-id';
31
- interface A11yFinding {
32
- file: string;
33
- line: number;
34
- rule: A11yRule;
35
- severity: 'error' | 'warning';
36
- message: string;
37
- }
38
- declare const plugin: Plugin;
39
-
40
- export { type A11yFinding, type A11yRule, plugin as default };
1
+ export * from './accessibility-auditor/index.js';
2
+ export { default } from './accessibility-auditor/index.js';
@@ -1,7 +1,6 @@
1
- import { existsSync, statSync, readFileSync, readdirSync } from 'fs';
2
- import { isAbsolute, resolve, relative } from 'path';
3
-
4
1
  // src/accessibility-auditor/index.ts
2
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
3
+ import { isAbsolute, relative, resolve } from "node:path";
5
4
  var API_VERSION = "^0.1.10";
6
5
  var state = {
7
6
  auditCount: 0,
@@ -120,24 +119,21 @@ function auditFile(filePath, projectRoot) {
120
119
  for (let i = 0; i < lines.length; i++) {
121
120
  const line = lines[i];
122
121
  const lineNo = i + 1;
123
- let idMatch;
124
- while ((idMatch = ATTR_ID.exec(line)) !== null) {
122
+ for (const idMatch of line.matchAll(ATTR_ID)) {
125
123
  const id = idMatch[1];
126
124
  const list = idsByValue.get(id) ?? [];
127
125
  list.push(lineNo);
128
126
  idsByValue.set(id, list);
129
127
  }
130
128
  ATTR_ID.lastIndex = 0;
131
- let imgMatch;
132
- while ((imgMatch = TAG_IMG.exec(line)) !== null) {
129
+ for (const imgMatch of line.matchAll(TAG_IMG)) {
133
130
  const tag = imgMatch[0];
134
131
  if (!hasMeaningfulAlt(tag)) {
135
132
  add(lineNo, "missing-alt", "error", "<img> is missing meaningful alt text");
136
133
  }
137
134
  }
138
135
  TAG_IMG.lastIndex = 0;
139
- let inputMatch;
140
- while ((inputMatch = TAG_INPUT.exec(line)) !== null) {
136
+ for (const inputMatch of line.matchAll(TAG_INPUT)) {
141
137
  const tag = inputMatch[0];
142
138
  const typeMatch = tag.match(/\btype\s*=\s*["']?([^"'\s>]*)["']?/i);
143
139
  const type = typeMatch ? typeMatch[1].toLowerCase() : "text";
@@ -162,8 +158,7 @@ function auditFile(filePath, projectRoot) {
162
158
  }
163
159
  }
164
160
  TAG_INPUT.lastIndex = 0;
165
- let buttonMatch;
166
- while ((buttonMatch = TAG_BUTTON.exec(line)) !== null) {
161
+ for (const buttonMatch of line.matchAll(TAG_BUTTON)) {
167
162
  const tag = buttonMatch[0];
168
163
  const inner = buttonMatch[1] ?? "";
169
164
  const hasText = inner.replace(/\s+/g, "").length > 0;
@@ -174,8 +169,7 @@ function auditFile(filePath, projectRoot) {
174
169
  }
175
170
  }
176
171
  TAG_BUTTON.lastIndex = 0;
177
- let inputButtonMatch;
178
- while ((inputButtonMatch = INPUT_BUTTON.exec(line)) !== null) {
172
+ for (const inputButtonMatch of line.matchAll(INPUT_BUTTON)) {
179
173
  const tag = inputButtonMatch[0];
180
174
  if (!ATTR_VALUE.test(tag) && !ATTR_ARIA_LABEL.test(tag) && !ATTR_TITLE.test(tag)) {
181
175
  add(lineNo, "missing-button-text", "error", `<input type="${inputButtonMatch[1]}"> is missing value/aria-label/title`);
@@ -407,5 +401,6 @@ var plugin = {
407
401
  }
408
402
  };
409
403
  var accessibility_auditor_default = plugin;
410
-
411
- export { accessibility_auditor_default as default };
404
+ export {
405
+ accessibility_auditor_default as default
406
+ };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * agent-handoff plugin — turns subagent completions into structured
3
+ * handoff notes for the next agent.
4
+ *
5
+ * When a subagent finishes (`subagent.done` event), this plugin extracts
6
+ * its identity, task, result, and any todo context, then posts a compact
7
+ * mailbox message addressed to the parent/leader agent so the next
8
+ * worker or the leader can pick up where it left off.
9
+ *
10
+ * Tools registered:
11
+ * - handoff_note : Manually compose and send a handoff note.
12
+ * - handoff_status : Counters + last handoff id.
13
+ *
14
+ * Events subscribed:
15
+ * - `subagent.done`
16
+ *
17
+ * Config (`config.extensions['agent-handoff']`):
18
+ *
19
+ * ```jsonc
20
+ * {
21
+ * "enabled": true,
22
+ * "subjectPrefix": "handoff: ",
23
+ * "includeResult": true,
24
+ * "includeTodos": true,
25
+ * "maxBodyChars": 4000,
26
+ * "to": "leader" // default recipient alias
27
+ * }
28
+ * ```
29
+ *
30
+ * @public
31
+ */
32
+ import type { Plugin } from '@wrongstack/core';
33
+ declare const plugin: Plugin;
34
+ export default plugin;
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-handoff/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAA6B,MAAM,kBAAkB,CAAC;AAwK1E,QAAA,MAAM,MAAM,EAAE,MAsNb,CAAC;eAEa,MAAM"}
@@ -1,37 +1,2 @@
1
- import { Plugin } from '@wrongstack/core';
2
-
3
- /**
4
- * agent-handoff plugin — turns subagent completions into structured
5
- * handoff notes for the next agent.
6
- *
7
- * When a subagent finishes (`subagent.done` event), this plugin extracts
8
- * its identity, task, result, and any todo context, then posts a compact
9
- * mailbox message addressed to the parent/leader agent so the next
10
- * worker or the leader can pick up where it left off.
11
- *
12
- * Tools registered:
13
- * - handoff_note : Manually compose and send a handoff note.
14
- * - handoff_status : Counters + last handoff id.
15
- *
16
- * Events subscribed:
17
- * - `subagent.done`
18
- *
19
- * Config (`config.extensions['agent-handoff']`):
20
- *
21
- * ```jsonc
22
- * {
23
- * "enabled": true,
24
- * "subjectPrefix": "handoff: ",
25
- * "includeResult": true,
26
- * "includeTodos": true,
27
- * "maxBodyChars": 4000,
28
- * "to": "leader" // default recipient alias
29
- * }
30
- * ```
31
- *
32
- * @public
33
- */
34
-
35
- declare const plugin: Plugin;
36
-
37
- export { plugin as default };
1
+ export * from './agent-handoff/index.js';
2
+ export { default } from './agent-handoff/index.js';
@@ -294,5 +294,6 @@ var plugin = {
294
294
  }
295
295
  };
296
296
  var agent_handoff_default = plugin;
297
-
298
- export { agent_handoff_default as default };
297
+ export {
298
+ agent_handoff_default as default
299
+ };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * api-compatibility-gate plugin — guards public API surface changes.
3
+ *
4
+ * Registers a PostToolUse hook on `write|edit` to entry-point files
5
+ * (`index.ts`, `src/index.ts`, or package `main`/`module`/`exports`
6
+ * targets). For each such edit it reads the previous version from git
7
+ * (`git show HEAD:<path>`), parses exported identifiers with simple
8
+ * regex heuristics, and reports any removed exports as breaking changes.
9
+ *
10
+ * Tools registered:
11
+ * - api_compat_status : Show config + per-session counters.
12
+ *
13
+ * Hooks registered:
14
+ * - PostToolUse with matcher `write|edit`.
15
+ *
16
+ * Config (`config.extensions['api-compatibility-gate']`):
17
+ *
18
+ * ```jsonc
19
+ * {
20
+ * "enabled": true,
21
+ * "severity": "warn", // "warn" | "block"
22
+ * "entryPointPatterns": [ // glob-style patterns
23
+ * "**&#47;index.ts",
24
+ * "**&#47;index.js",
25
+ * "**&#47;src/index.ts"
26
+ * ],
27
+ * "trackGitHistory": true // read pre-edit source from git
28
+ * }
29
+ * ```
30
+ *
31
+ * @public
32
+ */
33
+ import type { Plugin } from '@wrongstack/core';
34
+ declare const plugin: Plugin;
35
+ export default plugin;
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api-compatibility-gate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAkR/C,QAAA,MAAM,MAAM,EAAE,MA6Mb,CAAC;eAEa,MAAM"}
@@ -1,38 +1,2 @@
1
- import { Plugin } from '@wrongstack/core';
2
-
3
- /**
4
- * api-compatibility-gate plugin — guards public API surface changes.
5
- *
6
- * Registers a PostToolUse hook on `write|edit` to entry-point files
7
- * (`index.ts`, `src/index.ts`, or package `main`/`module`/`exports`
8
- * targets). For each such edit it reads the previous version from git
9
- * (`git show HEAD:<path>`), parses exported identifiers with simple
10
- * regex heuristics, and reports any removed exports as breaking changes.
11
- *
12
- * Tools registered:
13
- * - api_compat_status : Show config + per-session counters.
14
- *
15
- * Hooks registered:
16
- * - PostToolUse with matcher `write|edit`.
17
- *
18
- * Config (`config.extensions['api-compatibility-gate']`):
19
- *
20
- * ```jsonc
21
- * {
22
- * "enabled": true,
23
- * "severity": "warn", // "warn" | "block"
24
- * "entryPointPatterns": [ // glob-style patterns
25
- * "**&#47;index.ts",
26
- * "**&#47;index.js",
27
- * "**&#47;src/index.ts"
28
- * ],
29
- * "trackGitHistory": true // read pre-edit source from git
30
- * }
31
- * ```
32
- *
33
- * @public
34
- */
35
-
36
- declare const plugin: Plugin;
37
-
38
- export { plugin as default };
1
+ export * from './api-compatibility-gate/index.js';
2
+ export { default } from './api-compatibility-gate/index.js';
@@ -1,8 +1,7 @@
1
- import { execFileSync } from 'child_process';
2
- import { readFileSync, existsSync } from 'fs';
3
- import { relative, isAbsolute, dirname, resolve, basename, extname } from 'path';
4
-
5
1
  // src/api-compatibility-gate/index.ts
2
+ import { execFileSync } from "node:child_process";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { basename, dirname, extname, isAbsolute, relative, resolve } from "node:path";
6
5
  var API_VERSION = "^0.1.10";
7
6
  var state = {
8
7
  invocationCount: 0,
@@ -353,5 +352,6 @@ var plugin = {
353
352
  }
354
353
  };
355
354
  var api_compatibility_gate_default = plugin;
356
-
357
- export { api_compatibility_gate_default as default };
355
+ export {
356
+ api_compatibility_gate_default as default
357
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * auto-doc plugin — Auto-generates JSDoc/TSDoc comments for source files.
3
+ *
4
+ * Tools registered:
5
+ * - auto_doc: Generate and inject doc comments into JS/TS files.
6
+ * Pass `dry_run: true` to preview without writing (replaces the former
7
+ * `auto_doc (dry_run)` tool).
8
+ *
9
+ * LLM mode (opt-in): with `config.extensions['auto-doc'].useLlm = true`
10
+ * (or per-call `use_llm: true`) and a host that wires `api.llm`, each
11
+ * doc comment's prose is written by the LLM from the entity's signature
12
+ * and body instead of the `TODO: describe …` placeholder. Provider/model
13
+ * follow the plugin's `config.extensions['auto-doc'].llm` override, then
14
+ * the session default. Best-effort: any LLM failure (or a bad response)
15
+ * falls back to the template for that entity — a doc comment always lands.
16
+ */
17
+ import type { Plugin } from '@wrongstack/core';
18
+ declare const plugin: Plugin;
19
+ export default plugin;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auto-doc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,kBAAkB,CAAC;AA4W1D,QAAA,MAAM,MAAM,EAAE,MAqIb,CAAC;eAEa,MAAM"}
@@ -1,22 +1,2 @@
1
- import { Plugin } from '@wrongstack/core';
2
-
3
- /**
4
- * auto-doc plugin — Auto-generates JSDoc/TSDoc comments for source files.
5
- *
6
- * Tools registered:
7
- * - auto_doc: Generate and inject doc comments into JS/TS files.
8
- * Pass `dry_run: true` to preview without writing (replaces the former
9
- * `auto_doc (dry_run)` tool).
10
- *
11
- * LLM mode (opt-in): with `config.extensions['auto-doc'].useLlm = true`
12
- * (or per-call `use_llm: true`) and a host that wires `api.llm`, each
13
- * doc comment's prose is written by the LLM from the entity's signature
14
- * and body instead of the `TODO: describe …` placeholder. Provider/model
15
- * follow the plugin's `config.extensions['auto-doc'].llm` override, then
16
- * the session default. Best-effort: any LLM failure (or a bad response)
17
- * falls back to the template for that entity — a doc comment always lands.
18
- */
19
-
20
- declare const plugin: Plugin;
21
-
22
- export { plugin as default };
1
+ export * from './auto-doc/index.js';
2
+ export { default } from './auto-doc/index.js';
package/dist/auto-doc.js CHANGED
@@ -1,6 +1,5 @@
1
- import { resolve, isAbsolute, relative } from 'path';
2
-
3
1
  // src/auto-doc/index.ts
2
+ import { isAbsolute, relative, resolve } from "node:path";
4
3
  var AUTO_DOC_API_VERSION = "^0.1.10";
5
4
  function resolveProjectPath(rawPath, cwd = process.cwd()) {
6
5
  if (typeof rawPath !== "string" || rawPath.length === 0) return null;
@@ -187,7 +186,7 @@ async function runAutoDoc(input, api) {
187
186
  continue;
188
187
  }
189
188
  try {
190
- const { readFileSync, writeFileSync } = await import('fs');
189
+ const { readFileSync, writeFileSync } = await import("node:fs");
191
190
  let content;
192
191
  try {
193
192
  content = readFileSync(safeFile, "utf-8");
@@ -347,5 +346,6 @@ var plugin = {
347
346
  }
348
347
  };
349
348
  var auto_doc_default = plugin;
350
-
351
- export { auto_doc_default as default };
349
+ export {
350
+ auto_doc_default as default
351
+ };
@@ -0,0 +1,43 @@
1
+ /**
2
+ * auto-escalate plugin — turns transient provider errors into a graceful
3
+ * model-escalation ladder instead of a hard failure.
4
+ *
5
+ * Registers an `AgentExtension.onError` hook (wired at agent-loop.ts:636).
6
+ * When a provider call fails with a retryable error (overload, rate
7
+ * limit, timeout, 5xx), the plugin asks the agent loop to retry the turn
8
+ * with the NEXT model in a configured escalation ladder — e.g. a busy
9
+ * fast model escalates to a more capable one that may have spare
10
+ * capacity. On a non-retryable error, or once the ladder is exhausted,
11
+ * it steps aside (returns nothing) so the host's built-in error recovery
12
+ * runs unchanged.
13
+ *
14
+ * Loop constraint: the agent loop caps recovery retries at 2 per turn
15
+ * (agent-loop.ts), so at most the first ~2 rungs of the ladder are used
16
+ * before the loop fails. Order the ladder cheapest→most-capable.
17
+ *
18
+ * Safety posture: opt-in — loads inert until
19
+ * `config.extensions['auto-escalate'].enabled = true`. It never forces a
20
+ * `fail`; it only requests retries with a better model, and otherwise
21
+ * defers to the default handler.
22
+ *
23
+ * Config (`config.extensions['auto-escalate']`):
24
+ *
25
+ * ```jsonc
26
+ * {
27
+ * "enabled": false,
28
+ * "escalation": ["provider/model-standard", "provider/model-premium"],
29
+ * "retryablePatterns": ["overload", "rate.?limit", "429", "50[023]", "timeout", "ETIMEDOUT", "ECONNRESET"]
30
+ * }
31
+ * ```
32
+ *
33
+ * Tools:
34
+ * - `auto_escalate_status` — ladder, patterns, and escalation counters
35
+ *
36
+ * @public
37
+ */
38
+ import type { Plugin } from '@wrongstack/core';
39
+ export declare function errorText(err: unknown): string;
40
+ export declare function isRetryable(text: string, patterns: RegExp[]): boolean;
41
+ declare const plugin: Plugin;
42
+ export default plugin;
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auto-escalate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,kBAAkB,CAAC;AAgF1D,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQ9C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAErE;AAMD,QAAA,MAAM,MAAM,EAAE,MAkJb,CAAC;eAEa,MAAM"}
@@ -1,45 +1,2 @@
1
- import { Plugin } from '@wrongstack/core';
2
-
3
- /**
4
- * auto-escalate plugin — turns transient provider errors into a graceful
5
- * model-escalation ladder instead of a hard failure.
6
- *
7
- * Registers an `AgentExtension.onError` hook (wired at agent-loop.ts:636).
8
- * When a provider call fails with a retryable error (overload, rate
9
- * limit, timeout, 5xx), the plugin asks the agent loop to retry the turn
10
- * with the NEXT model in a configured escalation ladder — e.g. a busy
11
- * fast model escalates to a more capable one that may have spare
12
- * capacity. On a non-retryable error, or once the ladder is exhausted,
13
- * it steps aside (returns nothing) so the host's built-in error recovery
14
- * runs unchanged.
15
- *
16
- * Loop constraint: the agent loop caps recovery retries at 2 per turn
17
- * (agent-loop.ts), so at most the first ~2 rungs of the ladder are used
18
- * before the loop fails. Order the ladder cheapest→most-capable.
19
- *
20
- * Safety posture: opt-in — loads inert until
21
- * `config.extensions['auto-escalate'].enabled = true`. It never forces a
22
- * `fail`; it only requests retries with a better model, and otherwise
23
- * defers to the default handler.
24
- *
25
- * Config (`config.extensions['auto-escalate']`):
26
- *
27
- * ```jsonc
28
- * {
29
- * "enabled": false,
30
- * "escalation": ["provider/model-standard", "provider/model-premium"],
31
- * "retryablePatterns": ["overload", "rate.?limit", "429", "50[023]", "timeout", "ETIMEDOUT", "ECONNRESET"]
32
- * }
33
- * ```
34
- *
35
- * Tools:
36
- * - `auto_escalate_status` — ladder, patterns, and escalation counters
37
- *
38
- * @public
39
- */
40
-
41
- declare function errorText(err: unknown): string;
42
- declare function isRetryable(text: string, patterns: RegExp[]): boolean;
43
- declare const plugin: Plugin;
44
-
45
- export { plugin as default, errorText, isRetryable };
1
+ export * from './auto-escalate/index.js';
2
+ export { default } from './auto-escalate/index.js';
@@ -186,5 +186,8 @@ var plugin = {
186
186
  }
187
187
  };
188
188
  var auto_escalate_default = plugin;
189
-
190
- export { auto_escalate_default as default, errorText, isRetryable };
189
+ export {
190
+ auto_escalate_default as default,
191
+ errorText,
192
+ isRetryable
193
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * auto-i18n-extractor plugin — detects hardcoded user-facing strings in UI
3
+ * source files and suggests translation keys.
4
+ *
5
+ * Tools registered:
6
+ * - i18n_extract : Scan a file/directory path for extractable strings.
7
+ * - i18n_status : Show config + per-session counters.
8
+ *
9
+ * Hooks registered:
10
+ * - PostToolUse with matcher `write|edit` for `.tsx`, `.jsx`, `.vue` files.
11
+ * Scans the written file and injects a short additionalContext with
12
+ * suggested i18n keys when user-facing string literals are found.
13
+ *
14
+ * Config (`config.extensions['auto-i18n-extractor']`):
15
+ *
16
+ * ```jsonc
17
+ * {
18
+ * "enabled": true,
19
+ * "fileExtensions": [".tsx", ".jsx", ".vue"],
20
+ * "minLength": 2,
21
+ * "maxContextStrings": 10,
22
+ * "excludeAttributes": [
23
+ * "className", "class", "testId", "data-testid",
24
+ * "aria-label", "aria-labelledby", "key", "id", "name", "htmlFor"
25
+ * ]
26
+ * }
27
+ * ```
28
+ *
29
+ * @public
30
+ */
31
+ import type { Plugin } from '@wrongstack/core';
32
+ declare const plugin: Plugin;
33
+ export default plugin;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auto-i18n-extractor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAgL/C,QAAA,MAAM,MAAM,EAAE,MAsQb,CAAC;eAEa,MAAM"}