@flanksource/clicky-ui 0.3.46 → 0.3.48

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 (474) hide show
  1. package/NOTICE.md +11 -0
  2. package/README.md +49 -0
  3. package/dist/ai.cjs +13 -8
  4. package/dist/ai.cjs.map +1 -1
  5. package/dist/ai.js +7 -2
  6. package/dist/ai.js.map +1 -1
  7. package/dist/comments/CommentSidePanel.cjs +10 -4
  8. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  9. package/dist/comments/CommentSidePanel.d.ts +2 -0
  10. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  11. package/dist/comments/CommentSidePanel.js +10 -4
  12. package/dist/comments/CommentSidePanel.js.map +1 -1
  13. package/dist/comments/CommentThread.cjs +2 -0
  14. package/dist/comments/CommentThread.cjs.map +1 -1
  15. package/dist/comments/CommentThread.d.ts +2 -1
  16. package/dist/comments/CommentThread.d.ts.map +1 -1
  17. package/dist/comments/CommentThread.js +2 -0
  18. package/dist/comments/CommentThread.js.map +1 -1
  19. package/dist/comments/CommentThreadList.cjs +3 -0
  20. package/dist/comments/CommentThreadList.cjs.map +1 -1
  21. package/dist/comments/CommentThreadList.d.ts +3 -1
  22. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  23. package/dist/comments/CommentThreadList.js +3 -0
  24. package/dist/comments/CommentThreadList.js.map +1 -1
  25. package/dist/components/ErrorWrapper.cjs +2 -3
  26. package/dist/components/ErrorWrapper.cjs.map +1 -1
  27. package/dist/components/ErrorWrapper.d.ts.map +1 -1
  28. package/dist/components/ErrorWrapper.js +3 -4
  29. package/dist/components/ErrorWrapper.js.map +1 -1
  30. package/dist/data/Clicky.cjs +3 -0
  31. package/dist/data/Clicky.cjs.map +1 -1
  32. package/dist/data/Clicky.js +3 -0
  33. package/dist/data/Clicky.js.map +1 -1
  34. package/dist/data/CodeLine.cjs +4 -2
  35. package/dist/data/CodeLine.cjs.map +1 -1
  36. package/dist/data/CodeLine.d.ts.map +1 -1
  37. package/dist/data/CodeLine.js +4 -2
  38. package/dist/data/CodeLine.js.map +1 -1
  39. package/dist/data/FilterPill.cjs +15 -2
  40. package/dist/data/FilterPill.cjs.map +1 -1
  41. package/dist/data/FilterPill.d.ts +1 -1
  42. package/dist/data/FilterPill.d.ts.map +1 -1
  43. package/dist/data/FilterPill.js +15 -2
  44. package/dist/data/FilterPill.js.map +1 -1
  45. package/dist/data/LogViewer.cjs +27 -8
  46. package/dist/data/LogViewer.cjs.map +1 -1
  47. package/dist/data/LogViewer.d.ts +11 -3
  48. package/dist/data/LogViewer.d.ts.map +1 -1
  49. package/dist/data/LogViewer.js +27 -8
  50. package/dist/data/LogViewer.js.map +1 -1
  51. package/dist/data/Properties.cjs +2 -15
  52. package/dist/data/Properties.cjs.map +1 -1
  53. package/dist/data/Properties.d.ts +4 -0
  54. package/dist/data/Properties.d.ts.map +1 -1
  55. package/dist/data/Properties.js +2 -15
  56. package/dist/data/Properties.js.map +1 -1
  57. package/dist/data/PropertyValue.cjs +37 -0
  58. package/dist/data/PropertyValue.cjs.map +1 -0
  59. package/dist/data/PropertyValue.d.ts +6 -0
  60. package/dist/data/PropertyValue.d.ts.map +1 -0
  61. package/dist/data/PropertyValue.js +37 -0
  62. package/dist/data/PropertyValue.js.map +1 -0
  63. package/dist/data/SymbolBadge.cjs +61 -0
  64. package/dist/data/SymbolBadge.cjs.map +1 -0
  65. package/dist/data/SymbolBadge.d.ts +21 -0
  66. package/dist/data/SymbolBadge.d.ts.map +1 -0
  67. package/dist/data/SymbolBadge.js +61 -0
  68. package/dist/data/SymbolBadge.js.map +1 -0
  69. package/dist/data/Tree.cjs +4 -3
  70. package/dist/data/Tree.cjs.map +1 -1
  71. package/dist/data/Tree.d.ts +3 -1
  72. package/dist/data/Tree.d.ts.map +1 -1
  73. package/dist/data/Tree.js +4 -3
  74. package/dist/data/Tree.js.map +1 -1
  75. package/dist/data/ai/ChatFab.cjs +1 -1
  76. package/dist/data/ai/ChatFab.cjs.map +1 -1
  77. package/dist/data/ai/ChatFab.js +1 -1
  78. package/dist/data/ai/ChatFab.js.map +1 -1
  79. package/dist/data/ai/ChatWindow.cjs +106 -171
  80. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  81. package/dist/data/ai/ChatWindow.d.ts +6 -2
  82. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  83. package/dist/data/ai/ChatWindow.header.cjs +104 -0
  84. package/dist/data/ai/ChatWindow.header.cjs.map +1 -0
  85. package/dist/data/ai/ChatWindow.header.d.ts +29 -0
  86. package/dist/data/ai/ChatWindow.header.d.ts.map +1 -0
  87. package/dist/data/ai/ChatWindow.header.js +104 -0
  88. package/dist/data/ai/ChatWindow.header.js.map +1 -0
  89. package/dist/data/ai/ChatWindow.js +107 -172
  90. package/dist/data/ai/ChatWindow.js.map +1 -1
  91. package/dist/data/ai/ChatWindow.placement.cjs +95 -0
  92. package/dist/data/ai/ChatWindow.placement.cjs.map +1 -0
  93. package/dist/data/ai/ChatWindow.placement.d.ts +32 -0
  94. package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -0
  95. package/dist/data/ai/ChatWindow.placement.js +95 -0
  96. package/dist/data/ai/ChatWindow.placement.js.map +1 -0
  97. package/dist/data/ai/SessionChatComposer.cjs +3 -1
  98. package/dist/data/ai/SessionChatComposer.cjs.map +1 -1
  99. package/dist/data/ai/SessionChatComposer.d.ts +4 -1
  100. package/dist/data/ai/SessionChatComposer.d.ts.map +1 -1
  101. package/dist/data/ai/SessionChatComposer.js +3 -1
  102. package/dist/data/ai/SessionChatComposer.js.map +1 -1
  103. package/dist/data/ai/SessionInspector.cjs +68 -72
  104. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  105. package/dist/data/ai/SessionInspector.composer-slot.cjs +8 -0
  106. package/dist/data/ai/SessionInspector.composer-slot.cjs.map +1 -0
  107. package/dist/data/ai/SessionInspector.composer-slot.d.ts +9 -0
  108. package/dist/data/ai/SessionInspector.composer-slot.d.ts.map +1 -0
  109. package/dist/data/ai/SessionInspector.composer-slot.js +8 -0
  110. package/dist/data/ai/SessionInspector.composer-slot.js.map +1 -0
  111. package/dist/data/ai/SessionInspector.d.ts +6 -1
  112. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  113. package/dist/data/ai/SessionInspector.js +69 -73
  114. package/dist/data/ai/SessionInspector.js.map +1 -1
  115. package/dist/data/ai/SessionInspector.legacy.cjs +41 -42
  116. package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -1
  117. package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -1
  118. package/dist/data/ai/SessionInspector.legacy.js +41 -42
  119. package/dist/data/ai/SessionInspector.legacy.js.map +1 -1
  120. package/dist/data/ai/SessionInspector.remote-view.cjs +14 -9
  121. package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -1
  122. package/dist/data/ai/SessionInspector.remote-view.d.ts +6 -2
  123. package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -1
  124. package/dist/data/ai/SessionInspector.remote-view.js +14 -9
  125. package/dist/data/ai/SessionInspector.remote-view.js.map +1 -1
  126. package/dist/data/ai/SessionInspector.remote.cjs +84 -16
  127. package/dist/data/ai/SessionInspector.remote.cjs.map +1 -1
  128. package/dist/data/ai/SessionInspector.remote.d.ts +42 -7
  129. package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -1
  130. package/dist/data/ai/SessionInspector.remote.js +86 -18
  131. package/dist/data/ai/SessionInspector.remote.js.map +1 -1
  132. package/dist/data/ai/SessionInspector.transcript.cjs +5 -0
  133. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
  134. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
  135. package/dist/data/ai/SessionInspector.transcript.js +5 -0
  136. package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
  137. package/dist/data/ai/SessionTail.cjs +63 -0
  138. package/dist/data/ai/SessionTail.cjs.map +1 -0
  139. package/dist/data/ai/SessionTail.d.ts +14 -0
  140. package/dist/data/ai/SessionTail.d.ts.map +1 -0
  141. package/dist/data/ai/SessionTail.js +63 -0
  142. package/dist/data/ai/SessionTail.js.map +1 -0
  143. package/dist/data/ai/SessionViewer.cjs +10 -3
  144. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  145. package/dist/data/ai/SessionViewer.d.ts +7 -1
  146. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  147. package/dist/data/ai/SessionViewer.js +10 -3
  148. package/dist/data/ai/SessionViewer.js.map +1 -1
  149. package/dist/data/ai/SessionViewer.unified.d.ts +14 -0
  150. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  151. package/dist/data/ai/index.d.ts +4 -3
  152. package/dist/data/ai/index.d.ts.map +1 -1
  153. package/dist/data/ai/use-session-scroll.cjs +30 -6
  154. package/dist/data/ai/use-session-scroll.cjs.map +1 -1
  155. package/dist/data/ai/use-session-scroll.d.ts +7 -0
  156. package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
  157. package/dist/data/ai/use-session-scroll.js +30 -6
  158. package/dist/data/ai/use-session-scroll.js.map +1 -1
  159. package/dist/data/chat/Chat.cjs +1 -1
  160. package/dist/data/chat/Chat.cjs.map +1 -1
  161. package/dist/data/chat/Chat.js +1 -1
  162. package/dist/data/chat/Chat.js.map +1 -1
  163. package/dist/data/chat/ChatRuntimeToolbar.cjs +4 -4
  164. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  165. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  166. package/dist/data/chat/ChatRuntimeToolbar.js +4 -4
  167. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  168. package/dist/data/chat/PromptInput.cjs +4 -2
  169. package/dist/data/chat/PromptInput.cjs.map +1 -1
  170. package/dist/data/chat/PromptInput.d.ts +5 -1
  171. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  172. package/dist/data/chat/PromptInput.js +4 -2
  173. package/dist/data/chat/PromptInput.js.map +1 -1
  174. package/dist/data/diagnostics/ErrorDetails.cjs +13 -2
  175. package/dist/data/diagnostics/ErrorDetails.cjs.map +1 -1
  176. package/dist/data/diagnostics/ErrorDetails.d.ts +3 -1
  177. package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -1
  178. package/dist/data/diagnostics/ErrorDetails.js +14 -3
  179. package/dist/data/diagnostics/ErrorDetails.js.map +1 -1
  180. package/dist/data/diagnostics/FrameSourceWindow.cjs +3 -2
  181. package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
  182. package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
  183. package/dist/data/diagnostics/FrameSourceWindow.js +3 -2
  184. package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
  185. package/dist/data/diagnostics/error-diagnostics.cjs +5 -0
  186. package/dist/data/diagnostics/error-diagnostics.cjs.map +1 -1
  187. package/dist/data/diagnostics/error-diagnostics.d.ts +1 -0
  188. package/dist/data/diagnostics/error-diagnostics.d.ts.map +1 -1
  189. package/dist/data/diagnostics/error-diagnostics.js +6 -1
  190. package/dist/data/diagnostics/error-diagnostics.js.map +1 -1
  191. package/dist/data/har/HarPanel.cjs +3 -1
  192. package/dist/data/har/HarPanel.cjs.map +1 -1
  193. package/dist/data/har/HarPanel.d.ts +4 -1
  194. package/dist/data/har/HarPanel.d.ts.map +1 -1
  195. package/dist/data/har/HarPanel.js +3 -1
  196. package/dist/data/har/HarPanel.js.map +1 -1
  197. package/dist/data/test-runner/Expectation.cjs +57 -0
  198. package/dist/data/test-runner/Expectation.cjs.map +1 -0
  199. package/dist/data/test-runner/Expectation.d.ts +19 -0
  200. package/dist/data/test-runner/Expectation.d.ts.map +1 -0
  201. package/dist/data/test-runner/Expectation.js +57 -0
  202. package/dist/data/test-runner/Expectation.js.map +1 -0
  203. package/dist/data/test-runner/MarkIcons.cjs +38 -0
  204. package/dist/data/test-runner/MarkIcons.cjs.map +1 -0
  205. package/dist/data/test-runner/MarkIcons.d.ts +15 -0
  206. package/dist/data/test-runner/MarkIcons.d.ts.map +1 -0
  207. package/dist/data/test-runner/MarkIcons.js +38 -0
  208. package/dist/data/test-runner/MarkIcons.js.map +1 -0
  209. package/dist/data/test-runner/TestDetailPanel.cjs +99 -53
  210. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  211. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  212. package/dist/data/test-runner/TestDetailPanel.js +101 -55
  213. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  214. package/dist/data/test-runner/TestFailureDetail.cjs +23 -27
  215. package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
  216. package/dist/data/test-runner/TestFailureDetail.d.ts +2 -2
  217. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  218. package/dist/data/test-runner/TestFailureDetail.js +23 -27
  219. package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
  220. package/dist/data/test-runner/TestFilterBar.cjs +87 -93
  221. package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
  222. package/dist/data/test-runner/TestFilterBar.d.ts +3 -2
  223. package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
  224. package/dist/data/test-runner/TestFilterBar.js +89 -95
  225. package/dist/data/test-runner/TestFilterBar.js.map +1 -1
  226. package/dist/data/test-runner/TestRunSummary.cjs +35 -21
  227. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  228. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  229. package/dist/data/test-runner/TestRunSummary.js +35 -21
  230. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  231. package/dist/data/test-runner/TestRunner.cjs +58 -30
  232. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  233. package/dist/data/test-runner/TestRunner.d.ts +6 -3
  234. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  235. package/dist/data/test-runner/TestRunner.js +58 -30
  236. package/dist/data/test-runner/TestRunner.js.map +1 -1
  237. package/dist/data/test-runner/TestTree.cjs +5 -2
  238. package/dist/data/test-runner/TestTree.cjs.map +1 -1
  239. package/dist/data/test-runner/TestTree.d.ts +5 -2
  240. package/dist/data/test-runner/TestTree.d.ts.map +1 -1
  241. package/dist/data/test-runner/TestTree.js +5 -2
  242. package/dist/data/test-runner/TestTree.js.map +1 -1
  243. package/dist/data/test-runner/TestTreeNode.cjs +28 -19
  244. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  245. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  246. package/dist/data/test-runner/TestTreeNode.js +29 -20
  247. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  248. package/dist/data/test-runner/adapter.cjs +15 -0
  249. package/dist/data/test-runner/adapter.cjs.map +1 -1
  250. package/dist/data/test-runner/adapter.d.ts +27 -7
  251. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  252. package/dist/data/test-runner/adapter.js +15 -0
  253. package/dist/data/test-runner/adapter.js.map +1 -1
  254. package/dist/data/test-runner/context.cjs.map +1 -1
  255. package/dist/data/test-runner/context.d.ts +2 -0
  256. package/dist/data/test-runner/context.d.ts.map +1 -1
  257. package/dist/data/test-runner/context.js.map +1 -1
  258. package/dist/data/test-runner/copy.cjs +114 -0
  259. package/dist/data/test-runner/copy.cjs.map +1 -0
  260. package/dist/data/test-runner/copy.d.ts +47 -0
  261. package/dist/data/test-runner/copy.d.ts.map +1 -0
  262. package/dist/data/test-runner/copy.js +114 -0
  263. package/dist/data/test-runner/copy.js.map +1 -0
  264. package/dist/data/test-runner/index.d.ts +6 -3
  265. package/dist/data/test-runner/index.d.ts.map +1 -1
  266. package/dist/data/test-runner/marks.cjs +184 -0
  267. package/dist/data/test-runner/marks.cjs.map +1 -0
  268. package/dist/data/test-runner/marks.d.ts +40 -0
  269. package/dist/data/test-runner/marks.d.ts.map +1 -0
  270. package/dist/data/test-runner/marks.js +184 -0
  271. package/dist/data/test-runner/marks.js.map +1 -0
  272. package/dist/data/test-runner/status.cjs +27 -44
  273. package/dist/data/test-runner/status.cjs.map +1 -1
  274. package/dist/data/test-runner/status.d.ts +12 -3
  275. package/dist/data/test-runner/status.d.ts.map +1 -1
  276. package/dist/data/test-runner/status.js +27 -44
  277. package/dist/data/test-runner/status.js.map +1 -1
  278. package/dist/data/traces/TerminalCastPlayer.d.ts +21 -0
  279. package/dist/data/traces/TerminalCastPlayer.d.ts.map +1 -0
  280. package/dist/data/traces/TraceHarView.d.ts +13 -0
  281. package/dist/data/traces/TraceHarView.d.ts.map +1 -0
  282. package/dist/data/traces/cast.d.ts +9 -0
  283. package/dist/data/traces/cast.d.ts.map +1 -0
  284. package/dist/data/traces/fixtures.d.ts +8 -0
  285. package/dist/data/traces/fixtures.d.ts.map +1 -0
  286. package/dist/data/traces/har-adapter.d.ts +13 -0
  287. package/dist/data/traces/har-adapter.d.ts.map +1 -0
  288. package/dist/data/traces/terminal-screen.d.ts +45 -0
  289. package/dist/data/traces/terminal-screen.d.ts.map +1 -0
  290. package/dist/data/traces/terminal-timeline.d.ts +26 -0
  291. package/dist/data/traces/terminal-timeline.d.ts.map +1 -0
  292. package/dist/data/traces/types.d.ts +141 -0
  293. package/dist/data/traces/types.d.ts.map +1 -0
  294. package/dist/data/verification/VerificationResults.cjs +4 -0
  295. package/dist/data/verification/VerificationResults.cjs.map +1 -1
  296. package/dist/data/verification/VerificationResults.d.ts +3 -1
  297. package/dist/data/verification/VerificationResults.d.ts.map +1 -1
  298. package/dist/data/verification/VerificationResults.js +4 -0
  299. package/dist/data/verification/VerificationResults.js.map +1 -1
  300. package/dist/data/verification/adapterViews.cjs +28 -44
  301. package/dist/data/verification/adapterViews.cjs.map +1 -1
  302. package/dist/data/verification/adapterViews.d.ts +4 -1
  303. package/dist/data/verification/adapterViews.d.ts.map +1 -1
  304. package/dist/data/verification/adapterViews.js +28 -44
  305. package/dist/data/verification/adapterViews.js.map +1 -1
  306. package/dist/data/verification/adapters.cjs +163 -8
  307. package/dist/data/verification/adapters.cjs.map +1 -1
  308. package/dist/data/verification/adapters.d.ts +7 -1
  309. package/dist/data/verification/adapters.d.ts.map +1 -1
  310. package/dist/data/verification/adapters.js +163 -8
  311. package/dist/data/verification/adapters.js.map +1 -1
  312. package/dist/data/verification/index.d.ts +4 -2
  313. package/dist/data/verification/index.d.ts.map +1 -1
  314. package/dist/data/verification/stepKind.cjs +217 -0
  315. package/dist/data/verification/stepKind.cjs.map +1 -0
  316. package/dist/data/verification/stepKind.d.ts +87 -0
  317. package/dist/data/verification/stepKind.d.ts.map +1 -0
  318. package/dist/data/verification/stepKind.js +217 -0
  319. package/dist/data/verification/stepKind.js.map +1 -0
  320. package/dist/data/verification/stepKindViews.cjs +111 -0
  321. package/dist/data/verification/stepKindViews.cjs.map +1 -0
  322. package/dist/data/verification/stepKindViews.d.ts +18 -0
  323. package/dist/data/verification/stepKindViews.d.ts.map +1 -0
  324. package/dist/data/verification/stepKindViews.js +111 -0
  325. package/dist/data/verification/stepKindViews.js.map +1 -0
  326. package/dist/data/verification/verifyReportTests.cjs +1 -0
  327. package/dist/data/verification/verifyReportTests.cjs.map +1 -1
  328. package/dist/data/verification/verifyReportTests.d.ts +2 -1
  329. package/dist/data/verification/verifyReportTests.d.ts.map +1 -1
  330. package/dist/data/verification/verifyReportTests.js +1 -0
  331. package/dist/data/verification/verifyReportTests.js.map +1 -1
  332. package/dist/data/version-info.cjs +3 -3
  333. package/dist/data/version-info.js +3 -3
  334. package/dist/data.cjs +58 -3
  335. package/dist/data.cjs.map +1 -1
  336. package/dist/data.d.ts +3 -0
  337. package/dist/data.d.ts.map +1 -1
  338. package/dist/data.js +60 -5
  339. package/dist/data.js.map +1 -1
  340. package/dist/icons/components/UiLogoEslint.cjs +10 -0
  341. package/dist/icons/components/UiLogoEslint.cjs.map +1 -0
  342. package/dist/icons/components/UiLogoEslint.d.ts +9 -0
  343. package/dist/icons/components/UiLogoEslint.d.ts.map +1 -0
  344. package/dist/icons/components/UiLogoEslint.js +10 -0
  345. package/dist/icons/components/UiLogoEslint.js.map +1 -0
  346. package/dist/icons/components/UiLogoGo.cjs +10 -0
  347. package/dist/icons/components/UiLogoGo.cjs.map +1 -0
  348. package/dist/icons/components/UiLogoGo.d.ts +9 -0
  349. package/dist/icons/components/UiLogoGo.d.ts.map +1 -0
  350. package/dist/icons/components/UiLogoGo.js +10 -0
  351. package/dist/icons/components/UiLogoGo.js.map +1 -0
  352. package/dist/icons/components/UiLogoJest.cjs +10 -0
  353. package/dist/icons/components/UiLogoJest.cjs.map +1 -0
  354. package/dist/icons/components/UiLogoJest.d.ts +9 -0
  355. package/dist/icons/components/UiLogoJest.d.ts.map +1 -0
  356. package/dist/icons/components/UiLogoJest.js +10 -0
  357. package/dist/icons/components/UiLogoJest.js.map +1 -0
  358. package/dist/icons/components/UiLogoMarkdown.cjs +10 -0
  359. package/dist/icons/components/UiLogoMarkdown.cjs.map +1 -0
  360. package/dist/icons/components/UiLogoMarkdown.d.ts +9 -0
  361. package/dist/icons/components/UiLogoMarkdown.d.ts.map +1 -0
  362. package/dist/icons/components/UiLogoMarkdown.js +10 -0
  363. package/dist/icons/components/UiLogoMarkdown.js.map +1 -0
  364. package/dist/icons/components/UiLogoOxc.cjs +10 -0
  365. package/dist/icons/components/UiLogoOxc.cjs.map +1 -0
  366. package/dist/icons/components/UiLogoOxc.d.ts +9 -0
  367. package/dist/icons/components/UiLogoOxc.d.ts.map +1 -0
  368. package/dist/icons/components/UiLogoOxc.js +10 -0
  369. package/dist/icons/components/UiLogoOxc.js.map +1 -0
  370. package/dist/icons/components/UiLogoPlaywright.cjs +10 -0
  371. package/dist/icons/components/UiLogoPlaywright.cjs.map +1 -0
  372. package/dist/icons/components/UiLogoPlaywright.d.ts +9 -0
  373. package/dist/icons/components/UiLogoPlaywright.d.ts.map +1 -0
  374. package/dist/icons/components/UiLogoPlaywright.js +10 -0
  375. package/dist/icons/components/UiLogoPlaywright.js.map +1 -0
  376. package/dist/icons/components/UiLogoPython.cjs +10 -0
  377. package/dist/icons/components/UiLogoPython.cjs.map +1 -0
  378. package/dist/icons/components/UiLogoPython.d.ts +9 -0
  379. package/dist/icons/components/UiLogoPython.d.ts.map +1 -0
  380. package/dist/icons/components/UiLogoPython.js +10 -0
  381. package/dist/icons/components/UiLogoPython.js.map +1 -0
  382. package/dist/icons/components/UiLogoReact.cjs +10 -0
  383. package/dist/icons/components/UiLogoReact.cjs.map +1 -0
  384. package/dist/icons/components/UiLogoReact.d.ts +9 -0
  385. package/dist/icons/components/UiLogoReact.d.ts.map +1 -0
  386. package/dist/icons/components/UiLogoReact.js +10 -0
  387. package/dist/icons/components/UiLogoReact.js.map +1 -0
  388. package/dist/icons/components/UiLogoRuff.cjs +10 -0
  389. package/dist/icons/components/UiLogoRuff.cjs.map +1 -0
  390. package/dist/icons/components/UiLogoRuff.d.ts +9 -0
  391. package/dist/icons/components/UiLogoRuff.d.ts.map +1 -0
  392. package/dist/icons/components/UiLogoRuff.js +10 -0
  393. package/dist/icons/components/UiLogoRuff.js.map +1 -0
  394. package/dist/icons/components/UiLogoTypescript.cjs +10 -0
  395. package/dist/icons/components/UiLogoTypescript.cjs.map +1 -0
  396. package/dist/icons/components/UiLogoTypescript.d.ts +9 -0
  397. package/dist/icons/components/UiLogoTypescript.d.ts.map +1 -0
  398. package/dist/icons/components/UiLogoTypescript.js +10 -0
  399. package/dist/icons/components/UiLogoTypescript.js.map +1 -0
  400. package/dist/icons/components/UiLogoVitest.cjs +10 -0
  401. package/dist/icons/components/UiLogoVitest.cjs.map +1 -0
  402. package/dist/icons/components/UiLogoVitest.d.ts +9 -0
  403. package/dist/icons/components/UiLogoVitest.d.ts.map +1 -0
  404. package/dist/icons/components/UiLogoVitest.js +10 -0
  405. package/dist/icons/components/UiLogoVitest.js.map +1 -0
  406. package/dist/icons/index.d.ts +11 -0
  407. package/dist/icons/index.d.ts.map +1 -1
  408. package/dist/icons/registry.cjs +22 -0
  409. package/dist/icons/registry.cjs.map +1 -1
  410. package/dist/icons/registry.d.ts.map +1 -1
  411. package/dist/icons/registry.js +22 -0
  412. package/dist/icons/registry.js.map +1 -1
  413. package/dist/icons.cjs +22 -0
  414. package/dist/icons.cjs.map +1 -1
  415. package/dist/icons.js +22 -0
  416. package/dist/icons.js.map +1 -1
  417. package/dist/index.cjs +60 -3
  418. package/dist/index.cjs.map +1 -1
  419. package/dist/index.js +62 -5
  420. package/dist/index.js.map +1 -1
  421. package/dist/overlay/DropdownMenuSubmenu.cjs +4 -4
  422. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  423. package/dist/overlay/DropdownMenuSubmenu.js +4 -4
  424. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  425. package/dist/rpc/FilterForm.cjs +9 -0
  426. package/dist/rpc/FilterForm.cjs.map +1 -1
  427. package/dist/rpc/FilterForm.d.ts +5 -1
  428. package/dist/rpc/FilterForm.d.ts.map +1 -1
  429. package/dist/rpc/FilterForm.js +9 -0
  430. package/dist/rpc/FilterForm.js.map +1 -1
  431. package/dist/rpc/InlineError.cjs +12 -43
  432. package/dist/rpc/InlineError.cjs.map +1 -1
  433. package/dist/rpc/InlineError.d.ts.map +1 -1
  434. package/dist/rpc/InlineError.js +13 -44
  435. package/dist/rpc/InlineError.js.map +1 -1
  436. package/dist/rpc/OperationArgsForm.cjs +153 -0
  437. package/dist/rpc/OperationArgsForm.cjs.map +1 -0
  438. package/dist/rpc/OperationArgsForm.d.ts +16 -0
  439. package/dist/rpc/OperationArgsForm.d.ts.map +1 -0
  440. package/dist/rpc/OperationArgsForm.js +153 -0
  441. package/dist/rpc/OperationArgsForm.js.map +1 -0
  442. package/dist/rpc/OperationScheduleDialog.cjs +119 -22
  443. package/dist/rpc/OperationScheduleDialog.cjs.map +1 -1
  444. package/dist/rpc/OperationScheduleDialog.d.ts +7 -0
  445. package/dist/rpc/OperationScheduleDialog.d.ts.map +1 -1
  446. package/dist/rpc/OperationScheduleDialog.js +120 -23
  447. package/dist/rpc/OperationScheduleDialog.js.map +1 -1
  448. package/dist/rpc/OperationSchedules.cjs +17 -2
  449. package/dist/rpc/OperationSchedules.cjs.map +1 -1
  450. package/dist/rpc/OperationSchedules.d.ts.map +1 -1
  451. package/dist/rpc/OperationSchedules.js +17 -2
  452. package/dist/rpc/OperationSchedules.js.map +1 -1
  453. package/dist/rpc/operation-schedule-model.cjs +2 -7
  454. package/dist/rpc/operation-schedule-model.cjs.map +1 -1
  455. package/dist/rpc/operation-schedule-model.d.ts +0 -2
  456. package/dist/rpc/operation-schedule-model.d.ts.map +1 -1
  457. package/dist/rpc/operation-schedule-model.js +2 -7
  458. package/dist/rpc/operation-schedule-model.js.map +1 -1
  459. package/dist/rpc/operation-schedule-types.d.ts +12 -1
  460. package/dist/rpc/operation-schedule-types.d.ts.map +1 -1
  461. package/dist/rpc.cjs +2 -0
  462. package/dist/rpc.cjs.map +1 -1
  463. package/dist/rpc.d.ts +1 -0
  464. package/dist/rpc.d.ts.map +1 -1
  465. package/dist/rpc.js +2 -0
  466. package/dist/rpc.js.map +1 -1
  467. package/dist/styles.css +1 -1
  468. package/package.json +1 -1
  469. package/dist/data/test-runner/frameworkIcon.cjs +0 -27
  470. package/dist/data/test-runner/frameworkIcon.cjs.map +0 -1
  471. package/dist/data/test-runner/frameworkIcon.d.ts +0 -3
  472. package/dist/data/test-runner/frameworkIcon.d.ts.map +0 -1
  473. package/dist/data/test-runner/frameworkIcon.js +0 -27
  474. package/dist/data/test-runner/frameworkIcon.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"adapterViews.cjs","sources":["../../../src/data/verification/adapterViews.tsx"],"sourcesContent":["// Detail-body components for the verification node adapters. Split from\n// adapters.ts (react/only-export-components: a file mixing component\n// declarations with the plain TestNodeAdapter/registry exports loses Fast\n// Refresh). Ported from gavel's VerificationStepOutput.tsx (the checklist list\n// and the CelDetails block).\n\nimport { cn } from \"../../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport { UiError, UiPass, UiPause } from \"../../icons\";\nimport { JsonView } from \"../JsonView\";\nimport { TestOutput, type Test, type FixtureContext } from \"../test-runner\";\n\n// ── Checklist: the synthesized \"Acceptance criteria\" node and its items ────\n\ntype ChecklistState = \"passed\" | \"failed\" | \"pending\";\n\nfunction checklistItemState(item: Test): ChecklistState {\n if (item.failed) return \"failed\";\n if (item.passed) return \"passed\";\n return \"pending\";\n}\n\nconst CHECKLIST_ICONS: Record<ChecklistState, { icon: StaticIconComponent; tone: string }> = {\n passed: { icon: UiPass, tone: \"text-emerald-600\" },\n failed: { icon: UiError, tone: \"text-red-600\" },\n pending: { icon: UiPause, tone: \"text-muted-foreground\" },\n};\n\nfunction ChecklistItemRow({ item }: { item: Test }) {\n const { icon, tone } = CHECKLIST_ICONS[checklistItemState(item)];\n return (\n <li className=\"flex items-start gap-1.5 text-xs\">\n <Icon icon={icon} className={cn(\"mt-0.5 shrink-0 text-sm\", tone)} />\n <span className=\"min-w-0\">\n {item.name}\n {item.message ? (\n <span className=\"block text-[11px] text-muted-foreground\">{item.message}</span>\n ) : null}\n </span>\n </li>\n );\n}\n\n/** Renders every checklist item for the \"Acceptance criteria\" parent, or the\n * single item itself when a leaf criterion is selected directly. */\nexport function ChecklistDetail({ node }: { node: Test }) {\n const items = node.children && node.children.length > 0 ? node.children : [node];\n return (\n <div className=\"space-y-2 p-density-4\">\n <ul className=\"space-y-1\">\n {items.map((item, index) => (\n <ChecklistItemRow key={item.task_id ?? index} item={item} />\n ))}\n </ul>\n </div>\n );\n}\n\n// ── Fixture / CEL: the failing-step detail (command + CelDetails) ──────────\n\nfunction readCelTrace(detail: unknown): string | undefined {\n if (detail && typeof detail === \"object\" && !Array.isArray(detail)) {\n const value = (detail as Record<string, unknown>).cel_trace;\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return undefined;\n}\n\n// A command step with no CEL assertion stores the whole command result object\n// in `actual` — the command/output is already rendered above, so dumping it\n// again as JSON is noise. Anything a CEL expression compared is shown as-is,\n// structured values included. `hasCelGate` mirrors gavel's own gate: a plain\n// `context.cel_expression`, or a trace recorded in `node.detail` when the\n// expression itself wasn't preserved on `context`.\nfunction comparisonValue(hasCelGate: boolean, value: unknown): unknown {\n if (value === undefined) return undefined;\n if (hasCelGate) return value;\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return undefined;\n return value;\n}\n\nfunction formatCelValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n// CEL detail is rendered only for a failing node: the expression and the\n// values it saw are what explain the verdict.\nexport function CelDetails({ node }: { node: Test }) {\n if (node.passed) return null;\n const context = node.context as FixtureContext | undefined;\n const vars = Object.entries(context?.cel_vars ?? {});\n const expression = readCelTrace(node.detail) || context?.cel_expression;\n const hasCelGate = !!expression;\n const expected = comparisonValue(hasCelGate, context?.expected);\n const actual = comparisonValue(hasCelGate, context?.actual);\n const hasComparison = expected !== undefined || actual !== undefined;\n if (!expression && vars.length === 0 && !hasComparison) return null;\n return (\n <div className=\"space-y-1 rounded border border-border bg-muted/30 px-2 py-1.5\">\n {expression && (\n <div>\n <span className=\"text-[10px] uppercase text-muted-foreground\">expression</span>\n <code className=\"block overflow-x-auto whitespace-pre text-[11px]\">{expression}</code>\n </div>\n )}\n {vars.length > 0 && (\n <table className=\"w-full table-fixed text-[11px]\">\n <tbody>\n {vars.map(([name, value]) => (\n <tr key={name} className=\"align-top\">\n <td className=\"w-1/3 truncate pr-2 font-medium text-muted-foreground\">{name}</td>\n <td className=\"break-words font-mono\">{formatCelValue(value)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n {expected !== undefined && (\n <div className=\"text-[11px]\">\n <span className=\"text-muted-foreground\">expected </span>\n <span className=\"font-mono\">{formatCelValue(expected)}</span>\n </div>\n )}\n {actual !== undefined && (\n <div className=\"text-[11px]\">\n <span className=\"text-muted-foreground\">actual </span>\n <span className=\"font-mono\">{formatCelValue(actual)}</span>\n </div>\n )}\n </div>\n );\n}\n\nexport function FixtureDetail({ node }: { node: Test }) {\n const context = node.context as FixtureContext | undefined;\n const command = context?.command ?? node.command;\n const cwd = context?.cwd ?? node.work_dir;\n return (\n <div className=\"space-y-4 p-density-4\">\n {node.message && (\n <p className=\"whitespace-pre-wrap break-words text-sm\">{node.message}</p>\n )}\n {command && (\n <div className=\"min-w-0 space-y-1\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Command</div>\n <code className=\"block overflow-x-auto whitespace-pre rounded bg-muted px-2 py-1.5 text-xs\">\n {command}\n </code>\n <div className=\"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground\">\n {cwd && <span>in {cwd}</span>}\n {typeof context?.exit_code === \"number\" && (\n <span className={context.exit_code === 0 ? undefined : \"text-red-600\"}>\n exit {context.exit_code}\n </span>\n )}\n </div>\n </div>\n )}\n <TestOutput node={node} />\n <CelDetails node={node} />\n {node.detail != null && (\n <div className=\"space-y-1\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Detail</div>\n <JsonView data={node.detail} />\n </div>\n )}\n </div>\n );\n}\n"],"names":["UiPass","UiError","UiPause","jsxs","jsx","Icon","cn","TestOutput","JsonView"],"mappings":"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"}
