@flanksource/clicky-ui 0.3.48 → 0.3.50

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 (444) hide show
  1. package/dist/connections/ConnectionsPage.cjs +219 -0
  2. package/dist/connections/ConnectionsPage.cjs.map +1 -0
  3. package/dist/connections/ConnectionsPage.d.ts +23 -0
  4. package/dist/connections/ConnectionsPage.d.ts.map +1 -0
  5. package/dist/connections/ConnectionsPage.js +219 -0
  6. package/dist/connections/ConnectionsPage.js.map +1 -0
  7. package/dist/connections/connectionActionStatus.cjs +43 -0
  8. package/dist/connections/connectionActionStatus.cjs.map +1 -0
  9. package/dist/connections/connectionActionStatus.d.ts +5 -0
  10. package/dist/connections/connectionActionStatus.d.ts.map +1 -0
  11. package/dist/connections/connectionActionStatus.js +43 -0
  12. package/dist/connections/connectionActionStatus.js.map +1 -0
  13. package/dist/connections/connectionActionTypes.cjs +24 -0
  14. package/dist/connections/connectionActionTypes.cjs.map +1 -0
  15. package/dist/connections/connectionActionTypes.d.ts +36 -0
  16. package/dist/connections/connectionActionTypes.d.ts.map +1 -0
  17. package/dist/connections/connectionActionTypes.js +24 -0
  18. package/dist/connections/connectionActionTypes.js.map +1 -0
  19. package/dist/connections/connectionActions.cjs +11 -0
  20. package/dist/connections/connectionActions.cjs.map +1 -0
  21. package/dist/connections/connectionActions.d.ts +15 -0
  22. package/dist/connections/connectionActions.d.ts.map +1 -0
  23. package/dist/connections/connectionActions.js +11 -0
  24. package/dist/connections/connectionActions.js.map +1 -0
  25. package/dist/connections/connectionDashboard.cjs +185 -0
  26. package/dist/connections/connectionDashboard.cjs.map +1 -0
  27. package/dist/connections/connectionDashboard.d.ts +25 -0
  28. package/dist/connections/connectionDashboard.d.ts.map +1 -0
  29. package/dist/connections/connectionDashboard.js +185 -0
  30. package/dist/connections/connectionDashboard.js.map +1 -0
  31. package/dist/connections/connectionDashboardModel.cjs +43 -0
  32. package/dist/connections/connectionDashboardModel.cjs.map +1 -0
  33. package/dist/connections/connectionDashboardModel.d.ts +75 -0
  34. package/dist/connections/connectionDashboardModel.d.ts.map +1 -0
  35. package/dist/connections/connectionDashboardModel.js +43 -0
  36. package/dist/connections/connectionDashboardModel.js.map +1 -0
  37. package/dist/connections/connectionDashboardRenderer.cjs +21 -0
  38. package/dist/connections/connectionDashboardRenderer.cjs.map +1 -0
  39. package/dist/connections/connectionDashboardRenderer.d.ts +15 -0
  40. package/dist/connections/connectionDashboardRenderer.d.ts.map +1 -0
  41. package/dist/connections/connectionDashboardRenderer.js +21 -0
  42. package/dist/connections/connectionDashboardRenderer.js.map +1 -0
  43. package/dist/connections/connectionDashboardRow.cjs +169 -0
  44. package/dist/connections/connectionDashboardRow.cjs.map +1 -0
  45. package/dist/connections/connectionDashboardRow.d.ts +12 -0
  46. package/dist/connections/connectionDashboardRow.d.ts.map +1 -0
  47. package/dist/connections/connectionDashboardRow.js +169 -0
  48. package/dist/connections/connectionDashboardRow.js.map +1 -0
  49. package/dist/connections/connectionErrorView.cjs +8 -0
  50. package/dist/connections/connectionErrorView.cjs.map +1 -0
  51. package/dist/connections/connectionErrorView.d.ts +4 -0
  52. package/dist/connections/connectionErrorView.d.ts.map +1 -0
  53. package/dist/connections/connectionErrorView.js +8 -0
  54. package/dist/connections/connectionErrorView.js.map +1 -0
  55. package/dist/connections/connectionHealth.cjs +82 -0
  56. package/dist/connections/connectionHealth.cjs.map +1 -0
  57. package/dist/connections/connectionHealth.d.ts +33 -0
  58. package/dist/connections/connectionHealth.d.ts.map +1 -0
  59. package/dist/connections/connectionHealth.js +82 -0
  60. package/dist/connections/connectionHealth.js.map +1 -0
  61. package/dist/connections/connectionLogging.cjs +29 -0
  62. package/dist/connections/connectionLogging.cjs.map +1 -0
  63. package/dist/connections/connectionLogging.d.ts +11 -0
  64. package/dist/connections/connectionLogging.d.ts.map +1 -0
  65. package/dist/connections/connectionLogging.js +29 -0
  66. package/dist/connections/connectionLogging.js.map +1 -0
  67. package/dist/connections/connectionLoggingField.cjs +37 -0
  68. package/dist/connections/connectionLoggingField.cjs.map +1 -0
  69. package/dist/connections/connectionLoggingField.d.ts +12 -0
  70. package/dist/connections/connectionLoggingField.d.ts.map +1 -0
  71. package/dist/connections/connectionLoggingField.js +37 -0
  72. package/dist/connections/connectionLoggingField.js.map +1 -0
  73. package/dist/connections/connectionLoggingModel.cjs +16 -0
  74. package/dist/connections/connectionLoggingModel.cjs.map +1 -0
  75. package/dist/connections/connectionLoggingModel.d.ts +6 -0
  76. package/dist/connections/connectionLoggingModel.d.ts.map +1 -0
  77. package/dist/connections/connectionLoggingModel.js +16 -0
  78. package/dist/connections/connectionLoggingModel.js.map +1 -0
  79. package/dist/connections/connectionResolveView.cjs +24 -0
  80. package/dist/connections/connectionResolveView.cjs.map +1 -0
  81. package/dist/connections/connectionResolveView.d.ts +5 -0
  82. package/dist/connections/connectionResolveView.d.ts.map +1 -0
  83. package/dist/connections/connectionResolveView.js +24 -0
  84. package/dist/connections/connectionResolveView.js.map +1 -0
  85. package/dist/connections/connectionTestButton.cjs +58 -0
  86. package/dist/connections/connectionTestButton.cjs.map +1 -0
  87. package/dist/connections/connectionTestButton.d.ts +6 -0
  88. package/dist/connections/connectionTestButton.d.ts.map +1 -0
  89. package/dist/connections/connectionTestButton.js +58 -0
  90. package/dist/connections/connectionTestButton.js.map +1 -0
  91. package/dist/connections/connectionTestView.cjs +12 -0
  92. package/dist/connections/connectionTestView.cjs.map +1 -0
  93. package/dist/connections/connectionTestView.d.ts +5 -0
  94. package/dist/connections/connectionTestView.d.ts.map +1 -0
  95. package/dist/connections/connectionTestView.js +12 -0
  96. package/dist/connections/connectionTestView.js.map +1 -0
  97. package/dist/connections/connectionsPageModel.cjs +33 -0
  98. package/dist/connections/connectionsPageModel.cjs.map +1 -0
  99. package/dist/connections/connectionsPageModel.d.ts +24 -0
  100. package/dist/connections/connectionsPageModel.d.ts.map +1 -0
  101. package/dist/connections/connectionsPageModel.js +33 -0
  102. package/dist/connections/connectionsPageModel.js.map +1 -0
  103. package/dist/connections/iconProvider.cjs +20 -0
  104. package/dist/connections/iconProvider.cjs.map +1 -0
  105. package/dist/connections/iconProvider.d.ts +7 -0
  106. package/dist/connections/iconProvider.d.ts.map +1 -0
  107. package/dist/connections/iconProvider.js +20 -0
  108. package/dist/connections/iconProvider.js.map +1 -0
  109. package/dist/connections.cjs +45 -0
  110. package/dist/connections.cjs.map +1 -0
  111. package/dist/connections.d.ts +34 -0
  112. package/dist/connections.d.ts.map +1 -0
  113. package/dist/connections.js +45 -0
  114. package/dist/connections.js.map +1 -0
  115. package/dist/data/DataTable.cjs +18 -8
  116. package/dist/data/DataTable.cjs.map +1 -1
  117. package/dist/data/DataTable.d.ts +4 -0
  118. package/dist/data/DataTable.d.ts.map +1 -1
  119. package/dist/data/DataTable.js +18 -8
  120. package/dist/data/DataTable.js.map +1 -1
  121. package/dist/data/TaskManager.cjs +183 -159
  122. package/dist/data/TaskManager.cjs.map +1 -1
  123. package/dist/data/TaskManager.d.ts +3 -1
  124. package/dist/data/TaskManager.d.ts.map +1 -1
  125. package/dist/data/TaskManager.js +185 -161
  126. package/dist/data/TaskManager.js.map +1 -1
  127. package/dist/data/TaskManagerButton.cjs +1 -0
  128. package/dist/data/TaskManagerButton.cjs.map +1 -1
  129. package/dist/data/TaskManagerButton.js +1 -0
  130. package/dist/data/TaskManagerButton.js.map +1 -1
  131. package/dist/data/TaskProgress.cjs +13 -7
  132. package/dist/data/TaskProgress.cjs.map +1 -1
  133. package/dist/data/TaskProgress.d.ts +3 -1
  134. package/dist/data/TaskProgress.d.ts.map +1 -1
  135. package/dist/data/TaskProgress.js +13 -7
  136. package/dist/data/TaskProgress.js.map +1 -1
  137. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +52 -295
  138. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  139. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  140. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +47 -290
  141. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  142. package/dist/data/diagnostics/MetricTile.cjs +44 -0
  143. package/dist/data/diagnostics/MetricTile.cjs.map +1 -0
  144. package/dist/data/diagnostics/MetricTile.d.ts +13 -0
  145. package/dist/data/diagnostics/MetricTile.d.ts.map +1 -0
  146. package/dist/data/diagnostics/MetricTile.js +44 -0
  147. package/dist/data/diagnostics/MetricTile.js.map +1 -0
  148. package/dist/data/diagnostics/StackDumpView.cjs +227 -0
  149. package/dist/data/diagnostics/StackDumpView.cjs.map +1 -0
  150. package/dist/data/diagnostics/StackDumpView.d.ts +53 -0
  151. package/dist/data/diagnostics/StackDumpView.d.ts.map +1 -0
  152. package/dist/data/diagnostics/StackDumpView.js +227 -0
  153. package/dist/data/diagnostics/StackDumpView.js.map +1 -0
  154. package/dist/data/diagnostics/fixtures.d.ts +1 -0
  155. package/dist/data/diagnostics/fixtures.d.ts.map +1 -1
  156. package/dist/data/diagnostics/metric-tone.cjs +18 -0
  157. package/dist/data/diagnostics/metric-tone.cjs.map +1 -0
  158. package/dist/data/diagnostics/metric-tone.d.ts +6 -0
  159. package/dist/data/diagnostics/metric-tone.d.ts.map +1 -0
  160. package/dist/data/diagnostics/metric-tone.js +18 -0
  161. package/dist/data/diagnostics/metric-tone.js.map +1 -0
  162. package/dist/data/diagnostics/stacktrace.cjs +44 -0
  163. package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
  164. package/dist/data/diagnostics/stacktrace.d.ts +7 -0
  165. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -1
  166. package/dist/data/diagnostics/stacktrace.js +44 -0
  167. package/dist/data/diagnostics/stacktrace.js.map +1 -1
  168. package/dist/data/diagnostics/types.d.ts +2 -8
  169. package/dist/data/diagnostics/types.d.ts.map +1 -1
  170. package/dist/data/lint/LintDetail.cjs +339 -0
  171. package/dist/data/lint/LintDetail.cjs.map +1 -0
  172. package/dist/data/lint/LintDetail.d.ts +17 -0
  173. package/dist/data/lint/LintDetail.d.ts.map +1 -0
  174. package/dist/data/lint/LintDetail.js +339 -0
  175. package/dist/data/lint/LintDetail.js.map +1 -0
  176. package/dist/data/lint/LintFilterBar.cjs +103 -0
  177. package/dist/data/lint/LintFilterBar.cjs.map +1 -0
  178. package/dist/data/lint/LintFilterBar.d.ts +16 -0
  179. package/dist/data/lint/LintFilterBar.d.ts.map +1 -0
  180. package/dist/data/lint/LintFilterBar.js +103 -0
  181. package/dist/data/lint/LintFilterBar.js.map +1 -0
  182. package/dist/data/lint/LintResults.cjs +144 -0
  183. package/dist/data/lint/LintResults.cjs.map +1 -0
  184. package/dist/data/lint/LintResults.d.ts +39 -0
  185. package/dist/data/lint/LintResults.d.ts.map +1 -0
  186. package/dist/data/lint/LintResults.fixtures.d.ts +10 -0
  187. package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -0
  188. package/dist/data/lint/LintResults.js +144 -0
  189. package/dist/data/lint/LintResults.js.map +1 -0
  190. package/dist/data/lint/LintTreeNode.cjs +66 -0
  191. package/dist/data/lint/LintTreeNode.cjs.map +1 -0
  192. package/dist/data/lint/LintTreeNode.d.ts +7 -0
  193. package/dist/data/lint/LintTreeNode.d.ts.map +1 -0
  194. package/dist/data/lint/LintTreeNode.js +66 -0
  195. package/dist/data/lint/LintTreeNode.js.map +1 -0
  196. package/dist/data/lint/actions.cjs +195 -0
  197. package/dist/data/lint/actions.cjs.map +1 -0
  198. package/dist/data/lint/actions.d.ts +29 -0
  199. package/dist/data/lint/actions.d.ts.map +1 -0
  200. package/dist/data/lint/actions.js +195 -0
  201. package/dist/data/lint/actions.js.map +1 -0
  202. package/dist/data/lint/grouping-options.cjs +14 -0
  203. package/dist/data/lint/grouping-options.cjs.map +1 -0
  204. package/dist/data/lint/grouping-options.d.ts +9 -0
  205. package/dist/data/lint/grouping-options.d.ts.map +1 -0
  206. package/dist/data/lint/grouping-options.js +14 -0
  207. package/dist/data/lint/grouping-options.js.map +1 -0
  208. package/dist/data/lint/grouping.cjs +450 -0
  209. package/dist/data/lint/grouping.cjs.map +1 -0
  210. package/dist/data/lint/grouping.d.ts +10 -0
  211. package/dist/data/lint/grouping.d.ts.map +1 -0
  212. package/dist/data/lint/grouping.js +450 -0
  213. package/dist/data/lint/grouping.js.map +1 -0
  214. package/dist/data/lint/index.d.ts +10 -0
  215. package/dist/data/lint/index.d.ts.map +1 -0
  216. package/dist/data/lint/paths.cjs +35 -0
  217. package/dist/data/lint/paths.cjs.map +1 -0
  218. package/dist/data/lint/paths.d.ts +13 -0
  219. package/dist/data/lint/paths.d.ts.map +1 -0
  220. package/dist/data/lint/paths.js +35 -0
  221. package/dist/data/lint/paths.js.map +1 -0
  222. package/dist/data/lint/stats.cjs +76 -0
  223. package/dist/data/lint/stats.cjs.map +1 -0
  224. package/dist/data/lint/stats.d.ts +19 -0
  225. package/dist/data/lint/stats.d.ts.map +1 -0
  226. package/dist/data/lint/stats.js +76 -0
  227. package/dist/data/lint/stats.js.map +1 -0
  228. package/dist/data/lint/types.cjs +16 -0
  229. package/dist/data/lint/types.cjs.map +1 -0
  230. package/dist/data/lint/types.d.ts +93 -0
  231. package/dist/data/lint/types.d.ts.map +1 -0
  232. package/dist/data/lint/types.js +16 -0
  233. package/dist/data/lint/types.js.map +1 -0
  234. package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
  235. package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
  236. package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
  237. package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
  238. package/dist/data/test-runner/TestAttemptDetail.js +113 -0
  239. package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
  240. package/dist/data/test-runner/TestAttempts.cjs +36 -0
  241. package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
  242. package/dist/data/test-runner/TestAttempts.d.ts +5 -0
  243. package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
  244. package/dist/data/test-runner/TestAttempts.js +36 -0
  245. package/dist/data/test-runner/TestAttempts.js.map +1 -0
  246. package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
  247. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  248. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  249. package/dist/data/test-runner/TestDetailPanel.js +14 -4
  250. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  251. package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
  252. package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
  253. package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
  254. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  255. package/dist/data/test-runner/TestFailureDetail.js +9 -29
  256. package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
  257. package/dist/data/test-runner/TestRunSummary.cjs +33 -0
  258. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  259. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  260. package/dist/data/test-runner/TestRunSummary.js +34 -1
  261. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  262. package/dist/data/test-runner/TestRunner.cjs +3 -0
  263. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  264. package/dist/data/test-runner/TestRunner.d.ts +8 -1
  265. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  266. package/dist/data/test-runner/TestRunner.js +3 -0
  267. package/dist/data/test-runner/TestRunner.js.map +1 -1
  268. package/dist/data/test-runner/TestTreeNode.cjs +3 -1
  269. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  270. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  271. package/dist/data/test-runner/TestTreeNode.js +3 -1
  272. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  273. package/dist/data/test-runner/adapter.cjs +9 -1
  274. package/dist/data/test-runner/adapter.cjs.map +1 -1
  275. package/dist/data/test-runner/adapter.d.ts +5 -0
  276. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  277. package/dist/data/test-runner/adapter.js +9 -1
  278. package/dist/data/test-runner/adapter.js.map +1 -1
  279. package/dist/data/test-runner/attempts.cjs +62 -0
  280. package/dist/data/test-runner/attempts.cjs.map +1 -0
  281. package/dist/data/test-runner/attempts.d.ts +13 -0
  282. package/dist/data/test-runner/attempts.d.ts.map +1 -0
  283. package/dist/data/test-runner/attempts.js +62 -0
  284. package/dist/data/test-runner/attempts.js.map +1 -0
  285. package/dist/data/test-runner/context.cjs.map +1 -1
  286. package/dist/data/test-runner/context.d.ts +6 -0
  287. package/dist/data/test-runner/context.d.ts.map +1 -1
  288. package/dist/data/test-runner/context.js.map +1 -1
  289. package/dist/data/test-runner/index.d.ts +5 -1
  290. package/dist/data/test-runner/index.d.ts.map +1 -1
  291. package/dist/data/test-runner/marks.cjs +2 -0
  292. package/dist/data/test-runner/marks.cjs.map +1 -1
  293. package/dist/data/test-runner/marks.d.ts.map +1 -1
  294. package/dist/data/test-runner/marks.js +2 -0
  295. package/dist/data/test-runner/marks.js.map +1 -1
  296. package/dist/data/test-runner/process-metrics.cjs +15 -0
  297. package/dist/data/test-runner/process-metrics.cjs.map +1 -0
  298. package/dist/data/test-runner/process-metrics.d.ts +22 -0
  299. package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
  300. package/dist/data/test-runner/process-metrics.js +15 -0
  301. package/dist/data/test-runner/process-metrics.js.map +1 -0
  302. package/dist/data/test-runner/status.cjs +11 -3
  303. package/dist/data/test-runner/status.cjs.map +1 -1
  304. package/dist/data/test-runner/status.d.ts +3 -1
  305. package/dist/data/test-runner/status.d.ts.map +1 -1
  306. package/dist/data/test-runner/status.js +11 -3
  307. package/dist/data/test-runner/status.js.map +1 -1
  308. package/dist/data/test-runner/types.d.ts +14 -0
  309. package/dist/data/test-runner/types.d.ts.map +1 -1
  310. package/dist/data/traces/GoProfileView.cjs +176 -0
  311. package/dist/data/traces/GoProfileView.cjs.map +1 -0
  312. package/dist/data/traces/GoProfileView.d.ts +30 -0
  313. package/dist/data/traces/GoProfileView.d.ts.map +1 -0
  314. package/dist/data/traces/GoProfileView.js +176 -0
  315. package/dist/data/traces/GoProfileView.js.map +1 -0
  316. package/dist/data/traces/ProcessFacetTable.cjs +79 -0
  317. package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
  318. package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
  319. package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
  320. package/dist/data/traces/ProcessFacetTable.js +79 -0
  321. package/dist/data/traces/ProcessFacetTable.js.map +1 -0
  322. package/dist/data/traces/ProcessRecordViews.cjs +41 -0
  323. package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
  324. package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
  325. package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
  326. package/dist/data/traces/ProcessRecordViews.js +41 -0
  327. package/dist/data/traces/ProcessRecordViews.js.map +1 -0
  328. package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
  329. package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
  330. package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
  331. package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
  332. package/dist/data/traces/ProcessTraceDetail.js +316 -0
  333. package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
  334. package/dist/data/traces/ProcessTraceTree.cjs +135 -0
  335. package/dist/data/traces/ProcessTraceTree.cjs.map +1 -0
  336. package/dist/data/traces/ProcessTraceTree.d.ts +41 -0
  337. package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -0
  338. package/dist/data/traces/ProcessTraceTree.js +135 -0
  339. package/dist/data/traces/ProcessTraceTree.js.map +1 -0
  340. package/dist/data/traces/Sparkline.cjs +45 -0
  341. package/dist/data/traces/Sparkline.cjs.map +1 -0
  342. package/dist/data/traces/Sparkline.d.ts +29 -0
  343. package/dist/data/traces/Sparkline.d.ts.map +1 -0
  344. package/dist/data/traces/Sparkline.js +45 -0
  345. package/dist/data/traces/Sparkline.js.map +1 -0
  346. package/dist/data/traces/SqlTraceTable.cjs +104 -0
  347. package/dist/data/traces/SqlTraceTable.cjs.map +1 -0
  348. package/dist/data/traces/SqlTraceTable.d.ts +19 -0
  349. package/dist/data/traces/SqlTraceTable.d.ts.map +1 -0
  350. package/dist/data/traces/SqlTraceTable.js +104 -0
  351. package/dist/data/traces/SqlTraceTable.js.map +1 -0
  352. package/dist/data/traces/TerminalCastPlayer.cjs +162 -0
  353. package/dist/data/traces/TerminalCastPlayer.cjs.map +1 -0
  354. package/dist/data/traces/TerminalCastPlayer.js +162 -0
  355. package/dist/data/traces/TerminalCastPlayer.js.map +1 -0
  356. package/dist/data/traces/TraceHarView.cjs +15 -0
  357. package/dist/data/traces/TraceHarView.cjs.map +1 -0
  358. package/dist/data/traces/TraceHarView.js +15 -0
  359. package/dist/data/traces/TraceHarView.js.map +1 -0
  360. package/dist/data/traces/TraceView.cjs +63 -0
  361. package/dist/data/traces/TraceView.cjs.map +1 -0
  362. package/dist/data/traces/TraceView.d.ts +20 -0
  363. package/dist/data/traces/TraceView.d.ts.map +1 -0
  364. package/dist/data/traces/TraceView.js +63 -0
  365. package/dist/data/traces/TraceView.js.map +1 -0
  366. package/dist/data/traces/TraceWindowList.cjs +117 -0
  367. package/dist/data/traces/TraceWindowList.cjs.map +1 -0
  368. package/dist/data/traces/TraceWindowList.d.ts +48 -0
  369. package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
  370. package/dist/data/traces/TraceWindowList.js +117 -0
  371. package/dist/data/traces/TraceWindowList.js.map +1 -0
  372. package/dist/data/traces/cast.cjs +81 -0
  373. package/dist/data/traces/cast.cjs.map +1 -0
  374. package/dist/data/traces/cast.js +81 -0
  375. package/dist/data/traces/cast.js.map +1 -0
  376. package/dist/data/traces/fixtures.d.ts +25 -1
  377. package/dist/data/traces/fixtures.d.ts.map +1 -1
  378. package/dist/data/traces/har-adapter.cjs +83 -0
  379. package/dist/data/traces/har-adapter.cjs.map +1 -0
  380. package/dist/data/traces/har-adapter.js +83 -0
  381. package/dist/data/traces/har-adapter.js.map +1 -0
  382. package/dist/data/traces/index.d.ts +19 -0
  383. package/dist/data/traces/index.d.ts.map +1 -0
  384. package/dist/data/traces/process-facets.cjs +48 -0
  385. package/dist/data/traces/process-facets.cjs.map +1 -0
  386. package/dist/data/traces/process-facets.d.ts +38 -0
  387. package/dist/data/traces/process-facets.d.ts.map +1 -0
  388. package/dist/data/traces/process-facets.js +48 -0
  389. package/dist/data/traces/process-facets.js.map +1 -0
  390. package/dist/data/traces/process-tree.cjs +85 -0
  391. package/dist/data/traces/process-tree.cjs.map +1 -0
  392. package/dist/data/traces/process-tree.d.ts +40 -0
  393. package/dist/data/traces/process-tree.d.ts.map +1 -0
  394. package/dist/data/traces/process-tree.js +85 -0
  395. package/dist/data/traces/process-tree.js.map +1 -0
  396. package/dist/data/traces/profile-aggregate.cjs +78 -0
  397. package/dist/data/traces/profile-aggregate.cjs.map +1 -0
  398. package/dist/data/traces/profile-aggregate.d.ts +41 -0
  399. package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
  400. package/dist/data/traces/profile-aggregate.js +78 -0
  401. package/dist/data/traces/profile-aggregate.js.map +1 -0
  402. package/dist/data/traces/sql-trace.cjs +39 -0
  403. package/dist/data/traces/sql-trace.cjs.map +1 -0
  404. package/dist/data/traces/sql-trace.d.ts +31 -0
  405. package/dist/data/traces/sql-trace.d.ts.map +1 -0
  406. package/dist/data/traces/sql-trace.js +39 -0
  407. package/dist/data/traces/sql-trace.js.map +1 -0
  408. package/dist/data/traces/stack-checkpoints.cjs +22 -0
  409. package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
  410. package/dist/data/traces/stack-checkpoints.d.ts +18 -0
  411. package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
  412. package/dist/data/traces/stack-checkpoints.js +22 -0
  413. package/dist/data/traces/stack-checkpoints.js.map +1 -0
  414. package/dist/data/traces/terminal-screen.cjs +270 -0
  415. package/dist/data/traces/terminal-screen.cjs.map +1 -0
  416. package/dist/data/traces/terminal-screen.js +270 -0
  417. package/dist/data/traces/terminal-screen.js.map +1 -0
  418. package/dist/data/traces/terminal-timeline.cjs +48 -0
  419. package/dist/data/traces/terminal-timeline.cjs.map +1 -0
  420. package/dist/data/traces/terminal-timeline.js +48 -0
  421. package/dist/data/traces/terminal-timeline.js.map +1 -0
  422. package/dist/data/traces/types.d.ts +121 -8
  423. package/dist/data/traces/types.d.ts.map +1 -1
  424. package/dist/data/verification/adapters.cjs +1 -0
  425. package/dist/data/verification/adapters.cjs.map +1 -1
  426. package/dist/data/verification/adapters.d.ts.map +1 -1
  427. package/dist/data/verification/adapters.js +1 -0
  428. package/dist/data/verification/adapters.js.map +1 -1
  429. package/dist/data/version-info.cjs +3 -3
  430. package/dist/data/version-info.cjs.map +1 -1
  431. package/dist/data/version-info.js +3 -3
  432. package/dist/data/version-info.js.map +1 -1
  433. package/dist/data.cjs +105 -5
  434. package/dist/data.cjs.map +1 -1
  435. package/dist/data.d.ts +5 -0
  436. package/dist/data.d.ts.map +1 -1
  437. package/dist/data.js +101 -1
  438. package/dist/data.js.map +1 -1
  439. package/dist/index.cjs +107 -7
  440. package/dist/index.cjs.map +1 -1
  441. package/dist/index.js +101 -1
  442. package/dist/index.js.map +1 -1
  443. package/dist/styles.css +1 -1
  444. package/package.json +6 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-timeline.cjs","sources":["../../../src/data/traces/terminal-timeline.ts"],"sourcesContent":["import { createScreen, resizeScreen, writeScreen, type TerminalScreen } from \"./terminal-screen\";\nimport type { TerminalEvent, TerminalEventKind } from \"./types\";\n\nconst KINDS: readonly TerminalEventKind[] = [\"o\", \"r\", \"snapshot\", \"exit\"];\nconst DEFAULT_SIZE = { width: 80, height: 24 };\n\nexport type TerminalTimeline = {\n /** Output and resize events in playback order. */\n steps: TerminalEvent[];\n /** The screen of the last snapshot, when the capture settled one. */\n settled: string | undefined;\n exit: TerminalEvent | undefined;\n /** Seconds from the first byte to the last event. */\n duration: number;\n /** The terminal size at the start of the session. */\n width: number;\n height: number;\n};\n\n/** Orders a session's rows and splits them into what playback, the settled screen and the badge need. */\nexport function buildTimeline(events: TerminalEvent[]): TerminalTimeline {\n events.forEach((event, index) => {\n if (!KINDS.includes(event.kind)) throw new Error(`terminal event ${index} has unknown kind \"${event.kind}\"`);\n });\n const ordered = events\n .map((event, index) => ({ event, index }))\n .sort((a, b) => a.event.offset - b.event.offset || a.index - b.index)\n .map(({ event }) => event);\n\n const first = ordered[0];\n if (first && !(first.width > 0 && first.height > 0)) {\n throw new Error(`terminal events carry no terminal size (first row is ${first.width}x${first.height})`);\n }\n return {\n steps: ordered.filter((event) => event.kind === \"o\" || event.kind === \"r\"),\n settled: ordered.findLast((event) => event.kind === \"snapshot\")?.data,\n exit: ordered.findLast((event) => event.kind === \"exit\"),\n duration: ordered.reduce((latest, event) => Math.max(latest, event.offset), 0),\n width: first?.width ?? DEFAULT_SIZE.width,\n height: first?.height ?? DEFAULT_SIZE.height,\n };\n}\n\n/** How many steps have happened by `position` seconds (steps are sorted by offset). */\nexport function stepCountAt(steps: TerminalEvent[], position: number): number {\n let low = 0;\n let high = steps.length;\n while (low < high) {\n const mid = (low + high) >>> 1;\n if (steps[mid]!.offset <= position) low = mid + 1;\n else high = mid;\n }\n return low;\n}\n\n/** A screen and how many steps of its timeline it has applied, so playback only feeds the new ones. */\nexport type ScreenReplay = { screen: TerminalScreen; applied: number };\n\n/** Brings the replay to exactly `count` applied steps, continuing when moving forward and rebuilding when moving back. */\nexport function replayTo(replay: ScreenReplay | undefined, timeline: TerminalTimeline, count: number): ScreenReplay {\n const reuse = replay !== undefined && replay.applied <= count;\n const screen = reuse ? replay.screen : createScreen(timeline.width, timeline.height);\n for (let i = reuse ? replay.applied : 0; i < count; i++) {\n const step = timeline.steps[i]!;\n if (step.kind === \"r\") resizeScreen(screen, step.width, step.height);\n else writeScreen(screen, step.data);\n }\n return reuse && replay.applied === count ? replay : { screen, applied: count };\n}\n"],"names":["createScreen","resizeScreen","writeScreen"],"mappings":";;;AAGA,MAAM,QAAsC,CAAC,KAAK,KAAK,YAAY,MAAM;AACzE,MAAM,eAAe,EAAE,OAAO,IAAI,QAAQ,GAAA;AAgBnC,SAAS,cAAc,QAA2C;;AACvE,SAAO,QAAQ,CAAC,OAAO,UAAU;AAC/B,QAAI,CAAC,MAAM,SAAS,MAAM,IAAI,EAAG,OAAM,IAAI,MAAM,kBAAkB,KAAK,sBAAsB,MAAM,IAAI,GAAG;AAAA,EAC7G,CAAC;AACD,QAAM,UAAU,OACb,IAAI,CAAC,OAAO,WAAW,EAAE,OAAO,MAAA,EAAQ,EACxC,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,SAAS,EAAE,MAAM,UAAU,EAAE,QAAQ,EAAE,KAAK,EACnE,IAAI,CAAC,EAAE,MAAA,MAAY,KAAK;AAE3B,QAAM,QAAQ,QAAQ,CAAC;AACvB,MAAI,SAAS,EAAE,MAAM,QAAQ,KAAK,MAAM,SAAS,IAAI;AACnD,UAAM,IAAI,MAAM,wDAAwD,MAAM,KAAK,IAAI,MAAM,MAAM,GAAG;AAAA,EACxG;AACA,SAAO;AAAA,IACL,OAAO,QAAQ,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO,MAAM,SAAS,GAAG;AAAA,IACzE,UAAS,aAAQ,SAAS,CAAC,UAAU,MAAM,SAAS,UAAU,MAArD,mBAAwD;AAAA,IACjE,MAAM,QAAQ,SAAS,CAAC,UAAU,MAAM,SAAS,MAAM;AAAA,IACvD,UAAU,QAAQ,OAAO,CAAC,QAAQ,UAAU,KAAK,IAAI,QAAQ,MAAM,MAAM,GAAG,CAAC;AAAA,IAC7E,QAAO,+BAAO,UAAS,aAAa;AAAA,IACpC,SAAQ,+BAAO,WAAU,aAAa;AAAA,EAAA;AAE1C;AAGO,SAAS,YAAY,OAAwB,UAA0B;AAC5E,MAAI,MAAM;AACV,MAAI,OAAO,MAAM;AACjB,SAAO,MAAM,MAAM;AACjB,UAAM,MAAO,MAAM,SAAU;AAC7B,QAAI,MAAM,GAAG,EAAG,UAAU,gBAAgB,MAAM;AAAA,QAC3C,QAAO;AAAA,EACd;AACA,SAAO;AACT;AAMO,SAAS,SAAS,QAAkC,UAA4B,OAA6B;AAClH,QAAM,QAAQ,WAAW,UAAa,OAAO,WAAW;AACxD,QAAM,SAAS,QAAQ,OAAO,SAASA,eAAAA,aAAa,SAAS,OAAO,SAAS,MAAM;AACnF,WAAS,IAAI,QAAQ,OAAO,UAAU,GAAG,IAAI,OAAO,KAAK;AACvD,UAAM,OAAO,SAAS,MAAM,CAAC;AAC7B,QAAI,KAAK,SAAS,IAAKC,gBAAAA,aAAa,QAAQ,KAAK,OAAO,KAAK,MAAM;AAAA,QAC9DC,4BAAY,QAAQ,KAAK,IAAI;AAAA,EACpC;AACA,SAAO,SAAS,OAAO,YAAY,QAAQ,SAAS,EAAE,QAAQ,SAAS,MAAA;AACzE;;;;"}
