@sentry/warden 0.0.0 → 0.1.1

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 (550) hide show
  1. package/.claude/skills/warden-skill/SKILL.md +0 -24
  2. package/.claude/skills/warden-skill/references/config-schema.md +0 -17
  3. package/.github/workflows/ci.yml +1 -1
  4. package/.github/workflows/release.yml +6 -1
  5. package/.github/workflows/warden.yml +1 -1
  6. package/dist/action/159.index.js +523 -0
  7. package/dist/action/159.index.js.map +1 -0
  8. package/dist/action/action/index.d.ts +2 -0
  9. package/dist/action/action/index.d.ts.map +1 -0
  10. package/dist/action/action/main.d.ts +2 -0
  11. package/dist/action/action/main.d.ts.map +1 -0
  12. package/dist/action/cli/args.d.ts +74 -0
  13. package/dist/action/cli/args.d.ts.map +1 -0
  14. package/dist/action/cli/args.test.d.ts +2 -0
  15. package/dist/action/cli/args.test.d.ts.map +1 -0
  16. package/dist/action/cli/commands/add.d.ts +7 -0
  17. package/dist/action/cli/commands/add.d.ts.map +1 -0
  18. package/dist/action/cli/commands/init.d.ts +10 -0
  19. package/dist/action/cli/commands/init.d.ts.map +1 -0
  20. package/dist/action/cli/commands/init.test.d.ts +2 -0
  21. package/dist/action/cli/commands/init.test.d.ts.map +1 -0
  22. package/dist/action/cli/commands/setup-app/browser.d.ts +9 -0
  23. package/dist/action/cli/commands/setup-app/browser.d.ts.map +1 -0
  24. package/dist/action/cli/commands/setup-app/credentials.d.ts +15 -0
  25. package/dist/action/cli/commands/setup-app/credentials.d.ts.map +1 -0
  26. package/dist/action/cli/commands/setup-app/manifest.d.ts +24 -0
  27. package/dist/action/cli/commands/setup-app/manifest.d.ts.map +1 -0
  28. package/dist/action/cli/commands/setup-app/server.d.ts +28 -0
  29. package/dist/action/cli/commands/setup-app/server.d.ts.map +1 -0
  30. package/dist/action/cli/commands/setup-app.d.ts +11 -0
  31. package/dist/action/cli/commands/setup-app.d.ts.map +1 -0
  32. package/dist/action/cli/commands/sync.d.ts +9 -0
  33. package/dist/action/cli/commands/sync.d.ts.map +1 -0
  34. package/dist/action/cli/context.d.ts +27 -0
  35. package/dist/action/cli/context.d.ts.map +1 -0
  36. package/dist/action/cli/files.d.ts +22 -0
  37. package/dist/action/cli/files.d.ts.map +1 -0
  38. package/dist/action/cli/files.test.d.ts +2 -0
  39. package/dist/action/cli/files.test.d.ts.map +1 -0
  40. package/dist/action/cli/fix.d.ts +41 -0
  41. package/dist/action/cli/fix.d.ts.map +1 -0
  42. package/dist/action/cli/fix.test.d.ts +2 -0
  43. package/dist/action/cli/fix.test.d.ts.map +1 -0
  44. package/dist/action/cli/git.d.ts +73 -0
  45. package/dist/action/cli/git.d.ts.map +1 -0
  46. package/dist/action/cli/git.test.d.ts +2 -0
  47. package/dist/action/cli/git.test.d.ts.map +1 -0
  48. package/dist/action/cli/index.d.ts +3 -0
  49. package/dist/action/cli/index.d.ts.map +1 -0
  50. package/dist/action/cli/main.d.ts +7 -0
  51. package/dist/action/cli/main.d.ts.map +1 -0
  52. package/dist/action/cli/output/box.d.ts +75 -0
  53. package/dist/action/cli/output/box.d.ts.map +1 -0
  54. package/dist/action/cli/output/formatters.d.ts +90 -0
  55. package/dist/action/cli/output/formatters.d.ts.map +1 -0
  56. package/dist/action/cli/output/formatters.test.d.ts +2 -0
  57. package/dist/action/cli/output/formatters.test.d.ts.map +1 -0
  58. package/dist/action/cli/output/icons.d.ts +15 -0
  59. package/dist/action/cli/output/icons.d.ts.map +1 -0
  60. package/dist/action/cli/output/index.d.ts +10 -0
  61. package/dist/action/cli/output/index.d.ts.map +1 -0
  62. package/dist/action/cli/output/ink-runner.d.ts +29 -0
  63. package/dist/action/cli/output/ink-runner.d.ts.map +1 -0
  64. package/dist/action/cli/output/jsonl.d.ts +43 -0
  65. package/dist/action/cli/output/jsonl.d.ts.map +1 -0
  66. package/dist/action/cli/output/jsonl.test.d.ts +2 -0
  67. package/dist/action/cli/output/jsonl.test.d.ts.map +1 -0
  68. package/dist/action/cli/output/reporter.d.ts +108 -0
  69. package/dist/action/cli/output/reporter.d.ts.map +1 -0
  70. package/dist/action/cli/output/tasks.d.ts +89 -0
  71. package/dist/action/cli/output/tasks.d.ts.map +1 -0
  72. package/dist/action/cli/output/tty.d.ts +21 -0
  73. package/dist/action/cli/output/tty.d.ts.map +1 -0
  74. package/dist/action/cli/output/tty.test.d.ts +2 -0
  75. package/dist/action/cli/output/tty.test.d.ts.map +1 -0
  76. package/dist/action/cli/output/verbosity.d.ts +20 -0
  77. package/dist/action/cli/output/verbosity.d.ts.map +1 -0
  78. package/dist/action/cli/output/verbosity.test.d.ts +2 -0
  79. package/dist/action/cli/output/verbosity.test.d.ts.map +1 -0
  80. package/dist/action/cli/terminal.d.ts +19 -0
  81. package/dist/action/cli/terminal.d.ts.map +1 -0
  82. package/dist/action/cli/terminal.test.d.ts +2 -0
  83. package/dist/action/cli/terminal.test.d.ts.map +1 -0
  84. package/dist/action/config/index.d.ts +4 -0
  85. package/dist/action/config/index.d.ts.map +1 -0
  86. package/dist/action/config/loader.d.ts +27 -0
  87. package/dist/action/config/loader.d.ts.map +1 -0
  88. package/dist/action/config/loader.test.d.ts +2 -0
  89. package/dist/action/config/loader.test.d.ts.map +1 -0
  90. package/dist/action/config/schema.d.ts +318 -0
  91. package/dist/action/config/schema.d.ts.map +1 -0
  92. package/dist/action/config/writer.d.ts +11 -0
  93. package/dist/action/config/writer.d.ts.map +1 -0
  94. package/dist/action/config/writer.test.d.ts +2 -0
  95. package/dist/action/config/writer.test.d.ts.map +1 -0
  96. package/dist/action/diff/classify.d.ts +29 -0
  97. package/dist/action/diff/classify.d.ts.map +1 -0
  98. package/dist/action/diff/classify.test.d.ts +2 -0
  99. package/dist/action/diff/classify.test.d.ts.map +1 -0
  100. package/dist/action/diff/coalesce.d.ts +42 -0
  101. package/dist/action/diff/coalesce.d.ts.map +1 -0
  102. package/dist/action/diff/coalesce.test.d.ts +2 -0
  103. package/dist/action/diff/coalesce.test.d.ts.map +1 -0
  104. package/dist/action/diff/context.d.ts +30 -0
  105. package/dist/action/diff/context.d.ts.map +1 -0
  106. package/dist/action/diff/context.test.d.ts +2 -0
  107. package/dist/action/diff/context.test.d.ts.map +1 -0
  108. package/dist/action/diff/index.d.ts +5 -0
  109. package/dist/action/diff/index.d.ts.map +1 -0
  110. package/dist/action/diff/parser.d.ts +52 -0
  111. package/dist/action/diff/parser.d.ts.map +1 -0
  112. package/dist/action/diff/parser.test.d.ts +2 -0
  113. package/dist/action/diff/parser.test.d.ts.map +1 -0
  114. package/dist/action/event/context.d.ts +9 -0
  115. package/dist/action/event/context.d.ts.map +1 -0
  116. package/dist/action/event/index.d.ts +3 -0
  117. package/dist/action/event/index.d.ts.map +1 -0
  118. package/dist/action/event/schedule-context.d.ts +30 -0
  119. package/dist/action/event/schedule-context.d.ts.map +1 -0
  120. package/dist/action/examples/examples.integration.test.d.ts +2 -0
  121. package/dist/action/examples/examples.integration.test.d.ts.map +1 -0
  122. package/dist/action/examples/index.d.ts +50 -0
  123. package/dist/action/examples/index.d.ts.map +1 -0
  124. package/dist/action/examples/index.test.d.ts +2 -0
  125. package/dist/action/examples/index.test.d.ts.map +1 -0
  126. package/dist/action/examples/setup.d.ts +2 -0
  127. package/dist/action/examples/setup.d.ts.map +1 -0
  128. package/dist/action/index.d.ts +11 -0
  129. package/dist/action/index.d.ts.map +1 -0
  130. package/dist/action/index.js +38231 -0
  131. package/dist/action/index.js.map +1 -0
  132. package/dist/action/licenses.txt +992 -0
  133. package/dist/action/main.d.ts +2 -0
  134. package/dist/action/main.d.ts.map +1 -0
  135. package/dist/action/main.js +707 -0
  136. package/dist/action/main.js.map +1 -0
  137. package/dist/action/output/dedup.d.ts +153 -0
  138. package/dist/action/output/dedup.d.ts.map +1 -0
  139. package/dist/action/output/dedup.test.d.ts +2 -0
  140. package/dist/action/output/dedup.test.d.ts.map +1 -0
  141. package/dist/action/output/github-checks.d.ts +106 -0
  142. package/dist/action/output/github-checks.d.ts.map +1 -0
  143. package/dist/action/output/github-checks.test.d.ts +2 -0
  144. package/dist/action/output/github-checks.test.d.ts.map +1 -0
  145. package/dist/action/output/github-issues.d.ts +35 -0
  146. package/dist/action/output/github-issues.d.ts.map +1 -0
  147. package/dist/action/output/index.d.ts +6 -0
  148. package/dist/action/output/index.d.ts.map +1 -0
  149. package/dist/action/output/issue-renderer.d.ts +20 -0
  150. package/dist/action/output/issue-renderer.d.ts.map +1 -0
  151. package/dist/action/output/renderer.d.ts +4 -0
  152. package/dist/action/output/renderer.d.ts.map +1 -0
  153. package/dist/action/output/renderer.test.d.ts +2 -0
  154. package/dist/action/output/renderer.test.d.ts.map +1 -0
  155. package/dist/action/output/stale.d.ts +31 -0
  156. package/dist/action/output/stale.d.ts.map +1 -0
  157. package/dist/action/output/stale.test.d.ts +2 -0
  158. package/dist/action/output/stale.test.d.ts.map +1 -0
  159. package/dist/action/output/types.d.ts +31 -0
  160. package/dist/action/output/types.d.ts.map +1 -0
  161. package/dist/action/package.json +3 -0
  162. package/dist/action/sdk/index.d.ts +2 -0
  163. package/dist/action/sdk/index.d.ts.map +1 -0
  164. package/dist/action/sdk/runner.d.ts +202 -0
  165. package/dist/action/sdk/runner.d.ts.map +1 -0
  166. package/dist/action/sdk/runner.test.d.ts +2 -0
  167. package/dist/action/sdk/runner.test.d.ts.map +1 -0
  168. package/dist/action/skills/index.d.ts +5 -0
  169. package/dist/action/skills/index.d.ts.map +1 -0
  170. package/dist/action/skills/loader.d.ts +111 -0
  171. package/dist/action/skills/loader.d.ts.map +1 -0
  172. package/dist/action/skills/loader.test.d.ts +2 -0
  173. package/dist/action/skills/loader.test.d.ts.map +1 -0
  174. package/dist/action/skills/remote.d.ts +117 -0
  175. package/dist/action/skills/remote.d.ts.map +1 -0
  176. package/dist/action/skills/remote.test.d.ts +2 -0
  177. package/dist/action/skills/remote.test.d.ts.map +1 -0
  178. package/dist/action/sourcemap-register.cjs +1 -0
  179. package/dist/action/triggers/matcher.d.ts +30 -0
  180. package/dist/action/triggers/matcher.d.ts.map +1 -0
  181. package/dist/action/triggers/matcher.test.d.ts +2 -0
  182. package/dist/action/triggers/matcher.test.d.ts.map +1 -0
  183. package/dist/action/types/index.d.ts +269 -0
  184. package/dist/action/types/index.d.ts.map +1 -0
  185. package/dist/action/utils/async.d.ts +5 -0
  186. package/dist/action/utils/async.d.ts.map +1 -0
  187. package/dist/action/utils/index.d.ts +16 -0
  188. package/dist/action/utils/index.d.ts.map +1 -0
  189. package/dist/action/utils/index.test.d.ts +2 -0
  190. package/dist/action/utils/index.test.d.ts.map +1 -0
  191. package/dist/action/utils/version.d.ts +3 -0
  192. package/dist/action/utils/version.d.ts.map +1 -0
  193. package/dist/cli/args.d.ts +74 -0
  194. package/dist/cli/args.d.ts.map +1 -0
  195. package/dist/cli/args.js +359 -0
  196. package/dist/cli/args.js.map +1 -0
  197. package/dist/cli/args.test.d.ts +2 -0
  198. package/dist/cli/args.test.d.ts.map +1 -0
  199. package/dist/cli/args.test.js +392 -0
  200. package/dist/cli/args.test.js.map +1 -0
  201. package/dist/cli/commands/add.d.ts +7 -0
  202. package/dist/cli/commands/add.d.ts.map +1 -0
  203. package/dist/cli/commands/add.js +380 -0
  204. package/dist/cli/commands/add.js.map +1 -0
  205. package/dist/cli/commands/init.d.ts +10 -0
  206. package/dist/cli/commands/init.d.ts.map +1 -0
  207. package/dist/cli/commands/init.js +113 -0
  208. package/dist/cli/commands/init.js.map +1 -0
  209. package/dist/cli/commands/init.test.d.ts +2 -0
  210. package/dist/cli/commands/init.test.d.ts.map +1 -0
  211. package/dist/cli/commands/init.test.js +117 -0
  212. package/dist/cli/commands/init.test.js.map +1 -0
  213. package/dist/cli/commands/setup-app/browser.d.ts +9 -0
  214. package/dist/cli/commands/setup-app/browser.d.ts.map +1 -0
  215. package/dist/cli/commands/setup-app/browser.js +36 -0
  216. package/dist/cli/commands/setup-app/browser.js.map +1 -0
  217. package/dist/cli/commands/setup-app/credentials.d.ts +15 -0
  218. package/dist/cli/commands/setup-app/credentials.d.ts.map +1 -0
  219. package/dist/cli/commands/setup-app/credentials.js +29 -0
  220. package/dist/cli/commands/setup-app/credentials.js.map +1 -0
  221. package/dist/cli/commands/setup-app/manifest.d.ts +24 -0
  222. package/dist/cli/commands/setup-app/manifest.d.ts.map +1 -0
  223. package/dist/cli/commands/setup-app/manifest.js +29 -0
  224. package/dist/cli/commands/setup-app/manifest.js.map +1 -0
  225. package/dist/cli/commands/setup-app/server.d.ts +28 -0
  226. package/dist/cli/commands/setup-app/server.d.ts.map +1 -0
  227. package/dist/cli/commands/setup-app/server.js +136 -0
  228. package/dist/cli/commands/setup-app/server.js.map +1 -0
  229. package/dist/cli/commands/setup-app.d.ts +11 -0
  230. package/dist/cli/commands/setup-app.d.ts.map +1 -0
  231. package/dist/cli/commands/setup-app.js +139 -0
  232. package/dist/cli/commands/setup-app.js.map +1 -0
  233. package/dist/cli/commands/sync.d.ts +9 -0
  234. package/dist/cli/commands/sync.d.ts.map +1 -0
  235. package/dist/cli/commands/sync.js +96 -0
  236. package/dist/cli/commands/sync.js.map +1 -0
  237. package/dist/cli/context.d.ts +27 -0
  238. package/dist/cli/context.d.ts.map +1 -0
  239. package/dist/cli/context.js +101 -0
  240. package/dist/cli/context.js.map +1 -0
  241. package/dist/cli/files.d.ts +22 -0
  242. package/dist/cli/files.d.ts.map +1 -0
  243. package/dist/cli/files.js +66 -0
  244. package/dist/cli/files.js.map +1 -0
  245. package/dist/cli/files.test.d.ts +2 -0
  246. package/dist/cli/files.test.d.ts.map +1 -0
  247. package/dist/cli/files.test.js +117 -0
  248. package/dist/cli/files.test.js.map +1 -0
  249. package/dist/cli/fix.d.ts +41 -0
  250. package/dist/cli/fix.d.ts.map +1 -0
  251. package/dist/cli/fix.js +320 -0
  252. package/dist/cli/fix.js.map +1 -0
  253. package/dist/cli/fix.test.d.ts +2 -0
  254. package/dist/cli/fix.test.d.ts.map +1 -0
  255. package/dist/cli/fix.test.js +251 -0
  256. package/dist/cli/fix.test.js.map +1 -0
  257. package/dist/cli/git.d.ts +73 -0
  258. package/dist/cli/git.d.ts.map +1 -0
  259. package/dist/cli/git.js +267 -0
  260. package/dist/cli/git.js.map +1 -0
  261. package/dist/cli/git.test.d.ts +2 -0
  262. package/dist/cli/git.test.d.ts.map +1 -0
  263. package/dist/cli/git.test.js +96 -0
  264. package/dist/cli/git.test.js.map +1 -0
  265. package/dist/cli/index.d.ts +3 -0
  266. package/dist/cli/index.d.ts.map +1 -0
  267. package/dist/cli/index.js +13 -0
  268. package/dist/cli/index.js.map +1 -0
  269. package/dist/cli/main.d.ts +7 -0
  270. package/dist/cli/main.d.ts.map +1 -0
  271. package/dist/cli/main.js +560 -0
  272. package/dist/cli/main.js.map +1 -0
  273. package/dist/cli/output/box.d.ts +75 -0
  274. package/dist/cli/output/box.d.ts.map +1 -0
  275. package/dist/cli/output/box.js +191 -0
  276. package/dist/cli/output/box.js.map +1 -0
  277. package/dist/cli/output/formatters.d.ts +90 -0
  278. package/dist/cli/output/formatters.d.ts.map +1 -0
  279. package/dist/cli/output/formatters.js +248 -0
  280. package/dist/cli/output/formatters.js.map +1 -0
  281. package/dist/cli/output/formatters.test.d.ts +2 -0
  282. package/dist/cli/output/formatters.test.d.ts.map +1 -0
  283. package/dist/cli/output/formatters.test.js +152 -0
  284. package/dist/cli/output/formatters.test.js.map +1 -0
  285. package/dist/cli/output/icons.d.ts +15 -0
  286. package/dist/cli/output/icons.d.ts.map +1 -0
  287. package/dist/cli/output/icons.js +15 -0
  288. package/dist/cli/output/icons.js.map +1 -0
  289. package/dist/cli/output/index.d.ts +10 -0
  290. package/dist/cli/output/index.d.ts.map +1 -0
  291. package/dist/cli/output/index.js +10 -0
  292. package/dist/cli/output/index.js.map +1 -0
  293. package/dist/cli/output/ink-runner.d.ts +29 -0
  294. package/dist/cli/output/ink-runner.d.ts.map +1 -0
  295. package/dist/cli/output/ink-runner.js +241 -0
  296. package/dist/cli/output/ink-runner.js.map +1 -0
  297. package/dist/cli/output/jsonl.d.ts +43 -0
  298. package/dist/cli/output/jsonl.d.ts.map +1 -0
  299. package/dist/cli/output/jsonl.js +89 -0
  300. package/dist/cli/output/jsonl.js.map +1 -0
  301. package/dist/cli/output/jsonl.test.d.ts +2 -0
  302. package/dist/cli/output/jsonl.test.d.ts.map +1 -0
  303. package/dist/cli/output/jsonl.test.js +284 -0
  304. package/dist/cli/output/jsonl.test.js.map +1 -0
  305. package/dist/cli/output/reporter.d.ts +108 -0
  306. package/dist/cli/output/reporter.d.ts.map +1 -0
  307. package/dist/cli/output/reporter.js +378 -0
  308. package/dist/cli/output/reporter.js.map +1 -0
  309. package/dist/cli/output/tasks.d.ts +89 -0
  310. package/dist/cli/output/tasks.d.ts.map +1 -0
  311. package/dist/cli/output/tasks.js +251 -0
  312. package/dist/cli/output/tasks.js.map +1 -0
  313. package/dist/cli/output/tty.d.ts +21 -0
  314. package/dist/cli/output/tty.d.ts.map +1 -0
  315. package/dist/cli/output/tty.js +44 -0
  316. package/dist/cli/output/tty.js.map +1 -0
  317. package/dist/cli/output/tty.test.d.ts +2 -0
  318. package/dist/cli/output/tty.test.d.ts.map +1 -0
  319. package/dist/cli/output/tty.test.js +105 -0
  320. package/dist/cli/output/tty.test.js.map +1 -0
  321. package/dist/cli/output/verbosity.d.ts +20 -0
  322. package/dist/cli/output/verbosity.d.ts.map +1 -0
  323. package/dist/cli/output/verbosity.js +32 -0
  324. package/dist/cli/output/verbosity.js.map +1 -0
  325. package/dist/cli/output/verbosity.test.d.ts +2 -0
  326. package/dist/cli/output/verbosity.test.d.ts.map +1 -0
  327. package/dist/cli/output/verbosity.test.js +35 -0
  328. package/dist/cli/output/verbosity.test.js.map +1 -0
  329. package/dist/cli/terminal.d.ts +19 -0
  330. package/dist/cli/terminal.d.ts.map +1 -0
  331. package/dist/cli/terminal.js +247 -0
  332. package/dist/cli/terminal.js.map +1 -0
  333. package/dist/cli/terminal.test.d.ts +2 -0
  334. package/dist/cli/terminal.test.d.ts.map +1 -0
  335. package/dist/cli/terminal.test.js +123 -0
  336. package/dist/cli/terminal.test.js.map +1 -0
  337. package/dist/config/index.d.ts +4 -0
  338. package/dist/config/index.d.ts.map +1 -0
  339. package/dist/config/index.js +4 -0
  340. package/dist/config/index.js.map +1 -0
  341. package/dist/config/loader.d.ts +27 -0
  342. package/dist/config/loader.d.ts.map +1 -0
  343. package/dist/config/loader.js +77 -0
  344. package/dist/config/loader.js.map +1 -0
  345. package/dist/config/loader.test.d.ts +2 -0
  346. package/dist/config/loader.test.d.ts.map +1 -0
  347. package/dist/config/loader.test.js +263 -0
  348. package/dist/config/loader.test.js.map +1 -0
  349. package/dist/config/schema.d.ts +318 -0
  350. package/dist/config/schema.d.ts.map +1 -0
  351. package/dist/config/schema.js +137 -0
  352. package/dist/config/schema.js.map +1 -0
  353. package/dist/config/writer.d.ts +11 -0
  354. package/dist/config/writer.d.ts.map +1 -0
  355. package/dist/config/writer.js +74 -0
  356. package/dist/config/writer.js.map +1 -0
  357. package/dist/config/writer.test.d.ts +2 -0
  358. package/dist/config/writer.test.d.ts.map +1 -0
  359. package/dist/config/writer.test.js +98 -0
  360. package/dist/config/writer.test.js.map +1 -0
  361. package/dist/diff/classify.d.ts +29 -0
  362. package/dist/diff/classify.d.ts.map +1 -0
  363. package/dist/diff/classify.js +74 -0
  364. package/dist/diff/classify.js.map +1 -0
  365. package/dist/diff/classify.test.d.ts +2 -0
  366. package/dist/diff/classify.test.d.ts.map +1 -0
  367. package/dist/diff/classify.test.js +140 -0
  368. package/dist/diff/classify.test.js.map +1 -0
  369. package/dist/diff/coalesce.d.ts +42 -0
  370. package/dist/diff/coalesce.d.ts.map +1 -0
  371. package/dist/diff/coalesce.js +104 -0
  372. package/dist/diff/coalesce.js.map +1 -0
  373. package/dist/diff/coalesce.test.d.ts +2 -0
  374. package/dist/diff/coalesce.test.d.ts.map +1 -0
  375. package/dist/diff/coalesce.test.js +159 -0
  376. package/dist/diff/coalesce.test.js.map +1 -0
  377. package/dist/diff/context.d.ts +30 -0
  378. package/dist/diff/context.d.ts.map +1 -0
  379. package/dist/diff/context.js +144 -0
  380. package/dist/diff/context.js.map +1 -0
  381. package/dist/diff/context.test.d.ts +2 -0
  382. package/dist/diff/context.test.d.ts.map +1 -0
  383. package/dist/diff/context.test.js +190 -0
  384. package/dist/diff/context.test.js.map +1 -0
  385. package/dist/diff/index.d.ts +5 -0
  386. package/dist/diff/index.d.ts.map +1 -0
  387. package/dist/diff/index.js +5 -0
  388. package/dist/diff/index.js.map +1 -0
  389. package/dist/diff/parser.d.ts +52 -0
  390. package/dist/diff/parser.d.ts.map +1 -0
  391. package/dist/diff/parser.js +95 -0
  392. package/dist/diff/parser.js.map +1 -0
  393. package/dist/diff/parser.test.d.ts +2 -0
  394. package/dist/diff/parser.test.d.ts.map +1 -0
  395. package/dist/diff/parser.test.js +178 -0
  396. package/dist/diff/parser.test.js.map +1 -0
  397. package/dist/event/context.d.ts +9 -0
  398. package/dist/event/context.d.ts.map +1 -0
  399. package/dist/event/context.js +94 -0
  400. package/dist/event/context.js.map +1 -0
  401. package/dist/event/index.d.ts +3 -0
  402. package/dist/event/index.d.ts.map +1 -0
  403. package/dist/event/index.js +3 -0
  404. package/dist/event/index.js.map +1 -0
  405. package/dist/event/schedule-context.d.ts +30 -0
  406. package/dist/event/schedule-context.d.ts.map +1 -0
  407. package/dist/event/schedule-context.js +57 -0
  408. package/dist/event/schedule-context.js.map +1 -0
  409. package/dist/examples/examples.integration.test.d.ts +2 -0
  410. package/dist/examples/examples.integration.test.d.ts.map +1 -0
  411. package/dist/examples/examples.integration.test.js +55 -0
  412. package/dist/examples/examples.integration.test.js.map +1 -0
  413. package/dist/examples/index.d.ts +50 -0
  414. package/dist/examples/index.d.ts.map +1 -0
  415. package/dist/examples/index.js +104 -0
  416. package/dist/examples/index.js.map +1 -0
  417. package/dist/examples/index.test.d.ts +2 -0
  418. package/dist/examples/index.test.d.ts.map +1 -0
  419. package/dist/examples/index.test.js +88 -0
  420. package/dist/examples/index.test.js.map +1 -0
  421. package/dist/examples/setup.d.ts +2 -0
  422. package/dist/examples/setup.d.ts.map +1 -0
  423. package/dist/examples/setup.js +22 -0
  424. package/dist/examples/setup.js.map +1 -0
  425. package/dist/index.d.ts +12 -0
  426. package/dist/index.d.ts.map +1 -0
  427. package/dist/index.js +57 -0
  428. package/dist/index.js.map +1 -0
  429. package/dist/output/dedup.d.ts +153 -0
  430. package/dist/output/dedup.d.ts.map +1 -0
  431. package/dist/output/dedup.js +416 -0
  432. package/dist/output/dedup.js.map +1 -0
  433. package/dist/output/dedup.test.d.ts +2 -0
  434. package/dist/output/dedup.test.d.ts.map +1 -0
  435. package/dist/output/dedup.test.js +357 -0
  436. package/dist/output/dedup.test.js.map +1 -0
  437. package/dist/output/github-checks.d.ts +106 -0
  438. package/dist/output/github-checks.d.ts.map +1 -0
  439. package/dist/output/github-checks.js +321 -0
  440. package/dist/output/github-checks.js.map +1 -0
  441. package/dist/output/github-checks.test.d.ts +2 -0
  442. package/dist/output/github-checks.test.d.ts.map +1 -0
  443. package/dist/output/github-checks.test.js +255 -0
  444. package/dist/output/github-checks.test.js.map +1 -0
  445. package/dist/output/github-issues.d.ts +35 -0
  446. package/dist/output/github-issues.d.ts.map +1 -0
  447. package/dist/output/github-issues.js +246 -0
  448. package/dist/output/github-issues.js.map +1 -0
  449. package/dist/output/index.d.ts +6 -0
  450. package/dist/output/index.d.ts.map +1 -0
  451. package/dist/output/index.js +6 -0
  452. package/dist/output/index.js.map +1 -0
  453. package/dist/output/issue-renderer.d.ts +20 -0
  454. package/dist/output/issue-renderer.d.ts.map +1 -0
  455. package/dist/output/issue-renderer.js +154 -0
  456. package/dist/output/issue-renderer.js.map +1 -0
  457. package/dist/output/renderer.d.ts +4 -0
  458. package/dist/output/renderer.d.ts.map +1 -0
  459. package/dist/output/renderer.js +168 -0
  460. package/dist/output/renderer.js.map +1 -0
  461. package/dist/output/renderer.test.d.ts +2 -0
  462. package/dist/output/renderer.test.d.ts.map +1 -0
  463. package/dist/output/renderer.test.js +645 -0
  464. package/dist/output/renderer.test.js.map +1 -0
  465. package/dist/output/stale.d.ts +31 -0
  466. package/dist/output/stale.d.ts.map +1 -0
  467. package/dist/output/stale.js +114 -0
  468. package/dist/output/stale.js.map +1 -0
  469. package/dist/output/stale.test.d.ts +2 -0
  470. package/dist/output/stale.test.d.ts.map +1 -0
  471. package/dist/output/stale.test.js +330 -0
  472. package/dist/output/stale.test.js.map +1 -0
  473. package/dist/output/types.d.ts +31 -0
  474. package/dist/output/types.d.ts.map +1 -0
  475. package/dist/output/types.js +2 -0
  476. package/dist/output/types.js.map +1 -0
  477. package/dist/sdk/index.d.ts +2 -0
  478. package/dist/sdk/index.d.ts.map +1 -0
  479. package/dist/sdk/index.js +2 -0
  480. package/dist/sdk/index.js.map +1 -0
  481. package/dist/sdk/runner.d.ts +202 -0
  482. package/dist/sdk/runner.d.ts.map +1 -0
  483. package/dist/sdk/runner.js +888 -0
  484. package/dist/sdk/runner.js.map +1 -0
  485. package/dist/sdk/runner.test.d.ts +2 -0
  486. package/dist/sdk/runner.test.d.ts.map +1 -0
  487. package/dist/sdk/runner.test.js +677 -0
  488. package/dist/sdk/runner.test.js.map +1 -0
  489. package/dist/skills/index.d.ts +5 -0
  490. package/dist/skills/index.d.ts.map +1 -0
  491. package/dist/skills/index.js +3 -0
  492. package/dist/skills/index.js.map +1 -0
  493. package/dist/skills/loader.d.ts +111 -0
  494. package/dist/skills/loader.d.ts.map +1 -0
  495. package/dist/skills/loader.js +319 -0
  496. package/dist/skills/loader.js.map +1 -0
  497. package/dist/skills/loader.test.d.ts +2 -0
  498. package/dist/skills/loader.test.d.ts.map +1 -0
  499. package/dist/skills/loader.test.js +241 -0
  500. package/dist/skills/loader.test.js.map +1 -0
  501. package/dist/skills/remote.d.ts +117 -0
  502. package/dist/skills/remote.d.ts.map +1 -0
  503. package/dist/skills/remote.js +496 -0
  504. package/dist/skills/remote.js.map +1 -0
  505. package/dist/skills/remote.test.d.ts +2 -0
  506. package/dist/skills/remote.test.d.ts.map +1 -0
  507. package/dist/skills/remote.test.js +582 -0
  508. package/dist/skills/remote.test.js.map +1 -0
  509. package/dist/triggers/matcher.d.ts +30 -0
  510. package/dist/triggers/matcher.d.ts.map +1 -0
  511. package/dist/triggers/matcher.js +122 -0
  512. package/dist/triggers/matcher.js.map +1 -0
  513. package/dist/triggers/matcher.test.d.ts +2 -0
  514. package/dist/triggers/matcher.test.d.ts.map +1 -0
  515. package/dist/triggers/matcher.test.js +234 -0
  516. package/dist/triggers/matcher.test.js.map +1 -0
  517. package/dist/types/index.d.ts +269 -0
  518. package/dist/types/index.d.ts.map +1 -0
  519. package/dist/types/index.js +162 -0
  520. package/dist/types/index.js.map +1 -0
  521. package/dist/utils/async.d.ts +5 -0
  522. package/dist/utils/async.d.ts.map +1 -0
  523. package/dist/utils/async.js +13 -0
  524. package/dist/utils/async.js.map +1 -0
  525. package/dist/utils/index.d.ts +16 -0
  526. package/dist/utils/index.d.ts.map +1 -0
  527. package/dist/utils/index.js +44 -0
  528. package/dist/utils/index.js.map +1 -0
  529. package/dist/utils/index.test.d.ts +2 -0
  530. package/dist/utils/index.test.d.ts.map +1 -0
  531. package/dist/utils/index.test.js +68 -0
  532. package/dist/utils/index.test.js.map +1 -0
  533. package/dist/utils/version.d.ts +3 -0
  534. package/dist/utils/version.d.ts.map +1 -0
  535. package/dist/utils/version.js +16 -0
  536. package/dist/utils/version.js.map +1 -0
  537. package/docs/src/pages/config.astro +2 -1
  538. package/docs/src/pages/guide.astro +2 -1
  539. package/docs/src/utils/version.ts +6 -0
  540. package/package.json +12 -2
  541. package/src/cli/args.ts +2 -3
  542. package/src/cli/commands/init.test.ts +2 -1
  543. package/src/cli/commands/init.ts +3 -1
  544. package/src/cli/output/icons.ts +6 -0
  545. package/src/cli/output/ink-runner.tsx +69 -40
  546. package/src/cli/output/reporter.ts +3 -4
  547. package/src/utils/index.ts +1 -0
  548. package/src/utils/version.ts +17 -0
  549. package/.claude/settings.local.json +0 -88
  550. package/docs/.claude/settings.local.json +0 -11