1
+ {"version":3,"file":"adapterViews.cjs","sources":["../../../src/data/verification/adapterViews.tsx"],"sourcesContent":["// Detail-body components for the verification node adapters. Split from\n// adapters.ts (react/only-export-components: a file mixing component\n// declarations with the plain TestNodeAdapter/registry exports loses Fast\n// Refresh). Ported from gavel's VerificationStepOutput.tsx (the checklist list\n// and the CelDetails block).\n\nimport type { ReactNode } from \"react\";\nimport { JsonView } from \"../JsonView\";\nimport { readStepDetail, type WaitDetail } from \"./stepKind\";\nimport { MalformedStepDetail, StepKindSections } from \"./stepKindViews\";\nimport {\n Expectation,\n OutcomeIcon,\n TestOutput,\n type FixtureContext,\n type Test,\n type TestOutcome,\n} from \"../test-runner\";\n\n// ── Checklist: the synthesized \"Acceptance criteria\" node and its items ────\n\nfunction checklistItemOutcome(item: Test): TestOutcome {\n if (item.failed) return \"failed\";\n if (item.passed) return \"passed\";\n return \"pending\";\n}\n\nfunction ChecklistItemRow({ item }: { item: Test }) {\n return (\n <li className=\"flex items-start gap-1.5 text-xs\">\n <OutcomeIcon outcome={checklistItemOutcome(item)} className=\"mt-0.5 text-sm\" />\n <span className=\"min-w-0\">\n {item.name}\n {item.message ? (\n <span className=\"block text-[11px] text-muted-foreground\">{item.message}</span>\n ) : null}\n </span>\n </li>\n );\n}\n\n/** Renders every checklist item for the \"Acceptance criteria\" parent, or the\n * single item itself when a leaf criterion is selected directly. */\nexport function ChecklistDetail({ node }: { node: Test }) {\n const items = node.children && node.children.length > 0 ? node.children : [node];\n return (\n <div className=\"space-y-2 p-density-4\">\n <ul className=\"space-y-1\">\n {items.map((item, index) => (\n <ChecklistItemRow key={item.task_id ?? index} item={item} />\n ))}\n </ul>\n </div>\n );\n}\n\n// ── Fixture / CEL: the failing-step detail (command + CelDetails) ──────────\n\nfunction readCelTrace(detail: unknown): string | undefined {\n if (detail && typeof detail === \"object\" && !Array.isArray(detail)) {\n const value = (detail as Record<string, unknown>).cel_trace;\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return undefined;\n}\n\n// A command step with no CEL assertion stores the whole command result object\n// in `actual` — the command/output is already rendered above, so dumping it\n// again as JSON is noise. Anything a CEL expression compared is shown as-is,\n// structured values included. `hasCelGate` mirrors gavel's own gate: a plain\n// `context.cel_expression`, or a trace recorded in `node.detail` when the\n// expression itself wasn't preserved on `context`.\nfunction comparisonValue(hasCelGate: boolean, value: unknown): unknown {\n if (value === undefined) return undefined;\n if (hasCelGate) return value;\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return undefined;\n return value;\n}\n\n// CEL detail is rendered only for a failing node: the expression and the\n// values it saw are what explain the verdict.\nexport function CelDetails({ node }: { node: Test }) {\n if (node.passed) return null;\n const context = node.context as FixtureContext | undefined;\n const vars = context?.cel_vars ?? {};\n const expression = readCelTrace(node.detail) || context?.cel_expression;\n const hasCelGate = !!expression;\n const expected = comparisonValue(hasCelGate, context?.expected);\n const actual = comparisonValue(hasCelGate, context?.actual);\n const hasComparison = expected !== undefined || actual !== undefined;\n if (!expression && Object.keys(vars).length === 0 && !hasComparison) return null;\n return (\n <Expectation\n check={expression}\n checkLabel=\"expression\"\n vars={vars}\n expected={expected}\n actual={actual}\n />\n );\n}\n\nfunction rawStepDetail(rest: Record<string, unknown>): Record<string, unknown> | undefined {\n return Object.keys(rest).length > 0 ? rest : undefined;\n}\n\nexport function FixtureDetail({ node, renderWait }: { node: Test; renderWait?: (wait: WaitDetail) => ReactNode }) {\n const context = node.context as FixtureContext | undefined;\n const command = context?.command ?? node.command;\n const cwd = context?.cwd ?? node.work_dir;\n const stepDetail = readStepDetail(node.detail);\n // A typed step shows its own sections, so the raw block keeps only what they don't cover.\n const rawDetail = stepDetail.kind === \"step\" ? rawStepDetail(stepDetail.step.rest) : node.detail;\n return (\n <div className=\"space-y-4 p-density-4\">\n {node.message && (\n <p className=\"whitespace-pre-wrap break-words text-sm\">{node.message}</p>\n )}\n {command && (\n <div className=\"min-w-0 space-y-1\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Command</div>\n <code className=\"block overflow-x-auto whitespace-pre rounded bg-muted px-2 py-1.5 text-xs\">\n {command}\n </code>\n <div className=\"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground\">\n {cwd && <span>in {cwd}</span>}\n {typeof context?.exit_code === \"number\" && (\n <span className={context.exit_code === 0 ? undefined : \"text-red-600\"}>\n exit {context.exit_code}\n </span>\n )}\n </div>\n </div>\n )}\n <TestOutput node={node} />\n <CelDetails node={node} />\n {stepDetail.kind === \"step\" && <StepKindSections step={stepDetail.step} {...(renderWait ? { renderWait } : {})} />}\n {stepDetail.kind === \"invalid\" && <MalformedStepDetail error={stepDetail.error} />}\n {rawDetail != null && (\n <div className=\"space-y-1\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Detail</div>\n <JsonView data={rawDetail} />\n </div>\n )}\n </div>\n );\n}\n"],"names":["jsxs","jsx","OutcomeIcon","Expectation","readStepDetail","TestOutput","StepKindSections","MalformedStepDetail","JsonView"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { ReactNode } from 'react';
2
+ import { WaitDetail } from './stepKind.js';
1
3
  import { Test } from '../test-runner/index.js';
2
4
  /** Renders every checklist item for the "Acceptance criteria" parent, or the
3
5
  * single item itself when a leaf criterion is selected directly. */
@@ -7,7 +9,8 @@ export declare function ChecklistDetail({ node }: {
7
9
  export declare function CelDetails({ node }: {
8
10
  node: Test;
9
11
  }): import("react").JSX.Element | null;
10
- export declare function FixtureDetail({ node }: {
12
+ export declare function FixtureDetail({ node, renderWait }: {
11
13
  node: Test;
14
+ renderWait?: (wait: WaitDetail) => ReactNode;
12
15
  }): import("react").JSX.Element;
13
16
  //# sourceMappingURL=adapterViews.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapterViews.d.ts","sourceRoot":"","sources":["../../../src/data/verification/adapterViews.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAc,KAAK,IAAI,EAAuB,MAAM,gBAAgB,CAAC;AAiC5E;qEACqE;AACrE,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,+BAWvD;AAoCD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,sCA4ClD;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,+BAmCrD"}
1
+ {"version":3,"file":"adapterViews.d.ts","sourceRoot":"","sources":["../../../src/data/verification/adapterViews.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,EAKL,KAAK,IAAI,EAEV,MAAM,gBAAgB,CAAC;AAwBxB;qEACqE;AACrE,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,+BAWvD;AA2BD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,sCAmBlD;AAMD,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,SAAS,CAAA;CAAE,+BAwC/G"}
@@ -1,25 +1,18 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { cn } from "../../lib/utils.js";
3
- import { Icon } from "../Icon.js";
4
2
  import { JsonView } from "../JsonView.js";
3
+ import { readStepDetail } from "./stepKind.js";
4
+ import { StepKindSections, MalformedStepDetail } from "./stepKindViews.js";
5
5
  import { TestOutput } from "../test-runner/TestFailureDetail.js";
6
- import { UiPause } from "../../icons/components/UiPause.js";
7
- import { UiError } from "../../icons/components/UiError.js";
8
- import { UiPass } from "../../icons/components/UiPass.js";
9
- function checklistItemState(item) {
6
+ import { OutcomeIcon } from "../test-runner/MarkIcons.js";
7
+ import { Expectation } from "../test-runner/Expectation.js";
8
+ function checklistItemOutcome(item) {
10
9
  if (item.failed) return "failed";
11
10
  if (item.passed) return "passed";
12
11
  return "pending";
13
12
  }
14
- const CHECKLIST_ICONS = {
15
- passed: { icon: UiPass, tone: "text-emerald-600" },
16
- failed: { icon: UiError, tone: "text-red-600" },
17
- pending: { icon: UiPause, tone: "text-muted-foreground" }
18
- };
19
13
  function ChecklistItemRow({ item }) {
20
- const { icon, tone } = CHECKLIST_ICONS[checklistItemState(item)];
21
14
  return /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-1.5 text-xs", children: [
22
- /* @__PURE__ */ jsx(Icon, { icon, className: cn("mt-0.5 shrink-0 text-sm", tone) }),
15
+ /* @__PURE__ */ jsx(OutcomeIcon, { outcome: checklistItemOutcome(item), className: "mt-0.5 text-sm" }),
23
16
  /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
24
17
  item.name,
25
18
  item.message ? /* @__PURE__ */ jsx("span", { className: "block text-[11px] text-muted-foreground", children: item.message }) : null
@@ -43,47 +36,36 @@ function comparisonValue(hasCelGate, value) {
43
36
  if (value !== null && typeof value === "object" && !Array.isArray(value)) return void 0;
44
37
  return value;
45
38
  }
46
- function formatCelValue(value) {
47
- if (typeof value === "string") return value;
48
- try {
49
- return JSON.stringify(value);
50
- } catch {
51
- return String(value);
52
- }
53
- }
54
39
  function CelDetails({ node }) {
55
40
  if (node.passed) return null;
56
41
  const context = node.context;
57
- const vars = Object.entries((context == null ? void 0 : context.cel_vars) ?? {});
42
+ const vars = (context == null ? void 0 : context.cel_vars) ?? {};
58
43
  const expression = readCelTrace(node.detail) || (context == null ? void 0 : context.cel_expression);
59
44
  const hasCelGate = !!expression;
60
45
  const expected = comparisonValue(hasCelGate, context == null ? void 0 : context.expected);
61
46
  const actual = comparisonValue(hasCelGate, context == null ? void 0 : context.actual);
62
47
  const hasComparison = expected !== void 0 || actual !== void 0;
63
- if (!expression && vars.length === 0 && !hasComparison) return null;
64
- return /* @__PURE__ */ jsxs("div", { className: "space-y-1 rounded border border-border bg-muted/30 px-2 py-1.5", children: [
65
- expression && /* @__PURE__ */ jsxs("div", { children: [
66
- /* @__PURE__ */ jsx("span", { className: "text-[10px] uppercase text-muted-foreground", children: "expression" }),
67
- /* @__PURE__ */ jsx("code", { className: "block overflow-x-auto whitespace-pre text-[11px]", children: expression })
68
- ] }),
69
- vars.length > 0 && /* @__PURE__ */ jsx("table", { className: "w-full table-fixed text-[11px]", children: /* @__PURE__ */ jsx("tbody", { children: vars.map(([name, value]) => /* @__PURE__ */ jsxs("tr", { className: "align-top", children: [
70
- /* @__PURE__ */ jsx("td", { className: "w-1/3 truncate pr-2 font-medium text-muted-foreground", children: name }),
71
- /* @__PURE__ */ jsx("td", { className: "break-words font-mono", children: formatCelValue(value) })
72
- ] }, name)) }) }),
73
- expected !== void 0 && /* @__PURE__ */ jsxs("div", { className: "text-[11px]", children: [
74
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "expected " }),
75
- /* @__PURE__ */ jsx("span", { className: "font-mono", children: formatCelValue(expected) })
76
- ] }),
77
- actual !== void 0 && /* @__PURE__ */ jsxs("div", { className: "text-[11px]", children: [
78
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "actual " }),
79
- /* @__PURE__ */ jsx("span", { className: "font-mono", children: formatCelValue(actual) })
80
- ] })
81
- ] });
48
+ if (!expression && Object.keys(vars).length === 0 && !hasComparison) return null;
49
+ return /* @__PURE__ */ jsx(
50
+ Expectation,
51
+ {
52
+ check: expression,
53
+ checkLabel: "expression",
54
+ vars,
55
+ expected,
56
+ actual
57
+ }
58
+ );
59
+ }
60
+ function rawStepDetail(rest) {
61
+ return Object.keys(rest).length > 0 ? rest : void 0;
82
62
  }
83
- function FixtureDetail({ node }) {
63
+ function FixtureDetail({ node, renderWait }) {
84
64
  const context = node.context;
85
65
  const command = (context == null ? void 0 : context.command) ?? node.command;
86
66
  const cwd = (context == null ? void 0 : context.cwd) ?? node.work_dir;
67
+ const stepDetail = readStepDetail(node.detail);
68
+ const rawDetail = stepDetail.kind === "step" ? rawStepDetail(stepDetail.step.rest) : node.detail;
87
69
  return /* @__PURE__ */ jsxs("div", { className: "space-y-4 p-density-4", children: [
88
70
  node.message && /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap break-words text-sm", children: node.message }),
89
71
  command && /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-1", children: [
@@ -102,9 +84,11 @@ function FixtureDetail({ node }) {
102
84
  ] }),
103
85
  /* @__PURE__ */ jsx(TestOutput, { node }),
104
86
  /* @__PURE__ */ jsx(CelDetails, { node }),
105
- node.detail != null && /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
87
+ stepDetail.kind === "step" && /* @__PURE__ */ jsx(StepKindSections, { step: stepDetail.step, ...renderWait ? { renderWait } : {} }),
88
+ stepDetail.kind === "invalid" && /* @__PURE__ */ jsx(MalformedStepDetail, { error: stepDetail.error }),
89
+ rawDetail != null && /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
106
90
  /* @__PURE__ */ jsx("div", { className: "text-[10px] uppercase tracking-wide text-muted-foreground", children: "Detail" }),
107
- /* @__PURE__ */ jsx(JsonView, { data: node.detail })
91
+ /* @__PURE__ */ jsx(JsonView, { data: rawDetail })
108
92
  ] })
109
93
  ] });
110
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adapterViews.js","sources":["../../../src/data/verification/adapterViews.tsx"],"sourcesContent":["// Detail-body components for the verification node adapters. Split from\n// adapters.ts (react/only-export-components: a file mixing component\n// declarations with the plain TestNodeAdapter/registry exports loses Fast\n// Refresh). Ported from gavel's VerificationStepOutput.tsx (the checklist list\n// and the CelDetails block).\n\nimport { cn } from \"../../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport { UiError, UiPass, UiPause } from \"../../icons\";\nimport { JsonView } from \"../JsonView\";\nimport { TestOutput, type Test, type FixtureContext } from \"../test-runner\";\n\n// ── Checklist: the synthesized \"Acceptance criteria\" node and its items ────\n\ntype ChecklistState = \"passed\" | \"failed\" | \"pending\";\n\nfunction checklistItemState(item: Test): ChecklistState {\n if (item.failed) return \"failed\";\n if (item.passed) return \"passed\";\n return \"pending\";\n}\n\nconst CHECKLIST_ICONS: Record<ChecklistState, { icon: StaticIconComponent; tone: string }> = {\n passed: { icon: UiPass, tone: \"text-emerald-600\" },\n failed: { icon: UiError, tone: \"text-red-600\" },\n pending: { icon: UiPause, tone: \"text-muted-foreground\" },\n};\n\nfunction ChecklistItemRow({ item }: { item: Test }) {\n const { icon, tone } = CHECKLIST_ICONS[checklistItemState(item)];\n return (\n <li className=\"flex items-start gap-1.5 text-xs\">\n <Icon icon={icon} className={cn(\"mt-0.5 shrink-0 text-sm\", tone)} />\n <span className=\"min-w-0\">\n {item.name}\n {item.message ? (\n <span className=\"block text-[11px] text-muted-foreground\">{item.message}</span>\n ) : null}\n </span>\n </li>\n );\n}\n\n/** Renders every checklist item for the \"Acceptance criteria\" parent, or the\n * single item itself when a leaf criterion is selected directly. */\nexport function ChecklistDetail({ node }: { node: Test }) {\n const items = node.children && node.children.length > 0 ? node.children : [node];\n return (\n <div className=\"space-y-2 p-density-4\">\n <ul className=\"space-y-1\">\n {items.map((item, index) => (\n <ChecklistItemRow key={item.task_id ?? index} item={item} />\n ))}\n </ul>\n </div>\n );\n}\n\n// ── Fixture / CEL: the failing-step detail (command + CelDetails) ──────────\n\nfunction readCelTrace(detail: unknown): string | undefined {\n if (detail && typeof detail === \"object\" && !Array.isArray(detail)) {\n const value = (detail as Record<string, unknown>).cel_trace;\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return undefined;\n}\n\n// A command step with no CEL assertion stores the whole command result object\n// in `actual` — the command/output is already rendered above, so dumping it\n// again as JSON is noise. Anything a CEL expression compared is shown as-is,\n// structured values included. `hasCelGate` mirrors gavel's own gate: a plain\n// `context.cel_expression`, or a trace recorded in `node.detail` when the\n// expression itself wasn't preserved on `context`.\nfunction comparisonValue(hasCelGate: boolean, value: unknown): unknown {\n if (value === undefined) return undefined;\n if (hasCelGate) return value;\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return undefined;\n return value;\n}\n\nfunction formatCelValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n// CEL detail is rendered only for a failing node: the expression and the\n// values it saw are what explain the verdict.\nexport function CelDetails({ node }: { node: Test }) {\n if (node.passed) return null;\n const context = node.context as FixtureContext | undefined;\n const vars = Object.entries(context?.cel_vars ?? {});\n const expression = readCelTrace(node.detail) || context?.cel_expression;\n const hasCelGate = !!expression;\n const expected = comparisonValue(hasCelGate, context?.expected);\n const actual = comparisonValue(hasCelGate, context?.actual);\n const hasComparison = expected !== undefined || actual !== undefined;\n if (!expression && vars.length === 0 && !hasComparison) return null;\n return (\n <div className=\"space-y-1 rounded border border-border bg-muted/30 px-2 py-1.5\">\n {expression && (\n <div>\n <span className=\"text-[10px] uppercase text-muted-foreground\">expression</span>\n <code className=\"block overflow-x-auto whitespace-pre text-[11px]\">{expression}</code>\n </div>\n )}\n {vars.length > 0 && (\n <table className=\"w-full table-fixed text-[11px]\">\n <tbody>\n {vars.map(([name, value]) => (\n <tr key={name} className=\"align-top\">\n <td className=\"w-1/3 truncate pr-2 font-medium text-muted-foreground\">{name}</td>\n <td className=\"break-words font-mono\">{formatCelValue(value)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n {expected !== undefined && (\n <div className=\"text-[11px]\">\n <span className=\"text-muted-foreground\">expected </span>\n <span className=\"font-mono\">{formatCelValue(expected)}</span>\n </div>\n )}\n {actual !== undefined && (\n <div className=\"text-[11px]\">\n <span className=\"text-muted-foreground\">actual </span>\n <span className=\"font-mono\">{formatCelValue(actual)}</span>\n </div>\n )}\n </div>\n );\n}\n\nexport function FixtureDetail({ node }: { node: Test }) {\n const context = node.context as FixtureContext | undefined;\n const command = context?.command ?? node.command;\n const cwd = context?.cwd ?? node.work_dir;\n return (\n <div className=\"space-y-4 p-density-4\">\n {node.message && (\n <p className=\"whitespace-pre-wrap break-words text-sm\">{node.message}</p>\n )}\n {command && (\n <div className=\"min-w-0 space-y-1\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Command</div>\n <code className=\"block overflow-x-auto whitespace-pre rounded bg-muted px-2 py-1.5 text-xs\">\n {command}\n </code>\n <div className=\"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground\">\n {cwd && <span>in {cwd}</span>}\n {typeof context?.exit_code === \"number\" && (\n <span className={context.exit_code === 0 ? undefined : \"text-red-600\"}>\n exit {context.exit_code}\n </span>\n )}\n </div>\n </div>\n )}\n <TestOutput node={node} />\n <CelDetails node={node} />\n {node.detail != null && (\n <div className=\"space-y-1\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Detail</div>\n <JsonView data={node.detail} />\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapterViews.js","sources":["../../../src/data/verification/adapterViews.tsx"],"sourcesContent":["// Detail-body components for the verification node adapters. Split from\n// adapters.ts (react/only-export-components: a file mixing component\n// declarations with the plain TestNodeAdapter/registry exports loses Fast\n// Refresh). Ported from gavel's VerificationStepOutput.tsx (the checklist list\n// and the CelDetails block).\n\nimport type { ReactNode } from \"react\";\nimport { JsonView } from \"../JsonView\";\nimport { readStepDetail, type WaitDetail } from \"./stepKind\";\nimport { MalformedStepDetail, StepKindSections } from \"./stepKindViews\";\nimport {\n Expectation,\n OutcomeIcon,\n TestOutput,\n type FixtureContext,\n type Test,\n type TestOutcome,\n} from \"../test-runner\";\n\n// ── Checklist: the synthesized \"Acceptance criteria\" node and its items ────\n\nfunction checklistItemOutcome(item: Test): TestOutcome {\n if (item.failed) return \"failed\";\n if (item.passed) return \"passed\";\n return \"pending\";\n}\n\nfunction ChecklistItemRow({ item }: { item: Test }) {\n return (\n <li className=\"flex items-start gap-1.5 text-xs\">\n <OutcomeIcon outcome={checklistItemOutcome(item)} className=\"mt-0.5 text-sm\" />\n <span className=\"min-w-0\">\n {item.name}\n {item.message ? (\n <span className=\"block text-[11px] text-muted-foreground\">{item.message}</span>\n ) : null}\n </span>\n </li>\n );\n}\n\n/** Renders every checklist item for the \"Acceptance criteria\" parent, or the\n * single item itself when a leaf criterion is selected directly. */\nexport function ChecklistDetail({ node }: { node: Test }) {\n const items = node.children && node.children.length > 0 ? node.children : [node];\n return (\n <div className=\"space-y-2 p-density-4\">\n <ul className=\"space-y-1\">\n {items.map((item, index) => (\n <ChecklistItemRow key={item.task_id ?? index} item={item} />\n ))}\n </ul>\n </div>\n );\n}\n\n// ── Fixture / CEL: the failing-step detail (command + CelDetails) ──────────\n\nfunction readCelTrace(detail: unknown): string | undefined {\n if (detail && typeof detail === \"object\" && !Array.isArray(detail)) {\n const value = (detail as Record<string, unknown>).cel_trace;\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return undefined;\n}\n\n// A command step with no CEL assertion stores the whole command result object\n// in `actual` — the command/output is already rendered above, so dumping it\n// again as JSON is noise. Anything a CEL expression compared is shown as-is,\n// structured values included. `hasCelGate` mirrors gavel's own gate: a plain\n// `context.cel_expression`, or a trace recorded in `node.detail` when the\n// expression itself wasn't preserved on `context`.\nfunction comparisonValue(hasCelGate: boolean, value: unknown): unknown {\n if (value === undefined) return undefined;\n if (hasCelGate) return value;\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return undefined;\n return value;\n}\n\n// CEL detail is rendered only for a failing node: the expression and the\n// values it saw are what explain the verdict.\nexport function CelDetails({ node }: { node: Test }) {\n if (node.passed) return null;\n const context = node.context as FixtureContext | undefined;\n const vars = context?.cel_vars ?? {};\n const expression = readCelTrace(node.detail) || context?.cel_expression;\n const hasCelGate = !!expression;\n const expected = comparisonValue(hasCelGate, context?.expected);\n const actual = comparisonValue(hasCelGate, context?.actual);\n const hasComparison = expected !== undefined || actual !== undefined;\n if (!expression && Object.keys(vars).length === 0 && !hasComparison) return null;\n return (\n <Expectation\n check={expression}\n checkLabel=\"expression\"\n vars={vars}\n expected={expected}\n actual={actual}\n />\n );\n}\n\nfunction rawStepDetail(rest: Record<string, unknown>): Record<string, unknown> | undefined {\n return Object.keys(rest).length > 0 ? rest : undefined;\n}\n\nexport function FixtureDetail({ node, renderWait }: { node: Test; renderWait?: (wait: WaitDetail) => ReactNode }) {\n const context = node.context as FixtureContext | undefined;\n const command = context?.command ?? node.command;\n const cwd = context?.cwd ?? node.work_dir;\n const stepDetail = readStepDetail(node.detail);\n // A typed step shows its own sections, so the raw block keeps only what they don't cover.\n const rawDetail = stepDetail.kind === \"step\" ? rawStepDetail(stepDetail.step.rest) : node.detail;\n return (\n <div className=\"space-y-4 p-density-4\">\n {node.message && (\n <p className=\"whitespace-pre-wrap break-words text-sm\">{node.message}</p>\n )}\n {command && (\n <div className=\"min-w-0 space-y-1\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Command</div>\n <code className=\"block overflow-x-auto whitespace-pre rounded bg-muted px-2 py-1.5 text-xs\">\n {command}\n </code>\n <div className=\"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground\">\n {cwd && <span>in {cwd}</span>}\n {typeof context?.exit_code === \"number\" && (\n <span className={context.exit_code === 0 ? undefined : \"text-red-600\"}>\n exit {context.exit_code}\n </span>\n )}\n </div>\n </div>\n )}\n <TestOutput node={node} />\n <CelDetails node={node} />\n {stepDetail.kind === \"step\" && <StepKindSections step={stepDetail.step} {...(renderWait ? { renderWait } : {})} />}\n {stepDetail.kind === \"invalid\" && <MalformedStepDetail error={stepDetail.error} />}\n {rawDetail != null && (\n <div className=\"space-y-1\">\n <div className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Detail</div>\n <JsonView data={rawDetail} />\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -2,25 +2,180 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const adapterViews = require("./adapterViews.cjs");
5
+ const stepKindViews = require("./stepKindViews.cjs");
6
+ const verifyReportTests = require("./verifyReportTests.cjs");
7
+ const stepKind = require("./stepKind.cjs");
5
8
  const adapter = require("../test-runner/adapter.cjs");
9
+ const UiTerminal = require("../../icons/components/UiTerminal.cjs");
10
+ const status = require("../test-runner/status.cjs");
6
11
  function isChecklistNode(node) {
7
12
  return node.framework === "checklist";
8
13
  }
14
+ function checklistMark(item) {
15
+ if (item.failed) return "[ ]";
16
+ if (item.passed) return "[x]";
17
+ return "[?]";
18
+ }
19
+ function checklistCopy(node) {
20
+ const items = node.children && node.children.length > 0 ? node.children : [node];
21
+ const lines = items.map(
22
+ (item) => `- ${checklistMark(item)} ${item.name}${item.message ? ` — ${item.message}` : ""}`
23
+ );
24
+ return { brief: [{ title: "Criteria", body: lines.join("\n") }] };
25
+ }
9
26
  const checklistAdapter = {
10
27
  id: "verification-checklist",
11
28
  match: isChecklistNode,
12
- renderDetail: ({ node }) => /* @__PURE__ */ jsxRuntime.jsx(adapterViews.ChecklistDetail, { node })
29
+ renderDetail: ({ node }) => /* @__PURE__ */ jsxRuntime.jsx(adapterViews.ChecklistDetail, { node }),
30
+ copy: ({ node }) => checklistCopy(node)
13
31
  };
14
32
  function isFixtureNode(node) {
15
- return node.context !== void 0;
33
+ return node.context !== void 0 || stepKind.hasStepDetail(node.detail);
34
+ }
35
+ function readCelTrace(detail) {
36
+ if (detail && typeof detail === "object" && !Array.isArray(detail)) {
37
+ const value = detail.cel_trace;
38
+ if (typeof value === "string" && value.length > 0) return value;
39
+ }
40
+ return void 0;
41
+ }
42
+ function comparisonValue(hasCelGate, value) {
43
+ if (value === void 0) return void 0;
44
+ if (hasCelGate) return value;
45
+ if (value !== null && typeof value === "object" && !Array.isArray(value)) return void 0;
46
+ return value;
47
+ }
48
+ function formatValue(value) {
49
+ return typeof value === "string" ? value : JSON.stringify(value, null, 2);
50
+ }
51
+ function commandSection(node, context) {
52
+ const command = (context == null ? void 0 : context.command) ?? node.command;
53
+ if (!command) return [];
54
+ const cwd = (context == null ? void 0 : context.cwd) ?? node.work_dir;
55
+ const exit = context == null ? void 0 : context.exit_code;
56
+ const lines = [`$ ${command}`, cwd && `cwd: ${cwd}`, exit !== void 0 && `exit: ${exit}`];
57
+ return [{ title: "Command", lang: "sh", body: lines.filter(Boolean).join("\n") }];
58
+ }
59
+ function assertionSection(node, context) {
60
+ const expression = context == null ? void 0 : context.cel_expression;
61
+ const trace = readCelTrace(node.detail);
62
+ const hasCelGate = !!(expression || trace);
63
+ const vars = (context == null ? void 0 : context.cel_vars) ?? {};
64
+ const expected = comparisonValue(hasCelGate, context == null ? void 0 : context.expected);
65
+ const actual = comparisonValue(hasCelGate, context == null ? void 0 : context.actual);
66
+ const lines = [
67
+ expression && `expression: ${expression}`,
68
+ trace && `trace:
69
+ ${trace}`,
70
+ Object.keys(vars).length > 0 && `vars: ${formatValue(vars)}`,
71
+ expected !== void 0 && `expected: ${formatValue(expected)}`,
72
+ actual !== void 0 && `actual: ${formatValue(actual)}`
73
+ ].filter(Boolean);
74
+ return lines.length > 0 ? [{ title: "Assertion", body: lines.join("\n") }] : [];
75
+ }
76
+ const OUTCOME_GLYPH = {
77
+ passed: "✓",
78
+ failed: "✗",
79
+ errored: "✗",
80
+ timedout: "⏱",
81
+ warned: "!",
82
+ skipped: "-",
83
+ pending: "○",
84
+ running: "…"
85
+ };
86
+ function childLine(child) {
87
+ var _a;
88
+ const outcome = status.outcomeFor(child);
89
+ const exit = (_a = child.context) == null ? void 0 : _a.exit_code;
90
+ const reason = child.message ?? (exit ? `exit ${exit}` : void 0);
91
+ return `${outcome ? OUTCOME_GLYPH[outcome] : "·"} ${child.name}${reason ? ` — ${reason}` : ""}`;
92
+ }
93
+ function summaryLine(summary) {
94
+ const counts = [
95
+ [summary.Passed, "passed"],
96
+ [summary.Failed, "failed"],
97
+ [summary.Warned, "warned"],
98
+ [summary.Timedout, "timed out"],
99
+ [summary.Skipped, "skipped"],
100
+ [summary.Pending, "pending"],
101
+ [summary.Running, "running"]
102
+ ];
103
+ const parts = counts.filter(([n]) => !!n).map(([n, label]) => `${n} ${label}`);
104
+ return [`${summary.Total} total`, ...parts].join(" · ");
105
+ }
106
+ function resultsSection(node) {
107
+ const lines = [
108
+ ...node.summary ? [summaryLine(node.summary)] : [],
109
+ ...(node.children ?? []).map(childLine)
110
+ ];
111
+ return lines.length > 0 ? [{ title: "Results", body: lines.join("\n") }] : [];
112
+ }
113
+ function fixtureCopy(node) {
114
+ const context = node.context;
115
+ const command = (context == null ? void 0 : context.command) ?? node.command;
116
+ const stepDetail = stepKind.readStepDetail(node.detail);
117
+ return {
118
+ brief: [
119
+ ...commandSection(node, context),
120
+ ...assertionSection(node, context),
121
+ ...stepDetail.kind === "step" ? stepKind.stepKindCopy(stepDetail.step) : [],
122
+ ...resultsSection(node)
123
+ ],
124
+ items: command ? [{ label: "Copy command", icon: UiTerminal.UiTerminal, value: command }] : []
125
+ };
126
+ }
127
+ const FIXTURE_STEP_FRAMEWORKS = /* @__PURE__ */ new Set([
128
+ "exec",
129
+ "query",
130
+ "fixture",
131
+ "test",
132
+ "lint",
133
+ "verify",
134
+ "services",
135
+ "todo",
136
+ "todo_prompt",
137
+ "ai",
138
+ "browser",
139
+ "playwright",
140
+ "agent-browser"
141
+ ]);
142
+ function isFixtureStepNode(node) {
143
+ const framework = node.framework ?? "";
144
+ if (framework === "playwright") return stepKind.hasStepDetail(node.detail);
145
+ return FIXTURE_STEP_FRAMEWORKS.has(framework);
16
146
  }
17
- const fixtureAdapter = {
18
- id: "verification-fixture",
19
- match: isFixtureNode,
20
- renderDetail: ({ node }) => /* @__PURE__ */ jsxRuntime.jsx(adapterViews.FixtureDetail, { node })
147
+ const fixtureStepCopyAdapter = {
148
+ id: "verification-step-copy",
149
+ match: isFixtureStepNode,
150
+ copy: ({ node }) => fixtureCopy(node)
21
151
  };
22
- function verificationAdapters() {
23
- return adapter.createTestRunnerRegistry([checklistAdapter, fixtureAdapter]);
152
+ function verificationAdapters(options = {}) {
153
+ const fixtureAdapter = {
154
+ id: "verification-fixture",
155
+ match: isFixtureNode,
156
+ renderDetail: ({ node }) => /* @__PURE__ */ jsxRuntime.jsx(adapterViews.FixtureDetail, { node, ...options }),
157
+ detailAttempts: ({ node }) => {
158
+ const detail = stepKind.readStepDetail(node.detail);
159
+ if (detail.kind !== "step") return [];
160
+ return detail.step.attempts.map((attempt) => ({
161
+ id: attempt.attempt,
162
+ status: attempt.status,
163
+ ...attempt.durationMs !== void 0 ? { durationMs: attempt.durationMs } : {},
164
+ node: attempt.result ? verifyReportTests.verifyNodeTest(attempt.result) : {
165
+ name: node.name,
166
+ message: `Attempt ${attempt.attempt}: execution evidence was not stored in this report.`,
167
+ detail: { step: detail.step.step }
168
+ }
169
+ }));
170
+ },
171
+ detailTabs: ({ node }) => {
172
+ const detail = stepKind.readStepDetail(node.detail);
173
+ if (detail.kind !== "step" || detail.step.outputs === void 0) return [];
174
+ return [{ id: "outputs", label: "Outputs", render: () => /* @__PURE__ */ jsxRuntime.jsx(stepKindViews.StepOutputs, { outputs: detail.step.outputs }) }];
175
+ },
176
+ copy: ({ node }) => fixtureCopy(node)
177
+ };
178
+ return adapter.createTestRunnerRegistry([checklistAdapter, fixtureAdapter, fixtureStepCopyAdapter]);
24
179
  }
25
180
  exports.verificationAdapters = verificationAdapters;
26
181
  //# sourceMappingURL=adapters.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.cjs","sources":["../../../src/data/verification/adapters.tsx"],"sourcesContent":["// Domain node adapters for VerificationResults: a checklist adapter for the\n// synthesized \"Acceptance criteria\" node and its items, and a fixture/CEL\n// adapter for the failing-step detail. Rendering lives in adapterViews.tsx —\n// split out so this file's only exports are the registry (react/only-export-\n// components forbids mixing component declarations with plain exports).\n\nimport { ChecklistDetail, FixtureDetail } from \"./adapterViews\";\nimport {\n createTestRunnerRegistry,\n type Test,\n type TestNodeAdapter,\n type TestNodeAdapterRegistry,\n} from \"../test-runner\";\n\nfunction isChecklistNode(node: Test): boolean {\n return node.framework === \"checklist\";\n}\n\nconst checklistAdapter: TestNodeAdapter = {\n id: \"verification-checklist\",\n match: isChecklistNode,\n renderDetail: ({ node }) => <ChecklistDetail node={node} />,\n};\n\nfunction isFixtureNode(node: Test): boolean {\n return node.context !== undefined;\n}\n\nconst fixtureAdapter: TestNodeAdapter = {\n id: \"verification-fixture\",\n match: isFixtureNode,\n renderDetail: ({ node }) => <FixtureDetail node={node} />,\n};\n\n/** Default node adapters for VerificationResults: checklist items and\n * fixture/CEL steps. Registration order matters only when a node could match\n * both — a checklist node never carries a `context`, so the two never race. */\nexport function verificationAdapters(): TestNodeAdapterRegistry {\n return createTestRunnerRegistry([checklistAdapter, fixtureAdapter]);\n}\n"],"names":["jsx","ChecklistDetail","FixtureDetail","createTestRunnerRegistry"],"mappings":";;;;;AAcA,SAAS,gBAAgB,MAAqB;AAC5C,SAAO,KAAK,cAAc;AAC5B;AAEA,MAAM,mBAAoC;AAAA,EACxC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,cAAc,CAAC,EAAE,WAAWA,2BAAAA,IAACC,aAAAA,mBAAgB,KAAA,CAAY;AAC3D;AAEA,SAAS,cAAc,MAAqB;AAC1C,SAAO,KAAK,YAAY;AAC1B;AAEA,MAAM,iBAAkC;AAAA,EACtC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,cAAc,CAAC,EAAE,WAAWD,2BAAAA,IAACE,aAAAA,iBAAc,KAAA,CAAY;AACzD;AAKO,SAAS,uBAAgD;AAC9D,SAAOC,iCAAyB,CAAC,kBAAkB,cAAc,CAAC;AACpE;;"}
1
+ {"version":3,"file":"adapters.cjs","sources":["../../../src/data/verification/adapters.tsx"],"sourcesContent":["// Domain node adapters for VerificationResults: a checklist adapter for the\n// synthesized \"Acceptance criteria\" node and its items, and a fixture/CEL\n// adapter for the failing-step detail. Rendering lives in adapterViews.tsx —\n// split out so this file's only exports are the registry (react/only-export-\n// components forbids mixing component declarations with plain exports).\n\nimport type { ReactNode } from \"react\";\nimport { ChecklistDetail, FixtureDetail } from \"./adapterViews\";\nimport { StepOutputs } from \"./stepKindViews\";\nimport { verifyNodeTest } from \"./verifyReportTests\";\nimport { UiTerminal } from \"../../icons\";\nimport { hasStepDetail, readStepDetail, stepKindCopy, type WaitDetail } from \"./stepKind\";\nimport {\n createTestRunnerRegistry,\n outcomeFor,\n type BriefSection,\n type CopySections,\n type FixtureContext,\n type Test,\n type TestNodeAdapter,\n type TestNodeAdapterRegistry,\n type TestOutcome,\n type TestSummary,\n} from \"../test-runner\";\n\nfunction isChecklistNode(node: Test): boolean {\n return node.framework === \"checklist\";\n}\n\nfunction checklistMark(item: Test): string {\n if (item.failed) return \"[ ]\";\n if (item.passed) return \"[x]\";\n return \"[?]\";\n}\n\n/** `- [x]/[ ]/[?] criterion — reason` for each item, or the leaf itself. */\nfunction checklistCopy(node: Test): CopySections {\n const items = node.children && node.children.length > 0 ? node.children : [node];\n const lines = items.map(\n (item) => `- ${checklistMark(item)} ${item.name}${item.message ? ` — ${item.message}` : \"\"}`,\n );\n return { brief: [{ title: \"Criteria\", body: lines.join(\"\\n\") }] };\n}\n\nconst checklistAdapter: TestNodeAdapter = {\n id: \"verification-checklist\",\n match: isChecklistNode,\n renderDetail: ({ node }) => <ChecklistDetail node={node} />,\n copy: ({ node }) => checklistCopy(node),\n};\n\n// A typed step kind (services, todo, …) may report no command or CEL context at\n// all, so `detail.step` claims the node as well.\nfunction isFixtureNode(node: Test): boolean {\n return node.context !== undefined || hasStepDetail(node.detail);\n}\n\n// ── Copy sections for fixture steps (exec / query / table / test / lint) ───\n\nfunction readCelTrace(detail: unknown): string | undefined {\n if (detail && typeof detail === \"object\" && !Array.isArray(detail)) {\n const value = (detail as Record<string, unknown>).cel_trace;\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return undefined;\n}\n\n// Mirrors CelDetails: without a CEL gate, a command step's `actual` is the whole\n// command result object, already covered by the Command section and output.\nfunction comparisonValue(hasCelGate: boolean, value: unknown): unknown {\n if (value === undefined) return undefined;\n if (hasCelGate) return value;\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return undefined;\n return value;\n}\n\nfunction formatValue(value: unknown): string {\n return typeof value === \"string\" ? value : JSON.stringify(value, null, 2);\n}\n\nfunction commandSection(node: Test, context: FixtureContext | undefined): BriefSection[] {\n const command = context?.command ?? node.command;\n if (!command) return [];\n const cwd = context?.cwd ?? node.work_dir;\n const exit = context?.exit_code;\n const lines = [`$ ${command}`, cwd && `cwd: ${cwd}`, exit !== undefined && `exit: ${exit}`];\n return [{ title: \"Command\", lang: \"sh\", body: lines.filter(Boolean).join(\"\\n\") }];\n}\n\nfunction assertionSection(node: Test, context: FixtureContext | undefined): BriefSection[] {\n const expression = context?.cel_expression;\n const trace = readCelTrace(node.detail);\n const hasCelGate = !!(expression || trace);\n const vars = context?.cel_vars ?? {};\n const expected = comparisonValue(hasCelGate, context?.expected);\n const actual = comparisonValue(hasCelGate, context?.actual);\n const lines = [\n expression && `expression: ${expression}`,\n trace && `trace:\\n${trace}`,\n Object.keys(vars).length > 0 && `vars: ${formatValue(vars)}`,\n expected !== undefined && `expected: ${formatValue(expected)}`,\n actual !== undefined && `actual: ${formatValue(actual)}`,\n ].filter(Boolean);\n return lines.length > 0 ? [{ title: \"Assertion\", body: lines.join(\"\\n\") }] : [];\n}\n\nconst OUTCOME_GLYPH: Record<TestOutcome, string> = {\n passed: \"✓\",\n failed: \"✗\",\n errored: \"✗\",\n timedout: \"⏱\",\n warned: \"!\",\n skipped: \"-\",\n pending: \"○\",\n running: \"…\",\n};\n\nfunction childLine(child: Test): string {\n const outcome = outcomeFor(child);\n const exit = (child.context as FixtureContext | undefined)?.exit_code;\n const reason = child.message ?? (exit ? `exit ${exit}` : undefined);\n return `${outcome ? OUTCOME_GLYPH[outcome] : \"·\"} ${child.name}${reason ? ` — ${reason}` : \"\"}`;\n}\n\nfunction summaryLine(summary: TestSummary): string {\n const counts: [number | undefined, string][] = [\n [summary.Passed, \"passed\"],\n [summary.Failed, \"failed\"],\n [summary.Warned, \"warned\"],\n [summary.Timedout, \"timed out\"],\n [summary.Skipped, \"skipped\"],\n [summary.Pending, \"pending\"],\n [summary.Running, \"running\"],\n ];\n const parts = counts.filter(([n]) => !!n).map(([n, label]) => `${n} ${label}`);\n return [`${summary.Total} total`, ...parts].join(\" · \");\n}\n\nfunction resultsSection(node: Test): BriefSection[] {\n const lines = [\n ...(node.summary ? [summaryLine(node.summary)] : []),\n ...(node.children ?? []).map(childLine),\n ];\n return lines.length > 0 ? [{ title: \"Results\", body: lines.join(\"\\n\") }] : [];\n}\n\n/** Command, CEL assertion and per-child verdicts for a fixture step or its parent. */\nfunction fixtureCopy(node: Test): CopySections {\n const context = node.context as FixtureContext | undefined;\n const command = context?.command ?? node.command;\n const stepDetail = readStepDetail(node.detail);\n return {\n brief: [\n ...commandSection(node, context),\n ...assertionSection(node, context),\n ...(stepDetail.kind === \"step\" ? stepKindCopy(stepDetail.step) : []),\n ...resultsSection(node),\n ],\n items: command ? [{ label: \"Copy command\", icon: UiTerminal, value: command }] : [],\n };\n}\n\n// gavel's FixtureResult.Type values plus \"fixture\" (a markdown table of rows)\n// and the typed step kinds. Table and runner-step parents carry no `context`,\n// so the fixture adapter never claims them; this copy-only adapter gives them\n// the same sections. \"playwright\" is also a test framework, so it counts as a\n// step only when the node carries `detail.step`.\nconst FIXTURE_STEP_FRAMEWORKS = new Set([\n \"exec\",\n \"query\",\n \"fixture\",\n \"test\",\n \"lint\",\n \"verify\",\n \"services\",\n \"todo\",\n \"todo_prompt\",\n \"ai\",\n \"browser\",\n \"playwright\",\n \"agent-browser\",\n]);\n\nfunction isFixtureStepNode(node: Test): boolean {\n const framework = node.framework ?? \"\";\n if (framework === \"playwright\") return hasStepDetail(node.detail);\n return FIXTURE_STEP_FRAMEWORKS.has(framework);\n}\n\nconst fixtureStepCopyAdapter: TestNodeAdapter = {\n id: \"verification-step-copy\",\n match: isFixtureStepNode,\n copy: ({ node }) => fixtureCopy(node),\n};\n\n/** Default node adapters for VerificationResults: checklist items and\n * fixture/CEL steps. Registration order matters only when a node could match\n * both — a checklist node never carries a `context`, so the two never race. */\nexport type VerificationAdapterOptions = {\n /** Override the wait section while retaining the fixture's other detail sections. */\n renderWait?: (wait: WaitDetail) => ReactNode;\n};\n\nexport function verificationAdapters(options: VerificationAdapterOptions = {}): TestNodeAdapterRegistry {\n const fixtureAdapter: TestNodeAdapter = {\n id: \"verification-fixture\",\n match: isFixtureNode,\n renderDetail: ({ node }) => <FixtureDetail node={node} {...options} />,\n detailAttempts: ({ node }) => {\n const detail = readStepDetail(node.detail);\n if (detail.kind !== \"step\") return [];\n return detail.step.attempts.map((attempt) => ({\n id: attempt.attempt, status: attempt.status,\n ...(attempt.durationMs !== undefined ? { durationMs: attempt.durationMs } : {}),\n node: attempt.result ? verifyNodeTest(attempt.result) : {\n name: node.name, message: `Attempt ${attempt.attempt}: execution evidence was not stored in this report.`,\n detail: { step: detail.step.step },\n },\n }));\n },\n detailTabs: ({ node }) => {\n const detail = readStepDetail(node.detail);\n if (detail.kind !== \"step\" || detail.step.outputs === undefined) return [];\n return [{ id: \"outputs\", label: \"Outputs\", render: () => <StepOutputs outputs={detail.step.outputs} /> }];\n },\n copy: ({ node }) => fixtureCopy(node),\n };\n return createTestRunnerRegistry([checklistAdapter, fixtureAdapter, fixtureStepCopyAdapter]);\n}\n"],"names":["jsx","ChecklistDetail","hasStepDetail","outcomeFor","readStepDetail","stepKindCopy","UiTerminal","FixtureDetail","verifyNodeTest","StepOutputs","createTestRunnerRegistry"],"mappings":"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"}
@@ -1,6 +1,12 @@
1
+ import { ReactNode } from 'react';
2
+ import { WaitDetail } from './stepKind.js';
1
3
  import { TestNodeAdapterRegistry } from '../test-runner/index.js';
2
4
  /** Default node adapters for VerificationResults: checklist items and
3
5
  * fixture/CEL steps. Registration order matters only when a node could match
4
6
  * both — a checklist node never carries a `context`, so the two never race. */
5
- export declare function verificationAdapters(): TestNodeAdapterRegistry;
7
+ export type VerificationAdapterOptions = {
8
+ /** Override the wait section while retaining the fixture's other detail sections. */
9
+ renderWait?: (wait: WaitDetail) => ReactNode;
10
+ };
11
+ export declare function verificationAdapters(options?: VerificationAdapterOptions): TestNodeAdapterRegistry;
6
12
  //# sourceMappingURL=adapters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/data/verification/adapters.tsx"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAC;AAsBxB;;gFAEgF;AAChF,wBAAgB,oBAAoB,IAAI,uBAAuB,CAE9D"}
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/data/verification/adapters.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAQL,KAAK,uBAAuB,EAG7B,MAAM,gBAAgB,CAAC;AA4KxB;;gFAEgF;AAChF,MAAM,MAAM,0BAA0B,GAAG;IACvC,qFAAqF;IACrF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,SAAS,CAAC;CAC9C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,0BAA+B,GAAG,uBAAuB,CAyBtG"}