@@ -0,0 +1,48 @@
1
+ import { createScreen, resizeScreen, writeScreen } from "./terminal-screen.js";
2
+ const KINDS = ["o", "r", "snapshot", "exit"];
3
+ const DEFAULT_SIZE = { width: 80, height: 24 };
4
+ function buildTimeline(events) {
5
+ var _a;
6
+ events.forEach((event, index) => {
7
+ if (!KINDS.includes(event.kind)) throw new Error(`terminal event ${index} has unknown kind "${event.kind}"`);
8
+ });
9
+ const ordered = events.map((event, index) => ({ event, index })).sort((a, b) => a.event.offset - b.event.offset || a.index - b.index).map(({ event }) => event);
10
+ const first = ordered[0];
11
+ if (first && !(first.width > 0 && first.height > 0)) {
12
+ throw new Error(`terminal events carry no terminal size (first row is ${first.width}x${first.height})`);
13
+ }
14
+ return {
15
+ steps: ordered.filter((event) => event.kind === "o" || event.kind === "r"),
16
+ settled: (_a = ordered.findLast((event) => event.kind === "snapshot")) == null ? void 0 : _a.data,
17
+ exit: ordered.findLast((event) => event.kind === "exit"),
18
+ duration: ordered.reduce((latest, event) => Math.max(latest, event.offset), 0),
19
+ width: (first == null ? void 0 : first.width) ?? DEFAULT_SIZE.width,
20
+ height: (first == null ? void 0 : first.height) ?? DEFAULT_SIZE.height
21
+ };
22
+ }
23
+ function stepCountAt(steps, position) {
24
+ let low = 0;
25
+ let high = steps.length;
26
+ while (low < high) {
27
+ const mid = low + high >>> 1;
28
+ if (steps[mid].offset <= position) low = mid + 1;
29
+ else high = mid;
30
+ }
31
+ return low;
32
+ }
33
+ function replayTo(replay, timeline, count) {
34
+ const reuse = replay !== void 0 && replay.applied <= count;
35
+ const screen = reuse ? replay.screen : createScreen(timeline.width, timeline.height);
36
+ for (let i = reuse ? replay.applied : 0; i < count; i++) {
37
+ const step = timeline.steps[i];
38
+ if (step.kind === "r") resizeScreen(screen, step.width, step.height);
39
+ else writeScreen(screen, step.data);
40
+ }
41
+ return reuse && replay.applied === count ? replay : { screen, applied: count };
42
+ }
43
+ export {
44
+ buildTimeline,
45
+ replayTo,
46
+ stepCountAt
47
+ };
48
+ //# sourceMappingURL=terminal-timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-timeline.js","sources":["../../../src/data/traces/terminal-timeline.ts"],"sourcesContent":["import { createScreen, resizeScreen, writeScreen, type TerminalScreen } from \"./terminal-screen\";\nimport type { TerminalEvent, TerminalEventKind } from \"./types\";\n\nconst KINDS: readonly TerminalEventKind[] = [\"o\", \"r\", \"snapshot\", \"exit\"];\nconst DEFAULT_SIZE = { width: 80, height: 24 };\n\nexport type TerminalTimeline = {\n /** Output and resize events in playback order. */\n steps: TerminalEvent[];\n /** The screen of the last snapshot, when the capture settled one. */\n settled: string | undefined;\n exit: TerminalEvent | undefined;\n /** Seconds from the first byte to the last event. */\n duration: number;\n /** The terminal size at the start of the session. */\n width: number;\n height: number;\n};\n\n/** Orders a session's rows and splits them into what playback, the settled screen and the badge need. */\nexport function buildTimeline(events: TerminalEvent[]): TerminalTimeline {\n events.forEach((event, index) => {\n if (!KINDS.includes(event.kind)) throw new Error(`terminal event ${index} has unknown kind \"${event.kind}\"`);\n });\n const ordered = events\n .map((event, index) => ({ event, index }))\n .sort((a, b) => a.event.offset - b.event.offset || a.index - b.index)\n .map(({ event }) => event);\n\n const first = ordered[0];\n if (first && !(first.width > 0 && first.height > 0)) {\n throw new Error(`terminal events carry no terminal size (first row is ${first.width}x${first.height})`);\n }\n return {\n steps: ordered.filter((event) => event.kind === \"o\" || event.kind === \"r\"),\n settled: ordered.findLast((event) => event.kind === \"snapshot\")?.data,\n exit: ordered.findLast((event) => event.kind === \"exit\"),\n duration: ordered.reduce((latest, event) => Math.max(latest, event.offset), 0),\n width: first?.width ?? DEFAULT_SIZE.width,\n height: first?.height ?? DEFAULT_SIZE.height,\n };\n}\n\n/** How many steps have happened by `position` seconds (steps are sorted by offset). */\nexport function stepCountAt(steps: TerminalEvent[], position: number): number {\n let low = 0;\n let high = steps.length;\n while (low < high) {\n const mid = (low + high) >>> 1;\n if (steps[mid]!.offset <= position) low = mid + 1;\n else high = mid;\n }\n return low;\n}\n\n/** A screen and how many steps of its timeline it has applied, so playback only feeds the new ones. */\nexport type ScreenReplay = { screen: TerminalScreen; applied: number };\n\n/** Brings the replay to exactly `count` applied steps, continuing when moving forward and rebuilding when moving back. */\nexport function replayTo(replay: ScreenReplay | undefined, timeline: TerminalTimeline, count: number): ScreenReplay {\n const reuse = replay !== undefined && replay.applied <= count;\n const screen = reuse ? replay.screen : createScreen(timeline.width, timeline.height);\n for (let i = reuse ? replay.applied : 0; i < count; i++) {\n const step = timeline.steps[i]!;\n if (step.kind === \"r\") resizeScreen(screen, step.width, step.height);\n else writeScreen(screen, step.data);\n }\n return reuse && replay.applied === count ? replay : { screen, applied: count };\n}\n"],"names":[],"mappings":";AAGA,MAAM,QAAsC,CAAC,KAAK,KAAK,YAAY,MAAM;AACzE,MAAM,eAAe,EAAE,OAAO,IAAI,QAAQ,GAAA;AAgBnC,SAAS,cAAc,QAA2C;;AACvE,SAAO,QAAQ,CAAC,OAAO,UAAU;AAC/B,QAAI,CAAC,MAAM,SAAS,MAAM,IAAI,EAAG,OAAM,IAAI,MAAM,kBAAkB,KAAK,sBAAsB,MAAM,IAAI,GAAG;AAAA,EAC7G,CAAC;AACD,QAAM,UAAU,OACb,IAAI,CAAC,OAAO,WAAW,EAAE,OAAO,MAAA,EAAQ,EACxC,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,SAAS,EAAE,MAAM,UAAU,EAAE,QAAQ,EAAE,KAAK,EACnE,IAAI,CAAC,EAAE,MAAA,MAAY,KAAK;AAE3B,QAAM,QAAQ,QAAQ,CAAC;AACvB,MAAI,SAAS,EAAE,MAAM,QAAQ,KAAK,MAAM,SAAS,IAAI;AACnD,UAAM,IAAI,MAAM,wDAAwD,MAAM,KAAK,IAAI,MAAM,MAAM,GAAG;AAAA,EACxG;AACA,SAAO;AAAA,IACL,OAAO,QAAQ,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO,MAAM,SAAS,GAAG;AAAA,IACzE,UAAS,aAAQ,SAAS,CAAC,UAAU,MAAM,SAAS,UAAU,MAArD,mBAAwD;AAAA,IACjE,MAAM,QAAQ,SAAS,CAAC,UAAU,MAAM,SAAS,MAAM;AAAA,IACvD,UAAU,QAAQ,OAAO,CAAC,QAAQ,UAAU,KAAK,IAAI,QAAQ,MAAM,MAAM,GAAG,CAAC;AAAA,IAC7E,QAAO,+BAAO,UAAS,aAAa;AAAA,IACpC,SAAQ,+BAAO,WAAU,aAAa;AAAA,EAAA;AAE1C;AAGO,SAAS,YAAY,OAAwB,UAA0B;AAC5E,MAAI,MAAM;AACV,MAAI,OAAO,MAAM;AACjB,SAAO,MAAM,MAAM;AACjB,UAAM,MAAO,MAAM,SAAU;AAC7B,QAAI,MAAM,GAAG,EAAG,UAAU,gBAAgB,MAAM;AAAA,QAC3C,QAAO;AAAA,EACd;AACA,SAAO;AACT;AAMO,SAAS,SAAS,QAAkC,UAA4B,OAA6B;AAClH,QAAM,QAAQ,WAAW,UAAa,OAAO,WAAW;AACxD,QAAM,SAAS,QAAQ,OAAO,SAAS,aAAa,SAAS,OAAO,SAAS,MAAM;AACnF,WAAS,IAAI,QAAQ,OAAO,UAAU,GAAG,IAAI,OAAO,KAAK;AACvD,UAAM,OAAO,SAAS,MAAM,CAAC;AAC7B,QAAI,KAAK,SAAS,IAAK,cAAa,QAAQ,KAAK,OAAO,KAAK,MAAM;AAAA,QAC9D,aAAY,QAAQ,KAAK,IAAI;AAAA,EACpC;AACA,SAAO,SAAS,OAAO,YAAY,QAAQ,SAAS,EAAE,QAAQ,SAAS,MAAA;AACzE;"}
@@ -117,25 +117,138 @@ export type ProcessNodeRow = {
117
117
  startedAt: string;
118
118
  exitedAt?: string | null;
119
119
  lastSeenAt: string;
120
- cpuPercent: number;
120
+ /** CPU % over the last sampling window (per core); unknown until a full window has been observed. */
121
+ cpuPercent?: number | null;
121
122
  rssBytes: number;
122
- peakCpuPercent: number;
123
+ /** Highest known `cpuPercent`; unknown until one is known. */
124
+ peakCpuPercent?: number | null;
123
125
  peakRssBytes: number;
124
- stack?: string;
125
- stackError?: string;
126
+ /**
127
+ * The ways a stack of this process can be collected, as the `stacks` kind's
128
+ * dumpers offer them for it. A destructive transport (sigquit) kills the
129
+ * process. Absent when no dumper can reach it.
130
+ */
131
+ stackTransports?: ProcessStackTransport[];
132
+ /** The environment read once when the node was created, already masked. Absent unless the tree armed `environment`. */
133
+ environment?: ProcessEnv;
134
+ /** Why the environment could not be read. */
135
+ environmentError?: string;
126
136
  };