@@ -0,0 +1,152 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { formatDuration, formatLocation, formatFindingCountsPlain, formatProgress, truncate, padRight, formatStatsCompact, formatSeverityBadge, } from './formatters.js';
3
+ describe('formatDuration', () => {
4
+ it('formats milliseconds under 1s', () => {
5
+ expect(formatDuration(50)).toBe('50ms');
6
+ expect(formatDuration(999)).toBe('999ms');
7
+ });
8
+ it('formats seconds', () => {
9
+ expect(formatDuration(1000)).toBe('1.0s');
10
+ expect(formatDuration(1500)).toBe('1.5s');
11
+ expect(formatDuration(12345)).toBe('12.3s');
12
+ });
13
+ it('rounds milliseconds', () => {
14
+ expect(formatDuration(50.6)).toBe('51ms');
15
+ });
16
+ });
17
+ describe('formatLocation', () => {
18
+ it('formats path only', () => {
19
+ expect(formatLocation('src/file.ts')).toBe('src/file.ts');
20
+ });
21
+ it('formats path with single line', () => {
22
+ expect(formatLocation('src/file.ts', 10)).toBe('src/file.ts:10');
23
+ });
24
+ it('formats path with line range', () => {
25
+ expect(formatLocation('src/file.ts', 10, 20)).toBe('src/file.ts:10-20');
26
+ });
27
+ it('formats path with same start and end line as single line', () => {
28
+ expect(formatLocation('src/file.ts', 10, 10)).toBe('src/file.ts:10');
29
+ });
30
+ });
31
+ describe('formatFindingCountsPlain', () => {
32
+ it('formats zero findings', () => {
33
+ const counts = {
34
+ critical: 0,
35
+ high: 0,
36
+ medium: 0,
37
+ low: 0,
38
+ info: 0,
39
+ };
40
+ expect(formatFindingCountsPlain(counts)).toBe('No findings');
41
+ });
42
+ it('formats single finding', () => {
43
+ const counts = {
44
+ critical: 0,
45
+ high: 1,
46
+ medium: 0,
47
+ low: 0,
48
+ info: 0,
49
+ };
50
+ expect(formatFindingCountsPlain(counts)).toBe('1 finding (1 high)');
51
+ });
52
+ it('formats multiple findings', () => {
53
+ const counts = {
54
+ critical: 1,
55
+ high: 2,
56
+ medium: 3,
57
+ low: 0,
58
+ info: 1,
59
+ };
60
+ expect(formatFindingCountsPlain(counts)).toBe('7 findings (1 critical, 2 high, 3 medium, 1 info)');
61
+ });
62
+ });
63
+ describe('formatSeverityBadge', () => {
64
+ it('includes severity text for each level', () => {
65
+ expect(formatSeverityBadge('critical')).toContain('critical');
66
+ expect(formatSeverityBadge('high')).toContain('high');
67
+ expect(formatSeverityBadge('medium')).toContain('medium');
68
+ expect(formatSeverityBadge('low')).toContain('low');
69
+ expect(formatSeverityBadge('info')).toContain('info');
70
+ });
71
+ });
72
+ describe('formatProgress', () => {
73
+ it('formats progress indicator', () => {
74
+ // Note: formatProgress uses chalk.dim, so we just check it contains the numbers
75
+ const result = formatProgress(1, 5);
76
+ expect(result).toContain('1');
77
+ expect(result).toContain('5');
78
+ });
79
+ });
80
+ describe('truncate', () => {
81
+ it('returns string unchanged if shorter than max width', () => {
82
+ expect(truncate('hello', 10)).toBe('hello');
83
+ });
84
+ it('returns string unchanged if equal to max width', () => {
85
+ expect(truncate('hello', 5)).toBe('hello');
86
+ });
87
+ it('truncates and adds ellipsis if longer than max width', () => {
88
+ const result = truncate('hello world', 8);
89
+ expect(result.length).toBe(8);
90
+ expect(result.endsWith('…') || result.endsWith('...')).toBe(true);
91
+ });
92
+ it('handles very short max width', () => {
93
+ expect(truncate('hello', 3).length).toBe(3);
94
+ expect(truncate('hello', 2).length).toBe(2);
95
+ });
96
+ });
97
+ describe('padRight', () => {
98
+ it('pads string to reach width', () => {
99
+ expect(padRight('hi', 5)).toBe('hi ');
100
+ });
101
+ it('returns string unchanged if already at width', () => {
102
+ expect(padRight('hello', 5)).toBe('hello');
103
+ });
104
+ it('returns string unchanged if longer than width', () => {
105
+ expect(padRight('hello', 3)).toBe('hello');
106
+ });
107
+ });
108
+ describe('formatStatsCompact', () => {
109
+ it('formats duration only', () => {
110
+ expect(formatStatsCompact(15800)).toBe('⏱ 15.8s');
111
+ });
112
+ it('formats usage only', () => {
113
+ const usage = {
114
+ inputTokens: 3000,
115
+ outputTokens: 680,
116
+ costUSD: 0.0048,
117
+ };
118
+ expect(formatStatsCompact(undefined, usage)).toBe('3.0k in / 680 out · $0.0048');
119
+ });
120
+ it('formats both duration and usage', () => {
121
+ const usage = {
122
+ inputTokens: 3000,
123
+ outputTokens: 680,
124
+ costUSD: 0.0048,
125
+ };
126
+ expect(formatStatsCompact(15800, usage)).toBe('⏱ 15.8s · 3.0k in / 680 out · $0.0048');
127
+ });
128
+ it('includes cache read tokens in input total', () => {
129
+ const usage = {
130
+ inputTokens: 1000,
131
+ cacheReadInputTokens: 2000,
132
+ outputTokens: 500,
133
+ costUSD: 0.003,
134
+ };
135
+ expect(formatStatsCompact(undefined, usage)).toBe('3.0k in / 500 out · $0.0030');
136
+ });
137
+ it('returns empty string when no stats provided', () => {
138
+ expect(formatStatsCompact()).toBe('');
139
+ });
140
+ it('formats milliseconds for short durations', () => {
141
+ expect(formatStatsCompact(500)).toBe('⏱ 500ms');
142
+ });
143
+ it('formats large token counts', () => {
144
+ const usage = {
145
+ inputTokens: 120000,
146
+ outputTokens: 3800,
147
+ costUSD: 0.0892,
148
+ };
149
+ expect(formatStatsCompact(45600, usage)).toBe('⏱ 45.6s · 120.0k in / 3.8k out · $0.09');
150
+ });
151
+ });
152
+ //# sourceMappingURL=formatters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.test.js","sourceRoot":"","sources":["../../../src/cli/output/formatters.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Unicode icons for CLI output.
3
+ * Uses CHECK MARK (U+2713) instead of HEAVY CHECK MARK (U+2714) to avoid emoji rendering.
4
+ */
5
+ /** Check mark for completed/success states */
6
+ export declare const ICON_CHECK = "\u2713";
7
+ /** Down arrow for skipped states */
8
+ export declare const ICON_SKIPPED = "\u2193";
9
+ /** Braille spinner frames for loading animation */
10
+ export declare const SPINNER_FRAMES: string[];
11
+ /** Circle for pending states */
12
+ export declare const ICON_PENDING = "\u25CB";
13
+ /** X mark for error states */
14
+ export declare const ICON_ERROR = "\u2717";
15
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/cli/output/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,UAAU,WAAM,CAAC;AAE9B,oCAAoC;AACpC,eAAO,MAAM,YAAY,WAAM,CAAC;AAEhC,mDAAmD;AACnD,eAAO,MAAM,cAAc,UAAuG,CAAC;AAEnI,gCAAgC;AAChC,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,8BAA8B;AAC9B,eAAO,MAAM,UAAU,WAAW,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Unicode icons for CLI output.
3
+ * Uses CHECK MARK (U+2713) instead of HEAVY CHECK MARK (U+2714) to avoid emoji rendering.
4
+ */
5
+ /** Check mark for completed/success states */
6
+ export const ICON_CHECK = '✓'; // U+2713 CHECK MARK
7
+ /** Down arrow for skipped states */
8
+ export const ICON_SKIPPED = '↓'; // U+2193 DOWNWARDS ARROW
9
+ /** Braille spinner frames for loading animation */
10
+ export const SPINNER_FRAMES = ['\u280B', '\u2819', '\u2839', '\u2838', '\u283C', '\u2834', '\u2826', '\u2827', '\u2807', '\u280F'];
11
+ /** Circle for pending states */
12
+ export const ICON_PENDING = '\u25CB'; // ○ WHITE CIRCLE
13
+ /** X mark for error states */
14
+ export const ICON_ERROR = '\u2717'; // ✗ BALLOT X
15
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/cli/output/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,oBAAoB;AAEnD,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,yBAAyB;AAE1D,mDAAmD;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAEnI,gCAAgC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,iBAAiB;AAEvD,8BAA8B;AAC9B,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,aAAa"}
@@ -0,0 +1,10 @@
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 { pluralize, formatDuration, formatElapsed, formatSeverityBadge, formatSeverityDot, formatSeverityPlain, formatFindingCounts, formatFindingCountsPlain, formatProgress, formatLocation, formatFileStats, formatFindingCompact, truncate, padRight, countBySeverity, formatCost, formatTokens, formatUsage, formatUsagePlain, } from './formatters.js';
5
+ export { runSkillTask, runSkillTasks, type SkillTaskResult, type SkillTaskOptions, type RunTasksOptions, type SkillProgressCallbacks, type SkillState, type FileState, } from './tasks.js';
6
+ export { runSkillTasksWithInk } from './ink-runner.js';
7
+ export { BoxRenderer, type BoxOptions } from './box.js';
8
+ export { writeJsonlReport, getRunLogsDir, getRunLogPath, type JsonlRecord, type JsonlRunMetadata, } from './jsonl.js';
9
+ export { ICON_CHECK, ICON_SKIPPED, SPINNER_FRAMES } from './icons.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/output/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,KAAK,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EACL,SAAS,EACT,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { Verbosity, parseVerbosity } from './verbosity.js';
2
+ export { detectOutputMode, timestamp } from './tty.js';
3
+ export { Reporter } from './reporter.js';
4
+ export { pluralize, formatDuration, formatElapsed, formatSeverityBadge, formatSeverityDot, formatSeverityPlain, formatFindingCounts, formatFindingCountsPlain, formatProgress, formatLocation, formatFileStats, formatFindingCompact, truncate, padRight, countBySeverity, formatCost, formatTokens, formatUsage, formatUsagePlain, } from './formatters.js';
5
+ export { runSkillTask, runSkillTasks, } from './tasks.js';
6
+ export { runSkillTasksWithInk } from './ink-runner.js';
7
+ export { BoxRenderer } from './box.js';
8
+ export { writeJsonlReport, getRunLogsDir, getRunLogPath, } from './jsonl.js';
9
+ export { ICON_CHECK, ICON_SKIPPED, SPINNER_FRAMES } from './icons.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/output/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAmB,gBAAgB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,QAAQ,EAA6B,MAAM,eAAe,CAAC;AACpE,OAAO,EACL,SAAS,EACT,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,EACZ,aAAa,GAOd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAmB,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,GAGd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,29 @@
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
+ import { type SkillTaskOptions, type SkillTaskResult, type RunTasksOptions } from './tasks.js';
25
+ /**
26
+ * Run skill tasks with Ink-based real-time progress display.
27
+ */
28
+ export declare function runSkillTasksWithInk(tasks: SkillTaskOptions[], options: RunTasksOptions): Promise<SkillTaskResult[]>;
29
+ //# sourceMappingURL=ink-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/output/ink-runner.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAoKpB;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,gBAAgB,EAAE,EACzB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,eAAe,EAAE,CAAC,CAiK5B"}
@@ -0,0 +1,241 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Ink-based skill runner with real-time progress display.
4
+ *
5
+ * ## Ink Rendering Constraints
6
+ *
7
+ * This file uses Ink (React for CLIs) which has specific constraints that,
8
+ * if violated, cause duplicate output lines or corrupted display:
9
+ *
10
+ * 1. **Single Static component**: Ink's Static uses `position: 'absolute'`.
11
+ * Multiple Static components cause layout conflicts. We print the header
12
+ * before Ink starts to avoid needing a second Static.
13
+ *
14
+ * 2. **Stable item references**: Static tracks items by reference equality.
15
+ * Never wrap items in new objects (e.g., `{ type: 'skill', skill }`) on
16
+ * each render. Pass the original objects directly.
17
+ *
18
+ * 3. **Batched updates**: Rapid consecutive rerender() calls cause duplicate
19
+ * output. The updateUI() function batches updates using setImmediate().
20
+ *
21
+ * 4. **No direct writes to stderr**: Writing to process.stderr while Ink is
22
+ * running corrupts cursor tracking. The onLargePrompt/onPromptSize callbacks
23
+ * are exceptions that may cause minor display glitches in edge cases.
24
+ */
25
+ import { useState, useEffect } from 'react';
26
+ import { render, Box, Text, Static } from 'ink';
27
+ import { runSkillTask, } from './tasks.js';
28
+ import { formatDuration, truncate, countBySeverity, formatSeverityDot } from './formatters.js';
29
+ import { Verbosity } from './verbosity.js';
30
+ import { ICON_CHECK, ICON_SKIPPED, ICON_PENDING, ICON_ERROR, SPINNER_FRAMES } from './icons.js';
31
+ import figures from 'figures';
32
+ function Spinner() {
33
+ const [frame, setFrame] = useState(0);
34
+ useEffect(() => {
35
+ const timer = setInterval(() => {
36
+ setFrame((f) => (f + 1) % SPINNER_FRAMES.length);
37
+ }, 80);
38
+ return () => clearInterval(timer);
39
+ }, []);
40
+ return _jsx(Text, { color: "yellow", children: SPINNER_FRAMES[frame] });
41
+ }
42
+ function FileProgress({ file }) {
43
+ if (file.status === 'pending')
44
+ return null;
45
+ const filename = truncate(file.filename, 50);
46
+ if (file.status === 'done') {
47
+ const counts = countBySeverity(file.findings);
48
+ const hasFindings = file.findings.length > 0;
49
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: ICON_CHECK }), _jsxs(Text, { children: [" ", filename] }), hasFindings && (_jsxs(Text, { children: [' ', counts.critical > 0 && _jsxs(Text, { children: [formatSeverityDot('critical'), " ", counts.critical, " "] }), counts.high > 0 && _jsxs(Text, { children: [formatSeverityDot('high'), " ", counts.high, " "] }), counts.medium > 0 && _jsxs(Text, { children: [formatSeverityDot('medium'), " ", counts.medium, " "] }), counts.low > 0 && _jsxs(Text, { children: [formatSeverityDot('low'), " ", counts.low, " "] }), counts.info > 0 && _jsxs(Text, { children: [formatSeverityDot('info'), " ", counts.info] })] }))] }));
50
+ }
51
+ // Running
52
+ return (_jsxs(Box, { children: [_jsx(Spinner, {}), _jsxs(Text, { children: [" ", filename, " [", file.currentHunk, "/", file.totalHunks, "]"] })] }));
53
+ }
54
+ function CompletedSkill({ skill }) {
55
+ const duration = skill.durationMs ? formatDuration(skill.durationMs) : '';
56
+ if (skill.status === 'skipped') {
57
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: ICON_SKIPPED }), _jsxs(Text, { children: [" ", skill.displayName] }), _jsx(Text, { dimColor: true, children: " [skipped]" })] }));
58
+ }
59
+ if (skill.status === 'error') {
60
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "red", children: ICON_ERROR }), _jsxs(Text, { children: [" ", skill.displayName] }), duration && _jsxs(Text, { dimColor: true, children: [" [", duration, "]"] })] }), skill.error && _jsxs(Text, { color: "red", children: [" Error: ", skill.error] })] }));
61
+ }
62
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: ICON_CHECK }), _jsxs(Text, { children: [" ", skill.displayName] }), duration && _jsxs(Text, { dimColor: true, children: [" [", duration, "]"] })] }));
63
+ }
64
+ function RunningSkill({ skill }) {
65
+ const visibleFiles = skill.files.filter((f) => f.status !== 'pending');
66
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Spinner, {}), _jsxs(Text, { children: [" ", skill.displayName] })] }), visibleFiles.map((file) => (_jsx(Box, { marginLeft: 2, children: _jsx(FileProgress, { file: file }) }, file.filename)))] }));
67
+ }
68
+ /**
69
+ * Renders the skill execution UI.
70
+ *
71
+ * IMPORTANT: Ink's Static component tracks items by reference equality.
72
+ * Items passed to Static must have stable references across renders.
73
+ * Creating new wrapper objects causes Static to mishandle its internal
74
+ * state, resulting in duplicate output lines.
75
+ *
76
+ * We use a SINGLE Static component to avoid layout conflicts from multiple
77
+ * absolutely-positioned Static containers.
78
+ */
79
+ function SkillRunner({ skills, completedItems }) {
80
+ const running = skills.filter((s) => s.status === 'running');
81
+ const pending = skills.filter((s) => s.status === 'pending');
82
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: completedItems, children: (skill) => _jsx(CompletedSkill, { skill: skill }, skill.name) }), running.map((skill) => (_jsx(RunningSkill, { skill: skill }, skill.name))), pending.map((skill) => (_jsxs(Text, { dimColor: true, children: [ICON_PENDING, " ", skill.displayName] }, skill.name)))] }));
83
+ }
84
+ /** No-op callbacks for quiet mode. */
85
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
86
+ const noop = () => { };
87
+ const noopCallbacks = {
88
+ onSkillStart: noop,
89
+ onSkillUpdate: noop,
90
+ onFileUpdate: noop,
91
+ onSkillComplete: noop,
92
+ onSkillSkipped: noop,
93
+ onSkillError: noop,
94
+ };
95
+ /**
96
+ * Run skill tasks with Ink-based real-time progress display.
97
+ */
98
+ export async function runSkillTasksWithInk(tasks, options) {
99
+ const { verbosity, concurrency } = options;
100
+ if (tasks.length === 0 || verbosity === Verbosity.Quiet) {
101
+ // No tasks or quiet mode - run without UI
102
+ const results = [];
103
+ for (const task of tasks) {
104
+ const result = await runSkillTask(task, 5, noopCallbacks);
105
+ results.push(result);
106
+ }
107
+ return results;
108
+ }
109
+ // Track skill states
110
+ const skillStates = [];
111
+ const completedItems = [];
112
+ const completedNames = new Set();
113
+ // Print header before Ink starts - this avoids multiple Static components
114
+ // which can cause layout conflicts due to absolute positioning
115
+ process.stderr.write('\x1b[1mSKILLS\x1b[0m\n');
116
+ // Create Ink instance
117
+ const { rerender, unmount } = render(_jsx(SkillRunner, { skills: skillStates, completedItems: completedItems }), { stdout: process.stderr });
118
+ // Batch UI updates to prevent rapid consecutive rerenders that cause duplicate lines.
119
+ // Without batching, multiple callbacks firing in quick succession (e.g., 5 files
120
+ // starting simultaneously) trigger 5 immediate rerenders, which Ink cannot
121
+ // process correctly, resulting in the same line appearing multiple times.
122
+ let updatePending = false;
123
+ const updateUI = () => {
124
+ if (updatePending)
125
+ return;
126
+ updatePending = true;
127
+ setImmediate(() => {
128
+ updatePending = false;
129
+ rerender(_jsx(SkillRunner, { skills: [...skillStates], completedItems: [...completedItems] }));
130
+ });
131
+ };
132
+ // Callbacks to update state
133
+ const callbacks = {
134
+ onSkillStart: (skill) => {
135
+ skillStates.push(skill);
136
+ updateUI();
137
+ },
138
+ onSkillUpdate: (name, updates) => {
139
+ const idx = skillStates.findIndex((s) => s.name === name);
140
+ const existing = skillStates[idx];
141
+ if (idx >= 0 && existing) {
142
+ const updated = { ...existing, ...updates };
143
+ skillStates[idx] = updated;
144
+ // If skill just completed, add to completedItems (only once)
145
+ if (updates.status === 'done' && !completedNames.has(name)) {
146
+ completedNames.add(name);
147
+ completedItems.push(updated);
148
+ }
149
+ updateUI();
150
+ }
151
+ },
152
+ onFileUpdate: (skillName, filename, updates) => {
153
+ const skill = skillStates.find((s) => s.name === skillName);
154
+ if (skill) {
155
+ const file = skill.files.find((f) => f.filename === filename);
156
+ if (file) {
157
+ Object.assign(file, updates);
158
+ updateUI();
159
+ }
160
+ }
161
+ },
162
+ onSkillComplete: () => {
163
+ updateUI();
164
+ },
165
+ onSkillSkipped: (name) => {
166
+ const task = tasks.find((t) => t.name === name);
167
+ const state = {
168
+ name,
169
+ displayName: task?.displayName ?? name,
170
+ status: 'skipped',
171
+ files: [],
172
+ findings: [],
173
+ };
174
+ skillStates.push(state);
175
+ if (!completedNames.has(name)) {
176
+ completedNames.add(name);
177
+ completedItems.push(state);
178
+ }
179
+ updateUI();
180
+ },
181
+ onSkillError: (name, error) => {
182
+ const idx = skillStates.findIndex((s) => s.name === name);
183
+ const existing = skillStates[idx];
184
+ let state;
185
+ if (idx >= 0 && existing) {
186
+ state = { ...existing, status: 'error', error };
187
+ skillStates[idx] = state;
188
+ }
189
+ else {
190
+ const task = tasks.find((t) => t.name === name);
191
+ state = {
192
+ name,
193
+ displayName: task?.displayName ?? name,
194
+ status: 'error',
195
+ error,
196
+ files: [],
197
+ findings: [],
198
+ };
199
+ skillStates.push(state);
200
+ }
201
+ if (!completedNames.has(name)) {
202
+ completedNames.add(name);
203
+ completedItems.push(state);
204
+ }
205
+ updateUI();
206
+ },
207
+ // CAUTION: Direct stderr writes while Ink is running can cause display glitches.
208
+ // These callbacks are rare (large prompts, debug mode) so the tradeoff is acceptable.
209
+ // If these cause issues, consider queueing messages and printing after unmount().
210
+ onLargePrompt: (_skillName, filename, lineRange, chars, estimatedTokens) => {
211
+ const location = `${filename}:${lineRange}`;
212
+ const size = `${Math.round(chars / 1000)}k chars (~${Math.round(estimatedTokens / 1000)}k tokens)`;
213
+ process.stderr.write(`\x1b[33m${figures.warning}\x1b[0m Large prompt for ${location}: ${size}\n`);
214
+ },
215
+ onPromptSize: verbosity >= Verbosity.Debug
216
+ ? (_skillName, filename, lineRange, systemChars, userChars, totalChars, estimatedTokens) => {
217
+ const location = `${filename}:${lineRange}`;
218
+ process.stderr.write(`\x1b[2m[debug] Prompt for ${location}: system=${systemChars}, user=${userChars}, total=${totalChars} chars (~${estimatedTokens} tokens)\x1b[0m\n`);
219
+ }
220
+ : undefined,
221
+ };
222
+ const fileConcurrency = 5;
223
+ const results = [];
224
+ if (concurrency <= 1) {
225
+ for (const task of tasks) {
226
+ const result = await runSkillTask(task, fileConcurrency, callbacks);
227
+ results.push(result);
228
+ }
229
+ }
230
+ else {
231
+ for (let i = 0; i < tasks.length; i += concurrency) {
232
+ const batch = tasks.slice(i, i + concurrency);
233
+ const batchResults = await Promise.all(batch.map((task) => runSkillTask(task, fileConcurrency, callbacks)));
234
+ results.push(...batchResults);
235
+ }
236
+ }
237
+ // Cleanup
238
+ unmount();
239
+ return results;
240
+ }
241
+ //# sourceMappingURL=ink-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink-runner.js","sourceRoot":"","sources":["../../../src/cli/output/ink-runner.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { SkillReport, UsageStats } from '../../types/index.js';
2
+ /**
3
+ * Get the default run logs directory.
4
+ * Uses WARDEN_STATE_DIR env var if set, otherwise ~/.local/warden/runs
5
+ */
6
+ export declare function getRunLogsDir(): string;
7
+ /**
8
+ * Generate a run log filename from directory name and timestamp.
9
+ * Format: {dirname}_{timestamp}.jsonl
10
+ * Timestamp has colons replaced with hyphens for filesystem compatibility.
11
+ */
12
+ export declare function generateRunLogFilename(cwd: string, timestamp?: Date): string;
13
+ /**
14
+ * Get the full path for an automatic run log.
15
+ */
16
+ export declare function getRunLogPath(cwd: string, timestamp?: Date): string;
17
+ /**
18
+ * Metadata for a JSONL run record.
19
+ */
20
+ export interface JsonlRunMetadata {
21
+ timestamp: string;
22
+ durationMs: number;
23
+ cwd: string;
24
+ }
25
+ /**
26
+ * A single JSONL record representing one skill's report.
27
+ */
28
+ export interface JsonlRecord {
29
+ run: JsonlRunMetadata;
30
+ skill: string;
31
+ summary: string;
32
+ findings: SkillReport['findings'];
33
+ metadata?: Record<string, unknown>;
34
+ durationMs?: number;
35
+ usage?: UsageStats;
36
+ }
37
+ /**
38
+ * Write skill reports to a JSONL file.
39
+ * Each line contains one skill report with run metadata.
40
+ * A final summary line is appended at the end.
41
+ */
42
+ export declare function writeJsonlReport(outputPath: string, reports: SkillReport[], durationMs: number): void;
43
+ //# sourceMappingURL=jsonl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../../src/cli/output/jsonl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGpE;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,MAAM,CAIxF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,MAAM,CAE/E;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,IAAI,CA0CN"}