@sentry/warden 0.1.0 → 0.2.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 (588) hide show
  1. package/dist/cli/commands/init.d.ts.map +1 -1
  2. package/dist/cli/commands/init.js +3 -1
  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/files.d.ts +11 -1
  10. package/dist/cli/files.d.ts.map +1 -1
  11. package/dist/cli/files.js +145 -4
  12. package/dist/cli/files.js.map +1 -1
  13. package/dist/cli/git.d.ts.map +1 -1
  14. package/dist/cli/git.js +5 -9
  15. package/dist/cli/git.js.map +1 -1
  16. package/dist/cli/index.js +0 -0
  17. package/dist/cli/output/icons.d.ts +4 -0
  18. package/dist/cli/output/icons.d.ts.map +1 -1
  19. package/dist/cli/output/icons.js +4 -0
  20. package/dist/cli/output/icons.js.map +1 -1
  21. package/dist/cli/output/ink-runner.d.ts +20 -0
  22. package/dist/cli/output/ink-runner.d.ts.map +1 -1
  23. package/dist/cli/output/ink-runner.js +53 -19
  24. package/dist/cli/output/ink-runner.js.map +1 -1
  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.map +1 -1
  36. package/dist/output/dedup.js +8 -3
  37. package/dist/output/dedup.js.map +1 -1
  38. package/dist/output/renderer.d.ts.map +1 -1
  39. package/dist/output/renderer.js +49 -5
  40. package/dist/output/renderer.js.map +1 -1
  41. package/dist/output/stale.d.ts.map +1 -1
  42. package/dist/output/stale.js +7 -0
  43. package/dist/output/stale.js.map +1 -1
  44. package/dist/output/types.d.ts +15 -1
  45. package/dist/output/types.d.ts.map +1 -1
  46. package/dist/sdk/analyze.d.ts +18 -0
  47. package/dist/sdk/analyze.d.ts.map +1 -0
  48. package/dist/sdk/analyze.js +425 -0
  49. package/dist/sdk/analyze.js.map +1 -0
  50. package/dist/sdk/errors.d.ts +23 -0
  51. package/dist/sdk/errors.d.ts.map +1 -0
  52. package/dist/sdk/errors.js +72 -0
  53. package/dist/sdk/errors.js.map +1 -0
  54. package/dist/sdk/extract.d.ts +44 -0
  55. package/dist/sdk/extract.d.ts.map +1 -0
  56. package/dist/sdk/extract.js +224 -0
  57. package/dist/sdk/extract.js.map +1 -0
  58. package/dist/sdk/prepare.d.ts +13 -0
  59. package/dist/sdk/prepare.d.ts.map +1 -0
  60. package/dist/sdk/prepare.js +73 -0
  61. package/dist/sdk/prepare.js.map +1 -0
  62. package/dist/sdk/prompt.d.ts +30 -0
  63. package/dist/sdk/prompt.d.ts.map +1 -0
  64. package/dist/sdk/prompt.js +109 -0
  65. package/dist/sdk/prompt.js.map +1 -0
  66. package/dist/sdk/retry.d.ts +12 -0
  67. package/dist/sdk/retry.d.ts.map +1 -0
  68. package/dist/sdk/retry.js +31 -0
  69. package/dist/sdk/retry.js.map +1 -0
  70. package/dist/sdk/runner.d.ts +22 -199
  71. package/dist/sdk/runner.d.ts.map +1 -1
  72. package/dist/sdk/runner.js +26 -884
  73. package/dist/sdk/runner.js.map +1 -1
  74. package/dist/sdk/types.d.ts +127 -0
  75. package/dist/sdk/types.d.ts.map +1 -0
  76. package/dist/sdk/types.js +5 -0
  77. package/dist/sdk/types.js.map +1 -0
  78. package/dist/sdk/usage.d.ts +20 -0
  79. package/dist/sdk/usage.d.ts.map +1 -0
  80. package/dist/sdk/usage.js +44 -0
  81. package/dist/sdk/usage.js.map +1 -0
  82. package/dist/skills/remote.d.ts.map +1 -1
  83. package/dist/skills/remote.js +3 -7
  84. package/dist/skills/remote.js.map +1 -1
  85. package/dist/types/index.d.ts +1 -0
  86. package/dist/types/index.d.ts.map +1 -1
  87. package/dist/types/index.js +2 -0
  88. package/dist/types/index.js.map +1 -1
  89. package/dist/utils/exec.d.ts +61 -0
  90. package/dist/utils/exec.d.ts.map +1 -0
  91. package/dist/utils/exec.js +111 -0
  92. package/dist/utils/exec.js.map +1 -0
  93. package/dist/utils/index.d.ts +2 -0
  94. package/dist/utils/index.d.ts.map +1 -1
  95. package/dist/utils/index.js +1 -0
  96. package/dist/utils/index.js.map +1 -1
  97. package/package.json +15 -16
  98. package/.agents/skills/find-bugs/SKILL.md +0 -75
  99. package/.agents/skills/vercel-react-best-practices/AGENTS.md +0 -2934
  100. package/.agents/skills/vercel-react-best-practices/SKILL.md +0 -136
  101. package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  102. package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  103. package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  104. package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  105. package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
  106. package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  107. package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
  108. package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  109. package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
  110. package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  111. package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  112. package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  113. package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  114. package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  115. package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  116. package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  117. package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  118. package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  119. package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  120. package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  121. package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  122. package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  123. package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  124. package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  125. package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  126. package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  127. package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  128. package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  129. package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  130. package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  131. package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  132. package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  133. package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  134. package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  135. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  136. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  137. package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  138. package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  139. package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  140. package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  141. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  142. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  143. package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  144. package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  145. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  146. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  147. package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  148. package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  149. package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  150. package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  151. package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  152. package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  153. package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  154. package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  155. package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  156. package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  157. package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
  158. package/.claude/settings.json +0 -57
  159. package/.claude/skills/agent-prompt/SKILL.md +0 -54
  160. package/.claude/skills/agent-prompt/references/agentic-patterns.md +0 -94
  161. package/.claude/skills/agent-prompt/references/anti-patterns.md +0 -140
  162. package/.claude/skills/agent-prompt/references/context-design.md +0 -124
  163. package/.claude/skills/agent-prompt/references/core-principles.md +0 -75
  164. package/.claude/skills/agent-prompt/references/model-guidance.md +0 -118
  165. package/.claude/skills/agent-prompt/references/output-formats.md +0 -98
  166. package/.claude/skills/agent-prompt/references/skill-structure.md +0 -115
  167. package/.claude/skills/agent-prompt/references/system-prompts.md +0 -115
  168. package/.claude/skills/notseer/SKILL.md +0 -131
  169. package/.claude/skills/skill-writer/SKILL.md +0 -140
  170. package/.claude/skills/testing-guidelines/SKILL.md +0 -132
  171. package/.claude/skills/warden-skill/SKILL.md +0 -250
  172. package/.claude/skills/warden-skill/references/config-schema.md +0 -133
  173. package/.dex/config.toml +0 -2
  174. package/.github/workflows/ci.yml +0 -33
  175. package/.github/workflows/release.yml +0 -59
  176. package/.github/workflows/warden.yml +0 -40
  177. package/AGENTS.md +0 -89
  178. package/CONTRIBUTING.md +0 -60
  179. package/SPEC.md +0 -263
  180. package/action.yml +0 -87
  181. package/assets/favicon.png +0 -0
  182. package/assets/warden-icon-bw.svg +0 -5
  183. package/assets/warden-icon-purple.png +0 -0
  184. package/assets/warden-icon-purple.svg +0 -5
  185. package/dist/action/159.index.js +0 -523
  186. package/dist/action/159.index.js.map +0 -1
  187. package/dist/action/action/index.d.ts +0 -2
  188. package/dist/action/action/index.d.ts.map +0 -1
  189. package/dist/action/action/main.d.ts +0 -2
  190. package/dist/action/action/main.d.ts.map +0 -1
  191. package/dist/action/cli/args.d.ts +0 -74
  192. package/dist/action/cli/args.d.ts.map +0 -1
  193. package/dist/action/cli/args.test.d.ts +0 -2
  194. package/dist/action/cli/args.test.d.ts.map +0 -1
  195. package/dist/action/cli/commands/add.d.ts +0 -7
  196. package/dist/action/cli/commands/add.d.ts.map +0 -1
  197. package/dist/action/cli/commands/init.d.ts +0 -10
  198. package/dist/action/cli/commands/init.d.ts.map +0 -1
  199. package/dist/action/cli/commands/init.test.d.ts +0 -2
  200. package/dist/action/cli/commands/init.test.d.ts.map +0 -1
  201. package/dist/action/cli/commands/setup-app/browser.d.ts +0 -9
  202. package/dist/action/cli/commands/setup-app/browser.d.ts.map +0 -1
  203. package/dist/action/cli/commands/setup-app/credentials.d.ts +0 -15
  204. package/dist/action/cli/commands/setup-app/credentials.d.ts.map +0 -1
  205. package/dist/action/cli/commands/setup-app/manifest.d.ts +0 -24
  206. package/dist/action/cli/commands/setup-app/manifest.d.ts.map +0 -1
  207. package/dist/action/cli/commands/setup-app/server.d.ts +0 -28
  208. package/dist/action/cli/commands/setup-app/server.d.ts.map +0 -1
  209. package/dist/action/cli/commands/setup-app.d.ts +0 -11
  210. package/dist/action/cli/commands/setup-app.d.ts.map +0 -1
  211. package/dist/action/cli/commands/sync.d.ts +0 -9
  212. package/dist/action/cli/commands/sync.d.ts.map +0 -1
  213. package/dist/action/cli/context.d.ts +0 -27
  214. package/dist/action/cli/context.d.ts.map +0 -1
  215. package/dist/action/cli/files.d.ts +0 -22
  216. package/dist/action/cli/files.d.ts.map +0 -1
  217. package/dist/action/cli/files.test.d.ts +0 -2
  218. package/dist/action/cli/files.test.d.ts.map +0 -1
  219. package/dist/action/cli/fix.d.ts +0 -41
  220. package/dist/action/cli/fix.d.ts.map +0 -1
  221. package/dist/action/cli/fix.test.d.ts +0 -2
  222. package/dist/action/cli/fix.test.d.ts.map +0 -1
  223. package/dist/action/cli/git.d.ts +0 -73
  224. package/dist/action/cli/git.d.ts.map +0 -1
  225. package/dist/action/cli/git.test.d.ts +0 -2
  226. package/dist/action/cli/git.test.d.ts.map +0 -1
  227. package/dist/action/cli/index.d.ts +0 -3
  228. package/dist/action/cli/index.d.ts.map +0 -1
  229. package/dist/action/cli/main.d.ts +0 -7
  230. package/dist/action/cli/main.d.ts.map +0 -1
  231. package/dist/action/cli/output/box.d.ts +0 -75
  232. package/dist/action/cli/output/box.d.ts.map +0 -1
  233. package/dist/action/cli/output/formatters.d.ts +0 -90
  234. package/dist/action/cli/output/formatters.d.ts.map +0 -1
  235. package/dist/action/cli/output/formatters.test.d.ts +0 -2
  236. package/dist/action/cli/output/formatters.test.d.ts.map +0 -1
  237. package/dist/action/cli/output/icons.d.ts +0 -11
  238. package/dist/action/cli/output/icons.d.ts.map +0 -1
  239. package/dist/action/cli/output/index.d.ts +0 -10
  240. package/dist/action/cli/output/index.d.ts.map +0 -1
  241. package/dist/action/cli/output/ink-runner.d.ts +0 -9
  242. package/dist/action/cli/output/ink-runner.d.ts.map +0 -1
  243. package/dist/action/cli/output/jsonl.d.ts +0 -43
  244. package/dist/action/cli/output/jsonl.d.ts.map +0 -1
  245. package/dist/action/cli/output/jsonl.test.d.ts +0 -2
  246. package/dist/action/cli/output/jsonl.test.d.ts.map +0 -1
  247. package/dist/action/cli/output/reporter.d.ts +0 -108
  248. package/dist/action/cli/output/reporter.d.ts.map +0 -1
  249. package/dist/action/cli/output/tasks.d.ts +0 -89
  250. package/dist/action/cli/output/tasks.d.ts.map +0 -1
  251. package/dist/action/cli/output/tty.d.ts +0 -21
  252. package/dist/action/cli/output/tty.d.ts.map +0 -1
  253. package/dist/action/cli/output/tty.test.d.ts +0 -2
  254. package/dist/action/cli/output/tty.test.d.ts.map +0 -1
  255. package/dist/action/cli/output/verbosity.d.ts +0 -20
  256. package/dist/action/cli/output/verbosity.d.ts.map +0 -1
  257. package/dist/action/cli/output/verbosity.test.d.ts +0 -2
  258. package/dist/action/cli/output/verbosity.test.d.ts.map +0 -1
  259. package/dist/action/cli/terminal.d.ts +0 -19
  260. package/dist/action/cli/terminal.d.ts.map +0 -1
  261. package/dist/action/cli/terminal.test.d.ts +0 -2
  262. package/dist/action/cli/terminal.test.d.ts.map +0 -1
  263. package/dist/action/config/index.d.ts +0 -4
  264. package/dist/action/config/index.d.ts.map +0 -1
  265. package/dist/action/config/loader.d.ts +0 -27
  266. package/dist/action/config/loader.d.ts.map +0 -1
  267. package/dist/action/config/loader.test.d.ts +0 -2
  268. package/dist/action/config/loader.test.d.ts.map +0 -1
  269. package/dist/action/config/schema.d.ts +0 -318
  270. package/dist/action/config/schema.d.ts.map +0 -1
  271. package/dist/action/config/writer.d.ts +0 -11
  272. package/dist/action/config/writer.d.ts.map +0 -1
  273. package/dist/action/config/writer.test.d.ts +0 -2
  274. package/dist/action/config/writer.test.d.ts.map +0 -1
  275. package/dist/action/diff/classify.d.ts +0 -29
  276. package/dist/action/diff/classify.d.ts.map +0 -1
  277. package/dist/action/diff/classify.test.d.ts +0 -2
  278. package/dist/action/diff/classify.test.d.ts.map +0 -1
  279. package/dist/action/diff/coalesce.d.ts +0 -42
  280. package/dist/action/diff/coalesce.d.ts.map +0 -1
  281. package/dist/action/diff/coalesce.test.d.ts +0 -2
  282. package/dist/action/diff/coalesce.test.d.ts.map +0 -1
  283. package/dist/action/diff/context.d.ts +0 -30
  284. package/dist/action/diff/context.d.ts.map +0 -1
  285. package/dist/action/diff/context.test.d.ts +0 -2
  286. package/dist/action/diff/context.test.d.ts.map +0 -1
  287. package/dist/action/diff/index.d.ts +0 -5
  288. package/dist/action/diff/index.d.ts.map +0 -1
  289. package/dist/action/diff/parser.d.ts +0 -52
  290. package/dist/action/diff/parser.d.ts.map +0 -1
  291. package/dist/action/diff/parser.test.d.ts +0 -2
  292. package/dist/action/diff/parser.test.d.ts.map +0 -1
  293. package/dist/action/event/context.d.ts +0 -9
  294. package/dist/action/event/context.d.ts.map +0 -1
  295. package/dist/action/event/index.d.ts +0 -3
  296. package/dist/action/event/index.d.ts.map +0 -1
  297. package/dist/action/event/schedule-context.d.ts +0 -30
  298. package/dist/action/event/schedule-context.d.ts.map +0 -1
  299. package/dist/action/examples/examples.integration.test.d.ts +0 -2
  300. package/dist/action/examples/examples.integration.test.d.ts.map +0 -1
  301. package/dist/action/examples/index.d.ts +0 -50
  302. package/dist/action/examples/index.d.ts.map +0 -1
  303. package/dist/action/examples/index.test.d.ts +0 -2
  304. package/dist/action/examples/index.test.d.ts.map +0 -1
  305. package/dist/action/examples/setup.d.ts +0 -2
  306. package/dist/action/examples/setup.d.ts.map +0 -1
  307. package/dist/action/index.d.ts +0 -11
  308. package/dist/action/index.d.ts.map +0 -1
  309. package/dist/action/index.js +0 -38231
  310. package/dist/action/index.js.map +0 -1
  311. package/dist/action/licenses.txt +0 -992
  312. package/dist/action/main.d.ts +0 -2
  313. package/dist/action/main.d.ts.map +0 -1
  314. package/dist/action/main.js +0 -707
  315. package/dist/action/main.js.map +0 -1
  316. package/dist/action/output/dedup.d.ts +0 -153
  317. package/dist/action/output/dedup.d.ts.map +0 -1
  318. package/dist/action/output/dedup.test.d.ts +0 -2
  319. package/dist/action/output/dedup.test.d.ts.map +0 -1
  320. package/dist/action/output/github-checks.d.ts +0 -106
  321. package/dist/action/output/github-checks.d.ts.map +0 -1
  322. package/dist/action/output/github-checks.test.d.ts +0 -2
  323. package/dist/action/output/github-checks.test.d.ts.map +0 -1
  324. package/dist/action/output/github-issues.d.ts +0 -35
  325. package/dist/action/output/github-issues.d.ts.map +0 -1
  326. package/dist/action/output/index.d.ts +0 -6
  327. package/dist/action/output/index.d.ts.map +0 -1
  328. package/dist/action/output/issue-renderer.d.ts +0 -20
  329. package/dist/action/output/issue-renderer.d.ts.map +0 -1
  330. package/dist/action/output/renderer.d.ts +0 -4
  331. package/dist/action/output/renderer.d.ts.map +0 -1
  332. package/dist/action/output/renderer.test.d.ts +0 -2
  333. package/dist/action/output/renderer.test.d.ts.map +0 -1
  334. package/dist/action/output/stale.d.ts +0 -31
  335. package/dist/action/output/stale.d.ts.map +0 -1
  336. package/dist/action/output/stale.test.d.ts +0 -2
  337. package/dist/action/output/stale.test.d.ts.map +0 -1
  338. package/dist/action/output/types.d.ts +0 -31
  339. package/dist/action/output/types.d.ts.map +0 -1
  340. package/dist/action/package.json +0 -3
  341. package/dist/action/sdk/index.d.ts +0 -2
  342. package/dist/action/sdk/index.d.ts.map +0 -1
  343. package/dist/action/sdk/runner.d.ts +0 -202
  344. package/dist/action/sdk/runner.d.ts.map +0 -1
  345. package/dist/action/sdk/runner.test.d.ts +0 -2
  346. package/dist/action/sdk/runner.test.d.ts.map +0 -1
  347. package/dist/action/skills/index.d.ts +0 -5
  348. package/dist/action/skills/index.d.ts.map +0 -1
  349. package/dist/action/skills/loader.d.ts +0 -111
  350. package/dist/action/skills/loader.d.ts.map +0 -1
  351. package/dist/action/skills/loader.test.d.ts +0 -2
  352. package/dist/action/skills/loader.test.d.ts.map +0 -1
  353. package/dist/action/skills/remote.d.ts +0 -117
  354. package/dist/action/skills/remote.d.ts.map +0 -1
  355. package/dist/action/skills/remote.test.d.ts +0 -2
  356. package/dist/action/skills/remote.test.d.ts.map +0 -1
  357. package/dist/action/sourcemap-register.cjs +0 -1
  358. package/dist/action/triggers/matcher.d.ts +0 -30
  359. package/dist/action/triggers/matcher.d.ts.map +0 -1
  360. package/dist/action/triggers/matcher.test.d.ts +0 -2
  361. package/dist/action/triggers/matcher.test.d.ts.map +0 -1
  362. package/dist/action/types/index.d.ts +0 -269
  363. package/dist/action/types/index.d.ts.map +0 -1
  364. package/dist/action/utils/async.d.ts +0 -5
  365. package/dist/action/utils/async.d.ts.map +0 -1
  366. package/dist/action/utils/index.d.ts +0 -16
  367. package/dist/action/utils/index.d.ts.map +0 -1
  368. package/dist/action/utils/index.test.d.ts +0 -2
  369. package/dist/action/utils/index.test.d.ts.map +0 -1
  370. package/dist/action/utils/version.d.ts +0 -3
  371. package/dist/action/utils/version.d.ts.map +0 -1
  372. package/dist/cli/args.test.d.ts +0 -2
  373. package/dist/cli/args.test.d.ts.map +0 -1
  374. package/dist/cli/args.test.js +0 -392
  375. package/dist/cli/args.test.js.map +0 -1
  376. package/dist/cli/commands/init.test.d.ts +0 -2
  377. package/dist/cli/commands/init.test.d.ts.map +0 -1
  378. package/dist/cli/commands/init.test.js +0 -117
  379. package/dist/cli/commands/init.test.js.map +0 -1
  380. package/dist/cli/files.test.d.ts +0 -2
  381. package/dist/cli/files.test.d.ts.map +0 -1
  382. package/dist/cli/files.test.js +0 -117
  383. package/dist/cli/files.test.js.map +0 -1
  384. package/dist/cli/fix.test.d.ts +0 -2
  385. package/dist/cli/fix.test.d.ts.map +0 -1
  386. package/dist/cli/fix.test.js +0 -251
  387. package/dist/cli/fix.test.js.map +0 -1
  388. package/dist/cli/git.test.d.ts +0 -2
  389. package/dist/cli/git.test.d.ts.map +0 -1
  390. package/dist/cli/git.test.js +0 -96
  391. package/dist/cli/git.test.js.map +0 -1
  392. package/dist/cli/output/formatters.test.d.ts +0 -2
  393. package/dist/cli/output/formatters.test.d.ts.map +0 -1
  394. package/dist/cli/output/formatters.test.js +0 -152
  395. package/dist/cli/output/formatters.test.js.map +0 -1
  396. package/dist/cli/output/jsonl.test.d.ts +0 -2
  397. package/dist/cli/output/jsonl.test.d.ts.map +0 -1
  398. package/dist/cli/output/jsonl.test.js +0 -284
  399. package/dist/cli/output/jsonl.test.js.map +0 -1
  400. package/dist/cli/output/tty.test.d.ts +0 -2
  401. package/dist/cli/output/tty.test.d.ts.map +0 -1
  402. package/dist/cli/output/tty.test.js +0 -105
  403. package/dist/cli/output/tty.test.js.map +0 -1
  404. package/dist/cli/output/verbosity.test.d.ts +0 -2
  405. package/dist/cli/output/verbosity.test.d.ts.map +0 -1
  406. package/dist/cli/output/verbosity.test.js +0 -35
  407. package/dist/cli/output/verbosity.test.js.map +0 -1
  408. package/dist/cli/terminal.test.d.ts +0 -2
  409. package/dist/cli/terminal.test.d.ts.map +0 -1
  410. package/dist/cli/terminal.test.js +0 -123
  411. package/dist/cli/terminal.test.js.map +0 -1
  412. package/dist/config/loader.test.d.ts +0 -2
  413. package/dist/config/loader.test.d.ts.map +0 -1
  414. package/dist/config/loader.test.js +0 -263
  415. package/dist/config/loader.test.js.map +0 -1
  416. package/dist/config/writer.test.d.ts +0 -2
  417. package/dist/config/writer.test.d.ts.map +0 -1
  418. package/dist/config/writer.test.js +0 -98
  419. package/dist/config/writer.test.js.map +0 -1
  420. package/dist/diff/classify.test.d.ts +0 -2
  421. package/dist/diff/classify.test.d.ts.map +0 -1
  422. package/dist/diff/classify.test.js +0 -140
  423. package/dist/diff/classify.test.js.map +0 -1
  424. package/dist/diff/coalesce.test.d.ts +0 -2
  425. package/dist/diff/coalesce.test.d.ts.map +0 -1
  426. package/dist/diff/coalesce.test.js +0 -159
  427. package/dist/diff/coalesce.test.js.map +0 -1
  428. package/dist/diff/context.test.d.ts +0 -2
  429. package/dist/diff/context.test.d.ts.map +0 -1
  430. package/dist/diff/context.test.js +0 -190
  431. package/dist/diff/context.test.js.map +0 -1
  432. package/dist/diff/parser.test.d.ts +0 -2
  433. package/dist/diff/parser.test.d.ts.map +0 -1
  434. package/dist/diff/parser.test.js +0 -178
  435. package/dist/diff/parser.test.js.map +0 -1
  436. package/dist/examples/examples.integration.test.d.ts +0 -2
  437. package/dist/examples/examples.integration.test.d.ts.map +0 -1
  438. package/dist/examples/examples.integration.test.js +0 -55
  439. package/dist/examples/examples.integration.test.js.map +0 -1
  440. package/dist/examples/index.test.d.ts +0 -2
  441. package/dist/examples/index.test.d.ts.map +0 -1
  442. package/dist/examples/index.test.js +0 -88
  443. package/dist/examples/index.test.js.map +0 -1
  444. package/dist/output/dedup.test.d.ts +0 -2
  445. package/dist/output/dedup.test.d.ts.map +0 -1
  446. package/dist/output/dedup.test.js +0 -357
  447. package/dist/output/dedup.test.js.map +0 -1
  448. package/dist/output/github-checks.test.d.ts +0 -2
  449. package/dist/output/github-checks.test.d.ts.map +0 -1
  450. package/dist/output/github-checks.test.js +0 -255
  451. package/dist/output/github-checks.test.js.map +0 -1
  452. package/dist/output/renderer.test.d.ts +0 -2
  453. package/dist/output/renderer.test.d.ts.map +0 -1
  454. package/dist/output/renderer.test.js +0 -645
  455. package/dist/output/renderer.test.js.map +0 -1
  456. package/dist/output/stale.test.d.ts +0 -2
  457. package/dist/output/stale.test.d.ts.map +0 -1
  458. package/dist/output/stale.test.js +0 -330
  459. package/dist/output/stale.test.js.map +0 -1
  460. package/dist/sdk/runner.test.d.ts +0 -2
  461. package/dist/sdk/runner.test.d.ts.map +0 -1
  462. package/dist/sdk/runner.test.js +0 -677
  463. package/dist/sdk/runner.test.js.map +0 -1
  464. package/dist/skills/loader.test.d.ts +0 -2
  465. package/dist/skills/loader.test.d.ts.map +0 -1
  466. package/dist/skills/loader.test.js +0 -241
  467. package/dist/skills/loader.test.js.map +0 -1
  468. package/dist/skills/remote.test.d.ts +0 -2
  469. package/dist/skills/remote.test.d.ts.map +0 -1
  470. package/dist/skills/remote.test.js +0 -582
  471. package/dist/skills/remote.test.js.map +0 -1
  472. package/dist/triggers/matcher.test.d.ts +0 -2
  473. package/dist/triggers/matcher.test.d.ts.map +0 -1
  474. package/dist/triggers/matcher.test.js +0 -234
  475. package/dist/triggers/matcher.test.js.map +0 -1
  476. package/dist/utils/index.test.d.ts +0 -2
  477. package/dist/utils/index.test.d.ts.map +0 -1
  478. package/dist/utils/index.test.js +0 -68
  479. package/dist/utils/index.test.js.map +0 -1
  480. package/docs/astro.config.mjs +0 -43
  481. package/docs/package.json +0 -19
  482. package/docs/pnpm-lock.yaml +0 -4000
  483. package/docs/public/favicon.svg +0 -5
  484. package/docs/src/components/Code.astro +0 -141
  485. package/docs/src/components/PackageManagerTabs.astro +0 -183
  486. package/docs/src/components/Terminal.astro +0 -212
  487. package/docs/src/layouts/Base.astro +0 -380
  488. package/docs/src/pages/cli.astro +0 -167
  489. package/docs/src/pages/config.astro +0 -395
  490. package/docs/src/pages/guide.astro +0 -450
  491. package/docs/src/pages/index.astro +0 -490
  492. package/docs/src/styles/global.css +0 -551
  493. package/docs/src/utils/version.ts +0 -6
  494. package/docs/tsconfig.json +0 -3
  495. package/docs/vercel.json +0 -5
  496. package/eslint.config.js +0 -33
  497. package/src/action/index.ts +0 -1
  498. package/src/action/main.ts +0 -868
  499. package/src/cli/args.test.ts +0 -477
  500. package/src/cli/args.ts +0 -414
  501. package/src/cli/commands/add.ts +0 -447
  502. package/src/cli/commands/init.test.ts +0 -137
  503. package/src/cli/commands/init.ts +0 -134
  504. package/src/cli/commands/setup-app/browser.ts +0 -38
  505. package/src/cli/commands/setup-app/credentials.ts +0 -45
  506. package/src/cli/commands/setup-app/manifest.ts +0 -48
  507. package/src/cli/commands/setup-app/server.ts +0 -172
  508. package/src/cli/commands/setup-app.ts +0 -156
  509. package/src/cli/commands/sync.ts +0 -114
  510. package/src/cli/context.ts +0 -131
  511. package/src/cli/files.test.ts +0 -155
  512. package/src/cli/files.ts +0 -89
  513. package/src/cli/fix.test.ts +0 -310
  514. package/src/cli/fix.ts +0 -387
  515. package/src/cli/git.test.ts +0 -119
  516. package/src/cli/git.ts +0 -318
  517. package/src/cli/index.ts +0 -14
  518. package/src/cli/main.ts +0 -672
  519. package/src/cli/output/box.ts +0 -235
  520. package/src/cli/output/formatters.test.ts +0 -187
  521. package/src/cli/output/formatters.ts +0 -269
  522. package/src/cli/output/icons.ts +0 -13
  523. package/src/cli/output/index.ts +0 -44
  524. package/src/cli/output/ink-runner.tsx +0 -337
  525. package/src/cli/output/jsonl.test.ts +0 -347
  526. package/src/cli/output/jsonl.ts +0 -126
  527. package/src/cli/output/reporter.ts +0 -434
  528. package/src/cli/output/tasks.ts +0 -374
  529. package/src/cli/output/tty.test.ts +0 -117
  530. package/src/cli/output/tty.ts +0 -60
  531. package/src/cli/output/verbosity.test.ts +0 -40
  532. package/src/cli/output/verbosity.ts +0 -31
  533. package/src/cli/terminal.test.ts +0 -148
  534. package/src/cli/terminal.ts +0 -301
  535. package/src/config/index.ts +0 -3
  536. package/src/config/loader.test.ts +0 -313
  537. package/src/config/loader.ts +0 -103
  538. package/src/config/schema.ts +0 -168
  539. package/src/config/writer.test.ts +0 -119
  540. package/src/config/writer.ts +0 -84
  541. package/src/diff/classify.test.ts +0 -162
  542. package/src/diff/classify.ts +0 -92
  543. package/src/diff/coalesce.test.ts +0 -208
  544. package/src/diff/coalesce.ts +0 -133
  545. package/src/diff/context.test.ts +0 -226
  546. package/src/diff/context.ts +0 -201
  547. package/src/diff/index.ts +0 -4
  548. package/src/diff/parser.test.ts +0 -212
  549. package/src/diff/parser.ts +0 -149
  550. package/src/event/context.ts +0 -132
  551. package/src/event/index.ts +0 -2
  552. package/src/event/schedule-context.ts +0 -101
  553. package/src/examples/examples.integration.test.ts +0 -66
  554. package/src/examples/index.test.ts +0 -101
  555. package/src/examples/index.ts +0 -122
  556. package/src/examples/setup.ts +0 -25
  557. package/src/index.ts +0 -115
  558. package/src/output/dedup.test.ts +0 -419
  559. package/src/output/dedup.ts +0 -607
  560. package/src/output/github-checks.test.ts +0 -300
  561. package/src/output/github-checks.ts +0 -476
  562. package/src/output/github-issues.ts +0 -329
  563. package/src/output/index.ts +0 -5
  564. package/src/output/issue-renderer.ts +0 -197
  565. package/src/output/renderer.test.ts +0 -727
  566. package/src/output/renderer.ts +0 -217
  567. package/src/output/stale.test.ts +0 -375
  568. package/src/output/stale.ts +0 -155
  569. package/src/output/types.ts +0 -34
  570. package/src/sdk/index.ts +0 -1
  571. package/src/sdk/runner.test.ts +0 -806
  572. package/src/sdk/runner.ts +0 -1232
  573. package/src/skills/index.ts +0 -36
  574. package/src/skills/loader.test.ts +0 -300
  575. package/src/skills/loader.ts +0 -423
  576. package/src/skills/remote.test.ts +0 -704
  577. package/src/skills/remote.ts +0 -604
  578. package/src/triggers/matcher.test.ts +0 -277
  579. package/src/triggers/matcher.ts +0 -152
  580. package/src/types/index.ts +0 -194
  581. package/src/utils/async.ts +0 -18
  582. package/src/utils/index.test.ts +0 -84
  583. package/src/utils/index.ts +0 -51
  584. package/src/utils/version.ts +0 -17
  585. package/tsconfig.json +0 -25
  586. package/vitest.config.ts +0 -8
  587. package/vitest.integration.config.ts +0 -11
  588. 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
- }