137
+ /** One way to take a stack dump of a process. */
138
+ export type ProcessStackTransport = {
139
+ /** "inprocess", "native", "pprof", "gops" or "sigquit". */
140
+ transport: string;
141
+ /** Taking the dump terminates the process. */
142
+ destructive: boolean;
143
+ };
144
+ /** The environment of a process: variable name to value. */
145
+ export type ProcessEnv = Record<string, string>;
146
+ /**
147
+ * One file, socket or connection a process holds open, as `process_samples`
148
+ * stores it (the clicky `process.Descriptor` shape).
149
+ */
150
+ export type ProcessDescriptor = {
151
+ fd: string;
152
+ type: string;
153
+ name: string;
154
+ protocol?: string;
155
+ state?: string;
156
+ localAddr?: string;
157
+ remoteAddr?: string;
158
+ port?: number;
159
+ };
160
+ /** The descriptor facets a `process_samples` session can arm. */
161
+ export type ProcessSampleFacet = "openFiles" | "sockets" | "ports" | "connections";
127
162
  /** One `process_samples` record: a process's usage at one tick. */
128
163
  export type ProcessSampleRow = {
129
164
  sampledAt: string;
130
165
  tick: number;
131
166
  key: string;
132
167
  pid: number;
133
- cpuPercent: number;
168
+ /** CPU % over the window ending at this sample; unknown on a process's first sample. */
169
+ cpuPercent?: number | null;
134
170
  memoryPercent: number;
135
171
  rssBytes: number;
172
+ /** Cumulative bytes the process has read from disk. */
173
+ diskReadBytes?: number;
174
+ /** Cumulative bytes the process has written to disk. */
175
+ diskWriteBytes?: number;
176
+ /** Counts, present on every tick of a session that armed the facet and absent otherwise. */
177
+ openFiles?: number;
178
+ sockets?: number;
179
+ ports?: number;
180
+ connections?: number;
181
+ /**
182
+ * The full lists, stored only on a tick where they differ from the process's
183
+ * previously stored list (the first tick always stores them). An empty list is
184
+ * omitted, so a zero count with no list means the list is empty.
185
+ */
186
+ openFileList?: ProcessDescriptor[];
187
+ socketList?: ProcessDescriptor[];
188
+ portList?: ProcessDescriptor[];
189
+ connectionList?: ProcessDescriptor[];
190
+ };
191
+ /** A source location in a stack or profile. */
192
+ export type StackFrame = {
193
+ func: string;
194
+ file: string;
195
+ line: number;
196
+ };
197
+ /** The format of a stack dump: Go goroutines or a native thread sample. Empty on a dump that failed. */
198
+ export type StackFormat = "go" | "native" | "";
199
+ /**
200
+ * One `stacks` record: a goroutine (Go format), or a whole dump (native format,
201
+ * no frames). A dump that failed is one record with `error` set. Records of one
202
+ * checkpoint share a `checkpointId`.
203
+ */
204
+ export type StackRecord = {
205
+ checkpointId: string;
206
+ takenAt: string;
207
+ /** Why the checkpoint was taken, for example a watchdog timeout or a manual request. */
208
+ reason: string;
209
+ /** How it was taken: "inprocess", "native", "pprof", "gops" or "sigquit". */
210
+ transport: string;
211
+ /** The `process_tree` key of the dumped process. */
212
+ key: string;
213
+ pid: number;
214
+ format: StackFormat;
215
+ goroutineId?: number;
216
+ /** The goroutine state, for example "running" or "chan receive". */
217
+ state?: string;
218
+ waitMinutes?: number;
219
+ lockedToThread?: boolean;
220
+ /** Innermost frame first. */
221
+ frames?: StackFrame[];
222
+ createdBy?: StackFrame;
223
+ raw: string;
224
+ error?: string;
225
+ };
226
+ /**
227
+ * What a view needs of a profile sample, whatever produced it (a `goprof` record,
228
+ * later a `jfr` sample): a value of some type and unit, attributed to a stack.
229
+ */
230
+ export type ProfileSample = {
231
+ /** For example "cpu", "samples", "inuse_space" or "alloc_objects". */
232
+ sampleType: string;
233
+ /** For example "nanoseconds", "bytes" or "count". */
234
+ unit: string;
235
+ value: number;
236
+ /** Innermost frame first. */
237
+ frames: StackFrame[];
238
+ };
239
+ /** One `goprof` record: a pprof sample type's value for one stack, at one checkpoint. */
240
+ export type GoProfileRecord = ProfileSample & {
241
+ checkpointId: string;
242
+ takenAt: string;
243
+ reason: string;
244
+ /** Where the profile was read from: "pprof", "gops" or "file". */
245
+ source: string;
246
+ key: string;
247
+ pid: number;
248
+ /** "cpu", "heap", "allocs", "mutex", "block" or "goroutine". */
249
+ profile: string;
250
+ stackHash: string;
136
251
  };
