@sentry/warden 0.1.1 → 0.3.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 (589) hide show
  1. package/dist/cli/commands/init.d.ts.map +1 -1
  2. package/dist/cli/commands/init.js +36 -2
  3. package/dist/cli/commands/init.js.map +1 -1
  4. package/dist/cli/commands/setup-app/manifest.d.ts.map +1 -1
  5. package/dist/cli/commands/setup-app/manifest.js +3 -1
  6. package/dist/cli/commands/setup-app/manifest.js.map +1 -1
  7. package/dist/cli/commands/setup-app.js +1 -1
  8. package/dist/cli/commands/setup-app.js.map +1 -1
  9. package/dist/cli/diff-apply.d.ts +15 -0
  10. package/dist/cli/diff-apply.d.ts.map +1 -0
  11. package/dist/cli/diff-apply.js +69 -0
  12. package/dist/cli/diff-apply.js.map +1 -0
  13. package/dist/cli/files.d.ts +11 -1
  14. package/dist/cli/files.d.ts.map +1 -1
  15. package/dist/cli/files.js +145 -4
  16. package/dist/cli/files.js.map +1 -1
  17. package/dist/cli/fix.d.ts +1 -5
  18. package/dist/cli/fix.d.ts.map +1 -1
  19. package/dist/cli/fix.js +3 -62
  20. package/dist/cli/fix.js.map +1 -1
  21. package/dist/cli/git.d.ts.map +1 -1
  22. package/dist/cli/git.js +5 -9
  23. package/dist/cli/git.js.map +1 -1
  24. package/dist/cli/index.js +0 -0
  25. package/dist/cli/output/tasks.d.ts.map +1 -1
  26. package/dist/cli/output/tasks.js +5 -1
  27. package/dist/cli/output/tasks.js.map +1 -1
  28. package/dist/config/schema.d.ts.map +1 -1
  29. package/dist/config/schema.js +15 -1
  30. package/dist/config/schema.js.map +1 -1
  31. package/dist/diff/coalesce.d.ts +32 -2
  32. package/dist/diff/coalesce.d.ts.map +1 -1
  33. package/dist/diff/coalesce.js +174 -2
  34. package/dist/diff/coalesce.js.map +1 -1
  35. package/dist/output/dedup.d.ts +7 -4
  36. package/dist/output/dedup.d.ts.map +1 -1
  37. package/dist/output/dedup.js +48 -12
  38. package/dist/output/dedup.js.map +1 -1
  39. package/dist/output/renderer.d.ts.map +1 -1
  40. package/dist/output/renderer.js +52 -7
  41. package/dist/output/renderer.js.map +1 -1
  42. package/dist/output/stale.d.ts.map +1 -1
  43. package/dist/output/stale.js +7 -0
  44. package/dist/output/stale.js.map +1 -1
  45. package/dist/output/types.d.ts +15 -1
  46. package/dist/output/types.d.ts.map +1 -1
  47. package/dist/sdk/analyze.d.ts +18 -0
  48. package/dist/sdk/analyze.d.ts.map +1 -0
  49. package/dist/sdk/analyze.js +421 -0
  50. package/dist/sdk/analyze.js.map +1 -0
  51. package/dist/sdk/errors.d.ts +23 -0
  52. package/dist/sdk/errors.d.ts.map +1 -0
  53. package/dist/sdk/errors.js +74 -0
  54. package/dist/sdk/errors.js.map +1 -0
  55. package/dist/sdk/extract.d.ts +44 -0
  56. package/dist/sdk/extract.d.ts.map +1 -0
  57. package/dist/sdk/extract.js +224 -0
  58. package/dist/sdk/extract.js.map +1 -0
  59. package/dist/sdk/prepare.d.ts +13 -0
  60. package/dist/sdk/prepare.d.ts.map +1 -0
  61. package/dist/sdk/prepare.js +73 -0
  62. package/dist/sdk/prepare.js.map +1 -0
  63. package/dist/sdk/prompt.d.ts +30 -0
  64. package/dist/sdk/prompt.d.ts.map +1 -0
  65. package/dist/sdk/prompt.js +109 -0
  66. package/dist/sdk/prompt.js.map +1 -0
  67. package/dist/sdk/retry.d.ts +12 -0
  68. package/dist/sdk/retry.d.ts.map +1 -0
  69. package/dist/sdk/retry.js +31 -0
  70. package/dist/sdk/retry.js.map +1 -0
  71. package/dist/sdk/runner.d.ts +22 -199
  72. package/dist/sdk/runner.d.ts.map +1 -1
  73. package/dist/sdk/runner.js +26 -884
  74. package/dist/sdk/runner.js.map +1 -1
  75. package/dist/sdk/types.d.ts +127 -0
  76. package/dist/sdk/types.d.ts.map +1 -0
  77. package/dist/sdk/types.js +5 -0
  78. package/dist/sdk/types.js.map +1 -0
  79. package/dist/sdk/usage.d.ts +20 -0
  80. package/dist/sdk/usage.d.ts.map +1 -0
  81. package/dist/sdk/usage.js +44 -0
  82. package/dist/sdk/usage.js.map +1 -0
  83. package/dist/skills/remote.d.ts.map +1 -1
  84. package/dist/skills/remote.js +3 -7
  85. package/dist/skills/remote.js.map +1 -1
  86. package/dist/types/index.d.ts +1 -0
  87. package/dist/types/index.d.ts.map +1 -1
  88. package/dist/types/index.js +2 -0
  89. package/dist/types/index.js.map +1 -1
  90. package/dist/utils/exec.d.ts +61 -0
  91. package/dist/utils/exec.d.ts.map +1 -0
  92. package/dist/utils/exec.js +111 -0
  93. package/dist/utils/exec.js.map +1 -0
  94. package/dist/utils/index.d.ts +2 -0
  95. package/dist/utils/index.d.ts.map +1 -1
  96. package/dist/utils/index.js +1 -0
  97. package/dist/utils/index.js.map +1 -1
  98. package/package.json +15 -16
  99. package/.agents/skills/find-bugs/SKILL.md +0 -75
  100. package/.agents/skills/vercel-react-best-practices/AGENTS.md +0 -2934
  101. package/.agents/skills/vercel-react-best-practices/SKILL.md +0 -136
  102. package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  103. package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  104. package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  105. package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  106. package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
  107. package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  108. package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
  109. package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  110. package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
  111. package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  112. package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  113. package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  114. package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  115. package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  116. package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  117. package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  118. package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  119. package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  120. package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  121. package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  122. package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  123. package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  124. package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  125. package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  126. package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  127. package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  128. package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  129. package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  130. package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  131. package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  132. package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  133. package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  134. package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  135. package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  136. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  137. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  138. package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  139. package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  140. package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  141. package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  142. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  143. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  144. package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  145. package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  146. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  147. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  148. package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  149. package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  150. package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  151. package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  152. package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  153. package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  154. package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  155. package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  156. package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  157. package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  158. package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
  159. package/.claude/settings.json +0 -57
  160. package/.claude/skills/agent-prompt/SKILL.md +0 -54
  161. package/.claude/skills/agent-prompt/references/agentic-patterns.md +0 -94
  162. package/.claude/skills/agent-prompt/references/anti-patterns.md +0 -140
  163. package/.claude/skills/agent-prompt/references/context-design.md +0 -124
  164. package/.claude/skills/agent-prompt/references/core-principles.md +0 -75
  165. package/.claude/skills/agent-prompt/references/model-guidance.md +0 -118
  166. package/.claude/skills/agent-prompt/references/output-formats.md +0 -98
  167. package/.claude/skills/agent-prompt/references/skill-structure.md +0 -115
  168. package/.claude/skills/agent-prompt/references/system-prompts.md +0 -115
  169. package/.claude/skills/notseer/SKILL.md +0 -131
  170. package/.claude/skills/skill-writer/SKILL.md +0 -140
  171. package/.claude/skills/testing-guidelines/SKILL.md +0 -132
  172. package/.claude/skills/warden-skill/SKILL.md +0 -226
  173. package/.claude/skills/warden-skill/references/config-schema.md +0 -116
  174. package/.dex/config.toml +0 -2
  175. package/.github/workflows/ci.yml +0 -33
  176. package/.github/workflows/release.yml +0 -59
  177. package/.github/workflows/warden.yml +0 -40
  178. package/AGENTS.md +0 -89
  179. package/CONTRIBUTING.md +0 -60
  180. package/SPEC.md +0 -263
  181. package/action.yml +0 -87
  182. package/assets/favicon.png +0 -0
  183. package/assets/warden-icon-bw.svg +0 -5
  184. package/assets/warden-icon-purple.png +0 -0
  185. package/assets/warden-icon-purple.svg +0 -5
  186. package/dist/action/159.index.js +0 -523
  187. package/dist/action/159.index.js.map +0 -1
  188. package/dist/action/action/index.d.ts +0 -2
  189. package/dist/action/action/index.d.ts.map +0 -1
  190. package/dist/action/action/main.d.ts +0 -2
  191. package/dist/action/action/main.d.ts.map +0 -1
  192. package/dist/action/cli/args.d.ts +0 -74
  193. package/dist/action/cli/args.d.ts.map +0 -1
  194. package/dist/action/cli/args.test.d.ts +0 -2
  195. package/dist/action/cli/args.test.d.ts.map +0 -1
  196. package/dist/action/cli/commands/add.d.ts +0 -7
  197. package/dist/action/cli/commands/add.d.ts.map +0 -1
  198. package/dist/action/cli/commands/init.d.ts +0 -10
  199. package/dist/action/cli/commands/init.d.ts.map +0 -1
  200. package/dist/action/cli/commands/init.test.d.ts +0 -2
  201. package/dist/action/cli/commands/init.test.d.ts.map +0 -1
  202. package/dist/action/cli/commands/setup-app/browser.d.ts +0 -9
  203. package/dist/action/cli/commands/setup-app/browser.d.ts.map +0 -1
  204. package/dist/action/cli/commands/setup-app/credentials.d.ts +0 -15
  205. package/dist/action/cli/commands/setup-app/credentials.d.ts.map +0 -1
  206. package/dist/action/cli/commands/setup-app/manifest.d.ts +0 -24
  207. package/dist/action/cli/commands/setup-app/manifest.d.ts.map +0 -1
  208. package/dist/action/cli/commands/setup-app/server.d.ts +0 -28
  209. package/dist/action/cli/commands/setup-app/server.d.ts.map +0 -1
  210. package/dist/action/cli/commands/setup-app.d.ts +0 -11
  211. package/dist/action/cli/commands/setup-app.d.ts.map +0 -1
  212. package/dist/action/cli/commands/sync.d.ts +0 -9
  213. package/dist/action/cli/commands/sync.d.ts.map +0 -1
  214. package/dist/action/cli/context.d.ts +0 -27
  215. package/dist/action/cli/context.d.ts.map +0 -1
  216. package/dist/action/cli/files.d.ts +0 -22
  217. package/dist/action/cli/files.d.ts.map +0 -1
  218. package/dist/action/cli/files.test.d.ts +0 -2
  219. package/dist/action/cli/files.test.d.ts.map +0 -1
  220. package/dist/action/cli/fix.d.ts +0 -41
  221. package/dist/action/cli/fix.d.ts.map +0 -1
  222. package/dist/action/cli/fix.test.d.ts +0 -2
  223. package/dist/action/cli/fix.test.d.ts.map +0 -1
  224. package/dist/action/cli/git.d.ts +0 -73
  225. package/dist/action/cli/git.d.ts.map +0 -1
  226. package/dist/action/cli/git.test.d.ts +0 -2
  227. package/dist/action/cli/git.test.d.ts.map +0 -1
  228. package/dist/action/cli/index.d.ts +0 -3
  229. package/dist/action/cli/index.d.ts.map +0 -1
  230. package/dist/action/cli/main.d.ts +0 -7
  231. package/dist/action/cli/main.d.ts.map +0 -1
  232. package/dist/action/cli/output/box.d.ts +0 -75
  233. package/dist/action/cli/output/box.d.ts.map +0 -1
  234. package/dist/action/cli/output/formatters.d.ts +0 -90
  235. package/dist/action/cli/output/formatters.d.ts.map +0 -1
  236. package/dist/action/cli/output/formatters.test.d.ts +0 -2
  237. package/dist/action/cli/output/formatters.test.d.ts.map +0 -1
  238. package/dist/action/cli/output/icons.d.ts +0 -15
  239. package/dist/action/cli/output/icons.d.ts.map +0 -1
  240. package/dist/action/cli/output/index.d.ts +0 -10
  241. package/dist/action/cli/output/index.d.ts.map +0 -1
  242. package/dist/action/cli/output/ink-runner.d.ts +0 -29
  243. package/dist/action/cli/output/ink-runner.d.ts.map +0 -1
  244. package/dist/action/cli/output/jsonl.d.ts +0 -43
  245. package/dist/action/cli/output/jsonl.d.ts.map +0 -1
  246. package/dist/action/cli/output/jsonl.test.d.ts +0 -2
  247. package/dist/action/cli/output/jsonl.test.d.ts.map +0 -1
  248. package/dist/action/cli/output/reporter.d.ts +0 -108
  249. package/dist/action/cli/output/reporter.d.ts.map +0 -1
  250. package/dist/action/cli/output/tasks.d.ts +0 -89
  251. package/dist/action/cli/output/tasks.d.ts.map +0 -1
  252. package/dist/action/cli/output/tty.d.ts +0 -21
  253. package/dist/action/cli/output/tty.d.ts.map +0 -1
  254. package/dist/action/cli/output/tty.test.d.ts +0 -2
  255. package/dist/action/cli/output/tty.test.d.ts.map +0 -1
  256. package/dist/action/cli/output/verbosity.d.ts +0 -20
  257. package/dist/action/cli/output/verbosity.d.ts.map +0 -1
  258. package/dist/action/cli/output/verbosity.test.d.ts +0 -2
  259. package/dist/action/cli/output/verbosity.test.d.ts.map +0 -1
  260. package/dist/action/cli/terminal.d.ts +0 -19
  261. package/dist/action/cli/terminal.d.ts.map +0 -1
  262. package/dist/action/cli/terminal.test.d.ts +0 -2
  263. package/dist/action/cli/terminal.test.d.ts.map +0 -1
  264. package/dist/action/config/index.d.ts +0 -4
  265. package/dist/action/config/index.d.ts.map +0 -1
  266. package/dist/action/config/loader.d.ts +0 -27
  267. package/dist/action/config/loader.d.ts.map +0 -1
  268. package/dist/action/config/loader.test.d.ts +0 -2
  269. package/dist/action/config/loader.test.d.ts.map +0 -1
  270. package/dist/action/config/schema.d.ts +0 -318
  271. package/dist/action/config/schema.d.ts.map +0 -1
  272. package/dist/action/config/writer.d.ts +0 -11
  273. package/dist/action/config/writer.d.ts.map +0 -1
  274. package/dist/action/config/writer.test.d.ts +0 -2
  275. package/dist/action/config/writer.test.d.ts.map +0 -1
  276. package/dist/action/diff/classify.d.ts +0 -29
  277. package/dist/action/diff/classify.d.ts.map +0 -1
  278. package/dist/action/diff/classify.test.d.ts +0 -2
  279. package/dist/action/diff/classify.test.d.ts.map +0 -1
  280. package/dist/action/diff/coalesce.d.ts +0 -42
  281. package/dist/action/diff/coalesce.d.ts.map +0 -1
  282. package/dist/action/diff/coalesce.test.d.ts +0 -2
  283. package/dist/action/diff/coalesce.test.d.ts.map +0 -1
  284. package/dist/action/diff/context.d.ts +0 -30
  285. package/dist/action/diff/context.d.ts.map +0 -1
  286. package/dist/action/diff/context.test.d.ts +0 -2
  287. package/dist/action/diff/context.test.d.ts.map +0 -1
  288. package/dist/action/diff/index.d.ts +0 -5
  289. package/dist/action/diff/index.d.ts.map +0 -1
  290. package/dist/action/diff/parser.d.ts +0 -52
  291. package/dist/action/diff/parser.d.ts.map +0 -1
  292. package/dist/action/diff/parser.test.d.ts +0 -2
  293. package/dist/action/diff/parser.test.d.ts.map +0 -1
  294. package/dist/action/event/context.d.ts +0 -9
  295. package/dist/action/event/context.d.ts.map +0 -1
  296. package/dist/action/event/index.d.ts +0 -3
  297. package/dist/action/event/index.d.ts.map +0 -1
  298. package/dist/action/event/schedule-context.d.ts +0 -30
  299. package/dist/action/event/schedule-context.d.ts.map +0 -1
  300. package/dist/action/examples/examples.integration.test.d.ts +0 -2
  301. package/dist/action/examples/examples.integration.test.d.ts.map +0 -1
  302. package/dist/action/examples/index.d.ts +0 -50
  303. package/dist/action/examples/index.d.ts.map +0 -1
  304. package/dist/action/examples/index.test.d.ts +0 -2
  305. package/dist/action/examples/index.test.d.ts.map +0 -1
  306. package/dist/action/examples/setup.d.ts +0 -2
  307. package/dist/action/examples/setup.d.ts.map +0 -1
  308. package/dist/action/index.d.ts +0 -11
  309. package/dist/action/index.d.ts.map +0 -1
  310. package/dist/action/index.js +0 -38231
  311. package/dist/action/index.js.map +0 -1
  312. package/dist/action/licenses.txt +0 -992
  313. package/dist/action/main.d.ts +0 -2
  314. package/dist/action/main.d.ts.map +0 -1
  315. package/dist/action/main.js +0 -707
  316. package/dist/action/main.js.map +0 -1
  317. package/dist/action/output/dedup.d.ts +0 -153
  318. package/dist/action/output/dedup.d.ts.map +0 -1
  319. package/dist/action/output/dedup.test.d.ts +0 -2
  320. package/dist/action/output/dedup.test.d.ts.map +0 -1
  321. package/dist/action/output/github-checks.d.ts +0 -106
  322. package/dist/action/output/github-checks.d.ts.map +0 -1
  323. package/dist/action/output/github-checks.test.d.ts +0 -2
  324. package/dist/action/output/github-checks.test.d.ts.map +0 -1
  325. package/dist/action/output/github-issues.d.ts +0 -35
  326. package/dist/action/output/github-issues.d.ts.map +0 -1
  327. package/dist/action/output/index.d.ts +0 -6
  328. package/dist/action/output/index.d.ts.map +0 -1
  329. package/dist/action/output/issue-renderer.d.ts +0 -20
  330. package/dist/action/output/issue-renderer.d.ts.map +0 -1
  331. package/dist/action/output/renderer.d.ts +0 -4
  332. package/dist/action/output/renderer.d.ts.map +0 -1
  333. package/dist/action/output/renderer.test.d.ts +0 -2
  334. package/dist/action/output/renderer.test.d.ts.map +0 -1
  335. package/dist/action/output/stale.d.ts +0 -31
  336. package/dist/action/output/stale.d.ts.map +0 -1
  337. package/dist/action/output/stale.test.d.ts +0 -2
  338. package/dist/action/output/stale.test.d.ts.map +0 -1
  339. package/dist/action/output/types.d.ts +0 -31
  340. package/dist/action/output/types.d.ts.map +0 -1
  341. package/dist/action/package.json +0 -3
  342. package/dist/action/sdk/index.d.ts +0 -2
  343. package/dist/action/sdk/index.d.ts.map +0 -1
  344. package/dist/action/sdk/runner.d.ts +0 -202
  345. package/dist/action/sdk/runner.d.ts.map +0 -1
  346. package/dist/action/sdk/runner.test.d.ts +0 -2
  347. package/dist/action/sdk/runner.test.d.ts.map +0 -1
  348. package/dist/action/skills/index.d.ts +0 -5
  349. package/dist/action/skills/index.d.ts.map +0 -1
  350. package/dist/action/skills/loader.d.ts +0 -111
  351. package/dist/action/skills/loader.d.ts.map +0 -1
  352. package/dist/action/skills/loader.test.d.ts +0 -2
  353. package/dist/action/skills/loader.test.d.ts.map +0 -1
  354. package/dist/action/skills/remote.d.ts +0 -117
  355. package/dist/action/skills/remote.d.ts.map +0 -1
  356. package/dist/action/skills/remote.test.d.ts +0 -2
  357. package/dist/action/skills/remote.test.d.ts.map +0 -1
  358. package/dist/action/sourcemap-register.cjs +0 -1
  359. package/dist/action/triggers/matcher.d.ts +0 -30
  360. package/dist/action/triggers/matcher.d.ts.map +0 -1
  361. package/dist/action/triggers/matcher.test.d.ts +0 -2
  362. package/dist/action/triggers/matcher.test.d.ts.map +0 -1
  363. package/dist/action/types/index.d.ts +0 -269
  364. package/dist/action/types/index.d.ts.map +0 -1
  365. package/dist/action/utils/async.d.ts +0 -5
  366. package/dist/action/utils/async.d.ts.map +0 -1
  367. package/dist/action/utils/index.d.ts +0 -16
  368. package/dist/action/utils/index.d.ts.map +0 -1
  369. package/dist/action/utils/index.test.d.ts +0 -2
  370. package/dist/action/utils/index.test.d.ts.map +0 -1
  371. package/dist/action/utils/version.d.ts +0 -3
  372. package/dist/action/utils/version.d.ts.map +0 -1
  373. package/dist/cli/args.test.d.ts +0 -2
  374. package/dist/cli/args.test.d.ts.map +0 -1
  375. package/dist/cli/args.test.js +0 -392
  376. package/dist/cli/args.test.js.map +0 -1
  377. package/dist/cli/commands/init.test.d.ts +0 -2
  378. package/dist/cli/commands/init.test.d.ts.map +0 -1
  379. package/dist/cli/commands/init.test.js +0 -117
  380. package/dist/cli/commands/init.test.js.map +0 -1
  381. package/dist/cli/files.test.d.ts +0 -2
  382. package/dist/cli/files.test.d.ts.map +0 -1
  383. package/dist/cli/files.test.js +0 -117
  384. package/dist/cli/files.test.js.map +0 -1
  385. package/dist/cli/fix.test.d.ts +0 -2
  386. package/dist/cli/fix.test.d.ts.map +0 -1
  387. package/dist/cli/fix.test.js +0 -251
  388. package/dist/cli/fix.test.js.map +0 -1
  389. package/dist/cli/git.test.d.ts +0 -2
  390. package/dist/cli/git.test.d.ts.map +0 -1
  391. package/dist/cli/git.test.js +0 -96
  392. package/dist/cli/git.test.js.map +0 -1
  393. package/dist/cli/output/formatters.test.d.ts +0 -2
  394. package/dist/cli/output/formatters.test.d.ts.map +0 -1
  395. package/dist/cli/output/formatters.test.js +0 -152
  396. package/dist/cli/output/formatters.test.js.map +0 -1
  397. package/dist/cli/output/jsonl.test.d.ts +0 -2
  398. package/dist/cli/output/jsonl.test.d.ts.map +0 -1
  399. package/dist/cli/output/jsonl.test.js +0 -284
  400. package/dist/cli/output/jsonl.test.js.map +0 -1
  401. package/dist/cli/output/tty.test.d.ts +0 -2
  402. package/dist/cli/output/tty.test.d.ts.map +0 -1
  403. package/dist/cli/output/tty.test.js +0 -105
  404. package/dist/cli/output/tty.test.js.map +0 -1
  405. package/dist/cli/output/verbosity.test.d.ts +0 -2
  406. package/dist/cli/output/verbosity.test.d.ts.map +0 -1
  407. package/dist/cli/output/verbosity.test.js +0 -35
  408. package/dist/cli/output/verbosity.test.js.map +0 -1
  409. package/dist/cli/terminal.test.d.ts +0 -2
  410. package/dist/cli/terminal.test.d.ts.map +0 -1
  411. package/dist/cli/terminal.test.js +0 -123
  412. package/dist/cli/terminal.test.js.map +0 -1
  413. package/dist/config/loader.test.d.ts +0 -2
  414. package/dist/config/loader.test.d.ts.map +0 -1
  415. package/dist/config/loader.test.js +0 -263
  416. package/dist/config/loader.test.js.map +0 -1
  417. package/dist/config/writer.test.d.ts +0 -2
  418. package/dist/config/writer.test.d.ts.map +0 -1
  419. package/dist/config/writer.test.js +0 -98
  420. package/dist/config/writer.test.js.map +0 -1
  421. package/dist/diff/classify.test.d.ts +0 -2
  422. package/dist/diff/classify.test.d.ts.map +0 -1
  423. package/dist/diff/classify.test.js +0 -140
  424. package/dist/diff/classify.test.js.map +0 -1
  425. package/dist/diff/coalesce.test.d.ts +0 -2
  426. package/dist/diff/coalesce.test.d.ts.map +0 -1
  427. package/dist/diff/coalesce.test.js +0 -159
  428. package/dist/diff/coalesce.test.js.map +0 -1
  429. package/dist/diff/context.test.d.ts +0 -2
  430. package/dist/diff/context.test.d.ts.map +0 -1
  431. package/dist/diff/context.test.js +0 -190
  432. package/dist/diff/context.test.js.map +0 -1
  433. package/dist/diff/parser.test.d.ts +0 -2
  434. package/dist/diff/parser.test.d.ts.map +0 -1
  435. package/dist/diff/parser.test.js +0 -178
  436. package/dist/diff/parser.test.js.map +0 -1
  437. package/dist/examples/examples.integration.test.d.ts +0 -2
  438. package/dist/examples/examples.integration.test.d.ts.map +0 -1
  439. package/dist/examples/examples.integration.test.js +0 -55
  440. package/dist/examples/examples.integration.test.js.map +0 -1
  441. package/dist/examples/index.test.d.ts +0 -2
  442. package/dist/examples/index.test.d.ts.map +0 -1
  443. package/dist/examples/index.test.js +0 -88
  444. package/dist/examples/index.test.js.map +0 -1
  445. package/dist/output/dedup.test.d.ts +0 -2
  446. package/dist/output/dedup.test.d.ts.map +0 -1
  447. package/dist/output/dedup.test.js +0 -357
  448. package/dist/output/dedup.test.js.map +0 -1
  449. package/dist/output/github-checks.test.d.ts +0 -2
  450. package/dist/output/github-checks.test.d.ts.map +0 -1
  451. package/dist/output/github-checks.test.js +0 -255
  452. package/dist/output/github-checks.test.js.map +0 -1
  453. package/dist/output/renderer.test.d.ts +0 -2
  454. package/dist/output/renderer.test.d.ts.map +0 -1
  455. package/dist/output/renderer.test.js +0 -645
  456. package/dist/output/renderer.test.js.map +0 -1
  457. package/dist/output/stale.test.d.ts +0 -2
  458. package/dist/output/stale.test.d.ts.map +0 -1
  459. package/dist/output/stale.test.js +0 -330
  460. package/dist/output/stale.test.js.map +0 -1
  461. package/dist/sdk/runner.test.d.ts +0 -2
  462. package/dist/sdk/runner.test.d.ts.map +0 -1
  463. package/dist/sdk/runner.test.js +0 -677
  464. package/dist/sdk/runner.test.js.map +0 -1
  465. package/dist/skills/loader.test.d.ts +0 -2
  466. package/dist/skills/loader.test.d.ts.map +0 -1
  467. package/dist/skills/loader.test.js +0 -241
  468. package/dist/skills/loader.test.js.map +0 -1
  469. package/dist/skills/remote.test.d.ts +0 -2
  470. package/dist/skills/remote.test.d.ts.map +0 -1
  471. package/dist/skills/remote.test.js +0 -582
  472. package/dist/skills/remote.test.js.map +0 -1
  473. package/dist/triggers/matcher.test.d.ts +0 -2
  474. package/dist/triggers/matcher.test.d.ts.map +0 -1
  475. package/dist/triggers/matcher.test.js +0 -234
  476. package/dist/triggers/matcher.test.js.map +0 -1
  477. package/dist/utils/index.test.d.ts +0 -2
  478. package/dist/utils/index.test.d.ts.map +0 -1
  479. package/dist/utils/index.test.js +0 -68
  480. package/dist/utils/index.test.js.map +0 -1
  481. package/docs/astro.config.mjs +0 -43
  482. package/docs/package.json +0 -19
  483. package/docs/pnpm-lock.yaml +0 -4000
  484. package/docs/public/favicon.svg +0 -5
  485. package/docs/src/components/Code.astro +0 -141
  486. package/docs/src/components/PackageManagerTabs.astro +0 -183
  487. package/docs/src/components/Terminal.astro +0 -212
  488. package/docs/src/layouts/Base.astro +0 -380
  489. package/docs/src/pages/cli.astro +0 -167
  490. package/docs/src/pages/config.astro +0 -395
  491. package/docs/src/pages/guide.astro +0 -450
  492. package/docs/src/pages/index.astro +0 -490
  493. package/docs/src/styles/global.css +0 -551
  494. package/docs/src/utils/version.ts +0 -6
  495. package/docs/tsconfig.json +0 -3
  496. package/docs/vercel.json +0 -5
  497. package/eslint.config.js +0 -33
  498. package/src/action/index.ts +0 -1
  499. package/src/action/main.ts +0 -868
  500. package/src/cli/args.test.ts +0 -477
  501. package/src/cli/args.ts +0 -414
  502. package/src/cli/commands/add.ts +0 -447
  503. package/src/cli/commands/init.test.ts +0 -137
  504. package/src/cli/commands/init.ts +0 -134
  505. package/src/cli/commands/setup-app/browser.ts +0 -38
  506. package/src/cli/commands/setup-app/credentials.ts +0 -45
  507. package/src/cli/commands/setup-app/manifest.ts +0 -48
  508. package/src/cli/commands/setup-app/server.ts +0 -172
  509. package/src/cli/commands/setup-app.ts +0 -156
  510. package/src/cli/commands/sync.ts +0 -114
  511. package/src/cli/context.ts +0 -131
  512. package/src/cli/files.test.ts +0 -155
  513. package/src/cli/files.ts +0 -89
  514. package/src/cli/fix.test.ts +0 -310
  515. package/src/cli/fix.ts +0 -387
  516. package/src/cli/git.test.ts +0 -119
  517. package/src/cli/git.ts +0 -318
  518. package/src/cli/index.ts +0 -14
  519. package/src/cli/main.ts +0 -672
  520. package/src/cli/output/box.ts +0 -235
  521. package/src/cli/output/formatters.test.ts +0 -187
  522. package/src/cli/output/formatters.ts +0 -269
  523. package/src/cli/output/icons.ts +0 -19
  524. package/src/cli/output/index.ts +0 -44
  525. package/src/cli/output/ink-runner.tsx +0 -366
  526. package/src/cli/output/jsonl.test.ts +0 -347
  527. package/src/cli/output/jsonl.ts +0 -126
  528. package/src/cli/output/reporter.ts +0 -434
  529. package/src/cli/output/tasks.ts +0 -374
  530. package/src/cli/output/tty.test.ts +0 -117
  531. package/src/cli/output/tty.ts +0 -60
  532. package/src/cli/output/verbosity.test.ts +0 -40
  533. package/src/cli/output/verbosity.ts +0 -31
  534. package/src/cli/terminal.test.ts +0 -148
  535. package/src/cli/terminal.ts +0 -301
  536. package/src/config/index.ts +0 -3
  537. package/src/config/loader.test.ts +0 -313
  538. package/src/config/loader.ts +0 -103
  539. package/src/config/schema.ts +0 -168
  540. package/src/config/writer.test.ts +0 -119
  541. package/src/config/writer.ts +0 -84
  542. package/src/diff/classify.test.ts +0 -162
  543. package/src/diff/classify.ts +0 -92
  544. package/src/diff/coalesce.test.ts +0 -208
  545. package/src/diff/coalesce.ts +0 -133
  546. package/src/diff/context.test.ts +0 -226
  547. package/src/diff/context.ts +0 -201
  548. package/src/diff/index.ts +0 -4
  549. package/src/diff/parser.test.ts +0 -212
  550. package/src/diff/parser.ts +0 -149
  551. package/src/event/context.ts +0 -132
  552. package/src/event/index.ts +0 -2
  553. package/src/event/schedule-context.ts +0 -101
  554. package/src/examples/examples.integration.test.ts +0 -66
  555. package/src/examples/index.test.ts +0 -101
  556. package/src/examples/index.ts +0 -122
  557. package/src/examples/setup.ts +0 -25
  558. package/src/index.ts +0 -115
  559. package/src/output/dedup.test.ts +0 -419
  560. package/src/output/dedup.ts +0 -607
  561. package/src/output/github-checks.test.ts +0 -300
  562. package/src/output/github-checks.ts +0 -476
  563. package/src/output/github-issues.ts +0 -329
  564. package/src/output/index.ts +0 -5
  565. package/src/output/issue-renderer.ts +0 -197
  566. package/src/output/renderer.test.ts +0 -727
  567. package/src/output/renderer.ts +0 -217
  568. package/src/output/stale.test.ts +0 -375
  569. package/src/output/stale.ts +0 -155
  570. package/src/output/types.ts +0 -34
  571. package/src/sdk/index.ts +0 -1
  572. package/src/sdk/runner.test.ts +0 -806
  573. package/src/sdk/runner.ts +0 -1232
  574. package/src/skills/index.ts +0 -36
  575. package/src/skills/loader.test.ts +0 -300
  576. package/src/skills/loader.ts +0 -423
  577. package/src/skills/remote.test.ts +0 -704
  578. package/src/skills/remote.ts +0 -604
  579. package/src/triggers/matcher.test.ts +0 -277
  580. package/src/triggers/matcher.ts +0 -152
  581. package/src/types/index.ts +0 -194
  582. package/src/utils/async.ts +0 -18
  583. package/src/utils/index.test.ts +0 -84
  584. package/src/utils/index.ts +0 -51
  585. package/src/utils/version.ts +0 -17
  586. package/tsconfig.json +0 -25
  587. package/vitest.config.ts +0 -8
  588. package/vitest.integration.config.ts +0 -11
  589. package/warden.toml +0 -19
