@sentry/warden 0.1.1 → 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 (580) 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/tasks.d.ts.map +1 -1
  18. package/dist/cli/output/tasks.js +5 -1
  19. package/dist/cli/output/tasks.js.map +1 -1
  20. package/dist/config/schema.d.ts.map +1 -1
  21. package/dist/config/schema.js +15 -1
  22. package/dist/config/schema.js.map +1 -1
  23. package/dist/diff/coalesce.d.ts +32 -2
  24. package/dist/diff/coalesce.d.ts.map +1 -1
  25. package/dist/diff/coalesce.js +174 -2
  26. package/dist/diff/coalesce.js.map +1 -1
  27. package/dist/output/dedup.d.ts.map +1 -1
  28. package/dist/output/dedup.js +8 -3
  29. package/dist/output/dedup.js.map +1 -1
  30. package/dist/output/renderer.d.ts.map +1 -1
  31. package/dist/output/renderer.js +49 -5
  32. package/dist/output/renderer.js.map +1 -1
  33. package/dist/output/stale.d.ts.map +1 -1
  34. package/dist/output/stale.js +7 -0
  35. package/dist/output/stale.js.map +1 -1
  36. package/dist/output/types.d.ts +15 -1
  37. package/dist/output/types.d.ts.map +1 -1
  38. package/dist/sdk/analyze.d.ts +18 -0
  39. package/dist/sdk/analyze.d.ts.map +1 -0
  40. package/dist/sdk/analyze.js +425 -0
  41. package/dist/sdk/analyze.js.map +1 -0
  42. package/dist/sdk/errors.d.ts +23 -0
  43. package/dist/sdk/errors.d.ts.map +1 -0
  44. package/dist/sdk/errors.js +72 -0
  45. package/dist/sdk/errors.js.map +1 -0
  46. package/dist/sdk/extract.d.ts +44 -0
  47. package/dist/sdk/extract.d.ts.map +1 -0
  48. package/dist/sdk/extract.js +224 -0
  49. package/dist/sdk/extract.js.map +1 -0
  50. package/dist/sdk/prepare.d.ts +13 -0
  51. package/dist/sdk/prepare.d.ts.map +1 -0
  52. package/dist/sdk/prepare.js +73 -0
  53. package/dist/sdk/prepare.js.map +1 -0
  54. package/dist/sdk/prompt.d.ts +30 -0
  55. package/dist/sdk/prompt.d.ts.map +1 -0
  56. package/dist/sdk/prompt.js +109 -0
  57. package/dist/sdk/prompt.js.map +1 -0
  58. package/dist/sdk/retry.d.ts +12 -0
  59. package/dist/sdk/retry.d.ts.map +1 -0
  60. package/dist/sdk/retry.js +31 -0
  61. package/dist/sdk/retry.js.map +1 -0
  62. package/dist/sdk/runner.d.ts +22 -199
  63. package/dist/sdk/runner.d.ts.map +1 -1
  64. package/dist/sdk/runner.js +26 -884
  65. package/dist/sdk/runner.js.map +1 -1
  66. package/dist/sdk/types.d.ts +127 -0
  67. package/dist/sdk/types.d.ts.map +1 -0
  68. package/dist/sdk/types.js +5 -0
  69. package/dist/sdk/types.js.map +1 -0
  70. package/dist/sdk/usage.d.ts +20 -0
  71. package/dist/sdk/usage.d.ts.map +1 -0
  72. package/dist/sdk/usage.js +44 -0
  73. package/dist/sdk/usage.js.map +1 -0
  74. package/dist/skills/remote.d.ts.map +1 -1
  75. package/dist/skills/remote.js +3 -7
  76. package/dist/skills/remote.js.map +1 -1
  77. package/dist/types/index.d.ts +1 -0
  78. package/dist/types/index.d.ts.map +1 -1
  79. package/dist/types/index.js +2 -0
  80. package/dist/types/index.js.map +1 -1
  81. package/dist/utils/exec.d.ts +61 -0
  82. package/dist/utils/exec.d.ts.map +1 -0
  83. package/dist/utils/exec.js +111 -0
  84. package/dist/utils/exec.js.map +1 -0
  85. package/dist/utils/index.d.ts +2 -0
  86. package/dist/utils/index.d.ts.map +1 -1
  87. package/dist/utils/index.js +1 -0
  88. package/dist/utils/index.js.map +1 -1
  89. package/package.json +15 -16
  90. package/.agents/skills/find-bugs/SKILL.md +0 -75
  91. package/.agents/skills/vercel-react-best-practices/AGENTS.md +0 -2934
  92. package/.agents/skills/vercel-react-best-practices/SKILL.md +0 -136
  93. package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  94. package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  95. package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  96. package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  97. package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
  98. package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  99. package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
  100. package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  101. package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
  102. package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  103. package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  104. package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  105. package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  106. package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  107. package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  108. package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  109. package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  110. package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  111. package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  112. package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  113. package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  114. package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  115. package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  116. package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  117. package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  118. package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  119. package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  120. package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  121. package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  122. package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  123. package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  124. package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  125. package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  126. package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  127. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  128. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  129. package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  130. package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  131. package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  132. package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  133. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  134. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  135. package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  136. package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  137. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  138. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  139. package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  140. package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  141. package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  142. package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  143. package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  144. package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  145. package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  146. package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  147. package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  148. package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  149. package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
  150. package/.claude/settings.json +0 -57
  151. package/.claude/skills/agent-prompt/SKILL.md +0 -54
  152. package/.claude/skills/agent-prompt/references/agentic-patterns.md +0 -94
  153. package/.claude/skills/agent-prompt/references/anti-patterns.md +0 -140
  154. package/.claude/skills/agent-prompt/references/context-design.md +0 -124
  155. package/.claude/skills/agent-prompt/references/core-principles.md +0 -75
  156. package/.claude/skills/agent-prompt/references/model-guidance.md +0 -118
  157. package/.claude/skills/agent-prompt/references/output-formats.md +0 -98
  158. package/.claude/skills/agent-prompt/references/skill-structure.md +0 -115
  159. package/.claude/skills/agent-prompt/references/system-prompts.md +0 -115
  160. package/.claude/skills/notseer/SKILL.md +0 -131
  161. package/.claude/skills/skill-writer/SKILL.md +0 -140
  162. package/.claude/skills/testing-guidelines/SKILL.md +0 -132
  163. package/.claude/skills/warden-skill/SKILL.md +0 -226
  164. package/.claude/skills/warden-skill/references/config-schema.md +0 -116
  165. package/.dex/config.toml +0 -2
  166. package/.github/workflows/ci.yml +0 -33
  167. package/.github/workflows/release.yml +0 -59
  168. package/.github/workflows/warden.yml +0 -40
  169. package/AGENTS.md +0 -89
  170. package/CONTRIBUTING.md +0 -60
  171. package/SPEC.md +0 -263
  172. package/action.yml +0 -87
  173. package/assets/favicon.png +0 -0
  174. package/assets/warden-icon-bw.svg +0 -5
  175. package/assets/warden-icon-purple.png +0 -0
  176. package/assets/warden-icon-purple.svg +0 -5
  177. package/dist/action/159.index.js +0 -523
  178. package/dist/action/159.index.js.map +0 -1
  179. package/dist/action/action/index.d.ts +0 -2
  180. package/dist/action/action/index.d.ts.map +0 -1
  181. package/dist/action/action/main.d.ts +0 -2
  182. package/dist/action/action/main.d.ts.map +0 -1
  183. package/dist/action/cli/args.d.ts +0 -74
  184. package/dist/action/cli/args.d.ts.map +0 -1
  185. package/dist/action/cli/args.test.d.ts +0 -2
  186. package/dist/action/cli/args.test.d.ts.map +0 -1
  187. package/dist/action/cli/commands/add.d.ts +0 -7
  188. package/dist/action/cli/commands/add.d.ts.map +0 -1
  189. package/dist/action/cli/commands/init.d.ts +0 -10
  190. package/dist/action/cli/commands/init.d.ts.map +0 -1
  191. package/dist/action/cli/commands/init.test.d.ts +0 -2
  192. package/dist/action/cli/commands/init.test.d.ts.map +0 -1
  193. package/dist/action/cli/commands/setup-app/browser.d.ts +0 -9
  194. package/dist/action/cli/commands/setup-app/browser.d.ts.map +0 -1
  195. package/dist/action/cli/commands/setup-app/credentials.d.ts +0 -15
  196. package/dist/action/cli/commands/setup-app/credentials.d.ts.map +0 -1
  197. package/dist/action/cli/commands/setup-app/manifest.d.ts +0 -24
  198. package/dist/action/cli/commands/setup-app/manifest.d.ts.map +0 -1
  199. package/dist/action/cli/commands/setup-app/server.d.ts +0 -28
  200. package/dist/action/cli/commands/setup-app/server.d.ts.map +0 -1
  201. package/dist/action/cli/commands/setup-app.d.ts +0 -11
  202. package/dist/action/cli/commands/setup-app.d.ts.map +0 -1
  203. package/dist/action/cli/commands/sync.d.ts +0 -9
  204. package/dist/action/cli/commands/sync.d.ts.map +0 -1
  205. package/dist/action/cli/context.d.ts +0 -27
  206. package/dist/action/cli/context.d.ts.map +0 -1
  207. package/dist/action/cli/files.d.ts +0 -22
  208. package/dist/action/cli/files.d.ts.map +0 -1
  209. package/dist/action/cli/files.test.d.ts +0 -2
  210. package/dist/action/cli/files.test.d.ts.map +0 -1
  211. package/dist/action/cli/fix.d.ts +0 -41
  212. package/dist/action/cli/fix.d.ts.map +0 -1
  213. package/dist/action/cli/fix.test.d.ts +0 -2
  214. package/dist/action/cli/fix.test.d.ts.map +0 -1
  215. package/dist/action/cli/git.d.ts +0 -73
  216. package/dist/action/cli/git.d.ts.map +0 -1
  217. package/dist/action/cli/git.test.d.ts +0 -2
  218. package/dist/action/cli/git.test.d.ts.map +0 -1
  219. package/dist/action/cli/index.d.ts +0 -3
  220. package/dist/action/cli/index.d.ts.map +0 -1
  221. package/dist/action/cli/main.d.ts +0 -7
  222. package/dist/action/cli/main.d.ts.map +0 -1
  223. package/dist/action/cli/output/box.d.ts +0 -75
  224. package/dist/action/cli/output/box.d.ts.map +0 -1
  225. package/dist/action/cli/output/formatters.d.ts +0 -90
  226. package/dist/action/cli/output/formatters.d.ts.map +0 -1
  227. package/dist/action/cli/output/formatters.test.d.ts +0 -2
  228. package/dist/action/cli/output/formatters.test.d.ts.map +0 -1
  229. package/dist/action/cli/output/icons.d.ts +0 -15
  230. package/dist/action/cli/output/icons.d.ts.map +0 -1
  231. package/dist/action/cli/output/index.d.ts +0 -10
  232. package/dist/action/cli/output/index.d.ts.map +0 -1
  233. package/dist/action/cli/output/ink-runner.d.ts +0 -29
  234. package/dist/action/cli/output/ink-runner.d.ts.map +0 -1
  235. package/dist/action/cli/output/jsonl.d.ts +0 -43
  236. package/dist/action/cli/output/jsonl.d.ts.map +0 -1
  237. package/dist/action/cli/output/jsonl.test.d.ts +0 -2
  238. package/dist/action/cli/output/jsonl.test.d.ts.map +0 -1
  239. package/dist/action/cli/output/reporter.d.ts +0 -108
  240. package/dist/action/cli/output/reporter.d.ts.map +0 -1
  241. package/dist/action/cli/output/tasks.d.ts +0 -89
  242. package/dist/action/cli/output/tasks.d.ts.map +0 -1
  243. package/dist/action/cli/output/tty.d.ts +0 -21
  244. package/dist/action/cli/output/tty.d.ts.map +0 -1
  245. package/dist/action/cli/output/tty.test.d.ts +0 -2
  246. package/dist/action/cli/output/tty.test.d.ts.map +0 -1
  247. package/dist/action/cli/output/verbosity.d.ts +0 -20
  248. package/dist/action/cli/output/verbosity.d.ts.map +0 -1
  249. package/dist/action/cli/output/verbosity.test.d.ts +0 -2
  250. package/dist/action/cli/output/verbosity.test.d.ts.map +0 -1
  251. package/dist/action/cli/terminal.d.ts +0 -19
  252. package/dist/action/cli/terminal.d.ts.map +0 -1
  253. package/dist/action/cli/terminal.test.d.ts +0 -2
  254. package/dist/action/cli/terminal.test.d.ts.map +0 -1
  255. package/dist/action/config/index.d.ts +0 -4
  256. package/dist/action/config/index.d.ts.map +0 -1
  257. package/dist/action/config/loader.d.ts +0 -27
  258. package/dist/action/config/loader.d.ts.map +0 -1
  259. package/dist/action/config/loader.test.d.ts +0 -2
  260. package/dist/action/config/loader.test.d.ts.map +0 -1
  261. package/dist/action/config/schema.d.ts +0 -318
  262. package/dist/action/config/schema.d.ts.map +0 -1
  263. package/dist/action/config/writer.d.ts +0 -11
  264. package/dist/action/config/writer.d.ts.map +0 -1
  265. package/dist/action/config/writer.test.d.ts +0 -2
  266. package/dist/action/config/writer.test.d.ts.map +0 -1
  267. package/dist/action/diff/classify.d.ts +0 -29
  268. package/dist/action/diff/classify.d.ts.map +0 -1
  269. package/dist/action/diff/classify.test.d.ts +0 -2
  270. package/dist/action/diff/classify.test.d.ts.map +0 -1
  271. package/dist/action/diff/coalesce.d.ts +0 -42
  272. package/dist/action/diff/coalesce.d.ts.map +0 -1
  273. package/dist/action/diff/coalesce.test.d.ts +0 -2
  274. package/dist/action/diff/coalesce.test.d.ts.map +0 -1
  275. package/dist/action/diff/context.d.ts +0 -30
  276. package/dist/action/diff/context.d.ts.map +0 -1
  277. package/dist/action/diff/context.test.d.ts +0 -2
  278. package/dist/action/diff/context.test.d.ts.map +0 -1
  279. package/dist/action/diff/index.d.ts +0 -5
  280. package/dist/action/diff/index.d.ts.map +0 -1
  281. package/dist/action/diff/parser.d.ts +0 -52
  282. package/dist/action/diff/parser.d.ts.map +0 -1
  283. package/dist/action/diff/parser.test.d.ts +0 -2
  284. package/dist/action/diff/parser.test.d.ts.map +0 -1
  285. package/dist/action/event/context.d.ts +0 -9
  286. package/dist/action/event/context.d.ts.map +0 -1
  287. package/dist/action/event/index.d.ts +0 -3
  288. package/dist/action/event/index.d.ts.map +0 -1
  289. package/dist/action/event/schedule-context.d.ts +0 -30
  290. package/dist/action/event/schedule-context.d.ts.map +0 -1
  291. package/dist/action/examples/examples.integration.test.d.ts +0 -2
  292. package/dist/action/examples/examples.integration.test.d.ts.map +0 -1
  293. package/dist/action/examples/index.d.ts +0 -50
  294. package/dist/action/examples/index.d.ts.map +0 -1
  295. package/dist/action/examples/index.test.d.ts +0 -2
  296. package/dist/action/examples/index.test.d.ts.map +0 -1
  297. package/dist/action/examples/setup.d.ts +0 -2
  298. package/dist/action/examples/setup.d.ts.map +0 -1
  299. package/dist/action/index.d.ts +0 -11
  300. package/dist/action/index.d.ts.map +0 -1
  301. package/dist/action/index.js +0 -38231
  302. package/dist/action/index.js.map +0 -1
  303. package/dist/action/licenses.txt +0 -992
  304. package/dist/action/main.d.ts +0 -2
  305. package/dist/action/main.d.ts.map +0 -1
  306. package/dist/action/main.js +0 -707
  307. package/dist/action/main.js.map +0 -1
  308. package/dist/action/output/dedup.d.ts +0 -153
  309. package/dist/action/output/dedup.d.ts.map +0 -1
  310. package/dist/action/output/dedup.test.d.ts +0 -2
  311. package/dist/action/output/dedup.test.d.ts.map +0 -1
  312. package/dist/action/output/github-checks.d.ts +0 -106
  313. package/dist/action/output/github-checks.d.ts.map +0 -1
  314. package/dist/action/output/github-checks.test.d.ts +0 -2
  315. package/dist/action/output/github-checks.test.d.ts.map +0 -1
  316. package/dist/action/output/github-issues.d.ts +0 -35
  317. package/dist/action/output/github-issues.d.ts.map +0 -1
  318. package/dist/action/output/index.d.ts +0 -6
  319. package/dist/action/output/index.d.ts.map +0 -1
  320. package/dist/action/output/issue-renderer.d.ts +0 -20
  321. package/dist/action/output/issue-renderer.d.ts.map +0 -1
  322. package/dist/action/output/renderer.d.ts +0 -4
  323. package/dist/action/output/renderer.d.ts.map +0 -1
  324. package/dist/action/output/renderer.test.d.ts +0 -2
  325. package/dist/action/output/renderer.test.d.ts.map +0 -1
  326. package/dist/action/output/stale.d.ts +0 -31
  327. package/dist/action/output/stale.d.ts.map +0 -1
  328. package/dist/action/output/stale.test.d.ts +0 -2
  329. package/dist/action/output/stale.test.d.ts.map +0 -1
  330. package/dist/action/output/types.d.ts +0 -31
  331. package/dist/action/output/types.d.ts.map +0 -1
  332. package/dist/action/package.json +0 -3
  333. package/dist/action/sdk/index.d.ts +0 -2
  334. package/dist/action/sdk/index.d.ts.map +0 -1
  335. package/dist/action/sdk/runner.d.ts +0 -202
  336. package/dist/action/sdk/runner.d.ts.map +0 -1
  337. package/dist/action/sdk/runner.test.d.ts +0 -2
  338. package/dist/action/sdk/runner.test.d.ts.map +0 -1
  339. package/dist/action/skills/index.d.ts +0 -5
  340. package/dist/action/skills/index.d.ts.map +0 -1
  341. package/dist/action/skills/loader.d.ts +0 -111
  342. package/dist/action/skills/loader.d.ts.map +0 -1
  343. package/dist/action/skills/loader.test.d.ts +0 -2
  344. package/dist/action/skills/loader.test.d.ts.map +0 -1
  345. package/dist/action/skills/remote.d.ts +0 -117
  346. package/dist/action/skills/remote.d.ts.map +0 -1
  347. package/dist/action/skills/remote.test.d.ts +0 -2
  348. package/dist/action/skills/remote.test.d.ts.map +0 -1
  349. package/dist/action/sourcemap-register.cjs +0 -1
  350. package/dist/action/triggers/matcher.d.ts +0 -30
  351. package/dist/action/triggers/matcher.d.ts.map +0 -1
  352. package/dist/action/triggers/matcher.test.d.ts +0 -2
  353. package/dist/action/triggers/matcher.test.d.ts.map +0 -1
  354. package/dist/action/types/index.d.ts +0 -269
  355. package/dist/action/types/index.d.ts.map +0 -1
  356. package/dist/action/utils/async.d.ts +0 -5
  357. package/dist/action/utils/async.d.ts.map +0 -1
  358. package/dist/action/utils/index.d.ts +0 -16
  359. package/dist/action/utils/index.d.ts.map +0 -1
  360. package/dist/action/utils/index.test.d.ts +0 -2
  361. package/dist/action/utils/index.test.d.ts.map +0 -1
  362. package/dist/action/utils/version.d.ts +0 -3
  363. package/dist/action/utils/version.d.ts.map +0 -1
  364. package/dist/cli/args.test.d.ts +0 -2
  365. package/dist/cli/args.test.d.ts.map +0 -1
  366. package/dist/cli/args.test.js +0 -392
  367. package/dist/cli/args.test.js.map +0 -1
  368. package/dist/cli/commands/init.test.d.ts +0 -2
  369. package/dist/cli/commands/init.test.d.ts.map +0 -1
  370. package/dist/cli/commands/init.test.js +0 -117
  371. package/dist/cli/commands/init.test.js.map +0 -1
  372. package/dist/cli/files.test.d.ts +0 -2
  373. package/dist/cli/files.test.d.ts.map +0 -1
  374. package/dist/cli/files.test.js +0 -117
  375. package/dist/cli/files.test.js.map +0 -1
  376. package/dist/cli/fix.test.d.ts +0 -2
  377. package/dist/cli/fix.test.d.ts.map +0 -1
  378. package/dist/cli/fix.test.js +0 -251
  379. package/dist/cli/fix.test.js.map +0 -1
  380. package/dist/cli/git.test.d.ts +0 -2
  381. package/dist/cli/git.test.d.ts.map +0 -1
  382. package/dist/cli/git.test.js +0 -96
  383. package/dist/cli/git.test.js.map +0 -1
  384. package/dist/cli/output/formatters.test.d.ts +0 -2
  385. package/dist/cli/output/formatters.test.d.ts.map +0 -1
  386. package/dist/cli/output/formatters.test.js +0 -152
  387. package/dist/cli/output/formatters.test.js.map +0 -1
  388. package/dist/cli/output/jsonl.test.d.ts +0 -2
  389. package/dist/cli/output/jsonl.test.d.ts.map +0 -1
  390. package/dist/cli/output/jsonl.test.js +0 -284
  391. package/dist/cli/output/jsonl.test.js.map +0 -1
  392. package/dist/cli/output/tty.test.d.ts +0 -2
  393. package/dist/cli/output/tty.test.d.ts.map +0 -1
  394. package/dist/cli/output/tty.test.js +0 -105
  395. package/dist/cli/output/tty.test.js.map +0 -1
  396. package/dist/cli/output/verbosity.test.d.ts +0 -2
  397. package/dist/cli/output/verbosity.test.d.ts.map +0 -1
  398. package/dist/cli/output/verbosity.test.js +0 -35
  399. package/dist/cli/output/verbosity.test.js.map +0 -1
  400. package/dist/cli/terminal.test.d.ts +0 -2
  401. package/dist/cli/terminal.test.d.ts.map +0 -1
  402. package/dist/cli/terminal.test.js +0 -123
  403. package/dist/cli/terminal.test.js.map +0 -1
  404. package/dist/config/loader.test.d.ts +0 -2
  405. package/dist/config/loader.test.d.ts.map +0 -1
  406. package/dist/config/loader.test.js +0 -263
  407. package/dist/config/loader.test.js.map +0 -1
  408. package/dist/config/writer.test.d.ts +0 -2
  409. package/dist/config/writer.test.d.ts.map +0 -1
  410. package/dist/config/writer.test.js +0 -98
  411. package/dist/config/writer.test.js.map +0 -1
  412. package/dist/diff/classify.test.d.ts +0 -2
  413. package/dist/diff/classify.test.d.ts.map +0 -1
  414. package/dist/diff/classify.test.js +0 -140
  415. package/dist/diff/classify.test.js.map +0 -1
  416. package/dist/diff/coalesce.test.d.ts +0 -2
  417. package/dist/diff/coalesce.test.d.ts.map +0 -1
  418. package/dist/diff/coalesce.test.js +0 -159
  419. package/dist/diff/coalesce.test.js.map +0 -1
  420. package/dist/diff/context.test.d.ts +0 -2
  421. package/dist/diff/context.test.d.ts.map +0 -1
  422. package/dist/diff/context.test.js +0 -190
  423. package/dist/diff/context.test.js.map +0 -1
  424. package/dist/diff/parser.test.d.ts +0 -2
  425. package/dist/diff/parser.test.d.ts.map +0 -1
  426. package/dist/diff/parser.test.js +0 -178
  427. package/dist/diff/parser.test.js.map +0 -1
  428. package/dist/examples/examples.integration.test.d.ts +0 -2
  429. package/dist/examples/examples.integration.test.d.ts.map +0 -1
  430. package/dist/examples/examples.integration.test.js +0 -55
  431. package/dist/examples/examples.integration.test.js.map +0 -1
  432. package/dist/examples/index.test.d.ts +0 -2
  433. package/dist/examples/index.test.d.ts.map +0 -1
  434. package/dist/examples/index.test.js +0 -88
  435. package/dist/examples/index.test.js.map +0 -1
  436. package/dist/output/dedup.test.d.ts +0 -2
  437. package/dist/output/dedup.test.d.ts.map +0 -1
  438. package/dist/output/dedup.test.js +0 -357
  439. package/dist/output/dedup.test.js.map +0 -1
  440. package/dist/output/github-checks.test.d.ts +0 -2
  441. package/dist/output/github-checks.test.d.ts.map +0 -1
  442. package/dist/output/github-checks.test.js +0 -255
  443. package/dist/output/github-checks.test.js.map +0 -1
  444. package/dist/output/renderer.test.d.ts +0 -2
  445. package/dist/output/renderer.test.d.ts.map +0 -1
  446. package/dist/output/renderer.test.js +0 -645
  447. package/dist/output/renderer.test.js.map +0 -1
  448. package/dist/output/stale.test.d.ts +0 -2
  449. package/dist/output/stale.test.d.ts.map +0 -1
  450. package/dist/output/stale.test.js +0 -330
  451. package/dist/output/stale.test.js.map +0 -1
  452. package/dist/sdk/runner.test.d.ts +0 -2
  453. package/dist/sdk/runner.test.d.ts.map +0 -1
  454. package/dist/sdk/runner.test.js +0 -677
  455. package/dist/sdk/runner.test.js.map +0 -1
  456. package/dist/skills/loader.test.d.ts +0 -2
  457. package/dist/skills/loader.test.d.ts.map +0 -1
  458. package/dist/skills/loader.test.js +0 -241
  459. package/dist/skills/loader.test.js.map +0 -1
  460. package/dist/skills/remote.test.d.ts +0 -2
  461. package/dist/skills/remote.test.d.ts.map +0 -1
  462. package/dist/skills/remote.test.js +0 -582
  463. package/dist/skills/remote.test.js.map +0 -1
  464. package/dist/triggers/matcher.test.d.ts +0 -2
  465. package/dist/triggers/matcher.test.d.ts.map +0 -1
  466. package/dist/triggers/matcher.test.js +0 -234
  467. package/dist/triggers/matcher.test.js.map +0 -1
  468. package/dist/utils/index.test.d.ts +0 -2
  469. package/dist/utils/index.test.d.ts.map +0 -1
  470. package/dist/utils/index.test.js +0 -68
  471. package/dist/utils/index.test.js.map +0 -1
  472. package/docs/astro.config.mjs +0 -43
  473. package/docs/package.json +0 -19
  474. package/docs/pnpm-lock.yaml +0 -4000
  475. package/docs/public/favicon.svg +0 -5
  476. package/docs/src/components/Code.astro +0 -141
  477. package/docs/src/components/PackageManagerTabs.astro +0 -183
  478. package/docs/src/components/Terminal.astro +0 -212
  479. package/docs/src/layouts/Base.astro +0 -380
  480. package/docs/src/pages/cli.astro +0 -167
  481. package/docs/src/pages/config.astro +0 -395
  482. package/docs/src/pages/guide.astro +0 -450
  483. package/docs/src/pages/index.astro +0 -490
  484. package/docs/src/styles/global.css +0 -551
  485. package/docs/src/utils/version.ts +0 -6
  486. package/docs/tsconfig.json +0 -3
  487. package/docs/vercel.json +0 -5
  488. package/eslint.config.js +0 -33
  489. package/src/action/index.ts +0 -1
  490. package/src/action/main.ts +0 -868
  491. package/src/cli/args.test.ts +0 -477
  492. package/src/cli/args.ts +0 -414
  493. package/src/cli/commands/add.ts +0 -447
  494. package/src/cli/commands/init.test.ts +0 -137
  495. package/src/cli/commands/init.ts +0 -134
  496. package/src/cli/commands/setup-app/browser.ts +0 -38
  497. package/src/cli/commands/setup-app/credentials.ts +0 -45
  498. package/src/cli/commands/setup-app/manifest.ts +0 -48
  499. package/src/cli/commands/setup-app/server.ts +0 -172
  500. package/src/cli/commands/setup-app.ts +0 -156
  501. package/src/cli/commands/sync.ts +0 -114
  502. package/src/cli/context.ts +0 -131
  503. package/src/cli/files.test.ts +0 -155
  504. package/src/cli/files.ts +0 -89
  505. package/src/cli/fix.test.ts +0 -310
  506. package/src/cli/fix.ts +0 -387
  507. package/src/cli/git.test.ts +0 -119
  508. package/src/cli/git.ts +0 -318
  509. package/src/cli/index.ts +0 -14
  510. package/src/cli/main.ts +0 -672
  511. package/src/cli/output/box.ts +0 -235
  512. package/src/cli/output/formatters.test.ts +0 -187
  513. package/src/cli/output/formatters.ts +0 -269
  514. package/src/cli/output/icons.ts +0 -19
  515. package/src/cli/output/index.ts +0 -44
  516. package/src/cli/output/ink-runner.tsx +0 -366
  517. package/src/cli/output/jsonl.test.ts +0 -347
  518. package/src/cli/output/jsonl.ts +0 -126
  519. package/src/cli/output/reporter.ts +0 -434
  520. package/src/cli/output/tasks.ts +0 -374
  521. package/src/cli/output/tty.test.ts +0 -117
  522. package/src/cli/output/tty.ts +0 -60
  523. package/src/cli/output/verbosity.test.ts +0 -40
  524. package/src/cli/output/verbosity.ts +0 -31
  525. package/src/cli/terminal.test.ts +0 -148
  526. package/src/cli/terminal.ts +0 -301
  527. package/src/config/index.ts +0 -3
  528. package/src/config/loader.test.ts +0 -313
  529. package/src/config/loader.ts +0 -103
  530. package/src/config/schema.ts +0 -168
  531. package/src/config/writer.test.ts +0 -119
  532. package/src/config/writer.ts +0 -84
  533. package/src/diff/classify.test.ts +0 -162
  534. package/src/diff/classify.ts +0 -92
  535. package/src/diff/coalesce.test.ts +0 -208
  536. package/src/diff/coalesce.ts +0 -133
  537. package/src/diff/context.test.ts +0 -226
  538. package/src/diff/context.ts +0 -201
  539. package/src/diff/index.ts +0 -4
  540. package/src/diff/parser.test.ts +0 -212
  541. package/src/diff/parser.ts +0 -149
  542. package/src/event/context.ts +0 -132
  543. package/src/event/index.ts +0 -2
  544. package/src/event/schedule-context.ts +0 -101
  545. package/src/examples/examples.integration.test.ts +0 -66
  546. package/src/examples/index.test.ts +0 -101
  547. package/src/examples/index.ts +0 -122
  548. package/src/examples/setup.ts +0 -25
  549. package/src/index.ts +0 -115
  550. package/src/output/dedup.test.ts +0 -419
  551. package/src/output/dedup.ts +0 -607
  552. package/src/output/github-checks.test.ts +0 -300
  553. package/src/output/github-checks.ts +0 -476
  554. package/src/output/github-issues.ts +0 -329
  555. package/src/output/index.ts +0 -5
  556. package/src/output/issue-renderer.ts +0 -197
  557. package/src/output/renderer.test.ts +0 -727
  558. package/src/output/renderer.ts +0 -217
  559. package/src/output/stale.test.ts +0 -375
  560. package/src/output/stale.ts +0 -155
  561. package/src/output/types.ts +0 -34
  562. package/src/sdk/index.ts +0 -1
  563. package/src/sdk/runner.test.ts +0 -806
  564. package/src/sdk/runner.ts +0 -1232
  565. package/src/skills/index.ts +0 -36
  566. package/src/skills/loader.test.ts +0 -300
  567. package/src/skills/loader.ts +0 -423
  568. package/src/skills/remote.test.ts +0 -704
  569. package/src/skills/remote.ts +0 -604
  570. package/src/triggers/matcher.test.ts +0 -277
  571. package/src/triggers/matcher.ts +0 -152
  572. package/src/types/index.ts +0 -194
  573. package/src/utils/async.ts +0 -18
  574. package/src/utils/index.test.ts +0 -84
  575. package/src/utils/index.ts +0 -51
  576. package/src/utils/version.ts +0 -17
  577. package/tsconfig.json +0 -25
  578. package/vitest.config.ts +0 -8
  579. package/vitest.integration.config.ts +0 -11
  580. package/warden.toml +0 -19
