@coldtea/abide 0.0.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 (370) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/dist/abide-hook.d.ts +2 -0
  4. package/dist/abide-hook.d.ts.map +1 -0
  5. package/dist/abide-hook.js +23 -0
  6. package/dist/abide-hook.js.map +1 -0
  7. package/dist/bin.d.ts +3 -0
  8. package/dist/bin.d.ts.map +1 -0
  9. package/dist/bin.js +64 -0
  10. package/dist/bin.js.map +1 -0
  11. package/dist/commands/audit.d.ts +3 -0
  12. package/dist/commands/audit.d.ts.map +1 -0
  13. package/dist/commands/audit.js +79 -0
  14. package/dist/commands/audit.js.map +1 -0
  15. package/dist/commands/bench.d.ts +3 -0
  16. package/dist/commands/bench.d.ts.map +1 -0
  17. package/dist/commands/bench.js +206 -0
  18. package/dist/commands/bench.js.map +1 -0
  19. package/dist/commands/calibrate.d.ts +3 -0
  20. package/dist/commands/calibrate.d.ts.map +1 -0
  21. package/dist/commands/calibrate.js +159 -0
  22. package/dist/commands/calibrate.js.map +1 -0
  23. package/dist/commands/check.d.ts +3 -0
  24. package/dist/commands/check.d.ts.map +1 -0
  25. package/dist/commands/check.js +106 -0
  26. package/dist/commands/check.js.map +1 -0
  27. package/dist/commands/compile.d.ts +3 -0
  28. package/dist/commands/compile.d.ts.map +1 -0
  29. package/dist/commands/compile.js +116 -0
  30. package/dist/commands/compile.js.map +1 -0
  31. package/dist/commands/init.d.ts +4 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +93 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/login.d.ts +3 -0
  36. package/dist/commands/login.d.ts.map +1 -0
  37. package/dist/commands/login.js +58 -0
  38. package/dist/commands/login.js.map +1 -0
  39. package/dist/commands/replay.d.ts +4 -0
  40. package/dist/commands/replay.d.ts.map +1 -0
  41. package/dist/commands/replay.js +118 -0
  42. package/dist/commands/replay.js.map +1 -0
  43. package/dist/commands/report.d.ts +5 -0
  44. package/dist/commands/report.d.ts.map +1 -0
  45. package/dist/commands/report.js +78 -0
  46. package/dist/commands/report.js.map +1 -0
  47. package/dist/commands/rubric.d.ts +3 -0
  48. package/dist/commands/rubric.d.ts.map +1 -0
  49. package/dist/commands/rubric.js +40 -0
  50. package/dist/commands/rubric.js.map +1 -0
  51. package/dist/commands/uninstall.d.ts +2 -0
  52. package/dist/commands/uninstall.d.ts.map +1 -0
  53. package/dist/commands/uninstall.js +31 -0
  54. package/dist/commands/uninstall.js.map +1 -0
  55. package/dist/hooks/postToolUse.d.ts +3 -0
  56. package/dist/hooks/postToolUse.d.ts.map +1 -0
  57. package/dist/hooks/postToolUse.js +145 -0
  58. package/dist/hooks/postToolUse.js.map +1 -0
  59. package/dist/hooks/sessionStart.d.ts +11 -0
  60. package/dist/hooks/sessionStart.d.ts.map +1 -0
  61. package/dist/hooks/sessionStart.js +83 -0
  62. package/dist/hooks/sessionStart.js.map +1 -0
  63. package/dist/hooks/stop.d.ts +26 -0
  64. package/dist/hooks/stop.d.ts.map +1 -0
  65. package/dist/hooks/stop.js +227 -0
  66. package/dist/hooks/stop.js.map +1 -0
  67. package/dist/hooks/turnStart.d.ts +8 -0
  68. package/dist/hooks/turnStart.d.ts.map +1 -0
  69. package/dist/hooks/turnStart.js +40 -0
  70. package/dist/hooks/turnStart.js.map +1 -0
  71. package/dist/lib/applyPatch.d.ts +22 -0
  72. package/dist/lib/applyPatch.d.ts.map +1 -0
  73. package/dist/lib/applyPatch.js +63 -0
  74. package/dist/lib/applyPatch.js.map +1 -0
  75. package/dist/lib/audit.d.ts +40 -0
  76. package/dist/lib/audit.d.ts.map +1 -0
  77. package/dist/lib/audit.js +215 -0
  78. package/dist/lib/audit.js.map +1 -0
  79. package/dist/lib/band.d.ts +20 -0
  80. package/dist/lib/band.d.ts.map +1 -0
  81. package/dist/lib/band.js +40 -0
  82. package/dist/lib/band.js.map +1 -0
  83. package/dist/lib/calibration.d.ts +13 -0
  84. package/dist/lib/calibration.d.ts.map +1 -0
  85. package/dist/lib/calibration.js +25 -0
  86. package/dist/lib/calibration.js.map +1 -0
  87. package/dist/lib/checkRunner.d.ts +34 -0
  88. package/dist/lib/checkRunner.d.ts.map +1 -0
  89. package/dist/lib/checkRunner.js +76 -0
  90. package/dist/lib/checkRunner.js.map +1 -0
  91. package/dist/lib/claude.d.ts +4 -0
  92. package/dist/lib/claude.d.ts.map +1 -0
  93. package/dist/lib/claude.js +28 -0
  94. package/dist/lib/claude.js.map +1 -0
  95. package/dist/lib/compilePrompt.d.ts +22 -0
  96. package/dist/lib/compilePrompt.d.ts.map +1 -0
  97. package/dist/lib/compilePrompt.js +33 -0
  98. package/dist/lib/compilePrompt.js.map +1 -0
  99. package/dist/lib/constants.d.ts +33 -0
  100. package/dist/lib/constants.d.ts.map +1 -0
  101. package/dist/lib/constants.js +33 -0
  102. package/dist/lib/constants.js.map +1 -0
  103. package/dist/lib/coverage.d.ts +7 -0
  104. package/dist/lib/coverage.d.ts.map +1 -0
  105. package/dist/lib/coverage.js +17 -0
  106. package/dist/lib/coverage.js.map +1 -0
  107. package/dist/lib/credentials.d.ts +27 -0
  108. package/dist/lib/credentials.d.ts.map +1 -0
  109. package/dist/lib/credentials.js +89 -0
  110. package/dist/lib/credentials.js.map +1 -0
  111. package/dist/lib/diff.d.ts +30 -0
  112. package/dist/lib/diff.d.ts.map +1 -0
  113. package/dist/lib/diff.js +139 -0
  114. package/dist/lib/diff.js.map +1 -0
  115. package/dist/lib/events.d.ts +5 -0
  116. package/dist/lib/events.d.ts.map +1 -0
  117. package/dist/lib/events.js +38 -0
  118. package/dist/lib/events.js.map +1 -0
  119. package/dist/lib/git.d.ts +37 -0
  120. package/dist/lib/git.d.ts.map +1 -0
  121. package/dist/lib/git.js +163 -0
  122. package/dist/lib/git.js.map +1 -0
  123. package/dist/lib/hookRunner.d.ts +10 -0
  124. package/dist/lib/hookRunner.d.ts.map +1 -0
  125. package/dist/lib/hookRunner.js +52 -0
  126. package/dist/lib/hookRunner.js.map +1 -0
  127. package/dist/lib/hosts.d.ts +20 -0
  128. package/dist/lib/hosts.d.ts.map +1 -0
  129. package/dist/lib/hosts.js +101 -0
  130. package/dist/lib/hosts.js.map +1 -0
  131. package/dist/lib/jev.d.ts +24 -0
  132. package/dist/lib/jev.d.ts.map +1 -0
  133. package/dist/lib/jev.js +169 -0
  134. package/dist/lib/jev.js.map +1 -0
  135. package/dist/lib/lintConfig.d.ts +3 -0
  136. package/dist/lib/lintConfig.d.ts.map +1 -0
  137. package/dist/lib/lintConfig.js +55 -0
  138. package/dist/lib/lintConfig.js.map +1 -0
  139. package/dist/lib/loadRules.d.ts +12 -0
  140. package/dist/lib/loadRules.d.ts.map +1 -0
  141. package/dist/lib/loadRules.js +31 -0
  142. package/dist/lib/loadRules.js.map +1 -0
  143. package/dist/lib/opencodePlugin.d.ts +10 -0
  144. package/dist/lib/opencodePlugin.d.ts.map +1 -0
  145. package/dist/lib/opencodePlugin.js +36 -0
  146. package/dist/lib/opencodePlugin.js.map +1 -0
  147. package/dist/lib/output.d.ts +6 -0
  148. package/dist/lib/output.d.ts.map +1 -0
  149. package/dist/lib/output.js +35 -0
  150. package/dist/lib/output.js.map +1 -0
  151. package/dist/lib/packageRoot.d.ts +12 -0
  152. package/dist/lib/packageRoot.d.ts.map +1 -0
  153. package/dist/lib/packageRoot.js +50 -0
  154. package/dist/lib/packageRoot.js.map +1 -0
  155. package/dist/lib/paths.d.ts +24 -0
  156. package/dist/lib/paths.d.ts.map +1 -0
  157. package/dist/lib/paths.js +75 -0
  158. package/dist/lib/paths.js.map +1 -0
  159. package/dist/lib/reason.d.ts +11 -0
  160. package/dist/lib/reason.d.ts.map +1 -0
  161. package/dist/lib/reason.js +31 -0
  162. package/dist/lib/reason.js.map +1 -0
  163. package/dist/lib/regularFile.d.ts +26 -0
  164. package/dist/lib/regularFile.d.ts.map +1 -0
  165. package/dist/lib/regularFile.js +77 -0
  166. package/dist/lib/regularFile.js.map +1 -0
  167. package/dist/lib/replay.d.ts +74 -0
  168. package/dist/lib/replay.d.ts.map +1 -0
  169. package/dist/lib/replay.js +250 -0
  170. package/dist/lib/replay.js.map +1 -0
  171. package/dist/lib/replayCodex.d.ts +6 -0
  172. package/dist/lib/replayCodex.d.ts.map +1 -0
  173. package/dist/lib/replayCodex.js +132 -0
  174. package/dist/lib/replayCodex.js.map +1 -0
  175. package/dist/lib/replayOpencode.d.ts +15 -0
  176. package/dist/lib/replayOpencode.d.ts.map +1 -0
  177. package/dist/lib/replayOpencode.js +154 -0
  178. package/dist/lib/replayOpencode.js.map +1 -0
  179. package/dist/lib/rubricFile.d.ts +31 -0
  180. package/dist/lib/rubricFile.d.ts.map +1 -0
  181. package/dist/lib/rubricFile.js +75 -0
  182. package/dist/lib/rubricFile.js.map +1 -0
  183. package/dist/lib/scope.d.ts +4 -0
  184. package/dist/lib/scope.d.ts.map +1 -0
  185. package/dist/lib/scope.js +14 -0
  186. package/dist/lib/scope.js.map +1 -0
  187. package/dist/lib/session.d.ts +48 -0
  188. package/dist/lib/session.d.ts.map +1 -0
  189. package/dist/lib/session.js +182 -0
  190. package/dist/lib/session.js.map +1 -0
  191. package/dist/lib/settings.d.ts +26 -0
  192. package/dist/lib/settings.d.ts.map +1 -0
  193. package/dist/lib/settings.js +104 -0
  194. package/dist/lib/settings.js.map +1 -0
  195. package/dist/lib/sources.d.ts +28 -0
  196. package/dist/lib/sources.d.ts.map +1 -0
  197. package/dist/lib/sources.js +137 -0
  198. package/dist/lib/sources.js.map +1 -0
  199. package/dist/lib/stdin.d.ts +3 -0
  200. package/dist/lib/stdin.d.ts.map +1 -0
  201. package/dist/lib/stdin.js +24 -0
  202. package/dist/lib/stdin.js.map +1 -0
  203. package/dist/lib/transcript.d.ts +3 -0
  204. package/dist/lib/transcript.d.ts.map +1 -0
  205. package/dist/lib/transcript.js +57 -0
  206. package/dist/lib/transcript.js.map +1 -0
  207. package/dist/lib/ui.d.ts +8 -0
  208. package/dist/lib/ui.d.ts.map +1 -0
  209. package/dist/lib/ui.js +34 -0
  210. package/dist/lib/ui.js.map +1 -0
  211. package/dist/ui/components/Buckets.d.ts +6 -0
  212. package/dist/ui/components/Buckets.d.ts.map +1 -0
  213. package/dist/ui/components/Buckets.js +11 -0
  214. package/dist/ui/components/Buckets.js.map +1 -0
  215. package/dist/ui/components/Callout.d.ts +11 -0
  216. package/dist/ui/components/Callout.d.ts.map +1 -0
  217. package/dist/ui/components/Callout.js +10 -0
  218. package/dist/ui/components/Callout.js.map +1 -0
  219. package/dist/ui/components/Checklist.d.ts +10 -0
  220. package/dist/ui/components/Checklist.d.ts.map +1 -0
  221. package/dist/ui/components/Checklist.js +8 -0
  222. package/dist/ui/components/Checklist.js.map +1 -0
  223. package/dist/ui/components/Columns.d.ts +28 -0
  224. package/dist/ui/components/Columns.d.ts.map +1 -0
  225. package/dist/ui/components/Columns.js +20 -0
  226. package/dist/ui/components/Columns.js.map +1 -0
  227. package/dist/ui/components/Header.d.ts +9 -0
  228. package/dist/ui/components/Header.d.ts.map +1 -0
  229. package/dist/ui/components/Header.js +7 -0
  230. package/dist/ui/components/Header.js.map +1 -0
  231. package/dist/ui/components/Live.d.ts +16 -0
  232. package/dist/ui/components/Live.d.ts.map +1 -0
  233. package/dist/ui/components/Live.js +40 -0
  234. package/dist/ui/components/Live.js.map +1 -0
  235. package/dist/ui/components/RuleTable.d.ts +15 -0
  236. package/dist/ui/components/RuleTable.d.ts.map +1 -0
  237. package/dist/ui/components/RuleTable.js +81 -0
  238. package/dist/ui/components/RuleTable.js.map +1 -0
  239. package/dist/ui/components/Section.d.ts +10 -0
  240. package/dist/ui/components/Section.d.ts.map +1 -0
  241. package/dist/ui/components/Section.js +8 -0
  242. package/dist/ui/components/Section.js.map +1 -0
  243. package/dist/ui/components/Verdicts.d.ts +9 -0
  244. package/dist/ui/components/Verdicts.d.ts.map +1 -0
  245. package/dist/ui/components/Verdicts.js +12 -0
  246. package/dist/ui/components/Verdicts.js.map +1 -0
  247. package/dist/ui/render.d.ts +20 -0
  248. package/dist/ui/render.d.ts.map +1 -0
  249. package/dist/ui/render.js +32 -0
  250. package/dist/ui/render.js.map +1 -0
  251. package/dist/ui/theme.d.ts +37 -0
  252. package/dist/ui/theme.d.ts.map +1 -0
  253. package/dist/ui/theme.js +63 -0
  254. package/dist/ui/theme.js.map +1 -0
  255. package/dist/ui/views/AuditView.d.ts +18 -0
  256. package/dist/ui/views/AuditView.d.ts.map +1 -0
  257. package/dist/ui/views/AuditView.js +48 -0
  258. package/dist/ui/views/AuditView.js.map +1 -0
  259. package/dist/ui/views/BenchView.d.ts +33 -0
  260. package/dist/ui/views/BenchView.d.ts.map +1 -0
  261. package/dist/ui/views/BenchView.js +19 -0
  262. package/dist/ui/views/BenchView.js.map +1 -0
  263. package/dist/ui/views/CalibrateView.d.ts +26 -0
  264. package/dist/ui/views/CalibrateView.d.ts.map +1 -0
  265. package/dist/ui/views/CalibrateView.js +42 -0
  266. package/dist/ui/views/CalibrateView.js.map +1 -0
  267. package/dist/ui/views/CheckView.d.ts +19 -0
  268. package/dist/ui/views/CheckView.d.ts.map +1 -0
  269. package/dist/ui/views/CheckView.js +15 -0
  270. package/dist/ui/views/CheckView.js.map +1 -0
  271. package/dist/ui/views/ErrorView.d.ts +4 -0
  272. package/dist/ui/views/ErrorView.d.ts.map +1 -0
  273. package/dist/ui/views/ErrorView.js +26 -0
  274. package/dist/ui/views/ErrorView.js.map +1 -0
  275. package/dist/ui/views/HelpView.d.ts +2 -0
  276. package/dist/ui/views/HelpView.d.ts.map +1 -0
  277. package/dist/ui/views/HelpView.js +25 -0
  278. package/dist/ui/views/HelpView.js.map +1 -0
  279. package/dist/ui/views/InitView.d.ts +27 -0
  280. package/dist/ui/views/InitView.d.ts.map +1 -0
  281. package/dist/ui/views/InitView.js +24 -0
  282. package/dist/ui/views/InitView.js.map +1 -0
  283. package/dist/ui/views/ReplayView.d.ts +16 -0
  284. package/dist/ui/views/ReplayView.d.ts.map +1 -0
  285. package/dist/ui/views/ReplayView.js +44 -0
  286. package/dist/ui/views/ReplayView.js.map +1 -0
  287. package/dist/ui/views/ReportView.d.ts +14 -0
  288. package/dist/ui/views/ReportView.d.ts.map +1 -0
  289. package/dist/ui/views/ReportView.js +86 -0
  290. package/dist/ui/views/ReportView.js.map +1 -0
  291. package/dist/ui/views/RubricView.d.ts +18 -0
  292. package/dist/ui/views/RubricView.d.ts.map +1 -0
  293. package/dist/ui/views/RubricView.js +18 -0
  294. package/dist/ui/views/RubricView.js.map +1 -0
  295. package/opencode/abide.mjs +246 -0
  296. package/package.json +50 -0
  297. package/skills/abide-compile/SKILL.md +173 -0
  298. package/src/abide-hook.ts +23 -0
  299. package/src/bin.ts +64 -0
  300. package/src/commands/audit.ts +97 -0
  301. package/src/commands/bench.ts +226 -0
  302. package/src/commands/calibrate.ts +165 -0
  303. package/src/commands/check.ts +114 -0
  304. package/src/commands/compile.ts +127 -0
  305. package/src/commands/init.ts +109 -0
  306. package/src/commands/login.ts +61 -0
  307. package/src/commands/replay.ts +148 -0
  308. package/src/commands/report.ts +83 -0
  309. package/src/commands/rubric.ts +45 -0
  310. package/src/commands/uninstall.ts +33 -0
  311. package/src/hooks/postToolUse.ts +171 -0
  312. package/src/hooks/sessionStart.ts +100 -0
  313. package/src/hooks/stop.ts +275 -0
  314. package/src/hooks/turnStart.ts +36 -0
  315. package/src/lib/applyPatch.ts +75 -0
  316. package/src/lib/audit.ts +265 -0
  317. package/src/lib/band.ts +49 -0
  318. package/src/lib/calibration.ts +35 -0
  319. package/src/lib/checkRunner.ts +124 -0
  320. package/src/lib/claude.ts +35 -0
  321. package/src/lib/compilePrompt.ts +67 -0
  322. package/src/lib/constants.ts +39 -0
  323. package/src/lib/coverage.ts +21 -0
  324. package/src/lib/credentials.ts +104 -0
  325. package/src/lib/diff.ts +209 -0
  326. package/src/lib/events.ts +34 -0
  327. package/src/lib/git.ts +206 -0
  328. package/src/lib/hookRunner.ts +55 -0
  329. package/src/lib/hosts.ts +112 -0
  330. package/src/lib/jev.ts +223 -0
  331. package/src/lib/lintConfig.ts +53 -0
  332. package/src/lib/loadRules.ts +39 -0
  333. package/src/lib/opencodePlugin.ts +38 -0
  334. package/src/lib/output.ts +44 -0
  335. package/src/lib/packageRoot.ts +48 -0
  336. package/src/lib/paths.ts +96 -0
  337. package/src/lib/reason.ts +46 -0
  338. package/src/lib/regularFile.ts +96 -0
  339. package/src/lib/replay.ts +314 -0
  340. package/src/lib/replayCodex.ts +130 -0
  341. package/src/lib/replayOpencode.ts +186 -0
  342. package/src/lib/rubricFile.ts +99 -0
  343. package/src/lib/scope.ts +18 -0
  344. package/src/lib/session.ts +223 -0
  345. package/src/lib/settings.ts +112 -0
  346. package/src/lib/sources.ts +154 -0
  347. package/src/lib/stdin.ts +23 -0
  348. package/src/lib/transcript.ts +49 -0
  349. package/src/lib/ui.ts +38 -0
  350. package/src/ui/components/Buckets.tsx +30 -0
  351. package/src/ui/components/Callout.tsx +26 -0
  352. package/src/ui/components/Checklist.tsx +29 -0
  353. package/src/ui/components/Columns.tsx +62 -0
  354. package/src/ui/components/Header.tsx +35 -0
  355. package/src/ui/components/Live.tsx +73 -0
  356. package/src/ui/components/RuleTable.tsx +94 -0
  357. package/src/ui/components/Section.tsx +24 -0
  358. package/src/ui/components/Verdicts.tsx +40 -0
  359. package/src/ui/render.tsx +51 -0
  360. package/src/ui/theme.ts +65 -0
  361. package/src/ui/views/AuditView.tsx +140 -0
  362. package/src/ui/views/BenchView.tsx +87 -0
  363. package/src/ui/views/CalibrateView.tsx +108 -0
  364. package/src/ui/views/CheckView.tsx +56 -0
  365. package/src/ui/views/ErrorView.tsx +32 -0
  366. package/src/ui/views/HelpView.tsx +51 -0
  367. package/src/ui/views/InitView.tsx +103 -0
  368. package/src/ui/views/ReplayView.tsx +100 -0
  369. package/src/ui/views/ReportView.tsx +225 -0
  370. package/src/ui/views/RubricView.tsx +82 -0