@@ -1,277 +0,0 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import {
3
- matchGlob,
4
- matchTrigger,
5
- shouldFail,
6
- countFindingsAtOrAbove,
7
- countSeverity,
8
- clearGlobCache,
9
- getGlobCacheSize,
10
- } from './matcher.js';
11
- import type { Trigger } from '../config/schema.js';
12
- import { SEVERITY_ORDER } from '../types/index.js';
13
- import type { EventContext, SkillReport } from '../types/index.js';
14
-
15
- /** Test helper to create a SkillReport with given severities */
16
- function makeReport(severities: string[]): SkillReport {
17
- return {
18
- skill: 'test',
19
- summary: 'Test report',
20
- findings: severities.map((s, i) => ({
21
- id: `finding-${i}`,
22
- severity: s as 'critical' | 'high' | 'medium' | 'low' | 'info',
23
- title: `Finding ${i}`,
24
- description: 'Test finding',
25
- })),
26
- };
27
- }
28
-
29
- describe('matchGlob', () => {
30
- beforeEach(() => {
31
- clearGlobCache();
32
- });
33
-
34
- it('matches exact paths', () => {
35
- expect(matchGlob('src/index.ts', 'src/index.ts')).toBe(true);
36
- expect(matchGlob('src/index.ts', 'src/other.ts')).toBe(false);
37
- });
38
-
39
- it('matches single wildcard', () => {
40
- expect(matchGlob('src/*.ts', 'src/index.ts')).toBe(true);
41
- expect(matchGlob('src/*.ts', 'src/foo/index.ts')).toBe(false);
42
- expect(matchGlob('*.ts', 'index.ts')).toBe(true);
43
- });
44
-
45
- it('matches double wildcard (globstar)', () => {
46
- expect(matchGlob('src/**/*.ts', 'src/index.ts')).toBe(true);
47
- expect(matchGlob('src/**/*.ts', 'src/foo/index.ts')).toBe(true);
48
- expect(matchGlob('src/**/*.ts', 'src/foo/bar/index.ts')).toBe(true);
49
- expect(matchGlob('**/*.ts', 'src/index.ts')).toBe(true);
50
- });
51
-
52
- it('matches question mark wildcard', () => {
53
- expect(matchGlob('src/?.ts', 'src/a.ts')).toBe(true);
54
- expect(matchGlob('src/?.ts', 'src/ab.ts')).toBe(false);
55
- });
56
-
57
- it('caches compiled patterns', () => {
58
- matchGlob('src/*.ts', 'src/index.ts');
59
- expect(getGlobCacheSize()).toBe(1);
60
-
61
- // Same pattern should not increase cache size
62
- matchGlob('src/*.ts', 'src/other.ts');
63
- expect(getGlobCacheSize()).toBe(1);
64
-
65
- // Different pattern should increase cache size
66
- matchGlob('lib/*.js', 'lib/index.js');
67
- expect(getGlobCacheSize()).toBe(2);
68
- });
69
-
70
- it('evicts oldest entry when cache exceeds max size', () => {
71
- // Fill cache with 1000 patterns
72
- for (let i = 0; i < 1000; i++) {
73
- matchGlob(`pattern${i}/*.ts`, `pattern${i}/file.ts`);
74
- }
75
- expect(getGlobCacheSize()).toBe(1000);
76
-
77
- // Adding one more should evict the oldest
78
- matchGlob('newpattern/*.ts', 'newpattern/file.ts');
79
- expect(getGlobCacheSize()).toBe(1000);
80
-
81
- // The first pattern should be evicted (cache miss will re-add it)
82
- // We can verify this by checking the cache size doesn't increase
83
- // when we add it back
84
- const sizeBefore = getGlobCacheSize();
85
- matchGlob('pattern0/*.ts', 'pattern0/file.ts');
86
- expect(getGlobCacheSize()).toBe(sizeBefore);
87
- });
88
-
89
- it('maintains LRU order by refreshing accessed entries', () => {
90
- // Add patterns 0, 1, 2
91
- matchGlob('pattern0/*.ts', 'pattern0/file.ts');
92
- matchGlob('pattern1/*.ts', 'pattern1/file.ts');
93
- matchGlob('pattern2/*.ts', 'pattern2/file.ts');
94
-
95
- // Access pattern0 to make it most recently used
96
- matchGlob('pattern0/*.ts', 'pattern0/file.ts');
97
-
98
- // Fill cache to max (997 more patterns needed to reach 1000)
99
- for (let i = 3; i < 1000; i++) {
100
- matchGlob(`pattern${i}/*.ts`, `pattern${i}/file.ts`);
101
- }
102
- expect(getGlobCacheSize()).toBe(1000);
103
-
104
- // Add one more - should evict pattern1 (oldest not-accessed)
105
- matchGlob('newpattern/*.ts', 'newpattern/file.ts');
106
- expect(getGlobCacheSize()).toBe(1000);
107
- });
108
- });
109
-
110
- describe('matchTrigger', () => {
111
- const baseContext: EventContext = {
112
- eventType: 'pull_request',
113
- action: 'opened',
114
- repository: {
115
- owner: 'test',
116
- name: 'repo',
117
- fullName: 'test/repo',
118
- defaultBranch: 'main',
119
- },
120
- pullRequest: {
121
- number: 1,
122
- title: 'Test PR',
123
- body: 'Test body',
124
- author: 'user',
125
- baseBranch: 'main',
126
- headBranch: 'feature',
127
- headSha: 'abc123',
128
- files: [
129
- { filename: 'src/index.ts', status: 'modified', additions: 10, deletions: 5 },
130
- { filename: 'README.md', status: 'modified', additions: 2, deletions: 0 },
131
- ],
132
- },
133
- repoPath: '/test/repo',
134
- };
135
-
136
- const baseTrigger: Trigger = {
137
- name: 'test-trigger',
138
- event: 'pull_request',
139
- actions: ['opened', 'synchronize'],
140
- skill: 'test-skill',
141
- };
142
-
143
- it('matches when event and action match', () => {
144
- expect(matchTrigger(baseTrigger, baseContext)).toBe(true);
145
- });
146
-
147
- it('does not match wrong event type', () => {
148
- const trigger = { ...baseTrigger, event: 'issues' as const };
149
- expect(matchTrigger(trigger, baseContext)).toBe(false);
150
- });
151
-
152
- it('does not match wrong action', () => {
153
- const trigger = { ...baseTrigger, actions: ['closed'] };
154
- expect(matchTrigger(trigger, baseContext)).toBe(false);
155
- });
156
-
157
- it('matches with path filter', () => {
158
- const trigger = { ...baseTrigger, filters: { paths: ['src/**/*.ts'] } };
159
- expect(matchTrigger(trigger, baseContext)).toBe(true);
160
- });
161
-
162
- it('does not match when no files match path filter', () => {
163
- const trigger = { ...baseTrigger, filters: { paths: ['lib/**/*.ts'] } };
164
- expect(matchTrigger(trigger, baseContext)).toBe(false);
165
- });
166
-
167
- it('ignores files matching ignorePaths', () => {
168
- const context = {
169
- ...baseContext,
170
- pullRequest: {
171
- ...baseContext.pullRequest!,
172
- files: [{ filename: 'README.md', status: 'modified' as const, additions: 1, deletions: 0 }],
173
- },
174
- };
175
- const trigger = { ...baseTrigger, filters: { ignorePaths: ['*.md'] } };
176
- expect(matchTrigger(trigger, context)).toBe(false);
177
- });
178
-
179
- it('fails when path filters defined but filenames undefined', () => {
180
- const context = {
181
- ...baseContext,
182
- pullRequest: undefined,
183
- };
184
- const trigger = { ...baseTrigger, filters: { paths: ['src/**/*.ts'] } };
185
- expect(matchTrigger(trigger, context)).toBe(false);
186
- });
187
-
188
- it('fails when ignorePaths defined but filenames undefined', () => {
189
- const context = {
190
- ...baseContext,
191
- pullRequest: undefined,
192
- };
193
- const trigger = { ...baseTrigger, filters: { ignorePaths: ['*.md'] } };
194
- expect(matchTrigger(trigger, context)).toBe(false);
195
- });
196
-
197
- it('fails when path filters defined but files array empty', () => {
198
- const context = {
199
- ...baseContext,
200
- pullRequest: {
201
- ...baseContext.pullRequest!,
202
- files: [],
203
- },
204
- };
205
- const trigger = { ...baseTrigger, filters: { paths: ['src/**/*.ts'] } };
206
- expect(matchTrigger(trigger, context)).toBe(false);
207
- });
208
-
209
- it('matches when no filters defined and filenames unavailable', () => {
210
- const context = {
211
- ...baseContext,
212
- pullRequest: undefined,
213
- };
214
- expect(matchTrigger(baseTrigger, context)).toBe(true);
215
- });
216
- });
217
-
218
- describe('shouldFail', () => {
219
- it('returns true when findings meet threshold', () => {
220
- expect(shouldFail(makeReport(['high']), 'high')).toBe(true);
221
- expect(shouldFail(makeReport(['critical']), 'high')).toBe(true);
222
- expect(shouldFail(makeReport(['medium']), 'medium')).toBe(true);
223
- });
224
-
225
- it('returns false when findings below threshold', () => {
226
- expect(shouldFail(makeReport(['low']), 'high')).toBe(false);
227
- expect(shouldFail(makeReport(['info']), 'medium')).toBe(false);
228
- expect(shouldFail(makeReport([]), 'info')).toBe(false);
229
- });
230
- });
231
-
232
- describe('countFindingsAtOrAbove', () => {
233
- it('counts findings at or above threshold', () => {
234
- const report = makeReport(['critical', 'high', 'medium', 'low', 'info']);
235
- expect(countFindingsAtOrAbove(report, 'critical')).toBe(1);
236
- expect(countFindingsAtOrAbove(report, 'high')).toBe(2);
237
- expect(countFindingsAtOrAbove(report, 'medium')).toBe(3);
238
- expect(countFindingsAtOrAbove(report, 'low')).toBe(4);
239
- expect(countFindingsAtOrAbove(report, 'info')).toBe(5);
240
- });
241
- });
242
-
243
- describe('countSeverity', () => {
244
- it('counts findings of specific severity across reports', () => {
245
- const reports: SkillReport[] = [
246
- {
247
- skill: 'test1',
248
- summary: 'Test',
249
- findings: [
250
- { id: '1', severity: 'high', title: 'High 1', description: 'desc' },
251
- { id: '2', severity: 'medium', title: 'Medium 1', description: 'desc' },
252
- ],
253
- },
254
- {
255
- skill: 'test2',
256
- summary: 'Test',
257
- findings: [
258
- { id: '3', severity: 'high', title: 'High 2', description: 'desc' },
259
- { id: '4', severity: 'high', title: 'High 3', description: 'desc' },
260
- ],
261
- },
262
- ];
263
-
264
- expect(countSeverity(reports, 'high')).toBe(3);
265
- expect(countSeverity(reports, 'medium')).toBe(1);
266
- expect(countSeverity(reports, 'low')).toBe(0);
267
- });
268
- });
269
-
270
- describe('SEVERITY_ORDER', () => {
271
- it('has correct ordering (lower = more severe)', () => {
272
- expect(SEVERITY_ORDER.critical).toBeLessThan(SEVERITY_ORDER.high);
273
- expect(SEVERITY_ORDER.high).toBeLessThan(SEVERITY_ORDER.medium);
274
- expect(SEVERITY_ORDER.medium).toBeLessThan(SEVERITY_ORDER.low);
275
- expect(SEVERITY_ORDER.low).toBeLessThan(SEVERITY_ORDER.info);
276
- });
277
- });
@@ -1,152 +0,0 @@
1
- import type { Trigger } from '../config/schema.js';
2
- import { SEVERITY_ORDER } from '../types/index.js';
3
- import type { EventContext, Severity, SeverityThreshold, SkillReport } from '../types/index.js';
4
-
5
- /** Maximum number of patterns to cache (LRU eviction when exceeded) */
6
- const GLOB_CACHE_MAX_SIZE = 1000;
7
-
8
- /** Cache for compiled glob patterns with LRU eviction */
9
- const globCache = new Map<string, RegExp>();
10
-
11
- /** Clear the glob cache (useful for testing) */
12
- export function clearGlobCache(): void {
13
- globCache.clear();
14
- }
15
-
16
- /** Get current cache size (useful for testing) */
17
- export function getGlobCacheSize(): number {
18
- return globCache.size;
19
- }
20
-
21
- /**
22
- * Convert a glob pattern to a regex (cached with LRU eviction).
23
- */
24
- function globToRegex(pattern: string): RegExp {
25
- const cached = globCache.get(pattern);
26
- if (cached) {
27
- // Move to end for LRU ordering (delete and re-add)
28
- globCache.delete(pattern);
29
- globCache.set(pattern, cached);
30
- return cached;
31
- }
32
-
33
- // Use placeholders to avoid replacement conflicts
34
- let regexPattern = pattern
35
- // First, replace glob patterns with placeholders
36
- .replace(/\*\*\//g, '\0GLOBSTAR_SLASH\0')
37
- .replace(/\*\*/g, '\0GLOBSTAR\0')
38
- .replace(/\*/g, '\0STAR\0')
39
- .replace(/\?/g, '\0QUESTION\0');
40
-
41
- // Escape regex special characters
42
- regexPattern = regexPattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
43
-
44
- // Replace placeholders with regex patterns
45
- regexPattern = regexPattern
46
- .replace(/\0GLOBSTAR_SLASH\0/g, '(?:.*/)?') // **/ matches zero or more directories
47
- .replace(/\0GLOBSTAR\0/g, '.*') // ** matches anything
48
- .replace(/\0STAR\0/g, '[^/]*') // * matches anything except /
49
- .replace(/\0QUESTION\0/g, '[^/]'); // ? matches single char except /
50
-
51
- const regex = new RegExp(`^${regexPattern}$`);
52
-
53
- // Evict oldest entry if cache is full
54
- if (globCache.size >= GLOB_CACHE_MAX_SIZE) {
55
- const oldestKey = globCache.keys().next().value;
56
- if (oldestKey !== undefined) {
57
- globCache.delete(oldestKey);
58
- }
59
- }
60
-
61
- globCache.set(pattern, regex);
62
- return regex;
63
- }
64
-
65
- /**
66
- * Match a glob pattern against a file path.
67
- * Supports ** for recursive matching and * for single directory matching.
68
- */
69
- export function matchGlob(pattern: string, path: string): boolean {
70
- return globToRegex(pattern).test(path);
71
- }
72
-
73
- /**
74
- * Check if a trigger matches the given event context.
75
- */
76
- export function matchTrigger(trigger: Trigger, context: EventContext): boolean {
77
- if (trigger.event !== context.eventType) {
78
- return false;
79
- }
80
-
81
- // Schedule events don't have actions - they match based on whether
82
- // any files match the paths filter (context was already built with matching files)
83
- if (trigger.event === 'schedule') {
84
- return (context.pullRequest?.files.length ?? 0) > 0;
85
- }
86
-
87
- // For non-schedule events, actions must match
88
- if (!trigger.actions?.includes(context.action)) {
89
- return false;
90
- }
91
-
92
- const filenames = context.pullRequest?.files.map((f) => f.filename);
93
- const pathPatterns = trigger.filters?.paths;
94
- const ignorePatterns = trigger.filters?.ignorePaths;
95
-
96
- // Fail trigger match when path filters are defined but filenames unavailable
97
- // This prevents filters from being silently bypassed on API failures
98
- if ((pathPatterns || ignorePatterns) && (!filenames || filenames.length === 0)) {
99
- return false;
100
- }
101
-
102
- if (pathPatterns && filenames) {
103
- const hasMatch = filenames.some((file) =>
104
- pathPatterns.some((pattern) => matchGlob(pattern, file))
105
- );
106
- if (!hasMatch) {
107
- return false;
108
- }
109
- }
110
-
111
- if (ignorePatterns && filenames) {
112
- const allIgnored = filenames.every((file) =>
113
- ignorePatterns.some((pattern) => matchGlob(pattern, file))
114
- );
115
- if (allIgnored) {
116
- return false;
117
- }
118
- }
119
-
120
- return true;
121
- }
122
-
123
- /**
124
- * Check if a report has any findings at or above the given severity threshold.
125
- * Returns false if failOn is 'off' (disabled).
126
- */
127
- export function shouldFail(report: SkillReport, failOn: SeverityThreshold): boolean {
128
- if (failOn === 'off') return false;
129
- const threshold = SEVERITY_ORDER[failOn];
130
- return report.findings.some((f) => SEVERITY_ORDER[f.severity] <= threshold);
131
- }
132
-
133
- /**
134
- * Count findings at or above the given severity threshold.
135
- * Returns 0 if failOn is 'off' (disabled).
136
- */
137
- export function countFindingsAtOrAbove(report: SkillReport, failOn: SeverityThreshold): number {
138
- if (failOn === 'off') return 0;
139
- const threshold = SEVERITY_ORDER[failOn];
140
- return report.findings.filter((f) => SEVERITY_ORDER[f.severity] <= threshold).length;
141
- }
142
-
143
- /**
144
- * Count findings of a specific severity across multiple reports.
145
- */
146
- export function countSeverity(reports: SkillReport[], severity: Severity): number {
147
- return reports.reduce(
148
- (count, report) =>
149
- count + report.findings.filter((f) => f.severity === severity).length,
150
- 0
151
- );
152
- }
@@ -1,194 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- // Severity levels for findings
4
- export const SeveritySchema = z.enum(['critical', 'high', 'medium', 'low', 'info']);
5
- export type Severity = z.infer<typeof SeveritySchema>;
6
-
7
- // Confidence levels for findings
8
- export const ConfidenceSchema = z.enum(['high', 'medium', 'low']);
9
- export type Confidence = z.infer<typeof ConfidenceSchema>;
10
-
11
- /**
12
- * Confidence order for comparison (lower = more confident).
13
- * Single source of truth for confidence ordering across the codebase.
14
- */
15
- export const CONFIDENCE_ORDER: Record<Confidence, number> = {
16
- high: 0,
17
- medium: 1,
18
- low: 2,
19
- };
20
-
21
- // Severity threshold for config options (includes 'off' to disable)
22
- export const SeverityThresholdSchema = z.enum(['off', 'critical', 'high', 'medium', 'low', 'info']);
23
- export type SeverityThreshold = z.infer<typeof SeverityThresholdSchema>;
24
-
25
- /**
26
- * Severity order for comparison (lower = more severe).
27
- * Single source of truth for severity ordering across the codebase.
28
- */
29
- export const SEVERITY_ORDER: Record<Severity, number> = {
30
- critical: 0,
31
- high: 1,
32
- medium: 2,
33
- low: 3,
34
- info: 4,
35
- };
36
-
37
- /**
38
- * Filter findings to only include those at or above the given severity threshold.
39
- * If no threshold is provided, returns all findings unchanged.
40
- * If threshold is 'off', returns empty array (disabled).
41
- */
42
- export function filterFindingsBySeverity(findings: Finding[], threshold?: SeverityThreshold): Finding[] {
43
- if (!threshold) return findings;
44
- if (threshold === 'off') return [];
45
- const thresholdOrder = SEVERITY_ORDER[threshold];
46
- return findings.filter((f) => SEVERITY_ORDER[f.severity] <= thresholdOrder);
47
- }
48
-
49
- // Location within a file
50
- export const LocationSchema = z.object({
51
- path: z.string(),
52
- startLine: z.number().int().positive(),
53
- endLine: z.number().int().positive().optional(),
54
- });
55
- export type Location = z.infer<typeof LocationSchema>;
56
-
57
- // Suggested fix with diff
58
- export const SuggestedFixSchema = z.object({
59
- description: z.string(),
60
- diff: z.string(),
61
- });
62
- export type SuggestedFix = z.infer<typeof SuggestedFixSchema>;
63
-
64
- // Individual finding from a skill
65
- export const FindingSchema = z.object({
66
- id: z.string(),
67
- severity: SeveritySchema,
68
- confidence: ConfidenceSchema.optional(),
69
- title: z.string(),
70
- description: z.string(),
71
- location: LocationSchema.optional(),
72
- suggestedFix: SuggestedFixSchema.optional(),
73
- elapsedMs: z.number().nonnegative().optional(),
74
- });
75
- export type Finding = z.infer<typeof FindingSchema>;
76
-
77
- // Usage statistics from SDK
78
- export const UsageStatsSchema = z.object({
79
- inputTokens: z.number().int().nonnegative(),
80
- outputTokens: z.number().int().nonnegative(),
81
- cacheReadInputTokens: z.number().int().nonnegative().optional(),
82
- cacheCreationInputTokens: z.number().int().nonnegative().optional(),
83
- costUSD: z.number().nonnegative(),
84
- });
85
- export type UsageStats = z.infer<typeof UsageStatsSchema>;
86
-
87
- // Skipped file info for chunking
88
- export const SkippedFileSchema = z.object({
89
- filename: z.string(),
90
- reason: z.enum(['pattern', 'builtin']),
91
- pattern: z.string().optional(),
92
- });
93
- export type SkippedFile = z.infer<typeof SkippedFileSchema>;
94
-
95
- // Skill report output
96
- export const SkillReportSchema = z.object({
97
- skill: z.string(),
98
- summary: z.string(),
99
- findings: z.array(FindingSchema),
100
- metadata: z.record(z.string(), z.unknown()).optional(),
101
- durationMs: z.number().nonnegative().optional(),
102
- usage: UsageStatsSchema.optional(),
103
- /** Files that were skipped due to chunking patterns */
104
- skippedFiles: z.array(SkippedFileSchema).optional(),
105
- /** Number of hunks that failed to analyze (SDK errors, API errors, etc.) */
106
- failedHunks: z.number().int().nonnegative().optional(),
107
- });
108
- export type SkillReport = z.infer<typeof SkillReportSchema>;
109
-
110
- // GitHub event types
111
- export const GitHubEventTypeSchema = z.enum([
112
- 'pull_request',
113
- 'issues',
114
- 'issue_comment',
115
- 'pull_request_review',
116
- 'pull_request_review_comment',
117
- 'schedule',
118
- ]);
119
- export type GitHubEventType = z.infer<typeof GitHubEventTypeSchema>;
120
-
121
- // Pull request actions
122
- export const PullRequestActionSchema = z.enum([
123
- 'opened',
124
- 'synchronize',
125
- 'reopened',
126
- 'closed',
127
- ]);
128
- export type PullRequestAction = z.infer<typeof PullRequestActionSchema>;
129
-
130
- // File change info
131
- export const FileChangeSchema = z.object({
132
- filename: z.string(),
133
- status: z.enum(['added', 'removed', 'modified', 'renamed', 'copied', 'changed', 'unchanged']),
134
- additions: z.number().int().nonnegative(),
135
- deletions: z.number().int().nonnegative(),
136
- patch: z.string().optional(),
137
- chunks: z.number().int().nonnegative().optional(),
138
- });
139
- export type FileChange = z.infer<typeof FileChangeSchema>;
140
-
141
- /**
142
- * Count the number of chunks/hunks in a patch string.
143
- * Each chunk starts with @@ -X,Y +A,B @@
144
- */
145
- export function countPatchChunks(patch: string | undefined): number {
146
- if (!patch) return 0;
147
- const matches = patch.match(/^@@\s/gm);
148
- return matches?.length ?? 0;
149
- }
150
-
151
- // Pull request context
152
- export const PullRequestContextSchema = z.object({
153
- number: z.number().int().positive(),
154
- title: z.string(),
155
- body: z.string().nullable(),
156
- author: z.string(),
157
- baseBranch: z.string(),
158
- headBranch: z.string(),
159
- headSha: z.string(),
160
- files: z.array(FileChangeSchema),
161
- });
162
- export type PullRequestContext = z.infer<typeof PullRequestContextSchema>;
163
-
164
- // Repository context
165
- export const RepositoryContextSchema = z.object({
166
- owner: z.string(),
167
- name: z.string(),
168
- fullName: z.string(),
169
- defaultBranch: z.string(),
170
- });
171
- export type RepositoryContext = z.infer<typeof RepositoryContextSchema>;
172
-
173
- // Full event context
174
- export const EventContextSchema = z.object({
175
- eventType: GitHubEventTypeSchema,
176
- action: z.string(),
177
- repository: RepositoryContextSchema,
178
- pullRequest: PullRequestContextSchema.optional(),
179
- repoPath: z.string(),
180
- });
181
- export type EventContext = z.infer<typeof EventContextSchema>;
182
-
183
- // Retry configuration for SDK calls
184
- export const RetryConfigSchema = z.object({
185
- /** Maximum number of retry attempts (default: 3) */
186
- maxRetries: z.number().int().nonnegative().default(3),
187
- /** Initial delay in milliseconds before first retry (default: 1000) */
188
- initialDelayMs: z.number().int().positive().default(1000),
189
- /** Multiplier for exponential backoff (default: 2) */
190
- backoffMultiplier: z.number().positive().default(2),
191
- /** Maximum delay in milliseconds between retries (default: 30000) */
192
- maxDelayMs: z.number().int().positive().default(30000),
193
- });
194
- export type RetryConfig = z.infer<typeof RetryConfigSchema>;
@@ -1,18 +0,0 @@
1
- /**
2
- * Process items with limited concurrency using chunked batches.
3
- */
4
- export async function processInBatches<T, R>(
5
- items: T[],
6
- fn: (item: T) => Promise<R>,
7
- batchSize: number
8
- ): Promise<R[]> {
9
- const results: R[] = [];
10
-
11
- for (let i = 0; i < items.length; i += batchSize) {
12
- const batch = items.slice(i, i + batchSize);
13
- const batchResults = await Promise.all(batch.map(fn));
14
- results.push(...batchResults);
15
- }
16
-
17
- return results;
18
- }