@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
package/src/index.ts DELETED
@@ -1,115 +0,0 @@
1
- // =============================================================================
2
- // Warden Public API
3
- // =============================================================================
4
- // This file exports the intentional public API for Warden consumers.
5
- // Internal implementation details are not exported.
6
- // =============================================================================
7
-
8
- // -----------------------------------------------------------------------------
9
- // Core Types and Schemas
10
- // -----------------------------------------------------------------------------
11
- export {
12
- // Severity
13
- SeveritySchema,
14
- SEVERITY_ORDER,
15
- // Location
16
- LocationSchema,
17
- // Suggested Fix
18
- SuggestedFixSchema,
19
- // Finding
20
- FindingSchema,
21
- // Skill Report
22
- SkillReportSchema,
23
- // GitHub Events
24
- GitHubEventTypeSchema,
25
- PullRequestActionSchema,
26
- // File Changes
27
- FileChangeSchema,
28
- // Context
29
- PullRequestContextSchema,
30
- RepositoryContextSchema,
31
- EventContextSchema,
32
- } from './types/index.js';
33
-
34
- export type {
35
- Severity,
36
- Location,
37
- SuggestedFix,
38
- Finding,
39
- SkillReport,
40
- GitHubEventType,
41
- PullRequestAction,
42
- FileChange,
43
- PullRequestContext,
44
- RepositoryContext,
45
- EventContext,
46
- } from './types/index.js';
47
-
48
- // -----------------------------------------------------------------------------
49
- // Configuration
50
- // -----------------------------------------------------------------------------
51
- export {
52
- // Schemas
53
- SkillDefinitionSchema,
54
- TriggerSchema,
55
- WardenConfigSchema,
56
- PathFilterSchema,
57
- OutputConfigSchema,
58
- // Functions
59
- loadWardenConfig,
60
- resolveTrigger,
61
- // Errors
62
- ConfigLoadError,
63
- } from './config/index.js';
64
-
65
- export type {
66
- SkillDefinition,
67
- Trigger,
68
- WardenConfig,
69
- PathFilter,
70
- OutputConfig,
71
- ResolvedTrigger,
72
- } from './config/index.js';
73
-
74
- // -----------------------------------------------------------------------------
75
- // SDK Runner
76
- // -----------------------------------------------------------------------------
77
- export { runSkill, SkillRunnerError } from './sdk/runner.js';
78
-
79
- export type { SkillRunnerOptions, SkillRunnerCallbacks } from './sdk/runner.js';
80
-
81
- // -----------------------------------------------------------------------------
82
- // Skills
83
- // -----------------------------------------------------------------------------
84
- export {
85
- resolveSkillAsync,
86
- SkillLoaderError,
87
- } from './skills/index.js';
88
-
89
- // -----------------------------------------------------------------------------
90
- // Event Context
91
- // -----------------------------------------------------------------------------
92
- export { buildEventContext, EventContextError } from './event/context.js';
93
-
94
- // -----------------------------------------------------------------------------
95
- // Trigger Matching
96
- // -----------------------------------------------------------------------------
97
- export {
98
- matchTrigger,
99
- matchGlob,
100
- shouldFail,
101
- countFindingsAtOrAbove,
102
- countSeverity,
103
- } from './triggers/matcher.js';
104
-
105
- // -----------------------------------------------------------------------------
106
- // Output Rendering
107
- // -----------------------------------------------------------------------------
108
- export { renderSkillReport } from './output/renderer.js';
109
-
110
- export type {
111
- RenderResult,
112
- RenderOptions,
113
- GitHubReview,
114
- GitHubComment,
115
- } from './output/types.js';
@@ -1,419 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import {
3
- generateContentHash,
4
- generateMarker,
5
- parseMarker,
6
- parseWardenComment,
7
- isWardenComment,
8
- deduplicateFindings,
9
- findingToExistingComment,
10
- parseWardenSkills,
11
- updateWardenCommentBody,
12
- } from './dedup.js';
13
- import type { Finding } from '../types/index.js';
14
- import type { ExistingComment } from './dedup.js';
15
-
16
- describe('generateContentHash', () => {
17
- it('generates consistent 8-char hex hash', () => {
18
- const hash = generateContentHash('SQL Injection', 'User input passed to query');
19
- expect(hash).toMatch(/^[a-f0-9]{8}$/);
20
- });
21
-
22
- it('returns same hash for same content', () => {
23
- const hash1 = generateContentHash('Title', 'Description');
24
- const hash2 = generateContentHash('Title', 'Description');
25
- expect(hash1).toBe(hash2);
26
- });
27
-
28
- it('returns different hash for different content', () => {
29
- const hash1 = generateContentHash('Title A', 'Description');
30
- const hash2 = generateContentHash('Title B', 'Description');
31
- expect(hash1).not.toBe(hash2);
32
- });
33
- });
34
-
35
- describe('generateMarker', () => {
36
- it('generates marker in expected format', () => {
37
- const marker = generateMarker('src/db.ts', 42, 'a1b2c3d4');
38
- expect(marker).toBe('<!-- warden:v1:src/db.ts:42:a1b2c3d4 -->');
39
- });
40
-
41
- it('handles paths with special characters', () => {
42
- const marker = generateMarker('src/utils/db-helper.ts', 100, 'abcd1234');
43
- expect(marker).toBe('<!-- warden:v1:src/utils/db-helper.ts:100:abcd1234 -->');
44
- });
45
- });
46
-
47
- describe('parseMarker', () => {
48
- it('parses valid marker', () => {
49
- const body = `**:warning: SQL Injection**
50
-
51
- User input passed to query.
52
-
53
- ---
54
- <sub>warden: security-review</sub>
55
- <!-- warden:v1:src/db.ts:42:a1b2c3d4 -->`;
56
-
57
- const marker = parseMarker(body);
58
- expect(marker).toEqual({
59
- path: 'src/db.ts',
60
- line: 42,
61
- contentHash: 'a1b2c3d4',
62
- });
63
- });
64
-
65
- it('returns null for body without marker', () => {
66
- const body = '**:warning: Some Issue**\n\nDescription';
67
- expect(parseMarker(body)).toBeNull();
68
- });
69
-
70
- it('returns null for invalid marker format', () => {
71
- const body = '<!-- warden:invalid -->';
72
- expect(parseMarker(body)).toBeNull();
73
- });
74
- });
75
-
76
- describe('parseWardenComment', () => {
77
- it('parses comment with emoji', () => {
78
- const body = `**:warning: SQL Injection**
79
-
80
- User input passed directly to query.
81
-
82
- ---
83
- <sub>warden: security-review</sub>`;
84
-
85
- const parsed = parseWardenComment(body);
86
- expect(parsed).toEqual({
87
- title: 'SQL Injection',
88
- description: 'User input passed directly to query.',
89
- });
90
- });
91
-
92
- it('parses comment without emoji', () => {
93
- const body = `**Missing Validation**
94
-
95
- No input validation on user data.
96
-
97
- ---
98
- <sub>warden: code-review</sub>`;
99
-
100
- const parsed = parseWardenComment(body);
101
- expect(parsed).toEqual({
102
- title: 'Missing Validation',
103
- description: 'No input validation on user data.',
104
- });
105
- });
106
-
107
- it('returns null for non-Warden comment', () => {
108
- const body = 'This is a regular comment without the expected format.';
109
- expect(parseWardenComment(body)).toBeNull();
110
- });
111
- });
112
-
113
- describe('isWardenComment', () => {
114
- it('returns true for comment with attribution', () => {
115
- const body = `**:warning: Issue**\n\nDescription\n\n---\n<sub>warden: skill</sub>`;
116
- expect(isWardenComment(body)).toBe(true);
117
- });
118
-
119
- it('returns true for comment with marker', () => {
120
- const body = `**Issue**\n\n<!-- warden:v1:file.ts:10:abc12345 -->`;
121
- expect(isWardenComment(body)).toBe(true);
122
- });
123
-
124
- it('returns false for regular comment', () => {
125
- const body = 'This is a regular comment.';
126
- expect(isWardenComment(body)).toBe(false);
127
- });
128
- });
129
-
130
- describe('deduplicateFindings', () => {
131
- const baseFinding: Finding = {
132
- id: 'f1',
133
- severity: 'high',
134
- title: 'SQL Injection',
135
- description: 'User input passed to query',
136
- location: {
137
- path: 'src/db.ts',
138
- startLine: 42,
139
- },
140
- };
141
-
142
- it('returns all findings when no existing comments', async () => {
143
- const findings = [baseFinding];
144
- const result = await deduplicateFindings(findings, [], { hashOnly: true });
145
- expect(result.newFindings).toHaveLength(1);
146
- expect(result.newFindings[0]).toBe(baseFinding);
147
- expect(result.duplicateActions).toHaveLength(0);
148
- });
149
-
150
- it('returns all findings when findings array is empty', async () => {
151
- const existingComments: ExistingComment[] = [
152
- {
153
- id: 1,
154
- path: 'src/db.ts',
155
- line: 42,
156
- title: 'SQL Injection',
157
- description: 'User input passed to query',
158
- contentHash: generateContentHash('SQL Injection', 'User input passed to query'),
159
- },
160
- ];
161
-
162
- const result = await deduplicateFindings([], existingComments, { hashOnly: true });
163
- expect(result.newFindings).toHaveLength(0);
164
- expect(result.duplicateActions).toHaveLength(0);
165
- });
166
-
167
- it('filters out exact hash matches and creates duplicate action', async () => {
168
- const existingComments: ExistingComment[] = [
169
- {
170
- id: 1,
171
- path: 'src/db.ts',
172
- line: 42,
173
- title: 'SQL Injection',
174
- description: 'User input passed to query',
175
- contentHash: generateContentHash('SQL Injection', 'User input passed to query'),
176
- isWarden: true,
177
- },
178
- ];
179
-
180
- const result = await deduplicateFindings([baseFinding], existingComments, { hashOnly: true });
181
- expect(result.newFindings).toHaveLength(0);
182
- expect(result.duplicateActions).toHaveLength(1);
183
- expect(result.duplicateActions[0]!.type).toBe('update_warden');
184
- expect(result.duplicateActions[0]!.matchType).toBe('hash');
185
- });
186
-
187
- it('keeps findings with different content', async () => {
188
- const existingComments: ExistingComment[] = [
189
- {
190
- id: 1,
191
- path: 'src/db.ts',
192
- line: 42,
193
- title: 'SQL Injection',
194
- description: 'User input passed to query',
195
- contentHash: generateContentHash('SQL Injection', 'User input passed to query'),
196
- },
197
- ];
198
-
199
- const differentFinding: Finding = {
200
- ...baseFinding,
201
- id: 'f2',
202
- title: 'XSS Vulnerability',
203
- description: 'Unescaped output in HTML',
204
- };
205
-
206
- const result = await deduplicateFindings([differentFinding], existingComments, {
207
- hashOnly: true,
208
- });
209
- expect(result.newFindings).toHaveLength(1);
210
- expect(result.newFindings[0]!.title).toBe('XSS Vulnerability');
211
- expect(result.duplicateActions).toHaveLength(0);
212
- });
213
-
214
- it('filters multiple duplicates and keeps unique findings', async () => {
215
- const finding1: Finding = {
216
- id: 'f1',
217
- severity: 'high',
218
- title: 'SQL Injection',
219
- description: 'User input passed to query',
220
- location: { path: 'src/db.ts', startLine: 42 },
221
- };
222
-
223
- const finding2: Finding = {
224
- id: 'f2',
225
- severity: 'medium',
226
- title: 'Missing Error Handling',
227
- description: 'No try-catch block',
228
- location: { path: 'src/api.ts', startLine: 100 },
229
- };
230
-
231
- const finding3: Finding = {
232
- id: 'f3',
233
- severity: 'low',
234
- title: 'Code Style',
235
- description: 'Inconsistent indentation',
236
- location: { path: 'src/utils.ts', startLine: 50 },
237
- };
238
-
239
- const existingComments: ExistingComment[] = [
240
- {
241
- id: 1,
242
- path: 'src/db.ts',
243
- line: 42,
244
- title: 'SQL Injection',
245
- description: 'User input passed to query',
246
- contentHash: generateContentHash('SQL Injection', 'User input passed to query'),
247
- isWarden: true,
248
- },
249
- {
250
- id: 2,
251
- path: 'src/utils.ts',
252
- line: 50,
253
- title: 'Code Style',
254
- description: 'Inconsistent indentation',
255
- contentHash: generateContentHash('Code Style', 'Inconsistent indentation'),
256
- isWarden: false,
257
- },
258
- ];
259
-
260
- const result = await deduplicateFindings([finding1, finding2, finding3], existingComments, {
261
- hashOnly: true,
262
- });
263
- expect(result.newFindings).toHaveLength(1);
264
- expect(result.newFindings[0]!.id).toBe('f2');
265
- expect(result.duplicateActions).toHaveLength(2);
266
- // First should be update_warden (isWarden: true)
267
- expect(result.duplicateActions[0]!.type).toBe('update_warden');
268
- // Second should be react_external (isWarden: false)
269
- expect(result.duplicateActions[1]!.type).toBe('react_external');
270
- });
271
-
272
- it('works without API key (hash-only mode)', async () => {
273
- const findings = [baseFinding];
274
- const existingComments: ExistingComment[] = [];
275
-
276
- const result = await deduplicateFindings(findings, existingComments, {});
277
- expect(result.newFindings).toHaveLength(1);
278
- });
279
- });
280
-
281
- describe('parseWardenSkills', () => {
282
- it('parses single skill', () => {
283
- const body = `**:warning: Issue**\n\nDescription\n\n---\n<sub>warden: security-review</sub>`;
284
- expect(parseWardenSkills(body)).toEqual(['security-review']);
285
- });
286
-
287
- it('parses multiple skills', () => {
288
- const body = `**:warning: Issue**\n\nDescription\n\n---\n<sub>warden: security-review, code-quality, performance</sub>`;
289
- expect(parseWardenSkills(body)).toEqual(['security-review', 'code-quality', 'performance']);
290
- });
291
-
292
- it('handles extra whitespace', () => {
293
- const body = `<sub>warden: skill1 , skill2 </sub>`;
294
- expect(parseWardenSkills(body)).toEqual(['skill1', 'skill2']);
295
- });
296
-
297
- it('returns empty array for non-Warden comment', () => {
298
- const body = 'Regular comment without attribution';
299
- expect(parseWardenSkills(body)).toEqual([]);
300
- });
301
- });
302
-
303
- describe('updateWardenCommentBody', () => {
304
- it('adds new skill to attribution', () => {
305
- const body = `**:warning: Issue**\n\nDescription\n\n---\n<sub>warden: skill1</sub>`;
306
- const result = updateWardenCommentBody(body, 'skill2');
307
- expect(result).toContain('<sub>warden: skill1, skill2</sub>');
308
- });
309
-
310
- it('returns null if skill already listed', () => {
311
- const body = `<sub>warden: skill1, skill2</sub>`;
312
- const result = updateWardenCommentBody(body, 'skill1');
313
- expect(result).toBeNull();
314
- });
315
-
316
- it('preserves rest of comment body', () => {
317
- const body = `**:warning: SQL Injection**\n\nUser input passed to query\n\n---\n<sub>warden: security-review</sub>\n<!-- warden:v1:file.ts:10:abc123 -->`;
318
- const result = updateWardenCommentBody(body, 'code-quality');
319
- expect(result).toContain('**:warning: SQL Injection**');
320
- expect(result).toContain('User input passed to query');
321
- expect(result).toContain('<sub>warden: security-review, code-quality</sub>');
322
- expect(result).toContain('<!-- warden:v1:file.ts:10:abc123 -->');
323
- });
324
- });
325
-
326
- describe('findingToExistingComment', () => {
327
- it('converts finding with location to ExistingComment', () => {
328
- const finding: Finding = {
329
- id: 'f1',
330
- severity: 'high',
331
- title: 'SQL Injection',
332
- description: 'User input passed to query',
333
- location: {
334
- path: 'src/db.ts',
335
- startLine: 42,
336
- endLine: 45,
337
- },
338
- };
339
-
340
- const comment = findingToExistingComment(finding);
341
- expect(comment).toEqual({
342
- id: -1,
343
- path: 'src/db.ts',
344
- line: 45,
345
- title: 'SQL Injection',
346
- description: 'User input passed to query',
347
- contentHash: generateContentHash('SQL Injection', 'User input passed to query'),
348
- isWarden: true,
349
- skills: [],
350
- });
351
- });
352
-
353
- it('includes skill when provided', () => {
354
- const finding: Finding = {
355
- id: 'f1',
356
- severity: 'high',
357
- title: 'SQL Injection',
358
- description: 'User input passed to query',
359
- location: {
360
- path: 'src/db.ts',
361
- startLine: 42,
362
- },
363
- };
364
-
365
- const comment = findingToExistingComment(finding, 'security-review');
366
- expect(comment).not.toBeNull();
367
- expect(comment!.isWarden).toBe(true);
368
- expect(comment!.skills).toEqual(['security-review']);
369
- });
370
-
371
- it('uses startLine when endLine is not set', () => {
372
- const finding: Finding = {
373
- id: 'f1',
374
- severity: 'medium',
375
- title: 'Missing Error Handling',
376
- description: 'No try-catch block',
377
- location: {
378
- path: 'src/api.ts',
379
- startLine: 100,
380
- },
381
- };
382
-
383
- const comment = findingToExistingComment(finding);
384
- expect(comment).not.toBeNull();
385
- expect(comment!.line).toBe(100);
386
- });
387
-
388
- it('returns null for finding without location', () => {
389
- const finding: Finding = {
390
- id: 'f1',
391
- severity: 'low',
392
- title: 'General Issue',
393
- description: 'Some general finding',
394
- };
395
-
396
- const comment = findingToExistingComment(finding);
397
- expect(comment).toBeNull();
398
- });
399
- });
400
-
401
- describe('renderer marker integration', () => {
402
- it('marker can be parsed after being generated', () => {
403
- const path = 'src/db.ts';
404
- const line = 42;
405
- const hash = generateContentHash('SQL Injection', 'User input passed to query');
406
- const marker = generateMarker(path, line, hash);
407
-
408
- const body = `**:warning: SQL Injection**
409
-
410
- User input passed to query
411
-
412
- ---
413
- <sub>warden: security-review</sub>
414
- ${marker}`;
415
-
416
- const parsed = parseMarker(body);
417
- expect(parsed).toEqual({ path, line, contentHash: hash });
418
- });
419
- });