@@ -0,0 +1,63 @@
1
+ /** Coldtea's palette, as a terminal can show it. Truecolor where available; chalk degrades the rest. */
2
+ export const palette = {
3
+ teal: "#3da5a8",
4
+ tealLight: "#58c4c8",
5
+ sage: "#5cbd68",
6
+ ceramic: "#d8c4a0",
7
+ ceramicWarm: "#c4a46e",
8
+ amber: "#d49a50",
9
+ amberBright: "#e0ac62",
10
+ rose: "#c9627d",
11
+ plum: "#a468c2",
12
+ indigo: "#6876d8",
13
+ copper: "#b97b47",
14
+ mist: "#8d96a3",
15
+ ash: "#5a6370",
16
+ cloud: "#cdd3dc",
17
+ paper: "#f0ece6",
18
+ };
19
+ export const toneColor = {
20
+ accent: palette.teal,
21
+ ok: palette.sage,
22
+ warn: palette.amber,
23
+ bad: palette.rose,
24
+ info: palette.indigo,
25
+ muted: palette.mist,
26
+ text: palette.cloud,
27
+ highlight: palette.ceramic,
28
+ };
29
+ export const glyph = {
30
+ dot: "●",
31
+ ring: "○",
32
+ check: "✓",
33
+ cross: "✗",
34
+ arrow: "→",
35
+ bar: "▎",
36
+ dotSep: "·",
37
+ ellipsis: "…",
38
+ };
39
+ /** Cuts a string to fit, keeping the tail readable when the head is the boring part. */
40
+ export const truncate = (value, max, keep = "head") => {
41
+ if (max <= 1)
42
+ return value.slice(0, Math.max(0, max));
43
+ if (value.length <= max)
44
+ return value;
45
+ return keep === "head"
46
+ ? `${value.slice(0, max - 1)}${glyph.ellipsis}`
47
+ : `${glyph.ellipsis}${value.slice(value.length - max + 1)}`;
48
+ };
49
+ /** A probability as a small bar: filled tenths, in the band's colour. */
50
+ export const meter = (probability, width = 10) => {
51
+ const filled = Math.round(Math.min(1, Math.max(0, probability)) * width);
52
+ return `${"█".repeat(filled)}${"░".repeat(width - filled)}`;
53
+ };
54
+ /** Globs as a person reads them: a list of whole-tree extension globs becomes `ts, tsx`; anything else stays a glob. */
55
+ export const scopeLabel = (scope) => {
56
+ if (scope === undefined)
57
+ return "everywhere";
58
+ const extensions = scope.map((g) => /^\*\*\/\*\.([A-Za-z0-9]+)$/.exec(g)?.[1]);
59
+ if (extensions.every((e) => e !== undefined))
60
+ return extensions.join(", ");
61
+ return scope.join(", ");
62
+ };
63
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AuditFileResult, RuleTally } from "../../lib/audit.js";
2
+ export type AuditData = {
3
+ root: string;
4
+ files: number;
5
+ skipped: {
6
+ tooBig: string[];
7
+ outOfScope: number;
8
+ };
9
+ results: AuditFileResult[];
10
+ tallies: RuleTally[];
11
+ spendUsd: number;
12
+ elapsedMs: number;
13
+ all: boolean;
14
+ };
15
+ export declare function AuditView({ data }: {
16
+ data: AuditData;
17
+ }): import("react").JSX.Element;
18
+ //# sourceMappingURL=AuditView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/AuditView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQrE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAKF,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,+BAmHtD"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { ms, usd } from "../../lib/ui.js";
4
+ import { Callout } from "../components/Callout.js";
5
+ import { Columns } from "../components/Columns.js";
6
+ import { Header } from "../components/Header.js";
7
+ import { Section } from "../components/Section.js";
8
+ import { glyph, meter, palette } from "../theme.js";
9
+ const worst = (r) => [...r.verdicts].sort((a, b) => b.probability - a.probability)[0];
10
+ export function AuditView({ data }) {
11
+ const broken = data.results.filter((r) => r.verdicts.some((v) => v.band === "act"));
12
+ const flaggedOnly = data.results.filter((r) => !r.verdicts.some((v) => v.band === "act") && r.verdicts.some((v) => v.band === "flag"));
13
+ const failed = data.results.filter((r) => r.error !== undefined);
14
+ const rows = data.tallies.filter((t) => data.all || t.broken.length + t.flagged.length > 0);
15
+ const fileRows = [...broken, ...(data.all ? flaggedOnly : [])].sort((a, b) => (worst(b)?.probability ?? 0) - (worst(a)?.probability ?? 0));
16
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "audit", where: data.root, note: `${data.files} files judged ${glyph.dotSep} ${ms(data.elapsedMs)} ${glyph.dotSep} about ${usd(data.spendUsd)}` }), _jsx(Section, { title: "By rule", aside: rows.length === 0
17
+ ? "nothing broken"
18
+ : `${rows.length} ${rows.length === 1 ? "rule" : "rules"} with something to look at`, children: rows.length === 0 ? (_jsxs(Text, { color: palette.sage, children: [glyph.check, " No file breaks a rule above the act line."] })) : (_jsx(Columns, { indent: 2, columns: [
19
+ { key: "rule", label: "rule", width: 34 },
20
+ { key: "broken", label: "broken", width: 7, align: "right" },
21
+ { key: "flagged", label: "uncertain", width: 9, align: "right" },
22
+ { key: "checked", label: "of", width: 5, align: "right" },
23
+ { key: "example", label: "for example", keep: "tail" },
24
+ ], rows: rows.map((t) => ({
25
+ rule: {
26
+ text: t.ruleId,
27
+ color: t.broken.length > 0 ? palette.cloud : palette.mist,
28
+ bold: t.broken.length > 0,
29
+ },
30
+ broken: {
31
+ text: String(t.broken.length),
32
+ color: t.broken.length > 0 ? palette.rose : palette.ash,
33
+ bold: t.broken.length > 0,
34
+ },
35
+ flagged: {
36
+ text: String(t.flagged.length),
37
+ color: t.flagged.length > 0 ? palette.amber : palette.ash,
38
+ },
39
+ checked: { text: String(t.checked), color: palette.ash },
40
+ example: { text: t.broken[0] ?? t.flagged[0] ?? "", color: palette.mist },
41
+ })) })) }), fileRows.length > 0 ? (_jsxs(Section, { title: "By file", aside: `${broken.length} ${broken.length === 1 ? "file breaks" : "files break"} a rule ${glyph.dotSep} ${flaggedOnly.length} uncertain only`, children: [fileRows.slice(0, data.all ? fileRows.length : 40).map((r) => {
42
+ const top = worst(r);
43
+ const acts = r.verdicts.filter((v) => v.band === "act").map((v) => v.ruleId);
44
+ const flags = r.verdicts.filter((v) => v.band === "flag").map((v) => v.ruleId);
45
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: acts.length ? palette.rose : palette.amber, children: meter(top?.probability ?? 0, 6) }), _jsxs(Text, { color: palette.cloud, bold: acts.length > 0, children: [" ", r.file] })] }), _jsx(Box, { paddingLeft: 8, children: _jsxs(Text, { color: palette.ash, wrap: "truncate-end", children: [acts.length ? acts.join(", ") : "", acts.length && flags.length ? " " : "", flags.length ? `uncertain: ${flags.join(", ")}` : ""] }) })] }, r.file));
46
+ }), !data.all && fileRows.length > 40 ? (_jsxs(Text, { color: palette.ash, children: [fileRows.length - 40, " more. Pass --all to list them."] })) : null] })) : null, failed.length > 0 ? (_jsx(Callout, { tone: "warn", title: `${failed.length} ${failed.length === 1 ? "file was" : "files were"} judged only in part, or not at all`, children: failed.slice(0, 5).map((r) => (_jsxs(Text, { color: palette.mist, children: [r.file, " ", _jsx(Text, { color: palette.ash, children: r.error })] }, r.file))) })) : null, data.skipped.tooBig.length + data.skipped.outOfScope > 0 ? (_jsxs(Text, { color: palette.ash, children: ["Skipped ", data.skipped.outOfScope, " ", data.skipped.outOfScope === 1 ? "file" : "files", " no rule applies to", data.skipped.tooBig.length ? ` and ${data.skipped.tooBig.length} too big to send` : "", ". Turn-phase rules do not apply to an audit."] })) : null] }));
47
+ }
48
+ //# sourceMappingURL=AuditView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditView.js","sourceRoot":"","sources":["../../../src/ui/views/AuditView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export type BenchRow = {
2
+ what: string;
3
+ median: number;
4
+ p90: number;
5
+ };
6
+ export type BenchData = {
7
+ root: string;
8
+ runs: number;
9
+ activeModelRules: number;
10
+ rows: BenchRow[];
11
+ tokens: {
12
+ small: number;
13
+ large: number;
14
+ };
15
+ cost: {
16
+ small: number;
17
+ large: number;
18
+ };
19
+ perTurn: {
20
+ latencyMs: number;
21
+ costUsd: number;
22
+ };
23
+ sessions: {
24
+ count: number;
25
+ medianChecks: number;
26
+ medianLatencyMs: number;
27
+ medianCostUsd: number;
28
+ } | null;
29
+ };
30
+ export declare function BenchView({ data }: {
31
+ data: BenchData;
32
+ }): import("react").JSX.Element;
33
+ //# sourceMappingURL=BenchView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BenchView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/BenchView.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AACrE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,+BA8DtD"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { Columns } from "../components/Columns.js";
4
+ import { Header } from "../components/Header.js";
5
+ import { Section } from "../components/Section.js";
6
+ import { ms, usd } from "../../lib/ui.js";
7
+ import { glyph, palette } from "../theme.js";
8
+ export function BenchView({ data }) {
9
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "bench", where: data.root, note: `${data.activeModelRules} active model rules ${glyph.dotSep} ${data.runs} runs each` }), _jsx(Section, { title: "Latency", children: _jsx(Columns, { indent: 2, columns: [
10
+ { key: "what", label: "" },
11
+ { key: "median", label: "median", width: 8, align: "right" },
12
+ { key: "p90", label: "p90", width: 8, align: "right" },
13
+ ], rows: data.rows.map((r) => ({
14
+ what: { text: r.what, color: palette.cloud },
15
+ median: { text: ms(r.median), color: palette.ceramic, bold: true },
16
+ p90: { text: ms(r.p90), color: palette.mist },
17
+ })) }) }), _jsxs(Section, { title: "Spend", children: [_jsxs(Text, { color: palette.cloud, children: ["input tokens per edit ", _jsx(Text, { color: palette.ceramic, children: data.tokens.small }), " small", " ", _jsx(Text, { color: palette.ash, children: glyph.dotSep }), " ", _jsx(Text, { color: palette.ceramic, children: data.tokens.large }), " large"] }), _jsxs(Text, { color: palette.cloud, children: ["per edit ", _jsx(Text, { color: palette.ceramic, children: usd(data.cost.small) }), " small", " ", _jsx(Text, { color: palette.ash, children: glyph.dotSep }), " ", _jsx(Text, { color: palette.ceramic, children: usd(data.cost.large) }), " large"] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: palette.cloud, children: ["A 15 edit turn here: about", " ", _jsx(Text, { color: palette.ceramic, children: ms(data.perTurn.latencyMs) }), " of waiting and", " ", _jsx(Text, { color: palette.ceramic, children: usd(data.perTurn.costUsd) }), ", before repairs."] }) })] }), _jsx(Section, { title: "Real sessions", aside: data.sessions ? `${data.sessions.count} recorded` : "none yet", children: data.sessions ? (_jsxs(Text, { color: palette.cloud, children: ["median per session ", _jsx(Text, { color: palette.ceramic, children: data.sessions.medianChecks }), " ", "checks ", _jsx(Text, { color: palette.ash, children: glyph.dotSep }), " ", _jsx(Text, { color: palette.ceramic, children: ms(data.sessions.medianLatencyMs) }), " of hook time", " ", _jsx(Text, { color: palette.ash, children: glyph.dotSep }), " ", _jsx(Text, { color: palette.ceramic, children: usd(data.sessions.medianCostUsd) })] })) : (_jsx(Text, { color: palette.ash, children: "The figures above are measured; per-session numbers appear once the hooks have run here." })) })] }));
18
+ }
19
+ //# sourceMappingURL=BenchView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BenchView.js","sourceRoot":"","sources":["../../../src/ui/views/BenchView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { CalibrationVerdict } from "@coldtea/abide-schema";
2
+ export type CalibrateRow = {
3
+ id: string;
4
+ when: string;
5
+ states: number;
6
+ median: number;
7
+ min: number;
8
+ max: number;
9
+ fired: number;
10
+ verdict: CalibrationVerdict;
11
+ };
12
+ export type CalibrateData = {
13
+ root: string;
14
+ file: string;
15
+ hunks: number;
16
+ commits: number;
17
+ calls: number;
18
+ spendUsd: number;
19
+ rows: CalibrateRow[];
20
+ weak: string[];
21
+ noisy: string[];
22
+ };
23
+ export declare function CalibrateView({ data }: {
24
+ data: CalibrateData;
25
+ }): import("react").JSX.Element;
26
+ //# sourceMappingURL=CalibrateView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalibrateView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/CalibrateView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAQhE,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAWF,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,+BAmE9D"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { Callout } from "../components/Callout.js";
4
+ import { Columns } from "../components/Columns.js";
5
+ import { Header } from "../components/Header.js";
6
+ import { Section } from "../components/Section.js";
7
+ import { usd } from "../../lib/ui.js";
8
+ import { glyph, meter, palette } from "../theme.js";
9
+ const verdictColor = (v) => v === "decisive"
10
+ ? palette.sage
11
+ : v === "weak"
12
+ ? palette.amber
13
+ : v === "noisy"
14
+ ? palette.rose
15
+ : palette.ash;
16
+ export function CalibrateView({ data }) {
17
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "calibrate", where: data.root, note: `${data.rows.length} rules ${glyph.dotSep} ${data.hunks} hunks and ${data.commits} commits from git history` }), _jsx(Section, { title: "Rules", aside: `${data.calls} calls ${glyph.dotSep} about ${usd(data.spendUsd)}`, children: _jsx(Columns, { indent: 2, columns: [
18
+ { key: "id", label: "rule", width: 34 },
19
+ { key: "when", label: "when", width: 4 },
20
+ { key: "states", label: "states", width: 6, align: "right" },
21
+ { key: "median", label: "median", width: 12 },
22
+ { key: "range", label: "min max", width: 11 },
23
+ { key: "fired", label: "fired", width: 5, align: "right" },
24
+ { key: "verdict", label: "verdict" },
25
+ ], rows: data.rows.map((r) => ({
26
+ id: { text: r.id, color: palette.cloud },
27
+ when: { text: r.when, color: r.when === "turn" ? palette.plum : palette.mist },
28
+ states: { text: String(r.states), color: palette.mist },
29
+ median: {
30
+ text: `${meter(r.median, 6)} ${r.median.toFixed(2)}`,
31
+ color: verdictColor(r.verdict),
32
+ },
33
+ range: { text: `${r.min.toFixed(2)} ${r.max.toFixed(2)}`, color: palette.ash },
34
+ fired: { text: String(r.fired), color: r.fired > 0 ? palette.rose : palette.ash },
35
+ verdict: {
36
+ text: r.verdict,
37
+ color: verdictColor(r.verdict),
38
+ bold: r.verdict !== "decisive" && r.verdict !== "skipped",
39
+ },
40
+ })) }) }), data.weak.length > 0 ? (_jsxs(Callout, { tone: "warn", title: `${data.weak.length} ${data.weak.length === 1 ? "rule" : "rules"} never answered near 0 or near 1 and will not run`, children: [_jsx(Text, { color: palette.cloud, children: data.weak.join(", ") }), _jsx(Text, { color: palette.mist, children: "Likely badly worded. Run abide tune to rewrite them." })] })) : null, data.noisy.length > 0 ? (_jsxs(Callout, { tone: "bad", title: `${data.noisy.length} ${data.noisy.length === 1 ? "rule fired" : "rules fired"} on most historic hunks and will not run`, children: [_jsx(Text, { color: palette.cloud, children: data.noisy.join(", ") }), _jsx(Text, { color: palette.mist, children: "Too broad. Narrow the scope or the wording." })] })) : null, data.weak.length + data.noisy.length === 0 ? (_jsxs(Text, { color: palette.sage, children: [glyph.check, " Every rule is decisive on this repository's history."] })) : null, _jsxs(Text, { color: palette.ash, children: ["wrote ", data.file] })] }));
41
+ }
42
+ //# sourceMappingURL=CalibrateView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalibrateView.js","sourceRoot":"","sources":["../../../src/ui/views/CalibrateView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Verdict } from "@coldtea/abide-schema";
2
+ export type CheckSection = {
3
+ phase: "edit" | "turn";
4
+ files: string[];
5
+ modelRules: number;
6
+ calls: number;
7
+ latencyMs: number;
8
+ verdicts: Verdict[];
9
+ };
10
+ export type CheckData = {
11
+ root: string;
12
+ sections: CheckSection[];
13
+ spendUsd: number;
14
+ all: boolean;
15
+ };
16
+ export declare function CheckView({ data }: {
17
+ data: CheckData;
18
+ }): import("react").JSX.Element;
19
+ //# sourceMappingURL=CheckView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/CheckView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAOrD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnG,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,+BAoCtD"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { Header } from "../components/Header.js";
4
+ import { Section } from "../components/Section.js";
5
+ import { Verdicts } from "../components/Verdicts.js";
6
+ import { ms, usd } from "../../lib/ui.js";
7
+ import { glyph, palette } from "../theme.js";
8
+ export function CheckView({ data }) {
9
+ const acts = data.sections.flatMap((s) => s.verdicts).filter((v) => v.band === "act").length;
10
+ const flags = data.sections.flatMap((s) => s.verdicts).filter((v) => v.band === "flag").length;
11
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "check", where: data.root }), data.sections.map((s, i) => (_jsx(Section, { title: s.phase === "edit"
12
+ ? (s.files[0] ?? "")
13
+ : `turn ${glyph.dotSep} ${s.files.length} ${s.files.length === 1 ? "file" : "files"}`, aside: `${s.modelRules} rules ${glyph.dotSep} ${s.calls} ${s.calls === 1 ? "call" : "calls"} ${glyph.dotSep} ${ms(s.latencyMs)}`, children: _jsx(Verdicts, { verdicts: s.verdicts, all: data.all }) }, i))), _jsxs(Box, { children: [_jsx(Text, { color: acts > 0 ? palette.rose : palette.sage, bold: true, children: acts > 0 ? `${glyph.cross} ${acts} to repair` : `${glyph.check} nothing to repair` }), flags > 0 ? (_jsxs(Text, { color: palette.amber, children: [" ", glyph.dot, " ", flags, " uncertain"] })) : null, _jsxs(Text, { color: palette.ash, children: [" ", glyph.dotSep, " about ", usd(data.spendUsd)] })] })] }));
14
+ }
15
+ //# sourceMappingURL=CheckView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckView.js","sourceRoot":"","sources":["../../../src/ui/views/CheckView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAa7C,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAuB;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAC/F,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,GAAI,EAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3B,KAAC,OAAO,IAEN,KAAK,EACH,CAAC,CAAC,KAAK,KAAK,MAAM;oBAChB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACpB,CAAC,CAAC,QAAQ,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAEzF,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,UAAU,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,YAEhI,KAAC,QAAQ,IAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,GAAI,IAR5C,CAAC,CASE,CACX,CAAC,EACF,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,kBACtD,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,oBAAoB,GAC9E,EACN,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CACX,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,aACvB,GAAG,EACH,KAAK,CAAC,GAAG,OAAG,KAAK,kBACb,CACR,CAAC,CAAC,CAAC,IAAI,EACR,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,GAAG,aACrB,GAAG,EACH,KAAK,CAAC,MAAM,aAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IACnC,IACH,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function ErrorView({ error }: {
2
+ error: unknown;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=ErrorView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/ErrorView.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,+BAWtD"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text } from "ink";
3
+ import { isAbideError } from "@coldtea/abide-schema";
4
+ import { Callout } from "../components/Callout.js";
5
+ import { palette } from "../theme.js";
6
+ /** Our own sentence for each failure; the machine's detail sits under it, dimmed. */
7
+ const TITLES = {
8
+ NO_API_KEY: "No API key, so nothing can be checked",
9
+ NO_INSTRUCTION_FILES: "No instruction files here, so there is nothing to compile",
10
+ RUBRIC_INVALID: "The rubric could not be read",
11
+ RUBRIC_MISSING: "No rubric yet",
12
+ SETTINGS_INVALID: "The settings file could not be changed",
13
+ GIT_UNAVAILABLE: "Git history is not readable here",
14
+ CLAUDE_UNAVAILABLE: "Claude Code did not finish the turn",
15
+ HOST_UNKNOWN: "That is not an agent abide knows",
16
+ HOST_NOT_FOUND: "No supported agent was found on this machine",
17
+ CHECK_TIMEOUT: "Jev did not answer in time",
18
+ CHECK_FAILED: "Jev refused the check",
19
+ };
20
+ export function ErrorView({ error }) {
21
+ const detail = error instanceof Error ? error.message : String(error);
22
+ if (!isAbideError(error))
23
+ return _jsx(Callout, { tone: "bad", title: detail });
24
+ return (_jsxs(Callout, { tone: "bad", title: TITLES[error.code], children: [_jsx(Text, { color: palette.mist, wrap: "wrap", children: detail }), _jsx(Text, { color: palette.ash, children: error.code })] }));
25
+ }
26
+ //# sourceMappingURL=ErrorView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorView.js","sourceRoot":"","sources":["../../../src/ui/views/ErrorView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAuB,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,qFAAqF;AACrF,MAAM,MAAM,GAAmC;IAC7C,UAAU,EAAE,uCAAuC;IACnD,oBAAoB,EAAE,2DAA2D;IACjF,cAAc,EAAE,8BAA8B;IAC9C,cAAc,EAAE,eAAe;IAC/B,gBAAgB,EAAE,wCAAwC;IAC1D,eAAe,EAAE,kCAAkC;IACnD,kBAAkB,EAAE,qCAAqC;IACzD,YAAY,EAAE,kCAAkC;IAChD,cAAc,EAAE,8CAA8C;IAC9D,aAAa,EAAE,4BAA4B;IAC3C,YAAY,EAAE,uBAAuB;CACtC,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAsB;IACrD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,KAAC,OAAO,IAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAE,MAAM,GAAI,CAAC;IACvE,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAC3C,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAC,MAAM,YACnC,MAAM,GACF,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,GAAG,YAAG,KAAK,CAAC,IAAI,GAAQ,IACrC,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function HelpView(): import("react").JSX.Element;
2
+ //# sourceMappingURL=HelpView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/HelpView.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,QAAQ,gCA4BvB"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { Header } from "../components/Header.js";
4
+ import { palette } from "../theme.js";
5
+ const COMMANDS = [
6
+ ["login [--gateway]", "store your TypeSafe key in ~/.abide/.env, owner-only"],
7
+ ["init [agent] [--project]", "hook into claude, codex, opencode, or every one found here"],
8
+ ["compile", "compile the rubric now, in a headless Claude Code turn"],
9
+ ["tune [--global]", "rewrite rules that never fire, with their statistics attached"],
10
+ ["rubric validate [--global]", "check .abide/rubric.json and fill in source hashes"],
11
+ ["calibrate [--global]", "test every rule against this repo's recent history"],
12
+ ["check [paths] [--all]", "check uncommitted changes the way the hooks would"],
13
+ ["audit [paths] [--all]", "judge every file in scope as if just written; what breaks which rule"],
14
+ ["report", "what is compiled, what fired, what never fires"],
15
+ [
16
+ "replay <agent>",
17
+ "judge past claude, codex or opencode sessions in this repo as if abide had been installed",
18
+ ],
19
+ ["bench [--runs N]", "latency and spend, measured on this machine"],
20
+ ["uninstall [agent] [--project]", "remove the hooks from one agent, or all"],
21
+ ];
22
+ export function HelpView() {
23
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "help", note: "Enforce your own AGENTS.md rules on every edit a coding agent makes." }), COMMANDS.map(([name, what]) => (_jsxs(Box, { children: [_jsx(Box, { width: 30, children: _jsx(Text, { color: palette.cloud, bold: true, children: name }) }), _jsx(Text, { color: palette.mist, children: what })] }, name))), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: palette.ash, children: "--json prints machine-readable output on report, check, audit, bench and calibrate." }), _jsx(Text, { color: palette.ash, children: "Key: abide login, or TYPESAFE_AI_API_KEY (or AI_GATEWAY_API_KEY) in the environment or a .env at the repo root." })] })] }));
24
+ }
25
+ //# sourceMappingURL=HelpView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpView.js","sourceRoot":"","sources":["../../../src/ui/views/HelpView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,QAAQ,GAAuB;IACnC,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;IAC7E,CAAC,0BAA0B,EAAE,4DAA4D,CAAC;IAC1F,CAAC,SAAS,EAAE,wDAAwD,CAAC;IACrE,CAAC,iBAAiB,EAAE,+DAA+D,CAAC;IACpF,CAAC,4BAA4B,EAAE,oDAAoD,CAAC;IACpF,CAAC,sBAAsB,EAAE,oDAAoD,CAAC;IAC9E,CAAC,uBAAuB,EAAE,mDAAmD,CAAC;IAC9E,CAAC,uBAAuB,EAAE,sEAAsE,CAAC;IACjG,CAAC,QAAQ,EAAE,gDAAgD,CAAC;IAC5D;QACE,gBAAgB;QAChB,2FAA2F;KAC5F;IACD,CAAC,kBAAkB,EAAE,6CAA6C,CAAC;IACnE,CAAC,+BAA+B,EAAE,yCAAyC,CAAC;CAC7E,CAAC;AAEF,MAAM,UAAU,QAAQ;IACtB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,MAAM,IACL,OAAO,EAAC,MAAM,EACd,IAAI,EAAC,sEAAsE,GAC3E,EACD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAC9B,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,EAAE,YACZ,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,kBAC7B,IAAI,GACA,GACH,EACN,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,YAAG,IAAI,GAAQ,KANhC,IAAI,CAOR,CACP,CAAC,EACF,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,GAAG,oGAEjB,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,GAAG,gIAGjB,IACH,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type Step } from "../components/Checklist.js";
2
+ export type InitData = {
3
+ kind: "no-key";
4
+ root: string;
5
+ } | {
6
+ kind: "no-sources";
7
+ root: string;
8
+ } | {
9
+ kind: "installed";
10
+ root: string;
11
+ steps: Step[];
12
+ hosts: string[];
13
+ afterwards: string[];
14
+ sources: {
15
+ path: string;
16
+ scope: string;
17
+ global: boolean;
18
+ }[];
19
+ rubric: {
20
+ path: string;
21
+ rules: number;
22
+ } | null;
23
+ };
24
+ export declare function InitView({ data }: {
25
+ data: InitData;
26
+ }): import("react").JSX.Element;
27
+ //# sourceMappingURL=InitView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InitView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/InitView.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAIlE,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC5D,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChD,CAAC;AAEN,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,+BAkFpD"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { assertNever } from "@coldtea/abide-schema";
4
+ import { Callout } from "../components/Callout.js";
5
+ import { Checklist } from "../components/Checklist.js";
6
+ import { Header } from "../components/Header.js";
7
+ import { palette, scopeLabel } from "../theme.js";
8
+ export function InitView({ data }) {
9
+ switch (data.kind) {
10
+ case "no-key":
11
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "init", where: data.root }), _jsxs(Callout, { tone: "warn", title: "No API key found, so abide has nothing to check with", children: [_jsxs(Text, { color: palette.cloud, children: ["Get a TypeSafe key at typesafe.ai, then run", " ", _jsx(Text, { color: palette.ceramic, children: "abide login" }), " and paste it."] }), _jsx(Text, { color: palette.mist, children: "Or put TYPESAFE_AI_API_KEY (or a Vercel AI_GATEWAY_API_KEY) in the environment or a .env at the repo root." }), _jsx(Text, { color: palette.ash, children: "Never a flag. It is never logged." })] })] }));
12
+ case "no-sources":
13
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "init", where: data.root }), _jsx(Callout, { tone: "warn", title: "Found 0 instruction files, so there are 0 rules", children: _jsx(Text, { color: palette.cloud, children: "Add an AGENTS.md and run abide init again. Abide ships no rules of its own." }) })] }));
14
+ case "installed":
15
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "init", where: data.root }), _jsx(Checklist, { steps: data.steps }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: palette.mist, children: "Instruction files" }), data.sources.map((s) => (_jsxs(Box, { children: [_jsxs(Text, { color: palette.cloud, children: [" ", s.path] }), _jsxs(Text, { color: palette.ash, children: [" ", s.global
16
+ ? "global, every repo"
17
+ : s.scope === "**/*"
18
+ ? "everywhere in this repo"
19
+ : `applies to ${scopeLabel([s.scope])}`] })] }, s.path)))] }), _jsx(Box, { marginTop: 1, children: data.rubric ? (_jsx(Callout, { tone: "ok", title: `Rubric present: ${data.rubric.rules} rules`, children: _jsxs(Text, { color: palette.mist, children: [data.rubric.path, ". It is rehashed at the start of every session."] }) })) : (_jsxs(Callout, { tone: "accent", title: `Next: start ${data.hosts.join(" or ")} in this repo`, children: [_jsx(Text, { color: palette.cloud, children: "The first turn compiles the rubric, on your own subscription." }), _jsxs(Text, { color: palette.mist, children: ["To compile right now instead: ", _jsx(Text, { color: palette.ceramic, children: "abide compile" })] })] })) }), data.afterwards.map((line) => (_jsx(Text, { color: palette.amber, children: line }, line))), _jsx(Text, { color: palette.ash, children: "Later: abide report shows what fired, abide bench measures latency and spend here." })] }));
20
+ default:
21
+ return assertNever(data);
22
+ }
23
+ }
24
+ //# sourceMappingURL=InitView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InitView.js","sourceRoot":"","sources":["../../../src/ui/views/InitView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { DriftRow, ReplayResult, RuleTally } from "../../lib/replay.js";
2
+ export type ReplayData = {
3
+ root: string;
4
+ host: string;
5
+ sessions: number;
6
+ edits: number;
7
+ result: ReplayResult;
8
+ drift: DriftRow[];
9
+ tallies: RuleTally[];
10
+ spendUsd: number;
11
+ elapsedMs: number;
12
+ };
13
+ export declare function ReplayView({ data }: {
14
+ data: ReplayData;
15
+ }): import("react").JSX.Element;
16
+ //# sourceMappingURL=ReplayView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReplayView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/ReplayView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAO7E,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAIF,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,+BA6ExD"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { ms, usd } from "../../lib/ui.js";
4
+ import { Columns } from "../components/Columns.js";
5
+ import { Header } from "../components/Header.js";
6
+ import { Section } from "../components/Section.js";
7
+ import { glyph, palette } from "../theme.js";
8
+ const percent = (rate) => `${Math.round(rate * 100)}%`;
9
+ export function ReplayView({ data }) {
10
+ const judged = data.result.edits.filter((e) => e.error === undefined);
11
+ const broken = judged.filter((e) => e.verdicts.some((v) => v.band === "act"));
12
+ const failed = data.result.edits.filter((e) => e.error !== undefined);
13
+ const brokenTurns = data.result.turns.filter((t) => t.verdicts.some((v) => v.band === "act"));
14
+ const rows = data.tallies.filter((t) => t.broken + t.flagged > 0);
15
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { command: "replay", where: data.root, note: `${data.host} ${glyph.dotSep} ${data.sessions} sessions ${glyph.dotSep} ${judged.length} edits judged ${glyph.dotSep} ${ms(data.elapsedMs)} ${glyph.dotSep} about ${usd(data.spendUsd)}` }), _jsx(Section, { title: "What abide would have caught", aside: `${broken.length} of ${judged.length} edits, ${brokenTurns.length} of ${data.result.turns.length} turns`, children: _jsx(Columns, { indent: 2, columns: [
16
+ { key: "label", label: "when", width: 20 },
17
+ { key: "edits", label: "edits", width: 6, align: "right" },
18
+ { key: "broken", label: "broken", width: 7, align: "right" },
19
+ { key: "rate", label: "rate", width: 6, align: "right" },
20
+ ], rows: data.drift.map((d) => ({
21
+ label: { text: d.label, color: palette.cloud },
22
+ edits: { text: String(d.edits), color: palette.mist },
23
+ broken: { text: String(d.broken), color: d.broken > 0 ? palette.rose : palette.mist },
24
+ rate: { text: percent(d.rate), color: palette.cloud, bold: true },
25
+ })) }) }), _jsx(Section, { title: "By rule", aside: rows.length === 0 ? "nothing fired" : `${rows.length} rules fired`, children: rows.length === 0 ? (_jsxs(Text, { color: palette.sage, children: [glyph.check, " No edit or turn broke a rule above the act line."] })) : (_jsx(Columns, { indent: 2, columns: [
26
+ { key: "rule", label: "rule", width: 34 },
27
+ { key: "phase", label: "phase", width: 5 },
28
+ { key: "broken", label: "broken", width: 7, align: "right" },
29
+ { key: "flagged", label: "uncertain", width: 9, align: "right" },
30
+ { key: "of", label: "of", width: 6, align: "right" },
31
+ { key: "example", label: "for example", keep: "tail" },
32
+ ], rows: rows.map((t) => ({
33
+ rule: { text: t.rule, color: palette.cloud, bold: true },
34
+ phase: { text: t.phase, color: palette.mist },
35
+ broken: { text: String(t.broken), color: t.broken > 0 ? palette.rose : palette.mist },
36
+ flagged: {
37
+ text: String(t.flagged),
38
+ color: t.flagged > 0 ? palette.amber : palette.mist,
39
+ },
40
+ of: { text: String(t.of), color: palette.ash },
41
+ example: { text: t.example, color: palette.ash },
42
+ })) })) }), failed.length > 0 ? (_jsxs(Text, { color: palette.amber, children: [failed.length, " edits could not be judged: ", failed[0]?.error] })) : null, _jsx(Text, { color: palette.ash, children: "Jev is the judge here, so this is what abide would have flagged, not ground truth. Shell-made changes are not in a transcript and were not judged." })] }));
43
+ }
44
+ //# sourceMappingURL=ReplayView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReplayView.js","sourceRoot":"","sources":["../../../src/ui/views/ReplayView.tsx"],"names":[],"mappings":"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"}