252
+ /** A record of a kind `TraceView` has no dedicated viewer for. */
137
253
  export type TraceRow = Record<string, unknown>;
138
- /** The trace kinds `TraceView` has a dedicated viewer for. */
139
- export declare const TRACE_KINDS: readonly ["http", "http_proxy", "pg_proxy", "sql_statements", "terminal", "process_tree"];
140
- export type TraceKind = (typeof TRACE_KINDS)[number];
141
254
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/traces/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/traces/types.ts"],"names":[],"mappings":"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"}
@@ -79,6 +79,7 @@ const OUTCOME_GLYPH = {
79
79
  errored: "✗",
80
80
  timedout: "⏱",
81
81
  warned: "!",
82
+ aborted: "■",
82
83
  skipped: "-",
83
84
  pending: "○",
84
85
  running: "…"
@@ -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 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
+ {"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 aborted: \"■\",\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":";;;;;;;;;;AAyBA,SAAS,gBAAgB,MAAqB;AAC5C,SAAO,KAAK,cAAc;AAC5B;AAEA,SAAS,cAAc,MAAoB;AACzC,MAAI,KAAK,OAAQ,QAAO;AACxB,MAAI,KAAK,OAAQ,QAAO;AACxB,SAAO;AACT;AAGA,SAAS,cAAc,MAA0B;AAC/C,QAAM,QAAQ,KAAK,YAAY,KAAK,SAAS,SAAS,IAAI,KAAK,WAAW,CAAC,IAAI;AAC/E,QAAM,QAAQ,MAAM;AAAA,IAClB,CAAC,SAAS,KAAK,cAAc,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,OAAO,KAAK,EAAE;AAAA,EAAA;AAE5F,SAAO,EAAE,OAAO,CAAC,EAAE,OAAO,YAAY,MAAM,MAAM,KAAK,IAAI,EAAA,CAAG,EAAA;AAChE;AAEA,MAAM,mBAAoC;AAAA,EACxC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,cAAc,CAAC,EAAE,WAAWA,2BAAAA,IAACC,aAAAA,mBAAgB,MAAY;AAAA,EACzD,MAAM,CAAC,EAAE,KAAA,MAAW,cAAc,IAAI;AACxC;AAIA,SAAS,cAAc,MAAqB;AAC1C,SAAO,KAAK,YAAY,UAAaC,SAAAA,cAAc,KAAK,MAAM;AAChE;AAIA,SAAS,aAAa,QAAqC;AACzD,MAAI,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,GAAG;AAClE,UAAM,QAAS,OAAmC;AAClD,QAAI,OAAO,UAAU,YAAY,MAAM,SAAS,EAAG,QAAO;AAAA,EAC5D;AACA,SAAO;AACT;AAIA,SAAS,gBAAgB,YAAqB,OAAyB;AACrE,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,WAAY,QAAO;AACvB,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjF,SAAO;AACT;AAEA,SAAS,YAAY,OAAwB;AAC3C,SAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,OAAO,MAAM,CAAC;AAC1E;AAEA,SAAS,eAAe,MAAY,SAAqD;AACvF,QAAM,WAAU,mCAAS,YAAW,KAAK;AACzC,MAAI,CAAC,QAAS,QAAO,CAAA;AACrB,QAAM,OAAM,mCAAS,QAAO,KAAK;AACjC,QAAM,OAAO,mCAAS;AACtB,QAAM,QAAQ,CAAC,KAAK,OAAO,IAAI,OAAO,QAAQ,GAAG,IAAI,SAAS,UAAa,SAAS,IAAI,EAAE;AAC1F,SAAO,CAAC,EAAE,OAAO,WAAW,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,EAAE,KAAK,IAAI,GAAG;AAClF;AAEA,SAAS,iBAAiB,MAAY,SAAqD;AACzF,QAAM,aAAa,mCAAS;AAC5B,QAAM,QAAQ,aAAa,KAAK,MAAM;AACtC,QAAM,aAAa,CAAC,EAAE,cAAc;AACpC,QAAM,QAAO,mCAAS,aAAY,CAAA;AAClC,QAAM,WAAW,gBAAgB,YAAY,mCAAS,QAAQ;AAC9D,QAAM,SAAS,gBAAgB,YAAY,mCAAS,MAAM;AAC1D,QAAM,QAAQ;AAAA,IACZ,cAAc,eAAe,UAAU;AAAA,IACvC,SAAS;AAAA,EAAW,KAAK;AAAA,IACzB,OAAO,KAAK,IAAI,EAAE,SAAS,KAAK,SAAS,YAAY,IAAI,CAAC;AAAA,IAC1D,aAAa,UAAa,aAAa,YAAY,QAAQ,CAAC;AAAA,IAC5D,WAAW,UAAa,WAAW,YAAY,MAAM,CAAC;AAAA,EAAA,EACtD,OAAO,OAAO;AAChB,SAAO,MAAM,SAAS,IAAI,CAAC,EAAE,OAAO,aAAa,MAAM,MAAM,KAAK,IAAI,EAAA,CAAG,IAAI,CAAA;AAC/E;AAEA,MAAM,gBAA6C;AAAA,EACjD,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAEA,SAAS,UAAU,OAAqB;;AACtC,QAAM,UAAUC,OAAAA,WAAW,KAAK;AAChC,QAAM,QAAQ,WAAM,YAAN,mBAA8C;AAC5D,QAAM,SAAS,MAAM,YAAY,OAAO,QAAQ,IAAI,KAAK;AACzD,SAAO,GAAG,UAAU,cAAc,OAAO,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,SAAS,MAAM,MAAM,KAAK,EAAE;AAC/F;AAEA,SAAS,YAAY,SAA8B;AACjD,QAAM,SAAyC;AAAA,IAC7C,CAAC,QAAQ,QAAQ,QAAQ;AAAA,IACzB,CAAC,QAAQ,QAAQ,QAAQ;AAAA,IACzB,CAAC,QAAQ,QAAQ,QAAQ;AAAA,IACzB,CAAC,QAAQ,UAAU,WAAW;AAAA,IAC9B,CAAC,QAAQ,SAAS,SAAS;AAAA,IAC3B,CAAC,QAAQ,SAAS,SAAS;AAAA,IAC3B,CAAC,QAAQ,SAAS,SAAS;AAAA,EAAA;AAE7B,QAAM,QAAQ,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,GAAG,CAAC,IAAI,KAAK,EAAE;AAC7E,SAAO,CAAC,GAAG,QAAQ,KAAK,UAAU,GAAG,KAAK,EAAE,KAAK,KAAK;AACxD;AAEA,SAAS,eAAe,MAA4B;AAClD,QAAM,QAAQ;AAAA,IACZ,GAAI,KAAK,UAAU,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,CAAA;AAAA,IACjD,IAAI,KAAK,YAAY,CAAA,GAAI,IAAI,SAAS;AAAA,EAAA;AAExC,SAAO,MAAM,SAAS,IAAI,CAAC,EAAE,OAAO,WAAW,MAAM,MAAM,KAAK,IAAI,EAAA,CAAG,IAAI,CAAA;AAC7E;AAGA,SAAS,YAAY,MAA0B;AAC7C,QAAM,UAAU,KAAK;AACrB,QAAM,WAAU,mCAAS,YAAW,KAAK;AACzC,QAAM,aAAaC,SAAAA,eAAe,KAAK,MAAM;AAC7C,SAAO;AAAA,IACL,OAAO;AAAA,MACL,GAAG,eAAe,MAAM,OAAO;AAAA,MAC/B,GAAG,iBAAiB,MAAM,OAAO;AAAA,MACjC,GAAI,WAAW,SAAS,SAASC,SAAAA,aAAa,WAAW,IAAI,IAAI,CAAA;AAAA,MACjE,GAAG,eAAe,IAAI;AAAA,IAAA;AAAA,IAExB,OAAO,UAAU,CAAC,EAAE,OAAO,gBAAgB,MAAMC,uBAAY,OAAO,QAAA,CAAS,IAAI,CAAA;AAAA,EAAC;AAEtF;AAOA,MAAM,8CAA8B,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,kBAAkB,MAAqB;AAC9C,QAAM,YAAY,KAAK,aAAa;AACpC,MAAI,cAAc,aAAc,QAAOJ,SAAAA,cAAc,KAAK,MAAM;AAChE,SAAO,wBAAwB,IAAI,SAAS;AAC9C;AAEA,MAAM,yBAA0C;AAAA,EAC9C,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM,CAAC,EAAE,KAAA,MAAW,YAAY,IAAI;AACtC;AAUO,SAAS,qBAAqB,UAAsC,IAA6B;AACtG,QAAM,iBAAkC;AAAA,IACtC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,cAAc,CAAC,EAAE,WAAWF,2BAAAA,IAACO,aAAAA,eAAA,EAAc,MAAa,GAAG,SAAS;AAAA,IACpE,gBAAgB,CAAC,EAAE,WAAW;AAC5B,YAAM,SAASH,SAAAA,eAAe,KAAK,MAAM;AACzC,UAAI,OAAO,SAAS,OAAQ,QAAO,CAAA;AACnC,aAAO,OAAO,KAAK,SAAS,IAAI,CAAC,aAAa;AAAA,QAC5C,IAAI,QAAQ;AAAA,QAAS,QAAQ,QAAQ;AAAA,QACrC,GAAI,QAAQ,eAAe,SAAY,EAAE,YAAY,QAAQ,WAAA,IAAe,CAAA;AAAA,QAC5E,MAAM,QAAQ,SAASI,kBAAAA,eAAe,QAAQ,MAAM,IAAI;AAAA,UACtD,MAAM,KAAK;AAAA,UAAM,SAAS,WAAW,QAAQ,OAAO;AAAA,UACpD,QAAQ,EAAE,MAAM,OAAO,KAAK,KAAA;AAAA,QAAK;AAAA,MACnC,EACA;AAAA,IACJ;AAAA,IACA,YAAY,CAAC,EAAE,WAAW;AACxB,YAAM,SAASJ,SAAAA,eAAe,KAAK,MAAM;AACzC,UAAI,OAAO,SAAS,UAAU,OAAO,KAAK,YAAY,eAAkB,CAAA;AACxE,aAAO,CAAC,EAAE,IAAI,WAAW,OAAO,WAAW,QAAQ,MAAMJ,2BAAAA,IAACS,cAAAA,eAAY,SAAS,OAAO,KAAK,QAAA,CAAS,GAAI;AAAA,IAC1G;AAAA,IACA,MAAM,CAAC,EAAE,KAAA,MAAW,YAAY,IAAI;AAAA,EAAA;AAEtC,SAAOC,QAAAA,yBAAyB,CAAC,kBAAkB,gBAAgB,sBAAsB,CAAC;AAC5F;;"}
@@ -1 +1 @@
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"}
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;AA6KxB;;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"}
@@ -77,6 +77,7 @@ const OUTCOME_GLYPH = {
77
77
  errored: "✗",
78
78
  timedout: "⏱",
79
79
  warned: "!",
80
+ aborted: "■",
80
81
  skipped: "-",
81
82
  pending: "○",
82
83
  running: "…"
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.js","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":[],"mappings":"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"}
1
+ {"version":3,"file":"adapters.js","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 aborted: \"■\",\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":[],"mappings":"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"}
@@ -15,9 +15,9 @@ function detectMode() {
15
15
  }
16
16
  function getVersionInfo() {
17
17
  return {
18
- commit: read(() => "f9879aa9", ""),
19
- tag: read(() => "clicky-ui@0.3.47", ""),
20
- date: read(() => "2026-10-15T09:20:40.620Z", ""),
18
+ commit: read(() => "a8f8882e6", ""),
19
+ tag: read(() => "clicky-ui@0.3.49", ""),
20
+ date: read(() => "2026-10-16T10:31:51.127Z", ""),
21
21
  dirty: read(() => true, false),
22
22
  mode: detectMode()
23
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"version-info.cjs","sources":["../../src/data/version-info.ts"],"sourcesContent":["// Build-time constants injected by Vite `define` (see packages/ui/vite.config.ts).\n// They are absent in dev (Vite serves source without the library build), so every\n// read falls back to a runtime-safe default.\ndeclare const __CLICKY_COMMIT__: string;\ndeclare const __CLICKY_TAG__: string;\ndeclare const __CLICKY_DATE__: string;\ndeclare const __CLICKY_DIRTY__: boolean;\n\nfunction read<T>(getter: () => T, fallback: T): T {\n try {\n return getter();\n } catch {\n return fallback;\n }\n}\n\nexport type RuntimeMode = \"production\" | \"dev\" | \"storybook\";\n\nexport interface VersionInfo {\n commit: string;\n tag: string;\n date: string;\n dirty: boolean;\n mode: RuntimeMode;\n}\n\nfunction detectMode(): RuntimeMode {\n if (read(() => Boolean((import.meta as ImportMeta).env?.STORYBOOK), false)) return \"storybook\";\n if (read(() => Boolean((import.meta as ImportMeta).env?.DEV), false)) return \"dev\";\n return \"production\";\n}\n\n/** Resolve build + runtime version metadata. */\nexport function getVersionInfo(): VersionInfo {\n return {\n commit: read(() => __CLICKY_COMMIT__, \"\"),\n tag: read(() => __CLICKY_TAG__, \"\"),\n date: read(() => __CLICKY_DATE__, \"\"),\n dirty: read(() => __CLICKY_DIRTY__, false),\n mode: detectMode(),\n };\n}\n"],"names":[],"mappings":";;;AAQA,SAAS,KAAQ,QAAiB,UAAgB;AAChD,MAAI;AACF,WAAO,OAAA;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAYA,SAAS,aAA0B;AACjC,MAAI,KAAK,MAAM,QAAS,qEAAgC,SAAS,GAAG,KAAK,EAAG,QAAO;AACnF,MAAI,KAAK,MAAM,QAAS,KAAmC,GAAG,KAAK,EAAG,QAAO;AAC7E,SAAO;AACT;AAGO,SAAS,iBAA8B;AAC5C,SAAO;AAAA,IACL,QAAQ,KAAK,MAAM,YAAmB,EAAE;AAAA,IACxC,KAAK,KAAK,MAAM,oBAAgB,EAAE;AAAA,IAClC,MAAM,KAAK,MAAM,4BAAiB,EAAE;AAAA,IACpC,OAAO,KAAK,MAAM,MAAkB,KAAK;AAAA,IACzC,MAAM,WAAA;AAAA,EAAW;AAErB;;"}
1
+ {"version":3,"file":"version-info.cjs","sources":["../../src/data/version-info.ts"],"sourcesContent":["// Build-time constants injected by Vite `define` (see packages/ui/vite.config.ts).\n// They are absent in dev (Vite serves source without the library build), so every\n// read falls back to a runtime-safe default.\ndeclare const __CLICKY_COMMIT__: string;\ndeclare const __CLICKY_TAG__: string;\ndeclare const __CLICKY_DATE__: string;\ndeclare const __CLICKY_DIRTY__: boolean;\n\nfunction read<T>(getter: () => T, fallback: T): T {\n try {\n return getter();\n } catch {\n return fallback;\n }\n}\n\nexport type RuntimeMode = \"production\" | \"dev\" | \"storybook\";\n\nexport interface VersionInfo {\n commit: string;\n tag: string;\n date: string;\n dirty: boolean;\n mode: RuntimeMode;\n}\n\nfunction detectMode(): RuntimeMode {\n if (read(() => Boolean((import.meta as ImportMeta).env?.STORYBOOK), false)) return \"storybook\";\n if (read(() => Boolean((import.meta as ImportMeta).env?.DEV), false)) return \"dev\";\n return \"production\";\n}\n\n/** Resolve build + runtime version metadata. */\nexport function getVersionInfo(): VersionInfo {\n return {\n commit: read(() => __CLICKY_COMMIT__, \"\"),\n tag: read(() => __CLICKY_TAG__, \"\"),\n date: read(() => __CLICKY_DATE__, \"\"),\n dirty: read(() => __CLICKY_DIRTY__, false),\n mode: detectMode(),\n };\n}\n"],"names":[],"mappings":";;;AAQA,SAAS,KAAQ,QAAiB,UAAgB;AAChD,MAAI;AACF,WAAO,OAAA;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAYA,SAAS,aAA0B;AACjC,MAAI,KAAK,MAAM,QAAS,qEAAgC,SAAS,GAAG,KAAK,EAAG,QAAO;AACnF,MAAI,KAAK,MAAM,QAAS,KAAmC,GAAG,KAAK,EAAG,QAAO;AAC7E,SAAO;AACT;AAGO,SAAS,iBAA8B;AAC5C,SAAO;AAAA,IACL,QAAQ,KAAK,MAAM,aAAmB,EAAE;AAAA,IACxC,KAAK,KAAK,MAAM,oBAAgB,EAAE;AAAA,IAClC,MAAM,KAAK,MAAM,4BAAiB,EAAE;AAAA,IACpC,OAAO,KAAK,MAAM,MAAkB,KAAK;AAAA,IACzC,MAAM,WAAA;AAAA,EAAW;AAErB;;"}
@@ -13,9 +13,9 @@ function detectMode() {
13
13
  }
14
14
  function getVersionInfo() {
15
15
  return {
16
- commit: read(() => "f9879aa9", ""),
17
- tag: read(() => "clicky-ui@0.3.47", ""),
18
- date: read(() => "2026-10-15T09:19:57.913Z", ""),
16
+ commit: read(() => "a8f8882e6", ""),
17
+ tag: read(() => "clicky-ui@0.3.49", ""),
18
+ date: read(() => "2026-10-16T10:31:24.341Z", ""),
19
19
  dirty: read(() => true, false),
20
20
  mode: detectMode()
21
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"version-info.js","sources":["../../src/data/version-info.ts"],"sourcesContent":["// Build-time constants injected by Vite `define` (see packages/ui/vite.config.ts).\n// They are absent in dev (Vite serves source without the library build), so every\n// read falls back to a runtime-safe default.\ndeclare const __CLICKY_COMMIT__: string;\ndeclare const __CLICKY_TAG__: string;\ndeclare const __CLICKY_DATE__: string;\ndeclare const __CLICKY_DIRTY__: boolean;\n\nfunction read<T>(getter: () => T, fallback: T): T {\n try {\n return getter();\n } catch {\n return fallback;\n }\n}\n\nexport type RuntimeMode = \"production\" | \"dev\" | \"storybook\";\n\nexport interface VersionInfo {\n commit: string;\n tag: string;\n date: string;\n dirty: boolean;\n mode: RuntimeMode;\n}\n\nfunction detectMode(): RuntimeMode {\n if (read(() => Boolean((import.meta as ImportMeta).env?.STORYBOOK), false)) return \"storybook\";\n if (read(() => Boolean((import.meta as ImportMeta).env?.DEV), false)) return \"dev\";\n return \"production\";\n}\n\n/** Resolve build + runtime version metadata. */\nexport function getVersionInfo(): VersionInfo {\n return {\n commit: read(() => __CLICKY_COMMIT__, \"\"),\n tag: read(() => __CLICKY_TAG__, \"\"),\n date: read(() => __CLICKY_DATE__, \"\"),\n dirty: read(() => __CLICKY_DIRTY__, false),\n mode: detectMode(),\n };\n}\n"],"names":[],"mappings":";AAQA,SAAS,KAAQ,QAAiB,UAAgB;AAChD,MAAI;AACF,WAAO,OAAA;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAYA,SAAS,aAA0B;AACjC,MAAI,KAAK,MAAM,QAAS,qEAAgC,SAAS,GAAG,KAAK,EAAG,QAAO;AACnF,MAAI,KAAK,MAAM,QAAS,KAAmC,GAAG,KAAK,EAAG,QAAO;AAC7E,SAAO;AACT;AAGO,SAAS,iBAA8B;AAC5C,SAAO;AAAA,IACL,QAAQ,KAAK,MAAM,YAAmB,EAAE;AAAA,IACxC,KAAK,KAAK,MAAM,oBAAgB,EAAE;AAAA,IAClC,MAAM,KAAK,MAAM,4BAAiB,EAAE;AAAA,IACpC,OAAO,KAAK,MAAM,MAAkB,KAAK;AAAA,IACzC,MAAM,WAAA;AAAA,EAAW;AAErB;"}
1
+ {"version":3,"file":"version-info.js","sources":["../../src/data/version-info.ts"],"sourcesContent":["// Build-time constants injected by Vite `define` (see packages/ui/vite.config.ts).\n// They are absent in dev (Vite serves source without the library build), so every\n// read falls back to a runtime-safe default.\ndeclare const __CLICKY_COMMIT__: string;\ndeclare const __CLICKY_TAG__: string;\ndeclare const __CLICKY_DATE__: string;\ndeclare const __CLICKY_DIRTY__: boolean;\n\nfunction read<T>(getter: () => T, fallback: T): T {\n try {\n return getter();\n } catch {\n return fallback;\n }\n}\n\nexport type RuntimeMode = \"production\" | \"dev\" | \"storybook\";\n\nexport interface VersionInfo {\n commit: string;\n tag: string;\n date: string;\n dirty: boolean;\n mode: RuntimeMode;\n}\n\nfunction detectMode(): RuntimeMode {\n if (read(() => Boolean((import.meta as ImportMeta).env?.STORYBOOK), false)) return \"storybook\";\n if (read(() => Boolean((import.meta as ImportMeta).env?.DEV), false)) return \"dev\";\n return \"production\";\n}\n\n/** Resolve build + runtime version metadata. */\nexport function getVersionInfo(): VersionInfo {\n return {\n commit: read(() => __CLICKY_COMMIT__, \"\"),\n tag: read(() => __CLICKY_TAG__, \"\"),\n date: read(() => __CLICKY_DATE__, \"\"),\n dirty: read(() => __CLICKY_DIRTY__, false),\n mode: detectMode(),\n };\n}\n"],"names":[],"mappings":";AAQA,SAAS,KAAQ,QAAiB,UAAgB;AAChD,MAAI;AACF,WAAO,OAAA;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAYA,SAAS,aAA0B;AACjC,MAAI,KAAK,MAAM,QAAS,qEAAgC,SAAS,GAAG,KAAK,EAAG,QAAO;AACnF,MAAI,KAAK,MAAM,QAAS,KAAmC,GAAG,KAAK,EAAG,QAAO;AAC7E,SAAO;AACT;AAGO,SAAS,iBAA8B;AAC5C,SAAO;AAAA,IACL,QAAQ,KAAK,MAAM,aAAmB,EAAE;AAAA,IACxC,KAAK,KAAK,MAAM,oBAAgB,EAAE;AAAA,IAClC,MAAM,KAAK,MAAM,4BAAiB,EAAE;AAAA,IACpC,OAAO,KAAK,MAAM,MAAkB,KAAK;AAAA,IACzC,MAAM,WAAA;AAAA,EAAW;AAErB;"}