@@ -1,44 +0,0 @@
1
- export { Verbosity, parseVerbosity } from './verbosity.js';
2
- export { type OutputMode, detectOutputMode, timestamp } from './tty.js';
3
- export { Reporter, type SkillRunnerCallbacks } from './reporter.js';
4
- export {
5
- pluralize,
6
- formatDuration,
7
- formatElapsed,
8
- formatSeverityBadge,
9
- formatSeverityDot,
10
- formatSeverityPlain,
11
- formatFindingCounts,
12
- formatFindingCountsPlain,
13
- formatProgress,
14
- formatLocation,
15
- formatFileStats,
16
- formatFindingCompact,
17
- truncate,
18
- padRight,
19
- countBySeverity,
20
- formatCost,
21
- formatTokens,
22
- formatUsage,
23
- formatUsagePlain,
24
- } from './formatters.js';
25
- export {
26
- runSkillTask,
27
- runSkillTasks,
28
- type SkillTaskResult,
29
- type SkillTaskOptions,
30
- type RunTasksOptions,
31
- type SkillProgressCallbacks,
32
- type SkillState,
33
- type FileState,
34
- } from './tasks.js';
35
- export { runSkillTasksWithInk } from './ink-runner.js';
36
- export { BoxRenderer, type BoxOptions } from './box.js';
37
- export {
38
- writeJsonlReport,
39
- getRunLogsDir,
40
- getRunLogPath,
41
- type JsonlRecord,
42
- type JsonlRunMetadata,
43
- } from './jsonl.js';
44
- export { ICON_CHECK, ICON_SKIPPED, SPINNER_FRAMES } from './icons.js';
@@ -1,366 +0,0 @@
1
- /**
2
- * Ink-based skill runner with real-time progress display.
3
- *
4
- * ## Ink Rendering Constraints
5
- *
6
- * This file uses Ink (React for CLIs) which has specific constraints that,
7
- * if violated, cause duplicate output lines or corrupted display:
8
- *
9
- * 1. **Single Static component**: Ink's Static uses `position: 'absolute'`.
10
- * Multiple Static components cause layout conflicts. We print the header
11
- * before Ink starts to avoid needing a second Static.
12
- *
13
- * 2. **Stable item references**: Static tracks items by reference equality.
14
- * Never wrap items in new objects (e.g., `{ type: 'skill', skill }`) on
15
- * each render. Pass the original objects directly.
16
- *
17
- * 3. **Batched updates**: Rapid consecutive rerender() calls cause duplicate
18
- * output. The updateUI() function batches updates using setImmediate().
19
- *
20
- * 4. **No direct writes to stderr**: Writing to process.stderr while Ink is
21
- * running corrupts cursor tracking. The onLargePrompt/onPromptSize callbacks
22
- * are exceptions that may cause minor display glitches in edge cases.
23
- */
24
-
25
- import React, { useState, useEffect } from 'react';
26
- import { render, Box, Text, Static } from 'ink';
27
- import {
28
- runSkillTask,
29
- type SkillTaskOptions,
30
- type SkillTaskResult,
31
- type RunTasksOptions,
32
- type SkillProgressCallbacks,
33
- type SkillState,
34
- type FileState,
35
- } from './tasks.js';
36
- import { formatDuration, truncate, countBySeverity, formatSeverityDot } from './formatters.js';
37
- import { Verbosity } from './verbosity.js';
38
- import { ICON_CHECK, ICON_SKIPPED, ICON_PENDING, ICON_ERROR, SPINNER_FRAMES } from './icons.js';
39
- import figures from 'figures';
40
-
41
- interface SkillRunnerProps {
42
- skills: SkillState[];
43
- completedItems: SkillState[];
44
- }
45
-
46
- function Spinner(): React.ReactElement {
47
- const [frame, setFrame] = useState(0);
48
-
49
- useEffect(() => {
50
- const timer = setInterval(() => {
51
- setFrame((f) => (f + 1) % SPINNER_FRAMES.length);
52
- }, 80);
53
- return () => clearInterval(timer);
54
- }, []);
55
-
56
- return <Text color="yellow">{SPINNER_FRAMES[frame]}</Text>;
57
- }
58
-
59
- function FileProgress({ file }: { file: FileState }): React.ReactElement | null {
60
- if (file.status === 'pending') return null;
61
-
62
- const filename = truncate(file.filename, 50);
63
-
64
- if (file.status === 'done') {
65
- const counts = countBySeverity(file.findings);
66
- const hasFindings = file.findings.length > 0;
67
-
68
- return (
69
- <Box>
70
- <Text color="green">{ICON_CHECK}</Text>
71
- <Text> {filename}</Text>
72
- {hasFindings && (
73
- <Text>
74
- {' '}
75
- {counts.critical > 0 && <Text>{formatSeverityDot('critical')} {counts.critical} </Text>}
76
- {counts.high > 0 && <Text>{formatSeverityDot('high')} {counts.high} </Text>}
77
- {counts.medium > 0 && <Text>{formatSeverityDot('medium')} {counts.medium} </Text>}
78
- {counts.low > 0 && <Text>{formatSeverityDot('low')} {counts.low} </Text>}
79
- {counts.info > 0 && <Text>{formatSeverityDot('info')} {counts.info}</Text>}
80
- </Text>
81
- )}
82
- </Box>
83
- );
84
- }
85
-
86
- // Running
87
- return (
88
- <Box>
89
- <Spinner />
90
- <Text> {filename} [{file.currentHunk}/{file.totalHunks}]</Text>
91
- </Box>
92
- );
93
- }
94
-
95
- function CompletedSkill({ skill }: { skill: SkillState }): React.ReactElement {
96
- const duration = skill.durationMs ? formatDuration(skill.durationMs) : '';
97
-
98
- if (skill.status === 'skipped') {
99
- return (
100
- <Box>
101
- <Text color="yellow">{ICON_SKIPPED}</Text>
102
- <Text> {skill.displayName}</Text>
103
- <Text dimColor> [skipped]</Text>
104
- </Box>
105
- );
106
- }
107
-
108
- if (skill.status === 'error') {
109
- return (
110
- <Box flexDirection="column">
111
- <Box>
112
- <Text color="red">{ICON_ERROR}</Text>
113
- <Text> {skill.displayName}</Text>
114
- {duration && <Text dimColor> [{duration}]</Text>}
115
- </Box>
116
- {skill.error && <Text color="red"> Error: {skill.error}</Text>}
117
- </Box>
118
- );
119
- }
120
-
121
- return (
122
- <Box>
123
- <Text color="green">{ICON_CHECK}</Text>
124
- <Text> {skill.displayName}</Text>
125
- {duration && <Text dimColor> [{duration}]</Text>}
126
- </Box>
127
- );
128
- }
129
-
130
- function RunningSkill({ skill }: { skill: SkillState }): React.ReactElement {
131
- const visibleFiles = skill.files.filter((f) => f.status !== 'pending');
132
-
133
- return (
134
- <Box flexDirection="column">
135
- <Box>
136
- <Spinner />
137
- <Text> {skill.displayName}</Text>
138
- </Box>
139
- {visibleFiles.map((file) => (
140
- <Box key={file.filename} marginLeft={2}>
141
- <FileProgress file={file} />
142
- </Box>
143
- ))}
144
- </Box>
145
- );
146
- }
147
-
148
- /**
149
- * Renders the skill execution UI.
150
- *
151
- * IMPORTANT: Ink's Static component tracks items by reference equality.
152
- * Items passed to Static must have stable references across renders.
153
- * Creating new wrapper objects causes Static to mishandle its internal
154
- * state, resulting in duplicate output lines.
155
- *
156
- * We use a SINGLE Static component to avoid layout conflicts from multiple
157
- * absolutely-positioned Static containers.
158
- */
159
- function SkillRunner({ skills, completedItems }: SkillRunnerProps): React.ReactElement {
160
- const running = skills.filter((s) => s.status === 'running');
161
- const pending = skills.filter((s) => s.status === 'pending');
162
-
163
- return (
164
- <Box flexDirection="column">
165
- {/*
166
- * Completed skills - passed directly to Static WITHOUT wrapper objects.
167
- * completedItems elements have stable references (same objects from parent),
168
- * so Ink can correctly track which items are new vs already rendered.
169
- */}
170
- <Static items={completedItems}>
171
- {(skill) => <CompletedSkill key={skill.name} skill={skill} />}
172
- </Static>
173
-
174
- {/* Dynamic content - updates in place */}
175
- {running.map((skill) => (
176
- <RunningSkill key={skill.name} skill={skill} />
177
- ))}
178
- {pending.map((skill) => (
179
- <Text key={skill.name} dimColor>
180
- {ICON_PENDING} {skill.displayName}
181
- </Text>
182
- ))}
183
- </Box>
184
- );
185
- }
186
-
187
- /** No-op callbacks for quiet mode. */
188
- // eslint-disable-next-line @typescript-eslint/no-empty-function
189
- const noop = () => {};
190
- const noopCallbacks: SkillProgressCallbacks = {
191
- onSkillStart: noop,
192
- onSkillUpdate: noop,
193
- onFileUpdate: noop,
194
- onSkillComplete: noop,
195
- onSkillSkipped: noop,
196
- onSkillError: noop,
197
- };
198
-
199
- /**
200
- * Run skill tasks with Ink-based real-time progress display.
201
- */
202
- export async function runSkillTasksWithInk(
203
- tasks: SkillTaskOptions[],
204
- options: RunTasksOptions
205
- ): Promise<SkillTaskResult[]> {
206
- const { verbosity, concurrency } = options;
207
-
208
- if (tasks.length === 0 || verbosity === Verbosity.Quiet) {
209
- // No tasks or quiet mode - run without UI
210
- const results: SkillTaskResult[] = [];
211
- for (const task of tasks) {
212
- const result = await runSkillTask(task, 5, noopCallbacks);
213
- results.push(result);
214
- }
215
- return results;
216
- }
217
-
218
- // Track skill states
219
- const skillStates: SkillState[] = [];
220
- const completedItems: SkillState[] = [];
221
- const completedNames = new Set<string>();
222
-
223
- // Print header before Ink starts - this avoids multiple Static components
224
- // which can cause layout conflicts due to absolute positioning
225
- process.stderr.write('\x1b[1mSKILLS\x1b[0m\n');
226
-
227
- // Create Ink instance
228
- const { rerender, unmount } = render(
229
- <SkillRunner skills={skillStates} completedItems={completedItems} />,
230
- { stdout: process.stderr }
231
- );
232
-
233
- // Batch UI updates to prevent rapid consecutive rerenders that cause duplicate lines.
234
- // Without batching, multiple callbacks firing in quick succession (e.g., 5 files
235
- // starting simultaneously) trigger 5 immediate rerenders, which Ink cannot
236
- // process correctly, resulting in the same line appearing multiple times.
237
- let updatePending = false;
238
- const updateUI = () => {
239
- if (updatePending) return;
240
- updatePending = true;
241
- setImmediate(() => {
242
- updatePending = false;
243
- rerender(<SkillRunner skills={[...skillStates]} completedItems={[...completedItems]} />);
244
- });
245
- };
246
-
247
- // Callbacks to update state
248
- const callbacks: SkillProgressCallbacks = {
249
- onSkillStart: (skill) => {
250
- skillStates.push(skill);
251
- updateUI();
252
- },
253
- onSkillUpdate: (name, updates) => {
254
- const idx = skillStates.findIndex((s) => s.name === name);
255
- const existing = skillStates[idx];
256
- if (idx >= 0 && existing) {
257
- const updated = { ...existing, ...updates };
258
- skillStates[idx] = updated;
259
-
260
- // If skill just completed, add to completedItems (only once)
261
- if (updates.status === 'done' && !completedNames.has(name)) {
262
- completedNames.add(name);
263
- completedItems.push(updated);
264
- }
265
-
266
- updateUI();
267
- }
268
- },
269
- onFileUpdate: (skillName, filename, updates) => {
270
- const skill = skillStates.find((s) => s.name === skillName);
271
- if (skill) {
272
- const file = skill.files.find((f) => f.filename === filename);
273
- if (file) {
274
- Object.assign(file, updates);
275
- updateUI();
276
- }
277
- }
278
- },
279
- onSkillComplete: () => {
280
- updateUI();
281
- },
282
- onSkillSkipped: (name) => {
283
- const task = tasks.find((t) => t.name === name);
284
- const state: SkillState = {
285
- name,
286
- displayName: task?.displayName ?? name,
287
- status: 'skipped',
288
- files: [],
289
- findings: [],
290
- };
291
- skillStates.push(state);
292
-
293
- if (!completedNames.has(name)) {
294
- completedNames.add(name);
295
- completedItems.push(state);
296
- }
297
-
298
- updateUI();
299
- },
300
- onSkillError: (name, error) => {
301
- const idx = skillStates.findIndex((s) => s.name === name);
302
- const existing = skillStates[idx];
303
- let state: SkillState;
304
-
305
- if (idx >= 0 && existing) {
306
- state = { ...existing, status: 'error', error };
307
- skillStates[idx] = state;
308
- } else {
309
- const task = tasks.find((t) => t.name === name);
310
- state = {
311
- name,
312
- displayName: task?.displayName ?? name,
313
- status: 'error',
314
- error,
315
- files: [],
316
- findings: [],
317
- };
318
- skillStates.push(state);
319
- }
320
-
321
- if (!completedNames.has(name)) {
322
- completedNames.add(name);
323
- completedItems.push(state);
324
- }
325
-
326
- updateUI();
327
- },
328
- // CAUTION: Direct stderr writes while Ink is running can cause display glitches.
329
- // These callbacks are rare (large prompts, debug mode) so the tradeoff is acceptable.
330
- // If these cause issues, consider queueing messages and printing after unmount().
331
- onLargePrompt: (_skillName, filename, lineRange, chars, estimatedTokens) => {
332
- const location = `${filename}:${lineRange}`;
333
- const size = `${Math.round(chars / 1000)}k chars (~${Math.round(estimatedTokens / 1000)}k tokens)`;
334
- process.stderr.write(`\x1b[33m${figures.warning}\x1b[0m Large prompt for ${location}: ${size}\n`);
335
- },
336
- onPromptSize: verbosity >= Verbosity.Debug
337
- ? (_skillName, filename, lineRange, systemChars, userChars, totalChars, estimatedTokens) => {
338
- const location = `${filename}:${lineRange}`;
339
- process.stderr.write(`\x1b[2m[debug] Prompt for ${location}: system=${systemChars}, user=${userChars}, total=${totalChars} chars (~${estimatedTokens} tokens)\x1b[0m\n`);
340
- }
341
- : undefined,
342
- };
343
-
344
- const fileConcurrency = 5;
345
- const results: SkillTaskResult[] = [];
346
-
347
- if (concurrency <= 1) {
348
- for (const task of tasks) {
349
- const result = await runSkillTask(task, fileConcurrency, callbacks);
350
- results.push(result);
351
- }
352
- } else {
353
- for (let i = 0; i < tasks.length; i += concurrency) {
354
- const batch = tasks.slice(i, i + concurrency);
355
- const batchResults = await Promise.all(
356
- batch.map((task) => runSkillTask(task, fileConcurrency, callbacks))
357
- );
358
- results.push(...batchResults);
359
- }
360
- }
361
-
362
- // Cleanup
363
- unmount();
364
-
365
- return results;
366
- }