@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,84 +0,0 @@
1
- import { readFileSync, writeFileSync } from 'node:fs';
2
- import type { Trigger } from './schema.js';
3
-
4
- /**
5
- * Generate TOML representation of a trigger.
6
- */
7
- export function generateTriggerToml(trigger: Trigger): string {
8
- const lines: string[] = ['[[triggers]]'];
9
- lines.push(`name = "${trigger.name}"`);
10
- lines.push(`event = "${trigger.event}"`);
11
-
12
- // Format actions array (optional for schedule events)
13
- if (trigger.actions && trigger.actions.length > 0) {
14
- const actionsStr = trigger.actions.map((a) => `"${a}"`).join(', ');
15
- lines.push(`actions = [${actionsStr}]`);
16
- }
17
-
18
- lines.push(`skill = "${trigger.skill}"`);
19
-
20
- if (trigger.remote) {
21
- lines.push(`remote = "${trigger.remote}"`);
22
- }
23
-
24
- // Optional fields
25
- if (trigger.filters) {
26
- if (trigger.filters.paths && trigger.filters.paths.length > 0) {
27
- lines.push('');
28
- lines.push('[triggers.filters]');
29
- const pathsStr = trigger.filters.paths.map((p) => `"${p}"`).join(', ');
30
- lines.push(`paths = [${pathsStr}]`);
31
- }
32
- if (trigger.filters.ignorePaths && trigger.filters.ignorePaths.length > 0) {
33
- if (!trigger.filters.paths) {
34
- lines.push('');
35
- lines.push('[triggers.filters]');
36
- }
37
- const ignoreStr = trigger.filters.ignorePaths.map((p) => `"${p}"`).join(', ');
38
- lines.push(`ignorePaths = [${ignoreStr}]`);
39
- }
40
- }
41
-
42
- if (trigger.output) {
43
- lines.push('');
44
- lines.push('[triggers.output]');
45
- if (trigger.output.failOn) {
46
- lines.push(`failOn = "${trigger.output.failOn}"`);
47
- }
48
- if (trigger.output.commentOn) {
49
- lines.push(`commentOn = "${trigger.output.commentOn}"`);
50
- }
51
- if (trigger.output.maxFindings) {
52
- lines.push(`maxFindings = ${trigger.output.maxFindings}`);
53
- }
54
- }
55
-
56
- if (trigger.model) {
57
- lines.push(`model = "${trigger.model}"`);
58
- }
59
-
60
- return lines.join('\n');
61
- }
62
-
63
- /**
64
- * Append a trigger to the warden.toml configuration file.
65
- * Preserves existing content and formatting by appending to the end.
66
- */
67
- export function appendTrigger(configPath: string, trigger: Trigger): void {
68
- const existingContent = readFileSync(configPath, 'utf-8');
69
-
70
- // Ensure proper spacing before the new trigger
71
- let separator: string;
72
- if (existingContent.endsWith('\n\n')) {
73
- separator = '';
74
- } else if (existingContent.endsWith('\n')) {
75
- separator = '\n';
76
- } else {
77
- separator = '\n\n';
78
- }
79
-
80
- const triggerToml = generateTriggerToml(trigger);
81
- const newContent = existingContent + separator + triggerToml + '\n';
82
-
83
- writeFileSync(configPath, newContent, 'utf-8');
84
- }
@@ -1,162 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import {
3
- classifyFile,
4
- shouldSkipFile,
5
- BUILTIN_SKIP_PATTERNS,
6
- } from './classify.js';
7
- import type { FilePattern } from '../config/schema.js';
8
-
9
- describe('classifyFile', () => {
10
- describe('built-in skip patterns', () => {
11
- it.each([
12
- 'pnpm-lock.yaml',
13
- 'package-lock.json',
14
- 'yarn.lock',
15
- 'Cargo.lock',
16
- 'go.sum',
17
- 'poetry.lock',
18
- 'composer.lock',
19
- 'Gemfile.lock',
20
- 'Pipfile.lock',
21
- 'bun.lockb',
22
- ])('skips lock file: %s', (filename) => {
23
- expect(classifyFile(filename)).toBe('skip');
24
- });
25
-
26
- it.each([
27
- 'src/pnpm-lock.yaml',
28
- 'packages/web/package-lock.json',
29
- 'nested/deep/yarn.lock',
30
- ])('skips nested lock file: %s', (filename) => {
31
- expect(classifyFile(filename)).toBe('skip');
32
- });
33
-
34
- it.each([
35
- 'bundle.min.js',
36
- 'styles.min.css',
37
- 'vendor.bundle.js',
38
- 'app.bundle.css',
39
- ])('skips minified/bundled file: %s', (filename) => {
40
- expect(classifyFile(filename)).toBe('skip');
41
- });
42
-
43
- it.each([
44
- 'dist/index.js',
45
- 'build/main.js',
46
- 'node_modules/lodash/index.js',
47
- '.next/static/chunks/main.js',
48
- 'out/index.html',
49
- 'coverage/lcov.info',
50
- ])('skips build artifacts: %s', (filename) => {
51
- expect(classifyFile(filename)).toBe('skip');
52
- });
53
-
54
- it.each([
55
- 'types.generated.ts',
56
- 'schema.g.ts',
57
- 'model.g.dart',
58
- 'generated/api.ts',
59
- '__generated__/graphql.ts',
60
- ])('skips generated files: %s', (filename) => {
61
- expect(classifyFile(filename)).toBe('skip');
62
- });
63
- });
64
-
65
- describe('non-skipped files', () => {
66
- it.each([
67
- 'src/index.ts',
68
- 'lib/utils.js',
69
- 'app/page.tsx',
70
- 'server/routes.py',
71
- 'main.go',
72
- 'Cargo.toml', // toml, not lock
73
- 'package.json', // json, not lock
74
- 'README.md',
75
- ])('processes normal source file: %s', (filename) => {
76
- expect(classifyFile(filename)).toBe('per-hunk');
77
- });
78
- });
79
-
80
- describe('user patterns', () => {
81
- it('allows user pattern to override built-in skip', () => {
82
- const userPatterns: FilePattern[] = [
83
- { pattern: '**/pnpm-lock.yaml', mode: 'per-hunk' },
84
- ];
85
- expect(classifyFile('pnpm-lock.yaml', userPatterns)).toBe('per-hunk');
86
- });
87
-
88
- it('allows user pattern to skip custom files', () => {
89
- const userPatterns: FilePattern[] = [
90
- { pattern: '**/fixtures/**', mode: 'skip' },
91
- ];
92
- expect(classifyFile('src/fixtures/data.json', userPatterns)).toBe('skip');
93
- });
94
-
95
- it('supports whole-file mode', () => {
96
- const userPatterns: FilePattern[] = [
97
- { pattern: '**/*.sql', mode: 'whole-file' },
98
- ];
99
- expect(classifyFile('migrations/001.sql', userPatterns)).toBe('whole-file');
100
- });
101
-
102
- it('user patterns take precedence over built-ins', () => {
103
- const userPatterns: FilePattern[] = [
104
- { pattern: '**/dist/**', mode: 'per-hunk' }, // override built-in skip
105
- ];
106
- expect(classifyFile('dist/index.js', userPatterns)).toBe('per-hunk');
107
- });
108
-
109
- it('checks user patterns in order', () => {
110
- const userPatterns: FilePattern[] = [
111
- { pattern: '**/*.ts', mode: 'skip' },
112
- { pattern: '**/index.ts', mode: 'per-hunk' },
113
- ];
114
- // First matching pattern wins
115
- expect(classifyFile('src/index.ts', userPatterns)).toBe('skip');
116
- });
117
-
118
- it('falls back to built-ins if no user pattern matches', () => {
119
- const userPatterns: FilePattern[] = [
120
- { pattern: '**/*.custom', mode: 'skip' },
121
- ];
122
- expect(classifyFile('pnpm-lock.yaml', userPatterns)).toBe('skip');
123
- });
124
- });
125
- });
126
-
127
- describe('shouldSkipFile', () => {
128
- it('returns true for skipped files', () => {
129
- expect(shouldSkipFile('pnpm-lock.yaml')).toBe(true);
130
- expect(shouldSkipFile('dist/bundle.js')).toBe(true);
131
- });
132
-
133
- it('returns false for non-skipped files', () => {
134
- expect(shouldSkipFile('src/index.ts')).toBe(false);
135
- expect(shouldSkipFile('package.json')).toBe(false);
136
- });
137
-
138
- it('respects user patterns', () => {
139
- const userPatterns: FilePattern[] = [
140
- { pattern: '**/pnpm-lock.yaml', mode: 'per-hunk' },
141
- ];
142
- expect(shouldSkipFile('pnpm-lock.yaml', userPatterns)).toBe(false);
143
- });
144
- });
145
-
146
- describe('BUILTIN_SKIP_PATTERNS', () => {
147
- it('includes common lock files', () => {
148
- expect(BUILTIN_SKIP_PATTERNS).toContain('**/pnpm-lock.yaml');
149
- expect(BUILTIN_SKIP_PATTERNS).toContain('**/package-lock.json');
150
- expect(BUILTIN_SKIP_PATTERNS).toContain('**/yarn.lock');
151
- });
152
-
153
- it('includes minified files', () => {
154
- expect(BUILTIN_SKIP_PATTERNS).toContain('**/*.min.js');
155
- expect(BUILTIN_SKIP_PATTERNS).toContain('**/*.min.css');
156
- });
157
-
158
- it('includes build directories', () => {
159
- expect(BUILTIN_SKIP_PATTERNS).toContain('**/dist/**');
160
- expect(BUILTIN_SKIP_PATTERNS).toContain('**/node_modules/**');
161
- });
162
- });
@@ -1,92 +0,0 @@
1
- /**
2
- * File classification for chunking - determines how files should be processed
3
- */
4
-
5
- import { matchGlob } from '../triggers/matcher.js';
6
- import type { FilePattern } from '../config/schema.js';
7
-
8
- /** Processing mode for a file */
9
- export type FileMode = 'per-hunk' | 'whole-file' | 'skip';
10
-
11
- /**
12
- * Built-in patterns that are always applied before user patterns.
13
- * These skip common lock files, minified code, and build artifacts.
14
- */
15
- export const BUILTIN_SKIP_PATTERNS = [
16
- // Package manager lock files
17
- '**/pnpm-lock.yaml',
18
- '**/package-lock.json',
19
- '**/yarn.lock',
20
- '**/Cargo.lock',
21
- '**/go.sum',
22
- '**/poetry.lock',
23
- '**/composer.lock',
24
- '**/Gemfile.lock',
25
- '**/Pipfile.lock',
26
- '**/bun.lockb',
27
-
28
- // Minified/bundled code
29
- '**/*.min.js',
30
- '**/*.min.css',
31
- '**/*.bundle.js',
32
- '**/*.bundle.css',
33
-
34
- // Build artifacts
35
- '**/dist/**',
36
- '**/build/**',
37
- '**/node_modules/**',
38
- '**/.next/**',
39
- '**/out/**',
40
- '**/coverage/**',
41
-
42
- // Generated code
43
- '**/*.generated.*',
44
- '**/*.g.ts',
45
- '**/*.g.dart',
46
- '**/generated/**',
47
- '**/__generated__/**',
48
- ];
49
-
50
- /**
51
- * Classify a file to determine how it should be processed.
52
- *
53
- * @param filename - The file path to classify
54
- * @param userPatterns - Optional user-defined patterns (can override built-ins)
55
- * @returns The processing mode: 'per-hunk', 'whole-file', or 'skip'
56
- *
57
- * Order of precedence:
58
- * 1. User patterns are checked first (higher priority, allows overriding built-ins)
59
- * 2. Built-in skip patterns are checked second
60
- * 3. Default is 'per-hunk' if no patterns match
61
- */
62
- export function classifyFile(
63
- filename: string,
64
- userPatterns?: FilePattern[]
65
- ): FileMode {
66
- // Check user patterns first (allows overriding built-in skips)
67
- for (const { pattern, mode } of userPatterns ?? []) {
68
- if (matchGlob(pattern, filename)) {
69
- return mode;
70
- }
71
- }
72
-
73
- // Check built-in skip patterns
74
- for (const pattern of BUILTIN_SKIP_PATTERNS) {
75
- if (matchGlob(pattern, filename)) {
76
- return 'skip';
77
- }
78
- }
79
-
80
- // Default: process per-hunk
81
- return 'per-hunk';
82
- }
83
-
84
- /**
85
- * Check if a file should be skipped based on classification.
86
- */
87
- export function shouldSkipFile(
88
- filename: string,
89
- userPatterns?: FilePattern[]
90
- ): boolean {
91
- return classifyFile(filename, userPatterns) === 'skip';
92
- }
@@ -1,208 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { coalesceHunks, wouldCoalesceReduce } from './coalesce.js';
3
- import type { DiffHunk } from './parser.js';
4
-
5
- function makeHunk(
6
- newStart: number,
7
- newCount: number,
8
- content: string,
9
- options: { oldStart?: number; oldCount?: number; header?: string } = {}
10
- ): DiffHunk {
11
- const { oldStart = newStart, oldCount = newCount, header } = options;
12
- return {
13
- oldStart,
14
- oldCount,
15
- newStart,
16
- newCount,
17
- content,
18
- lines: content.split('\n'),
19
- header,
20
- };
21
- }
22
-
23
- describe('coalesceHunks', () => {
24
- describe('edge cases', () => {
25
- it('returns empty array for empty input', () => {
26
- expect(coalesceHunks([])).toEqual([]);
27
- });
28
-
29
- it('returns single hunk unchanged', () => {
30
- const hunk = makeHunk(1, 5, 'test content');
31
- expect(coalesceHunks([hunk])).toEqual([hunk]);
32
- });
33
- });
34
-
35
- describe('merging nearby hunks', () => {
36
- it('merges two adjacent hunks within gap limit', () => {
37
- const hunk1 = makeHunk(1, 5, 'first');
38
- const hunk2 = makeHunk(10, 5, 'second');
39
-
40
- const result = coalesceHunks([hunk1, hunk2], { maxGapLines: 10 });
41
- const [merged] = result;
42
-
43
- expect(result).toHaveLength(1);
44
- expect(merged!.newStart).toBe(1);
45
- expect(merged!.newCount).toBe(14);
46
- expect(merged!.content).toContain('first');
47
- expect(merged!.content).toContain('...');
48
- expect(merged!.content).toContain('second');
49
- });
50
-
51
- it('does not merge hunks beyond gap limit', () => {
52
- const hunk1 = makeHunk(1, 5, 'first');
53
- const hunk2 = makeHunk(50, 5, 'second');
54
-
55
- const result = coalesceHunks([hunk1, hunk2], { maxGapLines: 30 });
56
-
57
- expect(result).toHaveLength(2);
58
- });
59
-
60
- it('does not merge when combined size exceeds limit', () => {
61
- const hunk1 = makeHunk(1, 5, 'a'.repeat(5000));
62
- const hunk2 = makeHunk(10, 5, 'b'.repeat(5000));
63
-
64
- const result = coalesceHunks([hunk1, hunk2], { maxChunkSize: 8000 });
65
-
66
- expect(result).toHaveLength(2);
67
- });
68
-
69
- it('merges multiple hunks into one when all within limits', () => {
70
- const hunks = [
71
- makeHunk(1, 3, 'a'),
72
- makeHunk(10, 3, 'b'),
73
- makeHunk(20, 3, 'c'),
74
- makeHunk(30, 3, 'd'),
75
- ];
76
-
77
- const result = coalesceHunks(hunks, { maxGapLines: 15, maxChunkSize: 10000 });
78
-
79
- expect(result).toHaveLength(1);
80
- expect(result[0]!.content).toContain('a');
81
- expect(result[0]!.content).toContain('d');
82
- });
83
-
84
- it('creates multiple chunks when limits are reached', () => {
85
- const hunks = [
86
- makeHunk(1, 3, 'a'.repeat(3000)),
87
- makeHunk(10, 3, 'b'.repeat(3000)),
88
- makeHunk(20, 3, 'c'.repeat(3000)),
89
- makeHunk(30, 3, 'd'.repeat(3000)),
90
- ];
91
-
92
- const result = coalesceHunks(hunks, { maxGapLines: 15, maxChunkSize: 8000 });
93
-
94
- // First two can merge (6000 chars), third can't fit (9000 > 8000)
95
- // So result should be: [a+b], [c+d]
96
- expect(result).toHaveLength(2);
97
- });
98
- });
99
-
100
- describe('sorting', () => {
101
- it('sorts hunks by start line before merging', () => {
102
- const hunks = [
103
- makeHunk(20, 3, 'third'),
104
- makeHunk(1, 3, 'first'),
105
- makeHunk(10, 3, 'second'),
106
- ];
107
-
108
- const result = coalesceHunks(hunks, { maxGapLines: 15, maxChunkSize: 10000 });
109
-
110
- expect(result).toHaveLength(1);
111
- // Should be merged in order: first, second, third
112
- const content = result[0]!.content;
113
- const firstPos = content.indexOf('first');
114
- const secondPos = content.indexOf('second');
115
- const thirdPos = content.indexOf('third');
116
- expect(firstPos).toBeLessThan(secondPos);
117
- expect(secondPos).toBeLessThan(thirdPos);
118
- });
119
- });
120
-
121
- describe('merged hunk properties', () => {
122
- it('calculates correct line ranges', () => {
123
- const hunk1 = makeHunk(10, 5, 'first', { oldStart: 8, oldCount: 5 });
124
- const hunk2 = makeHunk(25, 10, 'second', { oldStart: 23, oldCount: 10 });
125
-
126
- const result = coalesceHunks([hunk1, hunk2], { maxGapLines: 20 });
127
-
128
- expect(result).toHaveLength(1);
129
- expect(result[0]!.newStart).toBe(10);
130
- expect(result[0]!.newCount).toBe(25); // 10 to 35 (25 + 10)
131
- expect(result[0]!.oldStart).toBe(8);
132
- expect(result[0]!.oldCount).toBe(25); // 8 to 33 (23 + 10)
133
- });
134
-
135
- it('combines different headers from both hunks', () => {
136
- const hunk1 = makeHunk(1, 3, 'first', { header: 'function foo()' });
137
- const hunk2 = makeHunk(10, 3, 'second', { header: 'function bar()' });
138
-
139
- const result = coalesceHunks([hunk1, hunk2], { maxGapLines: 20 });
140
-
141
- expect(result[0]!.header).toBe('function foo() → function bar()');
142
- });
143
-
144
- it('preserves single header when only first hunk has one', () => {
145
- const hunk1 = makeHunk(1, 3, 'first', { header: 'function foo()' });
146
- const hunk2 = makeHunk(10, 3, 'second');
147
-
148
- const result = coalesceHunks([hunk1, hunk2], { maxGapLines: 20 });
149
-
150
- expect(result[0]!.header).toBe('function foo()');
151
- });
152
-
153
- it('preserves single header when only second hunk has one', () => {
154
- const hunk1 = makeHunk(1, 3, 'first');
155
- const hunk2 = makeHunk(10, 3, 'second', { header: 'function bar()' });
156
-
157
- const result = coalesceHunks([hunk1, hunk2], { maxGapLines: 20 });
158
-
159
- expect(result[0]!.header).toBe('function bar()');
160
- });
161
-
162
- it('preserves header when both hunks have identical headers', () => {
163
- const hunk1 = makeHunk(1, 3, 'first', { header: 'function foo()' });
164
- const hunk2 = makeHunk(10, 3, 'second', { header: 'function foo()' });
165
-
166
- const result = coalesceHunks([hunk1, hunk2], { maxGapLines: 20 });
167
-
168
- expect(result[0]!.header).toBe('function foo()');
169
- });
170
-
171
- it('combines lines from all merged hunks', () => {
172
- const hunk1 = makeHunk(1, 3, 'line1\nline2');
173
- const hunk2 = makeHunk(10, 3, 'line3\nline4');
174
-
175
- const result = coalesceHunks([hunk1, hunk2], { maxGapLines: 20 });
176
-
177
- expect(result[0]!.lines).toEqual(['line1', 'line2', 'line3', 'line4']);
178
- });
179
- });
180
-
181
- });
182
-
183
- describe('wouldCoalesceReduce', () => {
184
- it('returns false for empty array', () => {
185
- expect(wouldCoalesceReduce([])).toBe(false);
186
- });
187
-
188
- it('returns false for single hunk', () => {
189
- const hunk = makeHunk(1, 5, 'test');
190
- expect(wouldCoalesceReduce([hunk])).toBe(false);
191
- });
192
-
193
- it('returns true when coalescing would reduce count', () => {
194
- const hunks = [
195
- makeHunk(1, 3, 'a'),
196
- makeHunk(10, 3, 'b'),
197
- ];
198
- expect(wouldCoalesceReduce(hunks, { maxGapLines: 20 })).toBe(true);
199
- });
200
-
201
- it('returns false when coalescing would not reduce count', () => {
202
- const hunks = [
203
- makeHunk(1, 3, 'a'),
204
- makeHunk(100, 3, 'b'), // Too far apart
205
- ];
206
- expect(wouldCoalesceReduce(hunks, { maxGapLines: 10 })).toBe(false);
207
- });
208
- });
@@ -1,133 +0,0 @@
1
- /**
2
- * Hunk coalescing - merges nearby hunks into fewer, larger chunks
3
- * to reduce the number of LLM API calls while keeping chunk sizes manageable.
4
- */
5
-
6
- import type { DiffHunk } from './parser.js';
7
-
8
- /** Default maximum gap in lines between hunks to merge */
9
- export const DEFAULT_MAX_GAP_LINES = 30;
10
-
11
- /** Default maximum chunk size in characters */
12
- export const DEFAULT_MAX_CHUNK_SIZE = 8000;
13
-
14
- /**
15
- * Options for coalescing hunks.
16
- */
17
- export interface CoalesceOptions {
18
- /** Max lines gap between hunks to merge (default: 30) */
19
- maxGapLines?: number;
20
- /** Target max size per chunk in characters (default: 8000) */
21
- maxChunkSize?: number;
22
- }
23
-
24
- /**
25
- * Merge two adjacent hunks into one.
26
- *
27
- * The merged hunk spans from the start of the first hunk to the end of the second,
28
- * with content combined using '...' as a visual separator. When both hunks have
29
- * different headers (indicating different function/class scopes), both are preserved.
30
- */
31
- function mergeHunks(a: DiffHunk, b: DiffHunk): DiffHunk {
32
- // Calculate the new range that spans both hunks
33
- const newStart = Math.min(a.newStart, b.newStart);
34
- const newEnd = Math.max(a.newStart + a.newCount, b.newStart + b.newCount);
35
- const oldStart = Math.min(a.oldStart, b.oldStart);
36
- const oldEnd = Math.max(a.oldStart + a.oldCount, b.oldStart + b.oldCount);
37
-
38
- // Combine headers when both exist and are different
39
- let header: string | undefined;
40
- if (a.header && b.header && a.header !== b.header) {
41
- header = `${a.header} → ${b.header}`;
42
- } else {
43
- header = a.header ?? b.header;
44
- }
45
-
46
- return {
47
- oldStart,
48
- oldCount: oldEnd - oldStart,
49
- newStart,
50
- newCount: newEnd - newStart,
51
- header,
52
- content: a.content + '\n...\n' + b.content,
53
- lines: [...a.lines, ...b.lines],
54
- };
55
- }
56
-
57
- /**
58
- * Calculate the gap in lines between two hunks.
59
- * Returns the number of lines between the end of hunk A and the start of hunk B.
60
- */
61
- function calculateGap(a: DiffHunk, b: DiffHunk): number {
62
- const aEnd = a.newStart + a.newCount;
63
- return b.newStart - aEnd;
64
- }
65
-
66
- /**
67
- * Coalesce hunks that are close together into larger chunks.
68
- *
69
- * This reduces the number of LLM API calls by merging nearby hunks,
70
- * while respecting size limits to keep chunks manageable.
71
- *
72
- * @param hunks - Array of hunks to coalesce
73
- * @param options - Coalescing options (maxGapLines, maxChunkSize)
74
- * @returns Array of coalesced hunks (may be smaller than input)
75
- *
76
- * Algorithm:
77
- * 1. Sort hunks by start line
78
- * 2. For each hunk, check if it can be merged with the previous:
79
- * - Gap between hunks <= maxGapLines
80
- * - Combined size <= maxChunkSize
81
- * 3. If both conditions are met, merge; otherwise start a new chunk
82
- */
83
- export function coalesceHunks(
84
- hunks: DiffHunk[],
85
- options: CoalesceOptions = {}
86
- ): DiffHunk[] {
87
- const { maxGapLines = DEFAULT_MAX_GAP_LINES, maxChunkSize = DEFAULT_MAX_CHUNK_SIZE } = options;
88
-
89
- // Nothing to coalesce with 0 or 1 hunks
90
- if (hunks.length <= 1) {
91
- return hunks;
92
- }
93
-
94
- // Sort hunks by start line to ensure we process them in order
95
- const sorted = [...hunks].sort((a, b) => a.newStart - b.newStart);
96
-
97
- const result: DiffHunk[] = [];
98
- // sorted[0] is guaranteed to exist since we checked hunks.length > 1 above
99
- let current = sorted[0] as DiffHunk;
100
-
101
- for (let i = 1; i < sorted.length; i++) {
102
- const next = sorted[i] as DiffHunk;
103
- const gap = calculateGap(current, next);
104
- const combinedSize = current.content.length + next.content.length;
105
-
106
- // Merge if: close enough AND combined size under limit
107
- if (gap <= maxGapLines && combinedSize <= maxChunkSize) {
108
- current = mergeHunks(current, next);
109
- } else {
110
- // Can't merge - save current and start a new chunk
111
- result.push(current);
112
- current = next;
113
- }
114
- }
115
-
116
- // Don't forget the last chunk
117
- result.push(current);
118
-
119
- return result;
120
- }
121
-
122
- /**
123
- * Check if coalescing would reduce the number of hunks.
124
- * Useful for deciding whether to show coalescing stats.
125
- */
126
- export function wouldCoalesceReduce(
127
- hunks: DiffHunk[],
128
- options: CoalesceOptions = {}
129
- ): boolean {
130
- if (hunks.length <= 1) return false;
131
- const coalesced = coalesceHunks(hunks, options);
132
- return coalesced.length < hunks.length;
133
- }