@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,149 +0,0 @@
1
- /**
2
- * Unified diff parser - extracts hunks from patch strings
3
- */
4
-
5
- export interface DiffHunk {
6
- /** Original file start line */
7
- oldStart: number;
8
- /** Original file line count */
9
- oldCount: number;
10
- /** New file start line */
11
- newStart: number;
12
- /** New file line count */
13
- newCount: number;
14
- /** Optional header (function/class name) */
15
- header?: string;
16
- /** The raw hunk content including the @@ line */
17
- content: string;
18
- /** Just the changed lines (without @@ header) */
19
- lines: string[];
20
- }
21
-
22
- export interface ParsedDiff {
23
- /** File path */
24
- filename: string;
25
- /** File status */
26
- status: 'added' | 'removed' | 'modified' | 'renamed';
27
- /** Individual hunks in this file */
28
- hunks: DiffHunk[];
29
- /** The full patch string */
30
- rawPatch: string;
31
- }
32
-
33
- /**
34
- * Parse a unified diff hunk header.
35
- * Format: @@ -oldStart,oldCount +newStart,newCount @@ optional header
36
- */
37
- function parseHunkHeader(line: string): Omit<DiffHunk, 'content' | 'lines'> | null {
38
- const match = line.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)$/);
39
- if (!match || !match[1] || !match[3]) return null;
40
-
41
- return {
42
- oldStart: parseInt(match[1], 10),
43
- oldCount: parseInt(match[2] ?? '1', 10),
44
- newStart: parseInt(match[3], 10),
45
- newCount: parseInt(match[4] ?? '1', 10),
46
- header: match[5]?.trim() || undefined,
47
- };
48
- }
49
-
50
- /** Intermediate hunk structure for parsing */
51
- interface HunkBuilder {
52
- oldStart: number;
53
- oldCount: number;
54
- newStart: number;
55
- newCount: number;
56
- header?: string;
57
- contentParts: string[];
58
- lines: string[];
59
- }
60
-
61
- /**
62
- * Parse a unified diff patch into hunks.
63
- */
64
- export function parsePatch(patch: string): DiffHunk[] {
65
- const lines = patch.split('\n');
66
- const hunks: DiffHunk[] = [];
67
- let currentHunk: HunkBuilder | null = null;
68
-
69
- for (const line of lines) {
70
- const header = parseHunkHeader(line);
71
-
72
- if (header) {
73
- // Save previous hunk if exists
74
- if (currentHunk) {
75
- hunks.push({
76
- ...currentHunk,
77
- content: currentHunk.contentParts.join('\n'),
78
- });
79
- }
80
-
81
- // Start new hunk with array-based content builder
82
- currentHunk = {
83
- ...header,
84
- contentParts: [line],
85
- lines: [],
86
- };
87
- } else if (currentHunk) {
88
- // Add line to current hunk (skip diff metadata lines)
89
- if (!line.startsWith('diff --git') &&
90
- !line.startsWith('index ') &&
91
- !line.startsWith('--- ') &&
92
- !line.startsWith('+++ ') &&
93
- !line.startsWith('\\ No newline')) {
94
- currentHunk.contentParts.push(line);
95
- currentHunk.lines.push(line);
96
- }
97
- }
98
- }
99
-
100
- // Don't forget the last hunk
101
- if (currentHunk) {
102
- hunks.push({
103
- ...currentHunk,
104
- content: currentHunk.contentParts.join('\n'),
105
- });
106
- }
107
-
108
- return hunks;
109
- }
110
-
111
- /**
112
- * Parse a file's patch into a structured diff object.
113
- */
114
- export function parseFileDiff(
115
- filename: string,
116
- patch: string,
117
- status: 'added' | 'removed' | 'modified' | 'renamed' = 'modified'
118
- ): ParsedDiff {
119
- return {
120
- filename,
121
- status,
122
- hunks: parsePatch(patch),
123
- rawPatch: patch,
124
- };
125
- }
126
-
127
- /**
128
- * Get the line range covered by a hunk (in the new file).
129
- */
130
- export function getHunkLineRange(hunk: DiffHunk): { start: number; end: number } {
131
- return {
132
- start: hunk.newStart,
133
- end: hunk.newStart + hunk.newCount - 1,
134
- };
135
- }
136
-
137
- /**
138
- * Get an expanded line range for context.
139
- */
140
- export function getExpandedLineRange(
141
- hunk: DiffHunk,
142
- contextLines = 20
143
- ): { start: number; end: number } {
144
- const range = getHunkLineRange(hunk);
145
- return {
146
- start: Math.max(1, range.start - contextLines),
147
- end: range.end + contextLines,
148
- };
149
- }
@@ -1,132 +0,0 @@
1
- import type { Octokit } from '@octokit/rest';
2
- import { z } from 'zod';
3
- import {
4
- EventContextSchema,
5
- type EventContext,
6
- type FileChange,
7
- type PullRequestContext,
8
- type RepositoryContext,
9
- } from '../types/index.js';
10
-
11
- // GitHub Action event payload schemas
12
- const GitHubUserSchema = z.object({
13
- login: z.string(),
14
- });
15
-
16
- const GitHubRepoSchema = z.object({
17
- name: z.string(),
18
- full_name: z.string(),
19
- default_branch: z.string(),
20
- owner: GitHubUserSchema,
21
- });
22
-
23
- const GitHubPullRequestSchema = z.object({
24
- number: z.number(),
25
- title: z.string(),
26
- body: z.string().nullable(),
27
- user: GitHubUserSchema,
28
- base: z.object({
29
- ref: z.string(),
30
- }),
31
- head: z.object({
32
- ref: z.string(),
33
- sha: z.string(),
34
- }),
35
- });
36
-
37
- const GitHubEventPayloadSchema = z.object({
38
- action: z.string(),
39
- repository: GitHubRepoSchema,
40
- pull_request: GitHubPullRequestSchema.optional(),
41
- });
42
-
43
- export class EventContextError extends Error {
44
- constructor(message: string, options?: { cause?: unknown }) {
45
- super(message, options);
46
- this.name = 'EventContextError';
47
- }
48
- }
49
-
50
- export async function buildEventContext(
51
- eventName: string,
52
- eventPayload: unknown,
53
- repoPath: string,
54
- octokit: Octokit
55
- ): Promise<EventContext> {
56
- const payloadResult = GitHubEventPayloadSchema.safeParse(eventPayload);
57
- if (!payloadResult.success) {
58
- throw new EventContextError('Invalid event payload', { cause: payloadResult.error });
59
- }
60
-
61
- const payload = payloadResult.data;
62
-
63
- const repository: RepositoryContext = {
64
- owner: payload.repository.owner.login,
65
- name: payload.repository.name,
66
- fullName: payload.repository.full_name,
67
- defaultBranch: payload.repository.default_branch,
68
- };
69
-
70
- let pullRequest: PullRequestContext | undefined;
71
-
72
- if (eventName === 'pull_request' && payload.pull_request) {
73
- const pr = payload.pull_request;
74
-
75
- // Fetch files changed in the PR
76
- const files = await fetchPullRequestFiles(
77
- octokit,
78
- repository.owner,
79
- repository.name,
80
- pr.number
81
- );
82
-
83
- pullRequest = {
84
- number: pr.number,
85
- title: pr.title,
86
- body: pr.body,
87
- author: pr.user.login,
88
- baseBranch: pr.base.ref,
89
- headBranch: pr.head.ref,
90
- headSha: pr.head.sha,
91
- files,
92
- };
93
- }
94
-
95
- const context: EventContext = {
96
- eventType: eventName as EventContext['eventType'],
97
- action: payload.action,
98
- repository,
99
- pullRequest,
100
- repoPath,
101
- };
102
-
103
- // Validate the final context
104
- const result = EventContextSchema.safeParse(context);
105
- if (!result.success) {
106
- throw new EventContextError('Failed to build valid event context', { cause: result.error });
107
- }
108
-
109
- return result.data;
110
- }
111
-
112
- async function fetchPullRequestFiles(
113
- octokit: Octokit,
114
- owner: string,
115
- repo: string,
116
- pullNumber: number
117
- ): Promise<FileChange[]> {
118
- const { data: files } = await octokit.pulls.listFiles({
119
- owner,
120
- repo,
121
- pull_number: pullNumber,
122
- per_page: 100,
123
- });
124
-
125
- return files.map((file) => ({
126
- filename: file.filename,
127
- status: file.status as FileChange['status'],
128
- additions: file.additions,
129
- deletions: file.deletions,
130
- patch: file.patch,
131
- }));
132
- }
@@ -1,2 +0,0 @@
1
- export * from './context.js';
2
- export * from './schedule-context.js';
@@ -1,101 +0,0 @@
1
- import type { EventContext, FileChange } from '../types/index.js';
2
- import { expandAndCreateFileChanges } from '../cli/files.js';
3
- import { matchGlob } from '../triggers/matcher.js';
4
-
5
- export interface ScheduleContextOptions {
6
- /** Glob patterns from trigger's filters.paths */
7
- patterns: string[];
8
- /** Glob patterns from trigger's filters.ignorePaths */
9
- ignorePatterns?: string[];
10
- /** Repository root path (GITHUB_WORKSPACE) */
11
- repoPath: string;
12
- /** Repository owner (from GITHUB_REPOSITORY) */
13
- owner: string;
14
- /** Repository name */
15
- name: string;
16
- /** Default branch name */
17
- defaultBranch: string;
18
- /** Current commit SHA */
19
- headSha: string;
20
- }
21
-
22
- /**
23
- * Build an EventContext for scheduled runs.
24
- *
25
- * Creates a synthetic pullRequest context from file globs using real repo info.
26
- * The runner processes this normally because the files have patch data.
27
- */
28
- export async function buildScheduleEventContext(
29
- options: ScheduleContextOptions
30
- ): Promise<EventContext> {
31
- const {
32
- patterns,
33
- ignorePatterns,
34
- repoPath,
35
- owner,
36
- name,
37
- defaultBranch,
38
- headSha,
39
- } = options;
40
-
41
- // Expand glob patterns and create FileChange objects with full content as patch
42
- let fileChanges = await expandAndCreateFileChanges(patterns, repoPath);
43
-
44
- // Filter out ignored patterns
45
- if (ignorePatterns && ignorePatterns.length > 0) {
46
- fileChanges = fileChanges.filter((file) => {
47
- const isIgnored = ignorePatterns.some((pattern) =>
48
- matchGlob(pattern, file.filename)
49
- );
50
- return !isIgnored;
51
- });
52
- }
53
-
54
- return {
55
- eventType: 'schedule',
56
- action: 'scheduled',
57
- repository: {
58
- owner,
59
- name,
60
- fullName: `${owner}/${name}`,
61
- defaultBranch,
62
- },
63
- // Synthetic pullRequest context for runner compatibility
64
- pullRequest: {
65
- number: 0, // No actual PR
66
- title: 'Scheduled Analysis',
67
- body: null,
68
- author: 'warden',
69
- baseBranch: defaultBranch,
70
- headBranch: defaultBranch,
71
- headSha,
72
- files: fileChanges,
73
- },
74
- repoPath,
75
- };
76
- }
77
-
78
- /**
79
- * Filter file changes to only include files matching the given patterns.
80
- * Used when a schedule trigger has specific path filters.
81
- */
82
- export function filterFilesByPatterns(
83
- files: FileChange[],
84
- patterns: string[],
85
- ignorePatterns?: string[]
86
- ): FileChange[] {
87
- let filtered = files.filter((file) =>
88
- patterns.some((pattern) => matchGlob(pattern, file.filename))
89
- );
90
-
91
- if (ignorePatterns && ignorePatterns.length > 0) {
92
- filtered = filtered.filter((file) => {
93
- const isIgnored = ignorePatterns.some((pattern) =>
94
- matchGlob(pattern, file.filename)
95
- );
96
- return !isIgnored;
97
- });
98
- }
99
-
100
- return filtered;
101
- }
@@ -1,66 +0,0 @@
1
- import { describe, it, expect, beforeAll } from 'vitest';
2
- import { discoverExamples, loadExample, getExampleFiles } from './index.js';
3
- import { runSkill } from '../sdk/runner.js';
4
- import { buildFileEventContext } from '../cli/context.js';
5
- import { resolveSkillAsync } from '../skills/loader.js';
6
-
7
- describe('examples', () => {
8
- const apiKey = process.env['WARDEN_ANTHROPIC_API_KEY'] ?? process.env['ANTHROPIC_API_KEY'];
9
-
10
- beforeAll(() => {
11
- if (!apiKey) {
12
- throw new Error('ANTHROPIC_API_KEY (or WARDEN_ANTHROPIC_API_KEY) required for integration tests');
13
- }
14
- });
15
-
16
- const examples = discoverExamples();
17
-
18
- if (examples.length === 0) {
19
- it.skip('no examples found', () => {
20
- // Placeholder for when no examples exist
21
- });
22
- }
23
-
24
- for (const exampleDir of examples) {
25
- const meta = loadExample(exampleDir);
26
- // Create a readable name from the path (e.g., "security-review/sql-injection")
27
- const name = exampleDir.split('/').slice(-2).join('/');
28
-
29
- it(`${name}: ${meta.description}`, { timeout: 60000 }, async () => {
30
- const files = getExampleFiles(exampleDir);
31
- const context = await buildFileEventContext({
32
- patterns: files,
33
- cwd: exampleDir,
34
- });
35
-
36
- const skill = await resolveSkillAsync(meta.skill);
37
- const report = await runSkill(skill, context, { apiKey });
38
-
39
- // Validate each expected finding
40
- for (const expected of meta.expected) {
41
- const pattern = new RegExp(expected.pattern, 'i');
42
- const found = report.findings.some((f) => {
43
- // Check severity matches
44
- if (f.severity !== expected.severity) return false;
45
-
46
- // Check pattern matches title or description
47
- const text = `${f.title} ${f.description}`;
48
- if (!pattern.test(text)) return false;
49
-
50
- // If file specified, check location matches
51
- if (expected.file && f.location) {
52
- if (!f.location.path.endsWith(expected.file)) return false;
53
- }
54
-
55
- return true;
56
- });
57
-
58
- expect(
59
- found,
60
- `Expected ${expected.severity} finding matching "${expected.pattern}"${expected.file ? ` in ${expected.file}` : ''}. ` +
61
- `Got ${report.findings.length} findings: ${report.findings.map((f) => `[${f.severity}] ${f.title}`).join(', ') || 'none'}`
62
- ).toBe(true);
63
- }
64
- }); // LLM calls can be slow
65
- }
66
- });
@@ -1,101 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { join } from 'node:path';
3
- import { discoverExamples, loadExample, getExampleFiles, ExampleMetaSchema } from './index.js';
4
-
5
- const examplesDir = join(import.meta.dirname, '..', '..', 'examples');
6
-
7
- describe('discoverExamples', () => {
8
- it('returns array of example directories', () => {
9
- const examples = discoverExamples(examplesDir);
10
-
11
- // All discovered paths should contain _meta.json
12
- for (const dir of examples) {
13
- expect(dir).toContain('examples');
14
- }
15
- });
16
-
17
- it('returns empty array for non-existent directory', () => {
18
- const examples = discoverExamples('/non/existent/path');
19
- expect(examples).toEqual([]);
20
- });
21
- });
22
-
23
- describe('loadExample', () => {
24
- it('loads and validates _meta.json', () => {
25
- const examples = discoverExamples(examplesDir);
26
- if (examples.length === 0) {
27
- // Skip test when no examples exist
28
- return;
29
- }
30
-
31
- const meta = loadExample(examples[0]!);
32
- expect(meta).toHaveProperty('skill');
33
- expect(meta).toHaveProperty('description');
34
- expect(meta).toHaveProperty('expected');
35
- expect(Array.isArray(meta.expected)).toBe(true);
36
- });
37
-
38
- it('throws for missing _meta.json', () => {
39
- expect(() => loadExample('/non/existent')).toThrow('No _meta.json found');
40
- });
41
- });
42
-
43
- describe('getExampleFiles', () => {
44
- it('returns source files excluding _meta.json', () => {
45
- const examples = discoverExamples(examplesDir);
46
- if (examples.length === 0) {
47
- // Skip test when no examples exist
48
- return;
49
- }
50
-
51
- const files = getExampleFiles(examples[0]!);
52
- expect(files.length).toBeGreaterThan(0);
53
-
54
- // None of the files should be _meta.json
55
- for (const file of files) {
56
- expect(file).not.toContain('_meta.json');
57
- }
58
- });
59
- });
60
-
61
- describe('ExampleMetaSchema', () => {
62
- it('validates correct _meta.json', () => {
63
- const valid = {
64
- skill: 'security-review',
65
- description: 'Test example',
66
- expected: [{ severity: 'critical', pattern: 'test' }],
67
- };
68
- const result = ExampleMetaSchema.safeParse(valid);
69
- expect(result.success).toBe(true);
70
- });
71
-
72
- it('validates with optional file field', () => {
73
- const valid = {
74
- skill: 'security-review',
75
- description: 'Test example',
76
- expected: [{ severity: 'high', pattern: 'test', file: 'test.ts' }],
77
- };
78
- const result = ExampleMetaSchema.safeParse(valid);
79
- expect(result.success).toBe(true);
80
- });
81
-
82
- it('rejects invalid severity', () => {
83
- const invalid = {
84
- skill: 'security-review',
85
- description: 'Test example',
86
- expected: [{ severity: 'invalid', pattern: 'test' }],
87
- };
88
- const result = ExampleMetaSchema.safeParse(invalid);
89
- expect(result.success).toBe(false);
90
- });
91
-
92
- it('rejects missing required fields', () => {
93
- const invalid = {
94
- skill: 'security-review',
95
- // missing description
96
- expected: [],
97
- };
98
- const result = ExampleMetaSchema.safeParse(invalid);
99
- expect(result.success).toBe(false);
100
- });
101
- });
@@ -1,122 +0,0 @@
1
- import { readFileSync, readdirSync, existsSync, statSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { z } from 'zod';
4
- import { SeveritySchema } from '../types/index.js';
5
-
6
- /**
7
- * Schema for expected findings in _meta.json
8
- */
9
- export const ExpectedFindingSchema = z.object({
10
- severity: SeveritySchema,
11
- pattern: z.string(),
12
- file: z.string().optional(),
13
- });
14
- export type ExpectedFinding = z.infer<typeof ExpectedFindingSchema>;
15
-
16
- /**
17
- * Schema for _meta.json files
18
- */
19
- export const ExampleMetaSchema = z.object({
20
- skill: z.string(),
21
- description: z.string(),
22
- expected: z.array(ExpectedFindingSchema),
23
- });
24
- export type ExampleMeta = z.infer<typeof ExampleMetaSchema>;
25
-
26
- /**
27
- * Get the default examples directory path.
28
- */
29
- function getExamplesDir(): string {
30
- // This file is at src/examples/index.ts, so we need to go up to repo root
31
- return join(import.meta.dirname, '..', '..', 'examples');
32
- }
33
-
34
- /**
35
- * Discover all examples with _meta.json files.
36
- * Returns an array of absolute paths to example directories.
37
- */
38
- export function discoverExamples(baseDir?: string): string[] {
39
- const examplesDir = baseDir ?? getExamplesDir();
40
- const examples: string[] = [];
41
-
42
- if (!existsSync(examplesDir)) {
43
- return examples;
44
- }
45
-
46
- // Recursively find directories containing _meta.json
47
- function scanDir(dir: string): void {
48
- const entries = readdirSync(dir);
49
-
50
- for (const entry of entries) {
51
- const entryPath = join(dir, entry);
52
- const stat = statSync(entryPath);
53
-
54
- if (stat.isDirectory()) {
55
- const metaPath = join(entryPath, '_meta.json');
56
- if (existsSync(metaPath)) {
57
- examples.push(entryPath);
58
- }
59
- // Continue scanning subdirectories
60
- scanDir(entryPath);
61
- }
62
- }
63
- }
64
-
65
- scanDir(examplesDir);
66
- return examples;
67
- }
68
-
69
- /**
70
- * Load and validate a _meta.json file from an example directory.
71
- */
72
- export function loadExample(dir: string): ExampleMeta {
73
- const metaPath = join(dir, '_meta.json');
74
-
75
- if (!existsSync(metaPath)) {
76
- throw new Error(`No _meta.json found in ${dir}`);
77
- }
78
-
79
- let content: string;
80
- try {
81
- content = readFileSync(metaPath, 'utf-8');
82
- } catch (error) {
83
- throw new Error(`Failed to read ${metaPath}: ${error}`);
84
- }
85
-
86
- let parsed: unknown;
87
- try {
88
- parsed = JSON.parse(content);
89
- } catch (error) {
90
- throw new Error(`Failed to parse ${metaPath}: ${error}`);
91
- }
92
-
93
- const validated = ExampleMetaSchema.safeParse(parsed);
94
- if (!validated.success) {
95
- const issues = validated.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join(', ');
96
- throw new Error(`Invalid _meta.json in ${dir}: ${issues}`);
97
- }
98
-
99
- return validated.data;
100
- }
101
-
102
- /**
103
- * Get all source files in an example directory (excludes _meta.json).
104
- * Returns relative paths suitable for use with buildFileEventContext.
105
- */
106
- export function getExampleFiles(dir: string): string[] {
107
- const files: string[] = [];
108
-
109
- const entries = readdirSync(dir);
110
- for (const entry of entries) {
111
- if (entry === '_meta.json') continue;
112
-
113
- const entryPath = join(dir, entry);
114
- const stat = statSync(entryPath);
115
-
116
- if (stat.isFile()) {
117
- files.push(entryPath);
118
- }
119
- }
120
-
121
- return files;
122
- }
@@ -1,25 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { config as dotenvConfig } from 'dotenv';
4
-
5
- /**
6
- * Load environment variables for integration tests.
7
- * Loads in order (later files override earlier):
8
- * 1. .env (base config)
9
- * 2. .env.local (local overrides)
10
- * 3. .env.test (test-specific overrides)
11
- */
12
- function loadTestEnv(): void {
13
- const root = join(import.meta.dirname, '..', '..');
14
-
15
- const envFiles = ['.env', '.env.local', '.env.test'];
16
-
17
- for (const file of envFiles) {
18
- const path = join(root, file);
19
- if (existsSync(path)) {
20
- dotenvConfig({ path, override: true });
21
- }
22
- }
23
- }
24
-
25
- loadTestEnv();